Program: gdcm
Module: $RCSfile: gdcmDocument.cxx,v $
Language: C++
- Date: $Date: 2004/11/15 16:12:30 $
- Version: $Revision: 1.123 $
+ Date: $Date: 2004/11/16 14:48:19 $
+ Version: $Revision: 1.128 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
RefPubDict = NULL;
RefShaDict = NULL;
- // Recursive clean up of sequences
- for (TagDocEntryHT::const_iterator it = TagHT.begin();
- it != TagHT.end(); ++it )
- {
- //delete it->second; //temp remove
- }
- TagHT.clear();
delete RLEInfo;
delete JPEGInfo;
}
return true;
}
-
/**
- * \brief Internal function that checks whether the Transfer Syntax given
- * as argument is the one present in the current document.
- * @param syntaxToCheck The transfert syntax we need to check against.
- * @return True when SyntaxToCheck corresponds to the Transfer Syntax of
- * the current document. False either when the document contains
- * no Transfer Syntax, or when the Tranfer Syntaxes doesn't match.
+ * \brief Accessor to the Transfer Syntax (when present) of the
+ * current document (it internally handles reading the
+ * value from disk when only parsing occured).
+ * @return The encountered Transfer Syntax of the current document.
*/
TransferSyntaxType Document::GetTransferSyntax()
{
* @param value (string) Value to be set
* @param group Group number of the Entry
* @param elem Element number of the Entry
- * @param VR V(alue) R(epresentation) of the Entry -if private Entry-
+ * @param vr V(alue) R(epresentation) of the Entry -if private Entry-
* \return pointer to the modified/created Header Entry (NULL when creation
* failed).
*/
" NewDocEntryByNumber failed.");
return NULL;
}
+
valEntry = new ValEntry(currentEntry);
+ delete currentEntry;
+
if ( !AddEntry(valEntry))
{
delete valEntry;
dbg.Verbose(0, "Document::ReplaceOrCreateByNumber: AddEntry"
" failed allthough this is a creation.");
+ return NULL;
}
- // This is the reason why NewDocEntryByNumber are a real
- // bad habit !!! FIXME
- delete currentEntry;
}
else
{
* @param tagName name of the searched Dicom Element.
* @return true when found
*/
-bool Document::SetEntryByName(std::string const & content,
- TagName const & tagName)
+bool Document::SetEntryByName( std::string const & content,
+ TagName const & tagName)
{
DictEntry *dictEntry = RefPubDict->GetDictEntryByName(tagName);
if( !dictEntry )
{
/////////////////////// ValEntry
ValEntry* newValEntry =
- new ValEntry( newDocEntry->GetDictEntry() );
+ new ValEntry( newDocEntry->GetDictEntry() ); //LEAK
newValEntry->Copy( newDocEntry );
// When "set" is a Document, then we are at the top of the
+ newValEntry->GetKey() );
}
- set->AddEntry( newValEntry );
LoadDocEntry( newValEntry );
- if (newValEntry->IsItemDelimitor())
+ bool delimitor=newValEntry->IsItemDelimitor();
+ if( !set->AddEntry( newValEntry ) )
+ {
+ // If here expect big troubles
+ delete newValEntry; //otherwise mem leak
+ }
+
+ if (delimitor)
{
break;
}
}
//////////////////// BinEntry or UNKOWN VR:
- BinEntry* newBinEntry =
+/* BinEntry* newBinEntry =
new BinEntry( newDocEntry->GetDictEntry() ); //LEAK
- newBinEntry->Copy( newDocEntry );
+ newBinEntry->Copy( newDocEntry );*/
+ BinEntry* newBinEntry = new BinEntry( newDocEntry ); //LEAK
// When "this" is a Document the Key is simply of the
// form ( group, elem )...
+ newBinEntry->GetKey() );
}
- set->AddEntry( newBinEntry );
LoadDocEntry( newBinEntry );
+ if( !set->AddEntry( newBinEntry ) )
+ {
+ //Expect big troubles if here
+ delete newBinEntry;
+ }
}
if ( ( newDocEntry->GetGroup() == 0x7fe0 )
s << " x(" << std::hex << entry->GetLength() << ")";
binEntryPtr->SetValue(s.str());
}
- // Be carefull : a BinEntry IS_A ValEntry ...
+ // Be carefull : a BinEntry IS_A ValEntry ...
else if (ValEntry* valEntryPtr = dynamic_cast< ValEntry* >(entry) )
{
// s << "gdcm::NotLoaded. (ValEntry)";
dbg.Verbose(0, "Document::ComputeRLEInfo: too many segments.");
}
- uint32_t rleSegmentOffsetTable[15];
+ uint32_t rleSegmentOffsetTable[16];
for( int k = 1; k <= 15; k++ )
{
rleSegmentOffsetTable[k] = ReadInt32();