1 /*=========================================================================
4 Module: $RCSfile: gdcmValidator.cxx,v $
6 Date: $Date: 2005/11/07 13:58:00 $
7 Version: $Revision: 1.11 $
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)
74 // First stage to check group length
76 d=input->GetFirstEntry();
79 grHT[d->GetGroup()] = 0;
80 d=input->GetNextEntry();
82 for (GroupHT::iterator it = grHT.begin(); it != grHT.end(); ++it)
84 std::cout << std::hex << it->first << std::endl;
88 // berk for now SetInput do two things at the same time
89 d=input->GetFirstEntry();
92 std::cout << "No Entry found" << std::endl;
97 if ( DataEntry *v = dynamic_cast<DataEntry *>(d) )
99 if ( v->GetVM() != gdcm::GDCM_UNKNOWN )
102 std::cout << "Tag (" << v->GetKey()
103 << ")-> [" << v->GetName() << "] contains an illegal VM. "
104 << "value [" << v->GetString() << "] VR :"
105 << v->GetVR() << ", Expected VM :" << v->GetVM() << " "
109 if ( v->GetReadLength() % 2 )
111 std::cout << "Tag (" << v->GetKey()
112 << ")-> [" << v->GetName() << "] has an uneven length :"
113 << v->GetReadLength()
114 << " [" << v->GetString() << "] "
120 // We skip pb of SQ recursive exploration
122 d=input->GetNextEntry();
126 } // end namespace gdcm