🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
KernelPool.hpp
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include <unordered_map>
25#include <vector>
26#include <string>
27
28AST_NAMESPACE_BEGIN
29
48{
49public:
50 KernelData(){
51 new (&doubleData_) std::vector<double>();
52 }
53 KernelData(const std::vector<double>& doubleData)
54 {
55 new (&doubleData_) std::vector<double>(doubleData);
56 }
57 KernelData(const std::vector<int>& intData)
58 {
59 new (&intData_) std::vector<int>(intData);
60 }
61 KernelData(const std::vector<char>& charData)
62 {
63 new (&charData_) std::vector<char>(charData);
64 }
65 KernelData(const KernelData& other)
66 {
67 new (&charData_) std::vector<char>(other.charData_);
68 }
69 KernelData(KernelData&& other)
70 {
71 new (&charData_) std::vector<char>(std::move(other.charData_));
72 }
73 KernelData& operator=(const KernelData& other)
74 {
75 charData_ = other.charData_;
76 return *this;
77 }
78 KernelData& operator=(KernelData&& other)
79 {
80 charData_ = std::move(other.charData_);
81 return *this;
82 }
84 {
85 charData_.~vector<char>();
86 }
87 const std::vector<double>* getDoubleData() const {
88 if(charData_.size() == doubleData_.size() * sizeof(double))
89 return &doubleData_;
90 return nullptr;
91 }
92 const std::vector<int>* getIntData() const {
93 if(charData_.size() == intData_.size() * sizeof(int))
94 return &intData_;
95 return nullptr;
96 }
97 const std::vector<char>* getCharData() const {
98 return &charData_;
99 }
100
101 enum DataType
102 {
103 eDouble = 0,
104 eInt = 1,
105 eChar = 2,
106 };
107protected:
108 // DataType type_;
109 std::vector<double> doubleData_;
110 std::vector<int> intData_;
111 std::vector<char> charData_;
112};
113
114
117class AST_UTIL_API KernelPool
118{
119public:
120 using DataMap = std::unordered_map<std::string, KernelData>;
121 KernelPool() = default;
122 ~KernelPool() = default;
123
127 void setData(StringView name, const KernelData& data);
128
132 void setDoubleData(StringView name, const std::vector<double>& data);
133
137 void setIntData(StringView name, const std::vector<int>& data);
138
142 void setCharData(StringView name, const std::vector<char>& data);
143
144
148 const KernelData* getData(StringView name) const;
149
153 const std::vector<double>* getDoubleData(StringView name) const;
154
158 const std::vector<int>* getIntData(StringView name) const;
159
163 const std::vector<char>* getCharData(StringView name) const;
164
165 DataMap::iterator begin() { return dataMap_.begin(); }
166 DataMap::iterator end() { return dataMap_.end(); }
167 DataMap::const_iterator begin() const { return dataMap_.begin(); }
168 DataMap::const_iterator end() const { return dataMap_.end(); }
169 size_t size() const { return dataMap_.size(); }
170protected:
171 DataMap dataMap_;
172};
173
176AST_NAMESPACE_END
SPICE 内核数据池
定义 KernelPool.hpp:118
@ eDouble
double类型
定义 Property.hpp:37
@ eInt
int类型
定义 Property.hpp:38
SPICE 数据容器
定义 KernelPool.hpp:48