13 namespace dictionary {
36 std::weak_ptr<DataElement> m_parent;
37 std::map<Tag, std::shared_ptr<DataElement>> m_elements;
38 std::shared_ptr<dictionary::PrivateOwnerBlocks> m_private_owner_blocks;
47 typedef decltype(m_elements)::
iterator iterator_type;
51 self_type& operator++();
52 std::shared_ptr<DataElement>& operator*();
53 bool operator==(
const self_type& rhs)
const;
54 bool operator!=(
const self_type& rhs)
const;
68 self_type& operator++();
69 std::shared_ptr<const DataElement> operator*();
70 bool operator==(
const self_type& rhs)
const;
71 bool operator!=(
const self_type& rhs)
const;
81 DataSet(std::shared_ptr<DataElement> parent =
nullptr);
83 const std::weak_ptr<DataElement>& parent()
const;
84 std::weak_ptr<DataElement>& parent();
87 void add_data_element(std::shared_ptr<DataElement> data_element);
96 std::shared_ptr<const dictionary::Page> page_for(
const Tag& tag)
const;
100 template <
typename T>
102 if (this->data_element(element->tag()))
throw vega::Exception(
"DataSet::add_element() -- Cannot add new element as it already exists");
103 this->m_elements.emplace(element->tag(), element->underlying_data_element());
106 bool is_undefined_length()
const;
109 return iterator(m_elements.begin());
123 std::shared_ptr<DataElement> data_element(
const std::string& name);
124 std::shared_ptr<DataElement> data_element(
const Tag& tag);
125 std::shared_ptr<DataElement> data_element(
const TagMask& tag_mask);
126 std::shared_ptr<const DataElement> data_element(
const std::string& tag)
const;
127 std::shared_ptr<const DataElement> data_element(
const Tag& tag)
const;
129 template <
typename T>
131 if (this->data_element(T::tag_mask))
throw vega::Exception(
"DataSet::new_element() -- Cannot create new element as it already exists");
133 auto element = std::make_shared<Element<T>>();
134 this->add_data_element(element->underlying_data_element());
138 template <
typename T>
140 if (this->data_element(T::tag_mask))
throw vega::Exception(
"DataSet::new_element() -- Cannot create new element as it already exists");
142 auto element = std::make_shared<Element<T>>(tag);
143 this->add_data_element(element->underlying_data_element());
147 template <
typename T>
149 auto data_element = this->data_element(T::tag_mask);
152 return std::make_shared<Element<T>>(data_element);
159 bool operator==(
const DataSet& other)
const;
160 bool operator!=(
const DataSet& other)
const;
162 void log(
Logger& logger)
const;
165 void add_private_owner_block_if_relevant(std::shared_ptr<DataElement> data_element);
void add_element(std::shared_ptr< Element< T >> element)
Adds a new Element<T> to this DataSet.
Definition: data_set.h:101
std::shared_ptr< Element< T > > new_element(const Tag &tag)
Definition: data_set.h:139
std::shared_ptr< Element< T > > element()
Definition: data_set.h:148
The base class for exceptions that are raised by the vega library.
Definition: vega.h:11
uint32_t length_type
Definition: data_set.h:31
A useful wrapper class over the more standard DataElement.
Definition: element.h:21
length_type length
Definition: data_set.h:33
const_iterator begin() const
Definition: data_set.h:111
static const length_type UNDEFINED_LENGTH
Definition: data_set.h:41
Stores a set of DataElements.
Definition: data_set.h:29
iterator self_type
Definition: data_set.h:46
Definition: tag_mask.h:11
iterator end()
Definition: data_set.h:115
Definition: data_set.h:43
Definition: data_set.h:60
const_iterator end() const
Definition: data_set.h:118
Definition: private_owner_blocks.h:7
Class for working with DICOM data element tags.
Definition: tag.h:15
std::shared_ptr< Element< T > > new_element()
Definition: data_set.h:130
const_iterator self_type
Definition: data_set.h:63
iterator begin()
Definition: data_set.h:108