Exemplo n.º 1
0
class PointerList:
    def __init__(self, pointers: List[Pointer], rom_variant: RomVariant) -> None:
        intervals = []

        for pointer in pointers:
            if pointer.rom_variant == rom_variant:
                intervals.append(Interval(pointer.address, pointer.address+4, pointer))

        self.tree = IntervalTree(intervals)

    def get_pointers_at(self, index: int) -> List[Pointer]:
        pointers = []
        for interval in self.tree.at(index):
            pointers.append(interval.data)
        return pointers

    def append(self, pointer: Pointer) -> None:
        self.tree.add(Interval(pointer.address, pointer.address+4, pointer))

    def remove(self, pointer: Pointer) -> None:
        self.tree.remove(Interval(pointer.address, pointer.address+4, pointer))

    def __iter__(self):
        return map(lambda x: x.data, self.tree.__iter__())

    def get_sorted_pointers(self) -> List[Pointer]:
        return map(lambda x: x.data, sorted(self.tree))