]> 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 : populates the chained lists 
28  *          from the file 'Dicts/DicomDir.dic'
29  */
30  gdcmDicomDirElement::gdcmDicomDirElement(void) {
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              DicomDirMetaList.push_back(elem);
58          else if(type=="patientElem")
59             DicomDirPatientList.push_back(elem);
60          else if(type=="studyElem")
61             DicomDirStudyList.push_back(elem);
62          else if(type=="serieElem")
63             DicomDirSerieList.push_back(elem);
64          else if(type=="imageElem")
65             DicomDirImageList.push_back(elem);
66       }
67       from.getline(buff, 1024, '\n');
68    }
69    from.close();
70 }
71
72 /**
73  * \ingroup gdcmDicomDirElement
74  * \brief   canonical destructor 
75  */
76  gdcmDicomDirElement::~gdcmDicomDirElement() {
77    DicomDirMetaList.clear();
78    DicomDirPatientList.clear();
79    DicomDirStudyList.clear();
80    DicomDirSerieList.clear();
81    DicomDirImageList.clear();
82 }
83
84 //-----------------------------------------------------------------------------
85 // Print
86 /**
87  * \ingroup gdcmDicomDirElement
88  * \brief   Print all
89  * \todo add a 'Print Level' check 
90  * @param   os The output stream to be written to.
91  */
92 void gdcmDicomDirElement::Print(std::ostream &os) {
93    std::ostringstream s;
94    std::list<gdcmElement>::iterator it;
95    char greltag[10];  //group element tag
96
97    s << "Meta Elements :"<<std::endl;
98    for (it = DicomDirMetaList.begin();it!=DicomDirMetaList.end();++it)
99    {
100       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
101       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
102    }
103
104    s << "Patient Elements :"<<std::endl;
105    for (it = DicomDirPatientList.begin();it!=DicomDirPatientList.end();++it)
106    {
107       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
108       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
109    }
110
111    s << "Study Elements :"<<std::endl;
112    for (it = DicomDirStudyList.begin();it!=DicomDirStudyList.end();++it)
113    {
114       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
115       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
116    }
117
118    s << "Serie Elements :"<<std::endl;
119    for (it = DicomDirSerieList.begin();it!=DicomDirSerieList.end();++it)
120    {
121       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
122       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
123    }
124
125    s << "Image Elements :"<<std::endl;
126    for (it = DicomDirImageList.begin();it!=DicomDirImageList.end();++it)
127    {
128       sprintf(greltag,"%04x|%04x ",it->group,it->elem);
129       s << "   ("<<greltag<<") = "<< it->value<<std::endl;
130    }
131
132    os << s.str();
133 }
134
135 //-----------------------------------------------------------------------------
136 // Public
137
138 //-----------------------------------------------------------------------------
139 // Protected
140
141 //-----------------------------------------------------------------------------
142 // Private
143
144 //-----------------------------------------------------------------------------