Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxExportData.h

00001 /*
00002  *  Copyright (c) 2000, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *  Author(s):
00006  *  Edo Poll (poll@wins.uva.nl)
00007  */
00008 
00009 #ifndef HxExportData_h
00010 #define HxExportData_h
00011 
00012 #include "HxPixOpCategory.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 class HxInOutDataIdxId
00022 {
00023 public:
00024     typedef HxTagTransInVar    TransVarianceCategory;
00025 
00026                 HxInOutDataIdxId() : _i(-1) {}
00027 
00028     int         next() { return ++_i; }
00029     int         current() const { return _i; }
00030 
00031 private:
00032     int         _i;
00033 };
00034 
00035 class HxInOutDataIdxYZX
00036 {
00037 public:
00038     typedef HxTagTransVar      TransVarianceCategory;
00039 
00040                 HxInOutDataIdxId(int w, int h, int) : _w(w), _wh(w*h) {}
00041 
00042     int         next(int x, int y, int z) { return _i = z*_wh+y*_w+x; }
00043     int         current() const { return _i; }
00044 
00045 private:
00046     int         _w, _wh, _i;
00047 };
00048 
00049 template<class ArithT, class DataT, class PutOpT, class DataIndexT>
00050 class HxExportData
00051 {
00052 public:
00053     typedef HxTagPixOpOut                       DirectionCategory;
00054     typedef DataIndexT::TransVarianceCategory   TransVarianceCategory;
00055     typedef HxTag1Phase                     PhaseCategory;
00056 
00057                         HxExportData(HxTagList&);
00058 
00059     void                doIt(const ArithT& x)
00060                             { *_data++ = x.x(); }
00061 
00062     static HxString     className();
00063 private:
00064     DataT*              _data;
00065 };
00066 
00067 
00068 template<class ArithT, class DataT>
00069 inline
00070 HxExportData<ArithT, DataT>::HxExportData(HxTagList& tags)
00071 {
00072     _data = (DataT*)HxGetTag<void*>(tags, "dataPtr", ((void*)0));
00073 }
00074 
00075 template<class ArithT, class DataT>
00076 inline HxString
00077 HxExportData<ArithT, DataT>::className()
00078 {
00079     return HxPixOpMakeName<DataT>("ExportData");
00080 }
00081 
00082 template<>
00083 inline void
00084 HxExportData<HxVec2Int, HxByte>::doIt(const HxVec2Int& x)
00085 {
00086     *_data++ = x.x();
00087     *_data++ = x.y();
00088 }
00089 
00090 template<>
00091 inline void
00092 HxExportData<HxVec2Int, short>::doIt(const HxVec2Int& x)
00093 {
00094     *_data++ = x.x();
00095     *_data++ = x.y();
00096 }
00097 
00098 template<>
00099 inline void
00100 HxExportData<HxVec2Int, int>::doIt(const HxVec2Int& x)
00101 {
00102     *_data++ = x.x();
00103     *_data++ = x.y();
00104 }
00105 
00106 template<>
00107 inline void
00108 HxExportData<HxVec2Double, float>::doIt(const HxVec2Double& x)
00109 {
00110     *_data++ = x.x();
00111     *_data++ = x.y();
00112 }
00113 
00114 template<>
00115 inline void
00116 HxExportData<HxVec2Double, double>::doIt(const HxVec2Double& x)
00117 {
00118     *_data++ = x.x();
00119     *_data++ = x.y();
00120 }
00121 
00122 template<>
00123 inline void
00124 HxExportData<HxComplex, float>::doIt(const HxComplex& x)
00125 {
00126     *_data++ = x.x();
00127     *_data++ = x.y();
00128 }
00129 
00130 template<>
00131 inline void
00132 HxExportData<HxComplex, double>::doIt(const HxComplex& x)
00133 {
00134     *_data++ = x.x();
00135     *_data++ = x.y();
00136 }
00137 
00138 template<>
00139 inline void
00140 HxExportData<HxVec3Int, HxByte>::doIt(const HxVec3Int& x)
00141 {
00142     *_data++ = x.x();
00143     *_data++ = x.y();
00144     *_data++ = x.z();
00145 }
00146 
00147 template<>
00148 inline void
00149 HxExportData<HxVec3Int, short>::doIt(const HxVec3Int& x)
00150 {
00151     *_data++ = x.x();
00152     *_data++ = x.y();
00153     *_data++ = x.z();
00154 }
00155 
00156 template<>
00157 inline void
00158 HxExportData<HxVec3Int, int>::doIt(const HxVec3Int& x)
00159 {
00160     *_data++ = x.x();
00161     *_data++ = x.y();
00162     *_data++ = x.z();
00163 }
00164 
00165 template<>
00166 inline void
00167 HxExportData<HxVec3Double, float>::doIt(const HxVec3Double& x)
00168 {
00169     *_data++ = x.x();
00170     *_data++ = x.y();
00171     *_data++ = x.z();
00172 }
00173 
00174 template<>
00175 inline void
00176 HxExportData<HxVec3Double, double>::doIt(const HxVec3Double& x)
00177 {
00178     *_data++ = x.x();
00179     *_data++ = x.y();
00180     *_data++ = x.z();
00181 }
00182 
00183 #endif

Generated on Tue Feb 3 14:18:34 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001