This is the latest WPILib src, VisionSample2013, cRIO image, ... pulled down from firstforge.wpi.edu.
There might be risks in using the top of tree rather than an official release, but the commit messages do mention fixes for some deadlocks and race conditions.
git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4066 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/tables/ITable.h b/azaleasource/WPILibCProgramming/trunk/WPILib/tables/ITable.h
new file mode 100644
index 0000000..5d12b31
--- /dev/null
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/tables/ITable.h
@@ -0,0 +1,194 @@
+/*
+ * ITable.h
+ *
+ * Created on: Sep 19, 2012
+ * Author: Mitchell Wills
+ */
+
+#ifndef ITABLE_H_
+#define ITABLE_H_
+
+
+class ITable;
+union EntryValue{
+ void* ptr;
+ bool b;
+ double f;
+};
+typedef union EntryValue EntryValue;
+
+
+#include <string>
+#include "networktables2/type/ComplexData.h"
+#include "ITableListener.h"
+
+
+class ITable {
+public:
+
+ /**
+ * Determines whether the given key is in this table.
+ *
+ * @param key the key to search for
+ * @return true if the table as a value assigned to the given key
+ */
+ virtual bool ContainsKey(std::string key) = 0;
+
+ /**
+ * Determines whether there exists a non-empty subtable for this key
+ * in this table.
+ *
+ * @param key the key to search for
+ * @return true if there is a subtable with the key which contains at least one key/subtable of its own
+ */
+ virtual bool ContainsSubTable(std::string key) = 0;
+
+ /**
+ * Gets the subtable in this table for the given name.
+ *
+ * @param key the name of the table relative to this one
+ * @return a sub table relative to this one
+ */
+ virtual ITable* GetSubTable(std::string key) = 0;
+
+
+ /**
+ * Gets the value associated with a key as an object
+ *
+ * @param key the key of the value to look up
+ * @return the value associated with the given key
+ * @throws TableKeyNotDefinedException if there is no value associated with the given key
+ */
+ virtual EntryValue GetValue(std::string key) = 0;
+ /**
+ * Put a value in the table
+ *
+ * @param key the key to be assigned to
+ * @param value the value that will be assigned
+ * @throws IllegalArgumentException when the value is not supported by the table
+ */
+ virtual void PutValue(std::string key, ComplexData& value) = 0;
+
+ virtual void RetrieveValue(std::string key, ComplexData& externalValue) = 0;
+
+
+
+ /**
+ * Put a number in the table
+ *
+ * @param key the key to be assigned to
+ * @param value the value that will be assigned
+ */
+ virtual void PutNumber(std::string key, double value) = 0;
+ /**
+ * Gets the number associated with the given name.
+ *
+ * @param key the key to look up
+ * @return the value associated with the given key
+ * @throws TableKeyNotDefinedException if there is no value associated with the given key
+ */
+ virtual double GetNumber(std::string key) = 0;
+ /**
+ * Gets the number associated with the given name.
+ *
+ * @param key the key to look up
+ * @param defaultValue the value to be returned if no value is found
+ * @return the value associated with the given key or the given default value if there is no value associated with the key
+ */
+ virtual double GetNumber(std::string key, double defaultValue) = 0;
+
+ /**
+ * Put a std::string& in the table
+ *
+ * @param key the key to be assigned to
+ * @param value the value that will be assigned
+ */
+ virtual void PutString(std::string key, std::string value) = 0;
+
+ /**
+ * Gets the string associated with the given name.
+ *
+ * @param key the key to look up
+ * @return the value associated with the given key
+ * @throws TableKeyNotDefinedException if there is no value associated with the given key
+ */
+ virtual std::string GetString(std::string key) = 0;
+
+ /**
+ * Gets the string associated with the given name.
+ *
+ * @param key the key to look up
+ * @param defaultValue the value to be returned if no value is found
+ * @return the value associated with the given key or the given default value if there is no value associated with the key
+ */
+ virtual std::string GetString(std::string key, std::string defaultValue) = 0;
+
+ /**
+ * Put a boolean in the table
+ *
+ * @param key the key to be assigned to
+ * @param value the value that will be assigned
+ */
+ virtual void PutBoolean(std::string key, bool value) = 0;
+
+ /**
+ * Gets the boolean associated with the given name.
+ *
+ * @param key the key to look up
+ * @return the value associated with the given key
+ * @throws TableKeyNotDefinedException if there is no value associated with the given key
+ */
+ virtual bool GetBoolean(std::string key) = 0;
+
+ /**
+ * Gets the boolean associated with the given name.
+ *
+ * @param key the key to look up
+ * @param defaultValue the value to be returned if no value is found
+ * @return the value associated with the given key or the given default value if there is no value associated with the key
+ */
+ virtual bool GetBoolean(std::string key, bool defaultValue) = 0;
+
+ /**
+ * Add a listener for changes to the table
+ *
+ * @param listener the listener to add
+ */
+ virtual void AddTableListener(ITableListener* listener) = 0;
+
+ /**
+ * Add a listener for changes to the table
+ *
+ * @param listener the listener to add
+ * @param immediateNotify if true then this listener will be notified of all current entries (marked as new)
+ */
+ virtual void AddTableListener(ITableListener* listener, bool immediateNotify) = 0;
+
+ /**
+ * Add a listener for changes to a specific key the table
+ *
+ * @param key the key to listen for
+ * @param listener the listener to add
+ * @param immediateNotify if true then this listener will be notified of all current entries (marked as new)
+ */
+ virtual void AddTableListener(std::string key, ITableListener* listener, bool immediateNotify) = 0;
+
+ /**
+ * This will immediately notify the listener of all current sub tables
+ *
+ * @param listener
+ */
+ virtual void AddSubTableListener(ITableListener* listener) = 0;
+
+ /**
+ * Remove a listener from receiving table events
+ *
+ * @param listener the listener to be removed
+ */
+ virtual void RemoveTableListener(ITableListener* listener) = 0;
+
+
+};
+
+
+#endif /* ITABLE_H_ */