X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Faudiographer%2Faudiographer%2Ftype_utils.h;h=c16b0f942a0b2c907b000425ea9a3c0098c1c3a5;hb=16ef78ade0faf1cbdbdb2dc6c4430fb4996c0323;hp=360168d55df417b3bb91a6e71271408404de8d85;hpb=73192bc1a7ea55fa1864dc3826845b15c00dd2ec;p=ardour.git diff --git a/libs/audiographer/audiographer/type_utils.h b/libs/audiographer/audiographer/type_utils.h index 360168d55d..c16b0f942a 100644 --- a/libs/audiographer/audiographer/type_utils.h +++ b/libs/audiographer/audiographer/type_utils.h @@ -1,36 +1,39 @@ #ifndef AUDIOGRAPHER_TYPE_UTILS_H #define AUDIOGRAPHER_TYPE_UTILS_H -#include "audiographer/types.h" #include #include #include #include +#include + +#include "audiographer/visibility.h" +#include "audiographer/types.h" namespace AudioGrapher { /// Non-template base class for TypeUtils -class TypeUtilsBase +class LIBAUDIOGRAPHER_API TypeUtilsBase { protected: - + template - static void do_zero_fill(T * buffer, framecnt_t frames, const boost::integral_constant&) - { std::uninitialized_fill_n (buffer, frames, T()); } + static void do_zero_fill(T * buffer, samplecnt_t samples, const boost::integral_constant&) + { std::uninitialized_fill_n (buffer, samples, T()); } template - static void do_zero_fill(T * buffer, framecnt_t frames, const boost::true_type&) - { memset (buffer, 0, frames * sizeof(T)); } + static void do_zero_fill(T * buffer, samplecnt_t samples, const boost::true_type&) + { memset (buffer, 0, samples * sizeof(T)); } }; /// Utilities for initializing, copying, moving, etc. data template -class TypeUtils : private TypeUtilsBase +class /*LIBAUDIOGRAPHER_API*/ TypeUtils : private TypeUtilsBase { BOOST_STATIC_ASSERT (boost::has_trivial_destructor::value); - - typedef boost::integral_constant::value || boost::is_signed::value> zero_fillable; public: @@ -39,26 +42,26 @@ class TypeUtils : private TypeUtilsBase * if T is not a floating point or signed integer type * \n RT safe */ - inline static void zero_fill (T * buffer, framecnt_t frames) - { do_zero_fill(buffer, frames, zero_fillable()); } - - /** Copies \a frames frames of data from \a source to \a destination + inline static void zero_fill (T * buffer, samplecnt_t samples) + { do_zero_fill(buffer, samples, zero_fillable()); } + + /** Copies \a samples frames of data from \a source to \a destination * The source and destination may NOT overlap. * \n RT safe */ - inline static void copy (T const * source, T * destination, framecnt_t frames) - { std::uninitialized_copy (source, &source[frames], destination); } - - /** Moves \a frames frames of data from \a source to \a destination + inline static void copy (T const * source, T * destination, samplecnt_t samples) + { std::uninitialized_copy (source, &source[samples], destination); } + + /** Moves \a samples frames of data from \a source to \a destination * The source and destination may overlap in any way. * \n RT safe */ - inline static void move (T const * source, T * destination, framecnt_t frames) + inline static void move (T const * source, T * destination, samplecnt_t samples) { if (destination < source) { - std::copy (source, &source[frames], destination); + std::copy (source, &source[samples], destination); } else if (destination > source) { - std::copy_backward (source, &source[frames], destination + frames); + std::copy_backward (source, &source[samples], destination + samples); } } };