Simplify O(U)String::number implementation

Change-Id: I059f0324597a90aee01c95170a48ac5578f3caee
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150037
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
This commit is contained in:
Mike Kaganski
2023-04-05 09:57:04 +02:00
parent 53e24da369
commit 90c590812e
11 changed files with 105 additions and 201 deletions
+1 -3
View File
@@ -196,9 +196,7 @@ void StringView::handleCXXConstructExpr(CXXConstructExpr const* expr)
break;
}
loplugin::TypeCheck tc(t);
if (tc.RvalueReference().Struct("StringNumberBase").Namespace("rtl").GlobalNamespace()
|| tc.RvalueReference().Struct("OStringNumber").Namespace("rtl").GlobalNamespace()
|| tc.RvalueReference().Struct("OUStringNumber").Namespace("rtl").GlobalNamespace()
if (tc.RvalueReference().Struct("StringNumber").Namespace("rtl").GlobalNamespace()
|| tc.ClassOrStruct("basic_string_view").StdNamespace())
{
argType = expr->getArg(0)->IgnoreImplicit()->getType();
+2 -2
View File
@@ -164,7 +164,7 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2, OString
call_view(OString(l1));
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a 'std::string_view' (aka 'basic_string_view<char>'), pass a 'std::string_view' [loplugin:stringview]}}
call_view(OString(std::string_view("foo")));
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a 'OStringNumber<int>', pass a 'std::string_view' [loplugin:stringview]}}
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a '{{(rtl::)?}}StringNumber<char, 33>', pass a 'std::string_view' [loplugin:stringview]}}
call_view(OString(OString::number(0)));
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OString' constructed from a 'OStringConcat<{{(rtl::)?}}OString, {{(rtl::)?}}OString>' (aka 'StringConcat<char, rtl::OString, rtl::OString>'), pass a 'std::string_view' via 'rtl::Concat2View' [loplugin:stringview]}}
call_view(OString(s3 + s3));
@@ -188,7 +188,7 @@ void f5(char const* s1, sal_Int32 n1, char16_t const* s2, sal_Int32 n2, OString
call_view(OUString(l2));
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a 'std::u16string_view' (aka 'basic_string_view<char16_t>'), pass a 'std::u16string_view' [loplugin:stringview]}}
call_view(OUString(std::u16string_view(u"foo")));
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a 'OUStringNumber<int>', pass a 'std::u16string_view' [loplugin:stringview]}}
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a '{{(rtl::)?}}StringNumber<char16_t, 33>', pass a 'std::u16string_view' [loplugin:stringview]}}
call_view(OUString(OUString::number(0)));
// expected-error-re@+1 {{instead of an '{{(rtl::)?}}OUString' constructed from a 'OUStringConcat<{{(rtl::)?}}OUString, {{(rtl::)?}}OUString>' (aka 'StringConcat<char16_t, rtl::OUString, rtl::OUString>'), pass a 'std::u16string_view' via 'rtl::Concat2View' [loplugin:stringview]}}
call_view(OUString(s4 + s4));
+2 -2
View File
@@ -87,8 +87,8 @@ public:
explicit inline Any(rtl::OUStringConcat<T1, T2> && value);
template<typename T1, typename T2>
explicit Any(rtl::OUStringConcat<T1, T2> const &) = delete;
template<typename T> explicit inline Any(rtl::OUStringNumber<T> && value);
template<typename T> explicit Any(rtl::OUStringNumber<T> const &) = delete;
template<std::size_t nBufSize> explicit inline Any(rtl::StringNumber<sal_Unicode, nBufSize> && value);
template<std::size_t nBufSize> explicit Any(rtl::StringNumber<sal_Unicode, nBufSize> const &) = delete;
template <std::size_t N> explicit inline Any(const rtl::OUStringLiteral<N>& value);
#endif
+8 -8
View File
@@ -84,8 +84,8 @@ template<typename T1, typename T2>
Any::Any(rtl::OUStringConcat<T1, T2> && value):
Any(rtl::OUString(std::move(value)))
{}
template<typename T>
Any::Any(rtl::OUStringNumber<T> && value): Any(rtl::OUString(std::move(value))) {}
template<std::size_t nBufSize>
Any::Any(rtl::StringNumber<sal_Unicode, nBufSize> && value): Any(rtl::OUString(std::move(value))) {}
template <std::size_t N>
Any::Any(const rtl::OUStringLiteral<N>& value): Any(rtl::OUString(value)) {}
#endif
@@ -254,8 +254,8 @@ template<typename T1, typename T2>
Any toAny(rtl::OUStringConcat<T1, T2> && value)
{ return Any(std::move(value)); }
template<typename T>
Any toAny(rtl::OUStringNumber<T> && value)
template<std::size_t nBufSize>
Any toAny(rtl::StringNumber<sal_Unicode, nBufSize> && value)
{ return Any(std::move(value)); }
template<typename T> bool fromAny(Any const & any, T * value) {
@@ -304,8 +304,8 @@ inline void operator <<= ( Any & rAny, rtl::OUStringConcat< C1, C2 >&& value )
}
template<typename T1, typename T2>
void operator <<=(Any &, rtl::OUStringConcat<T1, T2> const &) = delete;
template< class C >
inline void operator <<= ( Any & rAny, rtl::OUStringNumber< C >&& value )
template< std::size_t nBufSize >
inline void operator <<= ( Any & rAny, rtl::StringNumber< sal_Unicode, nBufSize >&& value )
{
const rtl::OUString str( std::move(value) );
const Type & rType = ::cppu::getTypeFavourUnsigned(&str);
@@ -313,8 +313,8 @@ inline void operator <<= ( Any & rAny, rtl::OUStringNumber< C >&& value )
&rAny, const_cast< rtl::OUString * >( &str ), rType.getTypeLibType(),
cpp_acquire, cpp_release );
}
template<typename T>
void operator <<=(Any &, rtl::OUStringNumber<T> const &) = delete;
template<std::size_t nBufSize>
void operator <<=(Any &, rtl::StringNumber<sal_Unicode, nBufSize> const &) = delete;
#endif
#if defined LIBO_INTERNAL_ONLY
+6 -6
View File
@@ -257,8 +257,8 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OStringBuffer( StringNumberBase< char, T, N >&& n )
template< std::size_t N >
OStringBuffer( OStringNumber< N >&& n )
: OStringBuffer( n.buf, n.length)
{}
#endif
@@ -345,8 +345,8 @@ public:
}
/** @overload @internal */
template<typename T, std::size_t N>
OStringBuffer & operator =(StringNumberBase<char, T, N> && n)
template<std::size_t N>
OStringBuffer & operator =(OStringNumber<N> && n)
{
*this = OStringBuffer( std::move ( n ));
return *this;
@@ -629,8 +629,8 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OStringBuffer& append( StringNumberBase< char, T, N >&& c )
template< std::size_t N >
OStringBuffer& append( OStringNumber< N >&& c )
{
return append( c.buf, c.length );
}
+25 -22
View File
@@ -439,8 +439,8 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OString( StringNumberBase< char, T, N >&& n )
template< std::size_t N >
OString( OStringNumber< N >&& n )
: OString( n.buf, n.length )
{}
#endif
@@ -622,12 +622,12 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OString& operator+=( StringNumberBase< char, T, N >&& n ) & {
template< std::size_t N >
OString& operator+=( OStringNumber< N >&& n ) & {
return operator +=(std::string_view(n.buf, n.length));
}
template<typename T, std::size_t N> void operator +=(
StringNumberBase<char, T, N> &&) && = delete;
template<std::size_t N> void operator +=(
OStringNumber<N> &&) && = delete;
#endif
/**
@@ -1997,37 +1997,37 @@ public:
#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
static OStringNumber< int > number( int i, sal_Int16 radix = 10 )
static auto number( int i, sal_Int16 radix = 10 )
{
return OStringNumber< int >( i, radix );
return OStringNumber<RTL_STR_MAX_VALUEOFINT32>(rtl_str_valueOfInt32, i, radix);
}
static OStringNumber< long long > number( long long ll, sal_Int16 radix = 10 )
static auto number( long long ll, sal_Int16 radix = 10 )
{
return OStringNumber< long long >( ll, radix );
return OStringNumber<RTL_STR_MAX_VALUEOFINT64>(rtl_str_valueOfInt64, ll, radix);
}
static OStringNumber< unsigned long long > number( unsigned long long ll, sal_Int16 radix = 10 )
static auto number( unsigned long long ll, sal_Int16 radix = 10 )
{
return OStringNumber< unsigned long long >( ll, radix );
return OStringNumber<RTL_STR_MAX_VALUEOFUINT64>(rtl_str_valueOfUInt64, ll, radix);
}
static OStringNumber< unsigned long long > number( unsigned int i, sal_Int16 radix = 10 )
static auto number( unsigned int i, sal_Int16 radix = 10 )
{
return number( static_cast< unsigned long long >( i ), radix );
}
static OStringNumber< long long > number( long i, sal_Int16 radix = 10)
static auto number( long i, sal_Int16 radix = 10)
{
return number( static_cast< long long >( i ), radix );
}
static OStringNumber< unsigned long long > number( unsigned long i, sal_Int16 radix = 10 )
static auto number( unsigned long i, sal_Int16 radix = 10 )
{
return number( static_cast< unsigned long long >( i ), radix );
}
static OStringNumber< float > number( float f )
static auto number( float f )
{
return OStringNumber< float >( f );
return OStringNumber<RTL_STR_MAX_VALUEOFFLOAT>(rtl_str_valueOfFloat, f);
}
static OStringNumber< double > number( double d )
static auto number( double d )
{
return OStringNumber< double >( d );
return OStringNumber<RTL_STR_MAX_VALUEOFDOUBLE>(rtl_str_valueOfDouble, d);
}
#else
/**
@@ -2109,6 +2109,12 @@ public:
}
#endif
#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
static auto boolean(bool b)
{
return OStringNumber<RTL_STR_MAX_VALUEOFBOOLEAN>(rtl_str_valueOfBoolean, b);
}
#else
/**
Returns the string representation of the sal_Bool argument.
@@ -2125,9 +2131,6 @@ public:
return boolean(b);
}
#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
static OStringNumber<bool> boolean(bool b) { return OStringNumber<bool>(b); }
#else
/**
Returns the string representation of the boolean argument.
+16 -116
View File
@@ -324,17 +324,23 @@ template <typename T1, typename T2> auto Concat2View(OUStringConcat<T1, T2> cons
/**
* O(U)StringNumber implementation
Objects returned by O(U)String::number(), instead of O(U)String. These objects keep a representation of the number() operation.
If you get a build error related to this class, you most probably need to explicitly convert the result of calling
O(U)String::number() to O(U)String.
*/
template <typename C, typename Number, std::size_t nBufSize> struct StringNumberBase
template <typename C, std::size_t nBufSize> struct StringNumber
{
using number_t = Number;
using base_t = StringNumberBase;
template <typename Func, typename... Args,
std::enable_if_t<std::is_invocable_r_v<sal_Int32, Func, C*, Args...>, int> = 0>
StringNumber(Func func, Args... args) { length = func(buf, args...); }
// O(U)String::number(value).getStr() is very common (writing xml code, ...),
// so implement that one also here, to avoid having to explicitly convert
// to O(U)String in all such places
const C* getStr() const SAL_RETURNS_NONNULL { return buf; }
StringNumberBase&& toAsciiUpperCase() &&
StringNumber&& toAsciiUpperCase() &&
{
if constexpr (sizeof(C) == sizeof(char))
rtl_str_toAsciiUpperCase_WithLength(buf, length);
@@ -347,122 +353,16 @@ template <typename C, typename Number, std::size_t nBufSize> struct StringNumber
sal_Int32 length;
};
/**
@internal
template<std::size_t nBufSize> using OStringNumber = StringNumber<char, nBufSize>;
template<std::size_t nBufSize> using OUStringNumber = StringNumber<sal_Unicode, nBufSize>;
Objects returned by OString::number(), instead of OString. These objects keep a representation of the number() operation.
If you get a build error related to this class, you most probably need to explicitly convert the result of calling
OString::number() to OString.
*/
template< typename T >
struct OStringNumber;
template<>
struct OStringNumber< int >
: public StringNumberBase<char, int, RTL_STR_MAX_VALUEOFINT32>
template< typename C, std::size_t nBufSize >
struct ToStringHelper< StringNumber< C, nBufSize > >
{
OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfInt32(buf, i, radix); }
static std::size_t length( const StringNumber< C, nBufSize >& n ) { return n.length; }
C* operator()( C* buffer, const StringNumber< C, nBufSize >& n ) const SAL_RETURNS_NONNULL { return addDataHelper( buffer, n.buf, n.length ); }
};
template<>
struct OStringNumber< long long >
: public StringNumberBase<char, long long, RTL_STR_MAX_VALUEOFINT64>
{
OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfInt64(buf, i, radix); }
};
template<>
struct OStringNumber< unsigned long long >
: public StringNumberBase<char, unsigned long long, RTL_STR_MAX_VALUEOFUINT64>
{
OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfUInt64(buf, i, radix); }
};
template<>
struct OStringNumber< float >
: public StringNumberBase<char, float, RTL_STR_MAX_VALUEOFFLOAT>
{
OStringNumber(number_t f) { length = rtl_str_valueOfFloat(buf, f); }
};
template<>
struct OStringNumber< double >
: public StringNumberBase<char, double, RTL_STR_MAX_VALUEOFDOUBLE>
{
OStringNumber(number_t d) { length = rtl_str_valueOfDouble(buf, d); }
};
template<>
struct OStringNumber< bool >
: public StringNumberBase<char, bool, RTL_STR_MAX_VALUEOFBOOLEAN>
{
OStringNumber(number_t b) { length = rtl_str_valueOfBoolean(buf, b); }
};
/**
@internal
Objects returned by OUString::number(), instead of OUString. These objects keep a representation of the number() operation.
If you get a build error related to this class, you most probably need to explicitly convert the result of calling
OUString::number() to OUString.
*/
template< typename T >
struct OUStringNumber;
template<>
struct OUStringNumber< int >
: public StringNumberBase<sal_Unicode, int, RTL_USTR_MAX_VALUEOFINT32>
{
OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt32(buf, i, radix); }
};
template<>
struct OUStringNumber< long long >
: public StringNumberBase<sal_Unicode, long long, RTL_USTR_MAX_VALUEOFINT64>
{
OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt64(buf, i, radix); }
};
template<>
struct OUStringNumber< unsigned long long >
: public StringNumberBase<sal_Unicode, unsigned long long, RTL_USTR_MAX_VALUEOFUINT64>
{
OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfUInt64(buf, i, radix); }
};
template<>
struct OUStringNumber< float >
: public StringNumberBase<sal_Unicode, float, RTL_USTR_MAX_VALUEOFFLOAT>
{
OUStringNumber(number_t f) { length = rtl_ustr_valueOfFloat(buf, f); }
};
template<>
struct OUStringNumber< double >
: public StringNumberBase<sal_Unicode, double, RTL_USTR_MAX_VALUEOFDOUBLE>
{
OUStringNumber(number_t d) { length = rtl_ustr_valueOfDouble(buf, d); }
};
template<>
struct OUStringNumber< bool >
: public StringNumberBase<sal_Unicode, bool, RTL_USTR_MAX_VALUEOFBOOLEAN>
{
OUStringNumber(number_t b) { length = rtl_ustr_valueOfBoolean(buf, b); }
};
template< typename C, typename T, std::size_t nBufSize >
struct ToStringHelper< StringNumberBase< C, T, nBufSize > >
{
static std::size_t length( const StringNumberBase< C, T, nBufSize >& n ) { return n.length; }
C* operator()( C* buffer, const StringNumberBase< C, T, nBufSize >& n ) const SAL_RETURNS_NONNULL { return addDataHelper( buffer, n.buf, n.length ); }
};
template<typename T> struct ToStringHelper<OStringNumber<T>> : public ToStringHelper<typename OStringNumber<T>::base_t> {};
template<typename T> struct ToStringHelper<OUStringNumber<T>> : public ToStringHelper<typename OUStringNumber<T>::base_t> {};
template<typename C> struct ToStringHelper<std::basic_string_view<C>> {
static constexpr std::size_t length(std::basic_string_view<C> s) { return s.size(); }
+8 -8
View File
@@ -243,8 +243,8 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OUStringBuffer( StringNumberBase< sal_Unicode, T, N >&& n )
template< std::size_t N >
OUStringBuffer( OUStringNumber< N >&& n )
: pData(NULL)
, nCapacity( n.length + 16 )
{
@@ -381,8 +381,8 @@ public:
}
/** @overload @internal */
template<typename T, std::size_t N>
OUStringBuffer & operator =(StringNumberBase<sal_Unicode, T, N> && n)
template<std::size_t N>
OUStringBuffer & operator =(OUStringNumber<N> && n)
{
*this = OUStringBuffer( std::move( n ) );
return *this;
@@ -723,8 +723,8 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OUStringBuffer& append( StringNumberBase< sal_Unicode, T, N >&& c )
template< std::size_t N >
OUStringBuffer& append( OUStringNumber< N >&& c )
{
return append( c.buf, c.length );
}
@@ -1041,8 +1041,8 @@ public:
@overload
@internal
*/
template <typename T, std::size_t N>
OUStringBuffer& insert(sal_Int32 offset, StringNumberBase<sal_Unicode, T, N>&& c)
template <std::size_t N>
OUStringBuffer& insert(sal_Int32 offset, OUStringNumber<N>&& c)
{
return insert(offset, c.buf, c.length);
}
+27 -24
View File
@@ -509,8 +509,8 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OUString( StringNumberBase< sal_Unicode, T, N >&& n )
template< std::size_t N >
OUString( OUStringNumber< N >&& n )
: OUString( n.buf, n.length )
{}
#endif
@@ -656,8 +656,8 @@ public:
}
template<std::size_t N> OUString & operator =(OUStringLiteral<N> &&) = delete;
template <typename T, std::size_t N>
OUString & operator =(StringNumberBase<sal_Unicode, T, N> && n) {
template <std::size_t N>
OUString & operator =(OUStringNumber<N> && n) {
// n.length should never be zero, so no need to add an optimization for that case
rtl_uString_newFromStr_WithLength(&pData, n.buf, n.length);
return *this;
@@ -788,8 +788,8 @@ public:
@overload
@internal
*/
template< typename T, std::size_t N >
OUString& operator+=( StringNumberBase< sal_Unicode, T, N >&& n ) & {
template< std::size_t N >
OUString& operator+=( OUStringNumber< N >&& n ) & {
sal_Int32 l = n.length;
if( l == 0 )
return *this;
@@ -800,8 +800,8 @@ public:
pData->length = l;
return *this;
}
template<typename T, std::size_t N> void operator +=(
StringNumberBase<sal_Unicode, T, N> &&) && = delete;
template<std::size_t N> void operator +=(
OUStringNumber<N> &&) && = delete;
#endif
/**
@@ -3058,37 +3058,37 @@ public:
#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
static OUStringNumber< int > number( int i, sal_Int16 radix = 10 )
static auto number( int i, sal_Int16 radix = 10 )
{
return OUStringNumber< int >( i, radix );
return OUStringNumber<RTL_USTR_MAX_VALUEOFINT32>(rtl_ustr_valueOfInt32, i, radix);
}
static OUStringNumber< long long > number( long long ll, sal_Int16 radix = 10 )
static auto number( long long ll, sal_Int16 radix = 10 )
{
return OUStringNumber< long long >( ll, radix );
return OUStringNumber<RTL_USTR_MAX_VALUEOFINT64>(rtl_ustr_valueOfInt64, ll, radix);
}
static OUStringNumber< unsigned long long > number( unsigned long long ll, sal_Int16 radix = 10 )
static auto number( unsigned long long ll, sal_Int16 radix = 10 )
{
return OUStringNumber< unsigned long long >( ll, radix );
return OUStringNumber<RTL_USTR_MAX_VALUEOFUINT64>(rtl_ustr_valueOfUInt64, ll, radix);
}
static OUStringNumber< unsigned long long > number( unsigned int i, sal_Int16 radix = 10 )
static auto number( unsigned int i, sal_Int16 radix = 10 )
{
return number( static_cast< unsigned long long >( i ), radix );
}
static OUStringNumber< long long > number( long i, sal_Int16 radix = 10)
static auto number( long i, sal_Int16 radix = 10)
{
return number( static_cast< long long >( i ), radix );
}
static OUStringNumber< unsigned long long > number( unsigned long i, sal_Int16 radix = 10 )
static auto number( unsigned long i, sal_Int16 radix = 10 )
{
return number( static_cast< unsigned long long >( i ), radix );
}
static OUStringNumber< float > number( float f )
static auto number( float f )
{
return OUStringNumber< float >( f );
return OUStringNumber<RTL_USTR_MAX_VALUEOFFLOAT>(rtl_ustr_valueOfFloat, f);
}
static OUStringNumber< double > number( double d )
static auto number( double d )
{
return OUStringNumber< double >( d );
return OUStringNumber<RTL_USTR_MAX_VALUEOFDOUBLE>(rtl_ustr_valueOfDouble, d);
}
#else
/**
@@ -3170,6 +3170,12 @@ public:
}
#endif
#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
static auto boolean(bool b)
{
return OUStringNumber<RTL_USTR_MAX_VALUEOFBOOLEAN>(rtl_ustr_valueOfBoolean, b);
}
#else
/**
Returns the string representation of the sal_Bool argument.
@@ -3186,9 +3192,6 @@ public:
return boolean(b);
}
#ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
static OUStringNumber<bool> boolean(bool b) { return OUStringNumber<bool>(b); }
#else
/**
Returns the string representation of the boolean argument.
+5 -5
View File
@@ -107,15 +107,15 @@ void test::ostring::StringConcat::checkConcat()
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringConcat< OStringConcatMarker, char* >, const char[ 4 ] > )), typeid( OString::Concat( d4 ) + "bar" ));
CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< int > > )), typeid( OString( "num" ) + OString::number( 10 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFINT32 > > )), typeid( OString( "num" ) + OString::number( 10 )));
CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10L )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< long long > > )), typeid( OString( "num" ) + OString::number( 10L )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFINT64 > > )), typeid( OString( "num" ) + OString::number( 10L )));
CPPUNIT_ASSERT_EQUAL( OString( "num10" ), OString( OString( "num" ) + OString::number( 10ULL )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< unsigned long long > > )), typeid( OString( "num" ) + OString::number( 10ULL )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFUINT64 > > )), typeid( OString( "num" ) + OString::number( 10ULL )));
CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5f )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< float > > )), typeid( OString( "num" ) + OString::number( 10.5f )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFFLOAT > > )), typeid( OString( "num" ) + OString::number( 10.5f )));
CPPUNIT_ASSERT_EQUAL( OString( "num10.5" ), OString( OString( "num" ) + OString::number( 10.5 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, OStringNumber< double > > )), typeid( OString( "num" ) + OString::number( 10.5 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OString, StringNumber< char, RTL_STR_MAX_VALUEOFDOUBLE > > )), typeid( OString( "num" ) + OString::number( 10.5 )));
}
void test::ostring::StringConcat::checkEnsureCapacity()
+5 -5
View File
@@ -92,15 +92,15 @@ void test::oustring::StringConcat::checkConcat()
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringConcat< rtl::OUStringConcatMarker, const sal_Unicode[ 4 ] >, const char[ 4 ] > )), typeid( OUString::Concat( d3 ) + "bar" ));
CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< int > > )), typeid( OUString( "num" ) + OUString::number( 10 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFINT32 > > )), typeid( OUString( "num" ) + OUString::number( 10 )));
CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10L )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< long long > > )), typeid( OUString( "num" ) + OUString::number( 10L )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFINT64 > > )), typeid( OUString( "num" ) + OUString::number( 10L )));
CPPUNIT_ASSERT_EQUAL( OUString( "num10" ), OUString( OUString( "num" ) + OUString::number( 10ULL )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< unsigned long long > > )), typeid( OUString( "num" ) + OUString::number( 10ULL )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFUINT64 > > )), typeid( OUString( "num" ) + OUString::number( 10ULL )));
CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5f )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< float > > )), typeid( OUString( "num" ) + OUString::number( 10.5f )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFFLOAT > > )), typeid( OUString( "num" ) + OUString::number( 10.5f )));
CPPUNIT_ASSERT_EQUAL( OUString( "num10.5" ), OUString( OUString( "num" ) + OUString::number( 10.5 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, OUStringNumber< double > > )), typeid( OUString( "num" ) + OUString::number( 10.5 )));
CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, StringNumber< sal_Unicode, RTL_USTR_MAX_VALUEOFDOUBLE > > )), typeid( OUString( "num" ) + OUString::number( 10.5 )));
}
void test::oustring::StringConcat::checkConcatAsciiL()