Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef GDCMCSAELEMENT_H
00016 #define GDCMCSAELEMENT_H
00017
00018 #include "gdcmTag.h"
00019 #include "gdcmVM.h"
00020 #include "gdcmVR.h"
00021 #include "gdcmByteValue.h"
00022 #include "gdcmSmartPointer.h"
00023
00024 namespace gdcm
00025 {
00030 class GDCM_EXPORT CSAElement
00031 {
00032 public:
00033 CSAElement(unsigned int kf = 0):KeyField(kf) {}
00034
00035 friend std::ostream& operator<<(std::ostream &os, const CSAElement &val);
00036
00038 unsigned int GetKey() const { return KeyField; }
00039 void SetKey(unsigned int key) { KeyField = key; }
00040
00042 const char *GetName() const { return NameField.c_str(); }
00043 void SetName(const char *name) { NameField = name; }
00044
00046 const VM& GetVM() const { return ValueMultiplicityField; }
00047 void SetVM(const VM &vm) { ValueMultiplicityField = vm; }
00048
00050 VR const &GetVR() const { return VRField; }
00051 void SetVR(VR const &vr) { VRField = vr; }
00052
00054 unsigned int GetSyngoDT() const { return SyngoDTField; }
00055 void SetSyngoDT(unsigned int syngodt) { SyngoDTField = syngodt; }
00056
00058 unsigned int GetNoOfItems() const { return NoOfItemsField; }
00059 void SetNoOfItems(unsigned int items) { NoOfItemsField = items; }
00060
00062 Value const &GetValue() const { return *DataField; }
00063 Value &GetValue() { return *DataField; }
00064 void SetValue(Value const & vl) {
00065
00066 DataField = vl;
00067 }
00069 bool IsEmpty() const { return DataField == 0; }
00070
00072 void SetByteValue(const char *array, VL length)
00073 {
00074 ByteValue *bv = new ByteValue(array,length);
00075 SetValue( *bv );
00076 }
00079 const ByteValue* GetByteValue() const {
00080
00081 const ByteValue *bv = dynamic_cast<const ByteValue*>(DataField.GetPointer());
00082 return bv;
00083 }
00084
00085 CSAElement(const CSAElement &_val)
00086 {
00087 if( this != &_val)
00088 {
00089 *this = _val;
00090 }
00091 }
00092
00093 bool operator<(const CSAElement &de) const
00094 {
00095 return GetKey() < de.GetKey();
00096 }
00097 CSAElement &operator=(const CSAElement &de)
00098 {
00099 KeyField = de.KeyField;
00100 NameField = de.NameField;
00101 ValueMultiplicityField = de.ValueMultiplicityField;
00102 VRField = de.VRField;
00103 SyngoDTField = de.SyngoDTField;
00104 NoOfItemsField = de.NoOfItemsField;
00105 DataField = de.DataField;
00106 return *this;
00107 }
00108
00109 bool operator==(const CSAElement &de) const
00110 {
00111 return KeyField == de.KeyField
00112 && NameField == de.NameField
00113 && ValueMultiplicityField == de.ValueMultiplicityField
00114 && VRField == de.VRField
00115 && SyngoDTField == de.SyngoDTField
00116
00117 ;
00118 }
00119
00120 protected:
00121 unsigned int KeyField;
00122 std::string NameField;
00123 VM ValueMultiplicityField;
00124 VR VRField;
00125 unsigned int SyngoDTField;
00126 unsigned int NoOfItemsField;
00127 typedef SmartPointer<Value> DataPtr;
00128 DataPtr DataField;
00129 };
00130
00131 inline std::ostream& operator<<(std::ostream &os, const CSAElement &val)
00132 {
00133 os << val.KeyField;
00134 os << " - '" << val.NameField;
00135 os << "' VM " << val.ValueMultiplicityField;
00136 os << ", VR " << val.VRField;
00137 os << ", SyngoDT " << val.SyngoDTField;
00138 os << ", NoOfItems " << val.NoOfItemsField;
00139 os << ", Data ";
00140 if( val.DataField )
00141 {
00142
00143 const ByteValue * bv = dynamic_cast<ByteValue*>(&*val.DataField);
00144 assert( bv );
00145 const char * p = bv->GetPointer();
00146 std::string str(p, p + bv->GetLength() );
00147 if( val.ValueMultiplicityField == VM::VM1 )
00148 {
00149 os << "'" << str.c_str() << "'";
00150 }
00151 else
00152 {
00153 std::istringstream is( str );
00154 std::string s;
00155 bool sep = false;
00156 while( std::getline(is, s, '\\' ) )
00157 {
00158 if( sep )
00159 {
00160 os << '\\';
00161 }
00162 sep = true;
00163 os << "'" << s.c_str() << "'";
00164 }
00165
00166
00167 }
00168 }
00169 return os;
00170 }
00171
00172 }
00173
00174 #endif //GDCMCSAELEMENT_H
00175