Initial commit.
[pdfium.git] / core / include / fxcrt / fx_ext.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 _FXCRT_EXTENSION_\r
8 #define _FXCRT_EXTENSION_\r
9 #ifndef _FX_BASIC_H_\r
10 #include "fx_basic.h"\r
11 #endif\r
12 #ifndef _FXCRT_COORDINATES_\r
13 #include "fx_coordinates.h"\r
14 #endif\r
15 #ifndef _FX_XML_H_\r
16 #include "fx_xml.h"\r
17 #endif\r
18 #ifndef _FX_UNICODE_\r
19 #include "fx_ucd.h"\r
20 #endif\r
21 #ifndef _FX_ARABIC_\r
22 #include "fx_arb.h"\r
23 #endif\r
24 #ifdef __cplusplus\r
25 extern "C" {\r
26 #endif\r
27 \r
28 \r
29 FX_FLOAT                FXSYS_tan(FX_FLOAT a);\r
30 FX_FLOAT                FXSYS_logb(FX_FLOAT b, FX_FLOAT x);\r
31 FX_FLOAT                FXSYS_strtof(FX_LPCSTR pcsStr, FX_INT32 iLength = -1, FX_INT32 *pUsedLen = NULL);\r
32 FX_FLOAT                FXSYS_wcstof(FX_LPCWSTR pwsStr, FX_INT32 iLength = -1, FX_INT32 *pUsedLen = NULL);\r
33 FX_LPWSTR               FXSYS_wcsncpy(FX_LPWSTR dstStr, FX_LPCWSTR srcStr, size_t count);\r
34 FX_INT32                FXSYS_wcsnicmp(FX_LPCWSTR s1, FX_LPCWSTR s2, size_t count);\r
35 FX_INT32                FXSYS_strnicmp(FX_LPCSTR s1, FX_LPCSTR s2, size_t count);\r
36 inline FX_BOOL  FXSYS_islower(FX_INT32 ch)\r
37 {\r
38     return ch >= 'a' && ch <= 'z';\r
39 }\r
40 inline FX_BOOL  FXSYS_isupper(FX_INT32 ch)\r
41 {\r
42     return ch >= 'A' && ch <= 'Z';\r
43 }\r
44 inline FX_INT32 FXSYS_tolower(FX_INT32 ch)\r
45 {\r
46     return ch < 'A' || ch > 'Z' ? ch : (ch + 0x20);\r
47 }\r
48 inline FX_INT32 FXSYS_toupper(FX_INT32 ch)\r
49 {\r
50     return ch < 'a' || ch > 'z' ? ch : (ch - 0x20);\r
51 }\r
52 \r
53 \r
54 \r
55 FX_DWORD        FX_HashCode_String_GetA(FX_LPCSTR pStr, FX_INT32 iLength, FX_BOOL bIgnoreCase = FALSE);\r
56 FX_DWORD        FX_HashCode_String_GetW(FX_LPCWSTR pStr, FX_INT32 iLength, FX_BOOL bIgnoreCase = FALSE);\r
57 \r
58 #ifdef __cplusplus\r
59 }\r
60 #endif\r
61 #ifdef __cplusplus\r
62 extern "C" {\r
63 #endif\r
64 \r
65 FX_LPVOID       FX_Random_MT_Start(FX_DWORD dwSeed);\r
66 \r
67 FX_DWORD        FX_Random_MT_Generate(FX_LPVOID pContext);\r
68 \r
69 void            FX_Random_MT_Close(FX_LPVOID pContext);\r
70 \r
71 void            FX_Random_GenerateBase(FX_LPDWORD pBuffer, FX_INT32 iCount);\r
72 \r
73 void            FX_Random_GenerateMT(FX_LPDWORD pBuffer, FX_INT32 iCount);\r
74 \r
75 void            FX_Random_GenerateCrypto(FX_LPDWORD pBuffer, FX_INT32 iCount);\r
76 #ifdef __cplusplus\r
77 }\r
78 #endif\r
79 template<class baseType>\r
80 class CFX_SSortTemplate\r
81 {\r
82 public:\r
83     void ShellSort(baseType *pArray, FX_INT32 iCount)\r
84     {\r
85         FXSYS_assert(pArray != NULL && iCount > 0);\r
86         FX_INT32 i, j, gap;\r
87         baseType v1, v2;\r
88         gap = iCount >> 1;\r
89         while (gap > 0) {\r
90             for (i = gap; i < iCount; i ++) {\r
91                 j = i - gap;\r
92                 v1 = pArray[i];\r
93                 while (j > -1 && (v2 = pArray[j]) > v1) {\r
94                     pArray[j + gap] = v2;\r
95                     j -= gap;\r
96                 }\r
97                 pArray[j + gap] = v1;\r
98             }\r
99             gap >>= 1;\r
100         }\r
101     }\r
102 };\r
103 #endif\r