66#include < odr/table_dimension.hpp>
77#include < odr/table_position.hpp>
88
9- #include < odr/internal/abstract/document_element .hpp>
9+ #include < odr/internal/abstract/document .hpp>
1010
1111namespace odr {
1212
1313Element::Element () = default ;
1414
15+ Element::Element (const ElementHandle &handle)
16+ : m_adapter{handle.adapter_ptr }, m_identifier{handle.identifier } {}
17+
1518Element::Element (const internal::abstract::ElementAdapter *adapter,
1619 const ElementIdentifier identifier)
1720 : m_adapter{adapter}, m_identifier{identifier} {}
@@ -27,26 +30,23 @@ ElementType Element::type() const {
2730}
2831
2932Element Element::parent () const {
30- return exists_ () ? Element (m_adapter, m_adapter ->element_parent (m_identifier))
33+ return exists_ () ? Element (m_adapter->element_parent (m_identifier))
3134 : Element ();
3235}
3336
3437Element Element::first_child () const {
35- return exists_ ()
36- ? Element (m_adapter, m_adapter->element_first_child (m_identifier))
37- : Element ();
38+ return exists_ () ? Element (m_adapter->element_first_child (m_identifier))
39+ : Element ();
3840}
3941
4042Element Element::previous_sibling () const {
41- return exists_ () ? Element (m_adapter,
42- m_adapter->element_previous_sibling (m_identifier))
43+ return exists_ () ? Element (m_adapter->element_previous_sibling (m_identifier))
4344 : Element ();
4445}
4546
4647Element Element::next_sibling () const {
47- return exists_ ()
48- ? Element (m_adapter, m_adapter->element_next_sibling (m_identifier))
49- : Element ();
48+ return exists_ () ? Element (m_adapter->element_next_sibling (m_identifier))
49+ : Element ();
5050}
5151
5252bool Element::is_unique () const {
@@ -68,8 +68,7 @@ DocumentPath Element::document_path() const {
6868
6969Element Element::navigate_path (const DocumentPath &path) const {
7070 return exists_ ()
71- ? Element (m_adapter,
72- m_adapter->element_navigate_path (m_identifier, path))
71+ ? Element (m_adapter->element_navigate_path (m_identifier, path))
7372 : Element ();
7473}
7574
@@ -169,35 +168,39 @@ Image Element::as_image() const {
169168}
170169
171170ElementRange Element::children () const {
172- return {exists_ () ? ElementIterator (m_adapter, m_adapter-> element_first_child (
173- m_identifier))
174- : ElementIterator (),
171+ return {exists_ ()
172+ ? ElementIterator (m_adapter-> element_first_child ( m_identifier))
173+ : ElementIterator (),
175174 ElementIterator ()};
176175}
177176
178177ElementIterator::ElementIterator () = default ;
179178
179+ ElementIterator::ElementIterator (const ElementHandle &handle)
180+ : m_adapter{handle.adapter_ptr }, m_identifier{handle.identifier } {}
181+
180182ElementIterator::ElementIterator (
181183 const internal::abstract::ElementAdapter *adapter,
182184 const ElementIdentifier identifier)
183185 : m_adapter{adapter}, m_identifier{identifier} {}
184186
185- ElementIterator::reference ElementIterator::operator *() const {
186- return {m_adapter, m_identifier};
187- }
187+ Element ElementIterator::operator *() const { return {m_adapter, m_identifier}; }
188188
189189ElementIterator &ElementIterator::operator ++() {
190190 if (exists_ ()) {
191- m_identifier = m_adapter->element_next_sibling (m_identifier);
191+ const auto [next_adapter, next_id] =
192+ m_adapter->element_next_sibling (m_identifier);
193+ m_adapter = next_adapter;
194+ m_identifier = next_id;
192195 }
193196 return *this ;
194197}
195198
196- ElementIterator ElementIterator::operator ++(int ) {
199+ ElementIterator ElementIterator::operator ++(int ) const {
197200 if (!exists_ ()) {
198201 return {};
199202 }
200- return { m_adapter, m_adapter ->element_next_sibling (m_identifier)} ;
203+ return ElementIterator ( m_adapter->element_next_sibling (m_identifier)) ;
201204}
202205
203206bool ElementIterator::exists_ () const {
@@ -225,9 +228,9 @@ MasterPage TextRoot::first_master_page() const {
225228 if (!exists_ ()) {
226229 return {};
227230 }
228- const ElementIdentifier master_page_id =
231+ const auto [master_page_adapter, master_page_id] =
229232 m_adapter2->text_root_first_master_page (m_identifier);
230- return {m_adapter , master_page_id,
233+ return {master_page_adapter , master_page_id,
231234 m_adapter->master_page_adapter (master_page_id)};
232235}
233236
@@ -269,18 +272,18 @@ SheetCell Sheet::cell(const std::uint32_t column,
269272 if (!exists_ ()) {
270273 return {};
271274 }
272- const ElementIdentifier cell_id =
275+ const auto [cell_adapter, cell_id] =
273276 m_adapter2->sheet_cell (m_identifier, column, row);
274- return {m_adapter , cell_id, m_adapter->sheet_cell_adapter (cell_id)};
277+ return {cell_adapter , cell_id, m_adapter->sheet_cell_adapter (cell_id)};
275278}
276279
277280ElementRange Sheet::shapes () const {
278281 if (!exists_ ()) {
279282 return {};
280283 }
281- const ElementIdentifier first_shape_id =
284+ const auto [first_shape_adapter, first_shape_id] =
282285 m_adapter2->sheet_first_shape (m_identifier);
283- return ElementRange (ElementIterator (m_adapter , first_shape_id));
286+ return ElementRange (ElementIterator (first_shape_adapter , first_shape_id));
284287}
285288
286289TableStyle Sheet::style () const {
@@ -394,29 +397,29 @@ TableRow Table::first_row() const {
394397 if (!exists_ ()) {
395398 return {};
396399 }
397- const ElementIdentifier row_id = m_adapter2->table_first_row (m_identifier);
398- return {m_adapter , row_id, m_adapter->table_row_adapter (row_id)};
400+ const auto [row_adapter, row_id] = m_adapter2->table_first_row (m_identifier);
401+ return {row_adapter , row_id, m_adapter->table_row_adapter (row_id)};
399402}
400403
401404TableColumn Table::first_column () const {
402405 if (!exists_ ()) {
403406 return {};
404407 }
405- const ElementIdentifier column_id =
408+ const auto [column_adapter, column_id] =
406409 m_adapter2->table_first_column (m_identifier);
407- return {m_adapter, column_id, m_adapter->table_column_adapter (column_id)};
410+ return {column_adapter, column_id,
411+ m_adapter->table_column_adapter (column_id)};
408412}
409413
410414ElementRange Table::columns () const {
411- return exists_ ()
412- ? ElementRange (ElementIterator (
413- m_adapter, m_adapter2->table_first_column (m_identifier)))
414- : ElementRange ();
415+ return exists_ () ? ElementRange (ElementIterator (
416+ m_adapter2->table_first_column (m_identifier)))
417+ : ElementRange ();
415418}
416419
417420ElementRange Table::rows () const {
418421 return exists_ () ? ElementRange (ElementIterator (
419- m_adapter, m_adapter2->table_first_row (m_identifier)))
422+ m_adapter2->table_first_row (m_identifier)))
420423 : ElementRange ();
421424}
422425
0 commit comments