Program: gdcm
Module: $RCSfile: gdcmDicomDirElement.cxx,v $
Language: C++
- Date: $Date: 2004/10/12 04:35:44 $
- Version: $Revision: 1.20 $
+ Date: $Date: 2005/01/20 17:15:54 $
+ Version: $Revision: 1.30 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include <fstream>
#include <iostream>
+
namespace gdcm
{
-
+void FillDefaultDIRDict(DicomDirElement *dde);
//-----------------------------------------------------------------------------
// Constructor / Destructor
*/
DicomDirElement::DicomDirElement()
{
- std::string filename = DictSet::BuildDictPath() + std::string(DICT_ELEM);
+ std::string filename = DictSet::BuildDictPath() + DICT_ELEM;
std::ifstream from(filename.c_str());
- dbg.Error(!from, "DicomDirElement::DicomDirElement: can't open dictionary",
- filename.c_str());
-
- char buff[1024];
- std::string type;
- Element elem;
-
- while (!from.eof())
+ if(!from)
{
- from >> std::ws;
- from.getline(buff, 1024, ' ');
- type = buff;
+ gdcmVerboseMacro( "Can't open DicomDirElement dictionary"
+ << filename.c_str());
+ FillDefaultDIRDict( this );
+ }
+ else
+ {
+ char buff[1024];
+ std::string strType;
+ Element elem;
+ DicomDirType type;
- if( (type=="metaElem") || (type=="patientElem") ||
- (type=="studyElem") || (type=="serieElem") ||
- (type=="imageElem") )
+ while (!from.eof())
{
- from >> std::hex >> elem.Group >> elem.Elem;
-
from >> std::ws;
- from.getline(buff, 1024, '"');
- from >> std::ws;
- from.getline(buff, 1024, '"');
- elem.Value = buff;
-
- if( type == "metaElem" )
- {
- DicomDirMetaList.push_back(elem);
- }
- else if( type == "patientElem" )
- {
- DicomDirPatientList.push_back(elem);
- }
- else if( type == "studyElem" )
+ from.getline(buff, 1024, ' ');
+ strType = buff;
+
+ if( strType == "metaElem" )
+ type = DD_META;
+ else if( strType == "patientElem" )
+ type = DD_PATIENT;
+ else if( strType == "studyElem" )
+ type = DD_STUDY;
+ else if( strType == "serieElem" )
+ type = DD_SERIE;
+ else if( strType == "imageElem" )
+ type = DD_IMAGE;
+ else
{
- DicomDirStudyList.push_back(elem);
+ gdcmVerboseMacro("Unknown type found in the file : "
+ <<filename.c_str());
+ type = DD_UNKNOWN;
}
- else if( type == "serieElem" )
- {
- DicomDirSerieList.push_back(elem);
- }
- else if( type == "imageElem" )
+
+ if( type!=DD_UNKNOWN )
{
- DicomDirImageList.push_back(elem);
+ from >> std::hex >> elem.Group >> elem.Elem;
+
+ from >> std::ws;
+ from.getline(buff, 1024, '"');
+ from >> std::ws;
+ from.getline(buff, 1024, '"');
+ elem.Value = buff;
+
+ AddNewEntry(type, elem);
}
+ from.getline(buff, 1024, '\n');
}
- from.getline(buff, 1024, '\n');
+ from.close();
}
- from.close();
}
/**
- * \ingroup DicomDirElement
* \brief canonical destructor
*/
DicomDirElement::~DicomDirElement()
//-----------------------------------------------------------------------------
// Print
/**
- * \ingroup DicomDirElement
* \brief Print all
* \todo add a 'Print Level' check
* @param os The output stream to be written to.
//-----------------------------------------------------------------------------
// Public
-
+/**
+ * \brief AddNewEntry
+ * @param type type
+ * @param elem elem
+ */
+bool DicomDirElement::AddNewEntry(DicomDirType type,
+ Element const &elem)
+{
+ switch( type )
+ {
+ case DD_META :
+ DicomDirMetaList.push_back(elem);
+ break;
+ case DD_PATIENT :
+ DicomDirPatientList.push_back(elem);
+ break;
+ case DD_STUDY :
+ DicomDirStudyList.push_back(elem);
+ break;
+ case DD_SERIE :
+ DicomDirSerieList.push_back(elem);
+ break;
+ case DD_IMAGE :
+ DicomDirImageList.push_back(elem);
+ break;
+ default :
+ return false;
+ }
+ return true;
+}
//-----------------------------------------------------------------------------
// Protected