WPILibC++ 2024.1.1-beta-4
NetworkTable.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 <functional>
8#include <memory>
9#include <span>
10#include <string>
11#include <string_view>
12#include <utility>
13#include <vector>
14
15#include <wpi/StringMap.h>
16#include <wpi/mutex.h>
18#include <wpi/struct/Struct.h>
19
21#include "networktables/Topic.h"
22#include "ntcore_c.h"
23
24namespace nt {
25
26class BooleanArrayTopic;
27class BooleanTopic;
28class DoubleArrayTopic;
29class DoubleTopic;
30class FloatArrayTopic;
31class FloatTopic;
32class IntegerArrayTopic;
33class IntegerTopic;
34class NetworkTableInstance;
35template <wpi::ProtobufSerializable T>
36class ProtobufTopic;
37class RawTopic;
38class StringArrayTopic;
39class StringTopic;
40template <wpi::StructSerializable T>
41class StructArrayTopic;
42template <wpi::StructSerializable T>
43class StructTopic;
44class Topic;
45
46/**
47 * @defgroup ntcore_cpp_api ntcore C++ object-oriented API
48 *
49 * Recommended interface for C++, identical to Java API.
50 */
51
52/**
53 * A network table that knows its subtable path.
54 * @ingroup ntcore_cpp_api
55 */
56class NetworkTable final {
57 private:
58 NT_Inst m_inst;
59 std::string m_path;
60 mutable wpi::mutex m_mutex;
61 mutable wpi::StringMap<NT_Entry> m_entries;
62
63 struct private_init {};
65
66 public:
67 /**
68 * Gets the "base name" of a key. For example, "/foo/bar" becomes "bar".
69 * If the key has a trailing slash, returns an empty string.
70 *
71 * @param key key
72 * @return base name
73 */
75
76 /**
77 * Normalizes an network table key to contain no consecutive slashes and
78 * optionally start with a leading slash. For example:
79 *
80 * <pre><code>
81 * normalizeKey("/foo/bar", true) == "/foo/bar"
82 * normalizeKey("foo/bar", true) == "/foo/bar"
83 * normalizeKey("/foo/bar", false) == "foo/bar"
84 * normalizeKey("foo//bar", false) == "foo/bar"
85 * </code></pre>
86 *
87 * @param key the key to normalize
88 * @param withLeadingSlash whether or not the normalized key should begin
89 * with a leading slash
90 * @return normalized key
91 */
92 static std::string NormalizeKey(std::string_view key,
93 bool withLeadingSlash = true);
94
97 bool withLeadingSlash = true);
98
99 /**
100 * Gets a list of the names of all the super tables of a given key. For
101 * example, the key "/foo/bar/baz" has a hierarchy of "/", "/foo",
102 * "/foo/bar", and "/foo/bar/baz".
103 *
104 * @param key the key
105 * @return List of super tables
106 */
107 static std::vector<std::string> GetHierarchy(std::string_view key);
108
109 /**
110 * Constructor. Use NetworkTableInstance::GetTable() or GetSubTable()
111 * instead.
112 */
113 NetworkTable(NT_Inst inst, std::string_view path, const private_init&);
115
116 /**
117 * Gets the instance for the table.
118 *
119 * @return Instance
120 */
122
123 /**
124 * The path separator for sub-tables and keys
125 */
126 static constexpr char PATH_SEPARATOR_CHAR = '/';
127
128 /**
129 * Gets the entry for a subkey.
130 *
131 * @param key the key name
132 * @return Network table entry.
133 */
135
136 /**
137 * Get (generic) topic.
138 *
139 * @param name topic name
140 * @return Topic
141 */
143
144 /**
145 * Get boolean topic.
146 *
147 * @param name topic name
148 * @return BooleanTopic
149 */
151
152 /**
153 * Get integer topic.
154 *
155 * @param name topic name
156 * @return IntegerTopic
157 */
159
160 /**
161 * Get float topic.
162 *
163 * @param name topic name
164 * @return FloatTopic
165 */
167
168 /**
169 * Get double topic.
170 *
171 * @param name topic name
172 * @return DoubleTopic
173 */
175
176 /**
177 * Get String topic.
178 *
179 * @param name topic name
180 * @return StringTopic
181 */
183
184 /**
185 * Get raw topic.
186 *
187 * @param name topic name
188 * @return BooleanArrayTopic
189 */
191
192 /**
193 * Get boolean[] topic.
194 *
195 * @param name topic name
196 * @return BooleanArrayTopic
197 */
199
200 /**
201 * Get integer[] topic.
202 *
203 * @param name topic name
204 * @return IntegerArrayTopic
205 */
207
208 /**
209 * Get float[] topic.
210 *
211 * @param name topic name
212 * @return FloatArrayTopic
213 */
215
216 /**
217 * Get double[] topic.
218 *
219 * @param name topic name
220 * @return DoubleArrayTopic
221 */
223
224 /**
225 * Get String[] topic.
226 *
227 * @param name topic name
228 * @return StringArrayTopic
229 */
231
232 /**
233 * Gets a protobuf serialized value topic.
234 *
235 * @param name topic name
236 * @return Topic
237 */
238 template <wpi::ProtobufSerializable T>
241 }
242
243 /**
244 * Gets a raw struct serialized value topic.
245 *
246 * @param name topic name
247 * @return Topic
248 */
249 template <wpi::StructSerializable T>
252 }
253
254 /**
255 * Gets a raw struct serialized array topic.
256 *
257 * @param name topic name
258 * @return Topic
259 */
260 template <wpi::StructSerializable T>
263 }
264
265 /**
266 * Returns the table at the specified key. If there is no table at the
267 * specified key, it will create a new table
268 *
269 * @param key the key name
270 * @return the networktable to be returned
271 */
272 std::shared_ptr<NetworkTable> GetSubTable(std::string_view key) const;
273
274 /**
275 * Determines whether the given key is in this table.
276 *
277 * @param key the key to search for
278 * @return true if the table as a value assigned to the given key
279 */
281
282 /**
283 * Determines whether there exists a non-empty subtable for this key
284 * in this table.
285 *
286 * @param key the key to search for
287 * @return true if there is a subtable with the key which contains at least
288 * one key/subtable of its own
289 */
291
292 /**
293 * Gets topic information for all keys in the table (not including
294 * sub-tables).
295 *
296 * @param types bitmask of types; 0 is treated as a "don't care".
297 * @return topic information for keys currently in the table
298 */
299 std::vector<TopicInfo> GetTopicInfo(int types = 0) const;
300
301 /**
302 * Gets all topics in the table (not including sub-tables).
303 *
304 * @param types bitmask of types; 0 is treated as a "don't care".
305 * @return topic for keys currently in the table
306 */
307 std::vector<Topic> GetTopics(int types = 0) const;
308
309 /**
310 * Gets all keys in the table (not including sub-tables).
311 *
312 * @param types bitmask of types; 0 is treated as a "don't care".
313 * @return keys currently in the table
314 */
315 std::vector<std::string> GetKeys(int types = 0) const;
316
317 /**
318 * Gets the names of all subtables in the table.
319 *
320 * @return subtables currently in the table
321 */
322 std::vector<std::string> GetSubTables() const;
323
324 /**
325 * Makes a key's value persistent through program restarts.
326 *
327 * @param key the key to make persistent
328 */
330
331 /**
332 * Stop making a key's value persistent through program restarts.
333 * The key cannot be null.
334 *
335 * @param key the key name
336 */
338
339 /**
340 * Returns whether the value is persistent through program restarts.
341 * The key cannot be null.
342 *
343 * @param key the key name
344 */
346
347 /**
348 * Put a number in the table
349 *
350 * @param key the key to be assigned to
351 * @param value the value that will be assigned
352 * @return False if the table key already exists with a different type
353 */
354 bool PutNumber(std::string_view key, double value);
355
356 /**
357 * Gets the current value in the table, setting it if it does not exist.
358 *
359 * @param key the key
360 * @param defaultValue the default value to set if key doesn't exist.
361 * @returns False if the table key exists with a different type
362 */
363 bool SetDefaultNumber(std::string_view key, double defaultValue);
364
365 /**
366 * Gets the number associated with the given name.
367 *
368 * @param key the key to look up
369 * @param defaultValue the value to be returned if no value is found
370 * @return the value associated with the given key or the given default value
371 * if there is no value associated with the key
372 */
373 double GetNumber(std::string_view key, double defaultValue) const;
374
375 /**
376 * Put a string in the table
377 *
378 * @param key the key to be assigned to
379 * @param value the value that will be assigned
380 * @return False if the table key already exists with a different type
381 */
383
384 /**
385 * Gets the current value in the table, setting it if it does not exist.
386 *
387 * @param key the key
388 * @param defaultValue the default value to set if key doesn't exist.
389 * @returns False if the table key exists with a different type
390 */
392
393 /**
394 * Gets the string associated with the given name. If the key does not
395 * exist or is of different type, it will return the default value.
396 *
397 * @param key the key to look up
398 * @param defaultValue the value to be returned if no value is found
399 * @return the value associated with the given key or the given default value
400 * if there is no value associated with the key
401 */
403 std::string_view defaultValue) const;
404
405 /**
406 * Put a boolean in the table
407 *
408 * @param key the key to be assigned to
409 * @param value the value that will be assigned
410 * @return False if the table key already exists with a different type
411 */
412 bool PutBoolean(std::string_view key, bool value);
413
414 /**
415 * Gets the current value in the table, setting it if it does not exist.
416 *
417 * @param key the key
418 * @param defaultValue the default value to set if key doesn't exist.
419 * @returns False if the table key exists with a different type
420 */
421 bool SetDefaultBoolean(std::string_view key, bool defaultValue);
422
423 /**
424 * Gets the boolean associated with the given name. If the key does not
425 * exist or is of different type, it will return the default value.
426 *
427 * @param key the key to look up
428 * @param defaultValue the value to be returned if no value is found
429 * @return the value associated with the given key or the given default value
430 * if there is no value associated with the key
431 */
432 bool GetBoolean(std::string_view key, bool defaultValue) const;
433
434 /**
435 * Put a boolean array in the table
436 *
437 * @param key the key to be assigned to
438 * @param value the value that will be assigned
439 * @return False if the table key already exists with a different type
440 *
441 * @note The array must be of int's rather than of bool's because
442 * std::vector<bool> is special-cased in C++. 0 is false, any
443 * non-zero value is true.
444 */
445 bool PutBooleanArray(std::string_view key, std::span<const int> value);
446
447 /**
448 * Gets the current value in the table, setting it if it does not exist.
449 *
450 * @param key the key
451 * @param defaultValue the default value to set if key doesn't exist.
452 * @return False if the table key exists with a different type
453 */
455 std::span<const int> defaultValue);
456
457 /**
458 * Returns the boolean array the key maps to. If the key does not exist or is
459 * of different type, it will return the default value.
460 *
461 * @param key the key to look up
462 * @param defaultValue the value to be returned if no value is found
463 * @return the value associated with the given key or the given default value
464 * if there is no value associated with the key
465 *
466 * @note This makes a copy of the array. If the overhead of this is a
467 * concern, use GetValue() instead.
468 *
469 * @note The returned array is std::vector<int> instead of std::vector<bool>
470 * because std::vector<bool> is special-cased in C++. 0 is false, any
471 * non-zero value is true.
472 */
473 std::vector<int> GetBooleanArray(std::string_view key,
474 std::span<const int> defaultValue) const;
475
476 /**
477 * Put a number array in the table
478 *
479 * @param key the key to be assigned to
480 * @param value the value that will be assigned
481 * @return False if the table key already exists with a different type
482 */
483 bool PutNumberArray(std::string_view key, std::span<const double> value);
484
485 /**
486 * Gets the current value in the table, setting it if it does not exist.
487 *
488 * @param key the key
489 * @param defaultValue the default value to set if key doesn't exist.
490 * @returns False if the table key exists with a different type
491 */
493 std::span<const double> defaultValue);
494
495 /**
496 * Returns the number array the key maps to. If the key does not exist or is
497 * of different type, it will return the default value.
498 *
499 * @param key the key to look up
500 * @param defaultValue the value to be returned if no value is found
501 * @return the value associated with the given key or the given default value
502 * if there is no value associated with the key
503 *
504 * @note This makes a copy of the array. If the overhead of this is a
505 * concern, use GetValue() instead.
506 */
507 std::vector<double> GetNumberArray(
508 std::string_view key, std::span<const double> defaultValue) const;
509
510 /**
511 * Put a string array in the table
512 *
513 * @param key the key to be assigned to
514 * @param value the value that will be assigned
515 * @return False if the table key already exists with a different type
516 */
517 bool PutStringArray(std::string_view key, std::span<const std::string> value);
518
519 /**
520 * Gets the current value in the table, setting it if it does not exist.
521 *
522 * @param key the key
523 * @param defaultValue the default value to set if key doesn't exist.
524 * @returns False if the table key exists with a different type
525 */
527 std::span<const std::string> defaultValue);
528
529 /**
530 * Returns the string array the key maps to. If the key does not exist or is
531 * of different type, it will return the default value.
532 *
533 * @param key the key to look up
534 * @param defaultValue the value to be returned if no value is found
535 * @return the value associated with the given key or the given default value
536 * if there is no value associated with the key
537 *
538 * @note This makes a copy of the array. If the overhead of this is a
539 * concern, use GetValue() instead.
540 */
541 std::vector<std::string> GetStringArray(
542 std::string_view key, std::span<const std::string> defaultValue) const;
543
544 /**
545 * Put a raw value (byte array) in the table
546 *
547 * @param key the key to be assigned to
548 * @param value the value that will be assigned
549 * @return False if the table key already exists with a different type
550 */
551 bool PutRaw(std::string_view key, std::span<const uint8_t> value);
552
553 /**
554 * Gets the current value in the table, setting it if it does not exist.
555 *
556 * @param key the key
557 * @param defaultValue the default value to set if key doesn't exist.
558 * @return False if the table key exists with a different type
559 */
561 std::span<const uint8_t> defaultValue);
562
563 /**
564 * Returns the raw value (byte array) the key maps to. If the key does not
565 * exist or is of different type, it will return the default value.
566 *
567 * @param key the key to look up
568 * @param defaultValue the value to be returned if no value is found
569 * @return the value associated with the given key or the given default value
570 * if there is no value associated with the key
571 *
572 * @note This makes a copy of the raw contents. If the overhead of this is a
573 * concern, use GetValue() instead.
574 */
575 std::vector<uint8_t> GetRaw(std::string_view key,
576 std::span<const uint8_t> defaultValue) const;
577
578 /**
579 * Put a value in the table
580 *
581 * @param key the key to be assigned to
582 * @param value the value that will be assigned
583 * @return False if the table key already exists with a different type
584 */
585 bool PutValue(std::string_view key, const Value& value);
586
587 /**
588 * Gets the current value in the table, setting it if it does not exist.
589 *
590 * @param key the key
591 * @param defaultValue the default value to set if key doesn't exist.
592 * @return False if the table key exists with a different type
593 */
594 bool SetDefaultValue(std::string_view key, const Value& defaultValue);
595
596 /**
597 * Gets the value associated with a key as an object
598 *
599 * @param key the key of the value to look up
600 * @return the value associated with the given key, or nullptr if the key
601 * does not exist
602 */
604
605 /**
606 * Gets the full path of this table. Does not include the trailing "/".
607 *
608 * @return The path (e.g "", "/foo").
609 */
611
612 /**
613 * Called when an event occurs on a topic in a {@link NetworkTable}.
614 *
615 * @param table the table the topic exists in
616 * @param key the key associated with the topic that changed
617 * @param event the event
618 */
619 using TableEventListener = std::function<void(
620 NetworkTable* table, std::string_view key, const Event& event)>;
621
622 /**
623 * Listen to topics only within this table.
624 *
625 * @param eventMask Bitmask of EventFlags values
626 * @param listener listener to add
627 * @return Listener handle
628 */
630
631 /**
632 * Listen to a single key.
633 *
634 * @param key the key name
635 * @param eventMask Bitmask of EventFlags values
636 * @param listener listener to add
637 * @return Listener handle
638 */
640 TableEventListener listener);
641
642 /**
643 * Called when a new table is created within a NetworkTable.
644 *
645 * @param parent the parent of the table
646 * @param name the name of the new table
647 * @param table the new table
648 */
650 std::function<void(NetworkTable* parent, std::string_view name,
651 std::shared_ptr<NetworkTable> table)>;
652
653 /**
654 * Listen for sub-table creation. This calls the listener once for each newly
655 * created sub-table. It immediately calls the listener for any existing
656 * sub-tables.
657 *
658 * @param listener listener to add
659 * @return Listener handle
660 */
662
663 /**
664 * Remove a listener.
665 *
666 * @param listener listener handle
667 */
669};
670
671} // namespace nt
This file defines the StringMap class.
NetworkTables BooleanArray topic.
Definition: BooleanArrayTopic.h:266
NetworkTables Boolean topic.
Definition: BooleanTopic.h:213
NetworkTables DoubleArray topic.
Definition: DoubleArrayTopic.h:266
NetworkTables Double topic.
Definition: DoubleTopic.h:213
NetworkTables event.
Definition: ntcore_cpp.h:217
NetworkTables FloatArray topic.
Definition: FloatArrayTopic.h:266
NetworkTables Float topic.
Definition: FloatTopic.h:213
NetworkTables IntegerArray topic.
Definition: IntegerArrayTopic.h:266
NetworkTables Integer topic.
Definition: IntegerTopic.h:213
NetworkTables Entry.
Definition: NetworkTableEntry.h:34
A network table that knows its subtable path.
Definition: NetworkTable.h:56
std::vector< Topic > GetTopics(int types=0) const
Gets all topics in the table (not including sub-tables).
bool PutNumber(std::string_view key, double value)
Put a number in the table.
std::vector< double > GetNumberArray(std::string_view key, std::span< const double > defaultValue) const
Returns the number array the key maps to.
Value GetValue(std::string_view key) const
Gets the value associated with a key as an object.
bool SetDefaultBooleanArray(std::string_view key, std::span< const int > defaultValue)
Gets the current value in the table, setting it if it does not exist.
bool SetDefaultValue(std::string_view key, const Value &defaultValue)
Gets the current value in the table, setting it if it does not exist.
FloatTopic GetFloatTopic(std::string_view name) const
Get float topic.
std::vector< uint8_t > GetRaw(std::string_view key, std::span< const uint8_t > defaultValue) const
Returns the raw value (byte array) the key maps to.
static std::vector< std::string > GetHierarchy(std::string_view key)
Gets a list of the names of all the super tables of a given key.
std::vector< int > GetBooleanArray(std::string_view key, std::span< const int > defaultValue) const
Returns the boolean array the key maps to.
bool PutNumberArray(std::string_view key, std::span< const double > value)
Put a number array in the table.
StringTopic GetStringTopic(std::string_view name) const
Get String topic.
std::string_view GetPath() const
Gets the full path of this table.
std::vector< std::string > GetStringArray(std::string_view key, std::span< const std::string > defaultValue) const
Returns the string array the key maps to.
bool SetDefaultBoolean(std::string_view key, bool defaultValue)
Gets the current value in the table, setting it if it does not exist.
static std::string NormalizeKey(std::string_view key, bool withLeadingSlash=true)
Normalizes an network table key to contain no consecutive slashes and optionally start with a leading...
std::vector< TopicInfo > GetTopicInfo(int types=0) const
Gets topic information for all keys in the table (not including sub-tables).
bool SetDefaultRaw(std::string_view key, std::span< const uint8_t > defaultValue)
Gets the current value in the table, setting it if it does not exist.
std::shared_ptr< NetworkTable > GetSubTable(std::string_view key) const
Returns the table at the specified key.
bool ContainsKey(std::string_view key) const
Determines whether the given key is in this table.
BooleanTopic GetBooleanTopic(std::string_view name) const
Get boolean topic.
std::function< void(NetworkTable *parent, std::string_view name, std::shared_ptr< NetworkTable > table)> SubTableListener
Called when a new table is created within a NetworkTable.
Definition: NetworkTable.h:651
bool PutBoolean(std::string_view key, bool value)
Put a boolean in the table.
bool ContainsSubTable(std::string_view key) const
Determines whether there exists a non-empty subtable for this key in this table.
std::function< void(NetworkTable *table, std::string_view key, const Event &event)> TableEventListener
Called when an event occurs on a topic in a NetworkTable.
Definition: NetworkTable.h:620
bool PutString(std::string_view key, std::string_view value)
Put a string in the table.
StructTopic< T > GetStructTopic(std::string_view name) const
Gets a raw struct serialized value topic.
Definition: NetworkTable.h:250
bool IsPersistent(std::string_view key) const
Returns whether the value is persistent through program restarts.
bool SetDefaultNumber(std::string_view key, double defaultValue)
Gets the current value in the table, setting it if it does not exist.
bool SetDefaultStringArray(std::string_view key, std::span< const std::string > defaultValue)
Gets the current value in the table, setting it if it does not exist.
bool PutRaw(std::string_view key, std::span< const uint8_t > value)
Put a raw value (byte array) in the table.
double GetNumber(std::string_view key, double defaultValue) const
Gets the number associated with the given name.
StructArrayTopic< T > GetStructArrayTopic(std::string_view name) const
Gets a raw struct serialized array topic.
Definition: NetworkTable.h:261
RawTopic GetRawTopic(std::string_view name) const
Get raw topic.
void RemoveListener(NT_Listener listener)
Remove a listener.
StringArrayTopic GetStringArrayTopic(std::string_view name) const
Get String[] topic.
bool PutStringArray(std::string_view key, std::span< const std::string > value)
Put a string array in the table.
bool PutValue(std::string_view key, const Value &value)
Put a value in the table.
IntegerArrayTopic GetIntegerArrayTopic(std::string_view name) const
Get integer[] topic.
bool PutBooleanArray(std::string_view key, std::span< const int > value)
Put a boolean array in the table.
NetworkTableEntry GetEntry(std::string_view key) const
Gets the entry for a subkey.
BooleanArrayTopic GetBooleanArrayTopic(std::string_view name) const
Get boolean[] topic.
static constexpr char PATH_SEPARATOR_CHAR
The path separator for sub-tables and keys.
Definition: NetworkTable.h:126
NetworkTableInstance GetInstance() const
Gets the instance for the table.
Topic GetTopic(std::string_view name) const
Get (generic) topic.
IntegerTopic GetIntegerTopic(std::string_view name) const
Get integer topic.
bool GetBoolean(std::string_view key, bool defaultValue) const
Gets the boolean associated with the given name.
std::string GetString(std::string_view key, std::string_view defaultValue) const
Gets the string associated with the given name.
DoubleArrayTopic GetDoubleArrayTopic(std::string_view name) const
Get double[] topic.
static std::string_view BasenameKey(std::string_view key)
Gets the "base name" of a key.
std::vector< std::string > GetKeys(int types=0) const
Gets all keys in the table (not including sub-tables).
DoubleTopic GetDoubleTopic(std::string_view name) const
Get double topic.
std::vector< std::string > GetSubTables() const
Gets the names of all subtables in the table.
NT_Listener AddListener(std::string_view key, int eventMask, TableEventListener listener)
Listen to a single key.
NetworkTable(NT_Inst inst, std::string_view path, const private_init &)
Constructor.
void SetPersistent(std::string_view key)
Makes a key's value persistent through program restarts.
NT_Listener AddListener(int eventMask, TableEventListener listener)
Listen to topics only within this table.
NT_Listener AddSubTableListener(SubTableListener listener)
Listen for sub-table creation.
bool SetDefaultString(std::string_view key, std::string_view defaultValue)
Gets the current value in the table, setting it if it does not exist.
ProtobufTopic< T > GetProtobufTopic(std::string_view name) const
Gets a protobuf serialized value topic.
Definition: NetworkTable.h:239
void ClearPersistent(std::string_view key)
Stop making a key's value persistent through program restarts.
bool SetDefaultNumberArray(std::string_view key, std::span< const double > defaultValue)
Gets the current value in the table, setting it if it does not exist.
FloatArrayTopic GetFloatArrayTopic(std::string_view name) const
Get float[] topic.
static std::string_view NormalizeKey(std::string_view key, wpi::SmallVectorImpl< char > &buf, bool withLeadingSlash=true)
NetworkTables Instance.
Definition: NetworkTableInstance.h:68
NetworkTables protobuf-encoded value topic.
Definition: ProtobufTopic.h:337
NetworkTables Raw topic.
Definition: RawTopic.h:266
NetworkTables StringArray topic.
Definition: StringArrayTopic.h:213
NetworkTables String topic.
Definition: StringTopic.h:268
NetworkTables struct-encoded value array topic.
Definition: StructArrayTopic.h:395
NetworkTables struct-encoded value topic.
Definition: StructTopic.h:326
NetworkTables Topic.
Definition: Topic.h:28
A network table entry value.
Definition: NetworkTableValue.h:32
basic_string_view< char > string_view
Definition: core.h:501
NT_Handle NT_Listener
Definition: ntcore_c.h:37
NT_Handle NT_Inst
Definition: ntcore_c.h:36
NetworkTables (ntcore) namespace.
Definition: MultiSubscriber.h:13
constexpr const char * name(const T &)
::std::mutex mutex
Definition: mutex.h:17