summaryrefslogtreecommitdiff
path: root/comphelper
diff options
context:
space:
mode:
Diffstat (limited to 'comphelper')
-rw-r--r--comphelper/source/misc/anycompare.cxx64
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