Files
allwpilib/networktables/cpp/include/networktables2/AbstractNetworkTableEntryStore.h
Fredric Silberberg bfa4bbaf78 Final move of Dustins network tables patches
Change-Id: I7d351d87e63c8174b62f4ec09f805f685c80019c
2015-02-09 14:22:44 -05:00

81 lines
2.1 KiB
C++

/*
* AbstractNetworkTableEntryStore.h
*
* Created on: Sep 16, 2012
* Author: Mitchell Wills
*/
#ifndef ABSTRACTNETWORKTABLEENTRYSTORE_H_
#define ABSTRACTNETWORKTABLEENTRYSTORE_H_
class TableListenerManager;
class AbstractNetworkTableEntryStore;
#include "OSAL/Synchronized.h"
#include <string>
#include "networktables2/NetworkTableEntry.h"
#include "networktables2/IncomingEntryReceiver.h"
#include "networktables2/OutgoingEntryReceiver.h"
#include "networktables2/type/NetworkTableEntryType.h"
#include "tables/ITable.h"
#include "tables/ITableListener.h"
#include <map>
#include <vector>
class TableListenerManager{
public:
virtual ~TableListenerManager(){}
virtual void FireTableListeners(std::string& name, EntryValue value, bool isNew) = 0;
};
class AbstractNetworkTableEntryStore : public IncomingEntryReceiver{
protected:
NTReentrantSemaphore block_namedEntries;
std::map<EntryId,NetworkTableEntry*> idEntries;
std::map<std::string,NetworkTableEntry*> namedEntries;
TableListenerManager& listenerManager;
AbstractNetworkTableEntryStore(TableListenerManager& lstnManager);
OutgoingEntryReceiver* outgoingReceiver;
OutgoingEntryReceiver* incomingReceiver;
virtual bool addEntry(NetworkTableEntry* entry) = 0;
virtual bool updateEntry(NetworkTableEntry* entry, SequenceNumber sequenceNumber, EntryValue value) = 0;
public:
virtual ~AbstractNetworkTableEntryStore();
NTReentrantSemaphore LOCK;
NetworkTableEntry* GetEntry(EntryId entryId);
NetworkTableEntry* GetEntry(std::string& name);
std::vector<std::string>* keys();
void clearEntries();
void clearIds();
void SetOutgoingReceiver(OutgoingEntryReceiver* receiver);
void SetIncomingReceiver(OutgoingEntryReceiver* receiver);
void PutOutgoing(std::string& name, NetworkTableEntryType* type, EntryValue value);
void PutOutgoing(NetworkTableEntry* tableEntry, EntryValue value);
void offerIncomingAssignment(NetworkTableEntry* entry);
void offerIncomingUpdate(NetworkTableEntry* entry, EntryId sequenceNumber, EntryValue value);
void notifyEntries(ITable* table, ITableListener* listener);
};
#endif /* ABSTRACTNETWORKTABLEENTRYSTORE_H_ */