]> Creatis software - gdcm.git/blobdiff - src/gdcmDataEntry.cxx
In order to avoid confusing user with 'public' methods he is not allowed to use,
[gdcm.git] / src / gdcmDataEntry.cxx
index cf6a3689d36bf28cdaa8aaf350a2a0d22b2fb0a5..4d7b76283a5f290ed3896db61410dfd3d6a7d8a7 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDataEntry.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/10/21 14:15:41 $
-  Version:   $Revision: 1.6 $
+  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
@@ -221,11 +221,26 @@ double DataEntry::GetValue(const uint32_t &id) const
 
 bool DataEntry::IsValueCountValid() const
 {
+  bool valid = false;
   uint32_t vm;
-  std::istringstream os;
-  os.str( GetVM() );
-  os >> vm;
-  return vm == GetValueCount();
+  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
@@ -241,6 +256,8 @@ uint32_t DataEntry::GetValueCount(void) const
       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++)