codac 2.0.0
Loading...
Searching...
No Matches
codac2_Collection.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#include <type_traits>
13#include <cassert>
14#include <list>
15#include <memory>
16
17namespace codac2
18{
19 template<typename T>
20 class Collection : public std::list<std::shared_ptr<T>>
21 {
22 public:
23
24 Collection()
25 { }
26
27 template<typename... T_>
28 requires ((!std::is_same_v<Collection<T>,T_>) && ...)
29 Collection(const T_&... x)
30 {
31 (this->push_back(x), ...);
32 }
33
34 Collection(std::initializer_list<std::shared_ptr<T>> init)
35 : std::list<std::shared_ptr<T>>(init)
36 { }
37
38 Collection(const Collection<T>& c)
39 : std::list<std::shared_ptr<T>>()
40 {
41 for(const auto& ci : c)
42 {
43 assert(ci);
44 this->push_back(std::dynamic_pointer_cast<T>(ci->copy()));
45 }
46 }
47
48 template<typename T_>
49 requires std::is_base_of_v<T,T_>
50 void push_back(const T_& x)
51 {
52 this->push_back(std::make_shared<T_>(x));
53 }
54
55 template<typename T_>
56 requires std::is_base_of_v<T,T_>
57 void push_back(const std::shared_ptr<T_>& x)
58 {
59 this->std::list<std::shared_ptr<T>>::push_back(x);
60 }
61 };
62}
auto & init()
Initializes all elements of the matrix with default intervals.
Definition codac2_Matrix_addons_IntervalMatrixBase.h:113
Definition codac2_OctaSym.h:21