CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
ConstraintExpression.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
14#include <vector>
15
17
20 public:
21 class Term;
22
23 private:
25 double mConstant;
26
27 public:
28 ConstraintExpression(const double constant = 0.0) : mConstant(constant) {}
29 ConstraintExpression(const Term& term, const double constant = 0.0) : mTerms(1, term), mConstant(constant) {}
30 ConstraintExpression(Vector<Term> terms, const double constant = 0.0) : mTerms(std::move(terms)), mConstant(constant) {}
31
34
37
39
40 public:
42 [[nodiscard]] const Vector<Term>& getTerms() const { return mTerms; }
43
45 [[nodiscard]] double getConstant() const { return mConstant; }
46
47 [[nodiscard]] double getValue() const {
48 double result = mConstant;
49
50 for(const Term& term : mTerms) {
51 result += term.getValue();
52 }
53
54 return result;
55 }
56
57 public:
58 class Term {
59 private:
62
63 public:
65
66 // to facilitate efficient map -> vector copies
67 Term(const std::pair<const ConstraintVariable, double>& pair) : mVariable(pair.first), mCoefficient(pair.second) {}
68
69 Term(const Term&) = default;
70 Term& operator=(const Term&) = default;
71
74
76
77 public:
80
82 [[nodiscard]] double getCoefficient() const { return mCoefficient; }
83
85 [[nodiscard]] double getValue() const { return mCoefficient * mVariable.getValue(); }
86 };
87 };
88
89} // namespace CeresEngine::Constraint
Definition ConstraintExpression.hpp:58
double mCoefficient
Definition ConstraintExpression.hpp:61
double getCoefficient() const
Definition ConstraintExpression.hpp:82
ConstraintVariable mVariable
Definition ConstraintExpression.hpp:60
Term(const std::pair< const ConstraintVariable, double > &pair)
Definition ConstraintExpression.hpp:67
const ConstraintVariable & getVariable() const
Definition ConstraintExpression.hpp:79
double getValue() const
Returns the variable value multiplied by the coefficient.
Definition ConstraintExpression.hpp:85
Term(ConstraintVariable variable, const double coefficient=1.0)
Definition ConstraintExpression.hpp:64
Represents a constraint mathematical expression.
Definition ConstraintExpression.hpp:19
Vector< Term > mTerms
Definition ConstraintExpression.hpp:24
ConstraintExpression(Vector< Term > terms, const double constant=0.0)
Definition ConstraintExpression.hpp:30
ConstraintExpression & operator=(const ConstraintExpression &)=default
ConstraintExpression(const double constant=0.0)
Definition ConstraintExpression.hpp:28
ConstraintExpression & operator=(ConstraintExpression &&) noexcept=default
ConstraintExpression(const ConstraintExpression &)=default
const Vector< Term > & getTerms() const
Definition ConstraintExpression.hpp:42
double getConstant() const
Definition ConstraintExpression.hpp:45
double getValue() const
Definition ConstraintExpression.hpp:47
ConstraintExpression(const Term &term, const double constant=0.0)
Definition ConstraintExpression.hpp:29
double mConstant
Definition ConstraintExpression.hpp:25
A variable as used in an expression.
Definition ConstraintVariable.hpp:50
double getValue() const
Definition ConstraintVariable.hpp:74
Definition Constraint.hpp:22
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
auto move(Vector3 position)
Moves a entity to the given position.
Definition Helpers.hpp:22
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Span.hpp:668