// 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 FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
#define FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
class CBC_CommonByteMatrix;
class CBC_QRCoderMaskUtil {
 public:
  CBC_QRCoderMaskUtil();
  virtual ~CBC_QRCoderMaskUtil();
  static bool GetDataMaskBit(int32_t maskPattern,
                             int32_t x,
                             int32_t y,
                             int32_t& e);

  static int32_t ApplyMaskPenaltyRule1(CBC_CommonByteMatrix* matrix);
  static int32_t ApplyMaskPenaltyRule2(CBC_CommonByteMatrix* matrix);
  static int32_t ApplyMaskPenaltyRule3(CBC_CommonByteMatrix* matrix);
  static int32_t ApplyMaskPenaltyRule4(CBC_CommonByteMatrix* matrix);
  static int32_t ApplyMaskPenaltyRule1Internal(CBC_CommonByteMatrix* matrix,
                                               bool isHorizontal);
};

#endif  // FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
