#include "gdcmImplicitDataElement.h"
#include "gdcmByteValue.h"
#include "gdcmSequenceOfItems.h"
namespace gdcm_ns
{
VL ImplicitDataElement::GetLength() const
{
if( ValueLengthField.IsUndefined() )
{
gdcm_assert( ValueField->GetLength().IsUndefined() );
Value *p = ValueField;
SequenceOfItems *sq = dynamic_cast<SequenceOfItems*>(p);
if( sq )
{
return TagField.GetLength() + ValueLengthField.GetLength()
+ sq->ComputeLength<ImplicitDataElement>();
}
#ifdef GDCM_SUPPORT_BROKEN_IMPLEMENTATION
SequenceOfFragments *sf = dynamic_cast<SequenceOfFragments*>(p);
if( sf )
{
return TagField.GetLength()
+ ValueLengthField.GetLength() + sf->ComputeLength();
}
#endif
gdcm_assert( !ValueLengthField.IsUndefined() );
return ValueLengthField;
}
else if( const SequenceOfItems *sqi = dynamic_cast<const SequenceOfItems*>( ValueField.GetPointer() ) )
{
return TagField.GetLength() + ValueLengthField.GetLength()
+ sqi->ComputeLength<ImplicitDataElement>();
}
else
{
gdcm_assert( !ValueField || ValueField->GetLength() == ValueLengthField );
return TagField.GetLength() + ValueLengthField.GetLength()
+ ValueLengthField;
}
}
}