v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
101
source/game/StarStoredFunctions.hpp
Normal file
101
source/game/StarStoredFunctions.hpp
Normal file
|
@ -0,0 +1,101 @@
|
|||
#ifndef STAR_STORED_FUNCTIONS_HPP
|
||||
#define STAR_STORED_FUNCTIONS_HPP
|
||||
|
||||
#include "StarParametricFunction.hpp"
|
||||
#include "StarJson.hpp"
|
||||
#include "StarMultiTable.hpp"
|
||||
#include "StarThread.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
STAR_CLASS(StoredFunction);
|
||||
STAR_CLASS(StoredFunction2);
|
||||
STAR_CLASS(StoredConfigFunction);
|
||||
STAR_CLASS(FunctionDatabase);
|
||||
|
||||
STAR_EXCEPTION(StoredFunctionException, StarException);
|
||||
|
||||
enum class Monotonicity { Flat, Increasing, Decreasing, None };
|
||||
|
||||
// Interpolated function from single input to single output read from
|
||||
// configuration.
|
||||
class StoredFunction {
|
||||
public:
|
||||
struct SearchResult {
|
||||
double targetValue;
|
||||
double searchTolerance;
|
||||
|
||||
// Whether or not a solution was found within the given tolerance.
|
||||
bool found;
|
||||
// The resulting input that was found.
|
||||
double solution;
|
||||
// The value that is gotten from evaluating the function at the solution.
|
||||
double value;
|
||||
};
|
||||
|
||||
static double const DefaultSearchTolerance;
|
||||
|
||||
StoredFunction(ParametricFunction<double, double> data);
|
||||
|
||||
Monotonicity monotonicity() const;
|
||||
|
||||
double evaluate(double input) const;
|
||||
|
||||
// Search for the input which would give the target value. Will only work if
|
||||
// the function Monotonicity is Increasing or Decreasing.
|
||||
SearchResult search(double targetValue, double valueTolerance = DefaultSearchTolerance) const;
|
||||
|
||||
private:
|
||||
Monotonicity m_monotonicity;
|
||||
ParametricFunction<double, double> m_function;
|
||||
};
|
||||
|
||||
// Interpolated function from two inputs to an output read from configuration.
|
||||
class StoredFunction2 {
|
||||
public:
|
||||
StoredFunction2(MultiTable2D table);
|
||||
|
||||
double evaluate(double x, double y) const;
|
||||
|
||||
private:
|
||||
MultiTable2D table;
|
||||
};
|
||||
|
||||
// Function from a single input to some generic configuration.
|
||||
class StoredConfigFunction {
|
||||
public:
|
||||
StoredConfigFunction(ParametricTable<int, Json> data);
|
||||
|
||||
Json get(double input) const;
|
||||
|
||||
private:
|
||||
ParametricTable<int, Json> m_data;
|
||||
};
|
||||
|
||||
class FunctionDatabase {
|
||||
public:
|
||||
FunctionDatabase();
|
||||
|
||||
StringList namedFunctions() const;
|
||||
StringList namedFunctions2() const;
|
||||
StringList namedConfigFunctions() const;
|
||||
|
||||
// If configOrName is a string, loads the named function. If it is an inline
|
||||
// config, reads the inline config.
|
||||
StoredFunctionPtr function(Json const& configOrName) const;
|
||||
StoredFunction2Ptr function2(Json const& configOrName) const;
|
||||
StoredConfigFunctionPtr configFunction(Json const& configOrName) const;
|
||||
|
||||
private:
|
||||
static ParametricFunction<double, double> parametricFunctionFromConfig(Json descriptor);
|
||||
static ParametricTable<int, Json> parametricTableFromConfig(Json descriptor);
|
||||
static MultiTable2D multiTable2DFromConfig(Json descriptor);
|
||||
|
||||
StringMap<StoredFunctionPtr> m_functions;
|
||||
StringMap<StoredFunction2Ptr> m_functions2;
|
||||
StringMap<StoredConfigFunctionPtr> m_configFunctions;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue