]> Creatis software - gdcm.git/blobdiff - src/gdcmDict.cxx
Some modif in comments; doxygen, etc
[gdcm.git] / src / gdcmDict.cxx
index acd88f8931c9cf2664dc7812b7f94139351ca10e..725d2d6c85d566f884de9b8acfc0a7f16fbad846 100644 (file)
@@ -1,10 +1,17 @@
 // gdcmDict.cxx
-
-#include <fstream>
+//-----------------------------------------------------------------------------
 #include "gdcmDict.h"
 #include "gdcmUtil.h"
-using namespace std;
+#include <fstream>
+#ifdef GDCM_NO_ANSI_STRING_STREAM
+#  include <strstream>
+#  define  ostringstream ostrstream
+# else
+#  include <sstream>
+#endif
 
+//-----------------------------------------------------------------------------
+// Constructor / Destructor
 /**
  * \ingroup gdcmDict
  * \brief   Construtor
@@ -21,6 +28,7 @@ gdcmDict::gdcmDict(std::string & FileName) {
    TagName vr;
    TagName fourth;
    TagName name;
+
    while (!from.eof()) {
       from >> std::hex >> group >> element;
       eatwhite(from);
@@ -32,7 +40,7 @@ gdcmDict::gdcmDict(std::string & FileName) {
       from.getline(buff, 256, '\n');
       name = buff;
       gdcmDictEntry * newEntry = new gdcmDictEntry(group, element,
-                                                        vr, fourth, name);
+                                                  vr, fourth, name);
       // FIXME: use AddNewEntry
       NameHt[name] = newEntry;
       KeyHt[gdcmDictEntry::TranslateToKey(group, element)] = newEntry;
@@ -42,7 +50,7 @@ gdcmDict::gdcmDict(std::string & FileName) {
 
 /**
  * \ingroup gdcmDict
- * \brief   
+ * \brief  Destructor 
  */
 gdcmDict::~gdcmDict() {
    for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag) {
@@ -52,15 +60,17 @@ gdcmDict::~gdcmDict() {
    }
    KeyHt.clear();
    // Since AddNewEntry adds symetrical in both KeyHt and NameHT we can
-   // assume all the pointed gdcmDictEntries are allready cleaned-up when
+   // assume all the pointed gdcmDictEntries are already cleaned-up when
    // we cleaned KeyHt.
    NameHt.clear();
 }
 
+//-----------------------------------------------------------------------------
+// Print
 /**
- * \ingroup gdcmDict
- * \brief   
- * @param   os
+ * \brief   Print all the dictionary entries contained in this dictionary.
+ *          Entries will be sorted by tag i.e. the couple (group, element).
+ * @param   os The output stream to be written to.
  */
 void gdcmDict::Print(std::ostream& os) {
    PrintByKey(os);
@@ -73,119 +83,142 @@ void gdcmDict::Print(std::ostream& os) {
  * @param   os The output stream to be written to.
  */
 void gdcmDict::PrintByKey(std::ostream& os) {
+   std::ostringstream s;
+
    for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag){
-      os << "Tag : ";
-      os << "(" << hex << tag->second->GetGroup() << ',';
-      os << hex << tag->second->GetElement() << ") = " << dec;
-      os << tag->second->GetVR() << ", ";
-      os << tag->second->GetFourth() << ", ";
-      os << tag->second->GetName() << "."  << endl;
+      s << "Tag : ";
+      s << "(" << std::hex << tag->second->GetGroup() << ',';
+      s << std::hex << tag->second->GetElement() << ") = " << std::dec;
+      s << tag->second->GetVR() << ", ";
+      s << tag->second->GetFourth() << ", ";
+      s << tag->second->GetName() << "."  << std::endl;
    }
+   os << s.str();
 }
 
 /**
  * \ingroup gdcmDict
  * \brief   Print all the dictionary entries contained in this dictionary.
  *          Entries will be sorted by the name of the dictionary entries.
+ * \warning AVOID USING IT : the name IS NOT an identifier
+ *                           unpredictable result
  * @param   os The output stream to be written to.
  */
 void gdcmDict::PrintByName(std::ostream& os) {
+   std::ostringstream s;
+
    for (TagNameHT::iterator tag = NameHt.begin(); tag != NameHt.end(); ++tag){
-      os << "Tag : ";
-      os << tag->second->GetName() << ",";
-      os << tag->second->GetVR() << ", ";
-      os << tag->second->GetFourth() << ", ";
-      os << "(" << std::hex << tag->second->GetGroup() << ',';
-      os << std::hex << tag->second->GetElement() << ") = " << dec << std::endl;
+      s << "Tag : ";
+      s << tag->second->GetName() << ",";
+      s << tag->second->GetVR() << ", ";
+      s << tag->second->GetFourth() << ", ";
+      s << "(" << std::hex << tag->second->GetGroup() << ',';
+      s << std::hex << tag->second->GetElement() << ") = " << std::dec << std::endl;
    }
+   os << s.str();
 }
 
+//-----------------------------------------------------------------------------
+// Public
 /**
  * \ingroup gdcmDict
- * \brief   Get the dictionnary entry identified by a given tag (group,element)
- * @param   group   group of the entry to be found
- * @param   element element of the entry to be found
- * @return  the corresponding dictionnary entry when existing, NULL otherwise
- */
-gdcmDictEntry * gdcmDict::GetTagByNumber(guint16 group, guint16 element) {
-   TagKey key = gdcmDictEntry::TranslateToKey(group, element);
-   if ( ! KeyHt.count(key))
-      return (gdcmDictEntry*)0; 
-   return KeyHt.find(key)->second;
-}
-
-/**
- * \ingroup gdcmDict
- * \brief   Get the dictionnary entry identified by it's name.
- * @param   name element of the ElVal to modify
- * @return  the corresponding dictionnary entry when existing, NULL otherwise
+ * \brief  adds a new Dicom Dictionary Entry 
+ * @param   NewEntry 
+ * @return  false if Dicom Element already existed
  */
-gdcmDictEntry * gdcmDict::GetTagByName(TagName name) {
-   if ( ! NameHt.count(name))
-      return (gdcmDictEntry*)0; 
-   return NameHt.find(name)->second;
+ bool gdcmDict::AddNewEntry(gdcmDictEntry* NewEntry) {
+   TagKey key;
+   key = NewEntry->GetKey();
+       
+   if(KeyHt.count(key) == 1) {
+      dbg.Verbose(1, "gdcmDict::AddNewEntry already present", key.c_str());
+      return(false);
+   } else {
+      KeyHt[NewEntry->GetKey()] = NewEntry;
+      return(true);
+   }
 }
 
 /**
  * \ingroup gdcmDict
- * \brief   
+ * \brief  replaces an already existing Dicom Element by a new one
  * @param   NewEntry
- * @return  
+ * @return  false if Dicom Element doesn't exist
  */
-int gdcmDict::ReplaceEntry(gdcmDictEntry* NewEntry) {
+bool gdcmDict::ReplaceEntry(gdcmDictEntry* NewEntry) {
    if ( RemoveEntry(NewEntry->gdcmDictEntry::GetKey()) ) {
        KeyHt[ NewEntry->GetKey()] = NewEntry;
-       return (1);
+       return (true);
    } 
-   return (0);
+   return (false);
 }
 
 /**
  * \ingroup gdcmDict
- * \brief   
- * @param   NewEntry
- * @return  
+ * \brief  removes an already existing Dicom Dictionary Entry,
+ *         identified by its Tag
+ * @param   key (group|element)
+ * @return  false if Dicom Dictionary Entry doesn't exist
  */
- int gdcmDict::AddNewEntry(gdcmDictEntry* NewEntry) {
-   TagKey key;
-   key = NewEntry->GetKey();
-       
-   if(KeyHt.count(key) == 1) {
-      dbg.Verbose(1, "gdcmDict::AddNewEntry allready present", key.c_str());
-      return(0);
-   } else {
-      KeyHt[NewEntry->GetKey()] = NewEntry;
-      return(1);
-   }
-}
-
-/**
- * \ingroup gdcmDict
- * \brief   
- * @param   key
- * @return  
- */
-int gdcmDict::RemoveEntry(TagKey key) {
+bool gdcmDict::RemoveEntry(TagKey key) {
    if(KeyHt.count(key) == 1) {
       gdcmDictEntry* EntryToDelete = KeyHt.find(key)->second;
       if ( EntryToDelete )
          delete EntryToDelete;
       KeyHt.erase(key);
-      return (1);
+      return (true);
    } else {
       dbg.Verbose(1, "gdcmDict::RemoveEntry unfound entry", key.c_str());
-      return (0);
+      return (false);
   }
 }
 
 /**
  * \ingroup gdcmDict
- * \brief   
- * @param   group 
- * @param   element
- * @return  
+ * \brief  removes an already existing Dicom Dictionary Entry, 
+ *          identified by its group,element
+ number
+ * @param   group   Dicom group number of the Dicom Element
+ * @param   element Dicom element number of the Dicom Element
+ * @return  false if Dicom Dictionary Entry doesn't exist
  */
-int gdcmDict::RemoveEntry (guint16 group, guint16 element) {
+bool gdcmDict::RemoveEntry (guint16 group, guint16 element) {
        return( RemoveEntry(gdcmDictEntry::TranslateToKey(group, element)) );
 }
 
+/**
+ * \ingroup gdcmDict
+ * \brief   Get the dictionnary entry identified by a given tag (group,element)
+ * @param   group   group of the entry to be found
+ * @param   element element of the entry to be found
+ * @return  the corresponding dictionnary entry when existing, NULL otherwise
+ */
+gdcmDictEntry * gdcmDict::GetTagByNumber(guint16 group, guint16 element) {
+   TagKey key = gdcmDictEntry::TranslateToKey(group, element);
+   if ( ! KeyHt.count(key))
+      return (gdcmDictEntry*)0; 
+   return KeyHt.find(key)->second;
+}
+
+/**
+ * \ingroup gdcmDict
+ * \brief   Get the dictionnary entry identified by it's name.
+ * @param   name element of the ElVal to modify
+ * \warning : NEVER use it !
+ *            the 'name' IS NOT an identifier within the Dicom Dicom Dictionary
+ *            the name MAY CHANGE between two versions !
+ * @return  the corresponding dictionnary entry when existing, NULL otherwise
+ */
+gdcmDictEntry * gdcmDict::GetTagByName(TagName name) {
+   if ( ! NameHt.count(name))
+      return (gdcmDictEntry*)0; 
+   return NameHt.find(name)->second;
+}
+
+//-----------------------------------------------------------------------------
+// Protected
+
+//-----------------------------------------------------------------------------
+// Private
+
+//-----------------------------------------------------------------------------