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,
bool readvalues =
true)
97 const Tag seqDelItem(0xfffe,0xe0dd);
98 if( SequenceLengthField.IsUndefined() )
101 while( item.
Read<TDE,TSwap>(is) && item.
GetTag() != seqDelItem )
104 assert( item.
GetTag() != seqDelItem );
105 Items.push_back( item );
115 while( l != SequenceLengthField )
119 item.
Read<TDE,TSwap>(is);
125 VL newlength = l + item.template GetLength<TDE>();
126 if( newlength > SequenceLengthField )
130 SequenceLengthField = newlength;
138 #ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
139 if( item.
GetTag() == seqDelItem )
141 gdcmWarningMacro(
"SegDelItem found in defined length Sequence. Skipping" );
142 assert( item.
GetVL() == 0 );
154 Items.push_back( item );
156 l += item.template GetLength<TDE>();
157 if( l > SequenceLengthField )
160 throw "Length of Item larger than expected";
162 assert( l <= SequenceLengthField );
164 #ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
167 if( SequenceLengthField == 778 && l == 774 )
170 SequenceLengthField = l;
177 else if ( SequenceLengthField == 444 && l == 3*71 )
181 l = SequenceLengthField;
185 assert( l == SequenceLengthField );
190 template <
typename TDE,
typename TSwap>
191 std::ostream
const &
Write(std::ostream &os)
const
193 typename ItemVector::const_iterator it = Items.begin();
194 for(;it != Items.end(); ++it)
196 it->Write<TDE,TSwap>(os);
198 if( SequenceLengthField.IsUndefined() )
201 const Tag seqDelItem(0xfffe,0xe0dd);
202 seqDelItem.
Write<TSwap>(os);
204 zero.
Write<TSwap>(os);
211 void Print(std::ostream &os)
const {
212 os <<
"\t(" << SequenceLengthField <<
")\n";
213 ItemVector::const_iterator it =
215 for(;it != Items.end(); ++it)
219 if( SequenceLengthField.IsUndefined() )
221 const Tag seqDelItem(0xfffe,0xe0dd);
232 bool FindDataElement(
const Tag &t)
const;
251 #include "gdcmSequenceOfItems.txx"
253 #endif //GDCMSEQUENCEOFITEMS_H