WPILibC++ 2023.4.3
NetworkTableValue.h
Go to the documentation of this file.
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5#pragma once
6
7#include <stdint.h>
8
9#include <cassert>
10#include <initializer_list>
11#include <memory>
12#include <span>
13#include <string>
14#include <string_view>
15#include <type_traits>
16#include <utility>
17#include <vector>
18
19#include "ntcore_c.h"
20
21namespace nt {
22
23/**
24 * A network table entry value.
25 * @ingroup ntcore_cpp_api
26 */
27class Value final {
28 struct private_init {};
29
30 public:
32 Value(NT_Type type, int64_t time, const private_init&);
33 Value(NT_Type type, int64_t time, int64_t serverTime, const private_init&);
34
35 explicit operator bool() const { return m_val.type != NT_UNASSIGNED; }
36
37 /**
38 * Get the data type.
39 *
40 * @return The type.
41 */
42 NT_Type type() const { return m_val.type; }
43
44 /**
45 * Get the data value stored.
46 *
47 * @return The type.
48 */
49 const NT_Value& value() const { return m_val; }
50
51 /**
52 * Get the creation time of the value, in local time.
53 *
54 * @return The time, in the units returned by nt::Now().
55 */
56 int64_t last_change() const { return m_val.last_change; }
57
58 /**
59 * Get the creation time of the value, in local time.
60 *
61 * @return The time, in the units returned by nt::Now().
62 */
63 int64_t time() const { return m_val.last_change; }
64
65 /**
66 * Set the local creation time of the value.
67 *
68 * @param time The time.
69 */
70 void SetTime(int64_t time) { m_val.last_change = time; }
71
72 /**
73 * Get the creation time of the value, in server time.
74 *
75 * @return The server time.
76 */
77 int64_t server_time() const { return m_val.server_time; }
78
79 /**
80 * Set the creation time of the value, in server time.
81 *
82 * @param time The server time.
83 */
85
86 /**
87 * @{
88 * @name Type Checkers
89 */
90
91 /**
92 * Determine if entry value contains a value or is unassigned.
93 *
94 * @return True if the entry value contains a value.
95 */
96 bool IsValid() const { return m_val.type != NT_UNASSIGNED; }
97
98 /**
99 * Determine if entry value contains a boolean.
100 *
101 * @return True if the entry value is of boolean type.
102 */
103 bool IsBoolean() const { return m_val.type == NT_BOOLEAN; }
104
105 /**
106 * Determine if entry value contains an integer.
107 *
108 * @return True if the entry value is of integer type.
109 */
110 bool IsInteger() const { return m_val.type == NT_INTEGER; }
111
112 /**
113 * Determine if entry value contains a float.
114 *
115 * @return True if the entry value is of float type.
116 */
117 bool IsFloat() const { return m_val.type == NT_FLOAT; }
118
119 /**
120 * Determine if entry value contains a double.
121 *
122 * @return True if the entry value is of double type.
123 */
124 bool IsDouble() const { return m_val.type == NT_DOUBLE; }
125
126 /**
127 * Determine if entry value contains a string.
128 *
129 * @return True if the entry value is of string type.
130 */
131 bool IsString() const { return m_val.type == NT_STRING; }
132
133 /**
134 * Determine if entry value contains a raw.
135 *
136 * @return True if the entry value is of raw type.
137 */
138 bool IsRaw() const { return m_val.type == NT_RAW; }
139
140 /**
141 * Determine if entry value contains a boolean array.
142 *
143 * @return True if the entry value is of boolean array type.
144 */
145 bool IsBooleanArray() const { return m_val.type == NT_BOOLEAN_ARRAY; }
146
147 /**
148 * Determine if entry value contains an integer array.
149 *
150 * @return True if the entry value is of integer array type.
151 */
152 bool IsIntegerArray() const { return m_val.type == NT_INTEGER_ARRAY; }
153
154 /**
155 * Determine if entry value contains a float array.
156 *
157 * @return True if the entry value is of float array type.
158 */
159 bool IsFloatArray() const { return m_val.type == NT_FLOAT_ARRAY; }
160
161 /**
162 * Determine if entry value contains a double array.
163 *
164 * @return True if the entry value is of double array type.
165 */
166 bool IsDoubleArray() const { return m_val.type == NT_DOUBLE_ARRAY; }
167
168 /**
169 * Determine if entry value contains a string array.
170 *
171 * @return True if the entry value is of string array type.
172 */
173 bool IsStringArray() const { return m_val.type == NT_STRING_ARRAY; }
174
175 /** @} */
176
177 /**
178 * @{
179 * @name Type-Safe Getters
180 */
181
182 /**
183 * Get the entry's boolean value.
184 *
185 * @return The boolean value.
186 */
187 bool GetBoolean() const {
188 assert(m_val.type == NT_BOOLEAN);
189 return m_val.data.v_boolean != 0;
190 }
191
192 /**
193 * Get the entry's integer value.
194 *
195 * @return The integer value.
196 */
198 assert(m_val.type == NT_INTEGER);
199 return m_val.data.v_int;
200 }
201
202 /**
203 * Get the entry's float value.
204 *
205 * @return The float value.
206 */
207 float GetFloat() const {
208 assert(m_val.type == NT_FLOAT);
209 return m_val.data.v_float;
210 }
211
212 /**
213 * Get the entry's double value.
214 *
215 * @return The double value.
216 */
217 double GetDouble() const {
218 assert(m_val.type == NT_DOUBLE);
219 return m_val.data.v_double;
220 }
221
222 /**
223 * Get the entry's string value.
224 *
225 * @return The string value.
226 */
228 assert(m_val.type == NT_STRING);
229 return {m_val.data.v_string.str, m_val.data.v_string.len};
230 }
231
232 /**
233 * Get the entry's raw value.
234 *
235 * @return The raw value.
236 */
237 std::span<const uint8_t> GetRaw() const {
238 assert(m_val.type == NT_RAW);
239 return {m_val.data.v_raw.data, m_val.data.v_raw.size};
240 }
241
242 /**
243 * Get the entry's boolean array value.
244 *
245 * @return The boolean array value.
246 */
247 std::span<const int> GetBooleanArray() const {
248 assert(m_val.type == NT_BOOLEAN_ARRAY);
249 return {m_val.data.arr_boolean.arr, m_val.data.arr_boolean.size};
250 }
251
252 /**
253 * Get the entry's integer array value.
254 *
255 * @return The integer array value.
256 */
257 std::span<const int64_t> GetIntegerArray() const {
258 assert(m_val.type == NT_INTEGER_ARRAY);
259 return {m_val.data.arr_int.arr, m_val.data.arr_int.size};
260 }
261
262 /**
263 * Get the entry's float array value.
264 *
265 * @return The float array value.
266 */
267 std::span<const float> GetFloatArray() const {
268 assert(m_val.type == NT_FLOAT_ARRAY);
269 return {m_val.data.arr_float.arr, m_val.data.arr_float.size};
270 }
271
272 /**
273 * Get the entry's double array value.
274 *
275 * @return The double array value.
276 */
277 std::span<const double> GetDoubleArray() const {
278 assert(m_val.type == NT_DOUBLE_ARRAY);
279 return {m_val.data.arr_double.arr, m_val.data.arr_double.size};
280 }
281
282 /**
283 * Get the entry's string array value.
284 *
285 * @return The string array value.
286 */
287 std::span<const std::string> GetStringArray() const {
288 assert(m_val.type == NT_STRING_ARRAY);
289 return *static_cast<std::vector<std::string>*>(m_storage.get());
290 }
291
292 /** @} */
293
294 /**
295 * @{
296 * @name Factory functions
297 */
298
299 /**
300 * Creates a boolean entry value.
301 *
302 * @param value the value
303 * @param time if nonzero, the creation time to use (instead of the current
304 * time)
305 * @return The entry value
306 */
307 static Value MakeBoolean(bool value, int64_t time = 0) {
308 Value val{NT_BOOLEAN, time, private_init{}};
309 val.m_val.data.v_boolean = value;
310 return val;
311 }
312
313 /**
314 * Creates an integer entry value.
315 *
316 * @param value the value
317 * @param time if nonzero, the creation time to use (instead of the current
318 * time)
319 * @return The entry value
320 */
322 Value val{NT_INTEGER, time, private_init{}};
323 val.m_val.data.v_int = value;
324 return val;
325 }
326
327 /**
328 * Creates a float entry value.
329 *
330 * @param value the value
331 * @param time if nonzero, the creation time to use (instead of the current
332 * time)
333 * @return The entry value
334 */
335 static Value MakeFloat(float value, int64_t time = 0) {
336 Value val{NT_FLOAT, time, private_init{}};
337 val.m_val.data.v_float = value;
338 return val;
339 }
340
341 /**
342 * Creates a double entry value.
343 *
344 * @param value the value
345 * @param time if nonzero, the creation time to use (instead of the current
346 * time)
347 * @return The entry value
348 */
349 static Value MakeDouble(double value, int64_t time = 0) {
350 Value val{NT_DOUBLE, time, private_init{}};
351 val.m_val.data.v_double = value;
352 return val;
353 }
354
355 /**
356 * Creates a string entry value.
357 *
358 * @param value the value
359 * @param time if nonzero, the creation time to use (instead of the current
360 * time)
361 * @return The entry value
362 */
364 Value val{NT_STRING, time, private_init{}};
365 auto data = std::make_shared<std::string>(value);
366 val.m_val.data.v_string.str = const_cast<char*>(data->c_str());
367 val.m_val.data.v_string.len = data->size();
368 val.m_storage = std::move(data);
369 return val;
370 }
371
372 /**
373 * Creates a string entry value.
374 *
375 * @param value the value
376 * @param time if nonzero, the creation time to use (instead of the current
377 * time)
378 * @return The entry value
379 */
380 template <typename T,
381 typename std::enable_if<std::is_same<T, std::string>::value>::type>
382 static Value MakeString(T&& value, int64_t time = 0) {
383 Value val{NT_STRING, time, private_init{}};
384 auto data = std::make_shared<std::string>(std::forward(value));
385 val.m_val.data.v_string.str = const_cast<char*>(data->c_str());
386 val.m_val.data.v_string.len = data->size();
387 val.m_storage = std::move(data);
388 return val;
389 }
390
391 /**
392 * Creates a raw entry value.
393 *
394 * @param value the value
395 * @param time if nonzero, the creation time to use (instead of the current
396 * time)
397 * @return The entry value
398 */
399 static Value MakeRaw(std::span<const uint8_t> value, int64_t time = 0) {
400 Value val{NT_RAW, time, private_init{}};
401 auto data =
402 std::make_shared<std::vector<uint8_t>>(value.begin(), value.end());
403 val.m_val.data.v_raw.data = const_cast<uint8_t*>(data->data());
404 val.m_val.data.v_raw.size = data->size();
405 val.m_storage = std::move(data);
406 return val;
407 }
408
409 /**
410 * Creates a raw entry value.
411 *
412 * @param value the value
413 * @param time if nonzero, the creation time to use (instead of the current
414 * time)
415 * @return The entry value
416 */
417 template <typename T, typename std::enable_if<
418 std::is_same<T, std::vector<uint8_t>>::value>::type>
419 static Value MakeRaw(T&& value, int64_t time = 0) {
420 Value val{NT_RAW, time, private_init{}};
421 auto data = std::make_shared<std::vector<uint8_t>>(std::forward(value));
422 val.m_val.data.v_raw.data = const_cast<uint8_t*>(data->data());
423 val.m_val.data.v_raw.size = data->size();
424 val.m_storage = std::move(data);
425 return val;
426 }
427
428 /**
429 * Creates a boolean array entry value.
430 *
431 * @param value the value
432 * @param time if nonzero, the creation time to use (instead of the current
433 * time)
434 * @return The entry value
435 */
436 static Value MakeBooleanArray(std::span<const bool> value, int64_t time = 0);
437
438 /**
439 * Creates a boolean array entry value.
440 *
441 * @param value the value
442 * @param time if nonzero, the creation time to use (instead of the current
443 * time)
444 * @return The entry value
445 */
446 static Value MakeBooleanArray(std::initializer_list<bool> value,
447 int64_t time = 0) {
448 return MakeBooleanArray(std::span(value.begin(), value.end()), time);
449 }
450
451 /**
452 * Creates a boolean array entry value.
453 *
454 * @param value the value
455 * @param time if nonzero, the creation time to use (instead of the current
456 * time)
457 * @return The entry value
458 */
459 static Value MakeBooleanArray(std::span<const int> value, int64_t time = 0);
460
461 /**
462 * Creates a boolean array entry value.
463 *
464 * @param value the value
465 * @param time if nonzero, the creation time to use (instead of the current
466 * time)
467 * @return The entry value
468 */
469 static Value MakeBooleanArray(std::initializer_list<int> value,
470 int64_t time = 0) {
471 return MakeBooleanArray(std::span(value.begin(), value.end()), time);
472 }
473
474 /**
475 * Creates a boolean array entry value.
476 *
477 * @param value the value
478 * @param time if nonzero, the creation time to use (instead of the current
479 * time)
480 * @return The entry value
481 *
482 * @note This function moves the values out of the vector.
483 */
484 static Value MakeBooleanArray(std::vector<int>&& value, int64_t time = 0);
485
486 /**
487 * Creates an integer array entry value.
488 *
489 * @param value the value
490 * @param time if nonzero, the creation time to use (instead of the current
491 * time)
492 * @return The entry value
493 */
494 static Value MakeIntegerArray(std::span<const int64_t> value,
495 int64_t time = 0);
496
497 /**
498 * Creates an integer array entry value.
499 *
500 * @param value the value
501 * @param time if nonzero, the creation time to use (instead of the current
502 * time)
503 * @return The entry value
504 */
505 static Value MakeIntegerArray(std::initializer_list<int64_t> value,
506 int64_t time = 0) {
507 return MakeIntegerArray(std::span(value.begin(), value.end()), time);
508 }
509
510 /**
511 * Creates an integer array entry value.
512 *
513 * @param value the value
514 * @param time if nonzero, the creation time to use (instead of the current
515 * time)
516 * @return The entry value
517 *
518 * @note This function moves the values out of the vector.
519 */
520 static Value MakeIntegerArray(std::vector<int64_t>&& value, int64_t time = 0);
521
522 /**
523 * Creates a float array entry value.
524 *
525 * @param value the value
526 * @param time if nonzero, the creation time to use (instead of the current
527 * time)
528 * @return The entry value
529 */
530 static Value MakeFloatArray(std::span<const float> value, int64_t time = 0);
531
532 /**
533 * Creates a float array entry value.
534 *
535 * @param value the value
536 * @param time if nonzero, the creation time to use (instead of the current
537 * time)
538 * @return The entry value
539 */
540 static Value MakeFloatArray(std::initializer_list<float> value,
541 int64_t time = 0) {
542 return MakeFloatArray(std::span(value.begin(), value.end()), time);
543 }
544
545 /**
546 * Creates a float array entry value.
547 *
548 * @param value the value
549 * @param time if nonzero, the creation time to use (instead of the current
550 * time)
551 * @return The entry value
552 *
553 * @note This function moves the values out of the vector.
554 */
555 static Value MakeFloatArray(std::vector<float>&& value, int64_t time = 0);
556
557 /**
558 * Creates a double array entry value.
559 *
560 * @param value the value
561 * @param time if nonzero, the creation time to use (instead of the current
562 * time)
563 * @return The entry value
564 */
565 static Value MakeDoubleArray(std::span<const double> value, int64_t time = 0);
566
567 /**
568 * Creates a double array entry value.
569 *
570 * @param value the value
571 * @param time if nonzero, the creation time to use (instead of the current
572 * time)
573 * @return The entry value
574 */
575 static Value MakeDoubleArray(std::initializer_list<double> value,
576 int64_t time = 0) {
577 return MakeDoubleArray(std::span(value.begin(), value.end()), time);
578 }
579
580 /**
581 * Creates a double array entry value.
582 *
583 * @param value the value
584 * @param time if nonzero, the creation time to use (instead of the current
585 * time)
586 * @return The entry value
587 *
588 * @note This function moves the values out of the vector.
589 */
590 static Value MakeDoubleArray(std::vector<double>&& value, int64_t time = 0);
591
592 /**
593 * Creates a string array entry value.
594 *
595 * @param value the value
596 * @param time if nonzero, the creation time to use (instead of the current
597 * time)
598 * @return The entry value
599 */
600 static Value MakeStringArray(std::span<const std::string> value,
601 int64_t time = 0);
602
603 /**
604 * Creates a string array entry value.
605 *
606 * @param value the value
607 * @param time if nonzero, the creation time to use (instead of the current
608 * time)
609 * @return The entry value
610 */
611 static Value MakeStringArray(std::initializer_list<std::string> value,
612 int64_t time = 0) {
613 return MakeStringArray(std::span(value.begin(), value.end()), time);
614 }
615
616 /**
617 * Creates a string array entry value.
618 *
619 * @param value the value
620 * @param time if nonzero, the creation time to use (instead of the current
621 * time)
622 * @return The entry value
623 *
624 * @note This function moves the values out of the vector.
625 */
626 static Value MakeStringArray(std::vector<std::string>&& value,
627 int64_t time = 0);
628
629 /** @} */
630
631 friend bool operator==(const Value& lhs, const Value& rhs);
632
633 private:
634 NT_Value m_val;
635 std::shared_ptr<void> m_storage;
636};
637
638bool operator==(const Value& lhs, const Value& rhs);
639
640/**
641 * NetworkTable Value alias for similarity with Java.
642 * @ingroup ntcore_cpp_api
643 */
645
646} // namespace nt
A network table entry value.
Definition: NetworkTableValue.h:27
static Value MakeStringArray(std::vector< std::string > &&value, int64_t time=0)
Creates a string array entry value.
static Value MakeBoolean(bool value, int64_t time=0)
Creates a boolean entry value.
Definition: NetworkTableValue.h:307
int64_t server_time() const
Get the creation time of the value, in server time.
Definition: NetworkTableValue.h:77
static Value MakeIntegerArray(std::vector< int64_t > &&value, int64_t time=0)
Creates an integer array entry value.
static Value MakeBooleanArray(std::vector< int > &&value, int64_t time=0)
Creates a boolean array entry value.
static Value MakeFloat(float value, int64_t time=0)
Creates a float entry value.
Definition: NetworkTableValue.h:335
static Value MakeString(T &&value, int64_t time=0)
Creates a string entry value.
Definition: NetworkTableValue.h:382
static Value MakeFloatArray(std::initializer_list< float > value, int64_t time=0)
Creates a float array entry value.
Definition: NetworkTableValue.h:540
static Value MakeBooleanArray(std::initializer_list< int > value, int64_t time=0)
Creates a boolean array entry value.
Definition: NetworkTableValue.h:469
bool IsValid() const
Determine if entry value contains a value or is unassigned.
Definition: NetworkTableValue.h:96
bool IsBooleanArray() const
Determine if entry value contains a boolean array.
Definition: NetworkTableValue.h:145
std::span< const int64_t > GetIntegerArray() const
Get the entry's integer array value.
Definition: NetworkTableValue.h:257
static Value MakeFloatArray(std::span< const float > value, int64_t time=0)
Creates a float array entry value.
bool IsRaw() const
Determine if entry value contains a raw.
Definition: NetworkTableValue.h:138
static Value MakeRaw(std::span< const uint8_t > value, int64_t time=0)
Creates a raw entry value.
Definition: NetworkTableValue.h:399
static Value MakeDoubleArray(std::vector< double > &&value, int64_t time=0)
Creates a double array entry value.
bool IsIntegerArray() const
Determine if entry value contains an integer array.
Definition: NetworkTableValue.h:152
bool IsDouble() const
Determine if entry value contains a double.
Definition: NetworkTableValue.h:124
NT_Type type() const
Get the data type.
Definition: NetworkTableValue.h:42
friend bool operator==(const Value &lhs, const Value &rhs)
static Value MakeIntegerArray(std::span< const int64_t > value, int64_t time=0)
Creates an integer array entry value.
float GetFloat() const
Get the entry's float value.
Definition: NetworkTableValue.h:207
static Value MakeString(std::string_view value, int64_t time=0)
Creates a string entry value.
Definition: NetworkTableValue.h:363
std::span< const float > GetFloatArray() const
Get the entry's float array value.
Definition: NetworkTableValue.h:267
int64_t last_change() const
Get the creation time of the value, in local time.
Definition: NetworkTableValue.h:56
bool IsDoubleArray() const
Determine if entry value contains a double array.
Definition: NetworkTableValue.h:166
static Value MakeBooleanArray(std::span< const int > value, int64_t time=0)
Creates a boolean array entry value.
static Value MakeStringArray(std::initializer_list< std::string > value, int64_t time=0)
Creates a string array entry value.
Definition: NetworkTableValue.h:611
bool IsFloat() const
Determine if entry value contains a float.
Definition: NetworkTableValue.h:117
bool IsStringArray() const
Determine if entry value contains a string array.
Definition: NetworkTableValue.h:173
static Value MakeDoubleArray(std::span< const double > value, int64_t time=0)
Creates a double array entry value.
void SetServerTime(int64_t time)
Set the creation time of the value, in server time.
Definition: NetworkTableValue.h:84
double GetDouble() const
Get the entry's double value.
Definition: NetworkTableValue.h:217
bool IsInteger() const
Determine if entry value contains an integer.
Definition: NetworkTableValue.h:110
const NT_Value & value() const
Get the data value stored.
Definition: NetworkTableValue.h:49
static Value MakeFloatArray(std::vector< float > &&value, int64_t time=0)
Creates a float array entry value.
static Value MakeStringArray(std::span< const std::string > value, int64_t time=0)
Creates a string array entry value.
std::span< const std::string > GetStringArray() const
Get the entry's string array value.
Definition: NetworkTableValue.h:287
static Value MakeDouble(double value, int64_t time=0)
Creates a double entry value.
Definition: NetworkTableValue.h:349
int64_t GetInteger() const
Get the entry's integer value.
Definition: NetworkTableValue.h:197
std::span< const double > GetDoubleArray() const
Get the entry's double array value.
Definition: NetworkTableValue.h:277
std::span< const uint8_t > GetRaw() const
Get the entry's raw value.
Definition: NetworkTableValue.h:237
bool IsBoolean() const
Determine if entry value contains a boolean.
Definition: NetworkTableValue.h:103
bool IsString() const
Determine if entry value contains a string.
Definition: NetworkTableValue.h:131
static Value MakeBooleanArray(std::span< const bool > value, int64_t time=0)
Creates a boolean array entry value.
static Value MakeInteger(int64_t value, int64_t time=0)
Creates an integer entry value.
Definition: NetworkTableValue.h:321
bool GetBoolean() const
Get the entry's boolean value.
Definition: NetworkTableValue.h:187
Value(NT_Type type, int64_t time, int64_t serverTime, const private_init &)
bool IsFloatArray() const
Determine if entry value contains a float array.
Definition: NetworkTableValue.h:159
static Value MakeRaw(T &&value, int64_t time=0)
Creates a raw entry value.
Definition: NetworkTableValue.h:419
std::string_view GetString() const
Get the entry's string value.
Definition: NetworkTableValue.h:227
std::span< const int > GetBooleanArray() const
Get the entry's boolean array value.
Definition: NetworkTableValue.h:247
static Value MakeBooleanArray(std::initializer_list< bool > value, int64_t time=0)
Creates a boolean array entry value.
Definition: NetworkTableValue.h:446
Value(NT_Type type, int64_t time, const private_init &)
static Value MakeDoubleArray(std::initializer_list< double > value, int64_t time=0)
Creates a double array entry value.
Definition: NetworkTableValue.h:575
void SetTime(int64_t time)
Set the local creation time of the value.
Definition: NetworkTableValue.h:70
static Value MakeIntegerArray(std::initializer_list< int64_t > value, int64_t time=0)
Creates an integer array entry value.
Definition: NetworkTableValue.h:505
int64_t time() const
Get the creation time of the value, in local time.
Definition: NetworkTableValue.h:63
Definition: core.h:1240
basic_string_view< char > string_view
Definition: core.h:520
type
Definition: core.h:575
NT_Type
NetworkTables data types.
Definition: ntcore_c.h:49
@ NT_DOUBLE
Definition: ntcore_c.h:52
@ NT_BOOLEAN
Definition: ntcore_c.h:51
@ NT_DOUBLE_ARRAY
Definition: ntcore_c.h:56
@ NT_STRING
Definition: ntcore_c.h:53
@ NT_FLOAT_ARRAY
Definition: ntcore_c.h:62
@ NT_INTEGER
Definition: ntcore_c.h:59
@ NT_BOOLEAN_ARRAY
Definition: ntcore_c.h:55
@ NT_FLOAT
Definition: ntcore_c.h:60
@ NT_STRING_ARRAY
Definition: ntcore_c.h:57
@ NT_INTEGER_ARRAY
Definition: ntcore_c.h:61
@ NT_UNASSIGNED
Definition: ntcore_c.h:50
@ NT_RAW
Definition: ntcore_c.h:54
::int64_t int64_t
Definition: Meta.h:59
::uint8_t uint8_t
Definition: Meta.h:52
NetworkTables (ntcore) namespace.
Definition: ntcore_cpp.h:35
bool operator==(const Value &lhs, const Value &rhs)
NetworkTables Entry Value.
Definition: ntcore_c.h:144
enum NT_Type type
Definition: ntcore_c.h:145
int64_t last_change
Definition: ntcore_c.h:146
int64_t server_time
Definition: ntcore_c.h:147
uint8_t * data
Definition: ntcore_c.h:155
Definition: format.h:1544