rxing/pdf417/decoder/
codeword.rs1use std::fmt::Display;
18
19const BARCODE_ROW_UNKNOWN: i32 = -1;
20
21#[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}