NUMCXX  0.13.20181108
Numerical library for small projects and teaching purposes
tarray1.hxx
Go to the documentation of this file.
1 #ifndef NUMCXX_TARRAY1_H
6 #define NUMCXX_TARRAY1_H
7 #include <vector>
8 #include "tarray.hxx"
9 
10 namespace numcxx
11 {
12 
31  template<typename T> class TArray1: public TArray<T>, public ExpressionBase
32  {
33  public:
34  using TArray<T>::operator[];
35  using TArray<T>::size;
36  using TArray<T>::resize;
37  using TArray<T>::operator=;
38 
39 
40 
41 
46  TArray1(index n):TArray<T>(n){};
47 
54  TArray1(const std::initializer_list<T> &il ):TArray<T>(il){};
55 
61  TArray1(index n0, T*data, std::function<void(T*p)> deleter):TArray<T>(n0,data,deleter){};
62 
69  TArray1(index n0, T*data, std::shared_ptr<void> datamanager):TArray<T>(n0,data,datamanager){};
70 
71 
76  TArray1(std::shared_ptr<std::vector<T>> v):TArray<T>(v->size(),v->data(),v){};
77 
81  static std::shared_ptr<TArray1 <T> > create(index n1) { return std::make_shared<TArray1 <T> >(n1);}
82 
83 
88  static std::shared_ptr<TArray1 <T> > create(const std::initializer_list<T> il){return std::make_shared<TArray1 <T> >(il);}
89 
92  std::shared_ptr<TArray1 <T> > copy() const {return std::make_shared<TArray1 <T>>(*this); }
93 
94 
98  std::shared_ptr<TArray1 <T> > clone() const { return create(size()); }
99 
100 
101 
103  TArray1<T>& operator=(const TArray1<T> &expr) {return static_cast<TArray1<T>&>(assign(*this,expr));}
104 
106  TArray1(const TArray1<T>& A):TArray1<T>(A.shape(0)){assign(*this,A);}
107 
109  TArray1(TArray1<T> && A):TArray1<T>(A.shape(0), A._data, [](T*p){;})
110  {
111  TArray<T>::_deleter=std::move(A._deleter);
113  A._nullify();
114  }
115 
119  TArray<T>::_setshape(A.shape(0));
123  A._nullify();
124  return *this;
125  }
126 
128  template <typename EXPR, typename= typename std::enable_if<std::is_class<EXPR>::value, EXPR>::type>
129  TArray1(const EXPR& A):TArray1<T>(A.size()){assign(*this,A);}
130 
135  T item(index i0) const { return _data[_idx(i0)];};
136 
137 
142  void itemset(index i0, T x) { _data[_idx(i0)]=x;};
143 
144 
150  T __getitem__(index i0) const { return _data[_idx(i0)]; };
151 
152 
158  void __setitem__(index i0,T x) { _data[_idx(i0)]=x; };
159 
160 
161  bool is_matrix() {return false;};
162 
164  TArray1():TArray<T>(){};
165 
166  private:
167  using TArray<T>::_data;
168  using TArray<T>::_idx;
169 
170  };
171 }
172 #endif
TArray1(std::shared_ptr< std::vector< T >> v)
Construct 1D Array from smart pointer to std::vector.
Definition: tarray1.hxx:76
TArray1()
Default constructor.
Definition: tarray1.hxx:164
T item(index i0) const
Element read access.
Definition: tarray1.hxx:135
index _idx(index i0) const
1D Array index calculation with optional bounds check.
Definition: tarray.ixx:156
TArray1(const EXPR &A)
Copy constructor from expression.
Definition: tarray1.hxx:129
std::shared_ptr< TArray1< T > > clone() const
Create a clone of the array.
Definition: tarray1.hxx:98
std::function< void(T *p)> _deleter
Deleter method.
Definition: tarray.hxx:172
TArray is the common template base class for arrays and dense matrices of the numcxx project...
Definition: tarray.hxx:17
size_t size() const
Obtain size of array.
Definition: tarray.hxx:58
TArray1(index n)
Construct an empty 1D array.
Definition: tarray1.hxx:46
void itemset(index i0, T x)
Element write access.
Definition: tarray1.hxx:142
TArray1< T > & operator=(const TArray1< T > &expr)
Assignment operator.
Definition: tarray1.hxx:103
static std::shared_ptr< TArray1< T > > create(const std::initializer_list< T > il)
Construct 1D Array from std::initializer list.
Definition: tarray1.hxx:88
TArray1(TArray1< T > &&A)
Move constructor.
Definition: tarray1.hxx:109
T __getitem__(index i0) const
Element read access.
Definition: tarray1.hxx:150
TArray1(index n0, T *data, std::shared_ptr< void > datamanager)
Construct an 1D array from smartpointer managed array.
Definition: tarray1.hxx:69
unsigned int index
Definition: numcxx.hxx:21
std::shared_ptr< TArray1< T > > copy() const
Create a copy.
Definition: tarray1.hxx:92
One dimensional array class.
Definition: tarray1.hxx:31
TArray1(const std::initializer_list< T > &il)
Construct 1D Array from std::initializer list.
Definition: tarray1.hxx:54
bool is_matrix()
Definition: tarray1.hxx:161
T * _data
Data pointer.
Definition: tarray.hxx:186
void __setitem__(index i0, T x)
Element write access.
Definition: tarray1.hxx:158
void _setshape(index shape0)
Set shape of 1D array (for move constructors)
Definition: tarray.ixx:266
TArray1(index n0, T *data, std::function< void(T *p)> deleter)
Construct an 1D array from plain old C Array.
Definition: tarray1.hxx:61
Numcxx template library.
Definition: expression.ixx:41
static std::shared_ptr< TArray1< T > > create(index n1)
Construct smart pointer empty 1D Array.
Definition: tarray1.hxx:81
TArray< T > & assign(TArray< T > &A, const EXPR &expr, const EXPR *x=0)
Definition: tarray.ixx:35
index shape(const index dim) const
Obtain shape of array for given dimension.
Definition: tarray.hxx:68
TArray1< T > & operator=(TArray1< T > &&A)
Move assignment.
Definition: tarray1.hxx:117
TArray1(const TArray1< T > &A)
Copy constructor.
Definition: tarray1.hxx:106
std::shared_ptr< void > _datamanager
Data manager.
Definition: tarray.hxx:183
T * data() const
Obtain C-pointer of data array.
Definition: tarray.hxx:128
Header for numcxx::TArray.