14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#ifndef FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_
8d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#define FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <memory>
11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <vector>
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CBC_BarcodeRow;
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CBC_BarcodeMatrix {
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public:
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CBC_BarcodeMatrix();
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CBC_BarcodeMatrix(int32_t height, int32_t width);
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  virtual ~CBC_BarcodeMatrix();
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CBC_BarcodeRow* getCurrentRow() const { return m_matrix[m_currentRow].get(); }
22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  int32_t getWidth() const { return m_outWidth; }
23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  int32_t getHeight() const { return m_outHeight; }
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void set(int32_t x, int32_t y, uint8_t value);
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void setMatrix(int32_t x, int32_t y, bool black);
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void startRow();
27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::vector<uint8_t>& getMatrix();
28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::vector<uint8_t>& getScaledMatrix(int32_t scale);
29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::vector<uint8_t>& getScaledMatrix(int32_t xScale, int32_t yScale);
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann private:
32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::vector<std::unique_ptr<CBC_BarcodeRow>> m_matrix;
33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::vector<uint8_t> m_matrixOut;
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t m_currentRow;
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t m_height;
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t m_width;
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t m_outWidth;
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t m_outHeight;
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#endif  // FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_
42