00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef HxKernel_h
00011 #define HxKernel_h
00012
00013 #include "HxClassName.h"
00014 #include "HxSizes.h"
00015 #include "HxTagList.h"
00016
00017 template<class KerDataPtrT, class ArithT>
00018 class HxKernel1d
00019 {
00020 public:
00021
00022 HxKernel1d(KerDataPtrT kerPtr, HxSizes size, HxTagList&);
00023 ~HxKernel1d();
00024
00025 const ArithT& operator ()(int i) const;
00026 static HxString className();
00027
00028 private:
00029 ArithT* _data;
00030 };
00031
00032 template<class KerDataPtrT, class ArithT>
00033 inline const ArithT&
00034 HxKernel1d<KerDataPtrT, ArithT>::operator() (int i) const
00035 {
00036 return _data[i];
00037 }
00038
00039 template<class KerDataPtrT, class ArithT>
00040 class HxKernel2d
00041 {
00042 public:
00043
00044 HxKernel2d(KerDataPtrT kerPtr, HxSizes size, HxTagList&);
00045 ~HxKernel2d();
00046
00047 ArithT operator ()(int i, int j) const;
00048 static HxString className();
00049
00050 private:
00051 ArithT* _data;
00052 int _width;
00053 };
00054
00055 template<class KerDataPtrT, class ArithT>
00056 inline ArithT
00057 HxKernel2d<KerDataPtrT, ArithT>::operator() (int i, int j) const
00058 {
00059 return _data[j*_width+i];
00060 }
00061
00062 template<class KerDataPtrT, class ArithT>
00063 class HxKernel3d
00064 {
00065 public:
00066
00067 HxKernel3d(KerDataPtrT kerPtr, HxSizes size, HxTagList&);
00068 ~HxKernel3d();
00069
00070 ArithT operator ()(int i, int j, int k) const;
00071 static HxString className();
00072
00073 private:
00074 ArithT* _data;
00075 int _width;
00076 int _height;
00077 };
00078
00079 template<class KerDataPtrT, class ArithT>
00080 inline ArithT
00081 HxKernel3d<KerDataPtrT, ArithT>::operator() (int i, int j, int k) const
00082 {
00083 return _data[(k*_height+j)*_width+i];
00084 }
00085
00086 #ifdef INC_TEMPLATE_SRC
00087 #include "HxKernel.c"
00088 #endif
00089
00090 #endif