1 /*=========================================================================
4 Module: $RCSfile: gdcmValidator.cxx,v $
6 Date: $Date: 2005/11/05 13:25:26 $
7 Version: $Revision: 1.9 $
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)
71 // First stage to check group length
73 DocEntry *d=input->GetFirstEntry();
76 grHT[d->GetGroup()] = 0;
77 d=input->GetNextEntry();
79 for (GroupHT::iterator it = grHT.begin(); it != grHT.end(); ++it)
81 std::cout << std::hex << it->first << std::endl;
85 // berk for now SetInput do two things at the same time
86 d=input->GetFirstEntry();
89 std::cout << "No Entry found" << std::endl;
94 if ( DataEntry *v = dynamic_cast<DataEntry *>(d) )
96 if ( v->GetVM() != gdcm::GDCM_UNKNOWN )
99 std::cout << "Tag (" << v->GetKey()
100 << ")-> [" << v->GetName() << "] contains an illegal VM. "
101 << "value [" << v->GetString() << "] VR :"
102 << v->GetVR() << ", Expected VM :" << v->GetVM() << " "
106 if ( v->GetReadLength() % 2 )
108 std::cout << "Tag (" << v->GetKey()
109 << ")-> [" << v->GetName() << "] has an uneven length :"
110 << v->GetReadLength()
111 << " [" << v->GetString() << "] "
117 // We skip pb of SQ recursive exploration
119 d=input->GetNextEntry();
123 } // end namespace gdcm