60 inline std::string
serialize()
override {
return "Unknown"; }
61 inline bool deserialize(
const std::string& str)
override {
return false; }
75 if (derived ==
nullptr)
return false;
81 assert(dataPtr !=
nullptr);
88 FieldType* derived =
dynamic_cast<FieldType*
>(topField);
96 FieldType* derived =
dynamic_cast<FieldType*
>(topField);
100 std::shared_ptr<DataType>
m_data =
nullptr;
118 std::shared_ptr<T>& data = this->
getDataPtr();
121 data = std::make_shared<T>(val);
153 template<
typename T, DeviceType deviceType>
166 auto ref = this->constDataPtr();
167 return ref ==
nullptr ? 0 : ref->size();
183 return this->
size() == 0;
187 template<
typename T, DeviceType deviceType>
190 if (m_data.use_count() == 1)
196 template<
typename T, DeviceType deviceType>
199 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
200 if (data ==
nullptr) {
201 data = std::make_shared<Array<T, deviceType>>();
207 template<
typename T, DeviceType deviceType>
210 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
213 data = std::make_shared<Array<T, deviceType>>();
219 template<
typename T, DeviceType deviceType>
222 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
225 data = std::make_shared<Array<T, deviceType>>();
231 template<
typename T, DeviceType deviceType>
234 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
237 data = std::make_shared<Array<T, deviceType>>();
244 template<
typename T, DeviceType deviceType>
247 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
250 data = std::make_shared<Array<T, deviceType>>();
257 template<
typename T, DeviceType deviceType>
260 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
263 data = std::make_shared<Array<T, deviceType>>();
269 template<
typename T, DeviceType deviceType>
272 std::shared_ptr<Array<T, deviceType>>& data = this->getDataPtr();
275 data = std::make_shared<Array<T, deviceType>>();
290 template<
typename T, DeviceType deviceType>
303 auto ref = this->constDataPtr();
304 return ref ==
nullptr ? 0 : ref->size();
317 return this->constDataPtr() ==
nullptr;
321 template<
typename T, DeviceType deviceType>
324 if (m_data.use_count() == 1)
330 template<
typename T, DeviceType deviceType>
333 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
336 data = std::make_shared<Array2D<T, deviceType>>();
342 template<
typename T, DeviceType deviceType>
345 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
348 data = std::make_shared<Array2D<T, deviceType>>();
354 template<
typename T, DeviceType deviceType>
357 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
360 data = std::make_shared<Array2D<T, deviceType>>();
366 template<
typename T, DeviceType deviceType>
369 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
372 data = std::make_shared<Array2D<T, deviceType>>();
378 template<
typename T, DeviceType deviceType>
381 std::shared_ptr<Array2D<T, deviceType>>& data = this->getDataPtr();
383 if (data ==
nullptr) {
384 data = std::make_shared<Array2D<T, deviceType>>();
387 data->resize(nx, ny);
393 template<
typename T, DeviceType deviceType>
406 auto ref = this->constDataPtr();
407 return ref ==
nullptr ? 0 : ref->size();
420 return this->constDataPtr() ==
nullptr;
424 template<
typename T, DeviceType deviceType>
427 if (m_data.use_count() == 1)
433 template<
typename T, DeviceType deviceType>
436 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
439 data = std::make_shared<Array3D<T, deviceType>>();
444 template<
typename T, DeviceType deviceType>
447 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
450 data = std::make_shared<Array3D<T, deviceType>>();
455 template<
typename T, DeviceType deviceType>
458 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
461 data = std::make_shared<Array3D<T, deviceType>>();
466 template<
typename T, DeviceType deviceType>
469 std::shared_ptr<FArray3D<T, deviceType>>& data = this->getDataPtr();
472 data = std::make_shared<FArray3D<T, deviceType>>();
478 template<
typename T, DeviceType deviceType>
481 std::shared_ptr<Array3D<T, deviceType>>& data = this->getDataPtr();
484 data = std::make_shared<Array3D<T, deviceType>>();
486 data->resize(nx, ny, nz);
493 template<
typename T, DeviceType deviceType>
494 class FArrayList :
public FBase
499 typedef FArrayList<T, deviceType> FieldType;
503 ~FArrayList()
override;
505 inline uint size()
override {
506 auto ref = this->constDataPtr();
507 return ref ==
nullptr ? 0 : ref->size();
510 void resize(
uint num);
512 void resize(
const Array<int, deviceType>& arr);
516 void assign(
const ArrayList<T, DeviceType::CPU>& src);
517 void assign(
const ArrayList<T, DeviceType::GPU>& src);
519 bool isEmpty()
override {
520 return this->constDataPtr() ==
nullptr;
524 template<
typename T, DeviceType deviceType>
525 FArrayList<T, deviceType>::~FArrayList()
527 if (m_data.use_count() == 1)
533 template<
typename T, DeviceType deviceType>
536 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
539 data = std::make_shared<ArrayList<T, deviceType>>();
544 template<
typename T, DeviceType deviceType>
547 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
550 data = std::make_shared<ArrayList<T, deviceType>>();
555 template<
typename T, DeviceType deviceType>
556 void FArrayList<T, deviceType>::resize(
uint num)
558 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
561 data = std::make_shared<ArrayList<T, deviceType>>();
566 template<
typename T, DeviceType deviceType>
569 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
572 data = std::make_shared<ArrayList<T, deviceType>>();
577 template<
typename T, DeviceType deviceType>
578 void FArrayList<T, deviceType>::clear()
580 std::shared_ptr<ArrayList<T, deviceType>>& data = this->getDataPtr();
583 data = std::make_shared<ArrayList<T, deviceType>>();
667 template<
typename T, DeviceType deviceType>
668 class FArrayList :
public FBase
672 typedef ArrayList<T, deviceType>
DataType;
673 typedef FArrayList<T, deviceType> FieldType;
677 inline uint size()
override {
678 auto ref = this->constDataPtr();
679 return ref ==
nullptr ? 0 : ref->size();
689 bool isEmpty()
override {
690 return this->constDataPtr() ==
nullptr;