31#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
41 template<
typename R,
typename... P>
42 R IRAM_ATTR vPtrToFunPtrExec(
void* fn, P... args)
44 using target_type = R(P...);
55#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
56 template<
typename A,
typename R,
typename... P>
107 if (
FUNC == del.kind)
111 else if (
FPA == del.kind)
150 if (
this == &del)
return *
this;
189 if (
this == &del)
return *
this;
190 if (
kind != del.kind)
200 if (
FUNC == del.kind)
204 else if (
FPA == del.kind)
210 if (
FUNC == del.kind)
214 else if (
FPA == del.kind)
256 operator bool()
const
283 return vPtrToFunPtrExec<R, P...>;
291 return [](
void* self, P... args) -> R
302 return reinterpret_cast<void*
>(
fn);
354 template<
typename A,
typename R,
typename... P>
431 if (
this == &del)
return *
this;
454 if (
this == &del)
return *
this;
455 if (
kind != del.kind)
497 operator bool()
const
520 return vPtrToFunPtrExec<R, P...>;
532 return reinterpret_cast<void*
>(
fn);
562#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
563 template<
typename R,
typename... P>
564 class DelegatePImpl<void, R, P...> {
593 if (
FUNC == del.kind)
606 if (
FUNC == del.kind)
630 if (
this == &del)
return *
this;
640 if (
FUNC == del.kind)
653 if (
this == &del)
return *
this;
663 if (
FUNC == del.kind)
696 operator bool()
const
712 return vPtrToFunPtrExec<R, P...>;
716 return [](
void* self, P... args) -> R
727 return reinterpret_cast<void*
>(
fn);
767 template<
typename R,
typename... P>
807 if (
this == &del)
return *
this;
814 if (
this == &del)
return *
this;
831 operator bool()
const
838 return vPtrToFunPtrExec<R, P...>;
843 return reinterpret_cast<void*
>(
fn);
856#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
857 template<
typename A,
typename R>
890 if (
FUNC == del.kind)
894 else if (
FPA == del.kind)
897 new (&
obj) A(del.obj);
908 if (
FUNC == del.kind)
912 else if (
FPA == del.kind)
951 if (
this == &del)
return *
this;
952 if (
kind != del.kind)
962 if (
FUNC == del.kind)
966 else if (
FPA == del.kind)
972 if (
FUNC == del.kind)
976 else if (
FPA == del.kind)
990 if (
this == &del)
return *
this;
991 if (
kind != del.kind)
1001 if (
FUNC == del.kind)
1005 else if (
FPA == del.kind)
1011 if (
FUNC == del.kind)
1015 else if (
FPA == del.kind)
1057 operator bool()
const
1091 return [](
void* self) -> R
1118 return [
this]() {
return fnA(
obj); };
1154 template<
typename A,
typename R>
1178 if (
FPA == del.kind)
1192 if (
FPA == del.kind)
1231 if (
this == &del)
return *
this;
1232 if (
kind != del.kind)
1240 if (
FPA == del.kind)
1254 if (
this == &del)
return *
this;
1255 if (
kind != del.kind)
1263 if (
FPA == del.kind)
1297 operator bool()
const
1361#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1362 template<
typename R>
1363 class DelegateImpl<void, R> {
1392 if (
FUNC == del.kind)
1405 if (
FUNC == del.kind)
1429 if (
this == &del)
return *
this;
1439 if (
FUNC == del.kind)
1452 if (
this == &del)
return *
this;
1462 if (
FUNC == del.kind)
1495 operator bool()
const
1515 return [](
void* self) -> R
1566 template<
typename R>
1606 if (
this == &del)
return *
this;
1613 if (
this == &del)
return *
this;
1630 operator bool()
const
1655 template<
typename A = void,
typename R = void,
typename... P>
1664#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1673#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1682 static_cast<const detail::
DelegatePImpl<A, R, P...>&>(del)) {}
1716 template<
typename A,
typename R,
typename... P>
1725#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1743#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1763 static_cast<const detail::
DelegatePImpl<A*, R, P...>&>(del)) {}
1795 template<
typename R,
typename... P>
1802#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1812#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1821 static_cast<const detail::
DelegatePImpl<void, R, P...>&>(del)) {}
1851 template<
typename A,
typename R>
1860#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1869#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1878 static_cast<const detail::
DelegateImpl<A, R>&>(del)) {}
1912 template<
typename A,
typename R>
1921#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1939#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
1959 static_cast<const detail::
DelegateImpl<A*, R>&>(del)) {}
1991 template<
typename R>
1998#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
2008#if !defined(ARDUINO) || defined(ESP8266) || defined(ESP32)
2017 static_cast<const detail::
DelegateImpl<void, R>&>(del)) {}
2049template<
typename A = void,
typename R = void,
typename... P>
class Delegate;
Delegate(const Delegate &del)
Definition Delegate.h:2057
Delegate & operator=(typename delegate::detail::Delegate< A, R, P... >::FunPtr fn)
Definition Delegate.h:2081
Delegate & operator=(const Delegate &del)
Definition Delegate.h:2071
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:2086
Delegate(F functional)
Definition Delegate.h:2069
Delegate(typename delegate::detail::Delegate< A, R, P... >::FunAPtr fnA, const A &obj)
Definition Delegate.h:2063
Delegate(Delegate &&del)
Definition Delegate.h:2060
Delegate(typename delegate::detail::Delegate< A, R, P... >::FunAPtr fnA, A &&obj)
Definition Delegate.h:2065
Delegate(typename delegate::detail::Delegate< A, R, P... >::FunPtr fn)
Definition Delegate.h:2067
Delegate(std::nullptr_t)
Definition Delegate.h:2055
Delegate & operator=(Delegate &&del)
Definition Delegate.h:2076
Delegate()
Definition Delegate.h:2053
Delegate(Delegate &&del)
Definition Delegate.h:2102
Delegate(const Delegate &del)
Definition Delegate.h:2099
Delegate(typename delegate::detail::Delegate< void, R, P... >::FunPtr fn)
Definition Delegate.h:2105
Delegate & operator=(typename delegate::detail::Delegate< void, R, P... >::FunPtr fn)
Definition Delegate.h:2119
Delegate(F functional)
Definition Delegate.h:2107
Delegate & operator=(Delegate &&del)
Definition Delegate.h:2114
Delegate()
Definition Delegate.h:2095
Delegate(std::nullptr_t)
Definition Delegate.h:2097
Delegate & operator=(const Delegate &del)
Definition Delegate.h:2109
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:2124
Definition Delegate.h:2049
Delegate(const Delegate &del)
Definition Delegate.h:1877
target_type * FunPtr
Definition Delegate.h:1857
Delegate(FunAPtr fnA, A &&obj)
Definition Delegate.h:1885
R() target_type
Definition Delegate.h:1855
Delegate(Delegate &&del)
Definition Delegate.h:1880
Delegate & operator=(const Delegate &del)
Definition Delegate.h:1891
R(*)(void *) FunVPPtr
Definition Delegate.h:1859
Delegate & operator=(Delegate &&del)
Definition Delegate.h:1896
Delegate(std::nullptr_t)
Definition Delegate.h:1875
Delegate(FunPtr fn)
Definition Delegate.h:1887
Delegate(FunAPtr fnA, const A &obj)
Definition Delegate.h:1883
Delegate()
Definition Delegate.h:1873
Delegate(F functional)
Definition Delegate.h:1889
R(*)(A) FunAPtr
Definition Delegate.h:1858
std::function< target_type > FunctionType
Definition Delegate.h:1861
Delegate & operator=(FunPtr fn)
Definition Delegate.h:1901
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:1906
void * arg() const
Definition Delegate.h:1746
R(P...) target_type
Definition Delegate.h:1720
Delegate()
Definition Delegate.h:1758
R(*)(A *, P...) FunAPtr
Definition Delegate.h:1723
Delegate(const Delegate &del)
Definition Delegate.h:1762
Delegate & operator=(FunPtr fn)
Definition Delegate.h:1784
Delegate(std::nullptr_t)
Definition Delegate.h:1760
Delegate & operator=(const Delegate &del)
Definition Delegate.h:1774
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:1789
std::function< target_type > FunctionType
Definition Delegate.h:1726
Delegate(FunPtr fn)
Definition Delegate.h:1770
Delegate(F functional)
Definition Delegate.h:1772
R(*)(void *, P...) FunVPPtr
Definition Delegate.h:1724
Delegate(FunAPtr fnA, A *obj)
Definition Delegate.h:1768
Delegate & operator=(Delegate &&del)
Definition Delegate.h:1779
target_type * FunPtr
Definition Delegate.h:1722
Delegate(Delegate &&del)
Definition Delegate.h:1765
R() target_type
Definition Delegate.h:1916
Delegate(FunPtr fn)
Definition Delegate.h:1966
Delegate()
Definition Delegate.h:1954
R(*)(void *) FunVPPtr
Definition Delegate.h:1920
void * arg() const
Definition Delegate.h:1942
target_type * FunPtr
Definition Delegate.h:1918
std::function< target_type > FunctionType
Definition Delegate.h:1922
Delegate & operator=(const Delegate &del)
Definition Delegate.h:1970
Delegate(FunAPtr fnA, A *obj)
Definition Delegate.h:1964
R(*)(A *) FunAPtr
Definition Delegate.h:1919
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:1985
Delegate(const Delegate &del)
Definition Delegate.h:1958
Delegate & operator=(FunPtr fn)
Definition Delegate.h:1980
Delegate(Delegate &&del)
Definition Delegate.h:1961
Delegate(F functional)
Definition Delegate.h:1968
Delegate & operator=(Delegate &&del)
Definition Delegate.h:1975
Delegate(std::nullptr_t)
Definition Delegate.h:1956
Delegate & operator=(FunPtr fn)
Definition Delegate.h:1840
Delegate & operator=(const Delegate &del)
Definition Delegate.h:1830
Delegate(Delegate &&del)
Definition Delegate.h:1823
Delegate(std::nullptr_t)
Definition Delegate.h:1818
Delegate(const Delegate &del)
Definition Delegate.h:1820
Delegate(F functional)
Definition Delegate.h:1828
R(P...) target_type
Definition Delegate.h:1799
Delegate()
Definition Delegate.h:1816
Delegate(FunPtr fn)
Definition Delegate.h:1826
Delegate & operator=(Delegate &&del)
Definition Delegate.h:1835
std::function< target_type > FunctionType
Definition Delegate.h:1803
R(*)(void *, P...) FunVPPtr
Definition Delegate.h:1805
target_type * FunPtr
Definition Delegate.h:1801
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:1845
Delegate(std::nullptr_t)
Definition Delegate.h:2014
Delegate(Delegate &&del)
Definition Delegate.h:2019
R() target_type
Definition Delegate.h:1995
target_type * FunPtr
Definition Delegate.h:1997
Delegate()
Definition Delegate.h:2012
Delegate(FunPtr fn)
Definition Delegate.h:2022
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:2041
Delegate(F functional)
Definition Delegate.h:2024
Delegate & operator=(const Delegate &del)
Definition Delegate.h:2026
R(*)(void *) FunVPPtr
Definition Delegate.h:2001
Delegate & operator=(Delegate &&del)
Definition Delegate.h:2031
Delegate & operator=(FunPtr fn)
Definition Delegate.h:2036
Delegate(const Delegate &del)
Definition Delegate.h:2016
std::function< target_type > FunctionType
Definition Delegate.h:1999
Definition Delegate.h:1657
std::function< target_type > FunctionType
Definition Delegate.h:1665
Delegate & operator=(Delegate &&del)
Definition Delegate.h:1700
Delegate(FunAPtr fnA, const A &obj)
Definition Delegate.h:1687
Delegate(std::nullptr_t)
Definition Delegate.h:1679
R(P...) target_type
Definition Delegate.h:1659
R(*)(void *, P...) FunVPPtr
Definition Delegate.h:1663
Delegate(F functional)
Definition Delegate.h:1693
Delegate & operator=(FunPtr fn)
Definition Delegate.h:1705
Delegate(Delegate &&del)
Definition Delegate.h:1684
R(*)(A, P...) FunAPtr
Definition Delegate.h:1662
Delegate(FunAPtr fnA, A &&obj)
Definition Delegate.h:1689
Delegate &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:1710
Delegate & operator=(const Delegate &del)
Definition Delegate.h:1695
Delegate(FunPtr fn)
Definition Delegate.h:1691
Delegate(const Delegate &del)
Definition Delegate.h:1681
Delegate()
Definition Delegate.h:1677
target_type * FunPtr
Definition Delegate.h:1661
DelegateImpl(FunPtr fn)
Definition Delegate.h:1415
DelegateImpl(std::nullptr_t)
Definition Delegate.h:1377
void * arg() const
Definition Delegate.h:1522
R IRAM_ATTR operator()() const
Definition Delegate.h:1546
DelegateImpl(F fn)
Definition Delegate.h:1599
R() target_type
Definition Delegate.h:1365
DelegateImpl &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:1484
DelegateImpl & operator=(DelegateImpl &&del)
Definition Delegate.h:1450
DelegateImpl()
Definition Delegate.h:1371
DelegateImpl & operator=(FunPtr fn)
Definition Delegate.h:1473
DelegateImpl(F functional)
Definition Delegate.h:1421
DelegateImpl & operator=(const DelegateImpl &del)
Definition Delegate.h:1427
DelegateImpl(const DelegateImpl &del)
Definition Delegate.h:1389
std::function< target_type > FunctionType
Definition Delegate.h:1368
~DelegateImpl()
Definition Delegate.h:1383
R(*)(void *) FunVPPtr
Definition Delegate.h:1369
DelegateImpl(DelegateImpl &&del)
Definition Delegate.h:1402
target_type * FunPtr
Definition Delegate.h:1367
FunctionType functional
Definition Delegate.h:1560
FunPtr fn
Definition Delegate.h:1561
Definition Delegate.h:1155
DelegateImpl(FunAPtr fnA, const A &obj)
Definition Delegate.h:923
std::function< target_type > FunctionType
Definition Delegate.h:864
DelegateImpl & operator=(const DelegateImpl &del)
Definition Delegate.h:949
target_type * FunPtr
Definition Delegate.h:862
R() target_type
Definition Delegate.h:860
FunAPtr fnA
Definition Delegate.h:1147
DelegateImpl(const DelegateImpl &del)
Definition Delegate.h:887
@ FUNC
Definition Delegate.h:1151
R(*)(void *) FunVPPtr
Definition Delegate.h:865
@ FP
Definition Delegate.h:1151
@ FPA
Definition Delegate.h:1151
DelegateImpl & operator=(DelegateImpl &&del)
Definition Delegate.h:988
R IRAM_ATTR operator()() const
Definition Delegate.h:1126
enum delegate::detail::DelegateImpl::@13 kind
~DelegateImpl()
Definition Delegate.h:879
void * arg() const
Definition Delegate.h:1098
static R IRAM_ATTR vPtrToFunAPtrExec(void *self)
Definition Delegate.h:1073
DelegateImpl &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:1042
DelegateImpl(F functional)
Definition Delegate.h:943
DelegateImpl & operator=(FunPtr fn)
Definition Delegate.h:1027
DelegateImpl(FunAPtr fnA, A &&obj)
Definition Delegate.h:930
DelegateImpl()
Definition Delegate.h:867
R(*)(A) FunAPtr
Definition Delegate.h:863
DelegateImpl(F fn)
Definition Delegate.h:1223
DelegateImpl(std::nullptr_t)
Definition Delegate.h:873
DelegateImpl(FunPtr fn)
Definition Delegate.h:937
DelegateImpl(DelegateImpl &&del)
Definition Delegate.h:905
A obj
Definition Delegate.h:1148
FunPtr fn
Definition Delegate.h:1145
FunctionType functional
Definition Delegate.h:1144
void * arg() const
Definition Delegate.h:723
DelegatePImpl(DelegatePImpl &&del)
Definition Delegate.h:603
R(*)(void *, P...) FunVPPtr
Definition Delegate.h:570
R IRAM_ATTR operator()(P... args) const
Definition Delegate.h:747
target_type * FunPtr
Definition Delegate.h:568
~DelegatePImpl()
Definition Delegate.h:584
DelegatePImpl & operator=(DelegatePImpl &&del)
Definition Delegate.h:651
DelegatePImpl(const DelegatePImpl &del)
Definition Delegate.h:590
DelegatePImpl & operator=(const DelegatePImpl &del)
Definition Delegate.h:628
DelegatePImpl(FunPtr fn)
Definition Delegate.h:616
FunctionType functional
Definition Delegate.h:761
DelegatePImpl()
Definition Delegate.h:572
R(P...) target_type
Definition Delegate.h:566
DelegatePImpl(F functional)
Definition Delegate.h:622
DelegatePImpl(F fn)
Definition Delegate.h:800
FunPtr fn
Definition Delegate.h:762
DelegatePImpl(std::nullptr_t)
Definition Delegate.h:578
DelegatePImpl &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:685
std::function< target_type > FunctionType
Definition Delegate.h:569
DelegatePImpl & operator=(FunPtr fn)
Definition Delegate.h:674
Definition Delegate.h:355
enum delegate::detail::DelegatePImpl::@2 kind
DelegatePImpl()
Definition Delegate.h:66
DelegatePImpl(std::nullptr_t)
Definition Delegate.h:72
DelegatePImpl &IRAM_ATTR operator=(std::nullptr_t)
Definition Delegate.h:241
DelegatePImpl(const DelegatePImpl &del)
Definition Delegate.h:86
~DelegatePImpl()
Definition Delegate.h:78
DelegatePImpl & operator=(DelegatePImpl &&del)
Definition Delegate.h:187
static R IRAM_ATTR vPtrToFunAPtrExec(void *self, P... args)
Definition Delegate.h:272
R(*)(A, P...) FunAPtr
Definition Delegate.h:62
DelegatePImpl(FunAPtr fnA, A &&obj)
Definition Delegate.h:129
A obj
Definition Delegate.h:348
FunctionType functional
Definition Delegate.h:344
DelegatePImpl(DelegatePImpl &&del)
Definition Delegate.h:104
@ FPA
Definition Delegate.h:351
@ FP
Definition Delegate.h:351
void * arg() const
Definition Delegate.h:298
target_type * FunPtr
Definition Delegate.h:61
DelegatePImpl(F functional)
Definition Delegate.h:142
R IRAM_ATTR operator()(P... args) const
Definition Delegate.h:326
DelegatePImpl & operator=(FunPtr fn)
Definition Delegate.h:226
@ FUNC
Definition Delegate.h:351
DelegatePImpl(FunAPtr fnA, const A &obj)
Definition Delegate.h:122
FunPtr fn
Definition Delegate.h:345
R(*)(void *, P...) FunVPPtr
Definition Delegate.h:63
DelegatePImpl(FunPtr fn)
Definition Delegate.h:136
DelegatePImpl & operator=(const DelegatePImpl &del)
Definition Delegate.h:148
R(P...) target_type
Definition Delegate.h:59
std::function< target_type > FunctionType
Definition Delegate.h:64
FunAPtr fnA
Definition Delegate.h:347
T && move(T &t) noexcept
Definition ghostl.h:50
decltype(nullptr) nullptr_t
Definition ghostl.h:80
T && forward(typename identity< T >::type &t) noexcept
Definition ghostl.h:88
T * function
Definition ghostl.h:79