mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-28 05:12:34 +00:00
Conserve state for RSS readers within MultiFormatReader and MultiFormatOneDReader
This commit is contained in:
@@ -37,6 +37,7 @@ pub struct MultiFormatReader {
|
|||||||
hints: DecodingHintDictionary,
|
hints: DecodingHintDictionary,
|
||||||
possible_formats: HashSet<BarcodeFormat>,
|
possible_formats: HashSet<BarcodeFormat>,
|
||||||
try_harder: bool,
|
try_harder: bool,
|
||||||
|
one_d_reader: MultiFormatOneDReader
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Reader for MultiFormatReader {
|
impl Reader for MultiFormatReader {
|
||||||
@@ -113,6 +114,7 @@ impl MultiFormatReader {
|
|||||||
} else {
|
} else {
|
||||||
HashSet::new()
|
HashSet::new()
|
||||||
};
|
};
|
||||||
|
self.one_d_reader = MultiFormatOneDReader::new(&hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn decode_internal<B: Binarizer>(
|
pub fn decode_internal<B: Binarizer>(
|
||||||
@@ -137,7 +139,7 @@ impl MultiFormatReader {
|
|||||||
Err(Exceptions::NOT_FOUND)
|
Err(Exceptions::NOT_FOUND)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn decode_formats<B: Binarizer>(&self, image: &mut BinaryBitmap<B>) -> Result<RXingResult> {
|
fn decode_formats<B: Binarizer>(&mut self, image: &mut BinaryBitmap<B>) -> Result<RXingResult> {
|
||||||
if !self.possible_formats.is_empty() {
|
if !self.possible_formats.is_empty() {
|
||||||
let one_d = self.possible_formats.contains(&BarcodeFormat::UPC_A)
|
let one_d = self.possible_formats.contains(&BarcodeFormat::UPC_A)
|
||||||
|| self.possible_formats.contains(&BarcodeFormat::UPC_E)
|
|| self.possible_formats.contains(&BarcodeFormat::UPC_E)
|
||||||
@@ -152,7 +154,7 @@ impl MultiFormatReader {
|
|||||||
|| self.possible_formats.contains(&BarcodeFormat::RSS_EXPANDED);
|
|| self.possible_formats.contains(&BarcodeFormat::RSS_EXPANDED);
|
||||||
if one_d && !self.try_harder {
|
if one_d && !self.try_harder {
|
||||||
if let Ok(res) =
|
if let Ok(res) =
|
||||||
MultiFormatOneDReader::new(&self.hints).decode_with_hints(image, &self.hints)
|
self.one_d_reader.decode_with_hints(image, &self.hints)
|
||||||
{
|
{
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
@@ -182,7 +184,7 @@ impl MultiFormatReader {
|
|||||||
}
|
}
|
||||||
if one_d && self.try_harder {
|
if one_d && self.try_harder {
|
||||||
if let Ok(res) =
|
if let Ok(res) =
|
||||||
MultiFormatOneDReader::new(&self.hints).decode_with_hints(image, &self.hints)
|
self.one_d_reader.decode_with_hints(image, &self.hints)
|
||||||
{
|
{
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
@@ -190,7 +192,7 @@ impl MultiFormatReader {
|
|||||||
} else {
|
} else {
|
||||||
if !self.try_harder {
|
if !self.try_harder {
|
||||||
if let Ok(res) =
|
if let Ok(res) =
|
||||||
MultiFormatOneDReader::new(&self.hints).decode_with_hints(image, &self.hints)
|
self.one_d_reader.decode_with_hints(image, &self.hints)
|
||||||
{
|
{
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
@@ -214,7 +216,7 @@ impl MultiFormatReader {
|
|||||||
|
|
||||||
if self.try_harder {
|
if self.try_harder {
|
||||||
if let Ok(res) =
|
if let Ok(res) =
|
||||||
MultiFormatOneDReader::new(&self.hints).decode_with_hints(image, &self.hints)
|
self.one_d_reader.decode_with_hints(image, &self.hints)
|
||||||
{
|
{
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ pub struct MultiFormatOneDReader {
|
|||||||
internal_hints: DecodingHintDictionary,
|
internal_hints: DecodingHintDictionary,
|
||||||
possible_formats: HashSet<BarcodeFormat>,
|
possible_formats: HashSet<BarcodeFormat>,
|
||||||
use_code_39_check_digit: bool,
|
use_code_39_check_digit: bool,
|
||||||
|
rss_14_reader: RSS14Reader,
|
||||||
|
rss_expanded_reader: RSSExpandedReader
|
||||||
}
|
}
|
||||||
impl OneDReader for MultiFormatOneDReader {
|
impl OneDReader for MultiFormatOneDReader {
|
||||||
fn decode_row(
|
fn decode_row(
|
||||||
@@ -45,11 +47,12 @@ impl OneDReader for MultiFormatOneDReader {
|
|||||||
row: &crate::common::BitArray,
|
row: &crate::common::BitArray,
|
||||||
hints: &DecodingHintDictionary,
|
hints: &DecodingHintDictionary,
|
||||||
) -> Result<RXingResult> {
|
) -> Result<RXingResult> {
|
||||||
// reader.decode_row(rowNumber, row, hints)
|
|
||||||
let Self {
|
let Self {
|
||||||
possible_formats,
|
possible_formats,
|
||||||
use_code_39_check_digit,
|
use_code_39_check_digit,
|
||||||
internal_hints,
|
internal_hints,
|
||||||
|
rss_14_reader,
|
||||||
|
rss_expanded_reader,
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
if !possible_formats.is_empty() {
|
if !possible_formats.is_empty() {
|
||||||
@@ -92,12 +95,12 @@ impl OneDReader for MultiFormatOneDReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if possible_formats.contains(&BarcodeFormat::RSS_14) {
|
if possible_formats.contains(&BarcodeFormat::RSS_14) {
|
||||||
if let Ok(res) = RSS14Reader::default().decode_row(row_number, row, hints) {
|
if let Ok(res) = rss_14_reader.decode_row(row_number, row, hints) {
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if possible_formats.contains(&BarcodeFormat::RSS_EXPANDED) {
|
if possible_formats.contains(&BarcodeFormat::RSS_EXPANDED) {
|
||||||
if let Ok(res) = RSSExpandedReader::default().decode_row(row_number, row, hints) {
|
if let Ok(res) = rss_expanded_reader.decode_row(row_number, row, hints) {
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,10 +127,10 @@ impl OneDReader for MultiFormatOneDReader {
|
|||||||
if let Ok(res) = ITFReader::default().decode_row(row_number, row, hints) {
|
if let Ok(res) = ITFReader::default().decode_row(row_number, row, hints) {
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
if let Ok(res) = RSS14Reader::default().decode_row(row_number, row, hints) {
|
if let Ok(res) = rss_14_reader.decode_row(row_number, row, hints) {
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
if let Ok(res) = RSSExpandedReader::default().decode_row(row_number, row, hints) {
|
if let Ok(res) = rss_expanded_reader.decode_row(row_number, row, hints) {
|
||||||
return Ok(res);
|
return Ok(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -152,7 +155,9 @@ impl MultiFormatOneDReader {
|
|||||||
Self {
|
Self {
|
||||||
possible_formats,
|
possible_formats,
|
||||||
use_code_39_check_digit,
|
use_code_39_check_digit,
|
||||||
|
rss_14_reader: RSS14Reader::default(),
|
||||||
internal_hints: hints.clone(),
|
internal_hints: hints.clone(),
|
||||||
|
rss_expanded_reader: RSSExpandedReader::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user