summaryrefslogtreecommitdiff
path: root/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp
blob: bad2fc4bcece752e1ca8e527f1f43de1b2654d0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
 
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "JBig2_SymbolDict.h"
CJBig2_SymbolDict::CJBig2_SymbolDict()
{
    SDNUMEXSYMS = 0;
    SDEXSYMS = NULL;
    m_bContextRetained = FALSE;
    m_gbContext = m_grContext = NULL;
}

CJBig2_SymbolDict *CJBig2_SymbolDict::DeepCopy()
{
    CJBig2_SymbolDict *dst = NULL;
    CJBig2_SymbolDict *src = this;
    if (src->m_bContextRetained ||
        src->m_gbContext ||
        src->m_grContext) {
        return NULL;
    }
    JBIG2_ALLOC(dst, CJBig2_SymbolDict());
    dst->SDNUMEXSYMS = src->SDNUMEXSYMS;
    dst->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
        sizeof(CJBig2_Image*), src->SDNUMEXSYMS);
    for(FX_DWORD i = 0; i < src->SDNUMEXSYMS; i++) {
        JBIG2_ALLOC(dst->SDEXSYMS[i],
                    CJBig2_Image(*(src->SDEXSYMS[i])));
    }
    return dst;
}

CJBig2_SymbolDict::~CJBig2_SymbolDict()
{
    if(SDEXSYMS) {
        for(FX_DWORD i = 0; i < SDNUMEXSYMS; i++) {
            if(SDEXSYMS[i]) {
                delete SDEXSYMS[i];
            }
        }
        m_pModule->JBig2_Free(SDEXSYMS);
    }
    if(m_bContextRetained) {
        if(m_gbContext) {
            m_pModule->JBig2_Free(m_gbContext);
        }
        if(m_grContext) {
            m_pModule->JBig2_Free(m_grContext);
        }
    }
}