diff options
author | Mark Page <aptitude@btconnect.com> | 2016-07-05 14:33:20 +0100 |
---|---|---|
committer | Noel Grandin <noelgrandin@gmail.com> | 2016-07-11 06:32:00 +0000 |
commit | b8c8b0d0c2bb2a1ce61e4d94d0a3e0636db658fa (patch) | |
tree | 922591d03f342f5585e935cd54edae14f533d252 /vcl/source/filter/ixbm | |
parent | a4d40892b78070c9e54e0c8a30ed20d3395e68cd (diff) |
Modify ImpGraphic class, GraphicReader context to use unique ptr
Change-Id: I51c3995f4a6e940a5235524eb94dd356b27ae8d7
Reviewed-on: https://gerrit.libreoffice.org/26955
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Diffstat (limited to 'vcl/source/filter/ixbm')
-rw-r--r-- | vcl/source/filter/ixbm/xbmread.cxx | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/vcl/source/filter/ixbm/xbmread.cxx b/vcl/source/filter/ixbm/xbmread.cxx index a8a59a741891..4053f056d53e 100644 --- a/vcl/source/filter/ixbm/xbmread.cxx +++ b/vcl/source/filter/ixbm/xbmread.cxx @@ -381,25 +381,25 @@ ReadState XBMReader::ReadXBM( Graphic& rGraphic ) VCL_DLLPUBLIC bool ImportXBM( SvStream& rStm, Graphic& rGraphic ) { - XBMReader* pXBMReader = static_cast<XBMReader*>( rGraphic.GetContext() ); - ReadState eReadState; - bool bRet = true; + std::shared_ptr<GraphicReader> pContext = rGraphic.GetContext(); + rGraphic.SetContext(nullptr); + XBMReader* pXBMReader = dynamic_cast<XBMReader*>( pContext.get() ); + if (!pXBMReader) + { + pContext = std::make_shared<XBMReader>( rStm ); + pXBMReader = static_cast<XBMReader*>( pContext.get() ); + } - if( !pXBMReader ) - pXBMReader = new XBMReader( rStm ); + bool bRet = true; - rGraphic.SetContext( nullptr ); - eReadState = pXBMReader->ReadXBM( rGraphic ); + ReadState eReadState = pXBMReader->ReadXBM( rGraphic ); if( eReadState == XBMREAD_ERROR ) { bRet = false; - delete pXBMReader; } - else if( eReadState == XBMREAD_OK ) - delete pXBMReader; - else - rGraphic.SetContext( pXBMReader ); + else if( eReadState == XBMREAD_NEED_MORE ) + rGraphic.SetContext( pContext ); return bRet; } |