diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-07-16 21:57:42 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-07-16 21:57:42 +0100 |
| commit | e16c8ed02a0cb1f733a990d75a9de1bf50cf89bd (patch) | |
| tree | f6e884f103da51c8f9b76a6a76693f8389aee607 /src | |
| parent | 1f1a9f48b39b1fc8afeb62bb6fa0cde50983b60c (diff) | |
Some missing copy constructors / operator= / noncopyable.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/audio_analysis.cc | 21 | ||||
| -rw-r--r-- | src/lib/audio_analysis.h | 4 | ||||
| -rw-r--r-- | src/lib/audio_buffers.cc | 73 | ||||
| -rw-r--r-- | src/lib/audio_buffers.h | 5 | ||||
| -rw-r--r-- | src/lib/job.h | 2 |
5 files changed, 67 insertions, 38 deletions
diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc index e12516620..bc59bccca 100644 --- a/src/lib/audio_analysis.cc +++ b/src/lib/audio_analysis.cc @@ -48,6 +48,27 @@ AudioPoint::AudioPoint (istream& s) } } +AudioPoint::AudioPoint (AudioPoint const & other) +{ + for (int i = 0; i < COUNT; ++i) { + _data[i] = other._data[i]; + } +} + +AudioPoint & +AudioPoint::operator= (AudioPoint const & other) +{ + if (this == &other) { + return *this; + } + + for (int i = 0; i < COUNT; ++i) { + _data[i] = other._data[i]; + } + + return *this; +} + void AudioPoint::write (ostream& s) const { diff --git a/src/lib/audio_analysis.h b/src/lib/audio_analysis.h index d57eba90a..cfc170c84 100644 --- a/src/lib/audio_analysis.h +++ b/src/lib/audio_analysis.h @@ -36,6 +36,8 @@ public: AudioPoint (); AudioPoint (std::istream &); + AudioPoint (AudioPoint const &); + AudioPoint& operator= (AudioPoint const &); void write (std::ostream &) const; @@ -47,7 +49,7 @@ private: float _data[COUNT]; }; -class AudioAnalysis +class AudioAnalysis : public boost::noncopyable { public: AudioAnalysis (int c); diff --git a/src/lib/audio_buffers.cc b/src/lib/audio_buffers.cc index 7b3af91e0..d38730414 100644 --- a/src/lib/audio_buffers.cc +++ b/src/lib/audio_buffers.cc @@ -30,69 +30,70 @@ using boost::shared_ptr; * @param frames Number of frames to reserve space for. */ AudioBuffers::AudioBuffers (int channels, int frames) - : _channels (channels) - , _frames (frames) - , _allocated_frames (frames) { - _data = static_cast<float**> (malloc (_channels * sizeof (float *))); - if (!_data) { - throw bad_alloc (); - } - - for (int i = 0; i < _channels; ++i) { - _data[i] = static_cast<float*> (malloc (frames * sizeof (float))); - if (!_data[i]) { - throw bad_alloc (); - } - } + allocate (channels, frames); } /** Copy constructor. * @param other Other AudioBuffers; data is copied. */ AudioBuffers::AudioBuffers (AudioBuffers const & other) - : _channels (other._channels) - , _frames (other._frames) - , _allocated_frames (other._frames) { - _data = static_cast<float**> (malloc (_channels * sizeof (float *))); - if (!_data) { - throw bad_alloc (); - } - - for (int i = 0; i < _channels; ++i) { - _data[i] = static_cast<float*> (malloc (_frames * sizeof (float))); - if (!_data[i]) { - throw bad_alloc (); - } - memcpy (_data[i], other._data[i], _frames * sizeof (float)); - } + allocate (other._channels, other._frames); + copy_from (&other, other._frames, 0, 0); } /* XXX: it's a shame that this is a copy-and-paste of the above; probably fixable with c++0x. */ AudioBuffers::AudioBuffers (boost::shared_ptr<const AudioBuffers> other) - : _channels (other->_channels) - , _frames (other->_frames) - , _allocated_frames (other->_frames) { + allocate (other->_channels, other->_frames); + copy_from (other.get(), other->_frames, 0, 0); +} + +AudioBuffers & +AudioBuffers::operator= (AudioBuffers const & other) +{ + if (this == &other) { + return *this; + } + + deallocate (); + allocate (other._channels, other._frames); + copy_from (&other, other._frames, 0, 0); + + return *this; +} + +/** AudioBuffers destructor */ +AudioBuffers::~AudioBuffers () +{ + deallocate (); +} + +void +AudioBuffers::allocate (int channels, int frames) +{ + _channels = channels; + _frames = frames; + _allocated_frames = frames; + _data = static_cast<float**> (malloc (_channels * sizeof (float *))); if (!_data) { throw bad_alloc (); } for (int i = 0; i < _channels; ++i) { - _data[i] = static_cast<float*> (malloc (_frames * sizeof (float))); + _data[i] = static_cast<float*> (malloc (frames * sizeof (float))); if (!_data[i]) { throw bad_alloc (); } - memcpy (_data[i], other->_data[i], _frames * sizeof (float)); } } -/** AudioBuffers destructor */ -AudioBuffers::~AudioBuffers () +void +AudioBuffers::deallocate () { for (int i = 0; i < _channels; ++i) { free (_data[i]); diff --git a/src/lib/audio_buffers.h b/src/lib/audio_buffers.h index b450b83ec..6b57bd142 100644 --- a/src/lib/audio_buffers.h +++ b/src/lib/audio_buffers.h @@ -30,6 +30,8 @@ public: AudioBuffers (boost::shared_ptr<const AudioBuffers>); ~AudioBuffers (); + AudioBuffers & operator= (AudioBuffers const &); + void ensure_size (int); float** data () const { @@ -58,6 +60,9 @@ public: void accumulate_frames (AudioBuffers const *, int read_offset, int write_offset, int frames); private: + void allocate (int, int); + void deallocate (); + /** Number of channels */ int _channels; /** Number of frames (where a frame is one sample across all channels) */ diff --git a/src/lib/job.h b/src/lib/job.h index 791a9101b..ce3a87f5e 100644 --- a/src/lib/job.h +++ b/src/lib/job.h @@ -35,7 +35,7 @@ class Film; /** @class Job * @brief A parent class to represent long-running tasks which are run in their own thread. */ -class Job : public boost::enable_shared_from_this<Job> +class Job : public boost::enable_shared_from_this<Job>, public boost::noncopyable { public: Job (boost::shared_ptr<const Film>); |
