00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _VRMUX_H_
00021 #define _VRMUX_H_
00022
00023 #include <VrSigProc.h>
00024
00025
00026 template<class T> class VrMUXBuffer;
00027 template<class T>
00028 class VrMUX : public VrSigProc {
00029 friend class VrMUXBuffer<T>;
00030 protected:
00031 unsigned int selectedInput;
00032 public:
00033 virtual const char *name() { return "VrMUX"; }
00034
00035
00036
00037
00038 virtual int work(VrSampleRange output, void *ao[],
00039 VrSampleRange inputs[], void *ai[]);
00040 virtual int input(int n) {
00041 selectedInput = n;
00042 return 0;
00043 }
00044 VrMUX(): VrSigProc(1,sizeof(T),sizeof(T)) { input(0); }
00045 virtual ~VrMUX() {}
00046 };
00047
00048 #if 0
00049 template<class T> int
00050 VrMUX<T>::forecast(VrSampleRange output,
00051 VrSampleRange inputs[]) {
00052 printf("numberInputs is %d\n", numberInputs);
00053 for(unsigned int i=0;i<numberInputs;i++) {
00054 if(i==selectedInput) {
00055 inputs[i].index=output.index;
00056 inputs[i].size=output.size;
00057 } else {
00058 inputs[i].index=output.index;
00059 inputs[i].size=0;
00060 }
00061 }
00062 return 0;
00063 }
00064 #endif
00065
00066 template<class T> int
00067 VrMUX<T>::work(VrSampleRange output, void *ao[],VrSampleRange inputs[], void *ai[])
00068 {
00069 T **i = (T **)ai;
00070 T **o = (T **)ao;
00071 int size = output.size;
00072
00073 while(size-- > 0) {
00074 *o[0]++ = (oType)*i[selectedInput]++;
00075 }
00076 return output.size;
00077 };
00078 #endif