summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/examples/python/dict_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lldb/examples/python/dict_utils.py')
-rwxr-xr-xgnu/llvm/lldb/examples/python/dict_utils.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/examples/python/dict_utils.py b/gnu/llvm/lldb/examples/python/dict_utils.py
new file mode 100755
index 00000000000..7cdd0ac6f3c
--- /dev/null
+++ b/gnu/llvm/lldb/examples/python/dict_utils.py
@@ -0,0 +1,62 @@
+
+class LookupDictionary(dict):
+ """
+ a dictionary which can lookup value by key, or keys by value
+ """
+
+ def __init__(self, items=[]):
+ """items can be a list of pair_lists or a dictionary"""
+ dict.__init__(self, items)
+
+ def get_keys_for_value(self, value, fail_value=None):
+ """find the key(s) as a list given a value"""
+ list_result = [item[0] for item in self.items() if item[1] == value]
+ if len(list_result) > 0:
+ return list_result
+ return fail_value
+
+ def get_first_key_for_value(self, value, fail_value=None):
+ """return the first key of this dictionary given the value"""
+ list_result = [item[0] for item in self.items() if item[1] == value]
+ if len(list_result) > 0:
+ return list_result[0]
+ return fail_value
+
+ def get_value(self, key, fail_value=None):
+ """find the value given a key"""
+ if key in self:
+ return self[key]
+ return fail_value
+
+
+class Enum(LookupDictionary):
+
+ def __init__(self, initial_value=0, items=[]):
+ """items can be a list of pair_lists or a dictionary"""
+ LookupDictionary.__init__(self, items)
+ self.value = initial_value
+
+ def set_value(self, v):
+ v_typename = typeof(v).__name__
+ if v_typename == 'str':
+ if str in self:
+ v = self[v]
+ else:
+ v = 0
+ else:
+ self.value = v
+
+ def get_enum_value(self):
+ return self.value
+
+ def get_enum_name(self):
+ return self.__str__()
+
+ def __str__(self):
+ s = self.get_first_key_for_value(self.value, None)
+ if s is None:
+ s = "%#8.8x" % self.value
+ return s
+
+ def __repr__(self):
+ return self.__str__()