1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker // Original code is licensed as follows: 7*3ac0a46fSAndroid Build Coastguard Worker /* 8*3ac0a46fSAndroid Build Coastguard Worker * Copyright 2008 ZXing authors 9*3ac0a46fSAndroid Build Coastguard Worker * 10*3ac0a46fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 11*3ac0a46fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 12*3ac0a46fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 13*3ac0a46fSAndroid Build Coastguard Worker * 14*3ac0a46fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 15*3ac0a46fSAndroid Build Coastguard Worker * 16*3ac0a46fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 17*3ac0a46fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 18*3ac0a46fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19*3ac0a46fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 20*3ac0a46fSAndroid Build Coastguard Worker * limitations under the License. 21*3ac0a46fSAndroid Build Coastguard Worker */ 22*3ac0a46fSAndroid Build Coastguard Worker 23*3ac0a46fSAndroid Build Coastguard Worker #include <utility> 24*3ac0a46fSAndroid Build Coastguard Worker 25*3ac0a46fSAndroid Build Coastguard Worker #include "fxbarcode/common/BC_CommonByteMatrix.h" 26*3ac0a46fSAndroid Build Coastguard Worker #include "fxbarcode/qrcode/BC_QRCoder.h" 27*3ac0a46fSAndroid Build Coastguard Worker #include "fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h" 28*3ac0a46fSAndroid Build Coastguard Worker #include "fxbarcode/qrcode/BC_QRCoderMode.h" 29*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/numerics/safe_conversions.h" 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker CBC_QRCoder::CBC_QRCoder() = default; 32*3ac0a46fSAndroid Build Coastguard Worker 33*3ac0a46fSAndroid Build Coastguard Worker CBC_QRCoder::~CBC_QRCoder() = default; 34*3ac0a46fSAndroid Build Coastguard Worker GetECLevel() const35*3ac0a46fSAndroid Build Coastguard Workerconst CBC_QRCoderErrorCorrectionLevel* CBC_QRCoder::GetECLevel() const { 36*3ac0a46fSAndroid Build Coastguard Worker return m_ecLevel; 37*3ac0a46fSAndroid Build Coastguard Worker } 38*3ac0a46fSAndroid Build Coastguard Worker GetVersion() const39*3ac0a46fSAndroid Build Coastguard Workerint32_t CBC_QRCoder::GetVersion() const { 40*3ac0a46fSAndroid Build Coastguard Worker return m_version; 41*3ac0a46fSAndroid Build Coastguard Worker } 42*3ac0a46fSAndroid Build Coastguard Worker GetMatrixWidth() const43*3ac0a46fSAndroid Build Coastguard Workerint32_t CBC_QRCoder::GetMatrixWidth() const { 44*3ac0a46fSAndroid Build Coastguard Worker return m_matrixWidth; 45*3ac0a46fSAndroid Build Coastguard Worker } 46*3ac0a46fSAndroid Build Coastguard Worker GetMaskPattern() const47*3ac0a46fSAndroid Build Coastguard Workerint32_t CBC_QRCoder::GetMaskPattern() const { 48*3ac0a46fSAndroid Build Coastguard Worker return m_maskPattern; 49*3ac0a46fSAndroid Build Coastguard Worker } 50*3ac0a46fSAndroid Build Coastguard Worker GetNumTotalBytes() const51*3ac0a46fSAndroid Build Coastguard Workerint32_t CBC_QRCoder::GetNumTotalBytes() const { 52*3ac0a46fSAndroid Build Coastguard Worker return m_numTotalBytes; 53*3ac0a46fSAndroid Build Coastguard Worker } 54*3ac0a46fSAndroid Build Coastguard Worker GetNumDataBytes() const55*3ac0a46fSAndroid Build Coastguard Workerint32_t CBC_QRCoder::GetNumDataBytes() const { 56*3ac0a46fSAndroid Build Coastguard Worker return m_numDataBytes; 57*3ac0a46fSAndroid Build Coastguard Worker } 58*3ac0a46fSAndroid Build Coastguard Worker GetNumRSBlocks() const59*3ac0a46fSAndroid Build Coastguard Workerint32_t CBC_QRCoder::GetNumRSBlocks() const { 60*3ac0a46fSAndroid Build Coastguard Worker return m_numRSBlocks; 61*3ac0a46fSAndroid Build Coastguard Worker } 62*3ac0a46fSAndroid Build Coastguard Worker TakeMatrix()63*3ac0a46fSAndroid Build Coastguard Workerstd::unique_ptr<CBC_CommonByteMatrix> CBC_QRCoder::TakeMatrix() { 64*3ac0a46fSAndroid Build Coastguard Worker return std::move(m_matrix); 65*3ac0a46fSAndroid Build Coastguard Worker } 66*3ac0a46fSAndroid Build Coastguard Worker IsValid() const67*3ac0a46fSAndroid Build Coastguard Workerbool CBC_QRCoder::IsValid() const { 68*3ac0a46fSAndroid Build Coastguard Worker return m_ecLevel && m_version != -1 && m_matrixWidth != -1 && 69*3ac0a46fSAndroid Build Coastguard Worker m_maskPattern != -1 && m_numTotalBytes != -1 && m_numDataBytes != -1 && 70*3ac0a46fSAndroid Build Coastguard Worker m_numECBytes != -1 && m_numRSBlocks != -1 && 71*3ac0a46fSAndroid Build Coastguard Worker IsValidMaskPattern(m_maskPattern) && 72*3ac0a46fSAndroid Build Coastguard Worker m_numTotalBytes == m_numDataBytes + m_numECBytes && m_matrix && 73*3ac0a46fSAndroid Build Coastguard Worker m_matrixWidth == 74*3ac0a46fSAndroid Build Coastguard Worker pdfium::base::checked_cast<int32_t>(m_matrix->GetWidth()) && 75*3ac0a46fSAndroid Build Coastguard Worker m_matrix->GetWidth() == m_matrix->GetHeight(); 76*3ac0a46fSAndroid Build Coastguard Worker } 77*3ac0a46fSAndroid Build Coastguard Worker SetECLevel(const CBC_QRCoderErrorCorrectionLevel * ecLevel)78*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetECLevel(const CBC_QRCoderErrorCorrectionLevel* ecLevel) { 79*3ac0a46fSAndroid Build Coastguard Worker m_ecLevel = ecLevel; 80*3ac0a46fSAndroid Build Coastguard Worker } 81*3ac0a46fSAndroid Build Coastguard Worker SetVersion(int32_t version)82*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetVersion(int32_t version) { 83*3ac0a46fSAndroid Build Coastguard Worker m_version = version; 84*3ac0a46fSAndroid Build Coastguard Worker } 85*3ac0a46fSAndroid Build Coastguard Worker SetMatrixWidth(int32_t width)86*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetMatrixWidth(int32_t width) { 87*3ac0a46fSAndroid Build Coastguard Worker m_matrixWidth = width; 88*3ac0a46fSAndroid Build Coastguard Worker } 89*3ac0a46fSAndroid Build Coastguard Worker SetMaskPattern(int32_t pattern)90*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetMaskPattern(int32_t pattern) { 91*3ac0a46fSAndroid Build Coastguard Worker m_maskPattern = pattern; 92*3ac0a46fSAndroid Build Coastguard Worker } 93*3ac0a46fSAndroid Build Coastguard Worker SetNumDataBytes(int32_t bytes)94*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetNumDataBytes(int32_t bytes) { 95*3ac0a46fSAndroid Build Coastguard Worker m_numDataBytes = bytes; 96*3ac0a46fSAndroid Build Coastguard Worker } 97*3ac0a46fSAndroid Build Coastguard Worker SetNumTotalBytes(int32_t value)98*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetNumTotalBytes(int32_t value) { 99*3ac0a46fSAndroid Build Coastguard Worker m_numTotalBytes = value; 100*3ac0a46fSAndroid Build Coastguard Worker } 101*3ac0a46fSAndroid Build Coastguard Worker SetNumRSBlocks(int32_t block)102*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetNumRSBlocks(int32_t block) { 103*3ac0a46fSAndroid Build Coastguard Worker m_numRSBlocks = block; 104*3ac0a46fSAndroid Build Coastguard Worker } 105*3ac0a46fSAndroid Build Coastguard Worker SetNumECBytes(int32_t value)106*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetNumECBytes(int32_t value) { 107*3ac0a46fSAndroid Build Coastguard Worker m_numECBytes = value; 108*3ac0a46fSAndroid Build Coastguard Worker } 109*3ac0a46fSAndroid Build Coastguard Worker IsValidMaskPattern(int32_t maskPattern)110*3ac0a46fSAndroid Build Coastguard Workerbool CBC_QRCoder::IsValidMaskPattern(int32_t maskPattern) { 111*3ac0a46fSAndroid Build Coastguard Worker return maskPattern >= 0 && maskPattern < kNumMaskPatterns; 112*3ac0a46fSAndroid Build Coastguard Worker } 113*3ac0a46fSAndroid Build Coastguard Worker SetMatrix(std::unique_ptr<CBC_CommonByteMatrix> pMatrix)114*3ac0a46fSAndroid Build Coastguard Workervoid CBC_QRCoder::SetMatrix(std::unique_ptr<CBC_CommonByteMatrix> pMatrix) { 115*3ac0a46fSAndroid Build Coastguard Worker m_matrix = std::move(pMatrix); 116*3ac0a46fSAndroid Build Coastguard Worker } 117