14 #ifndef GDCMSEQUENCEOFFRAGMENTS_H
15 #define GDCMSEQUENCEOFFRAGMENTS_H
49 return SequenceLengthField;
54 SequenceLengthField = length;
61 void AddFragment(
Fragment const &item);
65 unsigned long ComputeByteLength()
const;
69 VL ComputeLength()
const;
72 bool GetBuffer(
char *buffer,
unsigned long length)
const;
73 bool GetFragBuffer(
unsigned int fragNb,
char *buffer,
unsigned long &length)
const;
75 SizeType GetNumberOfFragments()
const;
76 const Fragment& GetFragment(SizeType num)
const;
80 bool WriteBuffer(std::ostream &os)
const;
86 template <
typename TSwap>
87 std::istream& Read(std::istream &is)
89 assert( SequenceLengthField.IsUndefined() );
92 const Tag seqDelItem(0xfffe,0xe0dd);
96 Table.Read<TSwap>(is);
103 is.seekg(-4, std::ios::cur);
104 if (
Table.GetTag() ==
Tag(0xd8ff,0xe0ff) )
107 is.seekg( 8340, std::ios::cur );
110 Fragments.push_back( frag );
115 throw "Catch me if you can";
123 while( frag.
Read<TSwap>(is) && frag.
GetTag() != seqDelItem )
126 Fragments.push_back( frag );
128 assert( frag.
GetTag() == seqDelItem && frag.
GetVL() == 0 );
133 #ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
139 if( frag.
GetTag() ==
Tag(0xfffe,0xe000) )
141 gdcmWarningMacro(
"Pixel Data Fragment could be corrupted. Use file at own risk" );
142 Fragments.push_back( frag );
146 else if ( frag.
GetTag() ==
Tag(0xddff,0x00e0) )
148 assert( Fragments.size() == 1 );
149 const ByteValue *bv = Fragments[0].GetByteValue();
150 assert( (
unsigned char)bv->GetPointer()[ bv->GetLength() - 1 ] == 0xfe );
152 Fragments[0].SetByteValue( bv->GetPointer(), bv->GetLength() - 1 );
154 " at the end: stripped !" );
162 ". Use file at own risk." << ex.
what() );
173 template <
typename TSwap>
174 std::ostream
const &Write(std::ostream &os)
const
176 if( !
Table.Write<TSwap>(os) )
178 assert(0 &&
"Should not happen");
183 it->Write<TSwap>(os);
186 const Tag seqDelItem(0xfffe,0xe0dd);
187 seqDelItem.
Write<TSwap>(os);
189 zero.
Write<TSwap>(os);
205 void Print(std::ostream &os)
const {
206 os <<
"SQ L= " << SequenceLengthField <<
"\n";
207 os <<
"Table:" <<
Table <<
"\n";
210 os <<
" " << *it <<
"\n";
212 assert( SequenceLengthField.IsUndefined() );
214 const Tag seqDelItem(0xfffe,0xe0dd);
223 return Table == sqf.Table &&
224 SequenceLengthField == sqf.SequenceLengthField &&
225 Fragments == sqf.Fragments;
230 VL SequenceLengthField;
232 FragmentVector Fragments;
242 #endif //GDCMSEQUENCEOFFRAGMENTS_H