Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[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 FX_INT32        FX_Base64EncodeA(FX_LPCBYTE pSrc, FX_INT32 iSrcLen, FX_LPSTR pDst);\r
14 FX_INT32        FX_Base64DecodeA(FX_LPCSTR pSrc, FX_INT32 iSrcLen, FX_LPBYTE pDst);\r
15 FX_INT32        FX_Base64DecodeW(FX_LPCWSTR pSrc, FX_INT32 iSrcLen, FX_LPBYTE pDst);\r
16 FX_BYTE         FX_Hex2Dec(FX_BYTE hexHigh, FX_BYTE hexLow);\r
17 FX_INT32        FX_SeparateStringW(FX_LPCWSTR pStr, FX_INT32 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     FX_INT32 Lookup(const baseType &find, const baseType *pArray, FX_INT32 iCount)\r
26     {\r
27         FXSYS_assert(pArray != NULL);\r
28         if (iCount < 1) {\r
29             return -1;\r
30         }\r
31         FX_INT32 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