X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDicomDirElement.cxx;h=f719d3c89af6e928a3e8a2a07b8762d347ba1934;hb=327dfe7647e3720b0f3125f9b19397cb9afc0ed3;hp=c26b9d32ae87c4f4167f633a99dec15d32867ee1;hpb=be70f5cdc8ac472bff8ad8a36637457fe49778bd;p=gdcm.git diff --git a/src/gdcmDicomDirElement.cxx b/src/gdcmDicomDirElement.cxx index c26b9d32..f719d3c8 100644 --- a/src/gdcmDicomDirElement.cxx +++ b/src/gdcmDicomDirElement.cxx @@ -1,79 +1,88 @@ -// gdcmDicomDirElement.cxx -//----------------------------------------------------------------------------- -#include -#include // For sprintf +/*========================================================================= + + Program: gdcm + Module: $RCSfile: gdcmDicomDirElement.cxx,v $ + Language: C++ + Date: $Date: 2005/01/06 20:03:26 $ + Version: $Revision: 1.23 $ + + 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" -#ifndef PUB_DICT_PATH -# define PUB_DICT_PATH "../Dicts/" -#endif -#define DICT_ELEM "DicomDir.dic" - +#include #include -#ifdef GDCM_NO_ANSI_STRING_STREAM -# include -# define ostringstream ostrstream -# else -# include -#endif +namespace gdcm +{ +void FillDefaultDIRDict(DicomDirElement *dde); //----------------------------------------------------------------------------- // Constructor / Destructor /** - * \ingroup gdcmDicomDirElement * \brief constructor : populates the chained lists * from the file 'Dicts/DicomDir.dic' */ - gdcmDicomDirElement::gdcmDicomDirElement(void) { - std::string filename=gdcmDictSet::BuildDictPath() + std::string(DICT_ELEM); +DicomDirElement::DicomDirElement() +{ + std::string filename = DictSet::BuildDictPath() + DICT_ELEM; std::ifstream from(filename.c_str()); - dbg.Error(!from, "gdcmDicomDirElement::gdcmDicomDirElement: can't open dictionary",filename.c_str()); - - char buff[1024]; - std::string type; - gdcmElement elem; - - while (!from.eof()) { - eatwhite(from); - from.getline(buff, 1024, ' '); - type = buff; + 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; - if( (type=="metaElem") || (type=="patientElem") || - (type=="studyElem") || (type=="serieElem") || - (type=="imageElem") ) + while (!from.eof()) { - from >> std::hex >> elem.group >> elem.elem; - - eatwhite(from); - from.getline(buff, 1024, '"'); - eatwhite(from); - 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") - DicomDirStudyList.push_back(elem); - else if(type=="serieElem") - DicomDirSerieList.push_back(elem); - else if(type=="imageElem") - DicomDirImageList.push_back(elem); + 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); + } + from.getline(buff, 1024, '\n'); } - from.getline(buff, 1024, '\n'); + from.close(); } - from.close(); } /** - * \ingroup gdcmDicomDirElement + * \ingroup DicomDirElement * \brief canonical destructor */ - gdcmDicomDirElement::~gdcmDicomDirElement() { +DicomDirElement::~DicomDirElement() +{ DicomDirMetaList.clear(); DicomDirPatientList.clear(); DicomDirStudyList.clear(); @@ -84,49 +93,51 @@ //----------------------------------------------------------------------------- // Print /** - * \ingroup gdcmDicomDirElement + * \ingroup DicomDirElement * \brief Print all * \todo add a 'Print Level' check * @param os The output stream to be written to. */ -void gdcmDicomDirElement::Print(std::ostream &os) { +void DicomDirElement::Print(std::ostream &os) +{ std::ostringstream s; - std::list::iterator it; - char greltag[10]; //group element tag + std::list::iterator it; + //char greltag[10]; //group element tag + std::string greltag; s << "Meta Elements :"<group,it->elem); - s << " ("<value<Group,it->Elem); + s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Patient Elements :"<group,it->elem); - s << " ("<value<Group,it->Elem); + s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Study Elements :"<group,it->elem); - s << " ("<value<Group, it->Elem); + s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Serie Elements :"<group,it->elem); - s << " ("<value<Group, it->Elem); + s << " (" << greltag << ") = " << it->Value << std::endl; } s << "Image Elements :"<group,it->elem); - s << " ("<value<Group, it->Elem); + s << " (" << greltag << ") = " << it->Value << std::endl; } os << s.str(); @@ -135,6 +146,35 @@ void gdcmDicomDirElement::Print(std::ostream &os) { //----------------------------------------------------------------------------- // 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 @@ -142,3 +182,5 @@ void gdcmDicomDirElement::Print(std::ostream &os) { // Private //----------------------------------------------------------------------------- + +} // end namespace gdcm