/*========================================================================= Program: gdcm Module: $RCSfile: gdcmDicomDirElement.cxx,v $ Language: C++ Date: $Date: 2004/11/03 18:08:56 $ Version: $Revision: 1.21 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "gdcmDicomDirElement.h" #include "gdcmUtil.h" #include "gdcmDebug.h" #include "gdcmDictSet.h" #include #include namespace gdcm { void FillDefaultDIRDict(DicomDirElement *dde); //----------------------------------------------------------------------------- // Constructor / Destructor /** * \brief constructor : populates the chained lists * from the file 'Dicts/DicomDir.dic' */ DicomDirElement::DicomDirElement() { std::string filename = DictSet::BuildDictPath() + DICT_ELEM; std::ifstream from(filename.c_str()); if(!from) { dbg.Verbose(2, "DicomDirElement::DicomDirElement: can't open dictionary", filename.c_str()); FillDefaultDIRDict( this ); } else { char buff[1024]; std::string type; Element elem; while (!from.eof()) { from >> std::ws; from.getline(buff, 1024, ' '); type = buff; if( (type=="metaElem") || (type=="patientElem") || (type=="studyElem") || (type=="serieElem") || (type=="imageElem") ) { 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); } else { dbg.Error("DicomDirElement::DicomDirElement: Error parsing file", filename.c_str()); dbg.Error("Type", type.c_str(), " is not registered as valid" ); } from.getline(buff, 1024, '\n'); } from.close(); } } /** * \ingroup DicomDirElement * \brief canonical destructor */ DicomDirElement::~DicomDirElement() { DicomDirMetaList.clear(); DicomDirPatientList.clear(); DicomDirStudyList.clear(); DicomDirSerieList.clear(); DicomDirImageList.clear(); } //----------------------------------------------------------------------------- // Print /** * \ingroup DicomDirElement * \brief Print all * \todo add a 'Print Level' check * @param os The output stream to be written to. */ void DicomDirElement::Print(std::ostream &os) { std::ostringstream s; std::list::iterator it; //char greltag[10]; //group element tag std::string greltag; s << "Meta Elements :"<Group,it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Patient Elements :"<Group,it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Study Elements :"<Group, it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Serie Elements :"<Group, it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Image Elements :"<Group, it->Elem); s << " (" << greltag << ") = " << it->Value << std::endl; } os << s.str(); } //----------------------------------------------------------------------------- // Public bool DicomDirElement::AddNewEntry(std::string const & type, Element const & elem) { if( type == "metaElem" ) { DicomDirMetaList.push_back(elem); } else if( type == "patientElem" ) { DicomDirPatientList.push_back(elem); } else if( type == "studyElem" ) { DicomDirStudyList.push_back(elem); } else if( type == "serieElem" ) { DicomDirSerieList.push_back(elem); } else if( type == "imageElem" ) { DicomDirImageList.push_back(elem); } else { return false; } return true; } //----------------------------------------------------------------------------- // Protected //----------------------------------------------------------------------------- // Private //----------------------------------------------------------------------------- } // end namespace gdcm