diff options
Diffstat (limited to 'core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp')
-rw-r--r-- | core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp b/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp index 1ec56dfacc..a8f8a94529 100644 --- a/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp +++ b/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp @@ -10,12 +10,17 @@ #include "JBig2_Image.h" CJBig2_SymbolDict::CJBig2_SymbolDict() { - SDNUMEXSYMS = 0; - SDEXSYMS = NULL; m_bContextRetained = FALSE; m_gbContext = m_grContext = NULL; } +CJBig2_SymbolDict::~CJBig2_SymbolDict() { + if (m_bContextRetained) { + FX_Free(m_gbContext); + FX_Free(m_grContext); + } +} + nonstd::unique_ptr<CJBig2_SymbolDict> CJBig2_SymbolDict::DeepCopy() const { nonstd::unique_ptr<CJBig2_SymbolDict> dst; const CJBig2_SymbolDict* src = this; @@ -23,27 +28,9 @@ nonstd::unique_ptr<CJBig2_SymbolDict> CJBig2_SymbolDict::DeepCopy() const { return dst; dst.reset(new CJBig2_SymbolDict); - dst->SDNUMEXSYMS = src->SDNUMEXSYMS; - dst->SDEXSYMS = FX_Alloc(CJBig2_Image*, src->SDNUMEXSYMS); - for (FX_DWORD i = 0; i < src->SDNUMEXSYMS; ++i) { - if (src->SDEXSYMS[i]) { - dst->SDEXSYMS[i] = new CJBig2_Image(*(src->SDEXSYMS[i])); - } else { - dst->SDEXSYMS[i] = NULL; - } + for (size_t i = 0; i < src->m_SDEXSYMS.size(); ++i) { + CJBig2_Image* image = src->m_SDEXSYMS.get(i); + dst->m_SDEXSYMS.push_back(image ? new CJBig2_Image(*image) : nullptr); } return dst; } - -CJBig2_SymbolDict::~CJBig2_SymbolDict() { - if (SDEXSYMS) { - for (FX_DWORD i = 0; i < SDNUMEXSYMS; i++) { - delete SDEXSYMS[i]; - } - FX_Free(SDEXSYMS); - } - if (m_bContextRetained) { - FX_Free(m_gbContext); - FX_Free(m_grContext); - } -} |