Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
Dimensions.h
Go to the documentation of this file.
1#ifndef CPYCPPYY_DIMENSIONS_H
2#define CPYCPPYY_DIMENSIONS_H
3
4// Bindings
6
7// Standard
8#include <algorithm>
9#include <initializer_list>
10
11
12namespace CPyCppyy {
13
14static const dim_t UNKNOWN_SIZE = (dim_t)-1;
15
17 dim_t* fDims;
18
19public:
20 Dimensions(dim_t ndim = 0, dim_t* dims = nullptr) : fDims(nullptr) {
21 if (ndim && ndim != UNKNOWN_SIZE) {
22 fDims = new dim_t[ndim+1];
23 fDims[0] = ndim;
24 if (dims) std::copy(dims, dims+ndim, fDims+1);
25 else std::fill_n(fDims+1, ndim, UNKNOWN_SIZE);
26 }
27 }
28 Dimensions(std::initializer_list<dim_t> l) {
29 fDims = new dim_t[l.size()+1];
30 fDims[0] = l.size();
31 std::copy(l.begin(), l.end(), fDims+1);
32 }
33 Dimensions(const Dimensions& d) : fDims(nullptr) {
34 if (d.fDims) {
35 fDims = new dim_t[d.fDims[0]+1];
36 std::copy(d.fDims, d.fDims+d.fDims[0]+1, fDims);
37 }
38 }
39 Dimensions(Dimensions&& d) : fDims(d.fDims) {
40 d.fDims = nullptr;
41 }
43 if (this != &d) {
44 if (!d.fDims) {
45 delete [] fDims;
46 fDims = nullptr;
47 } else {
48 if (!fDims || (fDims && fDims[0] != d.fDims[0])) {
49 delete [] fDims;
50 fDims = new dim_t[d.fDims[0]+1];
51 }
52 std::copy(d.fDims, d.fDims+d.fDims[0]+1, fDims);
53 }
54 }
55 return *this;
56 }
58 delete [] fDims;
59 }
60
61public:
62 operator bool() const { return (bool)fDims; }
63
64 dim_t ndim() const { return fDims ? fDims[0] : UNKNOWN_SIZE; }
65 void ndim(dim_t d) {
66 if (fDims) {
67 if (fDims[0] == d) return;
68 delete [] fDims;
69 }
70
71 fDims = new dim_t[d+1];
72 fDims[0] = d;
73 std::fill_n(fDims+1, d, UNKNOWN_SIZE);
74 }
75
76 dim_t operator[](dim_t i) const { return fDims[i+1]; }
77 dim_t& operator[](dim_t i) { return fDims[i+1]; }
78
79 Dimensions sub() const { return fDims ? Dimensions(fDims[0]-1, fDims+2) : Dimensions(); }
80};
81
82typedef Dimensions dims_t;
83typedef const dims_t& cdims_t;
84
85} // namespace CPyCppyy
86
87#endif // !CPYCPPYY_DIMENSIONS_H
#define d(i)
Definition RSha256.hxx:102
#define CPYCPPYY_CLASS_EXPORT
Definition CommonDefs.h:25
Dimensions(std::initializer_list< dim_t > l)
Definition Dimensions.h:28
Dimensions(dim_t ndim=0, dim_t *dims=nullptr)
Definition Dimensions.h:20
Dimensions(const Dimensions &d)
Definition Dimensions.h:33
Dimensions & operator=(const Dimensions &d)
Definition Dimensions.h:42
Dimensions sub() const
Definition Dimensions.h:79
dim_t & operator[](dim_t i)
Definition Dimensions.h:77
dim_t operator[](dim_t i) const
Definition Dimensions.h:76
Dimensions(Dimensions &&d)
Definition Dimensions.h:39
void ndim(dim_t d)
Definition Dimensions.h:65
dim_t ndim() const
Definition Dimensions.h:64
Py_ssize_t dim_t
Definition API.h:89
Dimensions dims_t
Definition API.h:102
static const dim_t UNKNOWN_SIZE
Definition Dimensions.h:14
const dims_t & cdims_t
Definition API.h:103
TLine l
Definition textangle.C:4