Make OUStringLiteral1 a wrapper around UTF-16 instead of just ASCII
...not merely an ASCII character Change-Id: Id2b381b35fe3a15574728ed973d60263dfef7249 Reviewed-on: https://gerrit.libreoffice.org/28446 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
parent
0c8fa58a2d
commit
2c10714426
@ -10,7 +10,7 @@
|
|||||||
#ifndef INCLUDED_CHART2_INC_SPECIALUNICODES_HXX
|
#ifndef INCLUDED_CHART2_INC_SPECIALUNICODES_HXX
|
||||||
#define INCLUDED_CHART2_INC_SPECIALUNICODES_HXX
|
#define INCLUDED_CHART2_INC_SPECIALUNICODES_HXX
|
||||||
|
|
||||||
const OUString aMinusSign ( sal_Unicode (0x2212) );
|
const sal_Unicode aMinusSign = 0x2212;
|
||||||
const OUString aNewLine ("\n");
|
const OUString aNewLine ("\n");
|
||||||
const OUString aHashString ("###");
|
const OUString aHashString ("###");
|
||||||
const sal_Unicode aSuperscriptFigures[10]={ 0x2070, 0x00B9, 0x00B2, 0x00B3, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079 };
|
const sal_Unicode aSuperscriptFigures[10]={ 0x2070, 0x00B9, 0x00B2, 0x00B3, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079 };
|
||||||
|
@ -136,7 +136,7 @@ void Chart2TrendCalculators::testPotentialRegression2()
|
|||||||
xValues[i] = d;
|
xValues[i] = d;
|
||||||
yValues[i] = -2.0 * pow ( d, 3 );
|
yValues[i] = -2.0 * pow ( d, 3 );
|
||||||
}
|
}
|
||||||
checkCalculator( xValues, yValues, "f(x) = "+ OUString(aMinusSign) +" 2 x^3");
|
checkCalculator( xValues, yValues, "f(x) = "+ OUStringLiteral1<aMinusSign>() +" 2 x^3");
|
||||||
}
|
}
|
||||||
|
|
||||||
// test y = - 2 X - 5
|
// test y = - 2 X - 5
|
||||||
@ -152,7 +152,7 @@ void Chart2TrendCalculators::testLinearRegression1()
|
|||||||
xValues[i] = d;
|
xValues[i] = d;
|
||||||
yValues[i] = - 2.0 * d - 5.0 ;
|
yValues[i] = - 2.0 * d - 5.0 ;
|
||||||
}
|
}
|
||||||
checkCalculator( xValues, yValues, "f(x) = "+ OUString(aMinusSign) +" 2x "+ OUString(aMinusSign) +" 5");
|
checkCalculator( xValues, yValues, "f(x) = "+ OUStringLiteral1<aMinusSign>() +" 2x "+ OUStringLiteral1<aMinusSign>() +" 5");
|
||||||
}
|
}
|
||||||
|
|
||||||
// test y = A x ^ B
|
// test y = A x ^ B
|
||||||
@ -168,7 +168,7 @@ void Chart2TrendCalculators::testPolynomialRegression1()
|
|||||||
xValues[i] = d;
|
xValues[i] = d;
|
||||||
yValues[i] = - 2.0 * d * d + 4 * d - 5;
|
yValues[i] = - 2.0 * d * d + 4 * d - 5;
|
||||||
}
|
}
|
||||||
OUString sExpectedFormula( "f(x) = "+ OUString(aMinusSign) +" 2x" + OUString( aSuperscriptFigures[2] ) + " + 4x "+ OUString(aMinusSign) +" 5" );
|
OUString sExpectedFormula( "f(x) = "+ OUStringLiteral1<aMinusSign>() +" 2x" + OUString( aSuperscriptFigures[2] ) + " + 4x "+ OUStringLiteral1<aMinusSign>() +" 5" );
|
||||||
checkCalculator( xValues, yValues, sExpectedFormula );
|
checkCalculator( xValues, yValues, sExpectedFormula );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ void Chart2TrendCalculators::testExponentialRegression2()
|
|||||||
xValues[i] = d;
|
xValues[i] = d;
|
||||||
yValues[i] = -2.0 * exp ( 0.3 * d );
|
yValues[i] = -2.0 * exp ( 0.3 * d );
|
||||||
}
|
}
|
||||||
checkCalculator( xValues, yValues, "f(x) = "+ OUString(aMinusSign) + " 2 exp( 0.3 x )");
|
checkCalculator( xValues, yValues, "f(x) = "+ OUStringLiteral1<aMinusSign>() + " 2 exp( 0.3 x )");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ OUString ExponentialRegressionCurveCalculator::ImplGetRepresentation(
|
|||||||
// if nValueLength not calculated then nullptr
|
// if nValueLength not calculated then nullptr
|
||||||
sal_Int32* pValueLength = nValueLength ? &nValueLength : nullptr;
|
sal_Int32* pValueLength = nValueLength ? &nValueLength : nullptr;
|
||||||
if ( m_fSign < 0.0 )
|
if ( m_fSign < 0.0 )
|
||||||
aTmpBuf.append( aMinusSign + " " );
|
aTmpBuf.append( OUStringLiteral1<aMinusSign>() + " " );
|
||||||
if ( bHasIntercept )
|
if ( bHasIntercept )
|
||||||
{
|
{
|
||||||
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fIntercept, pValueLength );
|
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fIntercept, pValueLength );
|
||||||
@ -210,7 +210,7 @@ OUString ExponentialRegressionCurveCalculator::ImplGetRepresentation(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( m_fLogSlope < 0.0 )
|
if ( m_fLogSlope < 0.0 )
|
||||||
aTmpBuf.append( aMinusSign + " " );
|
aTmpBuf.append( OUStringLiteral1<aMinusSign>() + " " );
|
||||||
if ( bHasLogSlope )
|
if ( bHasLogSlope )
|
||||||
{
|
{
|
||||||
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fabs(m_fLogSlope), pValueLength );
|
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fabs(m_fLogSlope), pValueLength );
|
||||||
|
@ -162,7 +162,7 @@ OUString LogarithmicRegressionCurveCalculator::ImplGetRepresentation(
|
|||||||
{
|
{
|
||||||
if( m_fSlope < 0.0 )
|
if( m_fSlope < 0.0 )
|
||||||
{
|
{
|
||||||
aTmpBuf.append( aMinusSign + " " );
|
aTmpBuf.append( OUStringLiteral1<aMinusSign>() + " " );
|
||||||
}
|
}
|
||||||
if( bHasSlope )
|
if( bHasSlope )
|
||||||
{
|
{
|
||||||
@ -181,7 +181,7 @@ OUString LogarithmicRegressionCurveCalculator::ImplGetRepresentation(
|
|||||||
}
|
}
|
||||||
// add intercept value
|
// add intercept value
|
||||||
if( m_fIntercept < 0.0 )
|
if( m_fIntercept < 0.0 )
|
||||||
aTmpBuf.append( aMinusSign+" " );
|
aTmpBuf.append( OUStringLiteral1<aMinusSign>()+" " );
|
||||||
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fabs(m_fIntercept), pValueLength );
|
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fabs(m_fIntercept), pValueLength );
|
||||||
if ( aValueString != "0" ) // aValueString may be rounded to 0 if nValueLength is small
|
if ( aValueString != "0" ) // aValueString may be rounded to 0 if nValueLength is small
|
||||||
{
|
{
|
||||||
|
@ -278,7 +278,7 @@ OUString PolynomialRegressionCurveCalculator::ImplGetRepresentation(
|
|||||||
{
|
{
|
||||||
if ( bFindValue ) // if it is not the first aValue
|
if ( bFindValue ) // if it is not the first aValue
|
||||||
aTmpBuf.append( " " );
|
aTmpBuf.append( " " );
|
||||||
aTmpBuf.append( aMinusSign + " ");
|
aTmpBuf.append( OUStringLiteral1<aMinusSign>() + " ");
|
||||||
aValue = - aValue;
|
aValue = - aValue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -176,7 +176,7 @@ OUString PotentialRegressionCurveCalculator::ImplGetRepresentation(
|
|||||||
// if nValueLength not calculated then nullptr
|
// if nValueLength not calculated then nullptr
|
||||||
sal_Int32* pValueLength = nValueLength ? &nValueLength : nullptr;
|
sal_Int32* pValueLength = nValueLength ? &nValueLength : nullptr;
|
||||||
if ( m_fIntercept < 0.0 ) // add intercept value
|
if ( m_fIntercept < 0.0 ) // add intercept value
|
||||||
aTmpBuf.append( aMinusSign+" " );
|
aTmpBuf.append( OUStringLiteral1<aMinusSign>()+" " );
|
||||||
if( bHasIntercept )
|
if( bHasIntercept )
|
||||||
{
|
{
|
||||||
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fabs(m_fIntercept), pValueLength );
|
OUString aValueString = getFormattedString( xNumFormatter, nNumberFormatKey, fabs(m_fIntercept), pValueLength );
|
||||||
|
@ -66,13 +66,6 @@ bool StringStatic::VisitVarDecl(VarDecl const* varDecl)
|
|||||||
if (ignoreLocation(varDecl)) {
|
if (ignoreLocation(varDecl)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// We could use OUStringLiteral1 here, but we'd need to update OUStringLiteral1 to allow BMP chars first:
|
|
||||||
if (compiler.getSourceManager().getFilename(varDecl->getLocation())
|
|
||||||
== SRCDIR "/chart2/inc/SpecialUnicodes.hxx")
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
QualType qt = varDecl->getType();
|
QualType qt = varDecl->getType();
|
||||||
if (!varDecl->hasGlobalStorage()
|
if (!varDecl->hasGlobalStorage()
|
||||||
|| !varDecl->isThisDeclarationADefinition()
|
|| !varDecl->isThisDeclarationADefinition()
|
||||||
|
@ -150,13 +150,11 @@ template<std::size_t N> struct ToStringHelper<sal_Unicode const[N]> {
|
|||||||
static bool const allowOUStringConcat = true;
|
static bool const allowOUStringConcat = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<char C> struct ToStringHelper<OUStringLiteral1_<C>> {
|
template<sal_Unicode C> struct ToStringHelper<OUStringLiteral1_<C>> {
|
||||||
static int length(OUStringLiteral1_<C>) { return 1; }
|
static int length(OUStringLiteral1_<C>) { return 1; }
|
||||||
static char * addData(char * buffer, OUStringLiteral1_<C> literal)
|
|
||||||
{ return addDataHelper(buffer, &literal.c, 1); }
|
|
||||||
static sal_Unicode * addData(
|
static sal_Unicode * addData(
|
||||||
sal_Unicode * buffer, OUStringLiteral1_<C> literal)
|
sal_Unicode * buffer, OUStringLiteral1_<C> literal)
|
||||||
{ return addDataLiteral(buffer, &literal.c, 1); }
|
{ return addDataHelper(buffer, &literal.c, 1); }
|
||||||
static bool const allowOStringConcat = false;
|
static bool const allowOStringConcat = false;
|
||||||
static bool const allowOUStringConcat = true;
|
static bool const allowOUStringConcat = true;
|
||||||
};
|
};
|
||||||
|
@ -36,13 +36,13 @@ namespace rtl
|
|||||||
#if defined LIBO_INTERNAL_ONLY
|
#if defined LIBO_INTERNAL_ONLY
|
||||||
/// @cond INTERNAL
|
/// @cond INTERNAL
|
||||||
|
|
||||||
/** A simple wrapper around an ASCII character literal.
|
/** A simple wrapper around a sal_Unicode character literal.
|
||||||
|
|
||||||
Can be useful to pass a char constant with ASCII value into a
|
Can be useful to pass a sal_Unicode constant into an OUString-related
|
||||||
OUString-related function that is optimized for ASCII string literal
|
function that is optimized for UTF-16 string literal arguments. That is,
|
||||||
arguments. That is, instead of
|
instead of
|
||||||
|
|
||||||
char const WILDCARD = '%';
|
sal_Unicode const WILDCARD = '%';
|
||||||
...
|
...
|
||||||
if (s[i] == WILDCARD) ...
|
if (s[i] == WILDCARD) ...
|
||||||
...
|
...
|
||||||
@ -50,7 +50,7 @@ namespace rtl
|
|||||||
|
|
||||||
use
|
use
|
||||||
|
|
||||||
char const WILDCARD = '%';
|
sal_Unicode const WILDCARD = '%';
|
||||||
...
|
...
|
||||||
if (s[i] == WILDCARD) ...
|
if (s[i] == WILDCARD) ...
|
||||||
...
|
...
|
||||||
@ -58,7 +58,7 @@ namespace rtl
|
|||||||
|
|
||||||
to avoid creating a temporary OUString instance, and instead pick the
|
to avoid creating a temporary OUString instance, and instead pick the
|
||||||
endsWith overload actually designed to take an argument of type
|
endsWith overload actually designed to take an argument of type
|
||||||
char const[N].
|
sal_Unicode const[N].
|
||||||
|
|
||||||
Instances of OUStringLiteral1 need to be const, as those literal-optimized
|
Instances of OUStringLiteral1 need to be const, as those literal-optimized
|
||||||
functions take the literal argument by non-const lvalue reference, for
|
functions take the literal argument by non-const lvalue reference, for
|
||||||
@ -71,18 +71,15 @@ namespace rtl
|
|||||||
|
|
||||||
@since LibreOffice 5.0
|
@since LibreOffice 5.0
|
||||||
*/
|
*/
|
||||||
template<char C> struct SAL_WARN_UNUSED OUStringLiteral1_ {
|
template<sal_Unicode C> struct SAL_WARN_UNUSED OUStringLiteral1_ {
|
||||||
static_assert(
|
sal_Unicode const c = C;
|
||||||
static_cast<unsigned char>(C) < 0x80,
|
|
||||||
"non-ASCII character in OUStringLiteral1");
|
|
||||||
char const c = C;
|
|
||||||
};
|
};
|
||||||
#if defined _MSC_VER && _MSC_VER <= 1900 && !defined __clang__
|
#if defined _MSC_VER && _MSC_VER <= 1900 && !defined __clang__
|
||||||
// Visual Studio 2015
|
// Visual Studio 2015
|
||||||
template<char C> using OUStringLiteral1 = OUStringLiteral1_<C>;
|
template<sal_Unicode C> using OUStringLiteral1 = OUStringLiteral1_<C>;
|
||||||
#pragma warning(disable: 4239)
|
#pragma warning(disable: 4239)
|
||||||
#else
|
#else
|
||||||
template<char C> using OUStringLiteral1 = OUStringLiteral1_<C> const;
|
template<sal_Unicode C> using OUStringLiteral1 = OUStringLiteral1_<C> const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// @endcond
|
/// @endcond
|
||||||
@ -181,7 +178,7 @@ struct ConstCharArrayDetector<sal_Unicode const [N], T> {
|
|||||||
sal_Unicode const (& literal)[N])
|
sal_Unicode const (& literal)[N])
|
||||||
{ return literal; }
|
{ return literal; }
|
||||||
};
|
};
|
||||||
template<char C, typename T> struct ConstCharArrayDetector<
|
template<sal_Unicode C, typename T> struct ConstCharArrayDetector<
|
||||||
#if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ <= 8 \
|
#if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ <= 8 \
|
||||||
&& !defined __clang__
|
&& !defined __clang__
|
||||||
OUStringLiteral1_<C> const,
|
OUStringLiteral1_<C> const,
|
||||||
@ -190,11 +187,11 @@ template<char C, typename T> struct ConstCharArrayDetector<
|
|||||||
#endif
|
#endif
|
||||||
T>
|
T>
|
||||||
{
|
{
|
||||||
typedef T Type;
|
using TypeUtf16 = T;
|
||||||
static const std::size_t length = 1;
|
static SAL_CONSTEXPR bool const ok = true;
|
||||||
static const bool ok = true;
|
static SAL_CONSTEXPR std::size_t const length = 1;
|
||||||
static bool isValid(OUStringLiteral1_<C>) { return true; }
|
static SAL_CONSTEXPR sal_Unicode const * toPointer(
|
||||||
static char const * toPointer(OUStringLiteral1_<C> const & literal)
|
OUStringLiteral1_<C> const & literal)
|
||||||
{ return &literal.c; }
|
{ return &literal.c; }
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@ -212,7 +209,7 @@ struct ExceptConstCharArrayDetector< const char[ N ] >
|
|||||||
#if defined LIBO_INTERNAL_ONLY
|
#if defined LIBO_INTERNAL_ONLY
|
||||||
template<std::size_t N>
|
template<std::size_t N>
|
||||||
struct ExceptConstCharArrayDetector<sal_Unicode const[N]> {};
|
struct ExceptConstCharArrayDetector<sal_Unicode const[N]> {};
|
||||||
template<char C> struct ExceptConstCharArrayDetector<
|
template<sal_Unicode C> struct ExceptConstCharArrayDetector<
|
||||||
#if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ <= 8 \
|
#if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ <= 8 \
|
||||||
&& !defined __clang__
|
&& !defined __clang__
|
||||||
OUStringLiteral1_<C> const
|
OUStringLiteral1_<C> const
|
||||||
@ -243,7 +240,7 @@ struct ExceptCharArrayDetector< const char[ N ] >
|
|||||||
#if defined LIBO_INTERNAL_ONLY
|
#if defined LIBO_INTERNAL_ONLY
|
||||||
template<std::size_t N> struct ExceptCharArrayDetector<sal_Unicode[N]> {};
|
template<std::size_t N> struct ExceptCharArrayDetector<sal_Unicode[N]> {};
|
||||||
template<std::size_t N> struct ExceptCharArrayDetector<sal_Unicode const[N]> {};
|
template<std::size_t N> struct ExceptCharArrayDetector<sal_Unicode const[N]> {};
|
||||||
template<char C> struct ExceptCharArrayDetector<OUStringLiteral1_<C>> {};
|
template<sal_Unicode C> struct ExceptCharArrayDetector<OUStringLiteral1_<C>> {};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template< typename T1, typename T2 = void >
|
template< typename T1, typename T2 = void >
|
||||||
|
@ -218,18 +218,20 @@ void test::oustring::StringLiterals::checkOUStringLiteral()
|
|||||||
void test::oustring::StringLiterals::checkOUStringLiteral1()
|
void test::oustring::StringLiterals::checkOUStringLiteral1()
|
||||||
{
|
{
|
||||||
auto l1 = rtlunittest::OUStringLiteral1<'A'>();
|
auto l1 = rtlunittest::OUStringLiteral1<'A'>();
|
||||||
CPPUNIT_ASSERT_EQUAL('A', l1.c);
|
CPPUNIT_ASSERT_EQUAL(sal_Unicode('A'), l1.c);
|
||||||
|
|
||||||
char const c2 = 'A';
|
char const c2 = 'A';
|
||||||
auto l2 = rtlunittest::OUStringLiteral1<c2>();
|
auto l2 = rtlunittest::OUStringLiteral1<c2>();
|
||||||
CPPUNIT_ASSERT_EQUAL('A', l2.c);
|
CPPUNIT_ASSERT_EQUAL(sal_Unicode('A'), l2.c);
|
||||||
|
|
||||||
// char c3 = 'A'; auto l3 = rtlunittest::OUStringLiteral1<c3>();
|
// char c3 = 'A'; auto l3 = rtlunittest::OUStringLiteral1<c3>();
|
||||||
|
|
||||||
auto l4 = rtlunittest::OUStringLiteral1<sal_Unicode('A')>();
|
auto l4 = rtlunittest::OUStringLiteral1<sal_Unicode('A')>();
|
||||||
CPPUNIT_ASSERT_EQUAL('A', l4.c);
|
CPPUNIT_ASSERT_EQUAL(sal_Unicode('A'), l4.c);
|
||||||
|
|
||||||
// auto l5 = rtlunittest::OUStringLiteral1<sal_Unicode(0x100)>();
|
sal_Unicode const c5 = 0x100;
|
||||||
|
auto l5 = rtlunittest::OUStringLiteral1<c5>();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(c5, l5.c);
|
||||||
|
|
||||||
rtl::OUString s1{rtlunittest::OUStringLiteral1<'A'>()};
|
rtl::OUString s1{rtlunittest::OUStringLiteral1<'A'>()};
|
||||||
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getLength());
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), s1.getLength());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user