]> Creatis software - gdcm.git/blob - src/gdcmDicomDirSerie.h
Try to make gdcm1.2 and gdcm1.3 usable int the same source code.
[gdcm.git] / src / gdcmDicomDirSerie.h
1 /*=========================================================================
2                                                                                 
3   Program:   gdcm
4   Module:    $RCSfile: gdcmDicomDirSerie.h,v $
5   Language:  C++
6   Date:      $Date: 2007/08/22 16:14:03 $
7   Version:   $Revision: 1.37 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18
19 #ifndef _GDCMDICOMDIRSERIE_H_
20 #define _GDCMDICOMDIRSERIE_H_
21
22 #include "gdcmDicomDirObject.h"
23
24 namespace GDCM_NAME_SPACE 
25 {
26 class DicomDirImage;
27 class DicomDirPrivate;
28
29 //-----------------------------------------------------------------------------
30 typedef std::list<DicomDirImage *> ListDicomDirImage;
31 typedef std::list<DicomDirPrivate *> ListDicomDirPrivate;
32 //-----------------------------------------------------------------------------
33 /**
34  * \brief   describes a SERIE  within a within a STUDY
35  * (DicomDirStudy) of a given DICOMDIR (DicomDir)
36  */
37 class GDCM_EXPORT DicomDirSerie : public DicomDirObject 
38 {
39    gdcmTypeMacro(DicomDirSerie);
40
41 public:
42 /// \brief Constructs a DicomDirSerie with a RefCounter
43    static DicomDirSerie *New(bool empty=false) {return new DicomDirSerie(empty);}
44
45    void Print( std::ostream &os = std::cout, std::string const &indent = "" );
46    void WriteContent( std::ofstream *fp, FileType t, bool insideMetaElements );
47
48    // 'Image' methods
49    DicomDirImage *NewImage();
50    /// Add a new gdcm::DicomDirImage to the Serie
51    void AddImage(DicomDirImage *obj) { Images.push_back(obj); }
52    void ClearImage();
53
54    DicomDirImage *GetFirstImage();
55    DicomDirImage *GetNextImage();
56    /// returns the number of Images currently held in the gdcm::DicomDirSerie
57    int            GetNumberOfImages() { return Images.size();}
58    
59    // 'Private' methods (For SIEMENS 'CSA non image')
60    DicomDirPrivate *NewPrivate();
61    /// Add a new gdcm::DicomDirPrivate to the Serie
62    void AddPrivate(DicomDirPrivate *obj) { Privates.push_back(obj); }
63    void ClearPrivate();
64
65    DicomDirPrivate *GetFirstPrivate();
66    DicomDirPrivate *GetNextPrivate();   
67    /// returns the number of 'Privates' currently held in the gdcm::DicomDirSerie
68    int             GetNumberOfPrivates() { return Privates.size();}   
69    
70    virtual void Copy(DocEntrySet *set);
71
72 protected:
73    DicomDirSerie(bool empty=false); 
74    ~DicomDirSerie();
75
76 private:
77    ///chained list of DicomDirImages (to be exploited recursively)
78    ListDicomDirImage Images;
79    /// iterator on the DicomDirImages of the current DicomDirSerie
80    ListDicomDirImage::iterator ItImage;
81
82    ///chained list of DicomDirPrivates (to be exploited recursively)
83    ListDicomDirPrivate Privates;
84    /// iterator on the DicomDirPrivates of the current DicomDirSerie
85    ListDicomDirPrivate::iterator ItPrivate;
86 /*
87 // for future use  (Full DICOMDIR):
88
89    /// chained list of DicomDirOverlays(single level)
90    ListDicomDirOverlay Overlays;
91    /// iterator on the DicomDirOverlays of the current DicomDirSerie
92    ListDicomDirOverlay::iterator ItOverlay;
93
94    /// chained list of DicomDirModalityLuts(single level)
95    ListDicomDirModalityLut ModalityLuts;
96    /// iterator on the DicomDirModalityLuts of the current DicomDirSerie
97    ListDicomDirModalityLut::iterator ItModalityLuts;
98
99    /// chained list of DicomDirCurves(single level)
100    ListDicomDirCurve Curves;
101    /// iterator on the DicomDirCurves of the current DicomDirSerie
102    ListDicomDirCurve::iterator ItCurves;
103
104    /// chained list of DicomDirStoredPrints(single level)
105    ListDicomDirStoredPrint StoredPrints;
106    /// iterator on the DicomDirStoredPrints of the current DicomDirSerie
107    ListDicomDirStoredPrint::iterator ItStoredPrints;
108
109    /// chained list of DicomDirRtDoses(single level)
110    ListDicomDirRtDose RtDoses;
111    /// iterator on the DicomDirRtDoses of the current DicomDirSerie
112    ListDicomDirRtDose::iterator ItRtDoses;
113
114    /// chained list of DicomDirRtStructureSets(single level)
115    ListDicomDirRtStructureSet RtStructureSets;
116    /// iterator on the DicomDirRtStructureSets of the current DicomDirSerie
117    ListDicomDirRtStructureSet::iterator ItRtStructureSets;
118
119    /// chained list of DicomDirRtPlans(single level)
120    ListDicomDirRtPlan RtPlans;
121    /// iterator on the DicomDirRtPlans of the current DicomDirSerie
122    ListDicomDirPlan::iterator ItRtPlans;
123
124    /// chained list of DicomDirRtTreatRecords(single level)
125    ListDicomDirRtTreatRecord RtTreatRecords;
126    /// iterator on the DicomDirRtTreatRecords of the current DicomDirSerie
127    ListDicomDirRtTreatRecord::iterator ItRtTreatRecords;
128
129    /// chained list of DicomDirPresentations(single level)
130    ListDicomDirPresentation Presentations;
131    /// iterator on the DicomDirPresentations of the current DicomDirSerie
132    ListDicomDirPresentation::iterator ItPresentations;
133
134    /// chained list of DicomDirWaveForms(single level)
135    ListDicomDirWaveForm WaveForms;
136    /// iterator on the DicomDirWaveForms of the current DicomDirSerie
137    ListDicomDirWaveForm::iterator ItWaveForms;
138
139    /// chained list of DicomDirSrDocuments(single level)
140    ListDicomDirSrDocument SrDocuments;
141    /// iterator on the DicomDirSrDocuments of the current DicomDirSerie
142    ListDicomDirSrDocument::iterator ItSrDocuments;
143
144    /// chained list of DicomDirKeyObjectDocs(single level)
145    ListDicomDirKeyObjectDoc KeyObjectDocs;
146    /// iterator on the DicomDirKeyObjectDocs of the current DicomDirSerie
147    ListDicomDirKeyObjectDoc::iterator ItKeyObjectDocs;
148
149    /// chained list of DicomDirSpectroscopys(single level)
150    ListDicomDirSpectroscopy Spectroscopys;
151    /// iterator on the DicomDirSpectroscopys of the current DicomDirSerie
152    ListDicomDirSpectroscopy::iterator ItSpectroscopys;
153
154    /// chained list of DicomDirRawDatas(single level)
155    ListDicomDirRawData RawDatas;
156    /// iterator on the DicomDirRawDatas of the current DicomDirSerie
157    ListDicomDirRawData::iterator ItRawDatas;
158
159    /// chained list of DicomDirRegistrations(single level)
160    ListDicomDirRegistration Registrations;
161    /// iterator on the DicomDirRegistrations of the current DicomDirSerie
162    ListDicomDirRegistration::iterator ItRegistrations;
163
164    /// chained list of DicomDirFiducials(single level)
165    ListDicomDirFiducial Fiducials;
166    /// iterator on the DicomDirFiducials of the current DicomDirSerie
167    ListDicomDirFiducial::iterator ItFiducials;
168 */
169
170 };
171 } // end namespace gdcm
172 //-----------------------------------------------------------------------------
173 #endif