AmpGen
2.1
Toggle main menu visibility
Loading...
Searching...
No Matches
DynamicContainer.h
Go to the documentation of this file.
1
#ifndef AMPGEN_DYNAMICCONTAINER_H
2
#define AMPGEN_DYNAMICCONTAINER_H
3
#include "
AmpGen/MsgService.h
"
4
#include <functional>
5
#include <vector>
6
7
namespace
AmpGen
{
17
template
<
class
TYPE,
class
CONTAINER_TYPE = std::vector<TYPE>>
class
DynamicContainer
{
18
public
:
19
class
Iterator
{
20
private
:
21
DynamicContainer
*m_container;
22
size_t
m_pos;
23
24
public
:
25
Iterator
(
const
size_t
&pos,
DynamicContainer
*parent) : m_container(parent), m_pos(pos) {}
26
TYPE *
operator->
()
const
{
return
&((*m_container)[m_pos]); }
27
TYPE
operator*
()
const
{
return
(*m_container)[m_pos]; }
28
Iterator
operator++
()
const
{
29
if
(m_pos + 1 % m_container->m_buffer.size() == 0 && m_pos + 1 != m_container->m_totalSize) { m_container->refresh(); }
30
return
Iterator
(m_pos + 1, m_container);
31
}
32
Iterator
&
operator++
() {
33
m_pos++;
34
if
(m_pos % m_container->m_buffer.size() == 0 && m_pos % m_container->m_totalSize) { m_container->refresh(); }
35
return
*
this
;
36
}
37
bool
operator==
(
const
Iterator
&rhs)
const
{
return
m_pos == rhs.m_pos; }
38
bool
operator!=
(
const
Iterator
&rhs)
const
{
return
m_pos != rhs.m_pos; }
39
};
40
41
private
:
42
CONTAINER_TYPE m_buffer;
43
size_t
m_totalSize;
44
std::function<void(CONTAINER_TYPE &)> m_generator;
45
46
public
:
47
template
<
class
GENERATOR>
DynamicContainer
(
const
size_t
&totalSize,
const
GENERATOR &generator) : m_totalSize(totalSize), m_generator(generator) {
48
refresh
();
49
}
50
Iterator
begin
() {
return
Iterator
(0,
this
); }
51
Iterator
end
() {
return
Iterator
(m_totalSize,
this
); }
52
const
size_t
&
size
()
const
{
return
m_totalSize; }
53
TYPE &
operator[]
(
const
size_t
&pos) {
return
m_buffer[pos % m_buffer.size()]; }
54
const
TYPE &
operator[]
(
const
size_t
&pos)
const
{
return
m_buffer[pos % m_buffer.size()]; }
55
void
refresh
() {
56
m_buffer.clear();
57
m_generator(m_buffer);
58
}
59
CONTAINER_TYPE &
buffer
() {
return
m_buffer; }
60
};
61
}
// namespace AmpGen
62
#endif
MsgService.h
AmpGen::DynamicContainer::Iterator
Definition
DynamicContainer.h:19
AmpGen::DynamicContainer::Iterator::operator->
TYPE * operator->() const
Definition
DynamicContainer.h:26
AmpGen::DynamicContainer::Iterator::operator!=
bool operator!=(const Iterator &rhs) const
Definition
DynamicContainer.h:38
AmpGen::DynamicContainer::Iterator::operator++
Iterator & operator++()
Definition
DynamicContainer.h:32
AmpGen::DynamicContainer::Iterator::operator++
Iterator operator++() const
Definition
DynamicContainer.h:28
AmpGen::DynamicContainer::Iterator::Iterator
Iterator(const size_t &pos, DynamicContainer *parent)
Definition
DynamicContainer.h:25
AmpGen::DynamicContainer::Iterator::operator==
bool operator==(const Iterator &rhs) const
Definition
DynamicContainer.h:37
AmpGen::DynamicContainer::Iterator::operator*
TYPE operator*() const
Definition
DynamicContainer.h:27
AmpGen::DynamicContainer::DynamicContainer
DynamicContainer(const size_t &totalSize, const GENERATOR &generator)
Definition
DynamicContainer.h:47
AmpGen::DynamicContainer::size
const size_t & size() const
Definition
DynamicContainer.h:52
AmpGen::DynamicContainer::begin
Iterator begin()
Definition
DynamicContainer.h:50
AmpGen::DynamicContainer::buffer
CONTAINER_TYPE & buffer()
Definition
DynamicContainer.h:59
AmpGen::DynamicContainer::operator[]
TYPE & operator[](const size_t &pos)
Definition
DynamicContainer.h:53
AmpGen::DynamicContainer::refresh
void refresh()
Definition
DynamicContainer.h:55
AmpGen::DynamicContainer::end
Iterator end()
Definition
DynamicContainer.h:51
AmpGen::DynamicContainer::operator[]
const TYPE & operator[](const size_t &pos) const
Definition
DynamicContainer.h:54
AmpGen
Definition
AddCPConjugate.h:2
AmpGen
DynamicContainer.h
Generated on
for AmpGen by
1.17.0