1 // gdcmHeaderEntrySet.h
2 //-----------------------------------------------------------------------------
3 #ifndef GDCMHeaderEntrySet_H
4 #define GDCMHeaderEntrySet_H
6 #include "gdcmCommon.h"
7 #include "gdcmHeaderEntry.h"
11 #include <list> // for linking together *all* the Dicom Elements
13 //-----------------------------------------------------------------------------
14 typedef std::multimap<TagKey, gdcmHeaderEntry*> TagHeaderEntryHT;
15 typedef std::pair<TagKey, gdcmHeaderEntry*> PairHT;
16 typedef std::pair<TagHeaderEntryHT::iterator,TagHeaderEntryHT::iterator> IterHT;
18 typedef std::list<gdcmHeaderEntry*> ListTag; // for linking together the Elements
20 // TODO : to be removed after re-writting gdcmHeaderEntrySet::UpdateGroupLength
21 // using the chained list instead of the H table
22 typedef std::string GroupKey;
23 typedef std::map<GroupKey, int> GroupHT;
25 //-----------------------------------------------------------------------------
27 * \defgroup gdcmHeaderEntrySet
28 * \brief Container for a set of successfully parsed HeaderEntries
29 * (i.e. Dicom Elements).
31 class GDCM_EXPORT gdcmHeaderEntrySet {
33 ~gdcmHeaderEntrySet();
35 void Print(std::ostream &);
37 void Add(gdcmHeaderEntry*);
39 gdcmHeaderEntry* GetHeaderEntryByNumber(guint16 group, guint16 element);
40 std::string GetEntryByNumber(guint16 group, guint16 element);
42 bool SetEntryByNumber(std::string content, guint16 group, guint16 element);
43 bool SetEntryLengthByNumber(guint32 l, guint16 group, guint16 element);
44 bool SetVoidAreaByNumber(void *a, guint16 Group, guint16 Elem );
46 guint32 GenerateFreeTagKeyInGroup(guint16 group);
47 int CheckIfExistByNumber(guint16 Group, guint16 Elem ); // int !
50 * \ingroup gdcmHeaderEntrySet
51 * \brief returns a ref to the Dicom Header H table (multimap)
52 * return the Dicom Header H table
54 inline TagHeaderEntryHT & gdcmHeaderEntrySet::GetTagHT(void) { return tagHT; };
57 * \ingroup gdcmHeaderEntrySet
58 * \brief returns a ref to the Dicom Header chained list
59 * return the Dicom Header chained list
61 inline ListTag & gdcmHeaderEntrySet::GetListEntry(void) { return listEntries; };
63 bool Write(FILE *fp, FileType type);
66 void UpdateGroupLength(bool SkipSequence = false, FileType type = ImplicitVR);
67 void WriteEntries(FileType type, FILE *);
70 TagHeaderEntryHT tagHT; // H Table (multimap), to provide fast access
71 ListTag listEntries; // chained list, to keep the 'spacial' ordering
74 //-----------------------------------------------------------------------------