Squashed 'third_party/allwpilib_2016/' content from commit 7f61816

Change-Id: If9d9245880859cdf580f5d7f77045135d0521ce7
git-subtree-dir: third_party/allwpilib_2016
git-subtree-split: 7f618166ed253a24629934fcf89c3decb0528a3b
diff --git a/wpilibc/shared/src/SmartDashboard/SmartDashboard.cpp b/wpilibc/shared/src/SmartDashboard/SmartDashboard.cpp
new file mode 100644
index 0000000..bee0c03
--- /dev/null
+++ b/wpilibc/shared/src/SmartDashboard/SmartDashboard.cpp
@@ -0,0 +1,165 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2011. All Rights Reserved.
+ */
+/* Open Source Software - may be modified and shared by FRC teams. The code   */
+/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib.  */
+/*----------------------------------------------------------------------------*/
+
+#include "SmartDashboard/SmartDashboard.h"
+
+//#include "NetworkCommunication/UsageReporting.h"
+#include "SmartDashboard/NamedSendable.h"
+#include "WPIErrors.h"
+#include "networktables/NetworkTable.h"
+#include "HLUsageReporting.h"
+
+std::shared_ptr<ITable> SmartDashboard::m_table;
+std::map<std::shared_ptr<ITable> , Sendable *> SmartDashboard::m_tablesToData;
+
+void SmartDashboard::init() {
+  m_table = NetworkTable::GetTable("SmartDashboard");
+
+  HLUsageReporting::ReportSmartDashboard();
+}
+
+/**
+ * Maps the specified key to the specified value in this table.
+ * The key can not be nullptr.
+ * The value can be retrieved by calling the get method with a key that is equal
+ * to the original key.
+ * @param keyName the key
+ * @param value the value
+ */
+void SmartDashboard::PutData(llvm::StringRef key, Sendable *data) {
+  if (data == nullptr) {
+    wpi_setGlobalWPIErrorWithContext(NullParameter, "value");
+    return;
+  }
+  std::shared_ptr<ITable> dataTable(m_table->GetSubTable(key));
+  dataTable->PutString("~TYPE~", data->GetSmartDashboardType());
+  data->InitTable(dataTable);
+  m_tablesToData[dataTable] = data;
+}
+
+/**
+ * Maps the specified key (where the key is the name of the {@link
+ * SmartDashboardNamedData}
+ * to the specified value in this table.
+ * The value can be retrieved by calling the get method with a key that is equal
+ * to the original key.
+ * @param value the value
+ */
+void SmartDashboard::PutData(NamedSendable *value) {
+  if (value == nullptr) {
+    wpi_setGlobalWPIErrorWithContext(NullParameter, "value");
+    return;
+  }
+  PutData(value->GetName(), value);
+}
+
+/**
+ * Returns the value at the specified key.
+ * @param keyName the key
+ * @return the value
+ */
+Sendable *SmartDashboard::GetData(llvm::StringRef key) {
+  std::shared_ptr<ITable> subtable(m_table->GetSubTable(key));
+  Sendable *data = m_tablesToData[subtable];
+  if (data == nullptr) {
+    wpi_setGlobalWPIErrorWithContext(SmartDashboardMissingKey, key);
+    return nullptr;
+  }
+  return data;
+}
+
+/**
+ * Maps the specified key to the specified complex value (such as an array) in
+ * this table.
+ * The key can not be nullptr.
+ * The value can be retrieved by calling the RetrieveValue method with a key
+ * that is equal to the original key.
+ * @param keyName the key
+ * @param value the value
+ */
+void SmartDashboard::PutValue(llvm::StringRef keyName,
+                              std::shared_ptr<nt::Value> value) {
+  m_table->PutValue(keyName, value);
+}
+
+/**
+ * Retrieves the complex value (such as an array) in this table into the complex
+ * data object
+ * The key can not be nullptr.
+ * @param keyName the key
+ * @param value the object to retrieve the value into
+ */
+std::shared_ptr<nt::Value> SmartDashboard::GetValue(llvm::StringRef keyName) {
+  return m_table->GetValue(keyName);
+}
+
+/**
+ * Maps the specified key to the specified value in this table.
+ * The key can not be nullptr.
+ * The value can be retrieved by calling the get method with a key that is equal
+ * to the original key.
+ * @param keyName the key
+ * @param value the value
+ */
+void SmartDashboard::PutBoolean(llvm::StringRef keyName, bool value) {
+  m_table->PutBoolean(keyName, value);
+}
+
+/**
+ * Returns the value at the specified key. If the key is not found, returns the
+ * default value.
+ * @param keyName the key
+ * @return the value
+ */
+bool SmartDashboard::GetBoolean(llvm::StringRef keyName, bool defaultValue) {
+  return m_table->GetBoolean(keyName, defaultValue);
+}
+
+/**
+ * Maps the specified key to the specified value in this table.
+ * The key can not be nullptr.
+ * The value can be retrieved by calling the get method with a key that is equal
+ * to the original key.
+ * @param keyName the key
+ * @param value the value
+ */
+void SmartDashboard::PutNumber(llvm::StringRef keyName, double value) {
+  m_table->PutNumber(keyName, value);
+}
+
+/**
+ * Returns the value at the specified key. If the key is not found, returns the
+ * default value.
+ * @param keyName the key
+ * @return the value
+ */
+double SmartDashboard::GetNumber(llvm::StringRef keyName, double defaultValue) {
+  return m_table->GetNumber(keyName, defaultValue);
+}
+
+/**
+ * Maps the specified key to the specified value in this table.
+ * Neither the key nor the value can be nullptr.
+ * The value can be retrieved by calling the get method with a key that is equal
+ * to the original key.
+ * @param keyName the key
+ * @param value the value
+ */
+void SmartDashboard::PutString(llvm::StringRef keyName, llvm::StringRef value) {
+  m_table->PutString(keyName, value);
+}
+
+/**
+ * Returns the value at the specified key. If the key is not found, returns the
+ * default value.
+ * @param keyName the key
+ * @return the value
+ */
+std::string SmartDashboard::GetString(llvm::StringRef keyName,
+                                      llvm::StringRef defaultValue) {
+  return m_table->GetString(keyName, defaultValue);
+}