00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef HxExportPix_h
00010 #define HxExportPix_h
00011
00012 #include "HxCategories.h"
00013 #include "HxTagList.h"
00014 #include "HxByte.h"
00015 #include "HxVec2Int.h"
00016 #include "HxVec2Double.h"
00017 #include "HxVec3Int.h"
00018 #include "HxVec3Double.h"
00019 #include "HxComplex.h"
00020
00021
00022 template<class ArithT, class DataT>
00023 class HxExportPix
00024 {
00025 public:
00026 typedef HxTagPixOpOut DirectionCategory;
00027 typedef HxTagTransInVar TransVarianceCategory;
00028 typedef HxTag1Phase PhaseCategory;
00029
00030 HxExportPix(HxTagList&);
00031
00032 void doIt(const ArithT& x)
00033 { *_data++ = x.x(); }
00034
00035 static HxString className();
00036 private:
00037 DataT* _data;
00038 };
00039
00040
00041 template<class ArithT, class DataT>
00042 inline
00043 HxExportPix<ArithT, DataT>::HxExportPix(HxTagList& tags)
00044 {
00045 _data = (DataT*)HxGetTag<void*>(tags, "dataPtr", ((void*)0));
00046 }
00047
00048 template<class ArithT, class DataT>
00049 inline HxString
00050 HxExportPix<ArithT, DataT>::className()
00051 {
00052 return HxPixOpMakeName<DataT>("exportPix");
00053 }
00054
00055 template<>
00056 inline void
00057 HxExportPix<HxVec2Int, HxByte>::doIt(const HxVec2Int& x)
00058 {
00059 *_data++ = x.x();
00060 *_data++ = x.y();
00061 }
00062
00063 template<>
00064 inline void
00065 HxExportPix<HxVec2Int, short>::doIt(const HxVec2Int& x)
00066 {
00067 *_data++ = x.x();
00068 *_data++ = x.y();
00069 }
00070
00071 template<>
00072 inline void
00073 HxExportPix<HxVec2Int, int>::doIt(const HxVec2Int& x)
00074 {
00075 *_data++ = x.x();
00076 *_data++ = x.y();
00077 }
00078
00079 template<>
00080 inline void
00081 HxExportPix<HxVec2Double, float>::doIt(const HxVec2Double& x)
00082 {
00083 *_data++ = x.x();
00084 *_data++ = x.y();
00085 }
00086
00087 template<>
00088 inline void
00089 HxExportPix<HxVec2Double, double>::doIt(const HxVec2Double& x)
00090 {
00091 *_data++ = x.x();
00092 *_data++ = x.y();
00093 }
00094
00095 template<>
00096 inline void
00097 HxExportPix<HxComplex, float>::doIt(const HxComplex& x)
00098 {
00099 *_data++ = x.x();
00100 *_data++ = x.y();
00101 }
00102
00103 template<>
00104 inline void
00105 HxExportPix<HxComplex, double>::doIt(const HxComplex& x)
00106 {
00107 *_data++ = x.x();
00108 *_data++ = x.y();
00109 }
00110
00111 template<>
00112 inline void
00113 HxExportPix<HxVec3Int, HxByte>::doIt(const HxVec3Int& x)
00114 {
00115 *_data++ = x.x();
00116 *_data++ = x.y();
00117 *_data++ = x.z();
00118 }
00119
00120 template<>
00121 inline void
00122 HxExportPix<HxVec3Int, short>::doIt(const HxVec3Int& x)
00123 {
00124 *_data++ = x.x();
00125 *_data++ = x.y();
00126 *_data++ = x.z();
00127 }
00128
00129 template<>
00130 inline void
00131 HxExportPix<HxVec3Int, int>::doIt(const HxVec3Int& x)
00132 {
00133 *_data++ = x.x();
00134 *_data++ = x.y();
00135 *_data++ = x.z();
00136 }
00137
00138 template<>
00139 inline void
00140 HxExportPix<HxVec3Double, float>::doIt(const HxVec3Double& x)
00141 {
00142 *_data++ = x.x();
00143 *_data++ = x.y();
00144 *_data++ = x.z();
00145 }
00146
00147 template<>
00148 inline void
00149 HxExportPix<HxVec3Double, double>::doIt(const HxVec3Double& x)
00150 {
00151 *_data++ = x.x();
00152 *_data++ = x.y();
00153 *_data++ = x.z();
00154 }
00155
00156 #endif