Program: gdcm
Module: $RCSfile: gdcmDataEntry.cxx,v $
Language: C++
- Date: $Date: 2005/10/18 08:35:51 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2005/10/21 15:52:13 $
+ Version: $Revision: 1.9 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
{
if( count == 0 )
{
- tmp[i] = NULL;
+ tmp[i] = 0;
break;
}
else
return BinArea[id];
}
+bool DataEntry::IsValueCountValid() const
+{
+ bool valid = false;
+ uint32_t vm;
+ const std::string &strVM = GetVM();
+ uint32_t vc = GetValueCount();
+ if( strVM == "1-n" )
+ {
+ // make sure it is at least one ??? FIXME
+ valid = vc >= 1 || vc == 0;
+ }
+ else
+ {
+ std::istringstream os;
+ os.str( strVM );
+ os >> vm;
+ // Two cases:
+ // vm respect the one from the dict
+ // vm is 0 (we need to check is this element is allowed to be empty) FIXME
+ valid = vc == vm || vc == 0;
+ }
+ return valid;
+}
+
uint32_t DataEntry::GetValueCount(void) const
{
const VRKey &vr = GetVR();
return GetLength()/sizeof(double);
else if( Global::GetVR()->IsVROfStringRepresentable(vr) )
{
+ // Some element in DICOM are allowed to be empty
+ if( !GetLength() ) return 0;
// Don't use std::string to accelerate processing
uint32_t count = 1;
for(uint32_t i=0;i<GetLength();i++)
}
return count;
}
- else
- return GetLength();
+
+ return GetLength();
}
void DataEntry::SetString(std::string const &value)
{
uint16_t *data=(uint16_t *)BinArea;
- for (int i=0; i < GetValueCount(); i++)
+ for (unsigned int i=0; i < GetValueCount(); i++)
{
if( i!=0 )
s << '\\';
{
uint32_t *data=(uint32_t *)BinArea;
- for (int i=0; i < GetValueCount(); i++)
+ for (unsigned int i=0; i < GetValueCount(); i++)
{
if( i!=0 )
s << '\\';
{
float *data=(float *)BinArea;
- for (int i=0; i < GetValueCount(); i++)
+ for (unsigned int i=0; i < GetValueCount(); i++)
{
if( i!=0 )
s << '\\';
{
double *data=(double *)BinArea;
- for (int i=0; i < GetValueCount(); i++)
+ for (unsigned int i=0; i < GetValueCount(); i++)
{
if( i!=0 )
s << '\\';
os << "D ";
DocEntry::Print(os);
+ uint16_t g = GetGroup();
+ if (g == 0xfffe) // delimiters have NO value
+ {
+ return; // just to avoid identing all the remaining code
+ }
+
std::ostringstream s;
TSAtr v;