76 template<ElementConcept>
80 using ParentMeshType = MeshType;
88 static const uint ELEMENT_ID = ELEM_ID;
97 template<u
int COMP_ID>
100 using Comp = GetComponentFromID<COMP_ID>::type;
101 return *
static_cast<Comp*
>(
this);
104 template<u
int COMP_ID>
105 const auto& component()
const
107 using Comp = GetComponentFromID<COMP_ID>::type;
108 return *
static_cast<const Comp*
>(
this);
111 template<
typename ElType>
112 void importFrom(
const ElType& v,
bool importRefs =
true)
117 (importComponent<Comps>(v, importRefs), ...);
120 void serialize(std::ostream& out)
const
125 (serializeComponent<Comps>(out), ...);
128 void deserialize(std::istream& in)
133 (deserializeComponent<Comps>(in), ...);
140 bool isAvailable()
const {
return true; }
143 void initVerticalComponents() { (construct<Comps>(), ...); }
145 template<
typename Comp>
149 comp::IsVerticalComponent<Comp> &&
150 comp::HasInitMemberFunction<Comp>) {
151 if constexpr (comp::HasIsAvailableMemberFunction<Comp>) {
152 if (Comp::isAvailable()) {
164 template<
typename Comp,
typename ElType>
165 void importComponent(
const ElType& v,
bool importRefs)
167 if constexpr (!comp::IsOptionalComponent<Comp>) {
168 Comp::importFrom(v, importRefs);
171 if (Comp::isAvailable()) {
172 Comp::importFrom(v, importRefs);
177 template<
typename Comp>
178 void serializeComponent(std::ostream& out)
const
180 if constexpr (!comp::IsOptionalComponent<Comp>) {
181 Comp::serialize(out);
184 if (Comp::isAvailable()) {
185 Comp::serialize(out);
190 template<
typename Comp>
191 void deserializeComponent(std::istream& in)
193 if constexpr (!comp::IsOptionalComponent<Comp>) {
194 Comp::deserialize(in);
197 if (Comp::isAvailable()) {
198 Comp::deserialize(in);
210 template<u
int COMP_ID>
214 template<
typename Cont>
217 static constexpr bool value = Cont::COMPONENT_ID ==
COMP_ID;
226 template<u
int COMP_ID>