]> Creatis software - gdcm.git/blobdiff - src/gdcmDocEntry.h
* DEVELOPPER: added a proposition of coding style.
[gdcm.git] / src / gdcmDocEntry.h
index 18decf0168eecaca473ba4ff2c6ff84e4be25a6b..4ee6f7f5e73c0cd1958bb05e83f3558b5f5670eb 100644 (file)
@@ -1,5 +1,21 @@
-// gdcmDocEntry.h
-//-----------------------------------------------------------------------------
+/*=========================================================================
+                                                                                
+  Program:   gdcm
+  Module:    $RCSfile: gdcmDocEntry.h,v $
+  Language:  C++
+  Date:      $Date: 2004/06/24 11:44:35 $
+  Version:   $Revision: 1.12 $
+                                                                                
+  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 GDCMDocEntry_H
 #define GDCMDocEntry_H
 
@@ -7,7 +23,11 @@
 #include <stdio.h>
 
 #include "gdcmDictEntry.h"
+
 class gdcmHeader;
+class gdcmValEntry;
+class gdcmBinEntry;
+class gdcmSeqEntry;
 
 //-----------------------------------------------------------------------------
 /**
@@ -18,93 +38,77 @@ class gdcmHeader;
 class GDCM_EXPORT gdcmDocEntry {
 public:
    gdcmDocEntry(gdcmDictEntry*);
-
+     
    /// Returns the Dicom Group number of the current Dicom Header Entry
-   inline guint16      GetGroup(void)     { return entry->GetGroup();  };
+   guint16      GetGroup(void)     { return entry->GetGroup();  };
 
    /// Returns the Dicom Element number of the current Dicom Header Entry
-   inline guint16      GetElement(void)   { return entry->GetElement();};
-
+   guint16      GetElement(void)   { return entry->GetElement();};
+       
    /// Returns the 'key' of the current Dicom Header Entry
-   inline std::string  GetKey(void)       { return entry->GetKey();    };
+   std::string  GetKey(void)       { return entry->GetKey();    };
 
    /// \brief Returns the 'Name' '(e.g. "Patient's Name") found in the Dicom
    /// Dictionnary of the current Dicom Header Entry
-   inline std::string  GetName(void)      { return entry->GetName();   };
+   std::string  GetName(void)      { return entry->GetName();   };
 
    /// \brief Returns the 'Value Representation' (e.g. "PN" : Person Name,
    /// "SL" : Signed Long), found in the Dicom Header or in the Dicom
    /// Dictionnary, of the current Dicom Header Entry
-   inline std::string  GetVR(void)        { return entry->GetVR();     };
-
-   /// \brief Returns the 'Value' (e.g. "Dupond Marcel") converted into a
-   /// 'string', if it's stored as an integer in the Dicom Header of the
-   /// current Dicom Header Entry
-   inline std::string  GetValue(void)     { return value;              };
-
-   /// \brief Returns the area value of the current Dicom Header Entry
-   ///  when it's not string-translatable (e.g : a LUT table)         
-   inline void *       GetVoidArea(void)  { return voidArea;           };
+   std::string  GetVR(void)        { return entry->GetVR();     };
 
    /// \brief Returns offset (since the beginning of the file, including
    /// the File Pramble, if any) of the value of the current Dicom HeaderEntry
    /// \warning offset of the *value*, not of the Dicom Header Entry
-   inline size_t       GetOffset(void)    { return Offset;             };
+   size_t       GetOffset(void)    { return Offset;             };
 
    /// \brief Returns the actual value length of the current Dicom Header Entry
-   /// \warning this value is not *allways* the one stored in the Dicom Header
+   /// \warning this value is not *always* the one stored in the Dicom Header
    ///          in case of well knowned bugs
-   inline guint32 GetLength(void) { return UsableLength; };
+   guint32 GetLength(void) { return UsableLength; };
     
    /// \brief Returns the 'read length' of the current Dicom Header Entry
    /// \warning this value is the one stored in the Dicom Header but not
    ///          mandatoryly the one thats's used (in case on SQ, or delimiters,
    ///          the usable length is set to zero)
-   inline guint32 GetReadLength(void) { return ReadLength; };
+   guint32 GetReadLength(void) { return ReadLength; };
 
    /// Sets the 'Value Representation' of the current Dicom Header Entry
-   inline void SetVR(std::string v) { entry->SetVR(v); };    
+   void SetVR(std::string v) { entry->SetVR(v); };    
 
    /// \brief Sets both 'Read Length' and 'Usable Length' of the current
    /// Dicom Header Entry
-   inline void SetLength(guint32 l) { ReadLength=UsableLength=l;};
+   void SetLength(guint32 l) { ReadLength=UsableLength=l;};
       
    // The following 3 members, for internal use only ! 
    
    /// \brief Sets only 'Read Length' (*not* 'Usable Length') of the current
    /// Dicom Header Entry
-   inline void SetReadLength(guint32 l) { ReadLength   = l; };
+   void SetReadLength(guint32 l) { ReadLength   = l; };
 
    /// \brief Sets only 'Usable Length' (*not* 'Read Length') of the current
    /// Dicom Header Entry
-   inline void SetUsableLength(guint32 l) { UsableLength = l; }; 
-    
-   /// Sets the value (string) of the current Dicom Header Entry
-   inline void SetValue(std::string val) {  value = val; };
-
-   /// Sets the value (non string) of the current Dicom Header Entry
-   inline void SetVoidArea(void * area)  { voidArea = area;  };
+   void SetUsableLength(guint32 l) { UsableLength = l; }; 
    
    /// \brief   Sets the offset of the Dicom Element
    /// \warning use with caution !
    /// @param   of offset to be set
-   inline void gdcmDocEntry::SetOffset(size_t of) { Offset = of; };
+   void gdcmDocEntry::SetOffset(size_t of) { Offset = of; };
 
    /// Sets to TRUE the ImplicitVr flag of the current Dicom Element
-   inline void gdcmDocEntry::SetImplicitVR(void) { ImplicitVR = true; };
+   void gdcmDocEntry::SetImplicitVR(void) { ImplicitVR = true; };
  
    /// \brief Tells us if the current Dicom Element was checked as ImplicitVr
    /// @return true if the current Dicom Element was checked as ImplicitVr
-   inline bool gdcmDocEntry::IsImplicitVR(void) { return ImplicitVR; };
+   bool gdcmDocEntry::IsImplicitVR(void) { return ImplicitVR; };
 
-   /// \brief Tells us if the VR of the current Dicom Element is Unkonwn
+   /// \brief Tells us if the VR of the current Dicom Element is Unknown
    /// @return true if the VR is unkonwn
-   inline bool gdcmDocEntry::IsVRUnknown(void)
-               { return entry->IsVRUnknown(); };
+   bool gdcmDocEntry::IsVRUnknown(void) { return entry->IsVRUnknown(); };
 
    /// \brief   Sets the DicEntry of the current Dicom Element
    /// @param   NewEntry pointer to the DictEntry
-   inline void gdcmDocEntry::SetDictEntry(gdcmDictEntry *NewEntry)
+   void gdcmDocEntry::SetDictEntry(gdcmDictEntry *NewEntry)
                { entry = NewEntry; };
 
    /// \brief  Gets the DicEntry of the current Dicom Element
@@ -115,26 +119,38 @@ public:
    /// \note 0 for Light Print; 1 for 'medium' Print, 2 for Heavy
    void SetPrintLevel(int level) { printLevel = level; };
 
-   void Print (std::ostream & os = std::cout); 
-    
-   /// Gets the depth level of a Dicom Header Entry embedded in a SeQuence
-   inline int GetSQDepthLevel(void) { return (SQDepthLevel); };
-         
+   /// \brief Gets the print level for the Dicom Header Elements
+   int GetPrintLevel(void) { return(printLevel); };
+   
+   virtual void Print (std::ostream & os = std::cout); 
+   virtual void Write(FILE *fp, FileType filetype);
+   
    guint32 GetFullLength(void);
    
    void Copy(gdcmDocEntry *doc);
-     
+
+   bool isItemDelimitor();
+   bool isSequenceDelimitor();   
+
+   /// \brief Gets the depth level of a Dicom header entry embedded in
+   ///        a SeQuence
+   int GetDepthLevel(void) {return(SQDepthLevel);}
+               
+   /// \brief Sets the depth level of a Dicom header entry embedded in
+   ///        a SeQuence
+   void SetDepthLevel(int depth) {SQDepthLevel = depth;}
+            
 private:
    // FIXME: In fact we should be more specific and use :
    // friend gdcmDocEntry * gdcmHeader::ReadNextElement(void);
-   friend class gdcmHeader;
+   friend class gdcmHeader;    
 
-   /// Sets the depth level of a Dicom Header Entry embedded in a SeQuence 
-   inline void SetSQDepthLevel(int depthLevel) { SQDepthLevel = depthLevel; };
-      
+protected:
 // Variables
-   gdcmDictEntry *entry;
 
+   /// \brief pointer to the underlying Dicom dictionary element
+   gdcmDictEntry *entry;
+   
    /// \brief Updated from ReadLength, by FixFoungLentgh() for fixing a bug
    /// in the header or helping the parser going on    
    guint32 UsableLength;