Issue 505
[zxing.git] / cpp / core / src / zxing / DecodeHints.cpp
1 /*
2  *  DecodeHintType.cpp
3  *  zxing
4  *
5  *  Copyright 2010 ZXing authors All rights reserved.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 #include <zxing/DecodeHints.h>
21 #include <zxing/common/IllegalArgumentException.h>
22 namespace zxing {
23
24 const DecodeHints DecodeHints::PRODUCT_HINT(
25     BARCODEFORMAT_UPC_E_HINT |
26     BARCODEFORMAT_UPC_A_HINT |
27     BARCODEFORMAT_EAN_8_HINT |
28     BARCODEFORMAT_EAN_13_HINT);
29
30 const DecodeHints DecodeHints::ONED_HINT(
31     BARCODEFORMAT_UPC_E_HINT |
32     BARCODEFORMAT_UPC_A_HINT |
33     BARCODEFORMAT_EAN_8_HINT |
34     BARCODEFORMAT_EAN_13_HINT |
35     BARCODEFORMAT_CODE_128_HINT |
36     BARCODEFORMAT_CODE_39_HINT |
37     BARCODEFORMAT_ITF_HINT);
38
39 const DecodeHints DecodeHints::DEFAULT_HINT(
40     BARCODEFORMAT_UPC_E_HINT |
41     BARCODEFORMAT_UPC_A_HINT |
42     BARCODEFORMAT_EAN_8_HINT |
43     BARCODEFORMAT_EAN_13_HINT |
44     BARCODEFORMAT_CODE_128_HINT |
45     BARCODEFORMAT_CODE_39_HINT |
46     BARCODEFORMAT_ITF_HINT |
47     // TODO: uncomment once this passes QA
48     // BARCODEFORMAT_DATA_MATRIX_HINT |
49     BARCODEFORMAT_QR_CODE_HINT);
50
51 DecodeHints::DecodeHints() {
52   hints = 0;
53 }
54
55 DecodeHints::DecodeHints(DecodeHintType init) {
56   hints = init;
57 }
58
59 void DecodeHints::addFormat(BarcodeFormat toadd) {
60   switch (toadd) {
61     case BarcodeFormat_QR_CODE: hints |= BARCODEFORMAT_QR_CODE_HINT; break;
62     case BarcodeFormat_DATA_MATRIX: hints |= BARCODEFORMAT_DATA_MATRIX_HINT; break;
63     case BarcodeFormat_UPC_E: hints |= BARCODEFORMAT_UPC_E_HINT; break;
64     case BarcodeFormat_UPC_A: hints |= BARCODEFORMAT_UPC_A_HINT; break;
65     case BarcodeFormat_EAN_8: hints |= BARCODEFORMAT_EAN_8_HINT; break;
66     case BarcodeFormat_EAN_13: hints |= BARCODEFORMAT_EAN_13_HINT; break;
67     case BarcodeFormat_CODE_128: hints |= BARCODEFORMAT_CODE_128_HINT; break;
68     case BarcodeFormat_CODE_39: hints |= BARCODEFORMAT_CODE_39_HINT; break;
69     case BarcodeFormat_ITF: hints |= BARCODEFORMAT_ITF_HINT; break;
70     default: throw IllegalArgumentException("Unrecognizd barcode format");
71   }
72 }
73
74 bool DecodeHints::containsFormat(BarcodeFormat tocheck) const {
75   DecodeHintType checkAgainst;
76   switch (tocheck) {
77     case BarcodeFormat_QR_CODE: checkAgainst = BARCODEFORMAT_QR_CODE_HINT; break;
78     case BarcodeFormat_DATA_MATRIX: checkAgainst = BARCODEFORMAT_DATA_MATRIX_HINT; break;
79     case BarcodeFormat_UPC_E: checkAgainst = BARCODEFORMAT_UPC_E_HINT; break;
80     case BarcodeFormat_UPC_A: checkAgainst = BARCODEFORMAT_UPC_A_HINT; break;
81     case BarcodeFormat_EAN_8: checkAgainst = BARCODEFORMAT_EAN_8_HINT; break;
82     case BarcodeFormat_EAN_13: checkAgainst = BARCODEFORMAT_EAN_13_HINT; break;
83     case BarcodeFormat_CODE_128: checkAgainst = BARCODEFORMAT_CODE_128_HINT; break;
84     case BarcodeFormat_CODE_39: checkAgainst = BARCODEFORMAT_CODE_39_HINT; break;
85     case BarcodeFormat_ITF: checkAgainst = BARCODEFORMAT_ITF_HINT; break;
86     default: throw IllegalArgumentException("Unrecognizd barcode format");
87   }
88   return (hints & checkAgainst);
89 }
90
91 void DecodeHints::setTryHarder(bool toset) {
92   if (toset) {
93     hints |= TRYHARDER_HINT;
94   } else {
95     hints &= ~TRYHARDER_HINT;
96   }
97 }
98
99 bool DecodeHints::getTryHarder() const {
100   return (hints & TRYHARDER_HINT);
101 }
102
103 void DecodeHints::setResultPointCallback(Ref<ResultPointCallback> const& _callback) {
104     callback = _callback;
105 }
106
107 Ref<ResultPointCallback> DecodeHints::getResultPointCallback() const {
108     return callback;
109 }
110
111 } /* namespace */