[Libreoffice-commits] .: comphelper/inc dbaccess/source xmloff/source

Stephan Bergmann sbergmann at kemper.freedesktop.org
Wed Oct 19 02:18:04 PDT 2011


 comphelper/inc/comphelper/sequence.hxx   |   14 ++------
 dbaccess/source/filter/xml/xmlExport.cxx |   41 ++++++++++++-----------
 dbaccess/source/filter/xml/xmlExport.hxx |    2 +
 xmloff/source/forms/propertyexport.cxx   |   53 ++++++++++++++++---------------
 xmloff/source/forms/propertyexport.hxx   |    6 ++-
 5 files changed, 60 insertions(+), 56 deletions(-)

New commits:
commit 322d455f9f87deb0551d7360ba10e4ae6e3021ab
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Oct 19 11:17:29 2011 +0200

    Simplified comphelper::OSequenceIterator and its uses.

diff --git a/comphelper/inc/comphelper/sequence.hxx b/comphelper/inc/comphelper/sequence.hxx
index 1256681..46bffc5 100644
--- a/comphelper/inc/comphelper/sequence.hxx
+++ b/comphelper/inc/comphelper/sequence.hxx
@@ -131,16 +131,10 @@ namespace comphelper
     //=====================================================================
     //= iterating through sequences
     //=====================================================================
-    class SAL_NO_VTABLE IIterator
-    {
-    public:
-        virtual sal_Bool hasMoreElements() const = 0;
-        virtual ::com::sun::star::uno::Any  nextElement() = 0;
-    };
     /** a helper class for iterating through a sequence
     */
     template <class TYPE>
-    class OSequenceIterator : public IIterator
+    class OSequenceIterator
     {
         const TYPE* m_pElements;
         sal_Int32   m_nLen;
@@ -154,10 +148,10 @@ namespace comphelper
         */
         OSequenceIterator(const ::com::sun::star::uno::Any& _rSequenceAny);
 
-        virtual sal_Bool hasMoreElements() const;
-        virtual ::com::sun::star::uno::Any  nextElement();
+        sal_Bool hasMoreElements() const;
+        ::com::sun::star::uno::Any  nextElement();
 
-    protected:
+    private:
         void construct(const ::com::sun::star::uno::Sequence< TYPE >& _rSeq);
     };
 
diff --git a/dbaccess/source/filter/xml/xmlExport.cxx b/dbaccess/source/filter/xml/xmlExport.cxx
index 661e237..9f6a89f 100644
--- a/dbaccess/source/filter/xml/xmlExport.cxx
+++ b/dbaccess/source/filter/xml/xmlExport.cxx
@@ -672,6 +672,19 @@ void ODBExport::exportConnectionData()
     exportLogin();
 }
 // -----------------------------------------------------------------------------
+template< typename T > void ODBExport::exportDataSourceSettingsSequence(
+    ::std::vector< TypedPropertyValue >::iterator const & in)
+{
+    OSequenceIterator< T > i( in->Value );
+    ::rtl::OUString sCurrent;
+    while (i.hasMoreElements())
+    {
+        SvXMLElementExport aDataValue(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False);
+        // (no whitespace inside the tag)
+        Characters(implConvertAny(i.nextElement()));
+    }
+}
+
 void ODBExport::exportDataSourceSettings()
 {
     if ( m_aDataSourceSettings.empty() )
@@ -715,46 +728,34 @@ void ODBExport::exportDataSourceSettings()
         else
         {
             // the not-that-simple case, we need to iterate through the sequence elements
-            SAL_WNODEPRECATED_DECLARATIONS_PUSH
-            ::std::auto_ptr<IIterator> pSequenceIterator;
-            SAL_WNODEPRECATED_DECLARATIONS_POP
             switch (aSimpleType.getTypeClass())
             {
                 case TypeClass_STRING:
-                    pSequenceIterator.reset( new OSequenceIterator< ::rtl::OUString >( aIter->Value ) );
+                    exportDataSourceSettingsSequence< ::rtl::OUString >(
+                        aIter );
                     break;
                 case TypeClass_DOUBLE:
-                    pSequenceIterator.reset( new OSequenceIterator< double >( aIter->Value ) );
+                    exportDataSourceSettingsSequence< double >( aIter );
                     break;
                 case TypeClass_BOOLEAN:
-                    pSequenceIterator.reset( new OSequenceIterator< sal_Bool >( aIter->Value ) );
+                    exportDataSourceSettingsSequence< sal_Bool >( aIter );
                     break;
                 case TypeClass_BYTE:
-                    pSequenceIterator.reset( new OSequenceIterator< sal_Int8 >( aIter->Value ) );
+                    exportDataSourceSettingsSequence< sal_Int8 >( aIter );
                     break;
                 case TypeClass_SHORT:
-                    pSequenceIterator.reset( new OSequenceIterator< sal_Int16 >( aIter->Value ) );
+                    exportDataSourceSettingsSequence< sal_Int16 >( aIter );
                     break;
                 case TypeClass_LONG:
-                    pSequenceIterator.reset( new OSequenceIterator< sal_Int32 >( aIter->Value ) );
+                    exportDataSourceSettingsSequence< sal_Int32 >( aIter );
                     break;
                 case TypeClass_ANY:
-                    pSequenceIterator.reset( new OSequenceIterator< Any >( aIter->Value ) );
+                    exportDataSourceSettingsSequence< Any >( aIter );
                     break;
                 default:
                     OSL_FAIL("unsupported sequence type !");
                     break;
             }
-            if ( pSequenceIterator.get() )
-            {
-                ::rtl::OUString sCurrent;
-                while (pSequenceIterator->hasMoreElements())
-                {
-                    SvXMLElementExport aDataValue(*this,XML_NAMESPACE_DB, XML_DATA_SOURCE_SETTING_VALUE, sal_True, sal_False);
-                    // (no whitespace inside the tag)
-                    Characters(implConvertAny(pSequenceIterator->nextElement()));
-                }
-            }
         }
     }
 }
diff --git a/dbaccess/source/filter/xml/xmlExport.hxx b/dbaccess/source/filter/xml/xmlExport.hxx
index 8dc662f..2a4fe26 100644
--- a/dbaccess/source/filter/xml/xmlExport.hxx
+++ b/dbaccess/source/filter/xml/xmlExport.hxx
@@ -137,6 +137,8 @@ class ODBExport : public SvXMLExport
     void                    exportDelimiter();
     void                    exportAutoIncrement();
     void                    exportCharSet();
+    template< typename T > void exportDataSourceSettingsSequence(
+        ::std::vector< TypedPropertyValue >::iterator const & in);
     void                    exportDataSourceSettings();
     void                    exportForms();
     void                    exportReports();
diff --git a/xmloff/source/forms/propertyexport.cxx b/xmloff/source/forms/propertyexport.cxx
index 13d770e..050dd4b 100644
--- a/xmloff/source/forms/propertyexport.cxx
+++ b/xmloff/source/forms/propertyexport.cxx
@@ -101,7 +101,21 @@ namespace xmloff
         return ( !bIsDefaultValue || bIsDynamicProperty );
     }
 
-    //---------------------------------------------------------------------
+    template< typename T > void
+    OPropertyExport::exportRemainingPropertiesSequence(
+        Any const & value, token::XMLTokenEnum eValueAttName)
+    {
+        OSequenceIterator< T > i(value);
+        while (i.hasMoreElements())
+        {
+            ::rtl::OUString sValue(implConvertAny(i.nextElement()));
+            AddAttribute(XML_NAMESPACE_OFFICE, eValueAttName, sValue );
+            SvXMLElementExport aValueTag(
+                m_rContext.getGlobalContext(), XML_NAMESPACE_FORM,
+                token::XML_LIST_VALUE, sal_True, sal_False);
+        }
+    }
+
     void OPropertyExport::exportRemainingProperties()
     {
         // the properties tag (will be created if we have at least one no-default property)
@@ -189,49 +203,40 @@ namespace xmloff
                     continue;
 
                 // the not-that-simple case, we need to iterate through the sequence elements
-                IIterator* pSequenceIterator = NULL;
-
                 switch ( aExportType.getTypeClass() )
                 {
                     case TypeClass_STRING:
-                        pSequenceIterator = new OSequenceIterator< ::rtl::OUString >(aValue);
+                        exportRemainingPropertiesSequence< ::rtl::OUString >(
+                            aValue, eValueAttName);
                         break;
                     case TypeClass_DOUBLE:
-                        pSequenceIterator = new OSequenceIterator< double >(aValue);
+                        exportRemainingPropertiesSequence< double >(
+                            aValue, eValueAttName);
                         break;
                     case TypeClass_BOOLEAN:
-                        pSequenceIterator = new OSequenceIterator< sal_Bool >(aValue);
+                        exportRemainingPropertiesSequence< sal_Bool >(
+                            aValue, eValueAttName);
                         break;
                     case TypeClass_BYTE:
-                        pSequenceIterator = new OSequenceIterator< sal_Int8 >(aValue);
+                        exportRemainingPropertiesSequence< sal_Int8 >(
+                            aValue, eValueAttName);
                         break;
                     case TypeClass_SHORT:
-                        pSequenceIterator = new OSequenceIterator< sal_Int16 >(aValue);
+                        exportRemainingPropertiesSequence< sal_Int16 >(
+                            aValue, eValueAttName);
                         break;
                     case TypeClass_LONG:
-                        pSequenceIterator = new OSequenceIterator< sal_Int32 >(aValue);
+                        exportRemainingPropertiesSequence< sal_Int32 >(
+                            aValue, eValueAttName);
                         break;
                     case TypeClass_HYPER:
-                        pSequenceIterator = new OSequenceIterator< sal_Int64 >(aValue);
+                        exportRemainingPropertiesSequence< sal_Int64 >(
+                            aValue, eValueAttName);
                         break;
                     default:
                         OSL_FAIL("OPropertyExport::exportRemainingProperties: unsupported sequence tyoe !");
                         break;
                 }
-                if (pSequenceIterator)
-                {
-                    while (pSequenceIterator->hasMoreElements())
-                    {
-                        sValue =
-                            implConvertAny(pSequenceIterator->nextElement());
-                        AddAttribute(XML_NAMESPACE_OFFICE, eValueAttName, sValue );
-                        SvXMLElementExport aValueTag(
-                                m_rContext.getGlobalContext(),
-                                XML_NAMESPACE_FORM, token::XML_LIST_VALUE,
-                                sal_True, sal_False);
-                    }
-                }
-                delete pSequenceIterator;
             }
         }
         catch(...)
diff --git a/xmloff/source/forms/propertyexport.hxx b/xmloff/source/forms/propertyexport.hxx
index e31704c..1e3eaab 100644
--- a/xmloff/source/forms/propertyexport.hxx
+++ b/xmloff/source/forms/propertyexport.hxx
@@ -105,8 +105,10 @@ namespace xmloff
         */
         void examinePersistence();
 
-        /**
-        */
+        template< typename T > void exportRemainingPropertiesSequence(
+            com::sun::star::uno::Any const & value,
+            token::XMLTokenEnum eValueAttName);
+
         void exportRemainingProperties();
 
         /** indicates that a property has been handled by a derived class, without using the helper methods of this


More information about the Libreoffice-commits mailing list