55 inline std::string
serialize()
override {
return "Unknown"; }
56 inline bool deserialize(
const std::string& str)
override {
return false; }
70 if (derived ==
nullptr)
return false;
76 assert(dataPtr !=
nullptr);
83 FieldType* derived =
dynamic_cast<FieldType*
>(topField);
91 FieldType* derived =
dynamic_cast<FieldType*
>(topField);
95 std::shared_ptr<DataType>
m_data =
nullptr;
113 std::shared_ptr<T>& data = this->
getDataPtr();
116 data = std::make_shared<T>(val);
147 template<
typename T, DeviceType deviceType>
160 auto ref = this->constDataPtr();
161 return ref ==
nullptr ? 0 : ref->size();
177 return this->
size() == 0;
181 template<
typename T, DeviceType deviceType>
184 if (m_data.use_count() == 1)
190 template<
typename T, DeviceType deviceType>
193 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
194 if (data ==
nullptr) {
195 data = std::make_shared<Array<T, deviceType>>();
201 template<
typename T, DeviceType deviceType>
204 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
207 data = std::make_shared<Array<T, deviceType>>();
213 template<
typename T, DeviceType deviceType>
216 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
219 data = std::make_shared<Array<T, deviceType>>();
225 template<
typename T, DeviceType deviceType>
228 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
231 data = std::make_shared<Array<T, deviceType>>();
238 template<
typename T, DeviceType deviceType>
241 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
244 data = std::make_shared<Array<T, deviceType>>();
251 template<
typename T, DeviceType deviceType>
254 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
257 data = std::make_shared<Array<T, deviceType>>();
263 template<
typename T, DeviceType deviceType>
266 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
269 data = std::make_shared<Array<T, deviceType>>();
284 template<
typename T, DeviceType deviceType>
297 auto ref = this->constDataPtr();
298 return ref ==
nullptr ? 0 : ref->size();
311 return this->constDataPtr() ==
nullptr;
315 template<
typename T, DeviceType deviceType>
318 if (m_data.use_count() == 1)
324 template<
typename T, DeviceType deviceType>
327 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
330 data = std::make_shared<Array2D<T, deviceType>>();
336 template<
typename T, DeviceType deviceType>
339 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
342 data = std::make_shared<Array2D<T, deviceType>>();
348 template<
typename T, DeviceType deviceType>
351 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
354 data = std::make_shared<Array2D<T, deviceType>>();
360 template<
typename T, DeviceType deviceType>
363 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
366 data = std::make_shared<Array2D<T, deviceType>>();
372 template<
typename T, DeviceType deviceType>
375 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
377 if (data ==
nullptr) {
378 data = std::make_shared<Array2D<T, deviceType>>();
381 data->resize(nx, ny);
387 template<
typename T, DeviceType deviceType>
400 auto ref = this->constDataPtr();
401 return ref ==
nullptr ? 0 : ref->size();
414 return this->constDataPtr() ==
nullptr;
418 template<
typename T, DeviceType deviceType>
421 if (m_data.use_count() == 1)
427 template<
typename T, DeviceType deviceType>
430 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
433 data = std::make_shared<Array3D<T, deviceType>>();
438 template<
typename T, DeviceType deviceType>
441 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
444 data = std::make_shared<Array3D<T, deviceType>>();
449 template<
typename T, DeviceType deviceType>
452 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
455 data = std::make_shared<Array3D<T, deviceType>>();
460 template<
typename T, DeviceType deviceType>
463 std::shared_ptr<FArray3D<T, deviceType>>& data = this->getDataPtr();
466 data = std::make_shared<FArray3D<T, deviceType>>();
472 template<
typename T, DeviceType deviceType>
475 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
478 data = std::make_shared<Array3D<T, deviceType>>();
480 data->resize(nx, ny, nz);
487 template<
typename T, DeviceType deviceType>
488 class FArrayList :
public FBase
493 typedef FArrayList<T, deviceType> FieldType;
497 ~FArrayList()
override;
499 inline uint size()
override {
500 auto ref = this->constDataPtr();
501 return ref ==
nullptr ? 0 : ref->size();
504 void resize(
uint num);
506 void resize(
const Array<int, deviceType>& arr);
510 void assign(
const ArrayList<T, DeviceType::CPU>& src);
511 void assign(
const ArrayList<T, DeviceType::GPU>& src);
513 bool isEmpty()
override {
514 return this->constDataPtr() ==
nullptr;
518 template<
typename T, DeviceType deviceType>
519 FArrayList<T, deviceType>::~FArrayList()
521 if (m_data.use_count() == 1)
527 template<
typename T, DeviceType deviceType>
530 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
533 data = std::make_shared<ArrayList<T, deviceType>>();
538 template<
typename T, DeviceType deviceType>
541 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
544 data = std::make_shared<ArrayList<T, deviceType>>();
549 template<
typename T, DeviceType deviceType>
550 void FArrayList<T, deviceType>::resize(
uint num)
552 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
555 data = std::make_shared<ArrayList<T, deviceType>>();
560 template<
typename T, DeviceType deviceType>
563 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
566 data = std::make_shared<ArrayList<T, deviceType>>();
571 template<
typename T, DeviceType deviceType>
572 void FArrayList<T, deviceType>::clear()
574 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
577 data = std::make_shared<ArrayList<T, deviceType>>();
661 template<
typename T, DeviceType deviceType>
662 class FArrayList :
public FBase
666 typedef ArrayList<T, deviceType>
DataType;
667 typedef FArrayList<T, deviceType> FieldType;
671 inline uint size()
override {
672 auto ref = this->constDataPtr();
673 return ref ==
nullptr ? 0 : ref->size();
683 bool isEmpty()
override {
684 return this->constDataPtr() ==
nullptr;