]> Creatis software - gdcm.git/blobdiff - src/gdcmParser.h
* Bug fix on field having a VR = 'UI'. Assume that is a string field
[gdcm.git] / src / gdcmParser.h
index 0984aa0722be5a594eaf7b3afa4e01ea88cbbd4d..cd18a817f23ffbccda29cda7fe34574b4b57c6ae 100644 (file)
@@ -18,11 +18,11 @@ typedef std::string VRKey;
 typedef std::string VRAtr;
 typedef std::map<VRKey, VRAtr> VRHT;    // Value Representation Hash Table
 
-typedef std::multimap<TagKey, gdcmHeaderEntry*> TagHeaderEntryHT;
-typedef std::pair<TagKey, gdcmHeaderEntry*> PairHT;
+typedef std::multimap<TagKey, gdcmHeaderEntry *> TagHeaderEntryHT;
+typedef std::pair<TagKey, gdcmHeaderEntry *> PairHT;
 typedef std::pair<TagHeaderEntryHT::iterator,TagHeaderEntryHT::iterator> IterHT; 
 
-typedef std::list<gdcmHeaderEntry*> ListTag; // for linking together the Elements
+typedef std::list<gdcmHeaderEntry *> ListTag; // for linking together the Elements
 
 typedef std::string GroupKey;
 typedef std::map<GroupKey, int> GroupHT;
@@ -48,7 +48,7 @@ public:
     * \note    0 for Light Print; 1 for 'medium' Print, 2 for Heavy
     */
    void SetPrintLevel(int level) { printLevel = level; };
-   virtual void PrintPubEntry(std::ostream &os = std::cout);
+   virtual void PrintEntry(std::ostream &os = std::cout);
    virtual void PrintPubDict (std::ostream &os = std::cout);
    virtual void PrintShaDict (std::ostream &os = std::cout);
 
@@ -62,7 +62,7 @@ public:
    bool SetShaDict(DictKey dictName);
 
 // Informations contained in the parser
-   bool IsReadable(void);
+   virtual bool IsReadable(void);
    bool IsImplicitVRLittleEndianTransferSyntax(void);
    bool IsExplicitVRLittleEndianTransferSyntax(void);
    bool IsDeflatedExplicitVRLittleEndianTransferSyntax(void);
@@ -98,7 +98,9 @@ public:
 // System access
    inline int GetSwapCode(void) { return sw; }
    guint16 SwapShort(guint16); // needed by gdcmFile
-   guint32 SwapLong(guint32);  // for JPEG Files
+   guint32 SwapLong(guint32);  // needed by gdcmFile
+   guint16 UnswapShort(guint16); // needed by gdcmFile
+   guint32 UnswapLong(guint32);  // needed by gdcmFile
 
 protected:
 // Entry
@@ -117,11 +119,13 @@ protected:
    virtual void  *LoadEntryVoidArea       (guint16 Group, guint16 Element);
    virtual bool   SetEntryVoidAreaByNumber(void *a, guint16 Group, guint16 Elem);
 
+   virtual void UpdateShaEntries(void);
+
 // Header entry
    gdcmHeaderEntry *GetHeaderEntryByName  (std::string Name);
    gdcmHeaderEntry *GetHeaderEntryByNumber(guint16 group, guint16 element); 
 
-   void LoadHeaderEntrySafe  (gdcmHeaderEntry *);
+   void LoadHeaderEntrySafe(gdcmHeaderEntry *);
 
    void UpdateGroupLength(bool SkipSequence = false, FileType type = ImplicitVR);
    void WriteEntries(FileType type, FILE *);
@@ -133,6 +137,10 @@ protected:
    static const unsigned int HEADER_LENGTH_TO_READ; 
    static const unsigned int MAX_SIZE_LOAD_ELEMENT_VALUE;
 
+protected:
+   int enableSequences;
+   int printLevel;
+
 private:
    // Read
    void Parse(bool exception_on_error = false) throw(gdcmFormatError);
@@ -142,6 +150,10 @@ private:
    void AddHeaderEntry       (gdcmHeaderEntry *);
    void FindHeaderEntryLength(gdcmHeaderEntry *);
    void FindHeaderEntryVR    (gdcmHeaderEntry *);
+   bool CheckHeaderEntryVR   (gdcmHeaderEntry *, VRKey);
+
+   std::string GetHeaderEntryValue  (gdcmHeaderEntry *);
+   std::string GetHeaderEntryUnvalue(gdcmHeaderEntry *);
 
    void SkipHeaderEntry          (gdcmHeaderEntry *);
    void FixHeaderEntryFoundLength(gdcmHeaderEntry *, guint32);
@@ -170,6 +182,7 @@ private:
                                       std::string vr = "Unknown",
                                       std::string fourth = "Unknown",
                                       std::string name   = "Unknown");
+   gdcmDictEntry *NewVirtualDictEntry(gdcmHeaderEntry *);
 
    // Deprecated (Not used)
    gdcmHeaderEntry *NewManualHeaderEntryToPubDict(std::string NewTagName,
@@ -186,7 +199,7 @@ private:
 
    TagHeaderEntryHT tagHT; // H Table (multimap), to provide fast access
    ListTag listEntries;    // chained list, to keep the 'spacial' ordering 
-   int enableSequences;
+
 
    // true if a gdcmHeaderEntry was added post parsing 
    int wasUpdated;
@@ -200,9 +213,6 @@ private:
    // this upper bound is fixed to 1024 bytes (which might look reasonable
    // when one considers the definition of the various VR contents).
    guint32 MaxSizeLoadEntry;
-
-   // for PrintHeader
-   int printLevel;
 };
 
 //-----------------------------------------------------------------------------