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