Home | History | Annotate | Download | only in fxbarcode
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      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 _BC_UTILS_H_
      8 #define _BC_UTILS_H_
      9 typedef CFX_MapPtrTemplate<void*, int32_t> CFX_PtrToInt32;
     10 FX_BOOL BC_FX_ByteString_Replace(CFX_ByteString& dst,
     11                                  FX_DWORD first,
     12                                  FX_DWORD last,
     13                                  int32_t count,
     14                                  FX_CHAR c);
     15 void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, FX_CHAR c);
     16 void BC_FX_ByteString_Append(CFX_ByteString& dst, const CFX_ByteArray& ba);
     17 typedef FX_BOOL (*BC_PtrArrayCompareCallback)(void* l, void* r);
     18 void BC_FX_PtrArray_Sort(CFX_PtrArray& src, BC_PtrArrayCompareCallback fun);
     19 template <class _Ty>
     20 class CBC_AutoPtr {
     21  public:
     22   typedef _Ty element_type;
     23   explicit CBC_AutoPtr(_Ty* _P = 0) : _Owns(_P != 0), _Ptr(_P) {}
     24   CBC_AutoPtr(const CBC_AutoPtr<_Ty>& _Y)
     25       : _Owns(_Y._Owns), _Ptr(_Y.release()) {}
     26   CBC_AutoPtr<_Ty>& operator=(const CBC_AutoPtr<_Ty>& _Y) {
     27     if (this != &_Y) {
     28       if (_Ptr != _Y.get()) {
     29         if (_Owns) {
     30           delete _Ptr;
     31         }
     32         _Owns = _Y._Owns;
     33       } else if (_Y._Owns) {
     34         _Owns = TRUE;
     35       }
     36       _Ptr = _Y.release();
     37     }
     38     return (*this);
     39   }
     40   ~CBC_AutoPtr() {
     41     if (_Owns) {
     42       delete _Ptr;
     43     }
     44   }
     45   _Ty& operator*() const { return (*get()); }
     46   _Ty* operator->() const { return (get()); }
     47   _Ty* get() const { return (_Ptr); }
     48   _Ty* release() const {
     49     ((CBC_AutoPtr<_Ty>*)this)->_Owns = FALSE;
     50     return (_Ptr);
     51   }
     52 
     53  private:
     54   FX_BOOL _Owns;
     55   _Ty* _Ptr;
     56 };
     57 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
     58 #include <limits>
     59 #elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_LINUX_DESKTOP_ || \
     60       _FX_OS_ == _FX_IOS_)
     61 #include <limits.h>
     62 #endif
     63 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
     64 #define FXSYS_isnan(x) _isnan(x)
     65 #elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_)
     66 #include <cmath>
     67 #define FXSYS_isnan(x) std::isnan(x)
     68 #elif(_FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_)
     69 #include <math.h>
     70 #define FXSYS_isnan(x) isnan(x)
     71 #endif
     72 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
     73 #define FXSYS_nan() (std::numeric_limits<float>::quiet_NaN())
     74 #elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_LINUX_DESKTOP_ || \
     75       _FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_ANDROID_)
     76 #define FXSYS_nan() NAN
     77 #endif
     78 enum BCFORMAT {
     79   BCFORMAT_UNSPECIFY = -1,
     80   BCFORMAT_CODABAR,
     81   BCFORMAT_CODE_39,
     82   BCFORMAT_CODE_128,
     83   BCFORMAT_CODE_128B,
     84   BCFORMAT_CODE_128C,
     85   BCFORMAT_EAN_8,
     86   BCFORMAT_UPC_A,
     87   BCFORMAT_EAN_13,
     88   BCFORMAT_PDF_417,
     89   BCFORMAT_DATAMATRIX,
     90   BCFORMAT_QR_CODE
     91 };
     92 #define BCFORMAT_ECLEVEL_L 0
     93 #define BCFORMAT_ECLEVEL_M 1
     94 #define BCFORMAT_ECLEVEL_Q 2
     95 #define BCFORMAT_ECLEVEL_H 3
     96 #include <ctype.h>
     97 #define FXSYS_IntMax INT_MAX
     98 #define FXSYS_Isdigit isdigit
     99 #define BCExceptionNO 0
    100 #define BCExceptionNotFound 1
    101 #define BCExceptionEndLessThanStart 2
    102 #define BCExceptionUnknownDecoder 3
    103 #define BCExceptionRotateNotSupported 4
    104 #define BCExceptionHeightAndWidthMustBeAtLeast1 5
    105 #define BCExceptionRegionMustFitInsideMatrix 6
    106 #define BCExceptionCanNotCallGetDimensionOnNonSquareMatrix 7
    107 #define BCExceptionFormatException 8
    108 #define BCExceptionIllegalArgumentMustMatchVersionSize 9
    109 #define BCExceptionChecksumException 10
    110 #define BCExceptionIllegalArgumentInvalidFirstDigit 11
    111 #define BCExceptionIllegalArgumentInvalidSecondDigit 12
    112 #define BCExceptionRuntimeDecodingInvalidISO_IEC 13
    113 #define BCExceptionRuntimeDecodingInvalidAlphanumeric 14
    114 #define BCExceptionLeftAndTopMustBeNonnegative 15
    115 #define BCExceptionIllegalArgument 16
    116 #define BCExceptionBadECI 17
    117 #define BCExceptionUnSupportedBarcode 18
    118 #define BCExceptionUnSupportedString 19
    119 #define BCExceptionDigitLengthMustBe8 20
    120 #define BCExceptionDataCheckException 21
    121 #define BCExceptionExtractNumberValueFromBitArray 22
    122 #define BCExceptionRead 23
    123 #define BCExceptionRequestedRowIsOutSizeTheImage 24
    124 #define BCExceptionNoContents 26
    125 #define BCExceptionUnSupportEclevel 27
    126 #define BCExceptionUnSupportMode 28
    127 #define BCExceptionReferenceMustBeBetween0And7 29
    128 #define BCExceptionBadErrorLocation 30
    129 #define BCExceptionDegreeIsNegative 31
    130 #define BCExceptionDivideByZero 32
    131 #define BCExceptionCoefficientsSizeIsNull 33
    132 #define BCExceptionNoCorrectionBytes 34
    133 #define BCExceptionNoDataBytesProvided 35
    134 #define BCExceptionR_I_1IsZero 36
    135 #define BCExceptionAIsZero 37
    136 #define BCExceptionIsZero 38
    137 #define BCExceptionDegreeNotMatchRoots 39
    138 #define BCExceptionContentsLengthShouldBetween1and80 40
    139 #define BCExceptionOnlyEncodeCODE_128 41
    140 #define BCExceptionOnlyEncodeCODE_39 42
    141 #define BCExceptionOnlyEncodeEAN_13 43
    142 #define BCExceptionOnlyEncodeEAN_8 44
    143 #define BCExceptionOnlyEncodeITF 45
    144 #define BCExceptionDigitLengthShould13 46
    145 #define BCExceptionDigitLengthMustBe6or8or10or12or14or16or20or24or44 47
    146 #define BCExceptionOnlyEncodeUPC_A 48
    147 #define BCExceptionDigitLengthShouldBe12 49
    148 #define BCExceptionValueMustBeEither0or1 50
    149 #define BCExceptionReedsolomnDecodeException 51
    150 #define BCExceptionBadIndexException 52
    151 #define BCExceptionBadValueException 53
    152 #define BCExceptionBadNumBitsException 54
    153 #define BCExceptioncanNotOperatexorOperator 55
    154 #define BCExceptionVersionMust1_40 56
    155 #define BCExceptionUnknown 57
    156 #define BCExceptionNoSuchVersion 58
    157 #define BCExceptionCannotFindBlockInfo 59
    158 #define BCExceptionDataTooBig 60
    159 #define BCExceptionInvalidQRCode 61
    160 #define BCExceptionDataTooMany 62
    161 #define BCExceptionBitsNotEqualCacity 63
    162 #define BCExceptionUnsupportedMode 64
    163 #define BCExceptionInvalidateCharacter 65
    164 #define BCExceptionBytesNotMatchOffset 66
    165 #define BCExceptionSizeInBytesDiffer 67
    166 #define BCExceptionInvalidateMaskPattern 68
    167 #define BCExceptionNullPointer 69
    168 #define BCExceptionBadMask 70
    169 #define BCExceptionBitSizeNot15 71
    170 #define BCExceptionBitSizeNot18 72
    171 #define BCExceptionInvalidateImageData 73
    172 #define BCExceptionHeight_8BeZero 74
    173 #define BCExceptionCharacterNotThisMode 75
    174 #define BCExceptionBitsBytesNotMatch 76
    175 #define BCExceptionInvalidateData 77
    176 #define BCExceptionLoadFile 78
    177 #define BCExceptionPDF417EncodeFail 79
    178 #define BCExceptionFailToCreateBitmap 80
    179 #define BCExceptionLoadFontFail 81
    180 #define BCExceptionOnlyEncodeCODEBAR 82
    181 #define BCExceptionCodabarShouldStartWithOneOfABCD 83
    182 #define BCExceptionCodabarShouldEndWithOneOfTNE 84
    183 #define BCExceptionCodabarEncodeCharsInvalid 85
    184 #define BCExceptionOnlyEncodeDATAMATRIX 86
    185 #define BCExceptionCharactersOutsideISO88591Encoding 87
    186 #define BCExceptionIllegalDataCodewords 88
    187 #define BCExceptionCannotHandleThisNumberOfDataRegions 89
    188 #define BCExceptionIllegalStateUnexpectedCase 90
    189 #define BCExceptionIllegalStateCountMustNotExceed4 91
    190 #define BCExceptionIllegalStateMessageLengthInvalid 92
    191 #define BCExceptionIllegalArgumentNotGigits 93
    192 #define BCExceptionIllegalStateIllegalMode 94
    193 #define BCExceptionOnlyEncodePDF417 95
    194 #define BCExceptionNonEncodableCharacterDetected 96
    195 #define BCExceptionErrorCorrectionLevelMustBeBetween0And8 97
    196 #define BCExceptionNoRecommendationPossible 98
    197 #define BCExceptionIllegalArgumentnMustBeAbove0 99
    198 #define BCExceptionUnableToFitMessageInColumns 100
    199 #define BCExceptionEncodedMessageContainsTooManyCodeWords 101
    200 #define BCExceptionBitmapSizeError 102
    201 #define BCExceptionFormatInstance 102
    202 #define BCExceptionChecksumInstance 103
    203 #define BCExceptiontNotFoundInstance 104
    204 #define BCExceptionNotFoundInstance 105
    205 #define BCExceptionCannotMetadata 106
    206 #define TWO_DIGIT_DATA_LENGTH_SIZE 24
    207 #define THREE_DIGIT_DATA_LENGTH_SIZE 23
    208 #define THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH_SIZE 57
    209 #define FOUR_DIGIT_DATA_LENGTH_SIZE 17
    210 #define BC_EXCEPTION_CHECK_ReturnVoid(e) \
    211   if (e != BCExceptionNO)                \
    212     return;
    213 #define BC_EXCEPTION_CHECK_ReturnValue(e, v) \
    214   if (e != BCExceptionNO)                    \
    215     return v;
    216 #endif
    217