X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDocEntrySet.cxx;h=ceba6d0747a1f6783269b7e8999c00f717eeb569;hb=25c9af365d9221bd45f3fbe27275ff0f66a265b1;hp=3ff3e607828479f313df832dad81e3381f1cbb8a;hpb=ce8913daafe02955368fd2f07e777e86824467cc;p=gdcm.git diff --git a/src/gdcmDocEntrySet.cxx b/src/gdcmDocEntrySet.cxx index 3ff3e607..ceba6d07 100644 --- a/src/gdcmDocEntrySet.cxx +++ b/src/gdcmDocEntrySet.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocEntrySet.cxx,v $ Language: C++ - Date: $Date: 2005/01/25 15:44:23 $ - Version: $Revision: 1.45 $ + Date: $Date: 2005/02/05 01:37:08 $ + 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 @@ -28,11 +28,13 @@ namespace gdcm { +//----------------------------------------------------------------------------- +// Constructor / Destructor //----------------------------------------------------------------------------- // Public /** - * \brief Get the (std::string representable) value of the Dicom entry + * \brief Get the "std::string representable" value of the Dicom entry * @param group Group number of the searched tag. * @param elem Element number of the searched tag. * @return Corresponding element value when it exists, @@ -40,7 +42,7 @@ namespace gdcm */ std::string DocEntrySet::GetEntryValue(uint16_t group, uint16_t elem) { - ValEntry *entry = GetValEntry(group,elem); + ContentEntry *entry = dynamic_cast(GetDocEntry(group,elem)); if( entry ) return entry->GetValue(); return GDCM_UNFOUND; @@ -48,14 +50,13 @@ std::string DocEntrySet::GetEntryValue(uint16_t group, uint16_t elem) /** * \brief Gets (from Header) a 'non string' element value - * (LoadElementValues has already be executed) * @param group group number of the Entry * @param elem element number of the Entry * @return Pointer to the 'non string' area */ void *DocEntrySet::GetEntryBinArea(uint16_t group, uint16_t elem) { - BinEntry *entry = GetBinEntry(group,elem); + BinEntry *entry = GetBinEntry(group, elem); if( entry ) return entry->GetBinArea(); return 0; @@ -71,7 +72,7 @@ void *DocEntrySet::GetEntryBinArea(uint16_t group, uint16_t elem) */ int DocEntrySet::GetEntryLength(uint16_t group, uint16_t elem) { - DocEntry *entry = GetDocEntry(group,elem); + DocEntry *entry = GetDocEntry(group, elem); if( entry ) return entry->GetLength(); return -1; @@ -79,7 +80,7 @@ int DocEntrySet::GetEntryLength(uint16_t group, uint16_t elem) /** * \brief Searches within Header Entries (Dicom Elements) parsed with - * the public and private dictionaries + * the public [and private dictionaries] * for the element value representation of a given tag.. * Obtaining the VR (Value Representation) might be needed by caller * to convert the string typed content to caller's native type @@ -92,7 +93,7 @@ int DocEntrySet::GetEntryLength(uint16_t group, uint16_t elem) */ std::string DocEntrySet::GetEntryVR(uint16_t group, uint16_t elem) { - DocEntry *entry = GetDocEntry(group,elem); + DocEntry *entry = GetDocEntry(group, elem); if( entry ) return entry->GetVR(); return GDCM_UNFOUND; @@ -119,15 +120,19 @@ ValEntry *DocEntrySet::GetValEntry(uint16_t group, uint16_t elem) * \brief Same as \ref Document::GetDocEntry except it only * returns a result when the corresponding entry is of type * BinEntry. - * @param group Group number of the searched Dicom Element - * @param elem Element number of the searched Dicom Element + * @param group Group number of the searched Dicom Element + * @param elem Element number of the searched Dicom Element * @return When present, the corresponding BinEntry. */ BinEntry *DocEntrySet::GetBinEntry(uint16_t group, uint16_t elem) { DocEntry *currentEntry = GetDocEntry(group, elem); if ( !currentEntry ) + { + gdcmWarningMacro( "No corresponding BinEntry " << std::hex << group << + "," << elem); return NULL; + } return dynamic_cast(currentEntry); } @@ -144,7 +149,11 @@ SeqEntry *DocEntrySet::GetSeqEntry(uint16_t group, uint16_t elem) { DocEntry *currentEntry = GetDocEntry(group, elem); if ( !currentEntry ) + { + gdcmWarningMacro( "No corresponding SeqEntry " << std::hex << group << + "," << elem); return NULL; + } return dynamic_cast(currentEntry); } @@ -157,13 +166,14 @@ SeqEntry *DocEntrySet::GetSeqEntry(uint16_t group, uint16_t elem) * @param group group number of the Dicom Element to modify * @param elem element number of the Dicom Element to modify */ -bool DocEntrySet::SetValEntry(std::string const& content, +bool DocEntrySet::SetValEntry(std::string const &content, uint16_t group, uint16_t elem) { ValEntry *entry = GetValEntry(group, elem); if (!entry ) { - gdcmVerboseMacro( "No corresponding ValEntry (try promotion first)."); + gdcmWarningMacro( "No corresponding ValEntry " << std::hex << group << + "," << elem << " element (try promotion first)."); return false; } return SetValEntry(content,entry); @@ -178,13 +188,14 @@ bool DocEntrySet::SetValEntry(std::string const& content, * @param group group number of the Dicom Element to modify * @param elem element number of the Dicom Element to modify */ -bool DocEntrySet::SetBinEntry(uint8_t*content, int lgth, +bool DocEntrySet::SetBinEntry(uint8_t *content, int lgth, uint16_t group, uint16_t elem) { BinEntry *entry = GetBinEntry(group, elem); if (!entry ) { - gdcmVerboseMacro( "No corresponding ValEntry (try promotion first)."); + gdcmWarningMacro( "No corresponding ValEntry " << std::hex << group << + "," << elem << " element (try promotion first)."); return false; } @@ -241,7 +252,7 @@ ValEntry *DocEntrySet::InsertValEntry(std::string const &value, TagName const &vr ) { ValEntry *valEntry = 0; - DocEntry *currentEntry = GetDocEntry( group, elem); + DocEntry *currentEntry = GetDocEntry( group, elem ); if (currentEntry) { @@ -257,7 +268,7 @@ ValEntry *DocEntrySet::InsertValEntry(std::string const &value, { if( !RemoveEntry(currentEntry) ) { - gdcmVerboseMacro( "Removal of previous DocEntry failed."); + gdcmWarningMacro( "Removal of previous DocEntry failed."); return NULL; } @@ -267,11 +278,11 @@ ValEntry *DocEntrySet::InsertValEntry(std::string const &value, // Create a new valEntry if necessary if( !valEntry ) { - valEntry = NewValEntry(group, elem, vr); + valEntry = NewValEntry( group, elem, vr ); if ( !AddEntry(valEntry) ) { - gdcmVerboseMacro("AddEntry failed although this is a creation."); + gdcmWarningMacro("AddEntry failed although this is a creation."); delete valEntry; return NULL; @@ -283,23 +294,24 @@ ValEntry *DocEntrySet::InsertValEntry(std::string const &value, return valEntry; } -/* +/** * \brief Modifies the value of a given Header Entry (Dicom Element) * when it exists. Create it with the given value when unexistant. * A copy of the binArea is made to be kept in the Document. * @param binArea (binary) value to be set + * @param lgth length of the Bin Area we want to 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- * \return pointer to the modified/created Header Entry (NULL when creation * failed). */ -BinEntry *DocEntrySet::InsertBinEntry(uint8_t *binArea,int lgth, +BinEntry *DocEntrySet::InsertBinEntry(uint8_t *binArea, int lgth, uint16_t group, uint16_t elem, TagName const &vr ) { BinEntry *binEntry = 0; - DocEntry *currentEntry = GetDocEntry( group, elem); + DocEntry *currentEntry = GetDocEntry( group, elem ); // Verify the currentEntry if (currentEntry) @@ -316,7 +328,7 @@ BinEntry *DocEntrySet::InsertBinEntry(uint8_t *binArea,int lgth, { if( !RemoveEntry(currentEntry) ) { - gdcmVerboseMacro( "Removal of previous DocEntry failed."); + gdcmWarningMacro( "Removal of previous DocEntry failed."); return NULL; } @@ -330,7 +342,7 @@ BinEntry *DocEntrySet::InsertBinEntry(uint8_t *binArea,int lgth, if ( !AddEntry(binEntry) ) { - gdcmVerboseMacro( "AddEntry failed allthough this is a creation."); + gdcmWarningMacro( "AddEntry failed allthough this is a creation."); delete binEntry; return NULL; @@ -359,7 +371,7 @@ BinEntry *DocEntrySet::InsertBinEntry(uint8_t *binArea,int lgth, return binEntry; } -/* +/** * \brief Modifies the value of a given Header Entry (Dicom Element) * when it exists. Creates it when unexistant. * @param group Group number of the Entry @@ -387,7 +399,7 @@ SeqEntry *DocEntrySet::InsertSeqEntry(uint16_t group, uint16_t elem) { if (!RemoveEntry(currentEntry)) { - gdcmVerboseMacro( "Removal of previous DocEntry failed."); + gdcmWarningMacro( "Removal of previous DocEntry failed."); return NULL; } @@ -400,7 +412,7 @@ SeqEntry *DocEntrySet::InsertSeqEntry(uint16_t group, uint16_t elem) if( !AddEntry(seqEntry) ) { - gdcmVerboseMacro( "AddEntry failed allthough this is a creation."); + gdcmWarningMacro( "AddEntry failed allthough this is a creation."); delete seqEntry; return NULL; @@ -420,24 +432,6 @@ bool DocEntrySet::CheckIfEntryExist(uint16_t group, uint16_t elem ) return GetDocEntry(group,elem)!=NULL; } -/** - * \brief Request a new virtual dict entry to the dict set - * @param group group number of the underlying DictEntry - * @param elem element number of the underlying DictEntry - * @param vr VR (Value Representation) of the underlying DictEntry - * @param vm VM (Value Multiplicity) of the underlying DictEntry - * @param name english name - */ -DictEntry* DocEntrySet::NewVirtualDictEntry( uint16_t group,uint16_t elem, - TagName const & vr, - TagName const & vm, - TagName const & name ) -{ - return Global::GetDicts()->NewVirtualDictEntry(group,elem,vr,vm,name); -} - -//----------------------------------------------------------------------------- -// Protected /** * \brief Build a new Val Entry from all the low level arguments. * Check for existence of dictionary entry, and build @@ -447,7 +441,7 @@ DictEntry* DocEntrySet::NewVirtualDictEntry( uint16_t group,uint16_t elem, * @param vr VR of the new Entry */ ValEntry *DocEntrySet::NewValEntry(uint16_t group,uint16_t elem, - TagName const & vr) + TagName const &vr) { DictEntry *dictEntry = GetDictEntry(group, elem, vr); gdcmAssertMacro(dictEntry); @@ -455,7 +449,7 @@ ValEntry *DocEntrySet::NewValEntry(uint16_t group,uint16_t elem, ValEntry *newEntry = new ValEntry(dictEntry); if (!newEntry) { - gdcmVerboseMacro( "Failed to allocate ValEntry"); + gdcmWarningMacro( "Failed to allocate ValEntry"); return 0; } return newEntry; @@ -470,8 +464,8 @@ ValEntry *DocEntrySet::NewValEntry(uint16_t group,uint16_t elem, * @param elem element number of the new Entry * @param vr VR of the new Entry */ -BinEntry *DocEntrySet::NewBinEntry(uint16_t group,uint16_t elem, - TagName const & vr) +BinEntry *DocEntrySet::NewBinEntry(uint16_t group, uint16_t elem, + TagName const &vr) { DictEntry *dictEntry = GetDictEntry(group, elem, vr); gdcmAssertMacro(dictEntry); @@ -479,7 +473,7 @@ BinEntry *DocEntrySet::NewBinEntry(uint16_t group,uint16_t elem, BinEntry *newEntry = new BinEntry(dictEntry); if (!newEntry) { - gdcmVerboseMacro( "Failed to allocate BinEntry"); + gdcmWarningMacro( "Failed to allocate BinEntry"); return 0; } return newEntry; @@ -492,7 +486,7 @@ BinEntry *DocEntrySet::NewBinEntry(uint16_t group,uint16_t elem, * @param group group number of the new Entry * @param elem element number of the new Entry */ -SeqEntry* DocEntrySet::NewSeqEntry(uint16_t group,uint16_t elem) +SeqEntry* DocEntrySet::NewSeqEntry(uint16_t group, uint16_t elem) { DictEntry *dictEntry = GetDictEntry(group, elem, "SQ"); gdcmAssertMacro(dictEntry); @@ -500,12 +494,30 @@ SeqEntry* DocEntrySet::NewSeqEntry(uint16_t group,uint16_t elem) SeqEntry *newEntry = new SeqEntry( dictEntry ); if (!newEntry) { - gdcmVerboseMacro( "Failed to allocate SeqEntry"); + gdcmWarningMacro( "Failed to allocate SeqEntry"); return 0; } return newEntry; } +/** + * \brief Request a new virtual dict entry to the dict set + * @param group group number of the underlying DictEntry + * @param elem element number of the underlying DictEntry + * @param vr VR (Value Representation) of the underlying DictEntry + * @param vm VM (Value Multiplicity) of the underlying DictEntry + * @param name english name + */ +DictEntry* DocEntrySet::NewVirtualDictEntry( uint16_t group, uint16_t elem, + TagName const &vr, + TagName const &vm, + TagName const &name ) +{ + return Global::GetDicts()->NewVirtualDictEntry(group,elem,vr,vm,name); +} + +//----------------------------------------------------------------------------- +// Protected /** * \brief Searches [both] the public [and the shadow dictionary (when they * exist)] for the presence of the DictEntry with given @@ -521,7 +533,7 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group,uint16_t elem) Dict *pubDict = Global::GetDicts()->GetDefaultPubDict(); if (!pubDict) { - gdcmVerboseMacro( "We SHOULD have a default dictionary"); + gdcmWarningMacro( "We SHOULD have a default dictionary"); } else { @@ -530,10 +542,9 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group,uint16_t elem) return found; } - /** - * \brief Searches both the public and the shadow dictionary (when they - * exist) for the presence of the DictEntry with given + * \brief Searches [both] the public [and the shadow dictionary (when they + * exist)] for the presence of the DictEntry with given * group and element, and create a new virtual DictEntry if necessary * @param group group number of the searched DictEntry * @param elem element number of the searched DictEntry @@ -541,7 +552,7 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group,uint16_t elem) * @return Corresponding DictEntry when it exists, NULL otherwise. */ DictEntry *DocEntrySet::GetDictEntry(uint16_t group, uint16_t elem, - TagName const & vr) + TagName const &vr) { DictEntry *dictEntry = GetDictEntry(group,elem); DictEntry *goodEntry = dictEntry; @@ -577,5 +588,8 @@ DictEntry *DocEntrySet::GetDictEntry(uint16_t group, uint16_t elem, //----------------------------------------------------------------------------- // Private +//----------------------------------------------------------------------------- +// Print + //----------------------------------------------------------------------------- } // end namespace gdcm