tdf#63640 FILEOPEN/FILESAVE: particular .odt loads/saves very slow, part1

Make CntUnencodedStringItem sortable, implementing operator<.
This takes the load time from 4s to 3.3s

Change-Id: I532cdf65149a733d41d2caf367675800d2ba4d41
Reviewed-on: https://gerrit.libreoffice.org/71460
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/include/svl/custritm.hxx b/include/svl/custritm.hxx
index 65facd5..3899df7 100644
--- a/include/svl/custritm.hxx
+++ b/include/svl/custritm.hxx
@@ -38,6 +38,8 @@
    {}

    virtual bool operator ==(const SfxPoolItem & rItem) const override;
    virtual bool operator <(const SfxPoolItem & rItem) const override;
    virtual bool IsSortable() const override { return true; }

    virtual bool GetPresentation(SfxItemPresentation,
                                 MapUnit, MapUnit,
diff --git a/include/svx/xbtmpit.hxx b/include/svx/xbtmpit.hxx
index bce24f8..dedff05 100644
--- a/include/svx/xbtmpit.hxx
+++ b/include/svx/xbtmpit.hxx
@@ -42,6 +42,8 @@
            XFillBitmapItem( const XFillBitmapItem& rItem );

    virtual bool            operator==( const SfxPoolItem& rItem ) const override;
    // NameOrIndex is sortable, but we are not
    virtual bool            IsSortable() const override { return false; }
    virtual SfxPoolItem*    Clone( SfxItemPool* pPool = nullptr ) const override;

    virtual bool            QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
diff --git a/include/svx/xcolit.hxx b/include/svx/xcolit.hxx
index df37235..63d5e47 100644
--- a/include/svx/xcolit.hxx
+++ b/include/svx/xcolit.hxx
@@ -47,6 +47,8 @@
            XColorItem(const XColorItem& rItem);

    virtual bool            operator==(const SfxPoolItem& rItem) const override;
    // NameOrIndex is sortable, but we are not
    virtual bool            IsSortable() const override { return false; }
    virtual SfxPoolItem*    Clone(SfxItemPool* pPool = nullptr) const override;

    const Color&    GetColorValue() const;
diff --git a/include/svx/xflgrit.hxx b/include/svx/xflgrit.hxx
index 159c686..8e931cb 100644
--- a/include/svx/xflgrit.hxx
+++ b/include/svx/xflgrit.hxx
@@ -42,6 +42,8 @@
            XFillGradientItem(const XFillGradientItem& rItem);

    virtual bool            operator==(const SfxPoolItem& rItem) const override;
    // NameOrIndex is sortable, but we are not
    virtual bool            IsSortable() const override { return false; }
    virtual SfxPoolItem*    Clone(SfxItemPool* pPool = nullptr) const override;

    virtual bool            QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
diff --git a/include/svx/xflhtit.hxx b/include/svx/xflhtit.hxx
index a81e723..1f85088 100644
--- a/include/svx/xflhtit.hxx
+++ b/include/svx/xflhtit.hxx
@@ -41,6 +41,8 @@
                            XFillHatchItem(const XFillHatchItem& rItem);

    virtual bool            operator==(const SfxPoolItem& rItem) const override;
    // NameOrIndex is sortable, but we are not
    virtual bool            IsSortable() const override { return false; }
    virtual SfxPoolItem*    Clone(SfxItemPool* pPool = nullptr) const override;

    virtual bool            QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
diff --git a/include/svx/xlndsit.hxx b/include/svx/xlndsit.hxx
index a19e5060..8afc715 100644
--- a/include/svx/xlndsit.hxx
+++ b/include/svx/xlndsit.hxx
@@ -42,6 +42,8 @@
                            XLineDashItem(const XLineDashItem& rItem);

    virtual bool            operator==(const SfxPoolItem& rItem) const override;
    // NameOrIndex is sortable, but we are not
    virtual bool            IsSortable() const override { return false; }
    virtual SfxPoolItem*    Clone(SfxItemPool* pPool = nullptr) const override;

    virtual bool            QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
diff --git a/include/svx/xlnedit.hxx b/include/svx/xlnedit.hxx
index b24d482..2896138 100644
--- a/include/svx/xlnedit.hxx
+++ b/include/svx/xlnedit.hxx
@@ -41,6 +41,8 @@
            XLineEndItem(const XLineEndItem& rItem);

    virtual bool            operator==(const SfxPoolItem& rItem) const override;
    // NameOrIndex is sortable, but we are not
    virtual bool            IsSortable() const override { return false; }
    virtual SfxPoolItem*    Clone(SfxItemPool* pPool = nullptr) const override;

    virtual bool            QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
diff --git a/include/svx/xlnstit.hxx b/include/svx/xlnstit.hxx
index 3e9c402..c37cfc3 100644
--- a/include/svx/xlnstit.hxx
+++ b/include/svx/xlnstit.hxx
@@ -41,6 +41,8 @@
            XLineStartItem(const XLineStartItem& rItem);

    virtual bool            operator==(const SfxPoolItem& rItem) const override;
    // NameOrIndex is sortable, but we are not
    virtual bool            IsSortable() const override { return false; }
    virtual SfxPoolItem*    Clone(SfxItemPool* pPool = nullptr) const override;

    virtual bool            QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
diff --git a/svl/source/items/custritm.cxx b/svl/source/items/custritm.cxx
index b132456..4cba917 100644
--- a/svl/source/items/custritm.cxx
+++ b/svl/source/items/custritm.cxx
@@ -28,13 +28,20 @@
// virtual
bool CntUnencodedStringItem::operator ==(const SfxPoolItem & rItem) const
{
    DBG_ASSERT(dynamic_cast<const CntUnencodedStringItem*>( &rItem ) !=  nullptr,
               "CntUnencodedStringItem::operator ==(): Bad type");
    assert(dynamic_cast<const CntUnencodedStringItem*>( &rItem ));
    return m_aValue
            == static_cast< const CntUnencodedStringItem * >(&rItem)->
                m_aValue;
}

bool CntUnencodedStringItem::operator<(const SfxPoolItem & rItem) const
{
    assert(dynamic_cast<const CntUnencodedStringItem*>( &rItem ));
    return m_aValue
            < static_cast< const CntUnencodedStringItem * >(&rItem)->
                m_aValue;
}

// virtual
bool CntUnencodedStringItem::GetPresentation(SfxItemPresentation, MapUnit,
                                        MapUnit, OUString & rText,