FastLED 3.10.6
Loading...
Searching...
No Matches
/home/runner/work/FastLED/FastLED/src/fl/math/intmap.h

Generic integer scaling between different integer sizes.

Generic integer scaling between different integer sizes.

Template Parameters
INT_FROMInput integer type (must be explicitly specified)
INT_TOOutput integer type (uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t)
Parameters
xThe input value to scale
Returns
The scaled value preserving relative position in range

Requires explicit specification of BOTH input and output types to prevent implicit type conversions that could mask bugs. Uses bit replication for scaling up (8→16, 8→32, 16→32) and right-shift with rounding for scaling down (16→8, 32→16, 32→8).

Supports all combinations of 8-bit, 16-bit, and 32-bit signed/unsigned types. Compile-time error for unsupported type conversions.

uint16_t y = fl::int_scale<uint8_t, uint16_t>(102); // Explicit: 8→16
int32_t z = fl::int_scale<int8_t, int32_t>(64); // Explicit: 8→32
uint8_t w = fl::int_scale<uint32_t, uint8_t>(0x80000000); // Explicit: 32→8
uint8_t noop = fl::int_scale<uint8_t, uint8_t>(255); // Identity: no scaling
int y
Definition simple.h:93
uint32_t z[NUM_LAYERS]
Definition Fire2023.h:93
unsigned char uint8_t
Definition stdint.h:208
fl::i32 int32_t
Definition stdint.h:219
fl::u16 uint16_t
Definition stdint.h:213
#pragma once
#include "platforms/intmap.h"
#include "fl/math/math.h"
namespace fl {
// Deprecated legacy unsigned functions that delegate to the new int_scale<FROM, TO>() template
inline u16 map8_to_16(u8 x) FL_NO_EXCEPT {
return fl::int_scale<u8, u16>(x);
}
inline u32 map8_to_32(u8 x) FL_NO_EXCEPT {
return fl::int_scale<u8, u32>(x);
}
inline u32 map16_to_32(u16 x) FL_NO_EXCEPT {
return fl::int_scale<u16, u32>(x);
}
inline u8 map16_to_8(u16 x) FL_NO_EXCEPT {
return fl::int_scale<u16, u8>(x);
}
inline u16 map32_to_16(u32 x) FL_NO_EXCEPT {
return fl::int_scale<u32, u16>(x);
}
inline u8 map32_to_8(u32 x) FL_NO_EXCEPT {
return fl::int_scale<u32, u8>(x);
}
// New signed functions that delegate to int_scale
return fl::int_scale<i8, i16>(x);
}
return fl::int_scale<i8, i32>(x);
}
inline i32 smap16_to_32(i16 x) FL_NO_EXCEPT {
return fl::int_scale<i16, i32>(x);
}
return fl::int_scale<i16, i8>(x);
}
inline i16 smap32_to_16(i32 x) FL_NO_EXCEPT {
return fl::int_scale<i32, i16>(x);
}
return fl::int_scale<i32, i8>(x);
}
} // namespace fl
int x
Definition simple.h:92
u8 map32_to_8(u32 x) FL_NO_EXCEPT
Definition intmap.h:77
u32 map8_to_32(u8 x) FL_NO_EXCEPT
Definition intmap.h:54
i16 smap32_to_16(i32 x) FL_NO_EXCEPT
Use int_scale<int32_t, int16_t>() instead.
Definition intmap.h:103
i32 smap16_to_32(i16 x) FL_NO_EXCEPT
Use int_scale<int16_t, int32_t>() instead.
Definition intmap.h:93
u16 map8_to_16(u8 x) FL_NO_EXCEPT
Definition intmap.h:48
i16 smap8_to_16(i8 x) FL_NO_EXCEPT
Use int_scale<int8_t, int16_t>() instead.
Definition intmap.h:83
u16 map32_to_16(u32 x) FL_NO_EXCEPT
Definition intmap.h:72
i32 smap8_to_32(i8 x) FL_NO_EXCEPT
Use int_scale<int8_t, int32_t>() instead.
Definition intmap.h:88
u32 map16_to_32(u16 x) FL_NO_EXCEPT
Definition intmap.h:60
i8 smap16_to_8(i16 x) FL_NO_EXCEPT
Use int_scale<int16_t, int8_t>() instead.
Definition intmap.h:98
i8 smap32_to_8(i32 x) FL_NO_EXCEPT
Use int_scale<int32_t, int8_t>() instead.
Definition intmap.h:108
u8 map16_to_8(u16 x) FL_NO_EXCEPT
Definition intmap.h:66
unsigned char u8
Definition stdint.h:131
signed char i8
Definition stdint.h:130
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NO_EXCEPT