diff --git a/esphome/components/climate/climate_traits.h b/esphome/components/climate/climate_traits.h index bdb04a65cc..9bff36f69f 100644 --- a/esphome/components/climate/climate_traits.h +++ b/esphome/components/climate/climate_traits.h @@ -2,7 +2,7 @@ #include #include "climate_mode.h" -#include "esphome/core/enum_bitmask.h" +#include "esphome/core/finite_set_mask.h" #include "esphome/core/helpers.h" // Forward declare climate enums and bitmask sizes @@ -14,19 +14,19 @@ constexpr int CLIMATE_SWING_MODE_BITMASK_SIZE = 8; // 4 values (OFF, BOTH, VERT constexpr int CLIMATE_PRESET_BITMASK_SIZE = 8; // 8 values (NONE, HOME, AWAY, BOOST, COMFORT, ECO, SLEEP, ACTIVITY) } // namespace esphome::climate -// Template specializations for enum-to-bit conversions -// MUST be declared before any instantiation of EnumBitmask, etc. +// Template specializations for value-to-bit conversions +// MUST be declared before any instantiation of FiniteSetMask, etc. namespace esphome { // ClimateMode specialization (7 values: 0-6) template<> -constexpr int EnumBitmask::enum_to_bit( +constexpr int FiniteSetMask::value_to_bit( climate::ClimateMode mode) { return static_cast(mode); // Direct mapping: enum value = bit position } template<> -inline climate::ClimateMode EnumBitmask::bit_to_enum( +inline climate::ClimateMode FiniteSetMask::bit_to_value( int bit) { // Lookup array mapping bit positions to enum values static constexpr climate::ClimateMode MODES[] = { @@ -44,14 +44,14 @@ inline climate::ClimateMode EnumBitmask -constexpr int EnumBitmask::enum_to_bit( +constexpr int FiniteSetMask::value_to_bit( climate::ClimateFanMode mode) { return static_cast(mode); // Direct mapping: enum value = bit position } template<> -inline climate::ClimateFanMode EnumBitmask::bit_to_enum(int bit) { +inline climate::ClimateFanMode FiniteSetMask::bit_to_value(int bit) { static constexpr climate::ClimateFanMode MODES[] = { climate::CLIMATE_FAN_ON, // bit 0 climate::CLIMATE_FAN_OFF, // bit 1 @@ -70,14 +70,14 @@ inline climate::ClimateFanMode EnumBitmask -constexpr int EnumBitmask::enum_to_bit( +constexpr int FiniteSetMask::value_to_bit( climate::ClimateSwingMode mode) { return static_cast(mode); // Direct mapping: enum value = bit position } template<> -inline climate::ClimateSwingMode EnumBitmask::bit_to_enum(int bit) { +inline climate::ClimateSwingMode FiniteSetMask::bit_to_value(int bit) { static constexpr climate::ClimateSwingMode MODES[] = { climate::CLIMATE_SWING_OFF, // bit 0 climate::CLIMATE_SWING_BOTH, // bit 1 @@ -90,13 +90,13 @@ inline climate::ClimateSwingMode EnumBitmask -constexpr int EnumBitmask::enum_to_bit( +constexpr int FiniteSetMask::value_to_bit( climate::ClimatePreset preset) { return static_cast(preset); // Direct mapping: enum value = bit position } template<> -inline climate::ClimatePreset EnumBitmask::bit_to_enum( +inline climate::ClimatePreset FiniteSetMask::bit_to_value( int bit) { static constexpr climate::ClimatePreset PRESETS[] = { climate::CLIMATE_PRESET_NONE, // bit 0 @@ -119,10 +119,10 @@ namespace esphome::climate { // Type aliases for climate enum bitmasks // These replace std::set to eliminate red-black tree overhead -using ClimateModeMask = EnumBitmask; -using ClimateFanModeMask = EnumBitmask; -using ClimateSwingModeMask = EnumBitmask; -using ClimatePresetMask = EnumBitmask; +using ClimateModeMask = FiniteSetMask; +using ClimateFanModeMask = FiniteSetMask; +using ClimateSwingModeMask = FiniteSetMask; +using ClimatePresetMask = FiniteSetMask; // Lightweight linear search for small vectors (1-20 items) // Avoids std::find template overhead