15 #ifndef GDCMSEQUENCEOFITEMS_H
16 #define GDCMSEQUENCEOFITEMS_H
60 SequenceLengthField = length;
63 void SetLengthToUndefined();
66 return SequenceLengthField.IsUndefined();
69 template <
typename TDE>
70 VL ComputeLength()
const;
74 void AddItem(
Item const &item);
84 const Item &GetItem(SizeType position)
const;
85 Item &GetItem(SizeType position);
93 template <
typename TDE,
typename TSwap>
94 std::istream &Read(std::istream &is)
96 const Tag seqDelItem(0xfffe,0xe0dd);
97 if( SequenceLengthField.IsUndefined() )
100 while( item.
Read<TDE,TSwap>(is) && item.
GetTag() != seqDelItem )
103 assert( item.
GetTag() != seqDelItem );
104 Items.push_back( item );
114 while( l != SequenceLengthField )
118 item.
Read<TDE,TSwap>(is);
124 VL newlength = l + item.template GetLength<TDE>();
125 if( newlength > SequenceLengthField )
129 SequenceLengthField = newlength;
137 #ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
138 if( item.
GetTag() == seqDelItem )
140 gdcmWarningMacro(
"SegDelItem found in defined length Sequence. Skipping" );
141 assert( item.
GetVL() == 0 );
153 Items.push_back( item );
155 l += item.template GetLength<TDE>();
156 if( l > SequenceLengthField )
159 throw "Length of Item larger than expected";
161 assert( l <= SequenceLengthField );
162 #ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
165 if( SequenceLengthField == 778 && l == 774 )
168 SequenceLengthField = l;
175 else if ( SequenceLengthField == 444 && l == 3*71 )
179 l = SequenceLengthField;
183 assert( l == SequenceLengthField );
188 template <
typename TDE,
typename TSwap>
189 std::ostream
const &Write(std::ostream &os)
const
191 typename ItemVector::const_iterator it = Items.begin();
192 for(;it != Items.end(); ++it)
194 it->Write<TDE,TSwap>(os);
196 if( SequenceLengthField.IsUndefined() )
199 const Tag seqDelItem(0xfffe,0xe0dd);
200 seqDelItem.
Write<TSwap>(os);
202 zero.
Write<TSwap>(os);
209 void Print(std::ostream &os)
const {
210 os <<
"\t(" << SequenceLengthField <<
")\n";
211 ItemVector::const_iterator it =
213 for(;it != Items.end(); ++it)
217 if( SequenceLengthField.IsUndefined() )
219 const Tag seqDelItem(0xfffe,0xe0dd);
230 bool FindDataElement(
const Tag &t)
const;
249 #include "gdcmSequenceOfItems.txx"
251 #endif //GDCMSEQUENCEOFITEMS_H