Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Control/CxxUtils/CxxUtils/Array.h
Go to the documentation of this file.
1 // This file's extension implies that it's C, but it's really -*- C++ -*-.
2 /*
3  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 */
35 #ifndef CXXUTILS_ARRAY_H
36 #define CXXUTILS_ARRAY_H
37 
38 
39 #include "CxxUtils/Arrayrep.h"
40 #include <iterator>
41 
42 
43 namespace CxxUtils {
44 
45 
46 // Forward declarations.
47 template <unsigned int N>
49 template <unsigned int N>
51 
52 
53 //**********************************************************************
54 
55 
70 template <unsigned int N>
72 {
73 public:
76 
77 
85  static const_iterator make_iterator (const Arrayrep* rep, unsigned int offs);
86 };
87 
88 
97 template <>
99 {
100 public:
102  typedef const Arrayelt* const_iterator;
103 
104 
112  static const_iterator make_iterator (const Arrayrep* rep, unsigned int offs);
113 };
114 
115 
116 //**********************************************************************
117 
118 
133 template <unsigned int N>
134 class Array
135 {
136 public:
138  enum { NDIM = N };
139 
142 
143 
153  Array ();
154 
163  Array (const Arrayrep& rep);
164 
170  bool valid() const;
171 
179  std::vector<unsigned int> shape() const;
180 
187  unsigned int size (unsigned int dim = 0) const;
188 
197  Array<N-1> operator[] (unsigned int i) const;
198 
205  const Arrayelt* ptr () const;
206 
207 
213 
214 
219  const_iterator end () const;
220 
221 
229  void write_array (std::ostream& stream) const;
230 
231 
232  // Protected, not private, so that they can be accessed by @c WritableArray.
233 protected:
243  Array (const Arrayrep& rep, unsigned int offs);
244 
245  // These classes need to call the above protected constructor.
246  friend class Array<N+1>;
248  friend class ArrayIterator<N+1>;
249 
252  const Arrayrep* m_rep;
253 
255  unsigned int m_offs;
256 };
257 
258 
268 template <>
269 class Array<0>
270 {
271 public:
273  enum { NDIM = 0 };
274 
283  Array ();
284 
293  Array (const Arrayrep& rep);
294 
300  bool valid() const;
301 
310  std::vector<unsigned int> shape() const;
311 
321  unsigned int size (unsigned int dim=0) const;
322 
327  operator Arrayelt() const;
328 
333  int asint () const;
334 
335 
343  void write_array (std::ostream& stream) const;
344 
345 
346  // Protected, not private, so that they can be accessed by @c WritableArray.
347 protected:
357  Array (const Arrayrep& rep, unsigned int offs);
358 
359  // This class needs to call the above protected constructor.
360  friend class Array<1>;
361  friend class WritableArray<1>;
362 
365  const Arrayelt* m_elt;
366 };
367 
368 
369 template <unsigned int N>
370 std::ostream& operator<< (std::ostream& s, const Array<N>& a);
371 
372 
373 //**********************************************************************
374 
375 
390 template <unsigned int N>
391 class ArrayIterator
392 {
393 public:
394  using iterator_category = std::random_access_iterator_tag;
395  using value_type = const Array<N-1>;
396  using difference_type = std::ptrdiff_t;
398 
399 
414  class pointer
415  {
416  public:
422 
423 
429 
430 
437  const value_type* operator-> () const;
438 
439 
440  private:
443  };
444 
445 
451 
452 
459  ArrayIterator (const Arrayrep* rep, unsigned int offs);
460 
461  // Use default copy ctor and assignment.
462 
468  bool operator== (const ArrayIterator& other) const;
469 
470 
476  bool operator!= (const ArrayIterator& other) const;
477 
478 
486  bool operator< (const ArrayIterator& other) const;
487 
488 
496  bool operator> (const ArrayIterator& other) const;
497 
498 
506  bool operator<= (const ArrayIterator& other) const;
507 
508 
516  bool operator>= (const ArrayIterator& other) const;
517 
518 
527 
528 
539 
540 
546 
547 
553 
554 
560 
561 
567 
568 
579 
580 
587 
588 
595 
596 
603 
604 
611 
612 
622 
623 
624 private:
626  const Arrayrep* m_rep;
627 
630  unsigned int m_offs;
631 };
632 
633 
634 //**********************************************************************
635 
636 
644 template <unsigned int N>
645 class WritableArray
646  : public Array<N>
647 {
648 public:
658 
667  WritableArray<N-1> operator[] (unsigned int i);
668 
677  Array<N-1> operator[] (unsigned int i) const;
678 
686 
687 
688 private:
698  WritableArray (Arrayrep& rep, unsigned int offs);
699 
700  // This class needs to call the above protected constructor.
701  friend class WritableArray<N+1>;
702 
705 };
706 
707 
715 template <>
717  : public Array<0>
718 {
719 public:
729 
738 
739 
740 private:
750  WritableArray (Arrayrep& rep, unsigned int offs);
751 
752  // This class needs to call the above protected constructor.
753  friend class WritableArray<1>;
754 
758 };
759 
760 
761 //**********************************************************************
762 
763 
771 template <unsigned int N>
773  : private Arrayrep,
774  public WritableArray<N>
775 {
776 public:
784  WritableArrayData (const unsigned int shape[]);
785 
793  WritableArrayData (const std::vector<unsigned int>& shape);
794 };
795 
796 
802 template <class T>
803  requires std::assignable_from<T&, float>
805 
806 
812 template <unsigned int N>
814 
815 
819 template <class T>
820 concept FromArrayrep =
821  requires (T t, const CxxUtils::Arrayrep& rep)
822  {
824  };
825 
826 
827 } // namespace CxxUtils
828 
829 
830 #include "CxxUtils/Array.icc"
831 
832 
833 // Backwards compatibility.
834 namespace CaloRec {
835  using CxxUtils::Array;
838 }
839 
840 
841 #endif // not CXXUTILS_ARRAY_H
842 
CxxUtils::WritableArray< 0 >::m_elt_nc
Arrayelt * m_elt_nc
Pointer to this array's single element, non-const copy.
Definition: Control/CxxUtils/CxxUtils/Array.h:757
CxxUtils::WritableArray< 0 >
Definition: Control/CxxUtils/CxxUtils/Array.h:718
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
yodamerge_tmp.dim
dim
Definition: yodamerge_tmp.py:239
CxxUtils::ArrayIteratorChooser
Helper for defining iterators over Array's.
Definition: Control/CxxUtils/CxxUtils/Array.h:72
CxxUtils::WritableArray
Read-write multidimensional array.
Definition: Control/CxxUtils/CxxUtils/Array.h:50
CxxUtils::ArrayIteratorChooser::make_iterator
static const_iterator make_iterator(const Arrayrep *rep, unsigned int offs)
Construct an Array<N>::const_iterator.
CxxUtils::FromArrayrep
concept FromArrayrep
Concept testing whether a type may be used with FromArrayrep.
Definition: Control/CxxUtils/CxxUtils/Array.h:820
columnar::operator=
AccessorTemplate & operator=(AccessorTemplate &&that)
Definition: VectorColumn.h:88
make_hlt_rep.rep
rep
Definition: make_hlt_rep.py:32
CxxUtils::WritableArray::m_rep_nc
Arrayrep * m_rep_nc
The underlying array representation, non-const copy.
Definition: Control/CxxUtils/CxxUtils/Array.h:704
CxxUtils::Array::const_iterator
ArrayIteratorChooser< N >::const_iterator const_iterator
The iterator for this container.
Definition: Control/CxxUtils/CxxUtils/Array.h:141
CxxUtils::Array::size
unsigned int size(unsigned int dim=0) const
Return the size of the array along one dimension.
CxxUtils::Array::valid
bool valid() const
Test for validity.
CxxUtils::Array::operator[]
Array< N-1 > operator[](unsigned int i) const
Array indexing.
CxxUtils::Array< 0 >::shape
std::vector< unsigned int > shape() const
Return the array shape.
CxxUtils::operator<<
std::ostream & operator<<(std::ostream &s, const Array< N > &a)
CxxUtils::ArrayIterator::pointer::m_a
value_type m_a
The contained Array proxy instance.
Definition: Control/CxxUtils/CxxUtils/Array.h:442
CxxUtils::Array< 0 >::Array
Array(const Arrayrep &rep)
Constructor.
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
CxxUtils::Array::m_rep
const Arrayrep * m_rep
Pointer to the representation.
Definition: Control/CxxUtils/CxxUtils/Array.h:252
x
#define x
AthenaPoolTestWrite.stream
string stream
Definition: AthenaPoolTestWrite.py:12
CxxUtils::ArrayIterator::operator->
pointer operator->() const
Dereference the iterator.
CxxUtils::ArrayIterator::operator--
ArrayIterator< N > & operator--()
Back up the iterator.
CxxUtils::ArrayIterator::operator[]
value_type operator[](difference_type n) const
Array indexing relative to the iterator.
CxxUtils::WritableArrayData::WritableArrayData
WritableArrayData(const unsigned int shape[])
Constructor.
CxxUtils::Array::end
const_iterator end() const
Return an iterator pointing past the end of the container.
CxxUtils::ArrayIterator::difference_type
std::ptrdiff_t difference_type
Definition: Control/CxxUtils/CxxUtils/Array.h:396
CxxUtils::ArrayIteratorChooser< 1 >::make_iterator
static const_iterator make_iterator(const Arrayrep *rep, unsigned int offs)
Construct an Array<1>::const_iterator.
CxxUtils::ArrayIteratorChooser::const_iterator
ArrayIterator< N > const_iterator
Iterator type for an Array<N>.
Definition: Control/CxxUtils/CxxUtils/Array.h:75
CxxUtils::ArrayIterator::pointer
Proxy to return from operator>.
Definition: Control/CxxUtils/CxxUtils/Array.h:415
CxxUtils::Array::NDIM
@ NDIM
Definition: Control/CxxUtils/CxxUtils/Array.h:138
CxxUtils::ArrayIterator::operator<=
bool operator<=(const ArrayIterator &other) const
Less-than-or-equal comparison.
CxxUtils::Array< 0 >::size
unsigned int size(unsigned int dim=0) const
Return the size of the array along one dimension.
CxxUtils::WritableArray< 0 >::WritableArray
WritableArray(Arrayrep &rep)
Constructor.
lumiFormat.i
int i
Definition: lumiFormat.py:85
CxxUtils::Array::ptr
const Arrayelt * ptr() const
Return a direct pointer to array elements.
Arrayrep.h
Representation class for Array's.
beamspotman.n
n
Definition: beamspotman.py:731
CxxUtils::ArrayIterator::operator!=
bool operator!=(const ArrayIterator &other) const
Inequality comparison.
CxxUtils::ArrayIterator::pointer::operator->
const value_type * operator->() const
Dereference the proxy.
CxxUtils
Definition: aligned_vector.h:29
CxxUtils::Array
Read-only multidimensional array.
Definition: Control/CxxUtils/CxxUtils/Array.h:135
CxxUtils::WritableArrayData::WritableArrayData
WritableArrayData(const std::vector< unsigned int > &shape)
Constructor.
CxxUtils::WritableArrayData
Definition: Control/CxxUtils/CxxUtils/Array.h:775
Array.icc
CxxUtils::Array< 0 >::m_elt
const Arrayelt * m_elt
Pointer to this array's single element.
Definition: Control/CxxUtils/CxxUtils/Array.h:365
CxxUtils::ArrayIterator::iterator_category
std::random_access_iterator_tag iterator_category
Definition: Control/CxxUtils/CxxUtils/Array.h:394
CxxUtils::requires
requires(detail::IsConcurrentHashmapPayload< KEY > &&detail::IsConcurrentHashmapPayload< VALUE > &&detail::IsUpdater< UPDATER > &&detail::IsHash< HASHER, KEY > &&detail::IsBinaryPredicate< MATCHER, KEY >) class ConcurrentMap
Hash map from integers/pointers allowing concurrent, lockless reads.
Definition: ConcurrentMap.h:94
CxxUtils::WritableArray::operator[]
WritableArray< N-1 > operator[](unsigned int i)
Array indexing.
CxxUtils::ArrayIterator::operator-
ArrayIterator< N > operator-(difference_type n) const
Return a new iterator pointing n steps behind.
CxxUtils::Array< 0 >::valid
bool valid() const
Test for validity.
CaloRec::Arrayelt
float Arrayelt
The type of an element of an Array.
Definition: Control/CxxUtils/CxxUtils/Arrayrep.h:26
CxxUtils::ArrayIteratorChooser< 1 >::const_iterator
const Arrayelt * const_iterator
Iterator type for an Array<1>.
Definition: Control/CxxUtils/CxxUtils/Array.h:102
CaloRec
Namespace for helper functions.
Definition: CaloCellPositionShift.h:23
CxxUtils::Array< 0 >::write_array
void write_array(std::ostream &stream) const
Creates a text representation of the array content.
CxxUtils::ArrayIterator::ArrayIterator
ArrayIterator(const Arrayrep *rep, unsigned int offs)
Constructor from Arrayrep and offset.
CxxUtils::ArrayIterator::m_offs
unsigned int m_offs
Offset into the representation's data array of the first element referred to by this iterator.
Definition: Control/CxxUtils/CxxUtils/Array.h:630
CxxUtils::ArrayIterator::operator+=
ArrayIterator< N > & operator+=(difference_type n)
Advance the iterator.
CxxUtils::ArrayIterator::operator==
bool operator==(const ArrayIterator &other) const
Equality comparison.
CxxUtils::fromArrayrep
requires std::assignable_from< T &, float > void fromArrayrep(const CaloRec::Arrayrep &rep, T &x)
Helper to convert from an @x Arrayrep to a scalar type.
CxxUtils::ArrayIterator::pointer::pointer
pointer(const ArrayIterator &i)
Proxy constructor.
CxxUtils::Array::Array
Array()
Default constructor.
CxxUtils::ArrayIterator::operator+
ArrayIterator< N > operator+(difference_type n) const
Return a new iterator pointing n steps ahead.
a
TList * a
Definition: liststreamerinfos.cxx:10
CxxUtils::ArrayIterator::m_rep
const Arrayrep * m_rep
The underlying array representation.
Definition: Control/CxxUtils/CxxUtils/Array.h:626
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
CxxUtils::Array::m_offs
unsigned int m_offs
Offset in the Arrayrep's data of the first element of this array.
Definition: Control/CxxUtils/CxxUtils/Array.h:255
CxxUtils::ArrayIterator::ArrayIterator
ArrayIterator()
Default constructor.
CxxUtils::WritableArray::ptr
Arrayelt * ptr()
Return a direct pointer to array elements.
CxxUtils::ArrayIterator::operator<
bool operator<(const ArrayIterator &other) const
Less-than comparison.
CaloRec::Arrayrep
Representation class for Array's.
Definition: Control/CxxUtils/CxxUtils/Arrayrep.h:62
CxxUtils::ArrayIterator::operator-=
ArrayIterator< N > & operator-=(difference_type n)
Back up the iterator.
CxxUtils::Array::write_array
void write_array(std::ostream &stream) const
Creates a text representation of the array content.
CxxUtils::ArrayIterator::operator++
ArrayIterator< N > & operator++()
Advance the iterator.
CxxUtils::ArrayIterator::operator*
value_type operator*() const
Dereference the iterator.
CxxUtils::Array::begin
const_iterator begin() const
Return an iterator pointing at the beginning of the container.
CxxUtils::Array< 0 >::Array
Array()
Default constructor.
CxxUtils::ArrayIterator
Iterator class for Array<N>.
Definition: Control/CxxUtils/CxxUtils/Array.h:48
CxxUtils::WritableArray::WritableArray
WritableArray(Arrayrep &rep)
Constructor.
CxxUtils::ArrayIterator::operator>=
bool operator>=(const ArrayIterator &other) const
Greater-than-or-equal comparison.
CxxUtils::Array::shape
std::vector< unsigned int > shape() const
Return the array shape.
CxxUtils::ArrayIterator::pointer::operator*
value_type operator*() const
Dereference the proxy.
CxxUtils::Array< 0 >::asint
int asint() const
Convert to an integer.
CxxUtils::Array::Array
Array(const Arrayrep &rep)
Constructor.
CxxUtils::ArrayIterator::operator>
bool operator>(const ArrayIterator &other) const
Greater-than comparison.