Ejemplo n.º 1
0
class SymbolMap(object):
    def __init__(self, min_v):
        self._list = SortedCollection((), lambda x : x[0])
        self._min_vaddr = min_v

    def add_symbol(self, start, length, name):
        tuple = (start, length, name)
        self._list.insert(tuple)

    def find(self, addr):
        try:
            tuple = self._list.find_le(addr)
            if addr < tuple[0] + tuple[1]:
                return tuple[2]
            return None
        except ValueError:
            return None

    def copy(self):
        ret = SymbolMap()
        ret._list = self._list.copy()
        return ret

    def __str__(self):
        return "SymbolMap: " + self._list.__str__()
    def __repr__(self):
        return self.__str__()
Ejemplo n.º 2
0
class MmapState(object):
    def __init__(self):
        self._list = SortedCollection((), lambda x : x[0])

    def add_map(self, start, length, pgoff, name):
        tuple = (start, length, pgoff, name)
        self._list.insert(tuple)

    def find(self, addr):
        try:
            tuple = self._list.find_le(addr)
            if addr < tuple[0] + tuple[1]:
                return tuple
            return None
        except ValueError:
            return None

    def copy(self):
        ret = MmapState()
        ret._list = self._list.copy()
        return ret

    def __str__(self):
        return "MmapState: " + self._list.__str__()
    def __repr__(self):
        return self.__str__()
class ElvesReady:

    def __init__(self):
        self.training_elf_list = SortedCollection(key=attrgetter('rating'))
        self.high_performance_elf_list = []

    def get_elf_with_best_fit_rating(self, rating):
        return self.training_elf_list.find_ge(rating)

    def add_elf(self, elf):
        if elf.rating > 3.95:
            self.high_performance_elf_list.append(elf)
        else:
            self.training_elf_list.insert(elf)

    def add_elves(self, elves):
        for elf in elves:
            self.add_elf(elf)

    def remove_from_training_list(self, elf):
        self.training_elf_list.remove(elf)

    def remove_from_high_performance_list(self, elf):
        self.high_performance_elf_list.remove(elf)

    #todo: remove elves that are chosen.
Ejemplo n.º 4
0
class SymbolMap(object):
    def __init__(self, min_v):
        self._list = SortedCollection((), lambda x: x[0])
        self._min_vaddr = min_v

    def add_symbol(self, start, length, name):
        tuple = (start, length, name)
        self._list.insert(tuple)

    def find(self, addr):
        try:
            tuple = self._list.find_le(addr)
            if addr < tuple[0] + tuple[1]:
                return tuple[2]
            return None
        except ValueError:
            return None

    def copy(self):
        ret = SymbolMap()
        ret._list = self._list.copy()
        return ret

    def __str__(self):
        return "SymbolMap: " + self._list.__str__()

    def __repr__(self):
        return self.__str__()
Ejemplo n.º 5
0
class MmapState(object):
    def __init__(self):
        self._list = SortedCollection((), lambda x: x[0])

    def add_map(self, start, length, pgoff, name):
        map_tuple = (start, length, pgoff, name)
        self._list.insert(map_tuple)

    def find(self, addr):
        try:
            map_tuple = self._list.find_le(addr)
            if addr < map_tuple[0] + map_tuple[1]:
                return map_tuple
            return None
        except ValueError:
            return None

    def copy(self):
        ret = MmapState()
        ret._list = self._list.copy()
        return ret

    def __str__(self):
        return 'MmapState: ' + self._list.__str__()

    def __repr__(self):
        return self.__str__()
Ejemplo n.º 6
0
    def compute_path(self, orig, goal):

        orig = map(int, orig)

        goal = tuple(goal)
        queue = SortedCollection(key=itemgetter(0))
        queue.insert((0, orig, 0))

        pred = {}
        pred[tuple(orig)] = None

        while len(queue) > 0:

            score, (px, py), steps = queue[0]
            queue.remove_first()

            if (px, py) == goal:

                # follow trail back greedily
                pos  = (px, py)
                plan = [pos]

                while pred[pos]:
                    plan.append(pred[pos])
                    pos = pred[pos]

                return plan[::-1][1:]

            for dx, dy in CognitiveMonkey.Directions:

                nx, ny = px + dx, py + dy

                if (nx, ny) in pred:
                    continue

                if nx < 0 or ny < 0 or nx >= self.world.height or ny >= self.world.width:
                    continue

                if self.explore_map[nx][ny] == CognitiveMonkey.Obstacle:
                    continue

                pred[(nx, ny)] = (px, py)

                nscore = steps + 1 + Collisions.distance((nx, ny), goal)
                queue.insert((nscore, (nx, ny), steps + 1))

        return []