maSvgDataArray only populates a uno::Sequence, so use that instead

Change-Id: I335d5ee70e95e1a3b204d34f6df4cb62f3fb3cad
diff --git a/include/vcl/svgdata.hxx b/include/vcl/svgdata.hxx
index c8ee1864..b234c10 100644
--- a/include/vcl/svgdata.hxx
+++ b/include/vcl/svgdata.hxx
@@ -21,13 +21,12 @@
#define INCLUDED_VCL_SVGDATA_HXX

#include <basegfx/range/b2drange.hxx>
#include <boost/shared_array.hpp>
#include <com/sun/star/graphic/XPrimitive2D.hpp>
#include <vcl/bitmapex.hxx>
#include <rtl/ustring.hxx>


typedef boost::shared_array< sal_uInt8 > SvgDataArray;
typedef css::uno::Sequence<sal_Int8> SvgDataArray;


// helper to convert any Primitive2DSequence to a good quality BitmapEx,
@@ -44,7 +43,6 @@ class VCL_DLLPUBLIC SvgData
private:
    // the file and length
    SvgDataArray            maSvgDataArray;
    sal_uInt32              mnSvgDataArrayLength;

    // The absolute Path if available
    OUString           maPath;
@@ -63,12 +61,12 @@ private:
    SvgData& operator=(const SvgData&) SAL_DELETED_FUNCTION;

public:
    SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLength, const OUString& rPath);
    SvgData(const SvgDataArray& rSvgDataArray, const OUString& rPath);
    SvgData(const OUString& rPath);

    /// data read
    const SvgDataArray& getSvgDataArray() const { return maSvgDataArray; }
    sal_uInt32 getSvgDataArrayLength() const { return mnSvgDataArrayLength; }
    sal_uInt32 getSvgDataArrayLength() const { return maSvgDataArray.getLength(); }
    const OUString& getPath() const { return maPath; }

    /// data read and evtl. on demand creation
diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx
index 7d79078..49f3b65 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -1533,18 +1533,18 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat

                    if (!rIStream.GetError() && nMemoryLength >= 0)
                    {
                        SvgDataArray aNewData(new sal_uInt8[nMemoryLength]);
                        SvgDataArray aNewData(nMemoryLength);
                        aMemStream.Seek(STREAM_SEEK_TO_BEGIN);
                        aMemStream.Read(aNewData.get(), nMemoryLength);
                        aMemStream.Read(aNewData.begin(), nMemoryLength);

                        // Make a uncompressed copy for GfxLink
                        nGraphicContentSize = nMemoryLength;
                        pGraphicContent = new sal_uInt8[nGraphicContentSize];
                        std::copy(aNewData.get(), aNewData.get() + nMemoryLength, pGraphicContent);
                        std::copy(aNewData.begin(), aNewData.end(), pGraphicContent);

                        if(!aMemStream.GetError() )
                        {
                            SvgDataPtr aSvgDataPtr(new SvgData(aNewData, nMemoryLength, rPath));
                            SvgDataPtr aSvgDataPtr(new SvgData(aNewData, rPath));
                            rGraphic = Graphic(aSvgDataPtr);
                            bOkay = true;
                        }
@@ -1552,20 +1552,20 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat
                }
                else
                {
                    SvgDataArray aNewData(new sal_uInt8[nStreamLength]);
                    SvgDataArray aNewData(nStreamLength);
                    rIStream.Seek(nStreamPosition);
                    rIStream.Read(aNewData.get(), nStreamLength);
                    rIStream.Read(aNewData.begin(), nStreamLength);

                    if(!rIStream.GetError())
                    {
                        SvgDataPtr aSvgDataPtr(new SvgData(aNewData, nStreamLength, rPath));
                        SvgDataPtr aSvgDataPtr(new SvgData(aNewData, rPath));
                        rGraphic = Graphic(aSvgDataPtr);
                        bOkay = true;
                    }
                }
            }

            if(bOkay)
            if (bOkay)
            {
                eLinkType = GFX_LINK_TYPE_NATIVE_SVG;
            }
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index 4050efe..735eab1 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -1542,23 +1542,21 @@ SvStream& ReadImpGraphic( SvStream& rIStm, ImpGraphic& rImpGraphic )
                        }
                        else
                        {
                            sal_uInt32 mnSvgDataArrayLength(0);
                            rIStm.ReadUInt32( mnSvgDataArrayLength );
                            sal_uInt32 nSvgDataArrayLength(0);
                            rIStm.ReadUInt32(nSvgDataArrayLength);

                            if(mnSvgDataArrayLength)
                            if (nSvgDataArrayLength)
                            {
                                SvgDataArray aNewData(new sal_uInt8[mnSvgDataArrayLength]);
                                OUString aPath;
                                SvgDataArray aNewData(nSvgDataArrayLength);

                                rIStm.Read(aNewData.get(), mnSvgDataArrayLength);
                                aPath = rIStm.ReadUniOrByteString(rIStm.GetStreamCharSet());
                                rIStm.Read(aNewData.begin(), nSvgDataArrayLength);
                                OUString aPath = rIStm.ReadUniOrByteString(rIStm.GetStreamCharSet());

                                if(!rIStm.GetError())
                                if (!rIStm.GetError())
                                {
                                    SvgDataPtr aSvgDataPtr(
                                        new SvgData(
                                            aNewData,
                                            mnSvgDataArrayLength,
                                            OUString(aPath)));

                                    rImpGraphic = aSvgDataPtr;
diff --git a/vcl/source/gdi/svgdata.cxx b/vcl/source/gdi/svgdata.cxx
index d86fc8d..cd1614e 100644
--- a/vcl/source/gdi/svgdata.cxx
+++ b/vcl/source/gdi/svgdata.cxx
@@ -99,14 +99,13 @@ void SvgData::ensureReplacement()

void SvgData::ensureSequenceAndRange()
{
    if(!maSequence.hasElements() && mnSvgDataArrayLength)
    if(!maSequence.hasElements() && maSvgDataArray.hasElements())
    {
        // import SVG to maSequence, also set maRange
        maRange.reset();

        // create stream
        const uno::Sequence< sal_Int8 > aPostData(reinterpret_cast<sal_Int8*>(maSvgDataArray.get()), mnSvgDataArrayLength);
        const uno::Reference< io::XInputStream > myInputStream(new comphelper::SequenceInputStream(aPostData));
        const uno::Reference< io::XInputStream > myInputStream(new comphelper::SequenceInputStream(maSvgDataArray));

        if(myInputStream.is())
        {
@@ -152,9 +151,8 @@ void SvgData::ensureSequenceAndRange()
    }
}

SvgData::SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLength, const OUString& rPath)
SvgData::SvgData(const SvgDataArray& rSvgDataArray, const OUString& rPath)
:   maSvgDataArray(rSvgDataArray),
    mnSvgDataArrayLength(nSvgDataArrayLength),
    maPath(rPath),
    maRange(),
    maSequence(),
@@ -164,7 +162,6 @@ SvgData::SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLeng

SvgData::SvgData(const OUString& rPath):
    maSvgDataArray(),
    mnSvgDataArrayLength(0),
    maPath(rPath),
    maRange(),
    maSequence(),
@@ -174,15 +171,14 @@ SvgData::SvgData(const OUString& rPath):
    if(rIStm.GetError())
        return;
    const sal_uInt32 nStmLen(rIStm.remainingSize());
    if(nStmLen)
    if (nStmLen)
    {
        SvgDataArray aNewData(new sal_uInt8[nStmLen]);
        rIStm.Read(aNewData.get(), nStmLen);
        maSvgDataArray.realloc(nStmLen);
        rIStm.Read(maSvgDataArray.begin(), nStmLen);

        if(!rIStm.GetError())
        if (rIStm.GetError())
        {
            maSvgDataArray = aNewData;
            mnSvgDataArrayLength = nStmLen;
            maSvgDataArray = SvgDataArray();
        }
    }
}