46 int aInt = 0, bInt = 0;
48 if( aA.GetAs<
int>( &aInt ) && aB.GetAs<
int>( &bInt ) )
53 if( aA.GetAs<wxString>( &aStr ) && aB.GetAs<wxString>( &bStr ) )
66 auto cmp = [&](
auto sentinel ) -> std::optional<bool>
68 using T =
decltype( sentinel );
70 if( aA.CheckType<
T>() && aB.CheckType<
T>() )
71 return aA.As<
T>() == aB.As<
T>();
73 if( aA.CheckType<
T>() != aB.CheckType<
T>() )
79 using llong =
long long;
81 if(
auto r = cmp(
bool{} ) )
return *r;
82 if(
auto r = cmp(
int{} ) )
return *r;
83 if(
auto r = cmp(
long{} ) )
return *r;
84 if(
auto r = cmp( llong{} ) )
return *r;
85 if(
auto r = cmp(
unsigned{} ) )
return *r;
86 if(
auto r = cmp(
float{} ) )
return *r;
87 if(
auto r = cmp(
double{} ) )
return *r;
88 if(
auto r = cmp( wxString{} ) )
return *r;
89 if(
auto r = cmp( std::string{} ) )
return *r;
91 if( aA.CheckType<std::optional<int>>() && aB.CheckType<std::optional<int>>() )
92 return aA.As<std::optional<int>>() == aB.As<std::optional<int>>();
94 if( aA.CheckType<std::optional<double>>() && aB.CheckType<std::optional<double>>() )
95 return aA.As<std::optional<double>>() == aB.As<std::optional<double>>();
103 if( aA.CheckType<
BOX2I>() && aB.CheckType<
BOX2I>() )
109 if( aA.CheckType<
KIID>() && aB.CheckType<
KIID>() )
110 return aA.As<
KIID>() == aB.As<
KIID>();
bool KiWxAnyEquals(const wxAny &aA, const wxAny &aB, const PROPERTY_BASE *aProperty)
Compare two wxAny values for equality across the KiCad property type set.