Kaydet (Commit) 3a545893 authored tarafından Noel Grandin's avatar Noel Grandin

convert Primitive2DContainer to std::deque

since we only care about appending to this container, and then
traversing it (normally once). So reduce the re-allocations that
std::vector requires

Change-Id: I206a7b82d9eefc1fa3762c4a03e7b5e21136951f
Reviewed-on: https://gerrit.libreoffice.org/30706Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 81e3f5f2
......@@ -27,6 +27,7 @@
#include <com/sun/star/util/XAccounting.hpp>
#include <cppuhelper/basemutex.hxx>
#include <basegfx/range/b2drange.hxx>
#include <deque>
/** defines for DeclPrimitive2DIDBlock and ImplPrimitive2DIDBlock
......@@ -58,21 +59,21 @@ namespace drawinglayer { namespace primitive2d {
typedef css::uno::Sequence< Primitive2DReference > Primitive2DSequence;
class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer : public std::vector< Primitive2DReference >
class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer : public std::deque< Primitive2DReference >
{
public:
explicit Primitive2DContainer() {}
explicit Primitive2DContainer( size_type count ) : vector(count) {}
Primitive2DContainer( const Primitive2DContainer& other ) : vector(other) {}
Primitive2DContainer( const Primitive2DContainer&& other ) : vector(other) {}
Primitive2DContainer( const vector< Primitive2DReference >& other ) : vector(other) {}
Primitive2DContainer( std::initializer_list<Primitive2DReference> init ) : vector(init) {}
explicit Primitive2DContainer( size_type count ) : deque(count) {}
Primitive2DContainer( const Primitive2DContainer& other ) : deque(other) {}
Primitive2DContainer( const Primitive2DContainer&& other ) : deque(other) {}
Primitive2DContainer( const std::deque< Primitive2DReference >& other ) : deque(other) {}
Primitive2DContainer( std::initializer_list<Primitive2DReference> init ) : deque(init) {}
void append(const Primitive2DContainer& rSource);
void append(const Primitive2DSequence& rSource);
void append(Primitive2DContainer&& rSource);
Primitive2DContainer& operator=(const Primitive2DContainer& r) { vector::operator=(r); return *this; }
Primitive2DContainer& operator=(const Primitive2DContainer&& r) { vector::operator=(r); return *this; }
Primitive2DContainer& operator=(const Primitive2DContainer& r) { deque::operator=(r); return *this; }
Primitive2DContainer& operator=(const Primitive2DContainer&& r) { deque::operator=(r); return *this; }
bool operator==(const Primitive2DContainer& rB) const;
bool operator!=(const Primitive2DContainer& rB) const { return !operator==(rB); }
basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& aViewInformation) const;
......
......@@ -26,6 +26,7 @@
#include <cppuhelper/basemutex.hxx>
#include <com/sun/star/graphic/XPrimitive3D.hpp>
#include <basegfx/range/b3drange.hxx>
#include <deque>
/** defines for DeclPrimitive3DIDBlock and ImplPrimitive3DIDBlock
......@@ -53,18 +54,18 @@ namespace drawinglayer { namespace primitive3d {
typedef css::uno::Reference< css::graphic::XPrimitive3D > Primitive3DReference;
typedef css::uno::Sequence< Primitive3DReference > Primitive3DSequence;
class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive3DContainer : public std::vector< Primitive3DReference >
class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive3DContainer : public std::deque< Primitive3DReference >
{
public:
explicit Primitive3DContainer() {}
explicit Primitive3DContainer( size_type count ) : vector(count) {}
Primitive3DContainer( const Primitive3DContainer& other ) : vector(other) {}
Primitive3DContainer( const Primitive3DContainer&& other ) : vector(other) {}
Primitive3DContainer( std::initializer_list<Primitive3DReference> init ) : vector(init) {}
explicit Primitive3DContainer( size_type count ) : deque(count) {}
Primitive3DContainer( const Primitive3DContainer& other ) : deque(other) {}
Primitive3DContainer( const Primitive3DContainer&& other ) : deque(other) {}
Primitive3DContainer( std::initializer_list<Primitive3DReference> init ) : deque(init) {}
void append(const Primitive3DContainer& rSource);
Primitive3DContainer& operator=(const Primitive3DContainer& r) { vector::operator=(r); return *this; }
Primitive3DContainer& operator=(const Primitive3DContainer&& r) { vector::operator=(r); return *this; }
Primitive3DContainer& operator=(const Primitive3DContainer& r) { deque::operator=(r); return *this; }
Primitive3DContainer& operator=(const Primitive3DContainer&& r) { deque::operator=(r); return *this; }
bool operator==(const Primitive3DContainer& rB) const;
bool operator!=(const Primitive3DContainer& rB) const { return !operator==(rB); }
basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& aViewInformation) const;
......
......@@ -24,6 +24,7 @@
#include <com/sun/star/graphic/XPrimitive2D.hpp>
#include <vcl/bitmapex.hxx>
#include <rtl/ustring.hxx>
#include <deque>
typedef css::uno::Sequence<sal_Int8> SvgDataArray;
......@@ -33,7 +34,7 @@ typedef css::uno::Sequence<sal_Int8> SvgDataArray;
// using default parameters and graphic::XPrimitive2DRenderer
BitmapEx VCL_DLLPUBLIC convertPrimitive2DSequenceToBitmapEx(
const std::vector< css::uno::Reference< css::graphic::XPrimitive2D > >& rSequence,
const std::deque< css::uno::Reference< css::graphic::XPrimitive2D > >& rSequence,
const basegfx::B2DRange& rTargetRange,
const sal_uInt32 nMaximumQuadraticPixels = 500000);
......@@ -49,7 +50,7 @@ private:
// on demand created content
basegfx::B2DRange maRange;
std::vector< css::uno::Reference< css::graphic::XPrimitive2D > >
std::deque< css::uno::Reference< css::graphic::XPrimitive2D > >
maSequence;
BitmapEx maReplacement;
size_t mNestedBitmapSize;
......@@ -74,7 +75,7 @@ public:
/// data read and evtl. on demand creation
const basegfx::B2DRange& getRange() const;
const std::vector< css::uno::Reference< css::graphic::XPrimitive2D > >& getPrimitive2DSequence() const;
const std::deque< css::uno::Reference< css::graphic::XPrimitive2D > >& getPrimitive2DSequence() const;
const BitmapEx& getReplacement() const;
};
......
......@@ -105,7 +105,7 @@ namespace svgio
const uno::Reference< ::io::XInputStream >& xSVGStream,
const OUString& aAbsolutePath ) throw (uno::RuntimeException, std::exception)
{
drawinglayer::primitive2d::Primitive2DSequence aRetval;
drawinglayer::primitive2d::Primitive2DContainer aRetval;
if(xSVGStream.is())
{
......@@ -156,9 +156,7 @@ namespace svgio
if(Display_none != pCandidate->getDisplay())
{
drawinglayer::primitive2d::Primitive2DContainer aTmp = comphelper::sequenceToContainer<drawinglayer::primitive2d::Primitive2DContainer>(aRetval);
pCandidate->decomposeSvgNode(aTmp, false);
aRetval = comphelper::containerToSequence(aTmp);
pCandidate->decomposeSvgNode(aRetval, false);
}
}
}
......@@ -167,7 +165,7 @@ namespace svgio
OSL_ENSURE(false, "Invalid stream (!)");
}
return aRetval;
return comphelper::containerToSequence(aRetval);
}
OUString SAL_CALL XSvgParser::getImplementationName() throw(uno::RuntimeException, std::exception)
......
......@@ -34,7 +34,7 @@
using namespace ::com::sun::star;
BitmapEx convertPrimitive2DSequenceToBitmapEx(
const std::vector< css::uno::Reference< css::graphic::XPrimitive2D > >& rSequence,
const std::deque< css::uno::Reference< css::graphic::XPrimitive2D > >& rSequence,
const basegfx::B2DRange& rTargetRange,
const sal_uInt32 nMaximumQuadraticPixels)
{
......@@ -90,7 +90,7 @@ BitmapEx convertPrimitive2DSequenceToBitmapEx(
}
size_t estimateSize(
std::vector<uno::Reference<graphic::XPrimitive2D>> const& rSequence)
std::deque<uno::Reference<graphic::XPrimitive2D>> const& rSequence)
{
size_t nRet(0);
for (auto& it : rSequence)
......@@ -131,7 +131,8 @@ void SvgData::ensureSequenceAndRange()
{
const uno::Reference< graphic::XSvgParser > xSvgParser = graphic::SvgTools::create(xContext);
maSequence = comphelper::sequenceToContainer< std::vector< css::uno::Reference< css::graphic::XPrimitive2D > > >(xSvgParser->getDecomposition(myInputStream, maPath));
maSequence = comphelper::sequenceToContainer<std::deque<css::uno::Reference< css::graphic::XPrimitive2D >>,
css::uno::Reference< css::graphic::XPrimitive2D >>(xSvgParser->getDecomposition(myInputStream, maPath));
}
catch(const uno::Exception&)
{
......@@ -220,7 +221,7 @@ const basegfx::B2DRange& SvgData::getRange() const
return maRange;
}
const std::vector< css::uno::Reference< css::graphic::XPrimitive2D > >& SvgData::getPrimitive2DSequence() const
const std::deque< css::uno::Reference< css::graphic::XPrimitive2D > >& SvgData::getPrimitive2DSequence() const
{
const_cast< SvgData* >(this)->ensureSequenceAndRange();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment