🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ValArray.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstScript/Value.hpp"
25
26AST_NAMESPACE_BEGIN
27
28
33template<typename T, size_t NDIM>
34class ValArray: public Value
35{
36public:
37 // AST_EXPR(ValArray)
38 ValArray();
39
40 ~ValArray();
41
44 void resize(size_t size);
45
48 size_t column() const { return dims_[0]; }
49
52 size_t row() const { return dims_[1]; }
53
56 size_t page() const { return dims_[2]; }
57
60 size_t size() const;
61
65 T at(size_t index) const { return data_[index]; }
66
70 T& at(size_t index) { return data_[index]; }
71
72protected:
73 size_t dims_[NDIM];
74 T* data_{nullptr};
75};
76
77
78template<typename T, size_t NDIM>
79ValArray<T, NDIM>::ValArray()
80{
81}
82
83
84template<typename T, size_t NDIM>
85ValArray<T, NDIM>::~ValArray()
86{
87 if(data_)
88 delete[] data_;
89}
90
91template<typename T, size_t NDIM>
93{
94 size_t old_size = this->size();
95 // 判断是否需要扩充数组大小
96 if(old_size >= size)
97 {
98 T* old_data = data_;
99 data_ = new T[size];
100 if(old_data)
101 {
102 size_t copy_size = old_size < size ? old_size : size;
103 for(size_t i = 0; i < copy_size; ++i)
104 data_[i] = old_data[i];
105 delete[] old_data;
106 }
107 }
108 dims_[0] = size;
109 for(size_t i = 1; i < NDIM; ++i)
110 dims_[i] = 1;
111}
112
113template <typename T, size_t NDIM>
114inline size_t ValArray<T, NDIM>::size() const
115{
116 size_t size = 1;
117 for (size_t i = 0; i < NDIM; ++i)
118 {
119 size *= dims_[i];
120 }
121 return size;
122}
123
124
125AST_NAMESPACE_END
126
数组值类
定义 ValArray.hpp:35
size_t page() const
获取数组页数
定义 ValArray.hpp:56
size_t size() const
获取数组元素数量
定义 ValArray.hpp:114
void resize(size_t size)
重新调整数组大小
定义 ValArray.hpp:92
size_t column() const
获取数组列数
定义 ValArray.hpp:48
size_t row() const
获取数组行数
定义 ValArray.hpp:52
T & at(size_t index)
获取数组元素
定义 ValArray.hpp:70
T at(size_t index) const
获取数组元素
定义 ValArray.hpp:65
值对象基类
定义 Value.hpp:43