00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef GDCMVM_H
00016 #define GDCMVM_H
00017
00018 #include "gdcmTypes.h"
00019 #include <iostream>
00020
00021 namespace gdcm
00022 {
00023
00068 class GDCM_EXPORT VM
00069 {
00070 public:
00071 typedef enum {
00072 VM0 = 0,
00073 VM1 = 1,
00074 VM2 = 2,
00075 VM3 = 4,
00076 VM4 = 8,
00077 VM5 = 16,
00078 VM6 = 32,
00079 VM8 = 64,
00080 VM9 = 128,
00081 VM10 = 256,
00082 VM12 = 512,
00083 VM16 = 1024,
00084 VM18 = 2048,
00085 VM24 = 4096,
00086 VM28 = 8192,
00087 VM32 = 16384,
00088 VM35 = 32768,
00089 VM99 = 65536,
00090 VM256 = 131072,
00091 VM1_2 = VM1 | VM2,
00092 VM1_3 = VM1 | VM2 | VM3,
00093 VM1_4 = VM1 | VM2 | VM3 | VM4,
00094 VM1_5 = VM1 | VM2 | VM3 | VM4 | VM5,
00095 VM1_8 = VM1 | VM2 | VM3 | VM4 | VM5 | VM6 | VM8,
00096
00097 VM1_32 = VM1 | VM2 | VM3 | VM4 | VM5 | VM6 | VM8 | VM9 | VM16 | VM24 | VM32,
00098 VM1_99 = VM1 | VM2 | VM3 | VM4 | VM5 | VM6 | VM8 | VM9 | VM16 | VM24 | VM32 | VM99,
00099 VM1_n = VM1 | VM2 | VM3 | VM4 | VM5 | VM6 | VM8 | VM9 | VM16 | VM24 | VM32 | VM99 | VM256,
00100 VM2_2n = VM2 | VM4 | VM6 | VM8 | VM16 | VM24 | VM32 | VM256,
00101 VM2_n = VM2 | VM3 | VM4 | VM5 | VM6 | VM8 | VM9 | VM16 | VM24 | VM32 | VM99 | VM256,
00102 VM3_4 = VM3 | VM4,
00103 VM3_3n = VM3 | VM6 | VM9 | VM24 | VM99 | VM256,
00104 VM3_n = VM3 | VM4 | VM5 | VM6 | VM8 | VM9 | VM16 | VM24 | VM32 | VM99 | VM256,
00105 VM4_4n = VM4 | VM16 | VM24 | VM32 | VM256,
00106 VM6_6n = VM6 | VM12 | VM18 | VM24 ,
00107 VM7_7n,
00108 VM30_30n,
00109 VM47_47n,
00110 VM_END = VM1_n + 1
00111 } VMType;
00112
00115 static const char* GetVMString(VMType vm);
00116 static VMType GetVMType(const char *vm);
00117
00120 static bool IsValid(int vm1, VMType vm2);
00121
00122
00126 bool Compatible(VM const &vm) const;
00127
00129 static VMType GetVMTypeFromLength(unsigned int length, unsigned int size);
00130 static unsigned int GetNumberOfElementsFromArray(const char *array, unsigned int length);
00131
00132 VM(VMType type = VM0):VMField(type) {}
00133 operator VMType () const { return VMField; }
00134 unsigned int GetLength() const;
00135
00136 friend std::ostream &operator<<(std::ostream &os, const VM &vm);
00137 protected:
00138 static unsigned int GetIndex(VMType vm);
00139
00140 private:
00141 VMType VMField;
00142 };
00143
00144 inline std::ostream& operator<<(std::ostream& _os, const VM &_val)
00145 {
00146 assert( VM::GetVMString(_val) );
00147 _os << VM::GetVMString(_val);
00148 return _os;
00149 }
00150
00151
00152
00153
00154
00155 template<int T> struct VMToLength;
00156 #define TYPETOLENGTH(type,length) \
00157 template<> struct VMToLength<VM::type> \
00158 { enum { Length = length }; };
00159
00160
00161 TYPETOLENGTH(VM1,1)
00162 TYPETOLENGTH(VM2,2)
00163 TYPETOLENGTH(VM3,3)
00164 TYPETOLENGTH(VM4,4)
00165 TYPETOLENGTH(VM5,5)
00166 TYPETOLENGTH(VM6,6)
00167 TYPETOLENGTH(VM8,8)
00168 TYPETOLENGTH(VM9,9)
00169 TYPETOLENGTH(VM10,10)
00170 TYPETOLENGTH(VM12,12)
00171 TYPETOLENGTH(VM16,16)
00172 TYPETOLENGTH(VM18,18)
00173 TYPETOLENGTH(VM24,24)
00174 TYPETOLENGTH(VM28,28)
00175 TYPETOLENGTH(VM32,32)
00176 TYPETOLENGTH(VM35,35)
00177 TYPETOLENGTH(VM99,99)
00178 TYPETOLENGTH(VM256,256)
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190 }
00191
00192 #endif //GDCMVM_H