writerfilter/source/dmapper/BorderHandler.cxx |   64 ++++++++++++--------------
 writerfilter/source/dmapper/BorderHandler.hxx |   24 ++++-----
 2 files changed, 43 insertions(+), 45 deletions(-)

New commits:
commit 8ea9de4f7a7bec1ba6e20defa243655f7c3e0db8
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Wed Oct 17 23:04:19 2018 +0200
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Thu Oct 18 13:28:06 2018 +0200

    Turn BorderHandler::BorderPosition into scoped enum
    
    ...to avoid -Werror,-Wshadow from Clang trunk with
    <https://reviews.llvm.org/D52400> "Improve -Wshadow warnings with 
enumerators",
    warning about shadowing of BORDER_TOP/LEFT/BOTTOM/RIGHT in enum 
BorderPosition
    in writerfilter/source/dmapper/PropertyMap.hxx.
    
    Also, BorderPosition can apparently be made a private member of 
BorderHandler,
    which gives extra confidence that any other uses of 
BORDER_TOP/LEFT/BOTTOM/RIGHT
    across writerfilter/source/dmapper/ indeed meant to reference the other enum
    BorderPosition.
    
    And change BorderHandler::lcl_sprm to return early in default case, to avoid
    having to come up with some new BorderPosition sentinel value to represent
    "invalid pos".
    
    Change-Id: I31e535326627cec25a17b99485bf7cf56f4c66d3
    Reviewed-on: https://gerrit.libreoffice.org/61896
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/writerfilter/source/dmapper/BorderHandler.cxx 
b/writerfilter/source/dmapper/BorderHandler.cxx
index 0a07c9753393..ec37f8aa26e3 100644
--- a/writerfilter/source/dmapper/BorderHandler.cxx
+++ b/writerfilter/source/dmapper/BorderHandler.cxx
@@ -21,6 +21,8 @@
 #include "PropertyMap.hxx"
 #include "ConversionHelper.hxx"
 #include <com/sun/star/table/BorderLine2.hpp>
+#include <o3tl/enumarray.hxx>
+#include <o3tl/enumrange.hxx>
 #include <ooxml/resourceids.hxx>
 #include <filter/msfilter/util.hxx>
 #include <comphelper/sequence.hxx>
@@ -42,9 +44,8 @@ m_nLineDistance(0),
 m_bShadow(false),
 m_bOOXML( bOOXML )
 {
-    const int nBorderCount(BORDER_COUNT);
-    std::fill_n(m_aFilledLines, nBorderCount, false);
-    std::fill_n(m_aBorderLines, nBorderCount, table::BorderLine2());
+    m_aFilledLines.fill(false);
+    m_aBorderLines.fill(table::BorderLine2());
 }
 
 BorderHandler::~BorderHandler()
@@ -90,73 +91,70 @@ void BorderHandler::lcl_attribute(Id rName, Value & rVal)
 
 void BorderHandler::lcl_sprm(Sprm & rSprm)
 {
-    BorderPosition pos = BORDER_COUNT; // invalid pos
+    BorderPosition pos;
     const bool rtl = false; // TODO detect
     OUString aBorderPos;
     switch( rSprm.getId())
     {
         case NS_ooxml::LN_CT_TblBorders_top:
-            pos = BORDER_TOP;
+            pos = BorderPosition::Top;
             aBorderPos = "top";
             break;
         case NS_ooxml::LN_CT_TblBorders_start:
-            pos = rtl ? BORDER_RIGHT : BORDER_LEFT;
+            pos = rtl ? BorderPosition::Right : BorderPosition::Left;
             aBorderPos = "start";
             break;
         case NS_ooxml::LN_CT_TblBorders_left:
-            pos = BORDER_LEFT;
+            pos = BorderPosition::Left;
             aBorderPos = "left";
             break;
         case NS_ooxml::LN_CT_TblBorders_bottom:
-            pos = BORDER_BOTTOM;
+            pos = BorderPosition::Bottom;
             aBorderPos = "bottom";
             break;
         case NS_ooxml::LN_CT_TblBorders_end:
-            pos = rtl ? BORDER_LEFT : BORDER_RIGHT;
+            pos = rtl ? BorderPosition::Left : BorderPosition::Right;
             aBorderPos = "end";
             break;
         case NS_ooxml::LN_CT_TblBorders_right:
-            pos = BORDER_RIGHT;
+            pos = BorderPosition::Right;
             aBorderPos = "right";
             break;
         case NS_ooxml::LN_CT_TblBorders_insideH:
-            pos = BORDER_HORIZONTAL;
+            pos = BorderPosition::Horizontal;
             aBorderPos = "insideH";
             break;
         case NS_ooxml::LN_CT_TblBorders_insideV:
-            pos = BORDER_VERTICAL;
+            pos = BorderPosition::Vertical;
             aBorderPos = "insideV";
             break;
         default:
-            break;
+            return;
     }
-    if( pos != BORDER_COUNT )
+    writerfilter::Reference<Properties>::Pointer_t pProperties = 
rSprm.getProps();
+    if( pProperties.get())
     {
-        writerfilter::Reference<Properties>::Pointer_t pProperties = 
rSprm.getProps();
-        if( pProperties.get())
+        std::vector<beans::PropertyValue> aSavedGrabBag;
+        if (!m_aInteropGrabBagName.isEmpty())
         {
-            std::vector<beans::PropertyValue> aSavedGrabBag;
-            if (!m_aInteropGrabBagName.isEmpty())
-            {
-                aSavedGrabBag = m_aInteropGrabBag;
-                m_aInteropGrabBag.clear();
-            }
-            pProperties->resolve(*this);
-            if (!m_aInteropGrabBagName.isEmpty())
-            {
-                aSavedGrabBag.push_back(getInteropGrabBag(aBorderPos));
-                m_aInteropGrabBag = aSavedGrabBag;
-            }
+            aSavedGrabBag = m_aInteropGrabBag;
+            m_aInteropGrabBag.clear();
+        }
+        pProperties->resolve(*this);
+        if (!m_aInteropGrabBagName.isEmpty())
+        {
+            aSavedGrabBag.push_back(getInteropGrabBag(aBorderPos));
+            m_aInteropGrabBag = aSavedGrabBag;
         }
-        ConversionHelper::MakeBorderLine( m_nLineWidth,   m_nLineType, 
m_nLineColor,
-                               m_aBorderLines[ pos ], m_bOOXML );
-        m_aFilledLines[ pos ] = true;
     }
+    ConversionHelper::MakeBorderLine( m_nLineWidth,   m_nLineType, 
m_nLineColor,
+                           m_aBorderLines[ pos ], m_bOOXML );
+    m_aFilledLines[ pos ] = true;
 }
 
 PropertyMapPtr  BorderHandler::getProperties()
 {
-    static const PropertyIds aPropNames[BORDER_COUNT] =
+    static const o3tl::enumarray<BorderPosition, PropertyIds> aPropNames =
     {
         PROP_TOP_BORDER,
         PROP_LEFT_BORDER,
@@ -169,7 +167,7 @@ PropertyMapPtr  BorderHandler::getProperties()
     // don't fill in default properties
     if( m_bOOXML )
     {
-        for( sal_Int32 nProp = 0; nProp < BORDER_COUNT; ++nProp)
+        for( auto nProp: o3tl::enumrange<BorderPosition>())
         {
             if ( m_aFilledLines[nProp] ) {
                 pPropertyMap->Insert( aPropNames[nProp], uno::makeAny( 
m_aBorderLines[nProp] ) );
diff --git a/writerfilter/source/dmapper/BorderHandler.hxx 
b/writerfilter/source/dmapper/BorderHandler.hxx
index b3d3ea7d0266..9d8001d51050 100644
--- a/writerfilter/source/dmapper/BorderHandler.hxx
+++ b/writerfilter/source/dmapper/BorderHandler.hxx
@@ -24,6 +24,7 @@
 #include <memory>
 #include <com/sun/star/table/BorderLine2.hpp>
 #include <com/sun/star/beans/PropertyValue.hpp>
+#include <o3tl/enumarray.hxx>
 
 namespace writerfilter {
 namespace dmapper
@@ -31,20 +32,19 @@ namespace dmapper
 class PropertyMap;
 class BorderHandler : public LoggedProperties
 {
-public:
+private:
     //todo: order is a guess
-    enum BorderPosition
+    enum class BorderPosition
     {
-        BORDER_TOP,
-        BORDER_LEFT,
-        BORDER_BOTTOM,
-        BORDER_RIGHT,
-        BORDER_HORIZONTAL,
-        BORDER_VERTICAL,
-        BORDER_COUNT
+        Top,
+        Left,
+        Bottom,
+        Right,
+        Horizontal,
+        Vertical,
+        LAST = Vertical
     };
 
-private:
     //values of the current border
     sal_Int32       m_nLineWidth;
     sal_Int32       m_nLineType;
@@ -53,8 +53,8 @@ private:
     bool            m_bShadow;
     bool const      m_bOOXML;
 
-    bool                                        m_aFilledLines[BORDER_COUNT];
-    css::table::BorderLine2 m_aBorderLines[BORDER_COUNT];
+    o3tl::enumarray<BorderPosition, bool> m_aFilledLines;
+    o3tl::enumarray<BorderPosition, css::table::BorderLine2> m_aBorderLines;
     OUString m_aInteropGrabBagName;
     std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
     void appendGrabBag(const OUString& aKey, const OUString& aValue);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to