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)};
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue