Merge branch 'master' into windows
[ardour.git] / libs / audiographer / audiographer / process_context.h
index b73f5d69d5cdf0ec51e8d53bc26311f9d3a95676..15128ab4ea54ea3298c260671d8da0978057c84b 100644 (file)
@@ -15,6 +15,7 @@
 namespace AudioGrapher
 {
 
+
 /**
  * Processing context. Constness only applies to data, not flags
  */
@@ -23,6 +24,9 @@ template <typename T = DefaultSampleType>
 class ProcessContext
   : public Throwing<>
 {
+       // Support older compilers that don't support template base class initialization without template parameters
+       // This will need to be modified if if it's modified above
+       static const ThrowLevel throwLevel = DEFAULT_THROW_LEVEL;
 
        BOOST_STATIC_ASSERT (boost::has_trivial_destructor<T>::value);
 
@@ -43,25 +47,25 @@ public:
        
        /// Normal copy constructor
        ProcessContext (ProcessContext<T> const & other)
-       : _data (other._data), _frames (other._frames), _channels (other._channels), _flags (other._flags)
+               : Throwing<throwLevel>(), _data (other._data), _frames (other._frames), _channels (other._channels), _flags (other._flags)
        { /* No need to validate data */ }
        
        /// "Copy constructor" with unique data, frame and channel count, but copies flags
        template<typename Y>
        ProcessContext (ProcessContext<Y> const & other, T * data, framecnt_t frames, ChannelCount channels)
-               : _data (data), _frames (frames), _channels (channels), _flags (other.flags())
+               : Throwing<throwLevel>(), _data (data), _frames (frames), _channels (channels), _flags (other.flags())
        { validate_data(); }
        
        /// "Copy constructor" with unique data and frame count, but copies channel count and flags
        template<typename Y>
        ProcessContext (ProcessContext<Y> const & other, T * data, framecnt_t frames)
-               : _data (data), _frames (frames), _channels (other.channels()), _flags (other.flags())
+               : Throwing<throwLevel>(), _data (data), _frames (frames), _channels (other.channels()), _flags (other.flags())
        { validate_data(); }
        
        /// "Copy constructor" with unique data, but copies frame and channel count + flags
        template<typename Y>
        ProcessContext (ProcessContext<Y> const & other, T * data)
-               : _data (data), _frames (other.frames()), _channels (other.channels()), _flags (other.flags())
+               : Throwing<throwLevel>(), _data (data), _frames (other.frames()), _channels (other.channels()), _flags (other.flags())
        { /* No need to validate data */ }
        
        /// Make new Context out of the beginning of this context
@@ -121,8 +125,9 @@ protected:
 
 /// A process context that allocates and owns it's data buffer
 template <typename T = DefaultSampleType>
-struct AllocatingProcessContext : public ProcessContext<T>
+class AllocatingProcessContext : public ProcessContext<T>
 {
+public:
        /// Allocates uninitialized memory
        AllocatingProcessContext (framecnt_t frames, ChannelCount channels)
                : ProcessContext<T> (new T[frames], frames, channels) {}