import gdb; import re; class VectorWrapperPrinter: def __init__(self, parVal): self.val = parVal; def to_string(self): sz = int(self.val["m_wrapped"].type.template_argument(1)); arr_vals = ", ".join(str(self.val["m_wrapped"]["_M_elems"][z]) for z in range(0, sz)); return "<{0}>".format(arr_vals); def display_hint(self): return "array"; class TileCoordsPrinter: def __init__(self, parVal): self.val = parVal; def to_string(self): return "{{m_pos = {0}, m_size = {1} (upper)}}".format(self.val["m_pos"], self.val["m_size"]); def display_hint(self): return "map"; def vector_wrapper_match(parVal): tag_value = str(parVal.type.strip_typedefs().tag); if tag_value == None: return None; reg_vecbase = re.compile("^vwr::implem::VecBase<.*>$"); reg_vec = re.compile("^vwr::Vec<.*>$"); reg_tilecoords = re.compile("^dk::TileCoords<.*>$"); if reg_vecbase.match(tag_value) or reg_vec.match(tag_value): return VectorWrapperPrinter(parVal); elif reg_tilecoords.match(tag_value): return TileCoordsPrinter(parVal); else: return None; def register_printers(parObjfile): parObjfile.pretty_printers.append(vector_wrapper_match);