PPerm

template<size_t N = 0, typename Scalar = std::conditional_t<N == 0, uint32_t, typename SmallestInteger<N>::type>>
class PPerm : public PTransf<0, std::conditional_t<0 == 0, uint32_t, typename SmallestInteger<0>::type>>

Defined in transf.hpp.

A partial permutation \(f\) is just an injective partial transformation, which is stored as a vector of the images of \(\{0, 1, \ldots, n - 1\}\), i.e. i.e. \(\{(0)f, (1)f, \ldots, (n - 1)f\}\) where the value UNDEFINED is used to indicate that \((i)f\) is undefined (i.e. not among the points where \(f\) is defined).

If N is 0 (the default), then the degree of a PPerm instance can be defined at runtime, and if N is not 0, then the degree is fixed at compile time.

If N is 0, then the default value of Scalar is uint32_t. If N is not 0, then the default value of Scalar is the smallest integer type able to hold N. See also SmallestInteger.

Note

PPerm has the same member functions as StaticPTransf and DynamicPTransf, this isn’t current reflected by the contents of this page.

Template Parameters:
  • N – the degree (default: 0)

  • Scalar – an unsigned integer type (the type of the image values)

Member types

container_type

value_type

Constructors

PPerm(std::initializer_list<value_type>, std::initializer_list<value_type>, size_t)

PPerm(std::vector<value_type> const&, std::vector<value_type> const&, size_t)

Static member functions

identity() const

identity(size_t)

make(T&&)

make(std::initializer_list<value_type>&&)

make(std::vector<value_type> const&, std::vector<value_type> const&, size_t const)

Member functions

inverse() const

inverse(PPerm&) const

left_one() const

product_inplace(PPerm const&, PPerm const&)

right_one() const