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)};
}
static cyclic from_repr(Repr const & value)
{
return rotation(value);
}
template <typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
static cyclic rotation(T const & value)
{
@ -126,4 +131,18 @@ namespace psemek::group
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
{
return repr_;
@ -179,4 +184,18 @@ namespace psemek::group
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);
}
}