]> Creatis software - gdcm.git/commitdiff
Add missing SQItem methods
authorjpr <jpr>
Wed, 19 Jan 2005 08:55:09 +0000 (08:55 +0000)
committerjpr <jpr>
Wed, 19 Jan 2005 08:55:09 +0000 (08:55 +0000)
src/gdcmSQItem.cxx
src/gdcmSQItem.h

index 4717dcb0274a19e83af24ab424abdd93477cf543..6a3ea4611dd37e02ff8f7685526d4a5d43c434a2 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmSQItem.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/01/18 08:01:42 $
-  Version:   $Revision: 1.53 $
+  Date:      $Date: 2005/01/19 08:55:09 $
+  Version:   $Revision: 1.54 $
   
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -58,6 +58,8 @@ SQItem::~SQItem()
 // Print
 /*
  * \brief   canonical Printer
+ * @param os     Stream to print to. 
+ * @param indent Indentation string to be prepended during printing.
  */
 void SQItem::Print(std::ostream &os, std::string const &)
 {
@@ -81,9 +83,8 @@ void SQItem::Print(std::ostream &os, std::string const &)
       os << s.str();
       Entry->SetPrintLevel(PrintLevel);
       Entry->Print(os); 
-      if ( /* SeqEntry *seqEntry =*/ dynamic_cast<SeqEntry*>(Entry) )
+      if ( dynamic_cast<SeqEntry*>(Entry) )
       {
-         //(void)seqEntry;  //not used
          PrintEndLine = false;
       }
       if (PrintEndLine)
@@ -209,7 +210,7 @@ bool SQItem::SetEntry(std::string const &val, uint16_t group,
       }   
       if (group == (*i)->GetGroup() && elem == (*i)->GetElement() )
       {
-         if ( ValEntryentry = dynamic_cast<ValEntry*>(*i) )
+         if ( ValEntry *entry = dynamic_cast<ValEntry*>(*i) )
          {
             entry->SetValue(val);
          }
@@ -224,6 +225,7 @@ bool SQItem::SetEntry(std::string const &val, uint16_t group,
  * @param   entryToRemove Entry to remove AND delete.
  * \warning Some problems when using under Windows... prefer the use of
  *          Initialize / GetNext methods
+ * @return true if the entry was found and removed; false otherwise
  */
 bool SQItem::RemoveEntry( DocEntry* entryToRemove)
 {
@@ -246,6 +248,7 @@ bool SQItem::RemoveEntry( DocEntry* entryToRemove)
 /**
  * \brief   Clear the hash table from given entry BUT keep the entry.
  * @param   entryToRemove Entry to remove.
+ * @return true if the entry was found and removed; false otherwise
  */
 bool SQItem::RemoveEntryNoDestroy(DocEntry* entryToRemove)
 {
@@ -266,11 +269,15 @@ bool SQItem::RemoveEntryNoDestroy(DocEntry* entryToRemove)
 }
                                                                                 
 /**
- * \brief   Initialise the visit of the chained list
+ * \brief   Get the first entry while visiting the SQItem
+ * \return  The first DocEntry if found, otherwhise 0
  */
-void SQItem::Initialize()
+DocEntry * SQItem::GetFirstEntry()
 {
    ItDocEntries = DocEntries.begin();
+   if (ItDocEntries != DocEntries.end())
+      return *ItDocEntries;
+   return 0;   
 }
                                                                                 
 /**
@@ -279,15 +286,11 @@ void SQItem::Initialize()
  */
 DocEntry *SQItem::GetNextEntry()
 {
-   if (ItDocEntries != DocEntries.end())
+   gdcmAssertMacro (ItDocEntries != DocEntries.end());
    {
-      DocEntry *tmp = *ItDocEntries;
       ++ItDocEntries;
-                                                                                
-      return tmp;
-   }
-   else
-   {
+      if (ItDocEntries != DocEntries.end())
+         return  *ItDocEntries;
       return NULL;
    }
 }
@@ -298,9 +301,9 @@ DocEntry *SQItem::GetNextEntry()
  * \brief   Gets a Dicom Element inside a SQ Item Entry
  * @param   group   Group number of the Entry
  * @param   elem  Element number of the Entry
- * @return
+ * @return Entry whose (group,elem) was passed. 0 if not found
  */
-DocEntrySQItem::GetDocEntry(uint16_t group, uint16_t elem)
+DocEntry *SQItem::GetDocEntry(uint16_t group, uint16_t elem)
 {
    for(ListDocEntry::iterator i = DocEntries.begin();
                               i != DocEntries.end(); ++i)
@@ -313,11 +316,57 @@ DocEntry* SQItem::GetDocEntry(uint16_t group, uint16_t elem)
    return 0;
 }
 
+/**
+ * \brief   Gets a Dicom Element inside a SQ Item Entry
+ * @param   group   Group number of the Entry
+ * @param   elem  Element number of the Entry
+ * @return Entry whose (group,elem) was passed. 0 if not found
+ */
+ValEntry* SQItem::GetValEntry(uint16_t group, uint16_t elem)
+{
+   DocEntry *d = GetDocEntry(group, elem);
+   if ( ValEntry *e = dynamic_cast<ValEntry*>(d) )
+      return e;
+   return 0;
+}
+
+/**
+ * \brief   Gets a Dicom Element inside a SQ Item Entry
+ * @param   group   Group number of the Entry
+ * @param   elem  Element number of the Entry
+ * @return Entry whose (group,elem) was passed. 0 if not found
+ */
+BinEntry* SQItem::GetBinEntry(uint16_t group, uint16_t elem)
+{
+   DocEntry *d = GetDocEntry(group, elem);
+   if ( BinEntry *e = dynamic_cast<BinEntry*>(d) )
+      return e;
+   return 0;
+}
+
+/**
+ * \brief   Gets a Dicom Element inside a SQ Item Entry
+ * @param   group   Group number of the Entry
+ * @param   elem  Element number of the Entry
+ * @return Entry whose (group,elem) was passed. 0 if not found
+ */
+SeqEntry* SQItem::GetSeqEntry(uint16_t group, uint16_t elem)
+{
+   DocEntry *d = GetDocEntry(group, elem);
+   if ( SeqEntry *e = dynamic_cast<SeqEntry*>(d) )
+      return e;
+   return 0;
+}
+
+
 /**
  * \brief   Get the value of a Dicom Element inside a SQ Item Entry
+ * \note : meaningfull only if the required entry is NEITHER a SeqEntry 
+ *                                                   NOR a BinEntry
  * @param   group   Group number of the Entry
  * @param   elem  Element number of the Entry 
- * @return
+ * @return  'string value' of the entry whose (group,elem) was passed.
+ *           GDCM_UNFOUND if not found
  */ 
 
 std::string SQItem::GetEntry(uint16_t group, uint16_t elem)
@@ -327,7 +376,8 @@ std::string SQItem::GetEntry(uint16_t group, uint16_t elem)
    {
       if ( (*i)->GetGroup() == group && (*i)->GetElement() == elem)
       {
-         return ((ValEntry *)(*i))->GetValue();   //FIXME
+         if (ValEntry *e = dynamic_cast<ValEntry*>(*i))
+            return e->GetValue();
       }
    }
    return GDCM_UNFOUND;
index 61ef33366decd8cff1734edb599d70a0da0f08c4..ae3fd12467fa907ebe59518352fec6a880de4f2b 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmSQItem.h,v $
   Language:  C++
-  Date:      $Date: 2005/01/16 04:50:42 $
-  Version:   $Revision: 1.32 $
+  Date:      $Date: 2005/01/19 08:55:10 $
+  Version:   $Revision: 1.33 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -56,6 +56,9 @@ public:
    bool RemoveEntryNoDestroy(DocEntry *EntryToRemove);
   
    DocEntry *GetDocEntry(uint16_t group, uint16_t element);
+   ValEntry *GetValEntry(uint16_t group, uint16_t element); 
+   BinEntry *GetBinEntry(uint16_t group, uint16_t element); 
+   SeqEntry *GetSeqEntry(uint16_t group, uint16_t element); 
    
    bool SetEntry(std::string const &val, uint16_t group, 
                                          uint16_t element);
@@ -80,7 +83,7 @@ public:
    ///  \brief Accessor on \ref BaseTagKey.
    BaseTagKey const &GetBaseTagKey() const { return BaseTagKeyNested; }
 
-   void Initialize();
+   DocEntry *GetFirstEntry();
    DocEntry *GetNextEntry();
 
 protected: