Files

79 lines
2.4 KiB
C
Raw Permalink Normal View History

/*
* Copyright 2016 Huy Cuong Nguyen
* Copyright 2016 ZXing authors
*/
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include "DMSymbolShape.h"
namespace ZXing::DataMatrix {
class SymbolInfo
{
bool _rectangular;
int _dataCapacity;
int _errorCodewords;
int _matrixWidth;
int _matrixHeight;
int _dataRegions;
int _rsBlockData;
int _rsBlockError;
public:
constexpr SymbolInfo(bool rectangular, int dataCapacity, int errorCodewords, int matrixWidth, int matrixHeight, int dataRegions)
: SymbolInfo(rectangular, dataCapacity, errorCodewords, matrixWidth, matrixHeight, dataRegions, dataCapacity, errorCodewords)
{}
constexpr SymbolInfo(bool rectangular, int dataCapacity, int errorCodewords, int matrixWidth, int matrixHeight, int dataRegions,
int rsBlockData, int rsBlockError)
: _rectangular(rectangular),
_dataCapacity(dataCapacity),
_errorCodewords(errorCodewords),
_matrixWidth(matrixWidth),
_matrixHeight(matrixHeight),
_dataRegions(dataRegions),
_rsBlockData(rsBlockData),
_rsBlockError(rsBlockError)
{}
static const SymbolInfo* Lookup(int dataCodewords);
static const SymbolInfo* Lookup(int dataCodewords, SymbolShape shape);
static const SymbolInfo* Lookup(int dataCodewords, bool allowRectangular);
static const SymbolInfo* Lookup(int dataCodewords, SymbolShape shape, int minWidth, int minHeight, int maxWidth, int maxHeight);
int horizontalDataRegions() const;
int verticalDataRegions() const;
int symbolDataWidth() const { return horizontalDataRegions() * _matrixWidth; }
int symbolDataHeight() const { return verticalDataRegions() * _matrixHeight; }
int symbolWidth() const { return symbolDataWidth() + (horizontalDataRegions() * 2); }
int symbolHeight() const { return symbolDataHeight() + (verticalDataRegions() * 2); }
int matrixWidth() const { return _matrixWidth; }
int matrixHeight() const { return _matrixHeight; }
int codewordCount() const { return _dataCapacity + _errorCodewords; }
int interleavedBlockCount() const { return _rsBlockData > 0 ? _dataCapacity / _rsBlockData : 10; /* Symbol 144 */ }
int dataCapacity() const { return _dataCapacity; }
int errorCodewords() const { return _errorCodewords; }
int dataLengthForInterleavedBlock(int index) const
{
return _rsBlockData > 0 ? _rsBlockData : (index <= 8 ? 156 : 155); /* Symbol 144 */
}
int errorLengthForInterleavedBlock() const { return _rsBlockError; }
};
} // namespace ZXing::DataMatrix