]> Creatis software - gdcm.git/blobdiff - src/gdcmSQItem.cxx
* Reorder source code
[gdcm.git] / src / gdcmSQItem.cxx
index 3180df8a39e0fe853f08ee3a331d24d18e09a98e..e6b4e1c9cf145dd40fac7e17992e80063d91d2cd 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmSQItem.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/02/01 10:29:56 $
-  Version:   $Revision: 1.64 $
+  Date:      $Date: 2005/02/02 16:18:48 $
+  Version:   $Revision: 1.66 $
   
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -70,7 +70,7 @@ void SQItem::WriteContent(std::ofstream *fp, FileType filetype)
    }
      
    for (ListDocEntry::iterator it = DocEntries.begin();  
-                              it != DocEntries.end();
+                               it != DocEntries.end();
                              ++it)
    {   
       // we skip delimitors (start and end one) because 
@@ -96,31 +96,43 @@ void SQItem::WriteContent(std::ofstream *fp, FileType filetype)
    for(j=0;j<4;++j)
    {
       binary_write( *fp, itemt[j]);  // fffe e000 ffff ffff 
-   }
+   } 
 }
 
 /**
- * \brief  Remove all entry in the Sequence Item 
+ * \brief   Inserts *in the right place* any Entry (Dicom Element)
+ *          into the Sequence Item
+ * @param entry Entry to add
  */
-void SQItem::ClearEntry()
-{
-   for(ListDocEntry::iterator cc = DocEntries.begin();
-                             cc != DocEntries.end();
-                             ++cc)
+bool SQItem::AddEntry(DocEntry *entry)
+{   
+   if (DocEntries.empty() )
    {
-      delete *cc;
+      DocEntries.push_back(entry);
+      return true;
    }
-   DocEntries.clear();
-}
+   ListDocEntry::iterator insertSpot;
+   ListDocEntry::iterator it = DocEntries.end();
+   do
+   {
+      it--;
 
-/**
- * \brief   Adds any Entry (Dicom Element) to the Sequence Item
- * @param entry Entry to add
- */
-bool SQItem::AddEntry(DocEntry *entry)
-{
-   DocEntries.push_back(entry);
+      if ( (*it)->IsItemDelimitor() )
+      {
+         continue;
+      }
+      if ( (*it)->GetGroup() < entry->GetGroup() )
+         break;
+      else
+         if ( (*it)->GetGroup() == entry->GetGroup() &&
+              (*it)->GetElement() < entry->GetElement() )
+            break;
+   } while (it != DocEntries.begin() );
+  
+   insertSpot = it++;
+   insertSpot++; // ?!?
+   DocEntries.insert(insertSpot, entry); 
    return true;
 }   
 
@@ -129,13 +141,13 @@ bool SQItem::AddEntry(DocEntry *entry)
  * @param   entryToRemove Entry to remove AND delete.
  * @return true if the entry was found and removed; false otherwise
  */
-bool SQItem::RemoveEntry( DocEntry *entryToRemove)
+bool SQItem::RemoveEntry( DocEntry *entryToRemove )
 {
    for(ListDocEntry::iterator it = DocEntries.begin();
-       it != DocEntries.end();
-       ++it)
+                              it != DocEntries.end();
+                            ++it)
    {
-      if( *it == entryToRemove)
+      if( *it == entryToRemove )
       {
          DocEntries.erase(it);
          gdcmVerboseMacro( "One element erased: " << entryToRemove->GetKey() );
@@ -154,11 +166,11 @@ bool SQItem::RemoveEntry( DocEntry *entryToRemove)
  */
 bool SQItem::RemoveEntryNoDestroy(DocEntry *entryToRemove)
 {
-   for(ListDocEntry::iterator it = DocEntries.begin();
-       it != DocEntries.end();
-       ++it)
+   for(ListDocEntry::iterator it =  DocEntries.begin();
+                              it != DocEntries.end();
+                            ++it)
    {
-      if( *it == entryToRemove)
+      if( *it == entryToRemove )
       {
          DocEntries.erase(it);
          gdcmVerboseMacro( "One element erased, no destroyed: "
@@ -171,6 +183,20 @@ bool SQItem::RemoveEntryNoDestroy(DocEntry *entryToRemove)
    return false ;
 }
                                                                                 
+/**
+ * \brief  Remove all entry in the Sequence Item 
+ */
+void SQItem::ClearEntry()
+{
+   for(ListDocEntry::iterator cc = DocEntries.begin();
+                              cc != DocEntries.end();
+                            ++cc)
+   {
+      delete *cc;
+   }
+   DocEntries.clear();
+}
+
 /**
  * \brief   Get the first Dicom entry while visiting the SQItem
  * \return  The first DocEntry if found, otherwhise 0
@@ -178,7 +204,7 @@ bool SQItem::RemoveEntryNoDestroy(DocEntry *entryToRemove)
 DocEntry *SQItem::GetFirstEntry()
 {
    ItDocEntries = DocEntries.begin();
-   if (ItDocEntries != DocEntries.end())
+   if( ItDocEntries != DocEntries.end() )
       return *ItDocEntries;
    return 0;   
 }
@@ -190,7 +216,7 @@ DocEntry *SQItem::GetFirstEntry()
 DocEntry *SQItem::GetNextEntry()
 {
    ++ItDocEntries;
-   if (ItDocEntries != DocEntries.end())
+   if( ItDocEntries != DocEntries.end() )
       return  *ItDocEntries;
    return NULL;
 }
@@ -203,8 +229,9 @@ DocEntry *SQItem::GetNextEntry()
  */
 DocEntry *SQItem::GetDocEntry(uint16_t group, uint16_t elem)
 {
-   for(ListDocEntry::iterator i = DocEntries.begin();
-                              i != DocEntries.end(); ++i)
+   for(ListDocEntry::iterator i =  DocEntries.begin();
+                              i != DocEntries.end(); 
+                            ++i)
    {
       if ( (*i)->GetGroup() == group && (*i)->GetElement() == elem )
          return *i;