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