1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FXCRT_EXTENSION_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FXCRT_EXTENSION_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_BASIC_H_
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_basic.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FXCRT_COORDINATES_
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_coordinates.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_XML_H_
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_xml.h"
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_UNICODE_
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_ucd.h"
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_ARABIC_
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_arb.h"
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __cplusplus
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" {
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT		FXSYS_tan(FX_FLOAT a);
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT		FXSYS_logb(FX_FLOAT b, FX_FLOAT x);
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT		FXSYS_strtof(FX_LPCSTR pcsStr, FX_INT32 iLength = -1, FX_INT32 *pUsedLen = NULL);
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT		FXSYS_wcstof(FX_LPCWSTR pwsStr, FX_INT32 iLength = -1, FX_INT32 *pUsedLen = NULL);
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_LPWSTR		FXSYS_wcsncpy(FX_LPWSTR dstStr, FX_LPCWSTR srcStr, size_t count);
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32		FXSYS_wcsnicmp(FX_LPCWSTR s1, FX_LPCWSTR s2, size_t count);
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32		FXSYS_strnicmp(FX_LPCSTR s1, FX_LPCSTR s2, size_t count);
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline FX_BOOL	FXSYS_islower(FX_INT32 ch)
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return ch >= 'a' && ch <= 'z';
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline FX_BOOL	FXSYS_isupper(FX_INT32 ch)
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return ch >= 'A' && ch <= 'Z';
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline FX_INT32	FXSYS_tolower(FX_INT32 ch)
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return ch < 'A' || ch > 'Z' ? ch : (ch + 0x20);
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline FX_INT32 FXSYS_toupper(FX_INT32 ch)
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return ch < 'a' || ch > 'z' ? ch : (ch - 0x20);
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_DWORD	FX_HashCode_String_GetA(FX_LPCSTR pStr, FX_INT32 iLength, FX_BOOL bIgnoreCase = FALSE);
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_DWORD	FX_HashCode_String_GetW(FX_LPCWSTR pStr, FX_INT32 iLength, FX_BOOL bIgnoreCase = FALSE);
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __cplusplus
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __cplusplus
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" {
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_LPVOID	FX_Random_MT_Start(FX_DWORD dwSeed);
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_DWORD	FX_Random_MT_Generate(FX_LPVOID pContext);
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid		FX_Random_MT_Close(FX_LPVOID pContext);
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid		FX_Random_GenerateBase(FX_LPDWORD pBuffer, FX_INT32 iCount);
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid		FX_Random_GenerateMT(FX_LPDWORD pBuffer, FX_INT32 iCount);
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid		FX_Random_GenerateCrypto(FX_LPDWORD pBuffer, FX_INT32 iCount);
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __cplusplus
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtemplate<class baseType>
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_SSortTemplate
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void ShellSort(baseType *pArray, FX_INT32 iCount)
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FXSYS_assert(pArray != NULL && iCount > 0);
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        FX_INT32 i, j, gap;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        baseType v1, v2;
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        gap = iCount >> 1;
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        while (gap > 0) {
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            for (i = gap; i < iCount; i ++) {
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                j = i - gap;
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                v1 = pArray[i];
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                while (j > -1 && (v2 = pArray[j]) > v1) {
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    pArray[j + gap] = v2;
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    j -= gap;
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                }
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                pArray[j + gap] = v1;
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            }
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            gap >>= 1;
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        }
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
104