17#ifndef MATRIX_FIELD_Z2_H_
18#define MATRIX_FIELD_Z2_H_
36 using isInteger = std::enable_if_t<std::is_integral_v<T> >;
49 template <
typename Integer_type,
class = isInteger<Integer_type> >
74 f1.element_ = (f1.element_ != f2.element_);
91 template <
typename Integer_type,
class = isInteger<Integer_type> >
94 f.element_ = (f.element_ != _get_value(v));
102 template <
typename Integer_type,
class = isInteger<Integer_type> >
114 template <
typename Integer_type,
class = isInteger<Integer_type> >
117 return f.element_ != _get_value(v);
125 f1.element_ = (f1.element_ != f2.element_);
142 template <
typename Integer_type,
class = isInteger<Integer_type> >
145 f.element_ = (f.element_ != _get_value(v));
153 template <
typename Integer_type,
class = isInteger<Integer_type> >
165 template <
typename Integer_type,
class = isInteger<Integer_type> >
168 return f.element_ != _get_value(v);
176 f1.element_ = (f1.element_ && f2.element_);
193 template <
typename Integer_type,
class = isInteger<Integer_type> >
196 f.element_ = (f.element_ && _get_value(v));
204 template <
typename Integer_type,
class = isInteger<Integer_type> >
216 template <
typename Integer_type,
class = isInteger<Integer_type> >
219 return f.element_ && _get_value(v);
232 template <
typename Integer_type,
class = isInteger<Integer_type> >
235 return _get_value(v) == f.element_;
243 template <
typename Integer_type,
class = isInteger<Integer_type> >
246 return _get_value(v) == f.element_;
259 template <
typename Integer_type,
class = isInteger<Integer_type> >
270 template <
typename Integer_type,
class = isInteger<Integer_type> >
281 std::swap(element_, other.element_);
290 if (
this == &other)
return *
this;
292 element_ = std::exchange(other.element_,
false);
299 template <
typename Integer_type,
class = isInteger<Integer_type> >
302 element_ = _get_value(value);
314 operator unsigned int()
const {
return static_cast<unsigned int>(element_); }
330 unsigned int productOfCharacteristics)
const
377 template <
typename Integer_type,
class = isInteger<Integer_type> >
378 static constexpr Element _get_value(Integer_type e)
380 if constexpr (std::is_same_v<Integer_type, bool>) {
383 return e < 2 && e >= 0 ? e : e % 2;
Class representing an element of the field.
Definition Z2_field.h:32
static constexpr unsigned int get_characteristic()
Returns the characteristic of the field, that is 2.
Definition Z2_field.h:365
friend Z2_field_element operator-(Z2_field_element f1, Z2_field_element const &f2)
operator-
Definition Z2_field.h:131
Z2_field_element(Integer_type element)
Constructor setting the element to the given value.
Definition Z2_field.h:50
friend Z2_field_element operator+(Z2_field_element f1, Z2_field_element const &f2)
operator+
Definition Z2_field.h:80
friend Integer_type operator*(const Integer_type &v, Z2_field_element const &f)
operator*
Definition Z2_field.h:217
friend void operator+=(Z2_field_element &f1, Z2_field_element const &f2)
operator+=
Definition Z2_field.h:72
std::pair< Z2_field_element, unsigned int > get_partial_inverse(unsigned int productOfCharacteristics) const
For interface purposes with multi-fields. Returns the inverse together with the second argument.
Definition Z2_field.h:329
friend Z2_field_element operator-(Z2_field_element f, const Integer_type &v)
operator-
Definition Z2_field.h:154
friend void operator+=(Z2_field_element &f, const Integer_type &v)
operator+=
Definition Z2_field.h:92
Z2_field_element & operator=(Z2_field_element &&other) noexcept
Move assign operator.
Definition Z2_field.h:288
friend bool operator==(const Z2_field_element &f, const Integer_type &v)
operator==
Definition Z2_field.h:244
friend Integer_type operator+(const Integer_type &v, const Z2_field_element &f)
operator+
Definition Z2_field.h:115
friend Integer_type operator-(const Integer_type v, Z2_field_element const &f)
operator-
Definition Z2_field.h:166
friend void operator-=(Z2_field_element &f1, Z2_field_element const &f2)
operator-=
Definition Z2_field.h:123
friend bool operator!=(const Integer_type v, const Z2_field_element &f)
operator!=
Definition Z2_field.h:260
Element get_value() const
Returns the value of the element.
Definition Z2_field.h:372
Z2_field_element get_inverse() const
Returns the inverse of the element.
Definition Z2_field.h:321
Z2_field_element()
Default constructor.
Definition Z2_field.h:41
friend Z2_field_element operator*(Z2_field_element f1, Z2_field_element const &f2)
operator*
Definition Z2_field.h:182
friend bool operator==(const Z2_field_element &f1, const Z2_field_element &f2)
operator==
Definition Z2_field.h:225
static Z2_field_element get_multiplicative_identity()
Returns the multiplicative identity of the field.
Definition Z2_field.h:347
friend bool operator==(const Integer_type &v, const Z2_field_element &f)
operator==
Definition Z2_field.h:233
friend Z2_field_element operator+(Z2_field_element f, const Integer_type &v)
operator+
Definition Z2_field.h:103
friend void operator*=(Z2_field_element &f1, Z2_field_element const &f2)
operator*=
Definition Z2_field.h:174
static Z2_field_element get_additive_identity()
Returns the additive identity of the field.
Definition Z2_field.h:340
friend Z2_field_element operator*(Z2_field_element f, const Integer_type &v)
operator*
Definition Z2_field.h:205
Z2_field_element & operator=(Z2_field_element other)
Assign operator.
Definition Z2_field.h:279
friend void operator*=(Z2_field_element &f, const Integer_type &v)
operator*=
Definition Z2_field.h:194
static Z2_field_element get_partial_multiplicative_identity(unsigned int productOfCharacteristics)
For interface purposes with multi-fields. Returns the multiplicative identity of the field.
Definition Z2_field.h:355
friend void swap(Z2_field_element &f1, Z2_field_element &f2) noexcept
Swap operator.
Definition Z2_field.h:309
Z2_field_element & operator=(const Integer_type value)
Assign operator.
Definition Z2_field.h:300
friend void operator-=(Z2_field_element &f, const Integer_type &v)
operator-=
Definition Z2_field.h:143
Z2_field_element(const Z2_field_element &toCopy)=default
Copy constructor.
friend bool operator!=(const Z2_field_element &f1, const Z2_field_element &f2)
operator!=
Definition Z2_field.h:252
bool Element
Definition Z2_field.h:34
Z2_field_element(Z2_field_element &&toMove) noexcept
Move constructor.
Definition Z2_field.h:65
friend bool operator!=(const Z2_field_element &f, const Integer_type v)
operator!=
Definition Z2_field.h:271
Field namespace.
Definition Intro_field_elements_and_operators.h:16
Gudhi namespace.
Definition SimplicialComplexForAlpha.h:14