Clean up CPDF_AnnotList.
[pdfium.git] / core / src / fxcodec / jbig2 / JBig2_List.h
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef CORE_SRC_FXCODEC_JBIG2_JBIG2_LIST_H_
8 #define CORE_SRC_FXCODEC_JBIG2_JBIG2_LIST_H_
9
10 #include <vector>
11
12 // A poor man's ScopedVector for pointers of TYPE.
13 // Owns all the pointers contained within and deletes them on destruction.
14 template <class TYPE>
15 class CJBig2_List {
16  public:
17   CJBig2_List() {}
18   explicit CJBig2_List(size_t count) { resize(count); }
19
20   ~CJBig2_List() {
21     clear();
22   }
23
24   TYPE* get(size_t index) const { return m_vector[index]; }
25   TYPE* back() const { return m_vector.back(); }
26   size_t size() const { return m_vector.size(); }
27
28   // Deletes all the pointers contained within.
29   void clear() {
30     for (size_t i = 0; i < m_vector.size(); ++i)
31       delete m_vector[i];
32     m_vector.clear();
33   }
34
35   // Takes ownership of |pItem|.
36   void push_back(TYPE* pItem) { m_vector.push_back(pItem); }
37
38   // Takes ownership of |pItem|.
39   void set(size_t index, TYPE* pItem) {
40     delete m_vector[index];
41     m_vector[index] = pItem;
42   }
43
44   void resize(size_t count) {
45     for (size_t i = count; i < size(); ++i)
46       delete m_vector[i];
47     m_vector.resize(count);
48   }
49
50  private:
51   std::vector<TYPE*> m_vector;
52 };
53
54 #endif  // CORE_SRC_FXCODEC_JBIG2_JBIG2_LIST_H_