// 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

#ifndef XFA_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTCOLUMN_H_
#define XFA_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTCOLUMN_H_

class CBC_Codeword;
class CBC_BoundingBox;

class CBC_DetectionResultColumn {
 public:
  CBC_DetectionResultColumn(CBC_BoundingBox* boundingBox);
  virtual ~CBC_DetectionResultColumn();

  CBC_Codeword* getCodewordNearby(int32_t imageRow);
  int32_t imageRowToCodewordIndex(int32_t imageRow);
  int32_t codewordIndexToImageRow(int32_t codewordIndex);
  void setCodeword(int32_t imageRow, CBC_Codeword* codeword);
  CBC_Codeword* getCodeword(int32_t imageRow);
  CBC_BoundingBox* getBoundingBox();
  CFX_ArrayTemplate<CBC_Codeword*>* getCodewords() const;
  CFX_ByteString toString();

  CBC_BoundingBox* m_boundingBox;
  CFX_ArrayTemplate<CBC_Codeword*>* m_codewords;

 private:
  static int32_t MAX_NEARBY_DISTANCE;
};

#endif  // XFA_FXBARCODE_PDF417_BC_PDF417DETECTIONRESULTCOLUMN_H_
