]> Creatis software - gdcm.git/blobdiff - src/gdcmDicomDirElement.cxx
Fix bug on DicomDir utilities
[gdcm.git] / src / gdcmDicomDirElement.cxx
index aefcd12d74d9f4d9767e933db051c5e29ac8ca72..b393d5dd00b93fe579af715a671b646f36e63b2b 100644 (file)
@@ -3,8 +3,8 @@
   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/18 07:53:42 $
+  Version:   $Revision: 1.27 $
                                                                                 
   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
 
@@ -35,61 +36,46 @@ namespace gdcm
  */
 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 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;
-
          from >> std::ws;
-         from.getline(buff, 1024, '"');
-         from >> std::ws;
-         from.getline(buff, 1024, '"');
-         elem.Value = buff;
+         from.getline(buff, 1024, ' ');
+         type = buff;
 
-         if( type == "metaElem" )
+         if( type == "metaElem"  || type == "patientElem" || 
+             type == "studyElem" || type == "serieElem"   || 
+             type == "imageElem" )
          {
-            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::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()
@@ -104,7 +90,6 @@ DicomDirElement::~DicomDirElement()
 //-----------------------------------------------------------------------------
 // Print
 /**
- * \ingroup DicomDirElement
  * \brief   Print all
  * \todo add a 'Print Level' check 
  * @param   os The output stream to be written to.
@@ -157,6 +142,40 @@ void DicomDirElement::Print(std::ostream &os)
 //-----------------------------------------------------------------------------
 // Public
 
+/**
+ * \brief AddNewEntry 
+ * @param  type type
+ * @param elem elem
+ */
+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