Program: gdcm
Module: $RCSfile: TestAllEntryVerify.cxx,v $
Language: C++
- Date: $Date: 2005/01/08 23:18:30 $
- Version: $Revision: 1.19 $
+ Date: $Date: 2005/10/18 08:35:45 $
+ Version: $Revision: 1.29 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
-#include "gdcmHeader.h"
+#include "gdcmFile.h"
#include <map>
#include <list>
#include <iostream>
#include <sstream>
-//Generated file:
-#include "gdcmDataImages.h"
-
-typedef std::string EntryValueType; // same type as ValEntry::value
+typedef std::string EntryValueType; // same type as DataEntry::value
typedef std::map< gdcm::TagKey, EntryValueType > MapEntryValues;
-typedef MapEntryValues* MapEntryValuesPtr;
+typedef MapEntryValues *MapEntryValuesPtr;
typedef std::string FileNameType;
typedef std::map< FileNameType, MapEntryValuesPtr > MapFileValuesType;
{
public:
ReferenceFileParser();
- bool Open( std::string& referenceFileName );
+ ~ReferenceFileParser();
+
+ bool Open( std::string &referenceFileName );
void Print();
void SetDataPath(std::string&);
bool Check();
bool Check( std::string fileName );
private:
- bool AddKeyValuePairToMap( std::string& key, std::string& value );
+ bool AddKeyValuePairToMap( std::string &key, std::string &value );
- std::istream& eatwhite(std::istream& is);
- void eatwhite(std::string& toClean);
- std::string ExtractFirstString(std::string& toSplit);
- void CleanUpLine( std::string& line );
+ std::istream &eatwhite(std::istream &is);
+ void eatwhite(std::string &toClean);
+ std::string ExtractFirstString(std::string &toSplit);
+ void CleanUpLine( std::string &line );
bool Check( MapFileValuesType::iterator &fileIt );
- std::string ExtractValue(std::string& toSplit) throw ( ParserException );
- void ParseRegularLine( std::string& line ) throw ( ParserException );
- void FirstPassReferenceFile() throw ( ParserException );
- bool SecondPassReferenceFile() throw ( ParserException );
- void HandleFileName( std::string& line ) throw ( ParserException );
- void HandleKey( std::string& line ) throw ( ParserException );
- bool HandleValue( std::string& line ) throw ( ParserException );
+ std::string ExtractValue(std::string &toSplit) throw ( ParserException );
+ void ParseRegularLine( std::string &line ) throw ( ParserException );
+ void FirstPassReferenceFile() throw ( ParserException );
+ bool SecondPassReferenceFile() throw ( ParserException );
+ void HandleFileName( std::string &line ) throw ( ParserException );
+ void HandleKey( std::string &line ) throw ( ParserException );
+ bool HandleValue( std::string &line ) throw ( ParserException );
static uint16_t axtoi( char* );
+
private:
/// The directory containing the images to check:
std::string DataPath;
std::string CurrentValue;
/// The current MapEntryValues pointer:
- MapEntryValues* CurrentMapEntryValuesPtr;
+ MapEntryValues *CurrentMapEntryValuesPtr;
};
-/// As gotten from:
+ReferenceFileParser::ReferenceFileParser()
+{
+ lineNumber = 1;
+ Indent = " ";
+}
+
+ReferenceFileParser::~ReferenceFileParser()
+{
+ for (MapFileValuesType::iterator i = ProducedMap.begin();
+ i != ProducedMap.end();
+ ++i)
+ {
+ delete i->second;
+ }
+}
+
+/// As got from:
/// http://community.borland.com/article/0,1410,17203,0.html
-uint16_t ReferenceFileParser::axtoi(char *hexStg) {
- int n = 0; // position in string
- int m = 0; // position in digit[] to shift
- int count; // loop index
- int intValue = 0; // integer value of hex string
- int digit[5]; // hold values to convert
- while (n < 4) {
- if (hexStg[n]=='\0')
- break;
- if (hexStg[n] > 0x29 && hexStg[n] < 0x40 ) //if 0 to 9
- digit[n] = hexStg[n] & 0x0f; //convert to int
- else if (hexStg[n] >='a' && hexStg[n] <= 'f') //if a to f
- digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
- else if (hexStg[n] >='A' && hexStg[n] <= 'F') //if A to F
- digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
- else break;
- n++;
- }
- count = n;
- m = n - 1;
- n = 0;
- while(n < count) {
- // digit[n] is value of hex digit at position n
- // (m << 2) is the number of positions to shift
- // OR the bits into return value
- intValue = intValue | (digit[n] << (m << 2));
- m--; // adjust the position to set
- n++; // next digit to process
- }
- return intValue;
+uint16_t ReferenceFileParser::axtoi(char *hexStg)
+{
+ int n = 0; // position in string
+ int m = 0; // position in digit[] to shift
+ int count; // loop index
+ int intValue = 0; // integer value of hex string
+ int digit[5]; // hold values to convert
+ while (n < 4)
+ {
+ if (hexStg[n]=='\0')
+ break;
+ if (hexStg[n] > 0x29 && hexStg[n] < 0x40 ) //if 0 to 9
+ digit[n] = hexStg[n] & 0x0f; //convert to int
+ else if (hexStg[n] >='a' && hexStg[n] <= 'f') //if a to f
+ digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
+ else if (hexStg[n] >='A' && hexStg[n] <= 'F') //if A to F
+ digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
+ else break;
+ n++;
+ }
+ count = n;
+ m = n - 1;
+ n = 0;
+ while(n < count)
+ {
+ // digit[n] is value of hex digit at position n
+ // (m << 2) is the number of positions to shift
+ // OR the bits into return value
+ intValue = intValue | (digit[n] << (m << 2));
+ m--; // adjust the position to set
+ n++; // next digit to process
+ }
+ return (uint16_t)intValue;
}
-void ReferenceFileParser::SetDataPath( std::string& inDataPath )
+void ReferenceFileParser::SetDataPath( std::string &inDataPath )
{
DataPath = inDataPath;
}
-bool ReferenceFileParser::AddKeyValuePairToMap( std::string& key,
- std::string& value )
+bool ReferenceFileParser::AddKeyValuePairToMap( std::string &key,
+ std::string &value )
{
if ( !CurrentMapEntryValuesPtr )
return false;
{
for (MapFileValuesType::iterator i = ProducedMap.begin();
i != ProducedMap.end();
- ++i)
+ ++i)
{
std::cout << Indent << "FileName: " << i->first << std::endl;
MapEntryValuesPtr KeyValues = i->second;
for (MapEntryValues::iterator j = KeyValues->begin();
j != KeyValues->end();
- ++j)
+ ++j)
{
std::cout << Indent
- << " Key: " << j->first
+ << " Key: " << j->first
<< " Value: " << j->second
<< std::endl;
}
bool ret = true;
for (MapFileValuesType::iterator i = ProducedMap.begin();
i != ProducedMap.end();
- ++i)
+ ++i)
{
ret &= Check(i);
}
{
std::string fileName = DataPath + fileIt->first;
std::cout << Indent << "FileName: " << fileName << std::endl;
- gdcm::Header* tested = new gdcm::Header( fileName.c_str() );
+
+ gdcm::File *tested;
+ tested = new gdcm::File( );
+ tested->SetFileName( fileName.c_str() );
+ tested->Load( );
if( !tested->IsReadable() )
{
std::cerr << Indent << "Failed\n"
MapEntryValuesPtr KeyValues = fileIt->second;
for (MapEntryValues::iterator j = KeyValues->begin();
j != KeyValues->end();
- ++j)
+ ++j)
{
std::string key = j->first;
uint16_t group = axtoi( &(groupString[0]) );
uint16_t element = axtoi( &(groupElement[0]) );
- std::string testedValue = tested->GetEntry(group, element);
+ std::string testedValue = tested->GetEntryValue(group, element);
if ( testedValue != j->second )
{
// Oops make sure this is only the \0 that differ
return true;
}
-std::istream& ReferenceFileParser::eatwhite( std::istream& is )
+std::istream &ReferenceFileParser::eatwhite( std::istream &is )
{
char c;
while (is.get(c)) {
return is;
}
-void ReferenceFileParser::eatwhite( std::string& toClean )
+void ReferenceFileParser::eatwhite( std::string &toClean )
{
while( toClean.find_first_of( " " ) == 0 )
toClean.erase( 0, toClean.find_first_of( " " ) + 1 );
}
-std::string ReferenceFileParser::ExtractFirstString( std::string& toSplit )
+std::string ReferenceFileParser::ExtractFirstString( std::string &toSplit )
{
std::string firstString;
eatwhite( toSplit );
return firstString;
}
-std::string ReferenceFileParser::ExtractValue( std::string& toSplit )
+std::string ReferenceFileParser::ExtractValue( std::string &toSplit )
throw ( ParserException )
{
eatwhite( toSplit );
from.seekg( 0, std::ios::beg );
}
-ReferenceFileParser::ReferenceFileParser()
-{
- lineNumber = 1;
- Indent = " ";
-}
-
-bool ReferenceFileParser::Open( std::string& referenceFileName )
+bool ReferenceFileParser::Open( std::string &referenceFileName )
{
from.open( referenceFileName.c_str(), std::ios::in );
if ( !from.is_open() )
return true; //??
}
-void ReferenceFileParser::CleanUpLine( std::string& line )
+void ReferenceFileParser::CleanUpLine( std::string &line )
{
// Cleanup from comments:
if ( line.find_first_of( "#" ) != std::string::npos )
eatwhite( line );
}
-void ReferenceFileParser::HandleFileName( std::string& line )
+void ReferenceFileParser::HandleFileName( std::string &line )
throw ( ParserException )
{
if ( line.length() == 0 )
CurrentFileName = ExtractFirstString(line);
}
-void ReferenceFileParser::HandleKey( std::string& line )
+void ReferenceFileParser::HandleKey( std::string &line )
throw ( ParserException )
{
if ( CurrentKey.length() != 0 )
}
}
-bool ReferenceFileParser::HandleValue( std::string& line )
+bool ReferenceFileParser::HandleValue( std::string &line )
throw ( ParserException )
{
if ( line.length() == 0 )
return true;
}
-void ReferenceFileParser::ParseRegularLine( std::string& line)
+void ReferenceFileParser::ParseRegularLine( std::string &line)
throw ( ParserException )
{
if ( line.length() == 0 )
return true; //??
}
-int TestAllEntryVerify(int argc, char* argv[])
+int TestAllEntryVerify(int argc, char *argv[])
{
if ( argc > 2 )
{