WPILibC++ 2023.4.3-108-ge5452e3
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 <concepts>
11#include <initializer_list>
12#include <memory>
13#include <span>
14#include <string>
15#include <string_view>
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 <std::same_as<std::string> T>
381 static Value MakeString(T&& value, int64_t time = 0) {
382 Value val{NT_STRING, time, private_init{}};
383 auto data = std::make_shared<std::string>(std::forward<T>(value));
384 val.m_val.data.v_string.str = const_cast<char*>(data->c_str());
385 val.m_val.data.v_string.len = data->size();
386 val.m_storage = std::move(data);
387 return val;
388 }
389
390 /**
391 * Creates a raw entry value.
392 *
393 * @param value the value
394 * @param time if nonzero, the creation time to use (instead of the current
395 * time)
396 * @return The entry value
397 */
398 static Value MakeRaw(std::span<const uint8_t> value, int64_t time = 0) {
399 Value val{NT_RAW, time, private_init{}};
400 auto data =
401 std::make_shared<std::vector<uint8_t>>(value.begin(), value.end());
402 val.m_val.data.v_raw.data = const_cast<uint8_t*>(data->data());
403 val.m_val.data.v_raw.size = data->size();
404 val.m_storage = std::move(data);
405 return val;
406 }
407
408 /**
409 * Creates a raw entry value.
410 *
411 * @param value the value
412 * @param time if nonzero, the creation time to use (instead of the current
413 * time)
414 * @return The entry value
415 */
416 template <std::same_as<std::vector<uint8_t>> T>
417 static Value MakeRaw(T&& value, int64_t time = 0) {
418 Value val{NT_RAW, time, private_init{}};
419 auto data = std::make_shared<std::vector<uint8_t>>(std::forward<T>(value));
420 val.m_val.data.v_raw.data = const_cast<uint8_t*>(data->data());
421 val.m_val.data.v_raw.size = data->size();
422 val.m_storage = std::move(data);
423 return val;
424 }
425
426 /**
427 * Creates a boolean array entry value.
428 *
429 * @param value the value
430 * @param time if nonzero, the creation time to use (instead of the current
431 * time)
432 * @return The entry value
433 */
434 static Value MakeBooleanArray(std::span<const bool> value, int64_t time = 0);
435
436 /**
437 * Creates a boolean array entry value.
438 *
439 * @param value the value
440 * @param time if nonzero, the creation time to use (instead of the current
441 * time)
442 * @return The entry value
443 */
444 static Value MakeBooleanArray(std::initializer_list<bool> value,
445 int64_t time = 0) {
446 return MakeBooleanArray(std::span(value.begin(), value.end()), time);
447 }
448
449 /**
450 * Creates a boolean array entry value.
451 *
452 * @param value the value
453 * @param time if nonzero, the creation time to use (instead of the current
454 * time)
455 * @return The entry value
456 */
457 static Value MakeBooleanArray(std::span<const int> value, int64_t time = 0);
458
459 /**
460 * Creates a boolean array entry value.
461 *
462 * @param value the value
463 * @param time if nonzero, the creation time to use (instead of the current
464 * time)
465 * @return The entry value
466 */
467 static Value MakeBooleanArray(std::initializer_list<int> value,
468 int64_t time = 0) {
469 return MakeBooleanArray(std::span(value.begin(), value.end()), time);
470 }
471
472 /**
473 * Creates a boolean array entry value.
474 *
475 * @param value the value
476 * @param time if nonzero, the creation time to use (instead of the current
477 * time)
478 * @return The entry value
479 *
480 * @note This function moves the values out of the vector.
481 */
482 static Value MakeBooleanArray(std::vector<int>&& value, int64_t time = 0);
483
484 /**
485 * Creates an integer array entry value.
486 *
487 * @param value the value
488 * @param time if nonzero, the creation time to use (instead of the current
489 * time)
490 * @return The entry value
491 */
492 static Value MakeIntegerArray(std::span<const int64_t> value,
493 int64_t time = 0);
494
495 /**
496 * Creates an integer array entry value.
497 *
498 * @param value the value
499 * @param time if nonzero, the creation time to use (instead of the current
500 * time)
501 * @return The entry value
502 */
503 static Value MakeIntegerArray(std::initializer_list<int64_t> value,
504 int64_t time = 0) {
505 return MakeIntegerArray(std::span(value.begin(), value.end()), time);
506 }
507
508 /**
509 * Creates an integer array entry value.
510 *
511 * @param value the value
512 * @param time if nonzero, the creation time to use (instead of the current
513 * time)
514 * @return The entry value
515 *
516 * @note This function moves the values out of the vector.
517 */
518 static Value MakeIntegerArray(std::vector<int64_t>&& value, int64_t time = 0);
519
520 /**
521 * Creates a float array entry value.
522 *
523 * @param value the value
524 * @param time if nonzero, the creation time to use (instead of the current
525 * time)
526 * @return The entry value
527 */
528 static Value MakeFloatArray(std::span<const float> value, int64_t time = 0);
529
530 /**
531 * Creates a float array entry value.
532 *
533 * @param value the value
534 * @param time if nonzero, the creation time to use (instead of the current
535 * time)
536 * @return The entry value
537 */
538 static Value MakeFloatArray(std::initializer_list<float> value,
539 int64_t time = 0) {
540 return MakeFloatArray(std::span(value.begin(), value.end()), time);
541 }
542
543 /**
544 * Creates a float array entry value.
545 *
546 * @param value the value
547 * @param time if nonzero, the creation time to use (instead of the current
548 * time)
549 * @return The entry value
550 *
551 * @note This function moves the values out of the vector.
552 */
553 static Value MakeFloatArray(std::vector<float>&& value, int64_t time = 0);
554
555 /**
556 * Creates a double array entry value.
557 *
558 * @param value the value
559 * @param time if nonzero, the creation time to use (instead of the current
560 * time)
561 * @return The entry value
562 */
563 static Value MakeDoubleArray(std::span<const double> value, int64_t time = 0);
564
565 /**
566 * Creates a double array entry value.
567 *
568 * @param value the value
569 * @param time if nonzero, the creation time to use (instead of the current
570 * time)
571 * @return The entry value
572 */
573 static Value MakeDoubleArray(std::initializer_list<double> value,
574 int64_t time = 0) {
575 return MakeDoubleArray(std::span(value.begin(), value.end()), time);
576 }
577
578 /**
579 * Creates a double array entry value.
580 *
581 * @param value the value
582 * @param time if nonzero, the creation time to use (instead of the current
583 * time)
584 * @return The entry value
585 *
586 * @note This function moves the values out of the vector.
587 */
588 static Value MakeDoubleArray(std::vector<double>&& value, int64_t time = 0);
589
590 /**
591 * Creates a string array entry value.
592 *
593 * @param value the value
594 * @param time if nonzero, the creation time to use (instead of the current
595 * time)
596 * @return The entry value
597 */
598 static Value MakeStringArray(std::span<const std::string> value,
599 int64_t time = 0);
600
601 /**
602 * Creates a string array entry value.
603 *
604 * @param value the value
605 * @param time if nonzero, the creation time to use (instead of the current
606 * time)
607 * @return The entry value
608 */
609 static Value MakeStringArray(std::initializer_list<std::string> value,
610 int64_t time = 0) {
611 return MakeStringArray(std::span(value.begin(), value.end()), time);
612 }
613
614 /**
615 * Creates a string array entry value.
616 *
617 * @param value the value
618 * @param time if nonzero, the creation time to use (instead of the current
619 * time)
620 * @return The entry value
621 *
622 * @note This function moves the values out of the vector.
623 */
624 static Value MakeStringArray(std::vector<std::string>&& value,
625 int64_t time = 0);
626
627 /** @} */
628
629 friend bool operator==(const Value& lhs, const Value& rhs);
630
631 private:
632 NT_Value m_val;
633 std::shared_ptr<void> m_storage;
634};
635
636bool operator==(const Value& lhs, const Value& rhs);
637
638/**
639 * NetworkTable Value alias for similarity with Java.
640 * @ingroup ntcore_cpp_api
641 */
643
644} // 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:381
static Value MakeFloatArray(std::initializer_list< float > value, int64_t time=0)
Creates a float array entry value.
Definition: NetworkTableValue.h:538
static Value MakeBooleanArray(std::initializer_list< int > value, int64_t time=0)
Creates a boolean array entry value.
Definition: NetworkTableValue.h:467
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:398
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:609
bool IsFloat() const
Determine if entry value contains a float.
Definition: NetworkTableValue.h:117
static Value MakeRaw(T &&value, int64_t time=0)
Creates a raw entry value.
Definition: NetworkTableValue.h:417
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
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:444
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:573
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:503
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: Topic.inc:15
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:1552