diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:57 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:57 +0000 |
commit | 88c643b6fec27eec436c8d138fee6346e92337d6 (patch) | |
tree | 82cd13b2f3cde1c9e5f79689ba4e6ba67694843f /examples/synthetic/bitfield/example.py | |
parent | 94994d372d014ce4c8758b9605d63fae651bd8aa (diff) |
Notes
Diffstat (limited to 'examples/synthetic/bitfield/example.py')
-rw-r--r-- | examples/synthetic/bitfield/example.py | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/examples/synthetic/bitfield/example.py b/examples/synthetic/bitfield/example.py deleted file mode 100644 index 57bbf0f76ac9..000000000000 --- a/examples/synthetic/bitfield/example.py +++ /dev/null @@ -1,123 +0,0 @@ -# Synthetic children provider example for class MaskedData -# to use me: -# command script import ./example.py --allow-reload -# type synthetic add MaskedData --python-class -# example.MaskedData_SyntheticChildrenProvider - - -class MaskedData_SyntheticChildrenProvider: - - def __init__(self, valobj, dict): - # remember the SBValue since you will not have another chance to get it - # :-) - self.valobj = valobj - - def num_children(self): - # you could perform calculations involving the SBValue and/or its children to determine this value - # here, we have an hardcoded value - but since you have stored the SBValue you could use it to - # help figure out the correct thing to return here. if you return a number N, you should be prepared to - # answer questions about N children - return 4 - - def has_children(self): - # we simply say True here because we know we have 4 children - # in general, you want to make this calculation as simple as possible - # and return True if in doubt (you can always return num_children == 0 - # later) - return True - - def get_child_index(self, name): - # given a name, return its index - # you can return None if you don't know the answer for a given name - if name == "value": - return 0 - # here, we are using a reserved C++ keyword as a child name - we could not do that in the source code - # but we are free to use the names we like best in the synthetic children provider class - # we are also not respecting the order of declaration in the C++ class itself - as long as - # we are consistent, we can do that freely - if name == "operator": - return 1 - if name == "mask": - return 2 - # this member does not exist in the original class - we will compute its value and show it to the user - # when returning synthetic children, there is no need to only stick to - # what already exists in memory - if name == "apply()": - return 3 - return None # no clue, just say none - - def get_child_at_index(self, index): - # precautionary measures - if index < 0: - return None - if index > self.num_children(): - return None - if self.valobj.IsValid() == False: - return None - if index == 0: - return self.valobj.GetChildMemberWithName("value") - if index == 1: - # fetch the value of the operator - op_chosen = self.valobj.GetChildMemberWithName( - "oper").GetValueAsUnsigned() - # if it is a known value, return a descriptive string for it - # we are not doing this in the most efficient possible way, but the code is very readable - # and easy to maintain - if you change the values on the C++ side, - # the same changes must be made here - if op_chosen == 0: - return self.valobj.CreateValueFromExpression( - "operator", '(const char*)"none"') - elif op_chosen == 1: - return self.valobj.CreateValueFromExpression( - "operator", '(const char*)"AND"') - elif op_chosen == 2: - return self.valobj.CreateValueFromExpression( - "operator", '(const char*)"OR"') - elif op_chosen == 3: - return self.valobj.CreateValueFromExpression( - "operator", '(const char*)"XOR"') - elif op_chosen == 4: - return self.valobj.CreateValueFromExpression( - "operator", '(const char*)"NAND"') - elif op_chosen == 5: - return self.valobj.CreateValueFromExpression( - "operator", '(const char*)"NOR"') - else: - return self.valobj.CreateValueFromExpression( - "operator", '(const char*)"unknown"') # something else - if index == 2: - return self.valobj.GetChildMemberWithName("mask") - if index == 3: - # for this, we must fetch all the other elements - # in an efficient implementation, we would be caching this data for - # efficiency - value = self.valobj.GetChildMemberWithName( - "value").GetValueAsUnsigned() - operator = self.valobj.GetChildMemberWithName( - "oper").GetValueAsUnsigned() - mask = self.valobj.GetChildMemberWithName( - "mask").GetValueAsUnsigned() - # compute the masked value according to the operator - if operator == 1: - value = value & mask - elif operator == 2: - value = value | mask - elif operator == 3: - value = value ^ mask - elif operator == 4: - value = ~(value & mask) - elif operator == 5: - value = ~(value | mask) - else: - pass - value &= 0xFFFFFFFF # make sure Python does not extend our values to 64-bits - # return it - again, not the most efficient possible way. we should actually be pushing the computed value - # into an SBData, and using the SBData to create an SBValue - this - # has the advantage of readability - return self.valobj.CreateValueFromExpression( - "apply()", '(uint32_t)(' + str(value) + ')') - - def update(self): - # we do not do anything special in update - but this would be the right place to lookup - # the data we use in get_child_at_index and cache it - pass |