41#ifndef BERTINI_OPERATOR_HPP
42#define BERTINI_OPERATOR_HPP
66 friend class boost::serialization::access;
68 template <
typename Archive>
69 void serialize(Archive& ar,
const unsigned version) {
70 ar & boost::serialization::base_object<Node>(*
this);
87 UnaryOperator(
const std::shared_ptr<Node> & n) : operand_(n)
92 virtual ~UnaryOperator() =
default;
95 void Reset()
const override;
98 void SetOperand(std::shared_ptr<Node> n);
103 std::shared_ptr<Node> Operand()
const;
110 int Degree(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
113 int Degree(VariableGroup
const& vars)
const override;
119 std::vector<int>
MultiDegree(VariableGroup
const& vars)
const override;
122 void Homogenize(VariableGroup
const& vars, std::shared_ptr<Variable>
const& homvar)
override;
125 bool IsHomogeneous(std::shared_ptr<Variable>
const& v =
nullptr)
const override;
131 bool IsHomogeneous(VariableGroup
const& vars)
const override;
140 void precision(
unsigned int prec)
const override;
146 std::shared_ptr<Node> operand_;
149 friend class boost::serialization::access;
151 template <
typename Archive>
152 void serialize(Archive& ar,
const unsigned version) {
153 ar & boost::serialization::base_object<Operator>(*
this);
172 virtual ~NaryOperator() =
default;
175 void Reset()
const override;
178 virtual void AddOperand(std::shared_ptr<Node> n);
181 size_t NumOperands()
const;
183 inline auto const& Operands()
const{
188 std::shared_ptr<Node> FirstOperand()
const;
195 void precision(
unsigned int prec)
const override;
203 std::vector< std::shared_ptr<Node> > operands_;
210 virtual void PrecisionChangeSpecific(
unsigned prec)
const;
213 friend class boost::serialization::access;
215 template <
typename Archive>
216 void serialize(Archive& ar,
const unsigned version) {
217 ar & boost::serialization::base_object<Operator>(*
this);
void Reset() const override
Definition operator.cpp:138
void precision(unsigned int prec) const override
Definition operator.cpp:175
Abstract Node type from which all Operators inherit.
Definition operator.hpp:58
void precision(unsigned int prec) const override
Definition operator.cpp:122
void Homogenize(VariableGroup const &vars, std::shared_ptr< Variable > const &homvar) override
Definition operator.cpp:85
bool IsHomogeneous(std::shared_ptr< Variable > const &v=nullptr) const override
Definition operator.cpp:91
void Reset() const override
Definition operator.cpp:33
std::vector< int > MultiDegree(VariableGroup const &vars) const override
Definition operator.cpp:74
int Degree(std::shared_ptr< Variable > const &v=nullptr) const override
Definition operator.cpp:53
Defines the abstract Node base class.