Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fgas / include / fx_alg.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FX_ALGORITHM\r
8 #define _FX_ALGORITHM\r
9 #define FX_IsOdd(a)     ((a) & 1)\r
10 #ifdef __cplusplus\r
11 extern "C" {\r
12 #endif\r
13 int32_t FX_Base64EncodeA(FX_LPCBYTE pSrc, int32_t iSrcLen, FX_LPSTR pDst);\r
14 int32_t FX_Base64DecodeA(FX_LPCSTR pSrc, int32_t iSrcLen, FX_LPBYTE pDst);\r
15 int32_t FX_Base64DecodeW(FX_LPCWSTR pSrc, int32_t iSrcLen, FX_LPBYTE pDst);\r
16 uint8_t         FX_Hex2Dec(uint8_t hexHigh, uint8_t hexLow);\r
17 int32_t FX_SeparateStringW(FX_LPCWSTR pStr, int32_t iStrLen, FX_WCHAR delimiter, CFX_WideStringArray &pieces);\r
18 #ifdef __cplusplus\r
19 };\r
20 #endif\r
21 template<class baseType>\r
22 class CFX_DSPATemplate\r
23 {\r
24 public:\r
25     int32_t Lookup(const baseType &find, const baseType *pArray, int32_t iCount)\r
26     {\r
27         FXSYS_assert(pArray != NULL);\r
28         if (iCount < 1) {\r
29             return -1;\r
30         }\r
31         int32_t iStart = 0, iEnd = iCount - 1, iMid;\r
32         do {\r
33             iMid = (iStart + iEnd) / 2;\r
34             const baseType &v = pArray[iMid];\r
35             if (find == v) {\r
36                 return iMid;\r
37             } else if (find < v) {\r
38                 iEnd = iMid - 1;\r
39             } else {\r
40                 iStart = iMid + 1;\r
41             }\r
42         } while (iStart <= iEnd);\r
43         return -1;\r
44     }\r
45 };\r
46 #endif\r