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