Add cyclic & dihedral group serialization
This commit is contained in:
parent
0791aa1096
commit
b5cea86b46
2 changed files with 38 additions and 0 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue