GNU Radio 3.4.2 C++ API
msdd_buffer_copy_behaviors.h
Go to the documentation of this file.
00001 #ifndef MSDD_BUFFER_COPY_BEHAVIORS_H_
00002 #define MSDD_BUFFER_COPY_BEHAVIORS_H_
00003 
00004 namespace msdd {
00005         
00006         class BufferCopyBehavior 
00007           {
00008           public: 
00009             virtual void operator() (gr_vector_void_star &a, const void * b, unsigned int output_index, unsigned int nitems) = 0;
00010             virtual ~BufferCopyBehavior() {};
00011           };
00012           
00013         template <class Tin, class Tout> 
00014         class BufferCopyBehaviorGeneric : public BufferCopyBehavior {
00015                 void operator() (gr_vector_void_star &a, const void * b, unsigned int output_index, unsigned int nitems) {
00016                         Tout    *out(&(reinterpret_cast<Tout *>(a[0]))[output_index]);  // sloppy
00017                         const Tin       *in(reinterpret_cast<const Tin *>(b)); // equisloppy
00018                         
00019                     for (unsigned int i = 0; i < nitems; ++i) {
00020                         out[i] = in[i];
00021                     }
00022                 }
00023         };
00024         
00025         template <class Tin>
00026         class BufferCopyBehaviorComplex : public BufferCopyBehavior {
00027                 void operator() (gr_vector_void_star &a, const void * b, unsigned int output_index, unsigned int nitems) {
00028                 gr_complex      *out(&(reinterpret_cast<gr_complex *>(a[0]))[output_index]);    // sloppy
00029                 const Tin       *in(reinterpret_cast<const Tin *>(b)); // equisloppy
00030                 
00031                     for (unsigned int i = 0; i < nitems; ++i) {
00032                         out[i] = gr_complex (in[4*i+1],in[4*i+3]);
00033                     }
00034                 }
00035         };
00036 }
00037 
00038 #endif /*MSDD_BUFFER_COPY_BEHAVIORS_H_*/