Skip to content

Commit fee09f5

Browse files
committed
Move iterator convertors back to helper file
1 parent 70b81a3 commit fee09f5

6 files changed

Lines changed: 73 additions & 30 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ set(CORE_SOURCE
420420
src/helper/list_series.cpp
421421
src/snapshots/ContainerImpls.cpp
422422
src/snapshots/ContainerTraits.cpp
423+
src/snapshots/IteratorHelpers.cpp
423424
src/snapshots/IteratorTraits.cpp
424425
src/snapshots/RandomAccessIterator.cpp
425426
src/snapshots/Snapshots.cpp

include/openPMD/snapshots/ContainerTraits.hpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,6 @@ class OpaqueSeriesIterator
3333
protected:
3434
using Self_t = OpaqueSeriesIterator<value_type_in>;
3535

36-
template <typename ChildClass, typename... ConstructorArgs>
37-
static auto from_concrete_iterator(ConstructorArgs &&...args) -> Self_t
38-
{
39-
return OpaqueSeriesIterator<value_type_in>(
40-
std::unique_ptr<DynamicSeriesIterator<value_type_in>>{
41-
new ChildClass(std::forward<ConstructorArgs>(args)...)});
42-
}
43-
4436
template <typename ChildClass>
4537
auto to_concrete_iterator() -> std::optional<ChildClass>
4638
{
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#pragma once
2+
3+
#include "openPMD/Iteration.hpp"
4+
#include "openPMD/snapshots/StatefulIterator.hpp"
5+
6+
namespace openPMD
7+
{
8+
auto stateful_to_opaque(StatefulIterator const &it) -> OpaqueSeriesIterator<
9+
Container<Iteration, Iteration::IterationIndex_t>::value_type>;
10+
11+
template <
12+
typename ConcreteIteratorClass,
13+
typename ValueType,
14+
typename... ConstructorArgs>
15+
auto from_concrete_iterator(ConstructorArgs &&...args)
16+
-> OpaqueSeriesIterator<ValueType>
17+
{
18+
return OpaqueSeriesIterator<ValueType>(
19+
std::unique_ptr<DynamicSeriesIterator<ValueType>>{
20+
new ConcreteIteratorClass(std::forward<ConstructorArgs>(args)...)});
21+
}
22+
} // namespace openPMD

include/openPMD/snapshots/RandomAccessIterator.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@ class RandomAccessIterator
5151
friend class RandomAccessIteratorContainer;
5252
template <typename>
5353
friend class OpaqueSeriesIterator;
54+
template <
55+
typename ConcreteIteratorClass,
56+
typename ValueType,
57+
typename... ConstructorArgs>
58+
friend auto from_concrete_iterator(ConstructorArgs &&...args)
59+
-> OpaqueSeriesIterator<ValueType>;
60+
5461
using parent_t = AbstractSeriesIterator<
5562
RandomAccessIterator<iterator_t>,
5663
detail::iterator_to_value_type<iterator_t>>;

src/snapshots/ContainerImpls.cpp

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "openPMD/Error.hpp"
33
#include "openPMD/IO/Access.hpp"
44
#include "openPMD/snapshots/ContainerTraits.hpp"
5+
#include "openPMD/snapshots/IteratorHelpers.hpp"
56
#include "openPMD/snapshots/RandomAccessIterator.hpp"
67
#include "openPMD/snapshots/StatefulIterator.hpp"
78
#include <memory>
@@ -43,8 +44,7 @@ auto StatefulSnapshotsContainer::get() const -> StatefulIterator const *
4344
auto StatefulSnapshotsContainer::stateful_to_opaque(StatefulIterator const &it)
4445
-> OpaqueSeriesIterator<value_type>
4546
{
46-
return OpaqueSeriesIterator<value_type>::from_concrete_iterator<
47-
StatefulIterator>(it);
47+
return from_concrete_iterator<StatefulIterator, value_type>(it);
4848
}
4949

5050
auto StatefulSnapshotsContainer::currentIteration() const
@@ -329,43 +329,49 @@ auto RandomAccessIteratorContainer::currentIteration() const
329329

330330
auto RandomAccessIteratorContainer::begin() -> iterator
331331
{
332-
return iterator::from_concrete_iterator<concrete_iterator_type>(
332+
return from_concrete_iterator<concrete_iterator_type, iterator::value_type>(
333333
m_cont.begin());
334334
}
335335
auto RandomAccessIteratorContainer::end() -> iterator
336336
{
337-
return iterator::from_concrete_iterator<concrete_iterator_type>(
337+
return from_concrete_iterator<concrete_iterator_type, iterator::value_type>(
338338
m_cont.end());
339339
}
340340
auto RandomAccessIteratorContainer::begin() const -> const_iterator
341341
{
342-
return const_iterator::from_concrete_iterator<concrete_const_iterator_type>(
343-
m_cont.begin());
342+
return from_concrete_iterator<
343+
concrete_const_iterator_type,
344+
const_iterator::value_type>(m_cont.begin());
344345
}
345346
auto RandomAccessIteratorContainer::end() const -> const_iterator
346347
{
347-
return const_iterator::from_concrete_iterator<concrete_const_iterator_type>(
348-
m_cont.end());
348+
return from_concrete_iterator<
349+
concrete_const_iterator_type,
350+
const_iterator::value_type>(m_cont.end());
349351
}
350352
auto RandomAccessIteratorContainer::rbegin() -> reverse_iterator
351353
{
352-
return reverse_iterator::from_concrete_iterator<
353-
concrete_reverse_iterator_type>(m_cont.rbegin());
354+
return from_concrete_iterator<
355+
concrete_reverse_iterator_type,
356+
reverse_iterator::value_type>(m_cont.rbegin());
354357
}
355358
auto RandomAccessIteratorContainer::rend() -> reverse_iterator
356359
{
357-
return reverse_iterator::from_concrete_iterator<
358-
concrete_reverse_iterator_type>(m_cont.rend());
360+
return from_concrete_iterator<
361+
concrete_reverse_iterator_type,
362+
reverse_iterator::value_type>(m_cont.rend());
359363
}
360364
auto RandomAccessIteratorContainer::rbegin() const -> const_reverse_iterator
361365
{
362-
return const_reverse_iterator::from_concrete_iterator<
363-
concrete_const_reverse_iterator_type>(m_cont.rbegin());
366+
return from_concrete_iterator<
367+
concrete_const_reverse_iterator_type,
368+
const_reverse_iterator::value_type>(m_cont.rbegin());
364369
}
365370
auto RandomAccessIteratorContainer::rend() const -> const_reverse_iterator
366371
{
367-
return const_reverse_iterator::from_concrete_iterator<
368-
concrete_const_reverse_iterator_type>(m_cont.rend());
372+
return from_concrete_iterator<
373+
concrete_const_reverse_iterator_type,
374+
const_reverse_iterator::value_type>(m_cont.rend());
369375
}
370376

371377
auto RandomAccessIteratorContainer::empty() const -> bool
@@ -396,14 +402,15 @@ auto RandomAccessIteratorContainer::clear() -> void
396402

397403
auto RandomAccessIteratorContainer::find(key_type const &key) -> iterator
398404
{
399-
return iterator::from_concrete_iterator<concrete_iterator_type>(
405+
return from_concrete_iterator<concrete_iterator_type, iterator::value_type>(
400406
m_cont.find(key));
401407
}
402408
auto RandomAccessIteratorContainer::find(key_type const &key) const
403409
-> const_iterator
404410
{
405-
return const_iterator::from_concrete_iterator<concrete_const_iterator_type>(
406-
m_cont.find(key));
411+
return from_concrete_iterator<
412+
concrete_const_iterator_type,
413+
const_iterator::value_type>(m_cont.find(key));
407414
}
408415

409416
auto RandomAccessIteratorContainer::contains(key_type const &key) const -> bool
@@ -423,17 +430,17 @@ auto RandomAccessIteratorContainer::erase(iterator it) -> iterator
423430
throw std::runtime_error(
424431
"[RandomAccessIteratorContainer] Illegal dynamic iterator type.");
425432
}
426-
return iterator::from_concrete_iterator<concrete_iterator_type>(
433+
return from_concrete_iterator<concrete_iterator_type, iterator::value_type>(
427434
m_cont.erase(bare_iterator->m_it));
428435
}
429436

430437
auto RandomAccessIteratorContainer::emplace(value_type &&value)
431438
-> std::pair<iterator, bool>
432439
{
433-
throw std::runtime_error("EMPLACCIINNGGGG");
434440
auto [tmp_iterator, newly_emplaced] = m_cont.emplace(std::move(value));
435441
return std::make_pair(
436-
iterator::from_concrete_iterator<concrete_iterator_type>(tmp_iterator),
442+
from_concrete_iterator<concrete_iterator_type, iterator::value_type>(
443+
tmp_iterator),
437444
newly_emplaced);
438445
}
439446

src/snapshots/IteratorHelpers.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include "openPMD/snapshots/IteratorHelpers.hpp"
2+
3+
namespace openPMD
4+
{
5+
using value_type =
6+
Container<Iteration, Iteration::IterationIndex_t>::value_type;
7+
auto stateful_to_opaque(StatefulIterator const &it) -> OpaqueSeriesIterator<
8+
Container<Iteration, Iteration::IterationIndex_t>::value_type>
9+
{
10+
return from_concrete_iterator<
11+
StatefulIterator,
12+
Container<Iteration, Iteration::IterationIndex_t>::value_type>(it);
13+
}
14+
} // namespace openPMD

0 commit comments

Comments
 (0)