9#include "Utilities/Expressions.h"
16 T readValue(
const Value & value, T defaultValue, ExpressionContext * ev)
18 if (value.IsString()) {
19 return ev->eval(value.GetString(), defaultValue);
20 }
else if (value.IsNumber()) {
21 return static_cast<T
>(value.GetDouble());
28 T readValue(
const Value & value, ExpressionContext * ev)
30 return static_cast<T
>(readValue(value, 0.0, ev));
33 inline uint32_t readArray(
const Value& value,
float* dst,
unsigned N, ExpressionContext* ev)
35 if (!value.IsArray())
return 0;
37 auto vectorValues = value.GetArray();
38 const uint32_t length = std::min(N, vectorValues.Size());
40 for (uint32_t el = 0; el < length; ++el) {
41 dst[el] = readValue(vectorValues[el], 0.0f, ev);
47 template<
int S,
typename T, glm::precision P,
template <
int,
typename, glm::precision>
class vecType>
48 uint32_t readArray(
const Value & value, vecType<S, T, P> & result, ExpressionContext * ev)
50 if (!value.IsArray())
return 0;
52 const size_t Size = result.length();
53 auto vectorValues = value.GetArray();
54 const uint32_t length = std::min(
static_cast<uint32_t
>(Size), vectorValues.Size());
56 for (uint32_t el = 0; el < length; ++el) {
57 result[el] = readValue(vectorValues[el], 0.0f, ev);
Contains all Cogs related functionality.