Add cyclic & dihedral group serialization

This commit is contained in:
Nikita Lisitsa 2023-05-29 13:04:43 +03:00
parent 0791aa1096
commit b5cea86b46
2 changed files with 38 additions and 0 deletions

View file

@ -33,6 +33,11 @@ namespace psemek::group
return cyclic{value % static_cast<Repr>(N)}; return cyclic{value % static_cast<Repr>(N)};
} }
static cyclic from_repr(Repr const & value)
{
return rotation(value);
}
template <typename T, typename = std::enable_if_t<std::is_integral_v<T>>> template <typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
static cyclic rotation(T const & value) static cyclic rotation(T const & value)
{ {
@ -126,4 +131,18 @@ namespace psemek::group
return os; return os;
} }
template <typename OStream, std::size_t N, typename Repr>
void write(OStream & out, cyclic<N, Repr> const & g)
{
write(out, g.value());
}
template <typename IStream, std::size_t N, typename Repr>
void read(IStream & in, cyclic<N, Repr> & g)
{
Repr value;
read(in, value);
g = cyclic<N, Repr>::from_repr(value);
}
} }

View file

@ -67,6 +67,11 @@ namespace psemek::group
} }
} }
static dihedral from_repr(Repr const & repr)
{
return dihedral{repr % static_cast<Repr>(2 * N)};
}
Repr value() const Repr value() const
{ {
return repr_; return repr_;
@ -179,4 +184,18 @@ namespace psemek::group
return os; return os;
} }
template <typename OStream, std::size_t N, typename Repr>
void write(OStream & out, dihedral<N, Repr> const & g)
{
write(out, g.value());
}
template <typename IStream, std::size_t N, typename Repr>
void read(IStream & in, dihedral<N, Repr> & g)
{
Repr value;
read(in, value);
g = dihedral<N, Repr>::from_repr(value);
}
} }