23#ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
49 friend std::ostream& operator<< (std::ostream &os,
const Item &val);
52 this->DataElement::Clear();
53 NestedDataSet.Clear();
56 template <
typename TDE>
60 NestedDataSet.Insert(de);
62 if( !IsUndefinedLength() )
64 assert( 0 &&
"InsertDataElement" );
70 return NestedDataSet.GetDataElement(t);
77 NestedDataSet = nested;
93 NestedDataSet = val.NestedDataSet;
96 template <
typename TDE,
typename TSwap>
97 std::istream &
Read(std::istream &is) {
100 DataSet &nested = NestedDataSet;
104 if( !TagField.Read<TSwap>(is) )
106 throw Exception(
"Should not happen (item)");
109#ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
111 if( TagField ==
Tag(0xfeff, 0x00e0)
112 || TagField ==
Tag(0xfeff, 0xdde0) )
116 TagField =
Tag( SwapperDoOp::Swap( TagField.GetGroup() ), SwapperDoOp::Swap( TagField.GetElement() ) );
117 assert ( TagField ==
Tag(0xfffe, 0xe000)
118 || TagField ==
Tag(0xfffe, 0xe0dd) );
122 assert(0 &&
"Should not happen");
127 if( TagField ==
Tag(0xfffe,0xe0dd) )
129 if( ValueLengthField )
142 else if( ValueLengthField.IsUndefined() )
144 DataSet &nested = NestedDataSet;
147 std::streampos start = is.tellg();
150 nested.template ReadNested<TDE,SwapperDoOp>(is);
159 gdcmWarningMacro(
"Attempt to read nested Item without byteswapping the Value Length." );
162 is.seekg( start, std::ios::cur );
164 nested.template ReadNested<TDE,SwapperNoOp>(is);
182 DataSet &nested = NestedDataSet;
185 nested.template ReadWithLength<TDE,SwapperDoOp>(is, ValueLengthField);
193 if( TagField ==
Tag(0x3f3f, 0x3f00) )
198 if( TagField !=
Tag(0xfffe, 0xe000) && TagField !=
Tag(0xfffe, 0xe0dd) )
203 assert( TagField ==
Tag(0xfffe, 0xe000) || TagField ==
Tag(0xfffe, 0xe0dd) );
205 if( !ValueLengthField.Read<TSwap>(is) )
207 assert(0 &&
"Should not happen");
211 if( TagField ==
Tag(0xfffe,0xe0dd) )
214 if( ValueLengthField )
216 gdcmDebugMacro(
"ValueLengthField is not 0 but " << ValueLengthField );
219 else if( ValueLengthField.IsUndefined() )
221 DataSet &nested = NestedDataSet;
224 nested.template ReadNested<TDE,TSwap>(is);
228 assert( !ValueLengthField.IsUndefined() );
229 DataSet &nested = NestedDataSet;
232 nested.template ReadWithLength<TDE,TSwap>(is, ValueLengthField);
238 template <
typename TDE,
typename TSwap>
239 const std::ostream &
Write(std::ostream &os)
const {
240#ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
241 if( TagField ==
Tag(0x3f3f,0x3f00) &&
false )
243 Tag t(0xfffe, 0xe000);
249 assert ( TagField ==
Tag(0xfffe, 0xe000)
250 || TagField ==
Tag(0xfffe, 0xe0dd) );
252 if( TagField ==
Tag(0xfffe, 0xe0dd) )
255 assert( ValueLengthField == 0 );
256 assert( NestedDataSet.Size() == 0 );
258 if( !TagField.Write<TSwap>(os) )
260 assert(0 &&
"Should not happen");
264 if( ValueLengthField.IsUndefined() )
266 if( !ValueLengthField.Write<TSwap>(os) )
268 assert(0 &&
"Should not happen");
275 assert( dummy % 2 == 0 );
277 if( !dummy.
Write<TSwap>(os) )
279 assert(0 &&
"Should not happen");
284 NestedDataSet.Write<TDE,TSwap>(os);
285 if( ValueLengthField.IsUndefined() )
287 const Tag itemDelItem(0xfffe,0xe00d);
288 itemDelItem.
Write<TSwap>(os);
290 zero.
Write<TSwap>(os);
304 return NestedDataSet.FindDataElement( t );
319 val.NestedDataSet.
Print( os,
"\t" );
327#include "gdcmItem.txx"
ByteSwapFilter.
Definition gdcmByteSwapFilter.h:28
void SetByteSwapTag(bool b)
Definition gdcmByteSwapFilter.h:36
Class to represent a Data Element either Implicit or Explicit.
Definition gdcmDataElement.h:59
Tag TagField
Definition gdcmDataElement.h:243
VL ValueLengthField
Definition gdcmDataElement.h:245
Class to represent a Data Set (which contains Data Elements)
Definition gdcmDataSet.h:56
void Clear()
Definition gdcmDataSet.h:70
bool IsEmpty() const
Returns if the dataset is empty.
Definition gdcmDataSet.h:228
void Print(std::ostream &os, std::string const &indent="") const
Definition gdcmDataSet.h:79
Exception.
Definition gdcmException.h:44
Class to represent an Item.
Definition gdcmItem.h:46
Item()
Definition gdcmItem.h:48
const DataElement & GetDataElement(const Tag &t) const
Definition gdcmItem.h:68
Item(Item const &val)
Definition gdcmItem.h:91
void Clear()
Definition gdcmItem.h:51
std::istream & Read(std::istream &is)
Definition gdcmItem.h:97
DataSet & GetNestedDataSet()
Definition gdcmItem.h:84
void SetNestedDataSet(const DataSet &nested)
Definition gdcmItem.h:75
const DataSet & GetNestedDataSet() const
Definition gdcmItem.h:80
void InsertDataElement(const DataElement &de)
Definition gdcmItem.h:59
const std::ostream & Write(std::ostream &os) const
Definition gdcmItem.h:239
bool FindDataElement(const Tag &t) const
Definition gdcmItem.h:303
ParseException Standard exception handling object.
Definition gdcmParseException.h:37
Definition gdcmSwapper.h:54
Class to represent a DICOM Data Element (Attribute) Tag (Group, Element).
Definition gdcmTag.h:39
const std::ostream & Write(std::ostream &os) const
Write a tag in binary rep.
Definition gdcmTag.h:169
Value Length.
Definition gdcmVL.h:30
const std::ostream & Write(std::ostream &os) const
Definition gdcmVL.h:99
VL GetLength() const
Definition gdcmVL.h:68
#define gdcmWarningMacro(msg)
Warning.
Definition gdcmTrace.h:142
#define gdcmErrorMacro(msg)
Error this is pretty bad, more than just warning It could mean lost of data, something not handle....
Definition gdcmTrace.h:165
#define gdcmDebugMacro(msg)
Debug.
Definition gdcmTrace.h:119
#define GDCM_EXPORT
Definition gdcmWin32.h:34
std::ostream & operator<<(std::ostream &os, const Directory &d)
Definition gdcmDirectory.h:88