14 #include <type_traits> 17 #include "llvm/ArrayRef.h" 18 #include "llvm/StringRef.h" 31 struct private_init {};
35 Value(NT_Type
type,
unsigned long long time,
const private_init&);
42 NT_Type
type()
const {
return m_val.type; }
54 unsigned long long last_change()
const {
return m_val.last_change; }
60 unsigned long long time()
const {
return m_val.last_change; }
71 bool IsValid()
const {
return m_val.type != NT_UNASSIGNED; }
77 bool IsBoolean()
const {
return m_val.type == NT_BOOLEAN; }
83 bool IsDouble()
const {
return m_val.type == NT_DOUBLE; }
89 bool IsString()
const {
return m_val.type == NT_STRING; }
95 bool IsRaw()
const {
return m_val.type == NT_RAW; }
101 bool IsRpc()
const {
return m_val.type == NT_RPC; }
133 assert(m_val.type == NT_BOOLEAN);
134 return m_val.data.v_boolean != 0;
142 assert(m_val.type == NT_DOUBLE);
143 return m_val.data.v_double;
151 assert(m_val.type == NT_STRING);
160 assert(m_val.type == NT_RAW);
169 assert(m_val.type == NT_RPC);
178 assert(m_val.type == NT_BOOLEAN_ARRAY);
180 m_val.data.arr_boolean.size);
188 assert(m_val.type == NT_DOUBLE_ARRAY);
190 m_val.data.arr_double.size);
198 assert(m_val.type == NT_STRING_ARRAY);
199 return m_string_array;
217 unsigned long long time = 0) {
218 auto val = std::make_shared<Value>(NT_BOOLEAN,
time, private_init());
219 val->m_val.data.v_boolean =
value;
231 unsigned long long time = 0) {
232 auto val = std::make_shared<Value>(NT_DOUBLE,
time, private_init());
233 val->m_val.data.v_double =
value;
245 unsigned long long time = 0) {
246 auto val = std::make_shared<Value>(NT_STRING,
time, private_init());
247 val->m_string =
value;
248 val->m_val.data.v_string.
str =
const_cast<char*
>(val->m_string.c_str());
249 val->m_val.data.v_string.len = val->m_string.size();
261 template <
typename T,
262 typename = std::enable_if_t<std::is_same<T, std::string>>>
264 template <
typename T,
265 typename std::enable_if<std::is_same<T, std::string>::value>
::type>
268 unsigned long long time = 0) {
269 auto val = std::make_shared<Value>(NT_STRING,
time, private_init());
270 val->m_string = std::move(
value);
271 val->m_val.data.v_string.str =
const_cast<char*
>(val->m_string.c_str());
272 val->m_val.data.v_string.len = val->m_string.size();
284 unsigned long long time = 0) {
285 auto val = std::make_shared<Value>(NT_RAW,
time, private_init());
286 val->m_string =
value;
287 val->m_val.data.v_raw.
str =
const_cast<char*
>(val->m_string.c_str());
288 val->m_val.data.v_raw.len = val->m_string.size();
300 template <
typename T,
301 typename = std::enable_if_t<std::is_same<T, std::string>>>
303 template <
typename T,
304 typename std::enable_if<std::is_same<T, std::string>::value>
::type>
307 unsigned long long time = 0) {
308 auto val = std::make_shared<Value>(NT_RAW,
time, private_init());
309 val->m_string = std::move(
value);
310 val->m_val.data.v_raw.str =
const_cast<char*
>(val->m_string.c_str());
311 val->m_val.data.v_raw.len = val->m_string.size();
323 unsigned long long time = 0) {
324 auto val = std::make_shared<Value>(NT_RPC,
time, private_init());
325 val->m_string =
value;
326 val->m_val.data.v_raw.
str =
const_cast<char*
>(val->m_string.c_str());
327 val->m_val.data.v_raw.len = val->m_string.size();
338 template <
typename T>
340 unsigned long long time = 0) {
341 auto val = std::make_shared<Value>(NT_RPC,
time, private_init());
342 val->m_string = std::move(
value);
343 val->m_val.data.v_raw.str =
const_cast<char*
>(val->m_string.c_str());
344 val->m_val.data.v_raw.len = val->m_string.size();
356 unsigned long long time = 0);
366 unsigned long long time = 0);
376 unsigned long long time = 0);
380 std::vector<std::string>&& value,
unsigned long long time = 0);
386 friend bool operator==(
const Value& lhs,
const Value& rhs);
390 std::string m_string;
391 std::vector<std::string> m_string_array;
394 bool operator==(
const Value& lhs,
const Value& rhs);
395 inline bool operator!=(
const Value& lhs,
const Value& rhs) {
396 return !(lhs == rhs);
404 #endif // NT_VALUE_H_ unsigned long long time() const
Get the creation time of the value.
Definition: NetworkTableValue.h:60
bool IsValid() const
Determine if entry value contains a value or is unassigned.
Definition: NetworkTableValue.h:71
NetworkTables Entry Value.
Definition: ntcore_c.h:108
static std::shared_ptr< Value > MakeStringArray(ArrayRef< std::string > value, unsigned long long time=0)
Creates a string array entry value.
Definition: Value.cpp:60
bool IsBooleanArray() const
Determine if entry value contains a boolean array.
Definition: NetworkTableValue.h:107
bool IsString() const
Determine if entry value contains a string.
Definition: NetworkTableValue.h:89
static std::shared_ptr< Value > MakeRpc(T &&value, unsigned long long time=0)
Creates a rpc entry value.
Definition: NetworkTableValue.h:339
ArrayRef< std::string > GetStringArray() const
Get the entry's string array value.
Definition: NetworkTableValue.h:197
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: ArrayRef.h:32
StringRef GetRpc() const
Get the entry's rpc definition value.
Definition: NetworkTableValue.h:168
ArrayRef< int > GetBooleanArray() const
Get the entry's boolean array value.
Definition: NetworkTableValue.h:177
static std::shared_ptr< Value > MakeRaw(StringRef value, unsigned long long time=0)
Creates a raw entry value.
Definition: NetworkTableValue.h:283
Definition: IEntryNotifier.h:15
static std::shared_ptr< Value > MakeRpc(StringRef value, unsigned long long time=0)
Creates a rpc entry value.
Definition: NetworkTableValue.h:322
bool IsDoubleArray() const
Determine if entry value contains a double array.
Definition: NetworkTableValue.h:113
ArrayRef< double > GetDoubleArray() const
Get the entry's double array value.
Definition: NetworkTableValue.h:187
static std::shared_ptr< Value > MakeBoolean(bool value, unsigned long long time=0)
Creates a boolean entry value.
Definition: NetworkTableValue.h:216
static std::shared_ptr< Value > MakeBooleanArray(ArrayRef< int > value, unsigned long long time=0)
Creates a boolean array entry value.
Definition: Value.cpp:42
static std::shared_ptr< Value > MakeDouble(double value, unsigned long long time=0)
Creates a double entry value.
Definition: NetworkTableValue.h:230
bool IsBoolean() const
Determine if entry value contains a boolean.
Definition: NetworkTableValue.h:77
NT_Type type() const
Get the data type.
Definition: NetworkTableValue.h:42
bool IsRpc() const
Determine if entry value contains a rpc definition.
Definition: NetworkTableValue.h:101
const NT_Value & value() const
Get the data value stored.
Definition: NetworkTableValue.h:48
double GetDouble() const
Get the entry's double value.
Definition: NetworkTableValue.h:141
StringRef GetRaw() const
Get the entry's raw value.
Definition: NetworkTableValue.h:159
static std::shared_ptr< Value > MakeString(T &&value, unsigned long long time=0)
Creates a string entry value.
Definition: NetworkTableValue.h:267
unsigned long long last_change() const
Get the creation time of the value.
Definition: NetworkTableValue.h:54
static std::shared_ptr< Value > MakeRaw(T &&value, unsigned long long time=0)
Creates a raw entry value.
Definition: NetworkTableValue.h:306
bool IsRaw() const
Determine if entry value contains a raw.
Definition: NetworkTableValue.h:95
bool IsDouble() const
Determine if entry value contains a double.
Definition: NetworkTableValue.h:83
bool GetBoolean() const
Get the entry's boolean value.
Definition: NetworkTableValue.h:132
bool IsStringArray() const
Determine if entry value contains a string array.
Definition: NetworkTableValue.h:119
char * str
String contents (UTF-8).
Definition: ntcore_c.h:98
A network table entry value.
Definition: NetworkTableValue.h:30
static std::shared_ptr< Value > MakeDoubleArray(ArrayRef< double > value, unsigned long long time=0)
Creates a double array entry value.
Definition: Value.cpp:51
StringRef GetString() const
Get the entry's string value.
Definition: NetworkTableValue.h:150
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:42
static std::shared_ptr< Value > MakeString(StringRef value, unsigned long long time=0)
Creates a string entry value.
Definition: NetworkTableValue.h:244