25 Attribute() =
default;
27 Attribute(
const Attribute& other) =
default;
28 Attribute(Attribute&& other) =
default;
29 Attribute& operator=(
const Attribute& other) =
default;
31 Attribute(std::shared_ptr<ArrayBase> values)
32 : m_values(std::move(values))
35 template <
typename Derived>
36 Attribute(
const Eigen::MatrixBase<Derived>& values)
41 template <
typename Derived>
42 Attribute(Eigen::MatrixBase<Derived>&& values)
44 this->set(std::move(values));
48 std::shared_ptr<const ArrayBase> get()
const {
return m_values; }
49 std::shared_ptr<ArrayBase> get() {
return m_values; }
51 template <
typename Derived>
52 decltype(
auto) get()
const
55 const auto& values = *m_values;
56 return values.get<Derived>();
59 template <
typename Derived>
63 return m_values->get<Derived>();
66 template <
typename Derived>
67 decltype(
auto) view()
const
70 const auto& values = *m_values;
71 return values.view<Derived>();
74 template <
typename Derived>
78 return m_values->view<Derived>();
81 template <
typename Derived>
82 void set(
const Eigen::MatrixBase<Derived>& values)
84 if (m_values ==
nullptr) {
85 m_values = create_array(values.derived());
87 m_values->set(values.derived());
91 template <
typename Derived>
92 void set(Eigen::MatrixBase<Derived>&& values)
95 void* ptr = values.derived().data();
97 if (m_values ==
nullptr) {
98 m_values = create_array(std::move(values.derived()));
100 m_values->set(std::move(values.derived()));
103 void* ptr2 = m_values->data();
106 "Attribute values are copied when they should have been moved. "
107 "Likely caused by inexact match of `Derived` type.");
112 template <
typename Derived>
113 void set(
const Eigen::ArrayBase<Derived>& values)
115 set(values.matrix());
118 template <
typename Derived>
119 void set(Eigen::ArrayBase<Derived>&& values)
121 set(std::move(values.matrix()));
124 void set(std::shared_ptr<ArrayBase> values) { m_values = std::move(values); }
126 template <
typename Archive>
127 void serialize_impl(Archive& ar)
133 std::shared_ptr<ArrayBase> m_values;