1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-31 15:12:06 +00:00
This commit is contained in:
J. Nick Koston
2025-10-26 01:30:39 -07:00
parent c30e130a48
commit 97346e5644
5 changed files with 22 additions and 5 deletions

View File

@@ -114,7 +114,7 @@ class LambdaFilter : public Filter {
/** Optimized lambda filter for stateless lambdas (no capture).
*
* Uses function pointer instead of std::function to reduce memory overhead.
* Memory: 8 bytes (function pointer) vs 32 bytes (std::function).
* Memory: 4 bytes (function pointer on 32-bit) vs 32 bytes (std::function).
*/
class StatelessLambdaFilter : public Filter {
public:

View File

@@ -299,7 +299,7 @@ class LambdaFilter : public Filter {
/** Optimized lambda filter for stateless lambdas (no capture).
*
* Uses function pointer instead of std::function to reduce memory overhead.
* Memory: 8 bytes (function pointer) vs 32 bytes (std::function).
* Memory: 4 bytes (function pointer on 32-bit) vs 32 bytes (std::function).
*/
class StatelessLambdaFilter : public Filter {
public:

View File

@@ -65,7 +65,7 @@ class LambdaFilter : public Filter {
/** Optimized lambda filter for stateless lambdas (no capture).
*
* Uses function pointer instead of std::function to reduce memory overhead.
* Memory: 8 bytes (function pointer) vs 32 bytes (std::function).
* Memory: 4 bytes (function pointer on 32-bit) vs 32 bytes (std::function).
*/
class StatelessLambdaFilter : public Filter {
public:

View File

@@ -81,7 +81,7 @@ template<typename... Ts> class LambdaCondition : public Condition<Ts...> {
/// Optimized lambda condition for stateless lambdas (no capture).
/// Uses function pointer instead of std::function to reduce memory overhead.
/// Memory: 8 bytes (function pointer) vs 32 bytes (std::function).
/// Memory: 4 bytes (function pointer on 32-bit) vs 32 bytes (std::function).
template<typename... Ts> class StatelessLambdaCondition : public Condition<Ts...> {
public:
explicit StatelessLambdaCondition(bool (*f)(Ts...)) : f_(f) {}
@@ -204,7 +204,7 @@ template<typename... Ts> class LambdaAction : public Action<Ts...> {
/// Optimized lambda action for stateless lambdas (no capture).
/// Uses function pointer instead of std::function to reduce memory overhead.
/// Memory: 8 bytes (function pointer) vs 32 bytes (std::function).
/// Memory: 4 bytes (function pointer on 32-bit) vs 32 bytes (std::function).
template<typename... Ts> class StatelessLambdaAction : public Action<Ts...> {
public:
explicit StatelessLambdaAction(void (*f)(Ts...)) : f_(f) {}

View File

@@ -213,6 +213,23 @@ class TestLambdaExpression:
"+[](int32_t foo, float bar) -> float {\n return foo + bar;\n}"
)
def test_str__with_capture_no_prefix(self):
"""Test lambda with capture (not stateless) does NOT get + prefix"""
target = cg.LambdaExpression(
("return captured_var + x;",),
((int, "x"),),
"captured_var", # Has capture (not stateless)
int,
)
actual = str(target)
# Should NOT have + prefix
assert actual == (
"[captured_var](int32_t x) -> int32_t {\n return captured_var + x;\n}"
)
assert not actual.startswith("+")
class TestLiterals:
@pytest.mark.parametrize(