-// gdcmDict.cxx
-//-----------------------------------------------------------------------------
+/*=========================================================================
+
+ Program: gdcm
+ Module: $RCSfile: gdcmDict.cxx,v $
+ Language: C++
+ Date: $Date: 2004/07/02 13:55:27 $
+ Version: $Revision: 1.38 $
+
+ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
+ l'Image). All rights reserved. See Doc/License.txt or
+ http://www.creatis.insa-lyon.fr/Public/Gdcm/License.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+
#include "gdcmDict.h"
#include "gdcmUtil.h"
#include "gdcmDebug.h"
#include <iostream>
#include <iomanip>
-#ifdef GDCM_NO_ANSI_STRING_STREAM
-# include <strstream>
-# define ostringstream ostrstream
-# else
-# include <sstream>
-#endif
-
//-----------------------------------------------------------------------------
// Constructor / Destructor
/**
* @param FileName from which to build the dictionary.
*/
gdcmDict::gdcmDict(std::string & FileName) {
- guint16 group, element;
- char buff[1024];
+ uint16_t group;
+ uint16_t element;
+ //char buff[1024];
TagName vr;
TagName fourth;
TagName name;
FileName.c_str());
while (!from.eof()) {
- from >> std::hex >> group >> element;
- eatwhite(from);
- from.getline(buff, 256, ' ');
- vr = buff;
+ from >> std::hex;
+ from >> group; /// MEMORY LEAK in std::istream::operator>>
+ from >> element;
+ from >> vr;
+ from >> fourth;
eatwhite(from);
- from.getline(buff, 256, ' ');
- fourth = buff;
- from.getline(buff, 256, '\n');
- name = buff;
+ getline(from, name); /// MEMORY LEAK in std::getline<>
gdcmDictEntry * newEntry = new gdcmDictEntry(group, element,
vr, fourth, name);
* \brief Destructor
*/
gdcmDict::~gdcmDict() {
- for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag) {
+ for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag)
+ {
gdcmDictEntry* EntryToDelete = tag->second;
if ( EntryToDelete )
delete EntryToDelete;
* Entries will be sorted by tag i.e. the couple (group, element).
* @param os The output stream to be written to.
*/
-void gdcmDict::PrintByKey(std::ostream &os) {
+void gdcmDict::PrintByKey(std::ostream &os)
+{
std::ostringstream s;
- for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag){
+ for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag)
+ {
s << "Entry : ";
s << "(" << std::hex << std::setw(4) << tag->second->GetGroup() << ',';
- s << std::hex << std::setw(4) << tag->second->GetElement() << ") = " << std::dec;
+ s << std::hex << std::setw(4) << tag->second->GetElement() << ") = "
+ << std::dec;
s << tag->second->GetVR() << ", ";
s << tag->second->GetFourth() << ", ";
s << tag->second->GetName() << "." << std::endl;
*/
bool gdcmDict::AddNewEntry(gdcmDictEntry *NewEntry)
{
- TagKey key;
+ gdcmTagKey key;
key = NewEntry->GetKey();
if(KeyHt.count(key) == 1)
else
{
KeyHt[NewEntry->GetKey()] = NewEntry;
- NameHt[NewEntry->GetName()] = NewEntry;
+ NameHt[NewEntry->GetName()] = NewEntry; /// MEMORY LEAK in
+ /// std::map<>::operator[]
return(true);
}
}
* @param key (group|element)
* @return false if Dicom Dictionary Entry doesn't exist
*/
-bool gdcmDict::RemoveEntry(TagKey key)
+bool gdcmDict::RemoveEntry(gdcmTagKey key)
{
if(KeyHt.count(key) == 1)
{
}
/**
- * \ingroup gdcmDict
* \brief removes an already existing Dicom Dictionary Entry,
* identified by its group,element number
* @param group Dicom group number of the Dicom Element
* @param element Dicom element number of the Dicom Element
* @return false if Dicom Dictionary Entry doesn't exist
*/
-bool gdcmDict::RemoveEntry (guint16 group, guint16 element) {
- return( RemoveEntry(gdcmDictEntry::TranslateToKey(group, element)) );
+bool gdcmDict::RemoveEntry (uint16_t group, uint16_t element)
+{
+ return( RemoveEntry(gdcmDictEntry::TranslateToKey(group, element)) );
}
/**
- * \ingroup gdcmDict
* \brief Get the dictionnary entry identified by it's name.
* @param name element of the ElVal to modify
* \warning : NEVER use it !
* the name MAY CHANGE between two versions !
* @return the corresponding dictionnary entry when existing, NULL otherwise
*/
-gdcmDictEntry *gdcmDict::GetDictEntryByName(TagName name) {
+gdcmDictEntry* gdcmDict::GetDictEntryByName(TagName name) {
if ( ! NameHt.count(name))
return NULL;
return NameHt.find(name)->second;
}
/**
- * \ingroup gdcmDict
* \brief Get the dictionnary entry identified by a given tag (group,element)
* @param group group of the entry to be found
* @param element element of the entry to be found
* @return the corresponding dictionnary entry when existing, NULL otherwise
*/
-gdcmDictEntry *gdcmDict::GetDictEntryByNumber(guint16 group, guint16 element) {
- TagKey key = gdcmDictEntry::TranslateToKey(group, element);
+gdcmDictEntry* gdcmDict::GetDictEntryByNumber(uint16_t group, uint16_t element)
+{
+ gdcmTagKey key = gdcmDictEntry::TranslateToKey(group, element);
if ( ! KeyHt.count(key))
return NULL;
return KeyHt.find(key)->second;
}
/**
- * \ingroup gdcmDict
* \brief Consider all the entries of the public dicom dictionnary.
* Build all list of all the tag names of all those entries.
* \sa gdcmDictSet::GetPubDictTagNamesByCategory
* @return A list of all entries of the public dicom dictionnary.
*/
-std::list<std::string> *gdcmDict::GetDictEntryNames(void)
+std::list<std::string>* gdcmDict::GetDictEntryNames(void)
{
std::list<std::string> *Result = new std::list<std::string>;
for (TagKeyHT::iterator tag = KeyHt.begin(); tag != KeyHt.end(); ++tag)