1 // Copyright 2014 The PDFium Authors 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 <stddef.h> 11 #include <stdint.h> 12 13 #include "core/fxcrt/unowned_ptr.h" 14 15 class CBC_SymbolInfo { 16 public: 17 struct Data { 18 int16_t data_capacity; 19 int16_t error_codewords; 20 int16_t rs_block_data; 21 int8_t rs_block_error; 22 int8_t matrix_width; 23 int8_t matrix_height; 24 int8_t data_regions; 25 }; 26 27 virtual ~CBC_SymbolInfo(); 28 29 static void Initialize(); 30 static void Finalize(); 31 static const CBC_SymbolInfo* Lookup(size_t data_codewords, 32 bool allow_rectangular); 33 34 int32_t GetSymbolDataWidth() const; 35 int32_t GetSymbolDataHeight() const; 36 int32_t GetSymbolWidth() const; 37 int32_t GetSymbolHeight() const; 38 virtual size_t GetInterleavedBlockCount() const; 39 size_t GetDataLengthForInterleavedBlock() const; 40 size_t GetErrorLengthForInterleavedBlock() const; 41 data_capacity()42 size_t data_capacity() const { return data_->data_capacity; } error_codewords()43 size_t error_codewords() const { return data_->error_codewords; } matrix_width()44 int32_t matrix_width() const { return data_->matrix_width; } matrix_height()45 int32_t matrix_height() const { return data_->matrix_height; } 46 47 protected: 48 explicit CBC_SymbolInfo(const Data* data); 49 50 private: 51 int32_t GetHorizontalDataRegions() const; 52 int32_t GetVerticalDataRegions() const; is_rectangular()53 bool is_rectangular() const { 54 return data_->matrix_width != data_->matrix_height; 55 } 56 57 UnownedPtr<const Data> const data_; 58 }; 59 60 #endif // FXBARCODE_DATAMATRIX_BC_SYMBOLINFO_H_ 61