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 _BC_DATAMATRIXVERSION_H_
8#define _BC_DATAMATRIXVERSION_H_
9class ECBlocks;
10class CBC_DataMatrixVersion;
11class ECB {
12 public:
13  ECB(int32_t count, int32_t dataCodewords) {
14    m_count = count;
15    m_dataCodewords = dataCodewords;
16  }
17
18  int32_t GetCount() { return m_count; }
19
20  int32_t GetDataCodewords() { return m_dataCodewords; }
21
22 private:
23  int32_t m_count;
24  int32_t m_dataCodewords;
25};
26class ECBlocks {
27 public:
28  ECBlocks(int32_t ecCodewords, ECB* ecBlocks) {
29    m_ecCodewords = ecCodewords;
30    m_ecBlocks.Add(ecBlocks);
31  }
32
33  ECBlocks(int32_t ecCodewords, ECB* ecBlocks1, ECB* ecBlocks2) {
34    m_ecCodewords = ecCodewords;
35    m_ecBlocks.Add(ecBlocks1);
36    m_ecBlocks.Add(ecBlocks2);
37  }
38  ~ECBlocks() {
39    for (int32_t i = 0; i < m_ecBlocks.GetSize(); i++) {
40      delete (ECB*)m_ecBlocks[i];
41    }
42    m_ecBlocks.RemoveAll();
43  }
44
45  int32_t GetECCodewords() { return m_ecCodewords; }
46
47  const CFX_PtrArray& GetECBlocks() { return m_ecBlocks; }
48
49 private:
50  int32_t m_ecCodewords;
51  CFX_PtrArray m_ecBlocks;
52};
53class CBC_DataMatrixVersion {
54 public:
55  CBC_DataMatrixVersion(int32_t versionNumber,
56                        int32_t symbolSizeRows,
57                        int32_t symbolSizeColumns,
58                        int32_t dataRegionSizeRows,
59                        int32_t dataRegionSizeColumns,
60                        ECBlocks* ecBlocks);
61  virtual ~CBC_DataMatrixVersion();
62  static void Initialize();
63  static void Finalize();
64  int32_t GetVersionNumber();
65  int32_t GetSymbolSizeRows();
66  int32_t GetSymbolSizeColumns();
67  int32_t GetDataRegionSizeRows();
68  int32_t GetDataRegionSizeColumns();
69  int32_t GetTotalCodewords();
70  ECBlocks* GetECBlocks();
71  static CBC_DataMatrixVersion* GetVersionForDimensions(int32_t numRows,
72                                                        int32_t numColumns,
73                                                        int32_t& e);
74  static void ReleaseAll();
75
76 private:
77  int32_t m_versionNumber;
78  int32_t m_symbolSizeRows;
79  int32_t m_symbolSizeColumns;
80  int32_t m_dataRegionSizeRows;
81  int32_t m_dataRegionSizeColumns;
82  ECBlocks* m_ecBlocks;
83  int32_t m_totalCodewords;
84  static CFX_PtrArray* VERSIONS;
85};
86#endif
87