]> Creatis software - gdcm.git/blobdiff - src/gdcmDictEntry.h
Fix mistypings
[gdcm.git] / src / gdcmDictEntry.h
index 6b21209977ce20947e7df07075831bae83969d9f..24720c9369e9151fe7a1334cd27c837bd2f51c3e 100644 (file)
-// gdcmDictEntry.h
+/*=========================================================================
+                                                                                
+  Program:   gdcm
+  Module:    $RCSfile: gdcmDictEntry.h,v $
+  Language:  C++
+  Date:      $Date: 2007/09/17 12:16:02 $
+  Version:   $Revision: 1.47 $
+                                                                                
+  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.html 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 GDCMDICTENTRY_H
-#define GDCMDICTENTRY_H
+#ifndef _GDCMDICTENTRY_H_
+#define _GDCMDICTENTRY_H_
 
-#include "gdcmCommon.h"
+#include "gdcmRefCounter.h"
+#include "gdcmTagKey.h"
+#include "gdcmVRKey.h"
 
-/*
- * the gdcmDictEntry in an element contained by the gdcmDict.
+namespace GDCM_NAME_SPACE 
+{
+//-----------------------------------------------------------------------------
+class VRKey;
+class TagKey;
+/**
+ * \brief
+ * the DictEntry in an element contained by the Dict.
  * It contains :
  *  - the key referenced by the DICOM norm or the constructor (for private keys)
- *  - the corresponding name in english (it's equivalent to a label)
- *  - the owner group
- *  - etc.
+ *    i.e. the Group number
+ *         the Element number
+ *  - the VR (Value Representation)
+ *  - the VM (Value Multiplicity)
+ *  - the corresponding name in english
  */
-class GDCM_EXPORT gdcmDictEntry {
-private:
-   // FIXME : were are the group and element used except from building up
-   //         a TagKey. If the answer is nowhere then there is no need
-   //         to store the group and element independently.
-   guint16 group;       // e.g. 0x0010
-   guint16 element;     // e.g. 0x0103
-   std::string  vr;     // Value Representation i.e. some clue about the nature
-                       // of the data represented e.g. "FD" short for
-                       // "Floating Point Double"
-       // CLEANME: find the official dicom name for this field !
-   std::string  fourth; // Fourth field containing some semantics.
-                        //(Group Name abbr.)
-   std::string  name;   // e.g. "Patient_Name"
-   TagKey  key;         // Redundant with (group, element) but we add it
-                        // on efficiency purposes.
-
-       // DCMTK has many fields for handling a DictEntry (see below). What are the
-       // relevant ones for gdcmlib ?
-       //      struct DBI_SimpleEntry {
-       //         Uint16 upperGroup;
-       //         Uint16 upperElement;
-       //         DcmEVR evr;
-       //         const char* tagName;
-       //         int vmMin;
-       //         int vmMax;
-       //         const char* standardVersion;
-       //         DcmDictRangeRestriction groupRestriction;
-       //         DcmDictRangeRestriction elementRestriction;
-       //       };
+class GDCM_EXPORT DictEntry : public RefCounter
+{
+   gdcmTypeMacro(DictEntry);
+
 public:
-   gdcmDictEntry(guint16 group, 
-                 guint16 element,
-                 std::string vr     = "Unknown",
-                 std::string fourth = "Unknown",
-                 std::string name   = "Unknown");
-       
-   static TagKey TranslateToKey(guint16 group, guint16 element);
-
-//   bool         IsVrUnknown(void);
-       
-//   inline guint16      GetGroup(void);
-//   inline guint16      GetElement(void);
-//   inline std::string  GetVR(void);
-            void         SetVR(std::string);
-//   inline void         SetKey(std::string k);
-//   inline std::string  GetFourth(void);
-//   inline std::string  GetName(void);
-//   inline std::string  GetKey(void);
+   static DictEntry *New(uint16_t group, uint16_t elem,
+             VRKey const &vr       = GDCM_VRUNKNOWN,
+             TagName const &vm     = GDCM_UNKNOWN,
+             TagName const &name   = GDCM_UNKNOWN);
 
+// Print
+   void Print(std::ostream &os = std::cout, std::string const &indent = "");
 
+   /// \brief  Returns the Dicom Group Number
+   /// @return the Dicom Group Number
+   const uint16_t &GetGroup() const { return Tag[0]; }
 
-/**
- * \ingroup     gdcmDictEntry
- * \brief       tells if the V(alue) R(epresentation) is known (?!)
- *              
- * @return 
- */
-inline bool gdcmDictEntry::IsVrUnknown() {
-       if ( vr == "Unknown" )
-               return true;
-       return false;
-}
+   /// \brief  Returns the Dicom Element Number
+   /// @return the Dicom Element Number
+   const uint16_t &GetElement() const { return Tag[1]; }   
 
+   /// \brief  Set the Dicom Value Representation 
+   /// \param vr the Dicom Value Representation
+   virtual void SetVR(VRKey const &vr) { VR = vr; }
+   /// \brief  Returns the Dicom Value Representation 
+   /// @return the Dicom Value Representation
+   const VRKey &GetVR() const { return VR; }
+   /// \brief tells if the V(alue) R(epresentation) is known (?!)
+   /// @return 
+   bool IsVRUnknown() const { return VR == GDCM_VRUNKNOWN; }
 
-/**
- * \ingroup gdcmDictEntry
- * \brief   returns the Dicom Group Number of the current gdcmDictEntry
- * return the Dicom Group Number
- */
- inline guint16      gdcmDictEntry::GetGroup(void)  {
-    return group; 
- }
-  
-/**
- * \ingroup gdcmDictEntry
- * \brief   returns the Dicom Element Number of the current gdcmDictEntry
- * return the Dicom Element Number
- */
- inline guint16      gdcmDictEntry::GetElement(void)  {
-    return element; 
- }
- /**
- * \ingroup gdcmDictEntry
- * \brief   returns the Dicom Value Representation of the current gdcmDictEntry
- * return the Dicom Value Representation
- */
- inline std::string      gdcmDictEntry::GetVR(void)  {
-    return vr; 
- }
-/**
- * \ingroup gdcmDictEntry
- * \brief   sets the key of the current gdcmDictEntry
- * @param k New key to be set.
- */
- inline void      gdcmDictEntry::SetKey(std::string k)  {
-    key = k; 
- }
- /**
- * \ingroup gdcmDictEntry
- * \brief   returns the Fourth field of the current gdcmDictEntry
- * \warning NOT part of the Dicom Standard
- * \        May be REMOVED an any time
- * \        NEVER use it
- * return the Fourth field
- */
- inline std::string      gdcmDictEntry::GetFourth(void)  {
-    return fourth; 
- } 
-
- /**
- * \ingroup gdcmDictEntry
- * \brief   returns the Dicom Name of the current gdcmDictEntry
- * \        e.g. "Patient Name" for Dicom Tag (0x0010, 0x0010) 
- * return the Dicom Name
- */
- inline std::string      gdcmDictEntry::GetName(void)  {
-    return name; 
- } 
- /**
- * \ingroup gdcmDictEntry
- * \brief   Gets the key of the current gdcmDictEntry
- * @return the key .
- */
- inline std::string      gdcmDictEntry::GetKey(void)  {
-    return key; 
- }
+   const TagKey &GetKey() const { return Tag; }
 
+// Key creation
+   static TagKey TranslateToKey(uint16_t group, uint16_t elem);
 
-};
+   /// \brief   returns the VM field of the current DictEntry
+   /// @return  The 'Value Multiplicity' field
+   const TagName &GetVM() const { return VM; } 
+   /// \brief  Set the VM field of the current DictEntry
+   /// \param vm the'Value Multiplicity'
+   virtual void SetVM(TagName const &vm) { VM = vm; }
+   /// \brief tells if the V(alue) M(ultiplicity) is known (?!)
+   /// @return 
+   bool IsVMUnknown() const { return VM == GDCM_UNKNOWN; }
+
+   /// \brief  Returns the Dicom Name of the current DictEntry
+   ///         e.g. "Patient Name" for Dicom Tag (0x0010, 0x0010) 
+   /// @return the Dicom Name
+   const TagName &GetName() const { return Name; } 
 
+protected:
+   DictEntry(uint16_t group, uint16_t elem,
+             VRKey const &vr       = GDCM_VRUNKNOWN,
+             TagName const &vm     = GDCM_UNKNOWN,
+             TagName const &name   = GDCM_UNKNOWN);
+
+   ~DictEntry();
+   
+private:
+   /// Dicom  TagKey. Contains Dicom Group number and Dicom Element number
+   TagKey Tag;
+
+   /// \brief Value Representation i.e. some clue about the nature
+   ///        of the data represented e.g. 
+   ///        - "FD" short for "Floating Point Double"(see VR)
+   ///        - "PN" short for "Person Name"       
+   VRKey VR;
+   
+   /// \brief Value Multiplicity (e.g. "1", "1-n", "2-n", "6")
+   TagName VM; 
+
+   /// \brief English name of the entry (e.g. "Patient's Name")                   
+   TagName Name;      
+};
+} // end namespace gdcm
+//-----------------------------------------------------------------------------
 #endif