binaryurp/qa/test-unmarshal.cxx | 42 +++++++++++++--------------------- binaryurp/source/bridgefactory.cxx | 3 -- include/com/sun/star/uno/Sequence.h | 14 +++++++++++ include/com/sun/star/uno/Sequence.hxx | 11 ++++++++ 4 files changed, 43 insertions(+), 27 deletions(-)
New commits: commit d79b96cf6564187c96f5a1451ca98e2c93adee77 Author: Stephan Bergmann <sberg...@redhat.com> Date: Fri Dec 12 17:00:50 2014 +0100 css::uno::Sequence ctor with initializer_list (though LIBO_INTERNAL_ONLY, as it needs C++11, so cannot in general be used in URE client code; I think it's better to not offer it outside LO at all, than based on a feature-check macro, and thus catch accidental misuses of it via CppunitTest_odk_checkapi) ...plus adapting binaryurp/ to use the new feature Change-Id: I9a88a0e9eac5daf72896470e8b6a1deb1a6fc88f diff --git a/binaryurp/qa/test-unmarshal.cxx b/binaryurp/qa/test-unmarshal.cxx index 759b120..13ab9f6 100644 --- a/binaryurp/qa/test-unmarshal.cxx +++ b/binaryurp/qa/test-unmarshal.cxx @@ -50,20 +50,15 @@ private: void Test::testTypeOfBooleanSequence() { binaryurp::ReaderState state; - css::uno::Sequence< sal_Int8 > buf(13); - buf[0] = static_cast< sal_Int8 >(static_cast< sal_uInt8 >(20 | 0x80)); // sequence type | cache flag - buf[1] = static_cast< sal_Int8 >(static_cast< sal_uInt8 >(binaryurp::cache::ignore >> 8)); - buf[2] = static_cast< sal_Int8 >(static_cast< sal_uInt8 >(binaryurp::cache::ignore & 0xFF)); - buf[3] = RTL_CONSTASCII_LENGTH("[]boolean"); - buf[4] = '['; - buf[5] = ']'; - buf[6] = 'b'; - buf[7] = 'o'; - buf[8] = 'o'; - buf[9] = 'l'; - buf[10] = 'e'; - buf[11] = 'a'; - buf[12] = 'n'; + css::uno::Sequence<sal_Int8> buf{ + static_cast<sal_Int8>(static_cast<sal_uInt8>(20 | 0x80)), + // sequence type | cache flag + static_cast<sal_Int8>( + static_cast<sal_uInt8>(binaryurp::cache::ignore >> 8)), + static_cast<sal_Int8>( + static_cast<sal_uInt8>(binaryurp::cache::ignore & 0xFF)), + RTL_CONSTASCII_LENGTH("[]boolean"), + '[', ']', 'b', 'o', 'o', 'l', 'e', 'a', 'n' }; binaryurp::Unmarshal m(rtl::Reference< binaryurp::Bridge >(), state, buf); css::uno::TypeDescription t(m.readType()); CPPUNIT_ASSERT( @@ -75,17 +70,14 @@ void Test::testTypeOfBooleanSequence() { void Test::testTypeOfVoidSequence() { binaryurp::ReaderState state; - css::uno::Sequence< sal_Int8 > buf(10); - buf[0] = static_cast< sal_Int8 >(static_cast< sal_uInt8 >(20 | 0x80)); // sequence type | cache flag - buf[1] = static_cast< sal_Int8 >(static_cast< sal_uInt8 >(binaryurp::cache::ignore >> 8)); - buf[2] = static_cast< sal_Int8 >(static_cast< sal_uInt8 >(binaryurp::cache::ignore & 0xFF)); - buf[3] = RTL_CONSTASCII_LENGTH("[]void"); - buf[4] = '['; - buf[5] = ']'; - buf[6] = 'v'; - buf[7] = 'o'; - buf[8] = 'i'; - buf[9] = 'd'; + css::uno::Sequence<sal_Int8> buf{ + static_cast<sal_Int8>(static_cast<sal_uInt8>(20 | 0x80)), + // sequence type | cache flag + static_cast<sal_Int8>( + static_cast<sal_uInt8>(binaryurp::cache::ignore >> 8)), + static_cast<sal_Int8>( + static_cast<sal_uInt8>(binaryurp::cache::ignore & 0xFF)), + RTL_CONSTASCII_LENGTH("[]void"), '[', ']', 'v', 'o', 'i', 'd' }; binaryurp::Unmarshal m(rtl::Reference< binaryurp::Bridge >(), state, buf); try { m.readType(); diff --git a/binaryurp/source/bridgefactory.cxx b/binaryurp/source/bridgefactory.cxx index 6b8994d..c9d0a04 100644 --- a/binaryurp/source/bridgefactory.cxx +++ b/binaryurp/source/bridgefactory.cxx @@ -52,8 +52,7 @@ OUString BridgeFactory::static_getImplementationName() { css::uno::Sequence< OUString > BridgeFactory::static_getSupportedServiceNames() { - OUString name("com.sun.star.bridge.BridgeFactory"); - return css::uno::Sequence< OUString >(&name, 1); + return css::uno::Sequence<OUString>{ "com.sun.star.bridge.BridgeFactory" }; } void BridgeFactory::removeBridge( diff --git a/include/com/sun/star/uno/Sequence.h b/include/com/sun/star/uno/Sequence.h index fa2aa96..21e3e9d 100644 --- a/include/com/sun/star/uno/Sequence.h +++ b/include/com/sun/star/uno/Sequence.h @@ -26,6 +26,10 @@ #include <new> +#if defined LIBO_INTERNAL_ONLY +#include <initializer_list> +#endif + namespace rtl { class ByteSequence; @@ -109,6 +113,16 @@ public: */ inline explicit Sequence( sal_Int32 len ); +#if defined LIBO_INTERNAL_ONLY + /** Create a sequence with the given elements. + + @param init an initializer_list + + @since LibreOffice 4.5 + */ + inline Sequence(std::initializer_list<E> init); +#endif + /** Destructor: Releases sequence handle. Last handle will destruct elements and free memory. */ diff --git a/include/com/sun/star/uno/Sequence.hxx b/include/com/sun/star/uno/Sequence.hxx index 1ee59ae..dce2609 100644 --- a/include/com/sun/star/uno/Sequence.hxx +++ b/include/com/sun/star/uno/Sequence.hxx @@ -92,6 +92,17 @@ inline Sequence< E >::Sequence( sal_Int32 len ) throw ::std::bad_alloc(); } +#if defined LIBO_INTERNAL_ONLY +template<typename E> Sequence<E>::Sequence(std::initializer_list<E> init) { + if (!uno_type_sequence_construct( + &_pSequence, cppu::getTypeFavourUnsigned(this).getTypeLibType(), + const_cast<E *>(init.begin()), init.size(), cpp_acquire)) + { + throw std::bad_alloc(); + } +} +#endif + template< class E > inline Sequence< E >::~Sequence() { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits