blob: 4a1b2b5806a4394a3c17ddac96c1a4162f5bb2bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
// Copyright 2018 The Amber Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SRC_VALUE_H_
#define SRC_VALUE_H_
#include <cstdint>
namespace amber {
class Value {
public:
Value();
Value(const Value&);
~Value();
Value& operator=(const Value&);
void SetIntValue(uint64_t val) {
type_ = Type::kInteger;
uint_value_ = val;
}
bool IsInteger() const { return type_ == Type::kInteger; }
void SetDoubleValue(double val) {
type_ = Type::kFloat;
double_value_ = val;
}
bool IsFloat() const { return type_ == Type::kFloat; }
uint8_t AsUint8() const { return static_cast<uint8_t>(uint_value_); }
uint16_t AsUint16() const { return static_cast<uint16_t>(uint_value_); }
uint32_t AsUint32() const { return static_cast<uint32_t>(uint_value_); }
uint64_t AsUint64() const { return static_cast<uint64_t>(uint_value_); }
int8_t AsInt8() const { return static_cast<int8_t>(uint_value_); }
int16_t AsInt16() const { return static_cast<int16_t>(uint_value_); }
int32_t AsInt32() const { return static_cast<int32_t>(uint_value_); }
int64_t AsInt64() const { return static_cast<int64_t>(uint_value_); }
float AsFloat() const { return static_cast<float>(double_value_); }
double AsDouble() const { return double_value_; }
private:
enum class Type { kFloat, kInteger };
Type type_ = Type::kFloat;
uint64_t uint_value_ = 0;
double double_value_ = 0.0;
};
} // namespace amber
#endif // SRC_VALUE_H_
|