コード例 #1
0
 def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]:
     yield from bitpacking.pack_sorted_array_elements(
         sorted(self.can_change_from),
         sorted(self.possible_change_from),
     )
     yield from bitpacking.pack_sorted_array_elements(
         sorted(self.can_change_to),
         sorted(self.possible_change_to),
     )
コード例 #2
0
    def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]:
        reference: MajorItemsConfiguration = metadata["reference"]

        name_to_item: Dict[str, MajorItem] = {
            item.name: item
            for item in self.items_state.keys()
        }

        modified_items = sorted(item.name
                                for item, state in self.items_state.items()
                                if state != reference.items_state[item])
        yield from bitpacking.pack_sorted_array_elements(
            modified_items, sorted(name_to_item.keys()))
        for item_name in modified_items:
            item = name_to_item[item_name]
            yield from self.items_state[item].bit_pack_encode(
                item, reference=reference.items_state[item])

        # default_items
        for category, default in self.default_items.items():
            all_major = [
                major for major in reference.items_state.keys()
                if major.item_category == category
            ]
            yield from bitpacking.pack_array_element(default, all_major)

        # random starting items
        yield from bitpacking.encode_big_int(
            self.minimum_random_starting_items)
        yield from bitpacking.encode_big_int(
            self.maximum_random_starting_items)
コード例 #3
0
 def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]:
     yield from self.randomization_mode.bit_pack_encode(metadata)
     if self.excluded_indices:
         yield from bitpacking.encode_bool(True)
         yield from bitpacking.pack_sorted_array_elements(self._sorted_indices, _ALL_INDICES)
     else:
         yield from bitpacking.encode_bool(False)
コード例 #4
0
def test_sorted_array_elements_round_trip(elements, array):
    generator = bitpacking.pack_sorted_array_elements(elements, array)
    b = bitpacking._pack_encode_results(list(generator))
    decoder = bitpacking.BitPackDecoder(b)

    decoded_elements = bitpacking.decode_sorted_array_elements(decoder, array)

    assert elements == decoded_elements
コード例 #5
0
    def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]:
        db = default_database.game_description_for(self.game)

        yield from self.randomization_mode.bit_pack_encode(metadata)
        if self.excluded_indices:
            yield from bitpacking.encode_bool(True)
            yield from bitpacking.pack_sorted_array_elements(self._sorted_indices, _all_indices(db))
        else:
            yield from bitpacking.encode_bool(False)
コード例 #6
0
    def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]:
        reference: DockRandoConfiguration = metadata["reference"]

        yield from self.mode.bit_pack_encode(None)

        modified_types = sorted(
            dock_type for dock_type, type_state in self.types_state.items()
            if type_state != reference.types_state[dock_type])
        yield from bitpacking.pack_sorted_array_elements(
            modified_types, sorted(self.weakness_database.dock_types))
        for dock_type in modified_types:
            yield from self.types_state[dock_type].bit_pack_encode(
                {"reference": reference.types_state[dock_type]})
コード例 #7
0
 def bit_pack_encode(self, metadata) -> Iterator[Tuple[int, int]]:
     areas = self.areas_list(self.game)
     yield from bitpacking.pack_sorted_array_elements(
         list(self.locations), areas)
コード例 #8
0
def test_sorted_array_elements_size(elements, array, expected_size):
    count = 0
    for _, size in bitpacking.pack_sorted_array_elements(
            list(elements), list(array)):
        count += bitpacking._bits_for_number(size)
    assert count == expected_size