]> Creatis software - gdcm.git/blob - src/gdcmDict.cxx
Ajout fonctions
[gdcm.git] / src / gdcmDict.cxx
1 // gdcmDict.cxx
2
3 #include <fstream>
4 #include "gdcm.h"
5 #include "gdcmUtil.h"
6
7 gdcmDict::gdcmDict(const char* FileName) {
8         std::ifstream from(FileName);
9         dbg.Error(!from, "gdcmDict::gdcmDict: can't open dictionary", FileName);
10         guint16 group, element;
11         // CLEANME : use defines for all those constants
12         char buff[1024];
13         TagKey key, vr, fourth, name;
14         while (!from.eof()) {
15                 from >> hex >> group >> element;
16                 eatwhite(from);
17                 from.getline(buff, 256, ' ');
18                 vr = buff;
19                 eatwhite(from);
20                 from.getline(buff, 256, ' ');
21                 fourth = buff;
22                 from.getline(buff, 256, '\n');
23                 name = buff;
24                 gdcmDictEntry * newEntry = new gdcmDictEntry(group, element,
25                                                          vr, fourth, name);
26                 entries[gdcmDictEntry::TranslateToKey(group, element)] = newEntry;
27         }
28    from.close();
29 }
30
31 void gdcmDict::Print(ostream& os) {
32         for (TagHT::iterator tag = entries.begin(); tag != entries.end(); ++tag){
33        os << "Tag : ";
34        os << "(" << hex << tag->second->GetGroup() << ',';
35        os << hex << tag->second->GetElement() << ") = " << dec;
36        os << tag->second->GetVR() << ", ";
37        os << tag->second->GetFourth() << ", ";
38        os << tag->second->GetName() << "."  << endl;
39     }
40 }
41
42 // renvoie une ligne de Dictionnaire Dicom à partir de (numGroup, numElement)
43
44 gdcmDictEntry * gdcmDict::GetTag(guint32 group, guint32 element) {
45         TagKey key = gdcmDictEntry::TranslateToKey(group, element);
46         if ( ! entries.count(key))
47                 return (gdcmDictEntry*)0; 
48         if (entries.count(key) > 1)
49                 dbg.Verbose(0, "gdcmDict::GetTag", 
50                             "multiple entries for this key (FIXME) !");
51         return entries.find(key)->second;
52 }
53
54
55 int gdcmDict::ReplaceEntry(gdcmDictEntry* NewEntry) {
56
57         // au cas ou la NewEntry serait incomplete
58         // Question : cela peut-il se produire ?
59         //
60         TagKey key;
61         key = NewEntry->GetKey();
62         if (key =="") {
63                 NewEntry->gdcmDictEntry::SetKey(
64                                 gdcmDictEntry::TranslateToKey(NewEntry->GetGroup(), NewEntry->GetElement())
65                                 );
66         }
67         
68         entries.erase (NewEntry->gdcmDictEntry::GetKey());
69         entries[ NewEntry->GetKey()] = NewEntry;
70         return (1);
71         // Question : Dans quel cas ça peut planter ?
72 }
73  
74
75 int gdcmDict::AddNewEntry(gdcmDictEntry* NewEntry) {
76
77         // au cas ou la NewEntry serait incomplete
78         // Question : cela peut-il se produire ?
79         //
80         
81         TagKey key;
82         key = NewEntry->GetKey();
83         if (key =="") {
84                 NewEntry->SetKey(
85                                 gdcmDictEntry::TranslateToKey(NewEntry->GetGroup(), NewEntry->GetElement())
86                                 );
87         }
88
89         if(entries.count(key) >= 1) {
90                 printf("gdcmDict::AddNewEntry %s deja present\n", key.c_str());
91                 return(0);
92         } else {
93                 entries[NewEntry->GetKey()] = NewEntry;
94                 return(1);
95         }
96         }
97
98
99 int gdcmDict::RemoveEntry(TagKey key) { 
100         if(entries.count(key) == 1) {
101                 entries.erase(key);
102                 return (1);
103         } else {
104                 printf("gdcmDict::RemoveEntry %s non trouve\n", key.c_str());
105                 return (0);
106         }
107 }
108
109
110 int gdcmDict::RemoveEntry (guint16 group, guint16 element) {
111
112         return( RemoveEntry(gdcmDictEntry::TranslateToKey(group, element)) );
113 }
114