26 #ifndef CRYPTO3_ALGEBRA_FIELDS_ELEMENT_OPERATIONS_HPP
27 #define CRYPTO3_ALGEBRA_FIELDS_ELEMENT_OPERATIONS_HPP
36 template<
typename FieldElement,
typename Integral,
37 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
38 std::is_constructible<FieldElement, Integral>::value>::type>
39 constexpr FieldElement
operator+(
const FieldElement &A, Integral B) {
40 return A + FieldElement(B);
43 template<
typename FieldElement,
typename Integral,
44 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
45 std::is_constructible<FieldElement, Integral>::value>::type>
46 constexpr FieldElement
operator-(
const FieldElement &A, Integral B) {
47 return A - FieldElement(B);
50 template<
typename FieldElement,
typename Integral,
51 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
52 std::is_constructible<FieldElement, Integral>::value>::type>
53 constexpr FieldElement
operator*(
const FieldElement &A, Integral B) {
54 return A * FieldElement(B);
57 template<
typename FieldElement,
typename Integral,
58 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
59 std::is_constructible<FieldElement, Integral>::value>::type>
60 constexpr FieldElement
operator/(
const FieldElement &A, Integral B) {
62 return A / FieldElement(B);
65 template<
typename FieldElement,
typename Integral,
66 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
67 std::is_constructible<FieldElement, Integral>::value>::type>
68 constexpr FieldElement
operator+(Integral A,
const FieldElement &B) {
69 return FieldElement(A) + B;
72 template<
typename FieldElement,
typename Integral,
73 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
74 std::is_constructible<FieldElement, Integral>::value>::type>
75 constexpr FieldElement
operator-(Integral A,
const FieldElement &B) {
76 return FieldElement(A) - B;
79 template<
typename FieldElement,
typename Integral,
80 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
81 std::is_constructible<FieldElement, Integral>::value>::type>
82 constexpr FieldElement
operator*(Integral A,
const FieldElement &B) {
83 return FieldElement(A) * B;
86 template<
typename FieldElement,
typename Integral,
87 typename =
typename std::enable_if<is_field_element<FieldElement>::value &&
88 std::is_constructible<FieldElement, Integral>::value>::type>
89 constexpr FieldElement
operator/(Integral A,
const FieldElement &B) {
91 return FieldElement(A) / B;
constexpr FieldElement operator-(const FieldElement &A, Integral B)
Definition: operations.hpp:46
constexpr FieldElement operator+(const FieldElement &A, Integral B)
Definition: operations.hpp:39
constexpr FieldElement operator/(const FieldElement &A, Integral B)
Definition: operations.hpp:60
element_fp12_2over3over2< FieldParams > operator*(const typename FieldParams::underlying_type::underlying_type::underlying_type &lhs, const element_fp12_2over3over2< FieldParams > &rhs)
Definition: detail/element/fp12_2over3over2.hpp:364