+2005-01-06 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+ * src/gdcmDictEntry.h : now, the IsVRUnknown is correct
+ * src/gdcmDocument.[h|cxx] : simplify the search of VR value when parsing
+ a file
+ * src/gdcmDocEntrySet.cxx : now the created DocEntry without values is good
+ when specifying the VR
+ * src/gdcmVR.[h|cxx] : add usefull method to test the validity of a VR
+ * src/gdcmDocEntry.cxx : amelioration of print
+
2005-01-05 Jean-Pierre Roux <jpr@creatis.univ-lyon1.fr
* ADD : Add the method Util::IsCurrentProcessorBigEndian
(we'll need it for 'Explicit VR Big Endian' Transfert Syntax)
* ENH : now parsing creates a Vitual DictEntry for Pixels Element,
in order to allow further VR modification by user
* REM : removal of once-called method File::WriteBase
- integration of its code in formerly one-line method File::Write
+ integration of its code in formerly one-line method File::Write
2005-01-05 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
* src/gdcmCommon.h : add the GDCM_UNKNOWN constant. This constant is to
Program: gdcm
Module: $RCSfile: gdcmDictEntry.h,v $
Language: C++
- Date: $Date: 2005/01/05 15:38:28 $
- Version: $Revision: 1.22 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.23 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
/// \brief tells if the V(alue) R(epresentation) is known (?!)
/// @return
- bool IsVRUnknown() { return VR == "??"; }
+ bool IsVRUnknown() { return VR == GDCM_UNKNOWN; }
/// \brief Returns the Dicom Group Number of the current DictEntry
/// @return the Dicom Group Number
Program: gdcm
Module: $RCSfile: gdcmDocEntry.cxx,v $
Language: C++
- Date: $Date: 2005/01/05 15:38:28 $
- Version: $Revision: 1.36 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.37 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
o = GetOffset();
vr = GetVR();
+ if(vr==GDCM_UNKNOWN)
+ vr=" ";
s << DictEntry::TranslateToKey(GetGroup(),GetElement());
Program: gdcm
Module: $RCSfile: gdcmDocEntrySet.cxx,v $
Language: C++
- Date: $Date: 2005/01/05 15:38:28 $
- Version: $Revision: 1.28 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.29 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
// Find out if the tag we encountered is in the dictionaries:
Dict *pubDict = Global::GetDicts()->GetDefaultPubDict();
DictEntry *dictEntry = pubDict->GetDictEntryByNumber(group, elem);
- if (!dictEntry)
+ std::string goodVR = vr;
+ DictEntry *goodDict = dictEntry;
+
+ // Check if the would VR is good
+ if (elem==0x0000)
+ goodVR="UL";
+
+ // Check if the DictEntry VR corresponds with the would VR
+ if (goodDict)
+ if (goodDict->GetVR() != goodVR && goodVR!=GDCM_UNKNOWN)
+ goodDict=NULL;
+
+ // Create a new virtual DictEntry if necessary
+ if (!goodDict)
{
- dictEntry = NewVirtualDictEntry(group, elem, vr);
+ if (dictEntry)
+ goodDict = NewVirtualDictEntry(group, elem, goodVR,"FIXME",dictEntry->GetName());
+ else
+ goodDict = NewVirtualDictEntry(group, elem, goodVR);
}
- DocEntry *newEntry = new DocEntry(dictEntry);
+ // Create the DocEntry
+ DocEntry *newEntry = new DocEntry(goodDict);
if (!newEntry)
{
dbg.Verbose(1, "SQItem::NewDocEntryByNumber",
}
return newEntry;
}
+
/* \brief
* Probabely move, as is, to DocEntrySet, as a non virtual method
* and remove Document::NewDocEntryByName
Program: gdcm
Module: $RCSfile: gdcmDocument.cxx,v $
Language: C++
- Date: $Date: 2005/01/06 09:51:52 $
- Version: $Revision: 1.154 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.155 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
return false;
}*/
-/**
- * \brief Update the entries with the shadow dictionary.
- * Only non even entries are analyzed
- */
-void Document::UpdateShaEntries()
-{
- //DictEntry *entry;
- std::string vr;
-
- /// \todo TODO : still any use to explore recursively the whole structure?
-/*
- for(ListTag::iterator it=listEntries.begin();
- it!=listEntries.end();
- ++it)
- {
- // Odd group => from public dictionary
- if((*it)->GetGroup()%2==0)
- continue;
-
- // Peer group => search the corresponding dict entry
- if(RefShaDict)
- entry=RefShaDict->GetDictEntryByNumber((*it)->GetGroup(),(*it)->GetElement());
- else
- entry=NULL;
-
- if((*it)->IsImplicitVR())
- vr="Implicit";
- else
- vr=(*it)->GetVR();
-
- (*it)->SetValue(GetDocEntryUnvalue(*it)); // to go on compiling
- if(entry){
- // Set the new entry and the new value
- (*it)->SetDictEntry(entry);
- CheckDocEntryVR(*it,vr);
-
- (*it)->SetValue(GetDocEntryValue(*it)); // to go on compiling
-
- }
- else
- {
- // Remove precedent value transformation
- (*it)->SetDictEntry(NewVirtualDictEntry((*it)->GetGroup(),(*it)->GetElement(),vr));
- }
- }
-*/
-}
-
/**
* \brief Searches within the Header Entries for a Dicom Element of
* a given tag.
* \brief Find the Value Representation of the current Dicom Element.
* @param entry
*/
-void Document::FindDocEntryVR( DocEntry *entry )
+std::string Document::FindDocEntryVR()
{
if ( Filetype != ExplicitVR )
- {
- return;
- }
-
- char vr[3];
+ return(GDCM_UNKNOWN);
long positionOnEntry = Fp->tellg();
// Warning: we believe this is explicit VR (Value Representation) because
// within an explicit VR file. Hence we make sure the present tag
// is in explicit VR and try to fix things if it happens not to be
// the case.
+
+ char vr[3];
Fp->read (vr, (size_t)2);
vr[2] = 0;
- if( !CheckDocEntryVR(entry, vr) )
+ if( !CheckDocEntryVR(vr) )
{
Fp->seekg(positionOnEntry, std::ios::beg);
- // When this element is known in the dictionary we shall use, e.g. for
- // the semantics (see the usage of IsAnInteger), the VR proposed by the
- // dictionary entry. Still we have to flag the element as implicit since
- // we know now our assumption on expliciteness is not furfilled.
- // avoid .
- if ( entry->IsVRUnknown() )
- {
- entry->SetVR("Implicit");
- }
- entry->SetImplicitVR();
+ return(GDCM_UNKNOWN);
}
+ return(vr);
}
/**
* @return false if the VR is incorrect of if the VR isn't referenced
* otherwise, it returns true
*/
-bool Document::CheckDocEntryVR(DocEntry *entry, VRKey vr)
+bool Document::CheckDocEntryVR(VRKey vr)
{
- std::string msg;
- bool realExplicit = true;
-
- // Assume we are reading a falsely explicit VR file i.e. we reached
- // a tag where we expect reading a VR but are in fact we read the
- // first to bytes of the length. Then we will interogate (through find)
- // the dicom_vr dictionary with oddities like "\004\0" which crashes
- // both GCC and VC++ implementations of the STL map. Hence when the
- // expected VR read happens to be non-ascii characters we consider
- // we hit falsely explicit VR tag.
-
- if ( !isalpha((unsigned char)vr[0]) && !isalpha((unsigned char)vr[1]) )
- {
- realExplicit = false;
- }
-
// CLEANME searching the dicom_vr at each occurence is expensive.
// PostPone this test in an optional integrity check at the end
// of parsing or only in debug mode.
- if ( realExplicit && !Global::GetVR()->Count(vr) )
- {
- realExplicit = false;
- }
-
- if ( !realExplicit )
- {
- // We thought this was explicit VR, but we end up with an
- // implicit VR tag. Let's backtrack.
- msg = Util::Format("Falsely explicit vr file (%04x,%04x)\n",
- entry->GetGroup(), entry->GetElement());
- dbg.Verbose(1, "Document::FindVR: ", msg.c_str());
-
- if( entry->GetGroup() % 2 && entry->GetElement() == 0x0000)
- {
- // Group length is UL !
- DictEntry* newEntry = NewVirtualDictEntry(
- entry->GetGroup(), entry->GetElement(),
- "UL", "FIXME", "Group Length");
- entry->SetDictEntry( newEntry );
- }
+ if ( !Global::GetVR()->IsValidVR(vr) )
return false;
- }
-
- if ( entry->IsVRUnknown() )
- {
- // When not a dictionary entry, we can safely overwrite the VR.
- if( entry->GetElement() == 0x0000 )
- {
- // Group length is UL !
- entry->SetVR("UL");
- }
- else
- {
- entry->SetVR(vr);
- }
- }
- else if ( entry->GetVR() != vr )
- {
- // The VR present in the file and the dictionary disagree. We assume
- // the file writer knew best and use the VR of the file. Since it would
- // be unwise to overwrite the VR of a dictionary (since it would
- // compromise it's next user), we need to clone the actual DictEntry
- // and change the VR for the read one.
- DictEntry* newEntry = NewVirtualDictEntry(
- entry->GetGroup(), entry->GetElement(),
- vr, "FIXME", entry->GetName());
- entry->SetDictEntry(newEntry);
- }
return true;
}
}
HandleBrokenEndian(group, elem);
- DocEntry *newEntry = NewDocEntryByNumber(group, elem);
- FindDocEntryVR(newEntry);
+ std::string vr=FindDocEntryVR();
+
+ DocEntry *newEntry = NewDocEntryByNumber(group, elem, vr);
+ if( vr == GDCM_UNKNOWN )
+ {
+ if( Filetype == ExplicitVR )
+ {
+ // We thought this was explicit VR, but we end up with an
+ // implicit VR tag. Let's backtrack.
+ std::string msg;
+ msg = Util::Format("Falsely explicit vr file (%04x,%04x)\n",
+ newEntry->GetGroup(), newEntry->GetElement());
+ dbg.Verbose(1, "Document::FindVR: ", msg.c_str());
+ }
+ newEntry->SetImplicitVR();
+ }
try
{
Program: gdcm
Module: $RCSfile: gdcmDocument.h,v $
Language: C++
- Date: $Date: 2005/01/05 16:53:23 $
- Version: $Revision: 1.71 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.72 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
*/
class GDCM_EXPORT Document : public ElementSet
{
-friend class File;
-private:
- /// Public dictionary used to parse this header
- Dict* RefPubDict;
-
- /// \brief Optional "shadow dictionary" (private elements) used to parse
- /// this header
- Dict* RefShaDict;
-
- /// \brief Size threshold above which an element value will NOT be loaded
- /// in memory (to avoid loading the image/volume itself). By default,
- /// this upper bound is fixed to 1024 bytes (which might look reasonable
- /// when one considers the definition of the various VR contents).
- uint32_t MaxSizeLoadEntry;
-
- /// \brief Size threshold above which an element value will NOT be *printed*
- /// in order no to polute the screen output. By default, this upper bound
- /// is fixed to 64 bytes.
- uint32_t MaxSizePrintEntry;
-
-protected:
- /// Refering underlying filename.
- std::string Filename;
-
- /// \brief SWap code (e.g. Big Endian, Little Endian, Bad Big Endian,
- /// Bad Little Endian) according to the processor Endianity and
- /// what is written on disc.
- int SwapCode;
-
- /// File Pointer, opened during Header parsing.
- std::ifstream* Fp;
-
- /// ACR, ACR_LIBIDO, ExplicitVR, ImplicitVR, Unknown
- FileType Filetype;
-
- /// After opening the file, we read HEADER_LENGTH_TO_READ bytes.
- static const unsigned int HEADER_LENGTH_TO_READ;
-
- /// \brief Elements whose value is longer than MAX_SIZE_LOAD_ELEMENT_VALUE
- /// are NOT loaded.
- static const unsigned int MAX_SIZE_LOAD_ELEMENT_VALUE;
+public:
+// Informations contained in the parser
+ virtual bool IsReadable();
+ FileType GetFileType();
- /// \brief Elements whose value is longer than MAX_SIZE_PRINT_ELEMENT_VALUE
- /// are NOT printed.
- /// \todo Currently not used since collides with #define in
- /// class DocEntry . See also
- /// method ref Document::SetMaxSizePrintEntry()
- static const unsigned int MAX_SIZE_PRINT_ELEMENT_VALUE;
+ TransferSyntaxType GetTransferSyntax();
- /// Store the RLE frames info obtained during parsing of pixels.
- RLEFramesInfo* RLEInfo;
+ bool IsJPEGLossless();
+ bool IsJPEG2000();
+ bool IsJPEG();
+ bool IsEncapsulate();
+ bool IsDicomV3();
- /// Store the JPEG fragments info obtained during parsing of pixels.
- JPEGFragmentsInfo* JPEGInfo;
+ RLEFramesInfo* GetRLEInfo() { return RLEInfo; }
+ JPEGFragmentsInfo* GetJPEGInfo() { return JPEGInfo; }
-public:
-// the 2 following will be merged
+// Dictionnaries
virtual void PrintPubDict (std::ostream &os = std::cout);
virtual void PrintShaDict (std::ostream &os = std::cout);
-// Dictionnaries
Dict* GetPubDict();
Dict* GetShaDict();
bool SetShaDict(Dict* dict);
bool SetShaDict(DictKey const & dictName);
-// Informations contained in the parser
- virtual bool IsReadable();
- TransferSyntaxType GetTransferSyntax();
- bool IsJPEGLossless();
- bool IsJPEG2000();
- bool IsJPEG();
- bool IsEncapsulate();
- bool IsDicomV3();
+// Swap code
+ /// 'Swap code' accessor (see \ref SwapCode )
+ int GetSwapCode() { return SwapCode; }
+ // System access (meaning endian related !?)
+ uint16_t SwapShort(uint16_t); // needed by File
+ uint32_t SwapLong(uint32_t); // needed by File
+ uint16_t UnswapShort(uint16_t); // needed by File
+ uint32_t UnswapLong(uint32_t); // needed by File
+
+// Ordering of Documents
+ bool operator<(Document &document);
- FileType GetFileType();
+public:
+// File I/O
+ /// Accessor to \ref Filename
+ const std::string &GetFileName() const { return Filename; }
+ /// Accessor to \ref Filename
+ void SetFileName(std::string const & fileName) { Filename = fileName; }
- std::ifstream * OpenFile();
+ std::ifstream* OpenFile();
bool CloseFile();
-
void WriteContent( std::ofstream* fp, FileType type );
+// Content entries
+ virtual bool SetEntryByName (std::string const & content,
+ TagName const & tagName );
+ virtual bool SetEntryByNumber(std::string const & content,
+ uint16_t group, uint16_t element);
+ virtual bool SetEntryByNumber(uint8_t* content, int lgth,
+ uint16_t group, uint16_t element);
+ virtual void* GetEntryBinAreaByNumber(uint16_t group, uint16_t elem);
+
+ virtual std::string GetEntryByName (TagName const & tagName);
+ virtual std::string GetEntryVRByName (TagName const & tagName);
+ virtual std::string GetEntryByNumber (uint16_t group, uint16_t elem);
+ virtual std::string GetEntryVRByNumber(uint16_t group, uint16_t elem);
+ virtual int GetEntryLengthByNumber(uint16_t group, uint16_t elem);
+
+ DocEntry* GetDocEntryByNumber(uint16_t group, uint16_t element);
+ DocEntry* GetDocEntryByName (TagName const & tagName);
+ ValEntry* GetValEntryByNumber(uint16_t group, uint16_t element);
+ //BinEntry* GetBinEntryByNumber(uint16_t group, uint16_t element);
+
ValEntry* ReplaceOrCreateByNumber(std::string const & value,
uint16_t group, uint16_t elem,
TagName const & vr = GDCM_UNKNOWN);
-
BinEntry* ReplaceOrCreateByNumber(uint8_t* binArea, int lgth,
uint16_t group, uint16_t elem,
TagName const & vr = GDCM_UNKNOWN);
-
SeqEntry* ReplaceOrCreateByNumber(uint16_t group, uint16_t elem);
bool ReplaceIfExistByNumber ( std::string const & value,
virtual void LoadEntryBinArea(uint16_t group, uint16_t elem);
virtual void LoadEntryBinArea(BinEntry* entry);
-
- // System access (meaning endian related !?)
- uint16_t SwapShort(uint16_t); // needed by File
- uint32_t SwapLong(uint32_t); // needed by File
- uint16_t UnswapShort(uint16_t); // needed by File
- uint32_t UnswapLong(uint32_t); // needed by File
+ void LoadDocEntrySafe(DocEntry* entry);
+ TagDocEntryHT* BuildFlatHashTable();
+
+// Divers
static std::string GetTransferSyntaxValue(TransferSyntaxType type);
protected:
+// Methods
// Constructor and destructor are protected to forbid end user
// to instanciate from this class Document (only Header and
// DicomDir are meaningfull).
void ComputeJPEGFragmentInfo();
// Entry
bool CheckIfEntryExistByNumber(uint16_t group, uint16_t elem );
-public:
- virtual std::string GetEntryByName (TagName const & tagName);
- virtual std::string GetEntryVRByName (TagName const & tagName);
- virtual std::string GetEntryByNumber (uint16_t group, uint16_t elem);
- virtual std::string GetEntryVRByNumber(uint16_t group, uint16_t elem);
- virtual int GetEntryLengthByNumber(uint16_t group, uint16_t elem);
-//protected:
- virtual bool SetEntryByName (std::string const & content,
- TagName const & tagName );
- virtual bool SetEntryByNumber(std::string const & content,
- uint16_t group, uint16_t element);
- virtual bool SetEntryByNumber(uint8_t* content, int lgth,
- uint16_t group, uint16_t element);
- virtual void* GetEntryBinAreaByNumber(uint16_t group, uint16_t elem);
- // FIXME
- // Verify the usefull of this method... otherwise remove it
- // It's body is commented in the .xx
- //virtual bool SetEntryBinAreaByNumber(uint8_t* a, uint16_t group,
- // uint16_t elem);
- virtual void UpdateShaEntries();
+ int ComputeGroup0002Length( FileType filetype );
- // Header entry
- DocEntry* GetDocEntryByNumber(uint16_t group, uint16_t element);
- DocEntry* GetDocEntryByName (TagName const & tagName);
+// Variables
+ /// Refering underlying filename.
+ std::string Filename;
- ValEntry* GetValEntryByNumber(uint16_t group, uint16_t element);
- //BinEntry* GetBinEntryByNumber(uint16_t group, uint16_t element);
- RLEFramesInfo* GetRLEInfo() { return RLEInfo; }
- JPEGFragmentsInfo* GetJPEGInfo() { return JPEGInfo; }
+ /// \brief SWap code (e.g. Big Endian, Little Endian, Bad Big Endian,
+ /// Bad Little Endian) according to the processor Endianity and
+ /// what is written on disc.
+ int SwapCode;
- void LoadDocEntrySafe(DocEntry* entry);
- TagDocEntryHT* BuildFlatHashTable();
+ /// File Pointer, opened during Header parsing.
+ std::ifstream* Fp;
+
+ /// ACR, ACR_LIBIDO, ExplicitVR, ImplicitVR, Unknown
+ FileType Filetype;
+
+ /// After opening the file, we read HEADER_LENGTH_TO_READ bytes.
+ static const unsigned int HEADER_LENGTH_TO_READ;
+
+ /// \brief Elements whose value is longer than MAX_SIZE_LOAD_ELEMENT_VALUE
+ /// are NOT loaded.
+ static const unsigned int MAX_SIZE_LOAD_ELEMENT_VALUE;
+
+ /// \brief Elements whose value is longer than MAX_SIZE_PRINT_ELEMENT_VALUE
+ /// are NOT printed.
+ /// \todo Currently not used since collides with #define in
+ /// class DocEntry . See also
+ /// method ref Document::SetMaxSizePrintEntry()
+ static const unsigned int MAX_SIZE_PRINT_ELEMENT_VALUE;
+
+ /// Store the RLE frames info obtained during parsing of pixels.
+ RLEFramesInfo* RLEInfo;
+
+ /// Store the JPEG fragments info obtained during parsing of pixels.
+ JPEGFragmentsInfo* JPEGInfo;
private:
+// Methods
// Read
void ParseDES(DocEntrySet *set,long offset, long l_max, bool delim_mode);
void ParseSQ (SeqEntry *seq, long offset, long l_max, bool delim_mode);
- void LoadDocEntry (DocEntry *);
- void FindDocEntryLength(DocEntry *) throw ( FormatError );
- void FindDocEntryVR (DocEntry *);
- bool CheckDocEntryVR (DocEntry *, VRKey);
+ void LoadDocEntry (DocEntry *);
+ void FindDocEntryLength (DocEntry *) throw ( FormatError );
+ std::string FindDocEntryVR();
+ bool CheckDocEntryVR (VRKey);
std::string GetDocEntryValue (DocEntry *);
std::string GetDocEntryUnvalue(DocEntry *);
DocEntrySet* set );
void HandleBrokenEndian(uint16_t group, uint16_t elem);
-public:
-// Accessors:
- /// Accessor to \ref Filename
- const std::string &GetFileName() const { return Filename; }
-
- /// Accessor to \ref Filename
- void SetFileName(std::string const & fileName) { Filename = fileName; }
- /// 'Swap code' accessor (see \ref SwapCode )
- int GetSwapCode() { return SwapCode; }
+// Variables
+ /// Public dictionary used to parse this header
+ Dict* RefPubDict;
- bool operator<(Document &document);
+ /// \brief Optional "shadow dictionary" (private elements) used to parse
+ /// this header
+ Dict* RefShaDict;
- int ComputeGroup0002Length( FileType filetype );
+ /// \brief Size threshold above which an element value will NOT be loaded
+ /// in memory (to avoid loading the image/volume itself). By default,
+ /// this upper bound is fixed to 1024 bytes (which might look reasonable
+ /// when one considers the definition of the various VR contents).
+ uint32_t MaxSizeLoadEntry;
+
+ /// \brief Size threshold above which an element value will NOT be *printed*
+ /// in order no to polute the screen output. By default, this upper bound
+ /// is fixed to 64 bytes.
+ uint32_t MaxSizePrintEntry;
+private:
+ friend class File;
};
} // end namespace gdcm
Program: gdcm
Module: $RCSfile: gdcmPixelReadConvert.cxx,v $
Language: C++
- Date: $Date: 2004/12/16 11:37:03 $
- Version: $Revision: 1.12 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.13 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
if ( HasLUT )
{
// Just in case some access to a Header element requires disk access.
- // Note: gdcmDocument::Fp is leaved open after OpenFile.
LutRedDescriptor = header->GetEntryByNumber( 0x0028, 0x1101 );
LutGreenDescriptor = header->GetEntryByNumber( 0x0028, 0x1102 );
LutBlueDescriptor = header->GetEntryByNumber( 0x0028, 0x1103 );
Program: gdcm
Module: $RCSfile: gdcmVR.cxx,v $
Language: C++
- Date: $Date: 2005/01/05 15:38:28 $
- Version: $Revision: 1.24 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.25 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
if ( tested == GDCM_UNKNOWN)
return true;
- if ( ! Count(tested) )
+ if ( ! IsValidVR(tested) )
{
dbg.Verbose(0, "VR::IsVROfGdcmBinaryRepresentable: tested not a VR!");
return false;
bool VR::IsVROfGdcmStringRepresentable(VRKey const & tested)
{
- if ( ! Count(tested) )
+ if ( ! IsValidVR(tested) )
{
dbg.Verbose(0, "VR::IsVROfGdcmStringRepresentable: tested not a VR!");
return false;
return false;
}
+bool VR::IsValidVR(VRKey const & key)
+{
+ return(vr.find(key)!=vr.end());
+}
+
//-----------------------------------------------------------------------------
// Protected
Program: gdcm
Module: $RCSfile: gdcmVR.h,v $
Language: C++
- Date: $Date: 2004/10/28 03:10:58 $
- Version: $Revision: 1.14 $
+ Date: $Date: 2005/01/06 13:35:38 $
+ Version: $Revision: 1.15 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
bool IsVROfGdcmBinaryRepresentable(VRKey const & tested);
bool IsVROfGdcmStringRepresentable(VRKey const & tested);
+ bool IsValidVR(VRKey const & key);
+
private:
VRHT vr;
};