aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-06-17 11:14:49 +0200
committerDavid Shah <davey1576@gmail.com>2018-06-17 11:14:49 +0200
commitf9bfccf68e939a2d14c0d94a14234822e9727b89 (patch)
treeaa917a5a3e02324bfec6bf5a8c71372091da4a0f /common
parente95f38e88ebcd07e0cf313cabbd5c2e56a6db85c (diff)
downloadnextpnr-f9bfccf68e939a2d14c0d94a14234822e9727b89.tar.gz
nextpnr-f9bfccf68e939a2d14c0d94a14234822e9727b89.tar.bz2
nextpnr-f9bfccf68e939a2d14c0d94a14234822e9727b89.zip
Add 'get or default' functions
Signed-off-by: David Shah <davey1576@gmail.com>
Diffstat (limited to 'common')
-rw-r--r--common/util.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/common/util.h b/common/util.h
new file mode 100644
index 00000000..2313a290
--- /dev/null
+++ b/common/util.h
@@ -0,0 +1,63 @@
+/*
+ * nextpnr -- Next Generation Place and Route
+ *
+ * Copyright (C) 2018 David Shah <david@symbioticeda.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <string>
+#include "nextpnr.h"
+
+NEXTPNR_NAMESPACE_BEGIN
+
+// Get a value from a map-style container, returning default if value is not
+// found
+template<typename Container, typename KeyType, typename ValueType>
+ValueType get_or_default(const Container &ct, const KeyType &key,
+ ValueType def = ValueType())
+{
+ auto found = ct.find(key);
+ if (found == ct.end())
+ return def;
+ else
+ return found->second;
+};
+
+// Get a value from a map-style container, converting to int, and returning
+// default if value is not found
+template<typename Container, typename KeyType>
+int int_or_default(const Container &ct, const KeyType &key,
+ int def = 0)
+{
+ auto found = ct.find(key);
+ if (found == ct.end())
+ return def;
+ else
+ return std::stoi(found->second);
+};
+
+// As above, but convert to bool
+template<typename Container, typename KeyType>
+bool bool_or_default(const Container &ct, const KeyType &key,
+ bool def = false)
+{
+ return bool(int_or_default(ct, key, int(def)));
+};
+NEXTPNR_NAMESPACE_END
+
+#endif