summaryrefslogtreecommitdiff
path: root/libs/surfaces/websockets/state.h
diff options
context:
space:
mode:
authorLuciano Iam <lucianito@gmail.com>2020-02-20 13:12:36 +0100
committerRobin Gareus <robin@gareus.org>2020-02-22 23:10:24 +0100
commit8db9755d1e075f22275286e94b37af311c6d489f (patch)
treed72749d8cdc77914303c34c6aa6f5a28e620ddb8 /libs/surfaces/websockets/state.h
parent44165309299960e35d4efa2194b2c2db63c2c1b2 (diff)
Add websockets surface module
Diffstat (limited to 'libs/surfaces/websockets/state.h')
-rw-r--r--libs/surfaces/websockets/state.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/libs/surfaces/websockets/state.h b/libs/surfaces/websockets/state.h
new file mode 100644
index 0000000000..814eb3ccd4
--- /dev/null
+++ b/libs/surfaces/websockets/state.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2020 Luciano Iam <lucianito@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef node_state_h
+#define node_state_h
+
+#include <vector>
+#include <cmath>
+#include <cstring>
+
+#include "typed_value.h"
+
+namespace Node {
+ const std::string tempo = "tempo";
+ const std::string strip_desc = "strip_desc";
+ const std::string strip_meter = "strip_meter";
+ const std::string strip_gain = "strip_gain";
+ const std::string strip_pan = "strip_pan";
+ const std::string strip_mute = "strip_mute";
+ const std::string strip_plugin_desc = "strip_plugin_desc";
+ const std::string strip_plugin_enable = "strip_plugin_enable";
+ const std::string strip_plugin_param_desc = "strip_plugin_param_desc";
+ const std::string strip_plugin_param_value = "strip_plugin_param_value";
+};
+
+class NodeState {
+
+ public:
+
+ NodeState ();
+ NodeState (std::string);
+ NodeState (std::string, std::initializer_list<uint32_t>,
+ std::initializer_list<TypedValue> = {});
+
+ std::string debug_str () const;
+
+ std::string node () const { return _node; }
+
+ int n_addr () const;
+ uint32_t nth_addr (int) const;
+ void add_addr (uint32_t);
+
+ int n_val () const;
+ TypedValue nth_val (int) const;
+ void add_val (TypedValue);
+
+ private:
+
+ std::string _node;
+ std::vector<uint32_t> _addr;
+ std::vector<TypedValue> _val;
+ std::string _node_addr_hash;
+
+ void update_node_addr_hash ();
+
+ friend struct std::hash<NodeState>;
+ friend struct std::equal_to<NodeState>;
+
+};
+
+namespace std {
+ template <>
+ struct hash<NodeState> {
+ size_t operator () (const NodeState &state) const {
+ // std::hash<const char*> produces a hash of the value of the
+ // pointer (the memory address), it does not examine the contents
+ // of any character array.
+ return std::hash<std::string>()(state._node_addr_hash);
+ }
+ };
+
+ template<>
+ struct equal_to<NodeState> {
+ bool operator() (const NodeState& lhs, const NodeState& rhs) const {
+ return lhs._node_addr_hash == rhs._node_addr_hash;
+ }
+ };
+}
+
+#endif // node_state_h