12 enum class ParamOpcode
20 enum class ParameterType
30 virtual double getValue()
const = 0;
31 virtual ParameterType getType()
const = 0;
34 class ConstantSource final :
public ParameterSource
37 explicit ConstantSource(
double const_value);
38 double getValue()
const override;
39 ParameterType getType()
const override;
40 bool operator==(
const ConstantSource &other)
const;
46 class PointerSource final :
public ParameterSource
49 explicit PointerSource(
const double *value_ptr);
50 double getValue()
const override;
51 ParameterType getType()
const override;
52 bool operator==(
const PointerSource &other)
const;
58 class OperationSource final :
public ParameterSource
61 OperationSource(ParamOpcode op,
62 std::shared_ptr<ParameterSource> p1,
63 std::shared_ptr<ParameterSource> p2);
64 double getValue()
const override;
65 ParameterType getType()
const override;
66 bool operator==(
const OperationSource &other)
const;
70 std::shared_ptr<ParameterSource> p1;
71 std::shared_ptr<ParameterSource> p2;
80 explicit Parameter(
int const_value);
81 explicit Parameter(
double const_value);
82 explicit Parameter(
double *value_ptr);
86 double getValue()
const;
88 bool operator==(
const Parameter &other)
const;
90 Parameter operator+(
const Parameter &other)
const;
91 Parameter operator-(
const Parameter &other)
const;
92 Parameter operator-()
const;
93 Parameter operator*(
const Parameter &other)
const;
94 Parameter operator/(
const Parameter &other)
const;
95 Parameter &operator+=(
const Parameter &other);
96 Parameter &operator*=(
const Parameter &other);
97 Parameter &operator/=(
const Parameter &other);
98 explicit operator Affine()
const;
99 explicit operator Scalar()
const;
100 explicit operator double()
const;
102 friend Parameter sqrt(
const Parameter ¶m);
103 friend std::ostream &operator<<(std::ostream &os,
const Parameter ¶meter);
106 std::shared_ptr<ParameterSource> source;