-gdcmDict::gdcmDict(char * FileName) {
- std::ifstream from(FileName);
- dbg.Error(!from, "gdcmDictSet::gdcmDictSet:",
- "can't open dictionary");
- guint16 group, element;
- // CLEANME : use defines for all those constants
- char buff[1024];
- TagKey key, vr, fourth, name;
- while (!from.eof()) {
- from >> hex >> group >> element;
- eatwhite(from);
- from.getline(buff, 256, ' ');
- vr = buff;
- eatwhite(from);
- from.getline(buff, 256, ' ');
- fourth = buff;
- from.getline(buff, 256, '\n');
- name = buff;
- gdcmDictEntry * newEntry = new gdcmDictEntry(group, element,
- vr, fourth, name);
- entries[gdcmDictEntry::TranslateToKey(group, element)] = newEntry;
- }
- from.close();
-}
-
-void gdcmDict::Print(ostream& os) {
- for (TagHT::iterator tag = entries.begin(); tag != entries.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;
- }
-}
-
-gdcmDictEntry * gdcmDict::GetTag(guint32 group, guint32 element) {
- TagKey key = gdcmDictEntry::TranslateToKey(group, element);
- TagHT::iterator found = entries.find(key);
- return found->second;
+/**
+ * \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
+ */
+bool Dict::RemoveEntry(TagKey const &key)
+{
+ TagKeyHT::const_iterator it = KeyHt.find(key);
+ if(it != KeyHt.end())
+ {
+ KeyHt.erase(key);
+
+ return true;
+ }
+ else
+ {
+ gdcmWarningMacro( "Unfound entry" << key.c_str());
+ return false;
+ }
+}
+
+/**
+ * \brief removes an already existing Dicom Dictionary Entry,
+ * identified by its group,element number
+ * @param group Dicom group number of the Dicom Element
+ * @param elem Dicom element number of the Dicom Element
+ * @return false if Dicom Dictionary Entry doesn't exist
+ */
+bool Dict::RemoveEntry(uint16_t group, uint16_t elem)
+{
+ return RemoveEntry(DictEntry::TranslateToKey(group, elem));
+}
+
+/**
+ * \brief Remove all Dicom Dictionary Entries
+ */
+void Dict::ClearEntry()
+{
+ // we assume all the pointed DictEntries are already cleaned-up
+ // when we clean KeyHt.
+ KeyHt.clear();
+}
+
+/**
+ * \brief Get the dictionary entry identified by a given tag (group,element)
+ * @param group group of the entry to be found
+ * @param elem element of the entry to be found
+ * @return the corresponding dictionary entry when existing, NULL otherwise
+ */
+DictEntry *Dict::GetEntry(uint16_t group, uint16_t elem)
+{
+ TagKey key = DictEntry::TranslateToKey(group, elem);
+ TagKeyHT::iterator it = KeyHt.find(key);
+ if ( it == KeyHt.end() )
+ {
+ return 0;
+ }
+ return &(it->second);
+}
+
+/**
+ * \brief Get the first entry while visiting the Dict entries
+ * \return The first DicEntry if found, otherwhise NULL
+ */
+DictEntry *Dict::GetFirstEntry()
+{
+ ItKeyHt = KeyHt.begin();
+ if( ItKeyHt != KeyHt.end() )
+ return &(ItKeyHt->second);
+ return NULL;