58 template<ElementConcept>
62 using ParentMeshType = MeshType;
73 static const uint ELEMENT_ID = ELEM_ID;
82 template<u
int COMP_ID>
85 using Comp = GetComponentFromID<COMP_ID>::type;
86 return *
static_cast<Comp*
>(
this);
89 template<u
int COMP_ID>
90 const auto& component()
const
92 using Comp = GetComponentFromID<COMP_ID>::type;
93 return *
static_cast<const Comp*
>(
this);
96 template<
typename ElType>
97 void importFrom(
const ElType& v,
bool importRefs =
true)
102 (importComponent<Comps>(v, importRefs), ...);
105 void serialize(std::ostream& out)
const
110 (serializeComponent<Comps>(out), ...);
113 void deserialize(std::istream& in)
118 (deserializeComponent<Comps>(in), ...);
125 bool isAvailable()
const {
return true; }
128 void initVerticalComponents() { (construct<Comps>(), ...); }
130 template<
typename Comp>
134 comp::IsVerticalComponent<Comp> &&
135 comp::HasInitMemberFunction<Comp>) {
136 if constexpr (comp::HasIsAvailableMemberFunction<Comp>) {
137 if (Comp::isAvailable()) {
149 template<
typename Comp,
typename ElType>
150 void importComponent(
const ElType& v,
bool importRefs)
152 if constexpr (!comp::IsOptionalComponent<Comp>) {
153 Comp::importFrom(v, importRefs);
156 if (Comp::isAvailable()) {
157 Comp::importFrom(v, importRefs);
162 template<
typename Comp>
163 void serializeComponent(std::ostream& out)
const
165 if constexpr (!comp::IsOptionalComponent<Comp>) {
166 Comp::serialize(out);
169 if (Comp::isAvailable()) {
170 Comp::serialize(out);
175 template<
typename Comp>
176 void deserializeComponent(std::istream& in)
178 if constexpr (!comp::IsOptionalComponent<Comp>) {
179 Comp::deserialize(in);
182 if (Comp::isAvailable()) {
183 Comp::deserialize(in);
195 template<u
int COMP_ID>
199 template<
typename Cont>
202 static constexpr bool value = Cont::COMPONENT_ID ==
COMP_ID;
211 template<u
int COMP_ID>