Skip to content

Commit 2627190

Browse files
committed
Extend operators.
1 parent 5a3358e commit 2627190

File tree

1 file changed

+80
-5
lines changed

1 file changed

+80
-5
lines changed

include/tao/json/operators.hpp

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,19 @@ namespace tao
168168
return lhs == rhs;
169169
}
170170

171+
template< template< typename... > class Traits, typename Base, typename T >
172+
bool operator==( const basic_value< Traits, Base >& lhs, const tao::optional< T >& rhs ) noexcept
173+
{
174+
static_assert( noexcept( Traits< tao::optional< T > >::equal( lhs, rhs ) ), "equal must be noexcept" );
175+
return Traits< tao::optional< T > >::equal( lhs, rhs );
176+
}
177+
178+
template< typename T, template< typename... > class Traits, typename Base >
179+
bool operator==( const tao::optional< T >& lhs, const basic_value< Traits, Base >& rhs ) noexcept
180+
{
181+
return rhs == lhs;
182+
}
183+
171184
template< template< typename... > class Traits, typename Base, typename T, typename = decltype( Traits< typename std::decay< T >::type >::equal( std::declval< const basic_value< Traits, Base >& >(), std::declval< const T& >() ) ) >
172185
bool operator==( const basic_value< Traits, Base >& lhs, const T& rhs ) noexcept
173186
{
@@ -179,9 +192,7 @@ namespace tao
179192
template< typename T, template< typename... > class Traits, typename Base, typename = decltype( Traits< typename std::decay< T >::type >::equal( std::declval< const basic_value< Traits, Base >& >(), std::declval< const T& >() ) ) >
180193
bool operator==( const T& lhs, const basic_value< Traits, Base >& rhs ) noexcept
181194
{
182-
using D = typename std::decay< T >::type;
183-
static_assert( noexcept( Traits< D >::equal( rhs, lhs ) ), "equal must be noexcept" );
184-
return Traits< D >::equal( rhs, lhs );
195+
return rhs == lhs;
185196
}
186197

187198
template< template< typename... > class TraitsL, typename BaseL, template< typename... > class TraitsR, typename BaseR >
@@ -190,6 +201,18 @@ namespace tao
190201
return !( lhs == rhs );
191202
}
192203

204+
template< template< typename... > class Traits, typename Base, typename T >
205+
bool operator!=( const basic_value< Traits, Base >& lhs, const tao::optional< T >& rhs ) noexcept
206+
{
207+
return !( lhs == rhs );
208+
}
209+
210+
template< typename T, template< typename... > class Traits, typename Base >
211+
bool operator!=( const tao::optional< T >& lhs, const basic_value< Traits, Base >& rhs ) noexcept
212+
{
213+
return !( rhs == lhs );
214+
}
215+
193216
template< template< typename... > class Traits, typename Base, typename T >
194217
bool operator!=( const basic_value< Traits, Base >& lhs, const T& rhs ) noexcept
195218
{
@@ -360,6 +383,20 @@ namespace tao
360383
return lhs < rhs;
361384
}
362385

386+
template< template< typename... > class Traits, typename Base, typename T >
387+
bool operator<( const basic_value< Traits, Base >& lhs, const tao::optional< T >& rhs ) noexcept
388+
{
389+
static_assert( noexcept( Traits< tao::optional< T > >::less_than( lhs, rhs ) ), "less_than must be noexcept" );
390+
return Traits< tao::optional< T > >::less_than( lhs, rhs );
391+
}
392+
393+
template< typename T, template< typename... > class Traits, typename Base >
394+
bool operator<( const tao::optional< T >& lhs, const basic_value< Traits, Base >& rhs ) noexcept
395+
{
396+
static_assert( noexcept( Traits< tao::optional< T > >::greater_than( rhs, lhs ) ), "greater_than must be noexcept" );
397+
return Traits< tao::optional< T > >::greater_than( rhs, lhs );
398+
}
399+
363400
template< template< typename... > class Traits, typename Base, typename T, typename = decltype( Traits< typename std::decay< T >::type >::less_than( std::declval< const basic_value< Traits, Base >& >(), std::declval< const T& >() ) ) >
364401
bool operator<( const basic_value< Traits, Base >& lhs, const T& rhs ) noexcept
365402
{
@@ -372,7 +409,7 @@ namespace tao
372409
bool operator<( const T& lhs, const basic_value< Traits, Base >& rhs ) noexcept
373410
{
374411
using D = typename std::decay< T >::type;
375-
static_assert( noexcept( Traits< D >::greater_than( rhs, lhs ) ), "less_than must be noexcept" );
412+
static_assert( noexcept( Traits< D >::greater_than( rhs, lhs ) ), "greater_than must be noexcept" );
376413
return Traits< D >::greater_than( rhs, lhs );
377414
}
378415

@@ -394,11 +431,25 @@ namespace tao
394431
return rhs < lhs;
395432
}
396433

434+
template< template< typename... > class Traits, typename Base, typename T >
435+
bool operator>( const basic_value< Traits, Base >& lhs, const tao::optional< T >& rhs ) noexcept
436+
{
437+
static_assert( noexcept( Traits< tao::optional< T > >::greater_than( lhs, rhs ) ), "greater_than must be noexcept" );
438+
return Traits< tao::optional< T > >::greater_than( lhs, rhs );
439+
}
440+
441+
template< typename T, template< typename... > class Traits, typename Base >
442+
bool operator>( const tao::optional< T >& lhs, const basic_value< Traits, Base >& rhs ) noexcept
443+
{
444+
static_assert( noexcept( Traits< tao::optional< T > >::less_than( rhs, lhs ) ), "less_than must be noexcept" );
445+
return Traits< tao::optional< T > >::less_than( rhs, lhs );
446+
}
447+
397448
template< template< typename... > class Traits, typename Base, typename T, typename = decltype( Traits< typename std::decay< T >::type >::greater_than( std::declval< const basic_value< Traits, Base >& >(), std::declval< const T& >() ) ) >
398449
bool operator>( const basic_value< Traits, Base >& lhs, const T& rhs ) noexcept
399450
{
400451
using D = typename std::decay< T >::type;
401-
static_assert( noexcept( Traits< D >::greater_than( lhs, rhs ) ), "less_than must be noexcept" );
452+
static_assert( noexcept( Traits< D >::greater_than( lhs, rhs ) ), "greater_than must be noexcept" );
402453
return Traits< D >::greater_than( lhs, rhs );
403454
}
404455

@@ -416,6 +467,18 @@ namespace tao
416467
return !( lhs > rhs );
417468
}
418469

470+
template< template< typename... > class Traits, typename Base, typename T >
471+
bool operator<=( const basic_value< Traits, Base >& lhs, const tao::optional< T >& rhs ) noexcept
472+
{
473+
return !( lhs > rhs );
474+
}
475+
476+
template< typename T, template< typename... > class Traits, typename Base >
477+
bool operator<=( const tao::optional< T >& lhs, const basic_value< Traits, Base >& rhs ) noexcept
478+
{
479+
return !( lhs > rhs );
480+
}
481+
419482
template< template< typename... > class Traits, typename Base, typename T >
420483
bool operator<=( const basic_value< Traits, Base >& lhs, const T& rhs ) noexcept
421484
{
@@ -434,6 +497,18 @@ namespace tao
434497
return !( lhs < rhs );
435498
}
436499

500+
template< template< typename... > class Traits, typename Base, typename T >
501+
bool operator>=( const basic_value< Traits, Base >& lhs, const tao::optional< T >& rhs ) noexcept
502+
{
503+
return !( lhs < rhs );
504+
}
505+
506+
template< typename T, template< typename... > class Traits, typename Base >
507+
bool operator>=( const tao::optional< T >& lhs, const basic_value< Traits, Base >& rhs ) noexcept
508+
{
509+
return !( lhs < rhs );
510+
}
511+
437512
template< template< typename... > class Traits, typename Base, typename T >
438513
bool operator>=( const basic_value< Traits, Base >& lhs, const T& rhs ) noexcept
439514
{

0 commit comments

Comments
 (0)