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) {} CBC_AutoPtr(const CBC_AutoPtr<_Ty> & _Y)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 } ~CBC_AutoPtr()40 ~CBC_AutoPtr() { 41 if (_Owns) { 42 delete _Ptr; 43 } 44 } 45 _Ty& operator*() const { return (*get()); } 46 _Ty* operator->() const { return (get()); } get()47 _Ty* get() const { return (_Ptr); } release()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