ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
NDArray< DataType > Struct Template Reference

#include <ERF_NCWpsFile.H>

Collaboration diagram for NDArray< DataType >:

Public Types

using DType = typename std::remove_const< DataType >::type
 

Public Member Functions

 NDArray (const std::string vname, const std::vector< size_t > &vshape)
 
 NDArray ()
 
 NDArray (const NDArray &array)
 
NDArrayoperator= (const NDArray &array)
 
 ~NDArray ()
 
decltype(auto) get_data ()
 
std::string get_vname ()
 
std::vector< size_t > get_vshape ()
 
size_t ndim ()
 
void set_vshape (std::vector< size_t > vshape)
 

Private Attributes

std::string name
 
std::vector< size_t > shape
 
std::atomic< size_t > ref_counted
 
bool owned
 
DTypedata
 

Member Typedef Documentation

◆ DType

template<typename DataType >
using NDArray< DataType >::DType = typename std::remove_const<DataType>::type

Constructor & Destructor Documentation

◆ NDArray() [1/3]

template<typename DataType >
NDArray< DataType >::NDArray ( const std::string  vname,
const std::vector< size_t > &  vshape 
)
inlineexplicit
55  : name{vname}, shape{vshape}, ref_counted{1}, owned{true} {
56  data = new DType [this->ndim()];
57  }
bool owned
Definition: ERF_NCWpsFile.H:120
std::string name
Definition: ERF_NCWpsFile.H:117
size_t ndim()
Definition: ERF_NCWpsFile.H:104
std::atomic< size_t > ref_counted
Definition: ERF_NCWpsFile.H:119
typename std::remove_const< DataType >::type DType
Definition: ERF_NCWpsFile.H:51
std::vector< size_t > shape
Definition: ERF_NCWpsFile.H:118
DType * data
Definition: ERF_NCWpsFile.H:121
Here is the call graph for this function:

◆ NDArray() [2/3]

template<typename DataType >
NDArray< DataType >::NDArray ( )
inline
60 : name{"null"}, ref_counted{1}, owned{false}, data{nullptr} {}

◆ NDArray() [3/3]

template<typename DataType >
NDArray< DataType >::NDArray ( const NDArray< DataType > &  array)
inline
63  {
64  name = array.name;
65  shape = array.shape;
66  data = array.data;
67  owned = false;
68  ref_counted.fetch_add(1, std::memory_order_relaxed);
69  }

◆ ~NDArray()

template<typename DataType >
NDArray< DataType >::~NDArray ( )
inline
82  {
83  ref_counted.fetch_sub(1, std::memory_order_acq_rel);
84  if (ref_counted == 1 && owned) delete[] data;
85  }

Member Function Documentation

◆ get_data()

template<typename DataType >
decltype(auto) NDArray< DataType >::get_data ( )
inline
88  {
89  ref_counted.fetch_add(1, std::memory_order_relaxed);
90  return data;
91  }

◆ get_vname()

template<typename DataType >
std::string NDArray< DataType >::get_vname ( )
inline
94  {
95  return name;
96  }

◆ get_vshape()

template<typename DataType >
std::vector<size_t> NDArray< DataType >::get_vshape ( )
inline
99  {
100  return shape;
101  }

◆ ndim()

template<typename DataType >
size_t NDArray< DataType >::ndim ( )
inline
104  {
105  size_t num = 1;
106  int isize = static_cast<int>(shape.size());
107  for (auto i=0; i<isize; ++i) num *= shape[i];
108  return num;
109  }
@ num
Definition: ERF_DataStruct.H:22

Referenced by NDArray< DataType >::NDArray().

Here is the caller graph for this function:

◆ operator=()

template<typename DataType >
NDArray& NDArray< DataType >::operator= ( const NDArray< DataType > &  array)
inline
72  {
73  name = array.name;
74  shape = array.shape;
75  data = array.data;
76  owned = false;
77  ref_counted.fetch_add(1, std::memory_order_relaxed);
78  return *this;
79  }

◆ set_vshape()

template<typename DataType >
void NDArray< DataType >::set_vshape ( std::vector< size_t >  vshape)
inline
112  {
113  shape = vshape;
114  }

Member Data Documentation

◆ data

◆ name

template<typename DataType >
std::string NDArray< DataType >::name
private

◆ owned

template<typename DataType >
bool NDArray< DataType >::owned
private

◆ ref_counted

template<typename DataType >
std::atomic<size_t> NDArray< DataType >::ref_counted
mutableprivate

◆ shape


The documentation for this struct was generated from the following file: