7PrefilledPalette::PrefilledPalette(
8 std::size_t hardware_index, ColorSet fixed_colors, std::size_t available_capacity, std::size_t occupied_slots)
9 : hardware_index_{hardware_index}, fixed_colors_{std::move(fixed_colors)}, available_capacity_{available_capacity},
10 occupied_slots_{occupied_slots}
15PrefilledPalette::fully_locked(std::size_t hardware_index,
ColorSet color_set, std::size_t occupied_slots)
17 return PrefilledPalette{hardware_index, std::move(color_set), 0, occupied_slots};
21 std::size_t hardware_index,
ColorSet fixed_colors, std::size_t occupied_slots, std::size_t total_capacity)
23 if (occupied_slots > total_capacity) {
24 panic(
"PrefilledPalette::partially_locked occupied_slots > total_capacity");
26 const std::size_t available = total_capacity - occupied_slots;
27 return PrefilledPalette{hardware_index, std::move(fixed_colors), available, occupied_slots};
30std::size_t PrefilledPalette::fixed_color_count()
const
35bool PrefilledPalette::can_accommodate(
const ColorSet &tile_colors)
const
38 if (
is_subset(tile_colors, fixed_colors_)) {
47 const std::size_t new_colors_needed = combined_count - fixed_count;
49 return new_colors_needed <= available_capacity_;
A set of colors represented as a bitset.
Pre-assigned palette with wildcard support for palette packing.
bool is_subset(const ColorSet &a, const ColorSet &b)
Checks if one ColorSet is a subset of another.
void panic(const StringViewSourceLoc &s)
Unconditionally terminates the program with a panic message.
ColorSet color_set_union(const ColorSet &a, const ColorSet &b)
Computes the union of two ColorSets.
std::size_t color_set_count(const ColorSet &set)
Counts the number of colors in a ColorSet.