X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmSQItem.cxx;h=b6c5dd0d31c9a9045d7abbc1ea2b0a5fbe2ff82d;hb=df832cf7f90b4ca5aca2f628c1756fb276779fac;hp=431ac51e1702320ba439dc4557effbe70d50d815;hpb=af288a85afcf018ea938b95dc5c87284ee9b83d6;p=gdcm.git diff --git a/src/gdcmSQItem.cxx b/src/gdcmSQItem.cxx index 431ac51e..b6c5dd0d 100644 --- a/src/gdcmSQItem.cxx +++ b/src/gdcmSQItem.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmSQItem.cxx,v $ Language: C++ - Date: $Date: 2005/11/07 09:46:37 $ - Version: $Revision: 1.79 $ + Date: $Date: 2007/10/08 15:20:17 $ + Version: $Revision: 1.88 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -25,7 +25,7 @@ #include -namespace gdcm +namespace GDCM_NAME_SPACE { //----------------------------------------------------------------------------- // Constructor / Destructor @@ -54,14 +54,15 @@ SQItem::~SQItem() * @param fp file pointer to an already open file. * @param filetype type of the file (ACR, ImplicitVR, ExplicitVR, ...) */ -void SQItem::WriteContent(std::ofstream *fp, FileType filetype) +void SQItem::WriteContent(std::ofstream *fp, FileType filetype, + bool , bool ) { int j; uint16_t item[4] = { 0xfffe, 0xe000, 0xffff, 0xffff }; - uint16_t itemt[4]= { 0xfffe, 0xe00d, 0xffff, 0xffff }; + uint16_t itemt[4]= { 0xfffe, 0xe00d, 0x0000, 0x0000 }; //we force the writting of an 'Item' Start Element - // because we want to write the Item as a 'no Length' item + // because we want to write the Item as a 'No Length' item for(j=0;j<4;++j) { binary_write( *fp, item[j]); // fffe e000 ffff ffff @@ -87,21 +88,22 @@ void SQItem::WriteContent(std::ofstream *fp, FileType filetype) // --> makes no difference since the only bugged file we have // contains 'impossible tag' fffe|0000 in last position ! } - - (*it)->WriteContent(fp, filetype); + // false : we are not in MetaElements + // true : we are inside a Sequence + (*it)->WriteContent(fp, filetype, false, true); } //we force the writting of an 'Item Delimitation' item // because we wrote the Item as a 'no Length' item for(j=0;j<4;++j) { - binary_write( *fp, itemt[j]); // fffe e000 ffff ffff + binary_write( *fp, itemt[j]); // fffe e000 0000 0000 } } /** - * \brief Compute the full length of the SQItem (not only value - * length) depending on the VR. + * \brief Compute the full length of the SQItem (not only value length) + * depending on the VR. */ uint32_t SQItem::ComputeFullLength() { @@ -157,7 +159,6 @@ bool SQItem::AddEntry(DocEntry *entry) ++it; insertSpot = it; - //++insertSpot; // ?!? DocEntries.insert(insertSpot, entry); entry->Register(); return true; @@ -200,15 +201,6 @@ void SQItem::ClearEntry() DocEntries.clear(); } -/** - * \brief Move all the entries from a given Sequence Item - */ -void SQItem::MoveObject(SQItem *source) -{ - DocEntries = source->DocEntries; - source->DocEntries.clear(); -} - /** * \brief Get the first Dicom entry while visiting the SQItem * \return The first DocEntry if found, otherwhise 0 @@ -251,6 +243,30 @@ DocEntry *SQItem::GetDocEntry(uint16_t group, uint16_t elem) return NULL; } +/** + * \brief Copies all the attributes from an other DocEntrySet + * @param set entry to copy from + * @remarks The contained DocEntries a not copied, only referenced + */ +void SQItem::Copy(DocEntrySet *set) +{ + // Remove all previous entries + ClearEntry(); + + DocEntrySet::Copy(set); + + SQItem *sq = dynamic_cast(set); + if( sq ) + { + SQDepthLevel = sq->SQDepthLevel; + SQItemNumber = sq->SQItemNumber; + + DocEntries = sq->DocEntries; + for(ItDocEntries = DocEntries.begin();ItDocEntries != DocEntries.end();++ItDocEntries) + (*ItDocEntries)->Register(); + } +} + //----------------------------------------------------------------------------- // Protected