2#ifndef FPGATrackSimBinArray_H
3#define FPGATrackSimBinArray_H
51 void setsize(
const std::vector<unsigned int> &
dims,
const T &initval)
58 for (
auto &dim :
dims)
78 const std::vector<unsigned int> &
dims()
const {
return m_dims; }
81 bool isValid(
const std::vector<unsigned int> &idx)
const {
82 if (idx.size() !=
m_dims.size())
return false;
83 for (
unsigned int i = 0; i <
m_dims.size(); i++)
85 if (idx[i]>=
m_dims[i])
return false;
91 const T &
operator[](
const std::vector<unsigned int> &idx)
const
93 if(idx.size() !=
m_step.size()) {
94 throw std::runtime_error(
"FPGATrackSimBinArray: index size does not match array dimensions");
98 unsigned int offset = 0;
99 for (
unsigned int i = 0; i <
m_step.size(); i++)
101 if (idx.at(i) >=
m_dims.at(i))
103 throw std::runtime_error(
"FPGATrackSimBinArray: index out of range i=" + std::to_string(i) +
104 " idx[i]=" + std::to_string(idx.at(i)) +
105 " dims[i]=" + std::to_string(
m_dims.at(i)) +
"\n");
107 offset += idx.at(i) *
m_step.at(i);
117 std::vector<unsigned int> idx_unsigned;
119 idx_unsigned.push_back(d);
120 return (*
this)[idx_unsigned];
150 throw std::runtime_error(
151 "FPGATrackSimBinArray::Interator array size mismatch in "
163 for (
unsigned int i = 0; i <
m_idx.size() - 1; i++)
174 const std::vector<unsigned int> &
idx()
const {
return m_idx; }
188 return a.m_idx != b.m_idx;
243 Iterator
begin() {
return Iterator(std::vector<unsigned int>(
m_dims.size(), 0), *
this); }
246 std::vector<unsigned int> retv;
248 retv.push_back(d - 1);
249 return ++Iterator(retv, *
this);
252 auto begin()
const {
return ConstIterator(std::vector<unsigned int>(
m_dims.size(), 0), *
this); }
255 std::vector<unsigned int> retv;
257 retv.push_back(d - 1);
258 return ++ConstIterator(retv, *
this);
Define macros for attributes used to control the static checker.
#define ATLAS_THREAD_SAFE
FPGATrackSimBinArray(const std::vector< unsigned int > &dims, const T &initval)
T & operator[](const std::vector< int > &idx)
unsigned int size() const
FPGATrackSimBinArray()=default
std::vector< unsigned int > m_step
const std::vector< T > & flatdata() const
void setsize(const std::vector< unsigned int > &dims, const T &initval)
const std::vector< unsigned int > & dims() const
bool isValid(const std::vector< unsigned int > &idx) const
std::vector< unsigned int > m_dims
const T & operator[](const std::vector< int > &idx) const
const T & operator[](const std::vector< unsigned int > &idx) const
T & operator[](const std::vector< unsigned > &idx)
FPGATrackSimBinArray< T >::ConstIterator & reference
ConstIterator(const std::vector< unsigned int > &idx, const FPGATrackSimBinArray< T > &itrdata)
FPGATrackSimBinArray< T >::ConstIterator * pointer
std::vector< unsigned int > m_idx
ConstIterator & operator*()
std::forward_iterator_tag iterator_category
ConstIterator operator++(int)
const FPGATrackSimBinArray< T > container_type
ConstIterator * operator->()
const std::vector< unsigned int > & idx() const
const FPGATrackSimBinArray< T > & m_itrdata
ConstIterator & operator++()
friend bool operator==(const ConstIterator &a, const ConstIterator &b)
friend bool operator!=(const ConstIterator &a, const ConstIterator &b)
FPGATrackSimBinArray< T >::ConstIterator value_type
Iterator(const std::vector< unsigned int > &idx, FPGATrackSimBinArray< T > &itrdata)
FPGATrackSimBinArray< T > container_type
FPGATrackSimBinArray< T >::Iterator value_type
friend bool operator!=(const Iterator &a, const Iterator &b)
std::forward_iterator_tag iterator_category
FPGATrackSimBinArray< T >::Iterator * pointer
FPGATrackSimBinArray< T >::Iterator & reference
friend bool operator==(const Iterator &a, const Iterator &b)