summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-16 21:57:42 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-16 21:57:42 +0100
commite16c8ed02a0cb1f733a990d75a9de1bf50cf89bd (patch)
treef6e884f103da51c8f9b76a6a76693f8389aee607 /src/lib
parent1f1a9f48b39b1fc8afeb62bb6fa0cde50983b60c (diff)
Some missing copy constructors / operator= / noncopyable.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_analysis.cc21
-rw-r--r--src/lib/audio_analysis.h4
-rw-r--r--src/lib/audio_buffers.cc73
-rw-r--r--src/lib/audio_buffers.h5
-rw-r--r--src/lib/job.h2
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>);