[Libreoffice-commits] core.git: binaryurp/qa binaryurp/source include/com

Stephan Bergmann sbergman at redhat.com
Fri Dec 12 08:05:38 PST 2014


 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 <sbergman at 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()
 {


More information about the Libreoffice-commits mailing list