2015-07-23 01:23:09 -07:00
|
|
|
#ifndef _NETWORKTABLE_H_
|
|
|
|
|
#define _NETWORKTABLE_H_
|
|
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
#include "tables/ITable.h"
|
|
|
|
|
|
|
|
|
|
class NetworkTable : public ITable {
|
|
|
|
|
private:
|
|
|
|
|
struct private_init {};
|
|
|
|
|
|
|
|
|
|
std::string m_path;
|
2015-08-03 01:23:42 -07:00
|
|
|
typedef std::pair<ITableListener*, unsigned int> Listener;
|
|
|
|
|
std::vector<Listener> m_listeners;
|
2015-07-23 01:23:09 -07:00
|
|
|
|
|
|
|
|
static std::string s_ip_address;
|
|
|
|
|
static bool s_client;
|
|
|
|
|
static bool s_running;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
NetworkTable(llvm::StringRef path, const private_init&);
|
|
|
|
|
virtual ~NetworkTable();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The path separator for sub-tables and keys
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
static const char PATH_SEPARATOR_CHAR;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
static void Initialize();
|
|
|
|
|
static void Shutdown();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* set that network tables should be a client
|
|
|
|
|
* This must be called before initalize or GetTable
|
|
|
|
|
*/
|
|
|
|
|
static void SetClientMode();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* set that network tables should be a server
|
|
|
|
|
* This must be called before initalize or GetTable
|
|
|
|
|
*/
|
|
|
|
|
static void SetServerMode();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* set the team the robot is configured for (this will set the ip address that
|
|
|
|
|
* network tables will connect to in client mode)
|
|
|
|
|
* This must be called before initalize or GetTable
|
|
|
|
|
* @param team the team number
|
|
|
|
|
*/
|
|
|
|
|
static void SetTeam(int team);
|
|
|
|
|
/**
|
|
|
|
|
* @param address the adress that network tables will connect to in client
|
|
|
|
|
* mode
|
|
|
|
|
*/
|
|
|
|
|
static void SetIPAddress(llvm::StringRef address);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Gets the table with the specified key. If the table does not exist, a new
|
|
|
|
|
*table will be created.<br>
|
|
|
|
|
* This will automatically initialize network tables if it has not been
|
|
|
|
|
*already
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key name
|
|
|
|
|
* @return the network table requested
|
|
|
|
|
*/
|
|
|
|
|
static std::shared_ptr<NetworkTable> GetTable(llvm::StringRef key);
|
|
|
|
|
|
|
|
|
|
void AddTableListener(ITableListener* listener);
|
|
|
|
|
void AddTableListener(ITableListener* listener, bool immediateNotify);
|
|
|
|
|
void AddTableListener(llvm::StringRef key, ITableListener* listener,
|
|
|
|
|
bool immediateNotify);
|
|
|
|
|
void RemoveTableListener(ITableListener* listener);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the table at the specified key. If there is no table at the
|
|
|
|
|
* specified key, it will create a new table
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key name
|
|
|
|
|
* @return the networktable to be returned
|
|
|
|
|
*/
|
2015-07-23 21:46:30 -07:00
|
|
|
std::shared_ptr<ITable> GetSubTable(llvm::StringRef key) const;
|
2015-07-23 01:23:09 -07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks the table and tells if it contains the specified key
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key to be checked
|
|
|
|
|
*/
|
2015-07-23 21:46:30 -07:00
|
|
|
bool ContainsKey(llvm::StringRef key) const;
|
2015-07-23 01:23:09 -07:00
|
|
|
|
2015-07-23 21:46:30 -07:00
|
|
|
bool ContainsSubTable(llvm::StringRef key) const;
|
2015-07-23 01:23:09 -07:00
|
|
|
|
2015-07-23 21:53:33 -07:00
|
|
|
/**
|
|
|
|
|
* Makes a key's value persistent through program restarts.
|
|
|
|
|
*
|
|
|
|
|
* @param key the key to make persistent
|
|
|
|
|
*/
|
|
|
|
|
void Persist(llvm::StringRef key);
|
|
|
|
|
|
2015-07-23 01:23:09 -07:00
|
|
|
/**
|
|
|
|
|
* Maps the specified key to the specified value in this table. The key can
|
|
|
|
|
* not be null. The value can be retrieved by calling the get method with a
|
|
|
|
|
* key that is equal to the original key.
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key
|
|
|
|
|
* @param value
|
|
|
|
|
* the value
|
|
|
|
|
*/
|
|
|
|
|
void PutNumber(llvm::StringRef key, double value);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the key that the name maps to. If the key is null, it will return
|
|
|
|
|
* the default value
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key name
|
|
|
|
|
* @param defaultValue
|
|
|
|
|
* the default value if the key is null
|
|
|
|
|
* @return the key
|
|
|
|
|
*/
|
2015-07-23 21:46:30 -07:00
|
|
|
double GetNumber(llvm::StringRef key, double defaultValue) const;
|
2015-07-23 01:23:09 -07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Maps the specified key to the specified value in this table. The key can
|
|
|
|
|
* not be null. The value can be retrieved by calling the get method with a
|
|
|
|
|
* key that is equal to the original key.
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key
|
|
|
|
|
* @param value
|
|
|
|
|
* the value
|
|
|
|
|
*/
|
|
|
|
|
void PutString(llvm::StringRef key, llvm::StringRef value);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the key that the name maps to. If the key is null, it will return
|
|
|
|
|
* the default value
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key name
|
|
|
|
|
* @param defaultValue
|
|
|
|
|
* the default value if the key is null
|
|
|
|
|
* @return the key
|
|
|
|
|
*/
|
2015-07-23 21:46:30 -07:00
|
|
|
std::string GetString(llvm::StringRef key,
|
|
|
|
|
llvm::StringRef defaultValue) const;
|
2015-07-23 01:23:09 -07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Maps the specified key to the specified value in this table. The key can
|
|
|
|
|
* not be null. The value can be retrieved by calling the get method with a
|
|
|
|
|
* key that is equal to the original key.
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key
|
|
|
|
|
* @param value
|
|
|
|
|
* the value
|
|
|
|
|
*/
|
|
|
|
|
void PutBoolean(llvm::StringRef key, bool value);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the key that the name maps to. If the key is null, it will return
|
|
|
|
|
* the default value
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key name
|
|
|
|
|
* @param defaultValue
|
|
|
|
|
* the default value if the key is null
|
|
|
|
|
* @return the key
|
|
|
|
|
*/
|
2015-07-23 21:46:30 -07:00
|
|
|
bool GetBoolean(llvm::StringRef key, bool defaultValue) const;
|
2015-07-23 01:23:09 -07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Maps the specified key to the specified value in this table. The key can
|
|
|
|
|
* not be null. The value can be retrieved by calling the get method with a
|
|
|
|
|
* key that is equal to the original key.
|
|
|
|
|
*
|
|
|
|
|
* @param key the key name
|
|
|
|
|
* @param value the value to be put
|
|
|
|
|
*/
|
|
|
|
|
void PutValue(llvm::StringRef key, std::shared_ptr<nt::Value> value);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns the key that the name maps to.
|
|
|
|
|
* NOTE: If the value is a double, it will return a Double object,
|
|
|
|
|
* not a primitive. To get the primitive, use GetDouble
|
|
|
|
|
*
|
|
|
|
|
* @param key
|
|
|
|
|
* the key name
|
|
|
|
|
* @return the key, or nullptr if the key is not defined
|
|
|
|
|
*/
|
2015-07-23 21:46:30 -07:00
|
|
|
std::shared_ptr<nt::Value> GetValue(llvm::StringRef key) const;
|
2015-07-23 01:23:09 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|