16 #include "atlas/util/Object.h" 18 #include "atlas/array/ArrayUtil.h" 19 #include "atlas/array/DataType.h" 21 #include "atlas/library/config.h" 28 #ifndef DOXYGEN_SHOULD_SKIP_THIS 29 template <
typename Value>
31 template <
typename Value>
48 virtual size_t footprint()
const = 0;
50 template <
typename Value>
52 template <
typename Value>
54 template <
typename Value>
56 template <
typename Value>
58 template <
typename Value>
61 template <
typename Value>
64 template <
typename Value>
67 template <
typename Value>
70 template <
typename Value>
73 idx_t bytes()
const {
return datatype().size() * spec().allocatedSize(); }
75 size_t size()
const {
return spec_.size(); }
77 idx_t rank()
const {
return spec_.rank(); }
79 idx_t stride(
idx_t i )
const {
return spec_.strides()[i]; }
81 idx_t shape(
idx_t i )
const {
return spec_.shape()[i]; }
83 const ArrayStrides& strides()
const {
return spec_.strides(); }
85 const ArrayShape& shape()
const {
return spec_.shape(); }
87 const std::vector<int>& shapef()
const {
return spec_.shapef(); }
89 const std::vector<int>& stridesf()
const {
return spec_.stridesf(); }
91 bool contiguous()
const {
return spec_.contiguous(); }
93 bool hasDefaultLayout()
const {
return spec_.hasDefaultLayout(); }
97 virtual void resize(
const ArrayShape& shape ) = 0;
99 virtual void resize(
idx_t size0 ) = 0;
100 virtual void resize(
idx_t size0,
idx_t size1 ) = 0;
105 virtual void insert(
idx_t idx1,
idx_t size1 ) = 0;
107 virtual void dump( std::ostream& os )
const = 0;
109 virtual bool accMap()
const = 0;
111 virtual void* storage() {
return data_store_->voidDataStore(); }
113 virtual const void* storage()
const {
return data_store_->voidDataStore(); }
115 void updateDevice()
const { data_store_->updateDevice(); }
117 void updateHost()
const { data_store_->updateHost(); }
119 bool valid()
const {
return data_store_->valid(); }
121 void syncHostDevice()
const { data_store_->syncHostDevice(); }
123 bool hostNeedsUpdate()
const {
return data_store_->hostNeedsUpdate(); }
125 bool deviceNeedsUpdate()
const {
return data_store_->deviceNeedsUpdate(); }
127 void reactivateDeviceWriteViews()
const { data_store_->reactivateDeviceWriteViews(); }
129 void reactivateHostWriteViews()
const { data_store_->reactivateHostWriteViews(); }
131 const ArraySpec& spec()
const {
return spec_; }
134 template <
typename DATATYPE>
135 DATATYPE
const* host_data()
const {
136 return data_store_->hostData<DATATYPE>();
138 template <
typename DATATYPE>
139 DATATYPE* host_data() {
140 return data_store_->hostData<DATATYPE>();
142 template <
typename DATATYPE>
143 DATATYPE
const* device_data()
const {
144 return data_store_->deviceData<DATATYPE>();
146 template <
typename DATATYPE>
147 DATATYPE* device_data() {
148 return data_store_->deviceData<DATATYPE>();
150 template <
typename DATATYPE>
151 DATATYPE
const* data()
const {
152 return data_store_->hostData<DATATYPE>();
154 template <
typename DATATYPE>
156 return data_store_->hostData<DATATYPE>();
158 void const* data()
const {
return data<void>(); }
159 void* data() {
return data<void>(); }
166 std::unique_ptr<ArrayDataStore> data_store_;
168 void replace(
Array& array ) {
169 data_store_.swap( array.data_store_ );
176 template <
typename Value>
193 virtual void insert(
idx_t idx1,
idx_t size1 );
197 virtual void resize(
idx_t size0 );
198 virtual void resize(
idx_t size0,
idx_t size1 );
203 virtual array::DataType datatype()
const {
return array::DataType::create<Value>(); }
205 virtual void dump( std::ostream& os )
const;
211 virtual size_t footprint()
const;
213 virtual bool accMap()
const;
216 template <
typename T>
218 mutable bool acc_map_{
false};
Definition: ArrayShape.h:33
Definition: ArraySpec.h:27
Definition: ArrayShape.h:23
Definition: ArrayStrides.h:23
Definition: ArrayUtil.h:46
Definition: DataType.h:40
Forward declarations of public API header atlas/array.h.
Contains all atlas classes and methods.
Definition: atlas-grids.cc:33
long idx_t
Integer type for indices in connectivity tables.
Definition: config.h:42
Definition: ArrayLayout.h:22