+
+protected:
+ bool CheckIfExistByNumber(guint16 Group, guint16 Elem );
+
+ gdcmHeaderEntry *GetHeaderEntryByName (std::string Name);
+ gdcmHeaderEntry *GetHeaderEntryByNumber(guint16 group, guint16 element);
+
+ int write(std::ostream&);
+ int anonymize(std::ostream&); // FIXME : anonymize should be a friend ?
+
+ size_t GetPubEntryOffsetByNumber (guint16 Group, guint16 Elem);
+ void * GetPubEntryVoidAreaByNumber(guint16 Group, guint16 Elem);
+ void * LoadEntryVoidArea (guint16 Group, guint16 Element);
+
+
+// Variables
+ FILE * fp;
+ FileType filetype; // ACR, ACR_LIBIDO, ExplicitVR, ImplicitVR, Unknown
+
+private:
+ // Read
+ void LoadHeaderEntries (void);
+ void LoadHeaderEntry (gdcmHeaderEntry *);
+ void LoadHeaderEntrySafe (gdcmHeaderEntry *);
+ void FindHeaderEntryLength(gdcmHeaderEntry *);
+ void FindHeaderEntryVR (gdcmHeaderEntry *);
+
+ void SkipHeaderEntry (gdcmHeaderEntry *);
+ void FixHeaderEntryFoundLength(gdcmHeaderEntry *, guint32);
+ bool IsHeaderEntryAnInteger (gdcmHeaderEntry *);
+
+ guint32 FindHeaderEntryLengthOB(void);
+
+ guint16 ReadInt16(void);
+ guint32 ReadInt32(void);
+ void SkipBytes(guint32);
+
+ void Initialise(void);
+ void CheckSwap(void);
+ void SwitchSwapToBigEndian(void);
+ void SetMaxSizeLoadElementValue(long);
+
+ // Dict
+ gdcmDictEntry *GetDictEntryByName (std::string Name);
+ gdcmDictEntry *GetDictEntryByNumber(guint16, guint16);
+
+ // HeaderEntry related utilities
+ gdcmHeaderEntry *ReadNextHeaderEntry (void);
+ gdcmHeaderEntry *NewHeaderEntryByNumber(guint16 group, guint16 element);
+ gdcmHeaderEntry *NewHeaderEntryByName (std::string Name);
+
+ // Deprecated (Not used)
+ gdcmHeaderEntry *NewManualHeaderEntryToPubDict(std::string NewTagName,
+ std::string VR);
+
+// Variables
+ // Pointer to the Value Representation Hash Table which contains all
+ // the VR of the DICOM version3 public dictionary.
+ gdcmVR *dicom_vr; // Not a class member for thread-safety reasons
+
+ // Pointer to the Transfert Syntax Hash Table which contains all
+ // the TS of the DICOM version3 public dictionary.
+ gdcmTS *dicom_ts; // Not a class member for thread-safety reasons
+
+ // Pointer to global dictionary container
+ gdcmDictSet *Dicts; // Not a class member for thread-safety reasons
+
+ // Public dictionary used to parse this header
+ gdcmDict *RefPubDict;
+
+ // Optional "shadow dictionary" (private elements) used to parse this
+ // header
+ gdcmDict *RefShaDict;
+
+ /// ELement VALueS parsed with the PUBlic dictionary.
+ gdcmHeaderEntrySet PubEntrySet;
+
+ // Refering underlying filename.
+ std::string filename;
+
+ int enableSequences;
+
+ // FIXME sw should be an enum e.g.
+ //enum EndianType {
+ //LittleEndian,
+ //BadLittleEndian,
+ //BigEndian,
+ //BadBigEndian};
+ // Swap code e.g. little, big, bad-big, bad-little endian). Warning:
+ // this code is not fixed during header parsing.
+ int sw;
+
+ // Size treshold above which an element value will NOT be loaded in
+ // memory (to avoid loading the image/volume itself). By default,
+ // this upper bound is fixed to 1024 bytes (which might look reasonable
+ // when one considers the definition of the various VR contents).
+ guint32 MaxSizeLoadElementValue;
+
+ static const unsigned int HEADER_LENGTH_TO_READ;
+ static const unsigned int MAX_SIZE_LOAD_ELEMENT_VALUE;