72 assert( DES.empty() );
79 void Print(std::ostream &os, std::string
const &indent =
"")
const {
86 for( ; it != DES.end(); ++it)
88 os << indent << *it <<
"\n";
92 template <
typename TDE>
99 for( ++it; it != DES.end()
100 && it->GetTag().GetGroup() == tag.
GetGroup(); ++it)
102 assert( it->GetTag().GetElement() != 0x0 );
103 assert( it->GetTag().GetGroup() == tag.
GetGroup() );
104 res += it->GetLength<TDE>();
109 template <
typename TDE>
111 if( DES.empty() )
return 0;
112 assert( !DES.empty() );
116 for( ; it != DES.end(); ++it)
118 assert( !(it->GetLength<TDE>().IsUndefined()) );
119 if ( it->GetTag() !=
Tag(0xfffe,0xe00d) )
121 ll += it->GetLength<TDE>();
141 InsertDataElement( de );
146 gdcmErrorMacro(
"Cannot add element with group < 0x0008 and != 0x4 in the dataset: " << de.
GetTag() );
151 if( DES.find(de) != DES.end() ) DES.erase(de);
157 if( it != DES.end() && it->IsEmpty() )
163 DataElementSet::size_type count = DES.erase(tag);
164 assert( count == 0 || count == 1 );
181 if( it != DES.end() )
186 const DataElement& operator() (uint16_t group, uint16_t element)
const {
return GetDataElement(
Tag(group,element) ); }
189 std::string GetPrivateCreator(
const Tag &t)
const;
192 bool FindDataElement(
const PrivateTag &t)
const;
200 if( DES.find(r) != DES.end() )
212 if( it != DES.end() )
239 template <
typename TDE,
typename TSwap>
240 std::istream &ReadNested(std::istream &is);
242 template <
typename TDE,
typename TSwap>
243 std::istream &Read(std::istream &is);
245 template <
typename TDE,
typename TSwap>
246 std::istream &ReadUpToTag(std::istream &is,
const Tag &t, std::set<Tag>
const & skiptags);
248 template <
typename TDE,
typename TSwap>
249 std::istream &ReadUpToTagWithLength(std::istream &is,
const Tag &t, std::set<Tag>
const & skiptags,
VL & length);
251 template <
typename TDE,
typename TSwap>
252 std::istream &ReadSelectedTags(std::istream &is,
const std::set<Tag> & tags,
bool readvalues =
true);
253 template <
typename TDE,
typename TSwap>
254 std::istream &ReadSelectedTagsWithLength(std::istream &is,
const std::set<Tag> & tags,
VL & length,
bool readvalues =
true);
256 template <
typename TDE,
typename TSwap>
257 std::istream &ReadSelectedPrivateTags(std::istream &is,
const std::set<PrivateTag> & tags,
bool readvalues =
true);
258 template <
typename TDE,
typename TSwap>
259 std::istream &ReadSelectedPrivateTagsWithLength(std::istream &is,
const std::set<PrivateTag> & tags,
VL & length,
bool readvalues =
true);
261 template <
typename TDE,
typename TSwap>
262 std::ostream
const &Write(std::ostream &os)
const;
264 template <
typename TDE,
typename TSwap>
265 std::istream &ReadWithLength(std::istream &is,
VL &length);
283 std::pair<Iterator,bool> pr = DES.insert(de);
284 if( pr.second ==
false )
286 gdcmWarningMacro(
"DataElement: " << de <<
" was already found, skipping duplicate entry.\n"
287 "Original entry kept is: " << *pr.first );
312 #if defined(SWIGPYTHON) || defined(SWIGCSHARP) || defined(SWIGJAVA)
320 SWIGDataSet(DataSet &des):Internal(des),it(des.Begin()) {}
321 const DataElement& GetCurrent()
const {
return *it; }
322 void Start() { it = Internal.Begin(); }
323 bool IsAtEnd()
const {
return it == Internal.End(); }
324 void Next() { ++it; }
338 #include "gdcmDataSet.txx"
340 #endif //GDCMDATASET_H
void Print(std::ostream &os, std::string const &indent="") const
Definition: gdcmDataSet.h:79
bool IsEmpty() const
Check if Data Element is empty.
Definition: gdcmDataElement.h:103
const DataElement & FindNextDataElement(const Tag &t) const
Definition: gdcmDataSet.h:209
Class to represent a Data Set (which contains Data Elements) A Data Set represents an instance of a r...
Definition: gdcmDataSet.h:55
bool FindDataElement(const Tag &t) const
Definition: gdcmDataSet.h:197
const DataElement & GetDataElement(const Tag &t) const
Definition: gdcmDataSet.h:178
const DataElementSet & GetDES() const
Definition: gdcmDataSet.h:68
DataElementSet & GetDES()
Definition: gdcmDataSet.h:69
unsigned int ComputeGroupLength(Tag const &tag) const
Definition: gdcmDataSet.h:93
Class to represent a Private DICOM Data Element (Attribute) Tag (Group, Element, Owner) ...
Definition: gdcmPrivateTag.h:38
const VL & GetVL() const
Get VL.
Definition: gdcmDataElement.h:74
#define GDCM_EXPORT
Definition: gdcmWin32.h:34
#define gdcmWarningMacro(msg)
Warning.
Definition: gdcmTrace.h:141
void ReplaceEmpty(const DataElement &de)
Only replace a DICOM attribute when it is missing or empty.
Definition: gdcmDataSet.h:155
DataElementSet::size_type SizeType
Definition: gdcmDataSet.h:62
Value Length.
Definition: gdcmVL.h:29
uint16_t GetElement() const
Returns the 'Element number' of the given Tag.
Definition: gdcmTag.h:57
std::ostream & operator<<(std::ostream &os, const Directory &d)
Definition: gdcmDirectory.h:92
std::set< DataElement > DataElementSet
Definition: gdcmDataSet.h:59
DataElementSet::iterator Iterator
Definition: gdcmDataSet.h:61
Class to represent a Data Element either Implicit or Explicit.
Definition: gdcmDataElement.h:58
void Insert(const DataElement &de)
Definition: gdcmDataSet.h:128
Definition: gdcmDataSet.h:28
Value const & GetValue() const
Set/Get Value (bytes array, SQ of items, SQ of fragments):
Definition: gdcmDataElement.h:94
SizeType Size() const
Definition: gdcmDataSet.h:75
void InsertDataElement(const DataElement &de)
Definition: gdcmDataSet.h:279
void Clear()
Definition: gdcmDataSet.h:70
bool IsEmpty() const
Returns if the dataset is empty.
Definition: gdcmDataSet.h:218
virtual VL GetLength() const =0
const Tag & GetTag() const
Get Tag.
Definition: gdcmDataElement.h:67
Iterator End()
Definition: gdcmDataSet.h:67
DataElementSet::const_iterator ConstIterator
Definition: gdcmDataSet.h:60
DataSet & operator=(DataSet const &val)
Definition: gdcmDataSet.h:220
#define gdcmErrorMacro(msg)
Error this is pretty bad, more than just warning It could mean lost of data, something not handle...
Definition: gdcmTrace.h:163
Class to represent a DICOM Data Element (Attribute) Tag (Group, Element). Basically an uint32_t which...
Definition: gdcmTag.h:38
uint16_t GetGroup() const
Returns the 'Group number' of the given Tag.
Definition: gdcmTag.h:55
void Replace(const DataElement &de)
Replace a dataelement with another one.
Definition: gdcmDataSet.h:150
Iterator Begin()
Definition: gdcmDataSet.h:65
VL GetLength() const
Definition: gdcmDataSet.h:110
ConstIterator Begin() const
Definition: gdcmDataSet.h:64
ConstIterator End() const
Definition: gdcmDataSet.h:66
SizeType Remove(const Tag &tag)
Completely remove a dataelement from the dataset.
Definition: gdcmDataSet.h:162