summaryrefslogtreecommitdiff
path: root/codegen/vulkan/scripts/spec_tools/data_structures.py
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/vulkan/scripts/spec_tools/data_structures.py')
-rw-r--r--codegen/vulkan/scripts/spec_tools/data_structures.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/codegen/vulkan/scripts/spec_tools/data_structures.py b/codegen/vulkan/scripts/spec_tools/data_structures.py
new file mode 100644
index 00000000..f2808cf1
--- /dev/null
+++ b/codegen/vulkan/scripts/spec_tools/data_structures.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s): Ryan Pavlik <ryan.pavlik@collabora.com>
+"""Provides general-purpose data structures."""
+
+
+class DictOfStringSets:
+ """A dictionary where the values are sets of strings.
+
+ Has some convenience functions to allow easier maintenance via
+ the .add method."""
+
+ def __init__(self, d=None):
+ self.d = {}
+ if d:
+ for k, v in d.items():
+ self.add(k, v)
+
+ def __getitem__(self, k):
+ return self.d[k]
+
+ def __contains__(self, k):
+ return k in self.d
+
+ def get(self, k, default=None):
+ return self.d.get(k, default)
+
+ def get_dict(self):
+ return self.d
+
+ def items(self):
+ """Return an iterator like dict().items()."""
+ return self.d.items()
+
+ def keys(self):
+ """Return an iterator over keys."""
+ return self.d.keys()
+
+ def values(self):
+ """Return an iterator over values."""
+ return self.d.values()
+
+ def add_key(self, k):
+ """Ensure the set for the given key exists."""
+ if k not in self.d:
+ self.d[k] = set()
+
+ def add(self, k, v):
+ self.add_key(k)
+ if isinstance(v, str):
+ v = (v, )
+ if not isinstance(v, set):
+ v = set(v)
+ self.d[k].update(v)