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