2 //-----------------------------------------------------------------------------
3 #include "gdcmDicomDir.h"
11 //-----------------------------------------------------------------------------
12 // Constructor / Destructor
13 gdcmDicomDir::gdcmDicomDir(std::string & FileName,
14 bool exception_on_error):
15 gdcmParser(FileName.c_str(),exception_on_error, true )
17 if ( GetListEntry().begin() == GetListEntry().end() )
19 dbg.Verbose(0, "gdcmDicomDir::gdcmDicomDir entry list empty");
26 gdcmDicomDir::~gdcmDicomDir()
28 for(ListPatient::iterator cc = patients.begin();cc!=patients.end();++cc)
34 //-----------------------------------------------------------------------------
36 void gdcmDicomDir::Print(std::ostream &os)
38 for(ListPatient::iterator cc = patients.begin();cc!=patients.end();++cc)
40 (*cc)->SetPrintLevel(printLevel);
45 //-----------------------------------------------------------------------------
48 //-----------------------------------------------------------------------------
51 //-----------------------------------------------------------------------------
53 void gdcmDicomDir::CreateDicomDir(void)
55 // The list is parsed. When a tag is found :
56 // 1 - we save the beginning iterator
57 // 2 - we continue to parse
58 // 3 - we find an other tag
59 // + we create the object for the precedent tag
62 gdcmDicomDirType type=gdcmDicomDir::GDCM_NONE;
63 ListTag::iterator begin;
64 ListTag::iterator end;
66 begin=GetListEntry().begin();
68 for(ListTag::iterator i=GetListEntry().begin();i != GetListEntry().end();++i)
70 // std::cout << std::hex << (*i)->GetGroup() <<
71 // " " << (*i)->GetElement() << endl;
73 std::string v = (*i)->GetValue();
76 // std::cout<<"PATIENT"<<std::endl;
78 AddObjectToEnd(type,begin,end);
80 type=gdcmDicomDir::GDCM_PATIENT;
86 // std::cout<<"STUDY"<<std::endl;
88 AddObjectToEnd(type,begin,end);
90 type=gdcmDicomDir::GDCM_STUDY;
96 // std::cout<<"SERIES"<<std::endl;
98 AddObjectToEnd(type,begin,end);
100 type=gdcmDicomDir::GDCM_SERIE;
106 // std::cout<<"IMAGE"<<std::endl;
108 AddObjectToEnd(type,begin,end);
110 type=gdcmDicomDir::GDCM_IMAGE;
115 end=GetListEntry().end();
116 AddObjectToEnd(type,begin,end);
119 void gdcmDicomDir::AddObjectToEnd(gdcmDicomDirType type,ListTag::iterator begin,ListTag::iterator end)
126 case gdcmDicomDir::GDCM_PATIENT:
127 AddPatientToEnd(begin,end);
129 case gdcmDicomDir::GDCM_STUDY:
130 AddStudyToEnd(begin,end);
132 case gdcmDicomDir::GDCM_SERIE:
133 AddSerieToEnd(begin,end);
135 case gdcmDicomDir::GDCM_IMAGE:
136 AddImageToEnd(begin,end);
141 void gdcmDicomDir::AddPatientToEnd(ListTag::iterator begin,ListTag::iterator end)
143 patients.push_back(new gdcmPatient(begin,end));
146 void gdcmDicomDir::AddStudyToEnd(ListTag::iterator begin,ListTag::iterator end)
148 if(patients.size()>0)
150 ListPatient::iterator itp=patients.end();
152 (*itp)->AddStudy(new gdcmStudy(begin,end));
156 void gdcmDicomDir::AddSerieToEnd(ListTag::iterator begin,ListTag::iterator end)
158 if(patients.size()>0)
160 ListPatient::iterator itp=patients.end();
163 if((*itp)->GetStudies().size()>0)
165 ListStudy::iterator itst=(*itp)->GetStudies().end();
167 (*itst)->AddSerie(new gdcmSerie(begin,end));
172 void gdcmDicomDir::AddImageToEnd(ListTag::iterator begin,ListTag::iterator end)
174 if(patients.size()>0)
176 ListPatient::iterator itp=patients.end();
179 if((*itp)->GetStudies().size()>0)
181 ListStudy::iterator itst=(*itp)->GetStudies().end();
184 if((*itst)->GetSeries().size()>0)
186 ListSerie::iterator its=(*itst)->GetSeries().end();
188 (*its)->AddImage(new gdcmImage(begin,end));
194 //-----------------------------------------------------------------------------