1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _JBIG2_LIST_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _JBIG2_LIST_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "JBig2_Define.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "JBig2_Object.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtemplate <class TYPE>
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJBig2_List : public CJBig2_Object
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CJBig2_List(FX_INT32 nSize = 8)
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_nSize = nSize;
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_pArray = (TYPE**)m_pModule->JBig2_Malloc2(sizeof(TYPE*), nSize);
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_nLength = 0;
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CJBig2_List()
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        clear();
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_pModule->JBig2_Free(m_pArray);
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void clear()
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_INT32 i;
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        for(i = 0; i < m_nLength; i++) {
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            delete m_pArray[i];
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_nLength = 0;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void addItem(TYPE *pItem)
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if(m_nLength >= m_nSize) {
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            m_nSize += 8;
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            m_pArray = (TYPE**)m_pModule->JBig2_Realloc(m_pArray, sizeof(TYPE*)*m_nSize);
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        m_pArray[m_nLength++] = pItem;
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32 getLength()
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_nLength;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    TYPE *getAt(FX_INT32 nIndex)
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pArray[nIndex];
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    TYPE *getLast()
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pArray[m_nLength - 1];
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32 m_nSize;
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    TYPE **m_pArray;
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_INT32 m_nLength;
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
68