msdd6000 source upgraded and enabled
[debian/gnuradio] / gr-msdd6000 / src / msdd_buffer_copy_behaviors.h
1 #ifndef MSDD_BUFFER_COPY_BEHAVIORS_H_
2 #define MSDD_BUFFER_COPY_BEHAVIORS_H_
3
4 namespace msdd {
5         
6         class BufferCopyBehavior 
7           {
8           public: 
9             virtual void operator() (gr_vector_void_star &a, const void * b, unsigned int output_index, unsigned int nitems) = 0;
10             virtual ~BufferCopyBehavior() {};
11           };
12           
13         template <class Tin, class Tout> 
14         class BufferCopyBehaviorGeneric : public BufferCopyBehavior {
15                 void operator() (gr_vector_void_star &a, const void * b, unsigned int output_index, unsigned int nitems) {
16                         Tout    *out(&(reinterpret_cast<Tout *>(a[0]))[output_index]);  // sloppy
17                         const Tin       *in(reinterpret_cast<const Tin *>(b)); // equisloppy
18                         
19                     for (unsigned int i = 0; i < nitems; ++i) {
20                         out[i] = in[i];
21                     }
22                 }
23         };
24         
25         template <class Tin>
26         class BufferCopyBehaviorComplex : public BufferCopyBehavior {
27                 void operator() (gr_vector_void_star &a, const void * b, unsigned int output_index, unsigned int nitems) {
28                 gr_complex      *out(&(reinterpret_cast<gr_complex *>(a[0]))[output_index]);    // sloppy
29                 const Tin       *in(reinterpret_cast<const Tin *>(b)); // equisloppy
30                 
31                     for (unsigned int i = 0; i < nitems; ++i) {
32                         out[i] = gr_complex (in[4*i+1],in[4*i+3]);
33                     }
34                 }
35         };
36 }
37
38 #endif /*MSDD_BUFFER_COPY_BEHAVIORS_H_*/