00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __IPLFileNameList_H__
00018 #define __IPLFileNameList_H__
00019
00020 #include "itkMacro.h"
00021 #include "itkObject.h"
00022 #include <stdio.h>
00023 #include <string>
00024 #include <list>
00026 #define IPLSetMacro(name,type) \
00027 virtual void Set##name (const type _arg) \
00028 { \
00029 if (this->m_##name != _arg) \
00030 { \
00031 this->m_##name = _arg; \
00032 } \
00033 }
00034
00036 #define IPLGetMacro(name,type) \
00037 virtual type Get##name () \
00038 { \
00039 return this->m_##name; \
00040 }
00041
00042 namespace itk {
00046 class IPLFileSortInfo
00047 {
00048 public:
00049 IPLFileSortInfo() {
00050 m_SliceLocation = 0;
00051 m_SliceOffset = 0;
00052 m_echoNumber = 0;
00053 m_imageNumber = 0;
00054 m_data = 0;
00055 }
00056 virtual ~IPLFileSortInfo() {
00057 }
00058 IPLFileSortInfo(const char *const filename,float SliceLocation,
00059 int SliceOffset,int echoNumber,int imageNumber,void *data = 0)
00060 {
00061 m_imageFileName = filename;
00062 m_SliceLocation = SliceLocation;
00063 m_SliceOffset = SliceOffset;
00064 m_echoNumber = echoNumber;
00065 m_imageNumber = imageNumber;
00066 m_data = data;
00067 }
00068
00069 IPLSetMacro(imageFileName,std::string );
00070 IPLGetMacro(imageFileName,std::string );
00071 IPLSetMacro(SliceLocation,float );
00072 IPLGetMacro(SliceLocation,float );
00073 IPLSetMacro(SliceOffset,int );
00074 IPLGetMacro(SliceOffset,int );
00075 IPLSetMacro(echoNumber,int );
00076 IPLGetMacro(echoNumber,int );
00077 IPLSetMacro(imageNumber,int );
00078 IPLGetMacro(imageNumber,int );
00079 IPLSetMacro(data,void *);
00080 IPLGetMacro(data,const void *);
00081 private:
00082 std::string m_imageFileName;
00083 float m_SliceLocation;
00084 int m_SliceOffset;
00085 int m_echoNumber;
00086 int m_imageNumber;
00087 const void *m_data;
00088 };
00089
00090
00094 class IPLFileNameList
00095 {
00096 public:
00097 typedef std::list<IPLFileSortInfo *> ListType;
00098 typedef ListType::iterator IteratorType;
00099 IPLFileNameList()
00100 {
00101 m_XDim = 0;
00102 m_YDim = 0;
00103 m_Key1 = 0;
00105 m_Key2 = 0;
00106 }
00107 virtual ~IPLFileNameList()
00108 {
00109 IteratorType it = begin();
00110 IteratorType itend = end();
00111 while(it != itend)
00112 {
00113 delete (*it);
00114 it++;
00115 }
00116 }
00117 IteratorType begin() { return m_List.begin(); }
00118 IteratorType end() { return m_List.end(); }
00119 IPLFileSortInfo *operator[](unsigned int __n)
00120 {
00121 IteratorType it = begin();
00122 IteratorType itend= end();
00123 for(unsigned int i = 0; it != itend && i != __n; it++, i++)
00124 ;
00125 if(it == itend)
00126 return 0;
00127 return *it;
00128 }
00129 signed int NumFiles() const {
00130 return m_List.size();
00131 }
00132 bool AddElementToList(char const *const filename,
00133 const float sliceLocation,
00134 const int offset,
00135 const int XDim,
00136 const int YDim,
00137 const int imageNumber,
00138 const int Key1,
00139 const int Key2)
00140 {
00141 if(m_List.empty())
00142 {
00143 m_XDim = XDim;
00144 m_YDim = YDim;
00145 m_Key1 = Key1;
00146 m_Key2 = Key2;
00147 }
00148 else if(XDim != m_XDim || YDim != YDim)
00149 {
00150 return false;
00151 }
00152 else if(Key1 != m_Key1 || Key2 != m_Key2)
00153 {
00154 return true;
00155 }
00156 m_List.push_back(new IPLFileSortInfo(filename,
00157 sliceLocation,
00158 offset,
00159 0,
00160 imageNumber));
00161 return true;
00162 }
00163 void RemoveElementFromList(const int ElementToRemove)
00164 {
00165 IteratorType it = m_List.begin();
00166 IteratorType itend = m_List.end();
00167 int i = 0;
00168 for(i = 0; it != itend; i++, it++)
00169 {
00170 if(i != ElementToRemove)
00171 break;
00172 }
00173 if(it == itend)
00174 return;
00175 m_List.remove((*it));
00176
00177 }
00178
00179 void sortImageListAscend ();
00180 void sortImageListDescend ();
00181
00182 int GetnumImageInfoStructs() const
00183 {
00184 return m_List.size();
00185 }
00186 IPLSetMacro(XDim,int );
00187 IPLGetMacro(XDim,int );
00188 IPLSetMacro(YDim,int );
00189 IPLGetMacro(YDim,int );
00190 IPLSetMacro(Key1,int );
00191 IPLGetMacro(Key1,int );
00192 IPLSetMacro(Key2,int );
00193 IPLGetMacro(Key2,int );
00194 private:
00195 ListType m_List;
00196 int m_XDim;
00197 int m_YDim;
00198 int m_Key1;
00200 int m_Key2;
00201 };
00202
00203 }
00204
00205 #endif