// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_FXBARCODE_UTILS_H_
#define XFA_FXBARCODE_UTILS_H_

#include "core/fxcrt/fx_basic.h"

typedef CFX_MapPtrTemplate<void*, int32_t> CFX_PtrToInt32;
FX_BOOL BC_FX_ByteString_Replace(CFX_ByteString& dst,
                                 uint32_t first,
                                 uint32_t last,
                                 int32_t count,
                                 FX_CHAR c);
void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, FX_CHAR c);
void BC_FX_ByteString_Append(CFX_ByteString& dst, const CFX_ByteArray& ba);

#if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
#include <limits>
#elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_LINUX_DESKTOP_ || \
      _FX_OS_ == _FX_IOS_)
#include <limits.h>
#endif
#if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
#define FXSYS_isnan(x) _isnan(x)
#elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_ || \
      _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_)
#include <cmath>
#define FXSYS_isnan(x) std::isnan(x)
#endif
#if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
#define FXSYS_nan() (std::numeric_limits<float>::quiet_NaN())
#elif(_FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_LINUX_DESKTOP_ || \
      _FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_ANDROID_)
#define FXSYS_nan() NAN
#endif
enum BCFORMAT {
  BCFORMAT_UNSPECIFY = -1,
  BCFORMAT_CODABAR,
  BCFORMAT_CODE_39,
  BCFORMAT_CODE_128,
  BCFORMAT_CODE_128B,
  BCFORMAT_CODE_128C,
  BCFORMAT_EAN_8,
  BCFORMAT_UPC_A,
  BCFORMAT_EAN_13,
  BCFORMAT_PDF_417,
  BCFORMAT_DATAMATRIX,
  BCFORMAT_QR_CODE
};
#define BCFORMAT_ECLEVEL_L 0
#define BCFORMAT_ECLEVEL_M 1
#define BCFORMAT_ECLEVEL_Q 2
#define BCFORMAT_ECLEVEL_H 3
#include <ctype.h>
#define FXSYS_IntMax INT_MAX
#define FXSYS_Isdigit isdigit
#define BCExceptionNO 0
#define BCExceptionNotFound 1
#define BCExceptionEndLessThanStart 2
#define BCExceptionUnknownDecoder 3
#define BCExceptionRotateNotSupported 4
#define BCExceptionHeightAndWidthMustBeAtLeast1 5
#define BCExceptionRegionMustFitInsideMatrix 6
#define BCExceptionCanNotCallGetDimensionOnNonSquareMatrix 7
#define BCExceptionFormatException 8
#define BCExceptionIllegalArgumentMustMatchVersionSize 9
#define BCExceptionChecksumException 10
#define BCExceptionIllegalArgumentInvalidFirstDigit 11
#define BCExceptionIllegalArgumentInvalidSecondDigit 12
#define BCExceptionRuntimeDecodingInvalidISO_IEC 13
#define BCExceptionRuntimeDecodingInvalidAlphanumeric 14
#define BCExceptionLeftAndTopMustBeNonnegative 15
#define BCExceptionIllegalArgument 16
#define BCExceptionBadECI 17
#define BCExceptionUnSupportedBarcode 18
#define BCExceptionUnSupportedString 19
#define BCExceptionDigitLengthMustBe8 20
#define BCExceptionDataCheckException 21
#define BCExceptionExtractNumberValueFromBitArray 22
#define BCExceptionRead 23
#define BCExceptionRequestedRowIsOutSizeTheImage 24
#define BCExceptionNoContents 26
#define BCExceptionUnSupportEclevel 27
#define BCExceptionUnSupportMode 28
#define BCExceptionReferenceMustBeBetween0And7 29
#define BCExceptionBadErrorLocation 30
#define BCExceptionDegreeIsNegative 31
#define BCExceptionDivideByZero 32
#define BCExceptionCoefficientsSizeIsNull 33
#define BCExceptionNoCorrectionBytes 34
#define BCExceptionNoDataBytesProvided 35
#define BCExceptionR_I_1IsZero 36
#define BCExceptionAIsZero 37
#define BCExceptionIsZero 38
#define BCExceptionDegreeNotMatchRoots 39
#define BCExceptionContentsLengthShouldBetween1and80 40
#define BCExceptionOnlyEncodeCODE_128 41
#define BCExceptionOnlyEncodeCODE_39 42
#define BCExceptionOnlyEncodeEAN_13 43
#define BCExceptionOnlyEncodeEAN_8 44
#define BCExceptionOnlyEncodeITF 45
#define BCExceptionDigitLengthShould13 46
#define BCExceptionDigitLengthMustBe6or8or10or12or14or16or20or24or44 47
#define BCExceptionOnlyEncodeUPC_A 48
#define BCExceptionDigitLengthShouldBe12 49
#define BCExceptionValueMustBeEither0or1 50
#define BCExceptionReedsolomnDecodeException 51
#define BCExceptionBadIndexException 52
#define BCExceptionBadValueException 53
#define BCExceptionBadNumBitsException 54
#define BCExceptioncanNotOperatexorOperator 55
#define BCExceptionVersionMust1_40 56
#define BCExceptionUnknown 57
#define BCExceptionNoSuchVersion 58
#define BCExceptionCannotFindBlockInfo 59
#define BCExceptionDataTooBig 60
#define BCExceptionInvalidQRCode 61
#define BCExceptionDataTooMany 62
#define BCExceptionBitsNotEqualCacity 63
#define BCExceptionUnsupportedMode 64
#define BCExceptionInvalidateCharacter 65
#define BCExceptionBytesNotMatchOffset 66
#define BCExceptionSizeInBytesDiffer 67
#define BCExceptionInvalidateMaskPattern 68
#define BCExceptionNullPointer 69
#define BCExceptionBadMask 70
#define BCExceptionBitSizeNot15 71
#define BCExceptionBitSizeNot18 72
#define BCExceptionInvalidateImageData 73
#define BCExceptionHeight_8BeZero 74
#define BCExceptionCharacterNotThisMode 75
#define BCExceptionBitsBytesNotMatch 76
#define BCExceptionInvalidateData 77
#define BCExceptionLoadFile 78
#define BCExceptionPDF417EncodeFail 79
#define BCExceptionFailToCreateBitmap 80
#define BCExceptionLoadFontFail 81
#define BCExceptionOnlyEncodeCODEBAR 82
#define BCExceptionCodabarShouldStartWithOneOfABCD 83
#define BCExceptionCodabarShouldEndWithOneOfTNE 84
#define BCExceptionCodabarEncodeCharsInvalid 85
#define BCExceptionOnlyEncodeDATAMATRIX 86
#define BCExceptionCharactersOutsideISO88591Encoding 87
#define BCExceptionIllegalDataCodewords 88
#define BCExceptionCannotHandleThisNumberOfDataRegions 89
#define BCExceptionIllegalStateUnexpectedCase 90
#define BCExceptionIllegalStateCountMustNotExceed4 91
#define BCExceptionIllegalStateMessageLengthInvalid 92
#define BCExceptionIllegalArgumentNotGigits 93
#define BCExceptionIllegalStateIllegalMode 94
#define BCExceptionOnlyEncodePDF417 95
#define BCExceptionNonEncodableCharacterDetected 96
#define BCExceptionErrorCorrectionLevelMustBeBetween0And8 97
#define BCExceptionNoRecommendationPossible 98
#define BCExceptionIllegalArgumentnMustBeAbove0 99
#define BCExceptionUnableToFitMessageInColumns 100
#define BCExceptionEncodedMessageContainsTooManyCodeWords 101
#define BCExceptionBitmapSizeError 102
#define BCExceptionFormatInstance 102
#define BCExceptionChecksumInstance 103
#define BCExceptiontNotFoundInstance 104
#define BCExceptionNotFoundInstance 105
#define BCExceptionCannotMetadata 106
#define TWO_DIGIT_DATA_LENGTH_SIZE 24
#define THREE_DIGIT_DATA_LENGTH_SIZE 23
#define THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH_SIZE 57
#define FOUR_DIGIT_DATA_LENGTH_SIZE 17
#define BC_EXCEPTION_CHECK_ReturnVoid(e) \
  if (e != BCExceptionNO)                \
    return;
#define BC_EXCEPTION_CHECK_ReturnValue(e, v) \
  if (e != BCExceptionNO)                    \
    return v;

#endif  // XFA_FXBARCODE_UTILS_H_
