X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmValidator.cxx;h=aa195fc9df961fdfe70231b3b9360c78290b9a66;hb=e362e154b84f087750d1ed1f6671a34b3bf5ff7a;hp=1ab8b91c472e140ec3632bff1a12a5ce9467a47e;hpb=f469869a5dfc9a22c4c6b783f26904757d409975;p=gdcm.git diff --git a/src/gdcmValidator.cxx b/src/gdcmValidator.cxx index 1ab8b91c..aa195fc9 100644 --- a/src/gdcmValidator.cxx +++ b/src/gdcmValidator.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmValidator.cxx,v $ Language: C++ - Date: $Date: 2005/10/28 15:52:15 $ - Version: $Revision: 1.6 $ + Date: $Date: 2005/11/07 13:58:00 $ + Version: $Revision: 1.11 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -19,11 +19,16 @@ #include "gdcmValidator.h" #include "gdcmElementSet.h" #include "gdcmDataEntry.h" +#include "gdcmUtil.h" +#include #include namespace gdcm { +//----------------------------------------------------------------------------- +typedef std::map GroupHT; // Hash Table +//----------------------------------------------------------------------------- Validator::Validator() { @@ -44,42 +49,77 @@ bool CheckVM(DataEntry *entry) return true; const std::string &s = entry->GetString(); - std::string::size_type n = s.find("\\"); - if ( n == s.npos ) // none found - { - n = 0; - } + + unsigned int n = Util::CountSubstring( s , "\\"); + n++; // number of '\' + 1 == Value Multiplicity + std::string vmFromDict = entry->GetVM(); + if ( vmFromDict == "1-n" || vmFromDict == "2-n" || vmFromDict == "3-n" ) + return true; + unsigned int m; - std::istringstream os; - os.str( entry->GetVM()); - os >> m; + std::istringstream is; + is.str( vmFromDict ); + is >> m; return n == m; } void Validator::SetInput(ElementSet *input) { - // berk for now SetInput do two things at the same time - DocEntry *d=input->GetFirstEntry(); + +DocEntry *d; +/* +// First stage to check group length + GroupHT grHT; + d=input->GetFirstEntry(); while(d) { + grHT[d->GetGroup()] = 0; + d=input->GetNextEntry(); + } + for (GroupHT::iterator it = grHT.begin(); it != grHT.end(); ++it) + { + std::cout << std::hex << it->first << std::endl; + } +*/ + + // berk for now SetInput do two things at the same time + d=input->GetFirstEntry(); + if (!d) + { + std::cout << "No Entry found" << std::endl; + return; + } + while(d) + { if ( DataEntry *v = dynamic_cast(d) ) - { - if ( !CheckVM(v) ) + { + if ( v->GetVM() != gdcm::GDCM_UNKNOWN ) + if ( !CheckVM(v) ) + { + std::cout << "Tag (" << v->GetKey() + << ")-> [" << v->GetName() << "] contains an illegal VM. " + << "value [" << v->GetString() << "] VR :" + << v->GetVR() << ", Expected VM :" << v->GetVM() << " " + << std::endl; + } + + if ( v->GetReadLength() % 2 ) { - std::cout << "Rah this DICOM contains one wrong tag:" << - v->GetString() << " " << - v->GetGroup() << "," << v->GetElement() << "," << - v->GetVR() << " " << v->GetVM() << " " << v->GetName() << std::endl; + std::cout << "Tag (" << v->GetKey() + << ")-> [" << v->GetName() << "] has an uneven length :" + << v->GetReadLength() + << " [" << v->GetString() << "] " + << std::endl; } } else { // We skip pb of SQ recursive exploration } - d=input->GetNextEntry(); + d=input->GetNextEntry(); } }