]> Creatis software - gdcm.git/blob - src/gdcmDicomDirElement.cxx
doxygenation
[gdcm.git] / src / gdcmDicomDirElement.cxx
1 // gdcmDicomDirElement.cxx
2 //-----------------------------------------------------------------------------
3 #include <fstream>
4 #include <stdio.h>    // For sprintf
5
6 #include "gdcmDicomDirElement.h"
7 #include "gdcmUtil.h"
8
9 #ifndef PUB_DICT_PATH
10 #  define PUB_DICT_PATH     "../Dicts/"
11 #endif
12 #define DICT_ELEM "DicomDir.dic"
13
14 #include <iostream>
15 #ifdef GDCM_NO_ANSI_STRING_STREAM
16 #  include <strstream>
17 #  define  ostringstream ostrstream
18 # else
19 #  include <sstream>
20 #endif
21
22 //-----------------------------------------------------------------------------
23 // Constructor / Destructor
24
25 /**
26  * \ingroup gdcmDicomDirElement
27  * \brief   constructor 
28  */
29  gdcmDicomDirElement::gdcmDicomDirElement(void) 
30 {
31    std::string filename=gdcmDictSet::BuildDictPath() + std::string(DICT_ELEM);
32    std::ifstream from(filename.c_str());
33    dbg.Error(!from, "gdcmDicomDirElement::gdcmDicomDirElement: can't open dictionary",filename.c_str());
34
35    char buff[1024];
36    std::string type;
37    gdcmElement elem;
38
39    while (!from.eof()) {
40       eatwhite(from);
41       from.getline(buff, 1024, ' ');
42       type = buff;
43
44       if( (type=="metaElem") || (type=="patientElem") || 
45           (type=="studyElem") || (type=="serieElem") || 
46           (type=="imageElem") )
47       {
48          from >> std::hex >> elem.group >> elem.elem;
49
50          eatwhite(from);
51          from.getline(buff, 1024, '"');
52          eatwhite(from);
53          from.getline(buff, 1024, '"');
54          elem.value = buff;
55
56          if(type=="metaElem")
57             MetaList.push_back(elem);
58          else if(type=="patientElem")
59             PatientList.push_back(elem);
60          else if(type=="studyElem")
61             StudyList.push_back(elem);
62          else if(type=="serieElem")
63             SerieList.push_back(elem);
64          else if(type=="imageElem")
65             ImageList.push_back(elem);
66       }
67
68       from.getline(buff, 1024, '\n');
69    }
70    from.close();
71 }
72
73 /**
74  * \ingroup gdcmDicomDirElement
75  * \brief   destructor 
76  */
77  gdcmDicomDirElement::~gdcmDicomDirElement() 
78 {
79    MetaList.clear();
80    PatientList.clear();
81    StudyList.clear();
82    SerieList.clear();
83    ImageList.clear();
84 }
85
86 //-----------------------------------------------------------------------------
87 // Print
88 /**
89  * \ingroup gdcmDicomDirElement
90  * \brief   Print all
91  * \todo add a 'Print Level' check 
92  * @param   os The output stream to be written to.
93  */
94 void gdcmDicomDirElement::Print(std::ostream &os) 
95 {
96    std::ostringstream s;
97    std::list<gdcmElement>::iterator it;
98    char greltag[10];  //group element tag
99
100    s << "Meta Elements :"<<std::endl;
101    for (it = MetaList.begin();it!=MetaList.end();++it)
102    {
103       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
104       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
105    }
106
107    s << "Patient Elements :"<<std::endl;
108    for (it = PatientList.begin();it!=PatientList.end();++it)
109    {
110       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
111       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
112    }
113
114    s << "Study Elements :"<<std::endl;
115    for (it = StudyList.begin();it!=StudyList.end();++it)
116    {
117       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
118       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
119    }
120
121    s << "Serie Elements :"<<std::endl;
122    for (it = SerieList.begin();it!=SerieList.end();++it)
123    {
124       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
125       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
126    }
127
128    s << "Image Elements :"<<std::endl;
129    for (it = ImageList.begin();it!=ImageList.end();++it)
130    {
131       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
132       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
133    }
134
135    os << s.str();
136 }
137
138 //-----------------------------------------------------------------------------
139 // Public
140
141 //-----------------------------------------------------------------------------
142 // Protected
143
144 //-----------------------------------------------------------------------------
145 // Private
146
147 //-----------------------------------------------------------------------------