+
+
+class WTFHashTableProvider:
+ def __init__(self, valobj, internal_dict):
+ self.valobj = valobj
+ self.update()
+
+ def num_children(self):
+ return self.tableSize() + 5
+
+ def get_child_index(self, name):
+ if name == "m_table":
+ return self.tableSize()
+ elif name == "m_tableSize":
+ return self.tableSize() + 1
+ elif name == "m_tableSizeMask":
+ return self.tableSize() + 2
+ elif name == "m_keyCount":
+ return self.tableSize() + 3
+ elif name == "m_deletedCount":
+ return self.tableSize() + 4
+ else:
+ return int(name.lstrip('[').rstrip(']'))
+
+ def get_child_at_index(self, index):
+ if index == self.tableSize():
+ return self.valobj.GetChildMemberWithName('m_table')
+ elif index == self.tableSize() + 1:
+ return self.valobj.GetChildMemberWithName('m_tableSize')
+ elif index == self.tableSize() + 2:
+ return self.valobj.GetChildMemberWithName('m_tableSizeMask')
+ elif index == self.tableSize() + 3:
+ return self.valobj.GetChildMemberWithName('m_keyCount')
+ elif index == self.tableSize() + 4:
+ return self.valobj.GetChildMemberWithName('m_deletedCount')
+ elif index < self.tableSize():
+ table = self.valobj.GetChildMemberWithName('m_table')
+ return table.CreateChildAtOffset('[' + str(index) + ']', index * self.data_size, self.data_type)
+ else:
+ return None
+
+ def tableSize(self):
+ return self.valobj.GetChildMemberWithName('m_tableSize').GetValueAsUnsigned(0)
+
+ def keyCount(self):
+ return self.valobj.GetChildMemberWithName('m_keyCount').GetValueAsUnsigned(0)
+
+ def update(self):
+ self.data_type = self.valobj.GetType().GetTemplateArgumentType(0)
+ self.data_size = self.data_type.GetByteSize()
+
+ def has_children(self):
+ return True