1 /*=========================================================================
4 Module: $RCSfile: gdcmValidator.cxx,v $
6 Date: $Date: 2005/11/07 11:42:25 $
7 Version: $Revision: 1.10 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
19 #include "gdcmValidator.h"
20 #include "gdcmElementSet.h"
21 #include "gdcmDataEntry.h"
29 //-----------------------------------------------------------------------------
30 typedef std::map<uint16_t, int> GroupHT; // Hash Table
31 //-----------------------------------------------------------------------------
33 Validator::Validator()
37 Validator::~Validator()
41 // Function to compare the VM found while parsing d->GetString()
42 // compare to the one from the dictionary
43 bool CheckVM(DataEntry *entry)
45 // Don't waste time checking tags where VM is OB and OW, since we know
46 // it's allways 1, whatever the actual length (found on disc)
48 if ( entry->GetVR() == "OB" || entry->GetVR() == "OW" )
51 const std::string &s = entry->GetString();
53 unsigned int n = Util::CountSubstring( s , "\\");
55 n++; // number of '\' + 1 == Value Multiplicity
57 std::string vmFromDict = entry->GetVM();
58 if ( vmFromDict == "1-n" || vmFromDict == "2-n" || vmFromDict == "3-n" )
62 std::istringstream is;
69 void Validator::SetInput(ElementSet *input)
72 // First stage to check group length
74 DocEntry *d=input->GetFirstEntry();
77 grHT[d->GetGroup()] = 0;
78 d=input->GetNextEntry();
80 for (GroupHT::iterator it = grHT.begin(); it != grHT.end(); ++it)
82 std::cout << std::hex << it->first << std::endl;
86 // berk for now SetInput do two things at the same time
87 d=input->GetFirstEntry();
90 std::cout << "No Entry found" << std::endl;
95 if ( DataEntry *v = dynamic_cast<DataEntry *>(d) )
97 if ( v->GetVM() != gdcm::GDCM_UNKNOWN )
100 std::cout << "Tag (" << v->GetKey()
101 << ")-> [" << v->GetName() << "] contains an illegal VM. "
102 << "value [" << v->GetString() << "] VR :"
103 << v->GetVR() << ", Expected VM :" << v->GetVM() << " "
107 if ( v->GetReadLength() % 2 )
109 std::cout << "Tag (" << v->GetKey()
110 << ")-> [" << v->GetName() << "] has an uneven length :"
111 << v->GetReadLength()
112 << " [" << v->GetString() << "] "
118 // We skip pb of SQ recursive exploration
120 d=input->GetNextEntry();
124 } // end namespace gdcm