2 //-----------------------------------------------------------------------------
6 #include "gdcmHeader.h"
7 #include "gdcmCommon.h"
8 #include "gdcmDicomDirPatient.h"
9 #include "gdcmDicomDirMeta.h"
10 #include "gdcmDicomDirElement.h"
15 //-----------------------------------------------------------------------------
16 typedef std::list<gdcmDicomDirPatient *> ListDicomDirPatient;
17 typedef std::vector<gdcmHeader *> ListHeader;
19 typedef GDCM_EXPORT void(gdcmMethod)(void * = NULL);
20 //-----------------------------------------------------------------------------
22 * \defgroup gdcmDicomDir
23 * \brief gdcmDicomDir defines an object representing a DICOMDIR in memory.
26 class GDCM_EXPORT gdcmDicomDir: public gdcmParser
29 // gdcmDicomDir(ListTag *l,
30 // bool exception_on_error = false);
31 gdcmDicomDir(const char *FileName,
32 bool parseDir = false,
33 bool exception_on_error = false);
34 gdcmDicomDir(bool exception_on_error = false);
38 void SetPrintLevel(int level) { printLevel = level; };
39 virtual void Print(std::ostream &os = std::cout);
41 // Informations contained in the parser
42 virtual bool IsReadable(void);
44 * \ingroup gdcmDicomDir
45 * \brief returns a pointer to the gdcmDicomDirMeta for this DICOMDIR.
47 inline gdcmDicomDirMeta *GetDicomDirMeta()
50 * \ingroup gdcmDicomDir
51 * \brief returns the PATIENT chained List for this DICOMDIR.
53 inline ListDicomDirPatient &GetDicomDirPatients()
57 void ParseDirectory(void);
59 void SetStartMethod(gdcmMethod *,void * =NULL,gdcmMethod * =NULL);
60 void SetStartMethodArgDelete(gdcmMethod *);
61 void SetProgressMethod(gdcmMethod *,void * =NULL,gdcmMethod * =NULL);
62 void SetProgressMethodArgDelete(gdcmMethod *);
63 void SetEndMethod(gdcmMethod *,void * =NULL,gdcmMethod * =NULL);
64 void SetEndMethodArgDelete(gdcmMethod *);
66 inline float GetProgress(void) {return(progress);};
67 inline void AbortProgress(void){abort=true; };
68 inline bool IsAborted(void) {return(abort); };
71 gdcmDicomDirPatient * NewPatient(void);
74 bool Write(std::string fileName);
81 GDCM_DICOMDIR_PATIENT,
88 void CreateDicomDirChainedList(std::string path);
89 std::string GetPath(void);
91 void CallStartMethod(void);
92 void CallProgressMethod(void);
93 void CallEndMethod(void);
96 void CreateDicomDir(void);
97 void AddObjectToEnd(gdcmDicomDirType type,
98 ListTag::iterator begin,ListTag::iterator end);
99 void AddDicomDirMetaToEnd (ListTag::iterator begin,ListTag::iterator end);
100 void AddDicomDirPatientToEnd(ListTag::iterator begin,ListTag::iterator end);
101 void AddDicomDirStudyToEnd (ListTag::iterator begin,ListTag::iterator end);
102 void AddDicomDirSerieToEnd (ListTag::iterator begin,ListTag::iterator end);
103 void AddDicomDirImageToEnd (ListTag::iterator begin,ListTag::iterator end);
105 void SetElements(std::string &path,ListHeader &list);
106 void SetElement (std::string &path,gdcmDicomDirType type,gdcmHeader *header);
108 void UpdateDirectoryRecordSequenceLength(void);
110 static bool HeaderLessThan(gdcmHeader *header1,gdcmHeader *header2);
111 void WriteDicomDirEntries(FILE *_fp);
115 * \brief pointer on *the* gdcmObject 'DicomDirMeta Elements'
117 gdcmDicomDirMeta *metaElems;
119 * \brief chained list of DicomDirPatient (to be exploited recursively)
121 ListDicomDirPatient patients;
123 gdcmMethod *startMethod;
124 gdcmMethod *progressMethod;
125 gdcmMethod *endMethod;
126 gdcmMethod *startMethodArgDelete;
127 gdcmMethod *progressMethodArgDelete;
128 gdcmMethod *endMethodArgDelete;
137 //-----------------------------------------------------------------------------