diff options
Diffstat (limited to 'comphelper')
-rw-r--r-- | comphelper/source/misc/anycompare.cxx | 64 |
1 files changed, 60 insertions, 4 deletions
diff --git a/comphelper/source/misc/anycompare.cxx b/comphelper/source/misc/anycompare.cxx index bb77544c957e..72156024ccd0 100644 --- a/comphelper/source/misc/anycompare.cxx +++ b/comphelper/source/misc/anycompare.cxx @@ -235,10 +235,66 @@ namespace comphelper auto rhsTypeClass = rhs.getValueType().getTypeClass(); if (lhsTypeClass != rhsTypeClass) return lhsTypeClass < rhsTypeClass; - std::unique_ptr< IKeyPredicateLess > pred = getStandardLessPredicate( lhs.getValueType(), Reference< XCollator >() ); - if (!pred) // type==VOID - return false; - return pred->isLess(lhs, rhs); + + switch ( lhsTypeClass ) + { + case TypeClass_CHAR: + return ScalarPredicateLess< sal_Unicode >().isLess(lhs, rhs); + case TypeClass_BOOLEAN: + return ScalarPredicateLess< bool >().isLess(lhs, rhs); + break; + case TypeClass_BYTE: + return ScalarPredicateLess< sal_Int8 >().isLess(lhs, rhs); + break; + case TypeClass_SHORT: + return ScalarPredicateLess< sal_Int16 >().isLess(lhs, rhs); + break; + case TypeClass_UNSIGNED_SHORT: + return ScalarPredicateLess< sal_uInt16 >().isLess(lhs, rhs); + break; + case TypeClass_LONG: + return ScalarPredicateLess< sal_Int32 >().isLess(lhs, rhs); + break; + case TypeClass_UNSIGNED_LONG: + return ScalarPredicateLess< sal_uInt32 >().isLess(lhs, rhs); + break; + case TypeClass_HYPER: + return ScalarPredicateLess< sal_Int64 >().isLess(lhs, rhs); + break; + case TypeClass_UNSIGNED_HYPER: + return ScalarPredicateLess< sal_uInt64 >().isLess(lhs, rhs); + break; + case TypeClass_FLOAT: + return ScalarPredicateLess< float >().isLess(lhs, rhs); + break; + case TypeClass_DOUBLE: + return ScalarPredicateLess< double >().isLess(lhs, rhs); + break; + case TypeClass_STRING: + return StringPredicateLess().isLess(lhs, rhs); + break; + case TypeClass_TYPE: + return TypePredicateLess().isLess(lhs, rhs); + break; + case TypeClass_ENUM: + return EnumPredicateLess( lhs.getValueType() ).isLess(lhs, rhs); + break; + case TypeClass_INTERFACE: + return InterfacePredicateLess().isLess(lhs, rhs); + break; + case TypeClass_STRUCT: + if ( lhs.getValueType().equals( ::cppu::UnoType< Date >::get() ) ) + return DatePredicateLess().isLess(lhs, rhs); + else if ( lhs.getValueType().equals( ::cppu::UnoType< Time >::get() ) ) + return TimePredicateLess().isLess(lhs, rhs); + else if ( lhs.getValueType().equals( ::cppu::UnoType< DateTime >::get() ) ) + return DateTimePredicateLess().isLess(lhs, rhs); + break; + default: ; + } + + // type==VOID + return false; } } // namespace comphelper |