1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef FXBARCODE_DATAMATRIX_BC_SYMBOLINFO_H_ 8 #define FXBARCODE_DATAMATRIX_BC_SYMBOLINFO_H_ 9 10 #include "core/fxcrt/fx_system.h" 11 12 class CBC_SymbolInfo { 13 public: 14 struct Data { 15 int16_t data_capacity; 16 int16_t error_codewords; 17 int16_t rs_block_data; 18 int8_t rs_block_error; 19 int8_t matrix_width; 20 int8_t matrix_height; 21 int8_t data_regions; 22 }; 23 24 virtual ~CBC_SymbolInfo(); 25 26 static void Initialize(); 27 static void Finalize(); 28 static const CBC_SymbolInfo* Lookup(size_t data_codewords, 29 bool allow_rectangular); 30 31 int32_t GetSymbolDataWidth() const; 32 int32_t GetSymbolDataHeight() const; 33 int32_t GetSymbolWidth() const; 34 int32_t GetSymbolHeight() const; 35 virtual size_t GetInterleavedBlockCount() const; 36 size_t GetDataLengthForInterleavedBlock() const; 37 size_t GetErrorLengthForInterleavedBlock() const; 38 data_capacity()39 size_t data_capacity() const { return data_->data_capacity; } error_codewords()40 size_t error_codewords() const { return data_->error_codewords; } matrix_width()41 int32_t matrix_width() const { return data_->matrix_width; } matrix_height()42 int32_t matrix_height() const { return data_->matrix_height; } 43 44 protected: 45 explicit CBC_SymbolInfo(const Data* data); 46 47 private: 48 int32_t GetHorizontalDataRegions() const; 49 int32_t GetVerticalDataRegions() const; is_rectangular()50 bool is_rectangular() const { 51 return data_->matrix_width != data_->matrix_height; 52 } 53 54 const Data* const data_; 55 }; 56 57 #endif // FXBARCODE_DATAMATRIX_BC_SYMBOLINFO_H_ 58