]> Creatis software - gdcm.git/blobdiff - src/gdcmDocument.h
Removal of now useless gdcmDocument::LoadVLEntry method
[gdcm.git] / src / gdcmDocument.h
index bebde32a0ea132420d47553c968ea1c943dca359..5a85583e8e3ffdd8ab0f46b95e19728a24a127f8 100644 (file)
@@ -1,37 +1,53 @@
-// gdcmDocument.h
-//-----------------------------------------------------------------------------
+/*=========================================================================
+  Program:   gdcm
+  Module:    $RCSfile: gdcmDocument.h,v $
+  Language:  C++
+  Date:      $Date: 2004/06/22 14:57:11 $
+  Version:   $Revision: 1.14 $
+  Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
+  l'Image). All rights reserved. See Doc/License.txt or
+  http://www.creatis.insa-lyon.fr/Public/Gdcm/License.htm for details.
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notices for more information.
+=========================================================================*/
+
 #ifndef GDCMDOCUMENT_H
 #define GDCMDOCUMENT_H
 
 #include "gdcmCommon.h"
-
 #include "gdcmVR.h"
 #include "gdcmTS.h"
 #include "gdcmException.h"
 #include "gdcmDictSet.h"
 #include "gdcmDocEntry.h"
-//#include "gdcmSeqEntry.h"
+
+class gdcmValEntry;
+class gdcmBinEntry;
 class gdcmSeqEntry;
+
 #include "gdcmDocEntrySet.h"
 #include "gdcmElementSet.h"
 
 #include <map>
 #include <list>
 
-
 //-----------------------------------------------------------------------------
 typedef std::string VRKey;
 typedef std::string VRAtr;
 typedef std::map<VRKey, VRAtr> VRHT;    // Value Representation Hash Table
 
-typedef std::map<TagKey, gdcmDocEntry *> TagDocEntryHT;
-
 //-----------------------------------------------------------------------------
 /**
- * \brief used by both gdcmHeader and gdcmDicomDir
+ * \brief Derived by both gdcmHeader and gdcmDicomDir
  */
 class GDCM_EXPORT gdcmDocument : public gdcmElementSet
 {
+friend class gdcmFile;
 private:
    /// Public dictionary used to parse this header
    gdcmDict *RefPubDict;
@@ -42,7 +58,7 @@ private:
    
    /// \brief Equals =1 if user wants to skip shadow groups while parsing
    /// (to save space)
-   int ignoreShadow;
+   int IgnoreShadow;
 
    /// \brief Size threshold above which an element value will NOT be loaded
    /// in memory (to avoid loading the image/volume itself). By default,
@@ -57,7 +73,7 @@ private:
 
 protected:
    /// Refering underlying filename.
-   std::string filename;
+   std::string Filename;
 
    /// \brief SWap code (e.g. Big Endian, Little Endian, Bad Big Endian,
    /// Bad Little Endian) according to the processor Endianity and
@@ -68,7 +84,7 @@ protected:
    FILE *fp;
 
    /// ACR, ACR_LIBIDO, ExplicitVR, ImplicitVR, Unknown
-   FileType filetype;  
+   FileType Filetype;  
 
    /// After opening the file, we read HEADER_LENGTH_TO_READ bytes.
    static const unsigned int HEADER_LENGTH_TO_READ; 
@@ -92,18 +108,7 @@ protected:
    int printLevel;
    
 public:
-   
-
-// Print
-  // Canonical Printing method (see also gdcmDocument::SetPrintLevel)
-  // virtual void Print        (std::ostream &os = std::cout);    
- //     {PrintEntry(os);};
- // no more Print method for gdcmDocument (inherits from gdcmElementSet
- // virtual void PrintEntry      (std::ostream &os = std::cout)
- //               { return Print(os);};
-
-   // the 2 following will be merged
+// the 2 following will be merged
    virtual void PrintPubDict (std::ostream &os = std::cout);
    virtual void PrintShaDict (std::ostream &os = std::cout);
 
@@ -115,10 +120,20 @@ public:
 
 // Informations contained in the parser
    virtual bool IsReadable(void);
+   bool IsGivenTransferSyntax(const std::string & SyntaxToCheck);
    bool IsImplicitVRLittleEndianTransferSyntax(void);
    bool IsExplicitVRLittleEndianTransferSyntax(void);
    bool IsDeflatedExplicitVRLittleEndianTransferSyntax(void);
    bool IsExplicitVRBigEndianTransferSyntax(void);
+   bool IsJPEGBaseLineProcess1TransferSyntax(void);
+   bool IsJPEGExtendedProcess2_4TransferSyntax(void);
+   bool IsJPEGExtendedProcess3_5TransferSyntax(void);
+   bool IsJPEGSpectralSelectionProcess6_8TransferSyntax(void);
+   bool IsRLELossLessTransferSyntax(void);
+   bool IsJPEGLossless(void);
+   bool IsJPEG2000(void);
+   bool IsDicomV3(void);
+
    FileType GetFileType(void);
 
 // Read (used in gdcmFile, gdcmDicomDir)
@@ -126,21 +141,19 @@ public:
    bool CloseFile(void);
 
 // Write (used in gdcmFile, gdcmDicomDir)
-   virtual bool Write(FILE *, FileType);
-   virtual void WriteEntryTagVRLength(gdcmDocEntry *tag,
-                                       FILE *_fp, FileType type);
-   virtual void WriteEntryValue(gdcmDocEntry *tag,FILE *_fp,FileType type);
-   virtual bool WriteEntry(gdcmDocEntry *tag,FILE *_fp,FileType type);
-   virtual bool WriteEntries(FILE *_fp,FileType type);
-
-   gdcmDocEntry * ReplaceOrCreateByNumber(std::string Value,
+
+   virtual bool WriteF(FileType type); // New stuff, with recursive exploration
+
+   gdcmValEntry * ReplaceOrCreateByNumber(std::string Value,
+                                             guint16 Group, guint16 Elem);
+
+   gdcmBinEntry * ReplaceOrCreateByNumber(void *voidArea, int lgth,
                                              guint16 Group, guint16 Elem);
    bool ReplaceIfExistByNumber (char *Value, guint16 Group, guint16 Elem);
    
    virtual void  *LoadEntryVoidArea       (guint16 Group, guint16 Element);
-   void           LoadVLEntry             (gdcmDocEntry *entry);
       
-// System access
+   // System access
    guint16 SwapShort(guint16);   // needed by gdcmFile
    guint32 SwapLong(guint32);    // needed by gdcmFile
    guint16 UnswapShort(guint16); // needed by gdcmFile
@@ -151,24 +164,27 @@ protected:
    // to instanciate from this class gdcmDocument (only gdcmHeader and
    // gdcmDicomDir are meaningfull).
    gdcmDocument(bool exception_on_error  = false);
-   gdcmDocument(const char *inFilename, 
-              bool  exception_on_error = false, 
-              bool  enable_sequences   = false,
-             bool  ignore_shadow      = false);
+   gdcmDocument(std::string const & inFilename, 
+                bool  exception_on_error = false, 
+                bool  enable_sequences   = false,
+                bool  ignore_shadow      = false);
    virtual ~gdcmDocument(void);
    
    void gdcmDocument::Parse7FE0 (void);   
-// Entry
+   // Entry
    int CheckIfEntryExistByNumber(guint16 Group, guint16 Elem ); // int !
-   virtual std::string GetEntryByName    (std::string tagName);
-   virtual std::string GetEntryVRByName  (std::string tagName);
+public:
+   virtual std::string GetEntryByName    (TagName tagName);
+   virtual std::string GetEntryVRByName  (TagName tagName);
    virtual std::string GetEntryByNumber  (guint16 group, guint16 element);
    virtual std::string GetEntryVRByNumber(guint16 group, guint16 element);
    virtual int     GetEntryLengthByNumber(guint16 group, guint16 element);
-
+protected:
    virtual bool SetEntryByName  (std::string content, std::string tagName);
    virtual bool SetEntryByNumber(std::string content,
                                  guint16 group, guint16 element);
+   virtual bool SetEntryByNumber(void *content, int lgth,
+                                 guint16 group, guint16 element);
    virtual bool SetEntryLengthByNumber(guint32 length,
                                  guint16 group, guint16 element);
 
@@ -176,30 +192,21 @@ protected:
    virtual void  *GetEntryVoidAreaByNumber(guint16 Group, guint16 Elem);   
    virtual bool   SetEntryVoidAreaByNumber(void *a, guint16 Group, guint16 Elem);
 
-   virtual void UpdateShaEntries(void);
+   virtual void UpdateShaEntries();
 
-// Header entry
+   // Header entry
    gdcmDocEntry *GetDocEntryByNumber  (guint16 group, guint16 element); 
    gdcmDocEntry *GetDocEntryByName    (std::string Name);
 
-   void LoadDocEntrySafe(gdcmDocEntry *);
+   gdcmValEntry *GetValEntryByNumber  (guint16 group, guint16 element); 
+   gdcmBinEntry *GetBinEntryByNumber  (guint16 group, guint16 element); 
 
-   // Probabely useless
-   //void UpdateGroupLength(bool SkipSequence = false,
-   //                       FileType type = ImplicitVR);
+   void LoadDocEntrySafe(gdcmDocEntry *);
 
-   //void AddDocEntry       (gdcmDocEntry *);
-   
-      
 private:
    // Read
- //bool LoadHeaderEntries(bool exception_on_error = false) throw(gdcmFormatError);
-   // remplacé par ParseDES.
-   // What about exception_on_error ?
-   
-   long ParseDES(gdcmDocEntrySet *set, long offset, long l_max, bool delim_mode);
-  // long ParseSQ(gdcmDocEntrySet *set, long offset, long l_max, bool delim_mode);
-  long ParseSQ(gdcmSeqEntry *seq, long offset, long l_max, bool delim_mode); 
+   long ParseDES(gdcmDocEntrySet *set, long offset, long l_max,bool delim_mode);
+   long ParseSQ(gdcmSeqEntry *seq, long offset, long l_max, bool delim_mode); 
    
    void LoadDocEntry      (gdcmDocEntry *);
    void FindDocEntryLength(gdcmDocEntry *);
@@ -215,64 +222,49 @@ private:
    void FixDocEntryFoundLength(gdcmDocEntry *, guint32);
    bool IsDocEntryAnInteger   (gdcmDocEntry *);
 
-   guint32 FindDocEntryLengthOB(void);
+   guint32 FindDocEntryLengthOB();
 
-   guint16 ReadInt16(void);
-   guint32 ReadInt32(void);
+   guint16 ReadInt16();
+   guint32 ReadInt32();
    void    SkipBytes(guint32);
+   guint32 ReadTagLength(guint16, guint16);
+   guint32 ReadItemTagLength();
+   guint32 ReadSequenceDelimiterTagLength();
 
-   void Initialise(void);
-   bool CheckSwap(void);
-   void SwitchSwapToBigEndian(void);
+   void Initialise();
+   bool CheckSwap();
+   void SwitchSwapToBigEndian();
    void SetMaxSizeLoadEntry(long);
    void SetMaxSizePrintEntry(long);
 
-  // DictEntry  related utilities
-   
-   gdcmDictEntry *GetDictEntryByName  (std::string Name);
-   gdcmDictEntry *GetDictEntryByNumber(guint16, guint16);
-   gdcmDictEntry *NewVirtualDictEntry(guint16 group, 
-                                      guint16 element,
-                                      std::string vr     = "unkn",
-                                      std::string fourth = "unkn",
-                                      std::string name   = "unkn");
-   //gdcmDictEntry *NewVirtualDictEntry(gdcmDocEntry *); // never defined 
-   
+        
    // DocEntry related utilities
-   
-   gdcmDocEntry *ReadNextDocEntry   (void);
-   gdcmDocEntry *NewDocEntryByNumber(guint16 group, 
-                                           guint16 element);
-   gdcmDocEntry *NewDocEntryByName  (std::string Name);
-   
-   // Deprecated (Not used) --> commented out
-   //gdcmDocEntry *NewManualDocEntryToPubDict(std::string NewTagName,
-   //                                               std::string VR);
-   
+   gdcmDocEntry *ReadNextDocEntry   ();
+
+
    guint32 GenerateFreeTagKeyInGroup(guint16 group);
 
 public:
 // Accessors:
    /// Accessor to \ref printLevel
-   void SetPrintLevel(int level) { printLevel = level; };
+   inline void SetPrintLevel(int level) { printLevel = level; }
 
    /// Accessor to \ref filename
-   inline std::string GetFileName(void) {return filename;}
+   inline std::string &GetFileName() { return Filename; }
 
    /// Accessor to \ref filename
-   inline void SetFileName(char* fileName) {filename = fileName;}
+   inline void SetFileName(const char* fileName) { Filename = fileName; }
 
-   /// Accessor to \ref gdcmDocument::tagHT
-   inline TagDocEntryHT &GetEntry(void) { return tagHT; };
-
-   /// Accessor to \ref gdcmDocument::listEntries
-   //inline ListTag &GetListEntry(void) { return listEntries; };
+   /// Accessor to \ref gdcmElementSet::tagHT
+   inline TagDocEntryHT &GetEntry() { return tagHT; };
 
    /// 'Swap code' accessor (see \ref sw )
-   inline int GetSwapCode(void) { return sw; }
+   inline int GetSwapCode() { return sw; }
    
    /// File pointer
-   inline FILE * GetFP(void) { return fp; }
+   inline FILE * GetFP() { return fp; }
+
+   bool operator<(gdcmDocument &document);
 
 };