// 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_PDF417CODEWORD_H_
#define XFA_FXBARCODE_PDF417_BC_PDF417CODEWORD_H_

#include "core/fxcrt/include/fx_basic.h"

class CBC_Codeword {
 public:
  CBC_Codeword(int32_t startX, int32_t endX, int32_t bucket, int32_t value);
  virtual ~CBC_Codeword();

  FX_BOOL hasValidRowNumber();
  FX_BOOL isValidRowNumber(int32_t rowNumber);
  void setRowNumberAsRowIndicatorColumn();
  int32_t getWidth();
  int32_t getStartX();
  int32_t getEndX();
  int32_t getBucket();
  int32_t getValue();
  int32_t getRowNumber();
  void setRowNumber(int32_t rowNumber);
  CFX_ByteString toString();

 private:
  static int32_t BARCODE_ROW_UNKNOWN;
  int32_t m_startX;
  int32_t m_endX;
  int32_t m_bucket;
  int32_t m_value;
  int32_t m_rowNumber;
};

#endif  // XFA_FXBARCODE_PDF417_BC_PDF417CODEWORD_H_
