CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
ConstraintStrength.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2023 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
11
13
15
26 private:
28
29 public:
31 constexpr ConstraintSymbolicWeight(const double w1, const double w2, const double w3) : mValues{w1, w2, w3} {}
32
38
39 [[nodiscard]] bool isNegative() const;
40 [[nodiscard]] constexpr double asDouble() const { return mValues[2] + mValues[1] * 10000. + mValues[0] * 10000000.; }
41 [[nodiscard]] constexpr size_t levels() const { return 3; }
42
43 public:
45
46 public:
47 friend bool operator<(const ConstraintSymbolicWeight& lhs, const ConstraintSymbolicWeight& rhs);
51 friend bool operator>(const ConstraintSymbolicWeight& lhs, const ConstraintSymbolicWeight& rhs);
53 };
54
55 inline ConstraintSymbolicWeight operator*(ConstraintSymbolicWeight w, const double n) { return w *= n; }
56 inline ConstraintSymbolicWeight operator/(ConstraintSymbolicWeight w, const double n) { return w /= n; }
59
60 // ---------------------------------------------------------------------------------------------
61
92 private:
94 double mWeight = 1.0;
95
96 public:
98
104 constexpr ConstraintStrength(const double a, const double b, const double c, const double w = 1.0) : mSymbolicWeight{a, b, c}, mWeight(w) {}
105
108
111
113 [[nodiscard]] double getWeight() const { return mWeight; }
114
117
118 public:
122
125
128
131
132 friend bool operator==(const ConstraintStrength& lhs, const ConstraintStrength& rhs);
133 friend bool operator!=(const ConstraintStrength& lhs, const ConstraintStrength& rhs);
134 friend bool operator<=(const ConstraintStrength& lhs, const ConstraintStrength& rhs);
135 friend bool operator<(const ConstraintStrength& lhs, const ConstraintStrength& rhs);
136 friend bool operator>=(const ConstraintStrength& lhs, const ConstraintStrength& rhs);
137 friend bool operator>(const ConstraintStrength& lhs, const ConstraintStrength& rhs);
139 };
140
142 std::numeric_limits<double>::max(),
143 std::numeric_limits<double>::max(),
144 std::numeric_limits<double>::max(),
145 };
146 inline const ConstraintStrength ConstraintStrength::strong{1, 0, 0};
147 inline const ConstraintStrength ConstraintStrength::medium{0, 1, 0};
148 inline const ConstraintStrength ConstraintStrength::weak{0, 0, 1};
149
150 inline bool operator==(const ConstraintStrength& lhs, const ConstraintStrength& rhs) { return lhs.mSymbolicWeight == rhs.mSymbolicWeight; }
151 inline bool operator!=(const ConstraintStrength& lhs, const ConstraintStrength& rhs) { return lhs.mSymbolicWeight != rhs.mSymbolicWeight; }
152 inline bool operator<=(const ConstraintStrength& lhs, const ConstraintStrength& rhs) { return lhs.mSymbolicWeight <= rhs.mSymbolicWeight; }
153 inline bool operator<(const ConstraintStrength& lhs, const ConstraintStrength& rhs) { return lhs.mSymbolicWeight < rhs.mSymbolicWeight; }
154 inline bool operator>=(const ConstraintStrength& lhs, const ConstraintStrength& rhs) { return lhs.mSymbolicWeight >= rhs.mSymbolicWeight; }
155 inline bool operator>(const ConstraintStrength& lhs, const ConstraintStrength& rhs) { return lhs.mSymbolicWeight > rhs.mSymbolicWeight; }
157 lhs.mWeight = w;
158 return lhs;
159 }
160
161 std::ostream& operator<<(std::ostream& str, const ConstraintStrength& s);
162
163} // namespace CeresEngine::Constraint
Every constraint has a strength that determines where it sits in the hierarchy; strong constraints ar...
Definition ConstraintStrength.hpp:91
friend bool operator<=(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:152
static const ConstraintStrength medium
Medium constraint strength.
Definition ConstraintStrength.hpp:127
static const ConstraintStrength required
Constraints with this strength must be satisfied.
Definition ConstraintStrength.hpp:121
friend bool operator>(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:155
static const ConstraintStrength weak
The default strength for stay constraints.
Definition ConstraintStrength.hpp:130
double mWeight
Definition ConstraintStrength.hpp:94
friend ConstraintStrength operator*(ConstraintStrength lhs, double w)
Definition ConstraintStrength.hpp:156
static const ConstraintStrength strong
The default strength for edit constraints.
Definition ConstraintStrength.hpp:124
double getWeight() const
Get the 3-tuple symbolic weight.
Definition ConstraintStrength.hpp:113
constexpr ConstraintStrength(const ConstraintSymbolicWeight &symbolicWeight, const double w)
Definition ConstraintStrength.hpp:97
friend bool operator<(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:153
friend bool operator==(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:150
const ConstraintSymbolicWeight & getSymbolicWeight() const
Get the 3-tuple symbolic weight.
Definition ConstraintStrength.hpp:110
friend bool operator>=(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:154
friend bool operator!=(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:151
constexpr ConstraintStrength(const double a, const double b, const double c, const double w=1.0)
Construct a strength from three weight factors.
Definition ConstraintStrength.hpp:104
bool isRequired() const
Check if this strength signals a required constraint.
Definition ConstraintStrength.hpp:107
double getAdjustedWeight() const
Gets the adjusted weight as a double.
Definition ConstraintStrength.hpp:116
ConstraintSymbolicWeight mSymbolicWeight
Definition ConstraintStrength.hpp:93
A 3-tuple weight for constraint strengths.
Definition ConstraintStrength.hpp:25
friend bool operator<=(const ConstraintSymbolicWeight &lhs, const ConstraintSymbolicWeight &rhs)
friend bool operator!=(const ConstraintSymbolicWeight &lhs, const ConstraintSymbolicWeight &rhs)
constexpr double asDouble() const
Definition ConstraintStrength.hpp:40
ConstraintSymbolicWeight & operator/=(double n)
friend bool operator>=(const ConstraintSymbolicWeight &lhs, const ConstraintSymbolicWeight &rhs)
Array< double, 3 > mValues
Definition ConstraintStrength.hpp:27
static const ConstraintSymbolicWeight zero
Definition ConstraintStrength.hpp:44
constexpr ConstraintSymbolicWeight(const double w1, const double w2, const double w3)
Definition ConstraintStrength.hpp:31
constexpr size_t levels() const
Definition ConstraintStrength.hpp:41
friend bool operator==(const ConstraintSymbolicWeight &lhs, const ConstraintSymbolicWeight &rhs)
constexpr ConstraintSymbolicWeight()
Definition ConstraintStrength.hpp:30
friend bool operator>(const ConstraintSymbolicWeight &lhs, const ConstraintSymbolicWeight &rhs)
friend bool operator<(const ConstraintSymbolicWeight &lhs, const ConstraintSymbolicWeight &rhs)
ConstraintSymbolicWeight & operator*=(double n)
ConstraintSymbolicWeight & operator+=(const ConstraintSymbolicWeight &n)
ConstraintSymbolicWeight & operator-=(const ConstraintSymbolicWeight &n)
Definition Constraint.hpp:22
Constraint operator==(const ConstraintExpression &first, const ConstraintExpression &second)
Definition Constraint.hpp:183
bool operator!=(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:151
Constraint operator<=(const ConstraintExpression &first, const ConstraintExpression &second)
Definition Constraint.hpp:187
bool operator<(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:153
std::ostream & operator<<(std::ostream &str, const ConstraintStrength &s)
ConstraintExpression operator+(const ConstraintExpression &first, const ConstraintExpression &second)
Definition Constraint.hpp:131
Constraint operator>=(const ConstraintExpression &first, const ConstraintExpression &second)
Definition Constraint.hpp:191
bool operator>(const ConstraintStrength &lhs, const ConstraintStrength &rhs)
Definition ConstraintStrength.hpp:155
ConstraintExpression::Term operator/(const ConstraintVariable &variable, const double denominator)
Definition Constraint.hpp:103
ConstraintExpression::Term operator*(const ConstraintVariable &variable, const double coefficient)
Definition Constraint.hpp:102
ConstraintExpression::Term operator-(const ConstraintVariable &variable)
Definition Constraint.hpp:104
std::array< T, N > Array
Array is a container that encapsulates fixed size arrays.
Definition Array.hpp:17
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25