diff options
Diffstat (limited to 'binaryurp/source/lessoperators.cxx')
-rw-r--r-- | binaryurp/source/lessoperators.cxx | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/binaryurp/source/lessoperators.cxx b/binaryurp/source/lessoperators.cxx index b0031e716815..55f3a49c2340 100644 --- a/binaryurp/source/lessoperators.cxx +++ b/binaryurp/source/lessoperators.cxx @@ -32,14 +32,38 @@ namespace com { namespace sun { namespace star { namespace uno { -bool operator <(TypeDescription const & left, TypeDescription const & right) { - assert(left.is() && right.is()); - typelib_TypeClass tc1 = left.get()->eTypeClass; - typelib_TypeClass tc2 = right.get()->eTypeClass; - return tc1 < tc2 || - (tc1 == tc2 && - (OUString(left.get()->pTypeName) < - OUString(right.get()->pTypeName))); +bool operator<( const TypeDescription& rLeft, const TypeDescription& rRight) { + assert( rLeft.is() && rRight.is()); + const typelib_TypeDescription& rA = *rLeft.get(); + const typelib_TypeDescription& rB = *rRight.get(); + if( rA.eTypeClass != rA.eTypeClass) + return (rA.eTypeClass < rB.eTypeClass); + const sal_Int32 nCmp = rtl_ustr_compare_WithLength( + rA.pTypeName->buffer, rA.pTypeName->length, + rB.pTypeName->buffer, rB.pTypeName->length); + return (nCmp < 0); +} + +bool TypeDescEqual::operator()( const TypeDescription& rLeft, const TypeDescription& rRight) const +{ + assert( rLeft.is() && rRight.is()); + const typelib_TypeDescription& rA = *rLeft.get(); + const typelib_TypeDescription& rB = *rRight.get(); + if( rA.eTypeClass != rB.eTypeClass) + return false; + const sal_Int32 nCmp = rtl_ustr_compare_WithLength( + rA.pTypeName->buffer, rA.pTypeName->length, + rB.pTypeName->buffer, rB.pTypeName->length); + return (nCmp == 0); +} + +sal_Int32 TypeDescHash::operator()( const TypeDescription& rTD) const +{ + assert( rTD.is()); + const typelib_TypeDescription& rA = *rTD.get(); + sal_Int32 h = rtl_ustr_hashCode_WithLength( rA.pTypeName->buffer, rA.pTypeName->length); + h ^= static_cast<sal_Int32>(rA.eTypeClass); + return h; } } } } } @@ -47,8 +71,8 @@ bool operator <(TypeDescription const & left, TypeDescription const & right) { namespace rtl { bool operator <(ByteSequence const & left, ByteSequence const & right) { - for (sal_Int32 i = 0; i != std::min(left.getLength(), right.getLength()); - ++i) + const sal_Int32 nLen = std::min( left.getLength(), right.getLength()); + for( sal_Int32 i = 0; i < nLen; ++i ) { if (left[i] < right[i]) { return true; |