rxing/pdf417/decoder/
codeword.rs

1/*
2 * Copyright 2013 ZXing authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17use std::fmt::Display;
18
19const BARCODE_ROW_UNKNOWN: i32 = -1;
20
21/**
22 * @author Guenther Grau
23 */
24#[derive(Clone, Copy)]
25pub struct Codeword {
26    startX: u32,
27    endX: u32,
28    bucket: u32,
29    value: u32,
30    rowNumber: i32,
31}
32
33impl Codeword {
34    pub fn new(startX: u32, endX: u32, bucket: u32, value: u32) -> Self {
35        Self {
36            startX,
37            endX,
38            bucket,
39            value,
40            rowNumber: BARCODE_ROW_UNKNOWN,
41        }
42    }
43
44    pub fn hasValidRowNumber(&self) -> bool {
45        self.isValidRowNumber(self.rowNumber)
46    }
47
48    pub fn isValidRowNumber(&self, rowNumber: i32) -> bool {
49        rowNumber != BARCODE_ROW_UNKNOWN && self.bucket == (rowNumber as u32 % 3) * 3
50    }
51
52    pub fn setRowNumberAsRowIndicatorColumn(&mut self) {
53        self.rowNumber = ((self.value / 30) * 3 + self.bucket / 3) as i32;
54    }
55
56    pub fn getWidth(&self) -> u32 {
57        self.endX - self.startX
58    }
59
60    pub fn getStartX(&self) -> u32 {
61        self.startX
62    }
63
64    pub fn getEndX(&self) -> u32 {
65        self.endX
66    }
67
68    pub fn getBucket(&self) -> u32 {
69        self.bucket
70    }
71
72    pub fn getValue(&self) -> u32 {
73        self.value
74    }
75
76    pub fn getRowNumber(&self) -> i32 {
77        self.rowNumber
78    }
79
80    pub fn setRowNumber(&mut self, rowNumber: i32) {
81        self.rowNumber = rowNumber;
82    }
83}
84
85impl Display for Codeword {
86    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
87        write!(f, "{}|{}", self.rowNumber, self.value)
88    }
89}