Cogs.Core
ReaderCommon.h
1#pragma once
2
3#include <glm/glm.hpp>
4
5#include <algorithm>
6
7#include "JsonParser.h"
8
9#include "Utilities/Expressions.h"
10
11namespace Cogs
12{
13 namespace Core
14 {
15 template<typename T>
16 T readValue(const Value & value, T defaultValue, ExpressionContext * ev)
17 {
18 if (value.IsString()) {
19 return ev->eval(value.GetString(), defaultValue);
20 } else if (value.IsNumber()) {
21 return static_cast<T>(value.GetDouble());
22 }
23
24 return defaultValue;
25 }
26
27 template<typename T>
28 T readValue(const Value & value, ExpressionContext * ev)
29 {
30 return static_cast<T>(readValue(value, 0.0, ev));
31 }
32
33 inline uint32_t readArray(const Value& value, float* dst, unsigned N, ExpressionContext* ev)
34 {
35 if (!value.IsArray()) return 0;
36
37 auto vectorValues = value.GetArray();
38 const uint32_t length = std::min(N, vectorValues.Size());
39
40 for (uint32_t el = 0; el < length; ++el) {
41 dst[el] = readValue(vectorValues[el], 0.0f, ev);
42 }
43
44 return length;
45 }
46
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)
49 {
50 if (!value.IsArray()) return 0;
51
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());
55
56 for (uint32_t el = 0; el < length; ++el) {
57 result[el] = readValue(vectorValues[el], 0.0f, ev);
58 }
59
60 return length;
61 }
62 }
63}
Contains all Cogs related functionality.
Definition: FieldSetter.h:23