X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmSQItem.cxx;h=310be6b8dc81cd90f4c033a418f8289af333a0d7;hb=359ebc818c100156bd8f7a3a8783f2c538474990;hp=1dff9cd878cf60e9fe10554fe5152aa672376fff;hpb=dc7688310e404af94a4c60e336345b8e40c3cd42;p=gdcm.git diff --git a/src/gdcmSQItem.cxx b/src/gdcmSQItem.cxx index 1dff9cd8..310be6b8 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/10/27 09:52:33 $ - Version: $Revision: 1.78 $ + Date: $Date: 2005/11/29 12:48:47 $ + Version: $Revision: 1.81 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -61,7 +61,7 @@ void SQItem::WriteContent(std::ofstream *fp, FileType filetype) uint16_t itemt[4]= { 0xfffe, 0xe00d, 0xffff, 0xffff }; //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 @@ -99,6 +99,29 @@ void SQItem::WriteContent(std::ofstream *fp, FileType filetype) } } +/** + * \brief Compute the full length of the SQItem (not only value length) + * depending on the VR. + */ +uint32_t SQItem::ComputeFullLength() +{ + uint32_t l = 8; // Item Starter length + for (ListDocEntry::iterator it = DocEntries.begin(); + it != DocEntries.end(); + ++it) + { + // we skip delimitors (start and end one) because + // we force them as 'no length' + if ( (*it)->GetGroup() == 0xfffe ) + { + continue; + } + l += (*it)->ComputeFullLength(); + } + l += 8; // 'Item Delimitation' item + return l; +} + /** * \brief Inserts *in the right place* any Entry (Dicom Element) * into the Sequence Item @@ -177,15 +200,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 @@ -228,6 +242,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