xflaim.h   xflaim.h 
skipping to change at line 351 skipping to change at line 351
#define XFLM_DONT_REDO_LOG 0x0040 #define XFLM_DONT_REDO_LOG 0x0040
#define XFLM_DONT_RESUME_THREADS 0x0080 #define XFLM_DONT_RESUME_THREADS 0x0080
#define XFLM_DO_LOGICAL_CHECK 0x0100 #define XFLM_DO_LOGICAL_CHECK 0x0100
#define XFLM_SKIP_DOM_LINK_CHECK 0x0200 // Used only in dbCheck. #define XFLM_SKIP_DOM_LINK_CHECK 0x0200 // Used only in dbCheck.
#define XFLM_ALLOW_LIMITED_MODE 0x0400 #define XFLM_ALLOW_LIMITED_MODE 0x0400
// Maximum key size // Maximum key size
#define XFLM_MAX_KEY_SIZE 1024 #define XFLM_MAX_KEY_SIZE 1024
// "Wait forever" when starting a transaction
#define FLM_NO_TIMEOUT 0xFF
// Node types. The order of these enums // Node types. The order of these enums
// must be preserved as the code sometimes // must be preserved as the code sometimes
// depends on the order to test ranges of // depends on the order to test ranges of
// node types. // node types.
typedef enum typedef enum
{ {
INVALID_NODE = 0x00, INVALID_NODE = 0x00,
DOCUMENT_NODE = 0x01 , DOCUMENT_NODE = 0x01 ,
ELEMENT_NODE = 0x02, ELEMENT_NODE = 0x02,
 End of changes. 1 change blocks. 
0 lines changed or deleted 4 lines changed or added


 xflaimtk.h   xflaimtk.h 
//------------------------------------------------------------------------- ----- //------------------------------------------------------------------------- -----
// Desc: Placeholder for FLAIM's cross-platform toolkit public defini // Desc: FLAIM's cross-platform toolkit public definitions and interf
tions aces
// and interfaces
// //
// Tabs: 3 // Tabs: 3
// //
// Copyright (c) 2006 Novell, Inc. All Rights Reserved. // Copyright (c) 2003-2006 Novell, Inc. All Rights Reserved.
// //
// This program is free software; you can redistribute it and/o r // This program is free software; you can redistribute it and/o r
// modify it under the terms of version 2 of the GNU General Pu blic // modify it under the terms of version 2 of the GNU General Pu blic
// License as published by the Free Software Foundation. // License as published by the Free Software Foundation.
// //
// This program is distributed in the hope that it will be usef ul, // This program is distributed in the hope that it will be usef ul,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details. // GNU General Public License for more details.
// //
// You should have received a copy of the GNU General Public Li cense // You should have received a copy of the GNU General Public Li cense
// along with this program; if not, contact Novell, Inc. // along with this program; if not, contact Novell, Inc.
// //
// To contact Novell about this file by physical or electronic mail, // To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com // you may find current contact information at www.novell.com
// //
// $Id$ // $Id$
//------------------------------------------------------------------------- ----- //------------------------------------------------------------------------- -----
#include "ftk.h" /// \file
#ifndef FTK_H
#define FTK_H
/// \defgroup retcodes Return Codes
#ifndef FLM_PLATFORM_CONFIGURED
#define FLM_PLATFORM_CONFIGURED
// Determine the build platform
#undef FLM_WIN
#undef FLM_NLM
#undef FLM_UNIX
#undef FLM_AIX
#undef FLM_LINUX
#undef FLM_SOLARIS
#undef FLM_HPUX
#undef FLM_OSX
#undef FLM_S390
#undef FLM_IA64
#undef FLM_PPC
#undef FLM_SPARC
#undef FLM_SPARC_PLUS
#undef FLM_X86
#undef FLM_BIG_ENDIAN
#undef FLM_STRICT_ALIGNMENT
#undef FLM_GNUC
#undef FLM_HAS_ASYNC_IO
#undef FLM_HAS_DIRECT_IO
#if defined( __GNUC__)
#define FLM_GNUC
#if defined( __arch64__)
#if !defined( FLM_64BIT)
#define FLM_64BIT
#endif
#endif
#endif
#if defined( __NETWARE__) || defined( NLM) || defined( N_PLA
T_NLM)
#if defined( __WATCOMC__) && defined( __386__)
#define FLM_X86
#else
#error Platform architecture not supported
#endif
#define FLM_NLM
#if !defined( FLM_RING_ZERO_NLM) && !defined( FLM_LI
BC_NLM)
#define FLM_RING_ZERO_NLM
#endif
#define FLM_OSTYPE_STR "NetWare"
#if defined( __WATCOMC__)
#define FLM_WATCOM_NLM
#elif defined( __MWERKS__)
#define FLM_MWERKS_NLM
#endif
#if defined( FLM_RING_ZERO_NLM)
#define FLM_HAS_ASYNC_IO
#define FLM_HAS_DIRECT_IO
#endif
#elif defined( _WIN64)
#if defined( _M_IX6) || defined( _M_X64)
#define FLM_X86
#endif
#define FLM_WIN
#define FLM_OSTYPE_STR "Windows"
#ifndef FLM_64BIT
#define FLM_64BIT
#endif
#define FLM_STRICT_ALIGNMENT
#define FLM_HAS_ASYNC_IO
#define FLM_HAS_DIRECT_IO
#elif defined( _WIN32)
#if defined( _M_IX86) || defined( _M_X64)
#define FLM_X86
#else
#error Platform architecture not supported
#endif
#define FLM_WIN
#define FLM_OSTYPE_STR "Windows"
#define FLM_HAS_ASYNC_IO
#define FLM_HAS_DIRECT_IO
#elif defined( _AIX)
#define FLM_AIX
#define FLM_OSTYPE_STR "AIX"
#define FLM_UNIX
#define FLM_BIG_ENDIAN
#define FLM_STRICT_ALIGNMENT
#elif defined( linux)
#define FLM_LINUX
#define FLM_OSTYPE_STR "Linux"
#define FLM_UNIX
#if defined( __PPC__) || defined( __ppc__)
#define FLM_PPC
#define FLM_BIG_ENDIAN
#define FLM_STRICT_ALIGNMENT
#elif defined( __s390__)
#define FLM_S390
#define FLM_BIG_ENDIAN
#define FLM_STRICT_ALIGNMENT
#elif defined( __s390x__)
#define FLM_S390
#ifndef FLM_64BIT
#define FLM_64BIT
#endif
#define FLM_BIG_ENDIAN
#define FLM_STRICT_ALIGNMENT
#elif defined( __ia64__)
#define FLM_IA64
#ifndef FLM_64BIT
#define FLM_64BIT
#endif
#define FLM_STRICT_ALIGNMENT
#elif defined( sparc) || defined( __sparc) || define
d( __sparc__)
#define FLM_SPARC
#define FLM_BIG_ENDIAN
#define FLM_STRICT_ALIGNMENT
#if !defined ( FLM_SPARC_GENERIC)
#if defined( __sparcv8plus) || defin
ed( __sparcv9) || defined( __sparcv9__) || \
defined( __sparc_v8__) || d
efined( __sparc_v9__) || defined( __arch64__)
#define FLM_SPARC_PLUS
#endif
#endif
#elif defined( __x86__) || defined( __i386__) || def
ined( __x86_64__)
#define FLM_X86
#else
#error Platform architecture not supported
#endif
#define FLM_HAS_ASYNC_IO
#define FLM_HAS_DIRECT_IO
#elif defined( sun)
#define FLM_SOLARIS
#define FLM_OSTYPE_STR "Solaris"
#define FLM_UNIX
#define FLM_STRICT_ALIGNMENT
#if defined( sparc) || defined( __sparc) || defined(
__sparc__)
#define FLM_SPARC
#define FLM_BIG_ENDIAN
#if !defined ( FLM_SPARC_GENERIC)
#if defined( __sparcv8plus) || defin
ed( __sparcv9)
#define FLM_SPARC_PLUS
#endif
#endif
#elif defined( i386) || defined( _i386)
#define FLM_X86
#else
#error Platform architecture not supported
#endif
#define FLM_HAS_ASYNC_IO
#define FLM_HAS_DIRECT_IO
#elif defined( __hpux) || defined( hpux)
#define FLM_HPUX
#define FLM_OSTYPE_STR "HPUX"
#define FLM_UNIX
#define FLM_BIG_ENDIAN
#define FLM_STRICT_ALIGNMENT
#define FLM_HAS_ASYNC_IO
#define FLM_HAS_DIRECT_IO
#elif defined( __APPLE__)
#define FLM_OSX
#define FLM_OSTYPE_STR "OSX"
#define FLM_UNIX
#if (defined( __ppc__) || defined( __ppc64__))
#define FLM_PPC
#define FLM_BIG_ENDIAN
#define FLM_STRICT_ALIGNMENT
#elif defined( __x86__) || defined( __x86_64__)
#define FLM_X86
#else
#error Platform architecture not supported
#endif
#define FLM_HAS_ASYNC_IO
#define FLM_HAS_DIRECT_IO
#else
#error Platform architecture is undefined.
#endif
#if !defined( FLM_64BIT) && !defined( FLM_32BIT)
#if defined( FLM_UNIX)
#if defined( __x86_64__) || defined( _M_X64)
|| \
defined( _LP64) || defined( __LP64_
_) || \
defined ( __64BIT__) || defined( __
arch64__) || \
defined( __sparcv9) || defined( __s
parcv9__)
#define FLM_64BIT
#endif
#endif
#endif
#if !defined( FLM_64BIT)
#define FLM_32BIT
#elif defined( FLM_32BIT)
#error Cannot define both FLM_32BIT and FLM_64BIT
#endif
#if defined( __x86_64__) || defined( _M_X64) || \
defined( _LP64) || defined( __LP64__) || \
defined ( __64BIT__) || defined( __arch64__) || \
defined( __sparcv9) || defined( __sparcv9__)
#if !defined( FLM_64BIT)
#error Platform word size is incorrect
#endif
#else
#if !defined( FLM_32BIT)
#error Platform word size is incorrect
#endif
#endif
#ifdef FLM_NLM
#define FSTATIC
#else
#define FSTATIC static
#endif
// Debug or release build?
#ifndef FLM_DEBUG
#if defined( DEBUG) || (defined( PRECHECKIN) && PREC
HECKIN != 0)
#define FLM_DEBUG
#endif
#endif
// Alignment
#if defined( FLM_UNIX) || defined( FLM_64BIT)
#define FLM_ALLOC_ALIGN
0x0007
#define FLM_ALIGN_SIZE
8
#elif defined( FLM_WIN) || defined( FLM_NLM)
#define FLM_ALLOC_ALIGN
0x0003
#define FLM_ALIGN_SIZE
4
#else
#error Platform not supported
#endif
// Basic type definitions
#if defined( FLM_UNIX)
typedef unsigned long
FLMUINT;
typedef long
FLMINT;
typedef unsigned char
FLMBYTE;
typedef unsigned short
FLMUNICODE;
typedef unsigned long long
FLMUINT64;
typedef unsigned int
FLMUINT32;
typedef unsigned short
FLMUINT16;
typedef unsigned char
FLMUINT8;
typedef long long
FLMINT64;
typedef int
FLMINT32;
typedef short
FLMINT16;
typedef signed char
FLMINT8;
#if defined( FLM_64BIT) || defined( FLM_OSX) || \
defined( FLM_S390) || defined( FLM_HPUX) ||
defined( FLM_AIX)
typedef unsigned long
FLMSIZET;
#else
typedef unsigned
FLMSIZET;
#endif
#else
#if defined( FLM_WIN)
#if defined( FLM_64BIT)
typedef unsigned __int64
FLMUINT;
typedef __int64
FLMINT;
typedef unsigned __int64
FLMSIZET;
typedef unsigned int
FLMUINT32;
#elif _MSC_VER >= 1300
typedef unsigned long __w64 FLMU
INT;
typedef long __w64
FLMINT;
typedef __w64 unsigned int
FLMUINT32;
typedef __w64 unsigned int
FLMSIZET;
#else
typedef unsigned long
FLMUINT;
typedef long
FLMINT;
typedef unsigned int
FLMUINT32;
typedef unsigned int
FLMSIZET;
#endif
#elif defined( FLM_NLM)
typedef unsigned long int
FLMUINT;
typedef long int
FLMINT;
typedef unsigned long int
FLMUINT32;
typedef unsigned
FLMSIZET;
#else
#error Platform not supported
#endif
typedef unsigned char
FLMBYTE;
typedef unsigned short int
FLMUNICODE;
typedef unsigned short int
FLMUINT16;
typedef unsigned char
FLMUINT8;
typedef signed int
FLMINT32;
typedef signed short int
FLMINT16;
typedef signed char
FLMINT8;
#if defined( __MWERKS__)
typedef unsigned long long
FLMUINT64;
typedef long long
FLMINT64;
#else
typedef unsigned __int64
FLMUINT64;
typedef __int64
FLMINT64;
#endif
#endif
#if defined( FLM_WIN) || defined( FLM_NLM)
#define FLMATOMIC volatile long
#else
#define FLMATOMIC volatile int
#endif
/// \addtogroup retcodes
/// @{
typedef FLMINT
RCODE; ///< Return code
/// @}
typedef FLMINT
FLMBOOL;
#define F_FILENAME_SIZE
256
#define F_PATH_MAX_SIZE
256
#define F_WAITFOREVER
(0xFFFFFFFF)
#define FLM_MAX_UINT
((FLMUINT)(-1L))
#define FLM_MAX_INT
((FLMINT)(((FLMUINT)(-1L)) >> 1))
#define FLM_MIN_INT
((FLMINT)((((FLMUINT)(-1L)) >> 1) + 1))
#define FLM_MAX_UINT32
((FLMUINT32)(0xFFFFFFFFL))
#define FLM_MAX_INT32
((FLMINT32)(0x7FFFFFFFL))
#define FLM_MIN_INT32
((FLMINT32)(0x80000000L))
#define FLM_MAX_UINT16
((FLMUINT16)(0xFFFF))
#define FLM_MAX_INT16
((FLMINT16)(0x7FFF))
#define FLM_MIN_INT16
((FLMINT16)(0x8000))
#define FLM_MAX_UINT8
((FLMUINT8)0xFF)
#if ((_MSC_VER >= 1200) && (_MSC_VER < 1300)) || defined( FL
M_NLM)
#define FLM_MAX_UINT64
((FLMUINT64)(0xFFFFFFFFFFFFFFFFL))
#define FLM_MAX_INT64
((FLMINT64)(0x7FFFFFFFFFFFFFFFL))
#define FLM_MIN_INT64
((FLMINT64)(0x8000000000000000L))
#else
#define FLM_MAX_UINT64
((FLMUINT64)(0xFFFFFFFFFFFFFFFFLL))
#define FLM_MAX_INT64
((FLMINT64)(0x7FFFFFFFFFFFFFFFLL))
#define FLM_MIN_INT64
((FLMINT64)(0x8000000000000000LL))
#endif
#endif
// xpcselany keeps MS compilers from complaining about multiple defi
nitions
#if defined(_MSC_VER)
#define xpcselany __declspec(selectany)
#else
#define xpcselany
#endif
typedef struct
{
FLMUINT32 l;
FLMUINT16 w1;
FLMUINT16 w2;
FLMUINT8 b[ 8];
} FLM_GUID;
#define RFLMIID const FLM_GUID &
#define RFLMCLSID const FLM_GUID &
#define FLMGUID FLM_GUID
#define FLMCLSID FLM_GUID
// FLM_DEFINE_GUID may be used to define or declare a GUID
// #define FLM_INIT_GUID before including this header file when
// you want to define the guid, all other inclusions will only decla
re
// the guid, not define it.
#if !defined( PCOM_INIT_GUID)
#define FLM_DEFINE_GUID( name, l, w1, w2, b1, b2, b3, b4, b5
, b6, b7, b8) \
extern const FLMGUID name
#else
#define FLM_DEFINE_GUID( name, l, w1, w2, b1, b2, b3, b4, b5
, b6, b7, b8) \
extern const xpcselany FLMGUID name \
= { l, w1, w2, { b1, b2, b3
, b4, b5, b6, b7, b8 } }
#endif
#define FLMEXTC
extern "C"
#if defined( FLM_WIN)
#define FLMAPI
__stdcall
#define FLMEXP
__declspec(dllexport)
#ifdef FLM_DEBUG
#define FINLINE
inline
#else
#define FINLINE
__forceinline
#endif
#elif defined( FLM_NLM)
#define FLMAPI
__stdcall
#define FLMEXP
#define FINLINE
inline
#elif defined( FLM_UNIX)
#define FLMAPI
#define FLMEXP
#define FINLINE
inline
#else
#error Platform not supported
#endif
/*******************************************************************
*********
Desc: Argument lists
********************************************************************
********/
#define f_alignedsize(n) \
((sizeof(n) + FLM_ALIGN_SIZE - 1) & ~(FLM_ALIGN_SIZE - 1) )
#if defined( FLM_RING_ZERO_NLM)
#define f_argsize(x) \
((sizeof(x)+sizeof(int)-1) & ~(sizeof(int)-1))
typedef unsigned long f_va_list;
#define f_va_start(ap, parmN) \
((void)((ap) = (unsigned long)&(parmN) + f_argsize(p
armN)))
#define f_va_arg(ap, type) \
(*(type *)(((ap) += f_argsize(type)) - (f_argsize(ty
pe))))
#define f_va_end(ap) ((void)0)
#else
#include <stdarg.h>
#define f_va_list va_list
#define f_va_start va_start
#define f_va_arg va_arg
#define f_va_end va_end
#endif
// flmnovtbl keeps MS compilers from generating vtables for interfac
es
#ifdef _MSC_VER
#define flmnovtbl __declspec( novtable)
#else
#define flmnovtbl
#endif
#define flminterface struct flmnovtbl
/*******************************************************************
*********
Desc: General errors
********************************************************************
********/
/// \addtogroup retcodes
/// @{
#define NE_FLM_OK
0
///< 0 - Operation was successful.
// Error codes that need to be the same as they were for FLAIM
#define NE_FLM_BOF_HIT
0xC001 ///< 0xC001 - Beginning
of results encountered.
#define NE_FLM_EOF_HIT
0xC002 ///< 0xC002 - End of re
sults encountered.
#define NE_FLM_EXISTS
0xC004 ///< 0xC004 - Object al
ready exists.
#define NE_FLM_FAILURE
0xC005 ///< 0xC005 - Internal
failure.
#define NE_FLM_NOT_FOUND
0xC006 ///< 0xC006 - An object
was not found.
#define NE_FLM_BTREE_ERROR
0xC012 ///< 0xC012 - Corruptio
n found in b-tree.
#define NE_FLM_BTREE_FULL
0xC013 ///< 0xC013 - B-tree ca
nnot grow beyond current size.
#define NE_FLM_CONV_DEST_OVERFLOW
0xC01C ///< 0xC01C - Destination buffer not la
rge enough to hold data.
#define NE_FLM_CONV_ILLEGAL
0xC01D ///< 0xC01D - Attempt to conver
t between data types is an unsupported conversion.
#define NE_FLM_CONV_NUM_OVERFLOW
0xC020 ///< 0xC020 - Numeric overflow
(> upper bound) converting to numeric type.
#define NE_FLM_DATA_ERROR
0xC022 ///< 0xC022 - Corruptio
n found in b-tree.
#define NE_FLM_ILLEGAL_OP
0xC026 ///< 0xC026 - Illegal o
peration
#define NE_FLM_MEM
0xC037 ///< 0xC037 - A
ttempt to allocate memory failed.
#define NE_FLM_NOT_UNIQUE
0xC03E ///< 0xC03E - Non-uniqu
e key.
#define NE_FLM_SYNTAX
0xC045 ///< 0xC045 - Syntax er
ror while parsing.
#define NE_FLM_NOT_IMPLEMENTED
0xC05F ///< 0xC05F - Attempt was made to use a
feature that is not implemented.
#define NE_FLM_INVALID_PARM
0xC08B ///< 0xC08B - Invalid parameter
passed into a function.
// I/O Errors - Must be the same as they were for FLAIM.
#define NE_FLM_IO_ACCESS_DENIED
0xC201 ///< 0xC201 - Access to file is denied.
\ Caller is not allowed access to a file.
#define NE_FLM_IO_BAD_FILE_HANDLE
0xC202 ///< 0xC202 - Bad file handle or file d
escriptor.
#define NE_FLM_IO_COPY_ERR
0xC203 ///< 0xC203 - Error occ
urred while copying a file.
#define NE_FLM_IO_DISK_FULL
0xC204 ///< 0xC204 - Disk full.
#define NE_FLM_IO_END_OF_FILE
0xC205 ///< 0xC205 - End of file reach
ed while reading from the file.
#define NE_FLM_IO_OPEN_ERR
0xC206 ///< 0xC206 - Error whi
le opening the file.
#define NE_FLM_IO_SEEK_ERR
0xC207 ///< 0xC207 - Error occ
urred while positioning (seeking) within a file.
#define NE_FLM_IO_DIRECTORY_ERR
0xC208 ///< 0xC208 - Error occurred while acce
ssing or deleting a directory.
#define NE_FLM_IO_PATH_NOT_FOUND
0xC209 ///< 0xC209 - File not found.
#define NE_FLM_IO_TOO_MANY_OPEN_FILES
0xC20A ///< 0xC20A - Too many files open.
#define NE_FLM_IO_PATH_TOO_LONG
0xC20B ///< 0xC20B - File name too long.
#define NE_FLM_IO_NO_MORE_FILES
0xC20C ///< 0xC20C - No more files in director
y.
#define NE_FLM_IO_DELETING_FILE
0xC20D ///< 0xC20D - Error occurred while dele
ting a file.
#define NE_FLM_IO_FILE_LOCK_ERR
0xC20E ///< 0xC20E - Error attempting to acqui
re a byte-range lock on a file.
#define NE_FLM_IO_FILE_UNLOCK_ERR
0xC20F ///< 0xC20F - Error attempting to relea
se a byte-range lock on a file.
#define NE_FLM_IO_PATH_CREATE_FAILURE
0xC210 ///< 0xC210 - Error occurred while attempting t
o create a directory or sub-directory.
#define NE_FLM_IO_RENAME_FAILURE
0xC211 ///< 0xC211 - Error occurred wh
ile renaming a file.
#define NE_FLM_IO_INVALID_PASSWORD
0xC212 ///< 0xC212 - Invalid file password.
#define NE_FLM_SETTING_UP_FOR_READ
0xC213 ///< 0xC213 - Error occurred while sett
ing up to perform a file read operation.
#define NE_FLM_SETTING_UP_FOR_WRITE
0xC214 ///< 0xC214 - Error occurred while sett
ing up to perform a file write operation.
#define NE_FLM_IO_CANNOT_REDUCE_PATH
0xC215 ///< 0xC215 - Cannot reduce file name into more
components.
#define NE_FLM_INITIALIZING_IO_SYSTEM
0xC216 ///< 0xC216 - Error occurred while setting up t
o access the file system.
#define NE_FLM_FLUSHING_FILE
0xC217 ///< 0xC217 - Error occurred wh
ile flushing file data buffers to disk.
#define NE_FLM_IO_INVALID_FILENAME
0xC218 ///< 0xC218 - Invalid file name.
#define NE_FLM_IO_CONNECT_ERROR
0xC219 ///< 0xC219 - Error connecting to a rem
ote network resource.
#define NE_FLM_OPENING_FILE
0xC21A ///< 0xC21A - Unexpected error
occurred while opening a file.
#define NE_FLM_DIRECT_OPENING_FILE
0xC21B ///< 0xC21B - Unexpected error occurred
while opening a file in direct access mode.
#define NE_FLM_CREATING_FILE
0xC21C ///< 0xC21C - Unexpected error
occurred while creating a file.
#define NE_FLM_DIRECT_CREATING_FILE
0xC21D ///< 0xC21D - Unexpected error occurred
while creating a file in direct access mode.
#define NE_FLM_READING_FILE
0xC21E ///< 0xC21E - Unexpected error
occurred while reading a file.
#define NE_FLM_DIRECT_READING_FILE
0xC21F ///< 0xC21F - Unexpected error occurred
while reading a file in direct access mode.
#define NE_FLM_WRITING_FILE
0xC220 ///< 0xC220 - Unexpected error
occurred while writing to a file.
#define NE_FLM_DIRECT_WRITING_FILE
0xC221 ///< 0xC221 - Unexpected error occurred
while writing a file in direct access mode.
#define NE_FLM_POSITIONING_IN_FILE
0xC222 ///< 0xC222 - Unexpected error occurred
while positioning within a file.
#define NE_FLM_GETTING_FILE_SIZE
0xC223 ///< 0xC223 - Unexpected error
occurred while getting a file's size.
#define NE_FLM_TRUNCATING_FILE
0xC224 ///< 0xC224 - Unexpected error occurred
while truncating a file.
#define NE_FLM_PARSING_FILE_NAME
0xC225 ///< 0xC225 - Unexpected error
occurred while parsing a file's name.
#define NE_FLM_CLOSING_FILE
0xC226 ///< 0xC226 - Unexpected error
occurred while closing a file.
#define NE_FLM_GETTING_FILE_INFO
0xC227 ///< 0xC227 - Unexpected error
occurred while getting information about a file.
#define NE_FLM_EXPANDING_FILE
0xC228 ///< 0xC228 - Unexpected error
occurred while expanding a file.
#define NE_FLM_GETTING_FREE_BLOCKS
0xC229 ///< 0xC229 - Unexpected error getting
free blocks from file system.
#define NE_FLM_CHECKING_FILE_EXISTENCE
0xC22A ///< 0xC22A - Unexpected error occurred while c
hecking to see if a file exists.
#define NE_FLM_RENAMING_FILE
0xC22B ///< 0xC22B - Unexpected error
occurred while renaming a file.
#define NE_FLM_SETTING_FILE_INFO
0xC22C ///< 0xC22C - Unexpected error
occurred while setting a file's information.
#define NE_FLM_IO_PENDING
0xC22D ///< 0xC22D - I/O has n
ot yet completed
#define NE_FLM_ASYNC_FAILED
0xC22E ///< 0xC22E - An async I/O oper
ation failed
#define NE_FLM_MISALIGNED_IO
0xC22F ///< 0xC22F - Misaligned buffer
or offset encountered during I/O request
// Stream Errors - These are new
#define NE_FLM_STREAM_DECOMPRESS_ERROR
0xC400 ///< 0xC400 - Error decompressing data stream.
#define NE_FLM_STREAM_NOT_COMPRESSED
0xC401 ///< 0xC401 - Attempting to decompress a data s
tream that is not compressed.
#define NE_FLM_STREAM_TOO_MANY_FILES
0xC402 ///< 0xC402 - Too many files in input stream.
// Miscellaneous new toolkit errors
#define NE_FLM_COULD_NOT_CREATE_SEMAPHORE
0xC500 ///< 0xC500 - Could not create a semaphore.
#define NE_FLM_BAD_UTF8
0xC501 ///< 0xC501 - An invali
d byte sequence was found in a UTF-8 string
#define NE_FLM_ERROR_WAITING_ON_SEMAPHORE
0xC502 ///< 0xC502 - Error occurred while waiting on a
sempahore.
#define NE_FLM_BAD_SEN
0xC503 ///< 0xC503 - Invalid s
imple encoded number.
#define NE_FLM_COULD_NOT_START_THREAD
0xC504 ///< 0xC504 - Problem starting a new thread.
#define NE_FLM_BAD_BASE64_ENCODING
0xC505 ///< 0xC505 - Invalid base64 sequence e
ncountered.
#define NE_FLM_STREAM_EXISTS
0xC506 ///< 0xC506 - Stream file alrea
dy exists.
#define NE_FLM_MULTIPLE_MATCHES
0xC507 ///< 0xC507 - Multiple items matched bu
t only one match was expected.
#define NE_FLM_BTREE_KEY_SIZE
0xC508 ///< 0xC508 - Invalid b-tree ke
y size.
#define NE_FLM_BTREE_BAD_STATE
0xC509 ///< 0xC509 - B-tree operation cannot b
e completed.
#define NE_FLM_COULD_NOT_CREATE_MUTEX
0xC50A ///< 0xC50A - Error occurred while creating or
initializing a mutex.
#define NE_FLM_BAD_PLATFORM_FORMAT
0xC50B ///< 0xC50B - In-memory alignment o
f disk structures is incorrect
#define NE_FLM_LOCK_REQ_TIMEOUT
0xC50C ///< 0xC50C - Timeout while waiting
for a lock object
#define NE_FLM_WAIT_TIMEOUT
0xC50D ///< 0xC50D - Timeout while wai
ting on a semaphore, condition variable, or reader/writer lock
// Network Errors - Must be the same as they were for FLAIM
#define NE_FLM_NOIP_ADDR
0xC900 ///< 0xC900 - IP addres
s not found
#define NE_FLM_SOCKET_FAIL
0xC901 ///< 0xC901 - IP socket
failure
#define NE_FLM_CONNECT_FAIL
0xC902 ///< 0xC902 - TCP/IP connection
failure
#define NE_FLM_BIND_FAIL
0xC903 ///< 0xC903 - The TCP/I
P services on your system may not be configured or installed.
#define NE_FLM_LISTEN_FAIL
0xC904 ///< 0xC904 - TCP/IP li
sten failed
#define NE_FLM_ACCEPT_FAIL
0xC905 ///< 0xC905 - TCP/IP ac
cept failed
#define NE_FLM_SELECT_ERR
0xC906 ///< 0xC906 - TCP/IP se
lect failed
#define NE_FLM_SOCKET_SET_OPT_FAIL
0xC907 ///< 0xC907 - TCP/IP socket operation f
ailed
#define NE_FLM_SOCKET_DISCONNECT
0xC908 ///< 0xC908 - TCP/IP disconnect
ed
#define NE_FLM_SOCKET_READ_FAIL
0xC909 ///< 0xC909 - TCP/IP read failed
#define NE_FLM_SOCKET_WRITE_FAIL
0xC90A ///< 0xC90A - TCP/IP write fail
ed
#define NE_FLM_SOCKET_READ_TIMEOUT
0xC90B ///< 0xC90B - TCP/IP read timeout
#define NE_FLM_SOCKET_WRITE_TIMEOUT
0xC90C ///< 0xC90C - TCP/IP write timeout
#define NE_FLM_SOCKET_ALREADY_CLOSED
0xC90D ///< 0xC90D - Connection already closed
/// @}
/*******************************************************************
*********
Desc: Return code functions and macros
********************************************************************
********/
#ifndef RC_OK
#define RC_OK( rc) ((rc) == NE_FLM_OK)
#endif
#ifndef RC_BAD
#define RC_BAD( rc) ((rc) != NE_FLM_OK)
#endif
RCODE FLMAPI f_mapPlatformError(
FLMINT iError,
RCODE defa
ultRc);
/*******************************************************************
*********
Desc: Forward References
********************************************************************
********/
flminterface IF_DirHdl;
flminterface IF_FileHdl;
flminterface IF_FileSystem;
flminterface IF_FileHdlCache;
flminterface IF_IStream;
flminterface IF_PosIStream;
flminterface IF_ResultSet;
flminterface IF_ThreadInfo;
flminterface IF_OStream;
flminterface IF_IOStream;
flminterface IF_LogMessageClient;
flminterface IF_Thread;
flminterface IF_IOBuffer;
flminterface IF_AsyncClient;
flminterface IF_Block;
class F_Pool;
class F_DynaBuf;
class F_ListItem;
class F_ListManager;
/*******************************************************************
*********
Desc: Cross-platform definitions
********************************************************************
********/
#ifndef NULL
#define NULL 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define f_offsetof(s,m) \
(((FLMSIZET)&((s *)1)->m) - 1)
/*******************************************************************
*********
Desc: Language constants
********************************************************************
********/
/// \addtogroup flm_languages
/// @{
#define FLM_US_LANG
0 ///< English, United States
#define FLM_AF_LANG
1 ///< Afrikaans
#define FLM_AR_LANG
2 ///< Arabic
#define FLM_CA_LANG
3 ///< Catalan
#define FLM_HR_LANG
4 ///< Croatian
#define FLM_CZ_LANG
5 ///< Czech
#define FLM_DK_LANG
6 ///< Danish
#define FLM_NL_LANG
7 ///< Dutch
#define FLM_OZ_LANG
8 ///< English, Australia
#define FLM_CE_LANG
9 ///< English, Canada
#define FLM_UK_LANG
10 ///< English, United Kingdom
#define FLM_FA_LANG
11 ///< Farsi
#define FLM_SU_LANG
12 ///< Finnish
#define FLM_CF_LANG
13 ///< French, Canada
#define FLM_FR_LANG
14 ///< French, France
#define FLM_GA_LANG
15 ///< Galician
#define FLM_DE_LANG
16 ///< German, Germany
#define FLM_SD_LANG
17 ///< German, Switzerland
#define FLM_GR_LANG
18 ///< Greek
#define FLM_HE_LANG
19 ///< Hebrew
#define FLM_HU_LANG
20 ///< Hungarian
#define FLM_IS_LANG
21 ///< Icelandic
#define FLM_IT_LANG
22 ///< Italian
#define FLM_NO_LANG
23 ///< Norwegian
#define FLM_PL_LANG
24 ///< Polish
#define FLM_BR_LANG
25 ///< Portuguese, Brazil
#define FLM_PO_LANG
26 ///< Portuguese, Portugal
#define FLM_RU_LANG
27 ///< Russian
#define FLM_SL_LANG
28 ///< Slovak
#define FLM_ES_LANG
29 ///< Spanish
#define FLM_SV_LANG
30 ///< Swedish
#define FLM_YK_LANG
31 ///< Ukrainian
#define FLM_UR_LANG
32 ///< Urdu
#define FLM_TK_LANG
33 ///< Turkey
#define FLM_JP_LANG
34 ///< Japanese
#define FLM_KO_LANG
35 ///< Korean
#define FLM_CT_LANG
36 ///< Chinese-Traditional
#define FLM_CS_LANG
37 ///< Chinese-Simplified
#define FLM_LA_LANG
38 ///< another Asian language
/// @}
#define FLM_LAST_LANG
(FLM_LA_LANG + 1)
#define FLM_FIRST_DBCS_LANG (FLM
_JP_LANG)
#define FLM_LAST_DBCS_LANG
(FLM_LA_LANG)
/*******************************************************************
*********
Desc: Collation flags and constants
********************************************************************
********/
#define F_HAD_SUB_COLLATION 0x01
// Set if had sub-collating values-diacritics
#define F_HAD_LOWER_CASE
0x02 // Set if you hit a lowercase character
#define F_COLL_FIRST_SUBSTRING 0x03
// First substring marker
#define F_COLL_MARKER
0x04 // Marks place of sub-collation
#define F_SC_LOWER
0x00 // Only lowercase characters exist
#define F_SC_MIXED
0x01 // Lower/uppercase flags follow in next
byte
#define F_SC_UPPER
0x02 // Only upper characters exist
#define F_SC_SUB_COL
0x03 // Sub-collation follows (diacritics|ex
tCh)
#define F_COLL_TRUNCATED
0x0C // This key piece has been truncated from origi
nal
#define F_MAX_COL_OPCODE
F_COLL_TRUNCATED
#define F_CHSASCI
0 // ASCII
#define F_CHSMUL1
1 // Multinational 1
#define F_CHSMUL2
2 // Multinational 2
#define F_CHSBOXD
3 // Box drawing
#define F_CHSSYM1
4 // Typographic Symbols
#define F_CHSSYM2
5 // Iconic Symbols
#define F_CHSMATH
6 // Math
#define F_CHMATHX
7 // Math Extension
#define F_CHSGREK
8 // Greek
#define F_CHSHEB
9 // Hebrew
#define F_CHSCYR
10 // Cyrillic
#define F_CHSKANA
11 // Japanese Kana
#define F_CHSUSER
12 // User-defined
#define F_CHSARB1
13 // Arabic
#define F_CHSARB2
14 // Arabic script
#define F_NCHSETS
15 // # of character sets
(excluding asian)
#define F_ACHSETS
0x0E0 // maximum character set value
- asian
#define F_ACHSMIN
0x024 // minimum character set value
- asian
#define F_ACHCMAX
0x0FE // maxmimum character value in
asian sets
/*******************************************************************
*********
Desc: Diacritics
********************************************************************
********/
#define F_GRAVE
0
#define F_CENTERD
1
#define F_TILDE
2
#define F_CIRCUM
3
#define F_CROSSB
4
#define F_SLASH
5
#define F_ACUTE
6
#define F_UMLAUT
7
#define F_MACRON
8
#define F_APOSAB
9
#define F_APOSBES
10
#define F_APOSBA
11
#define F_RING
14
#define F_DOTA
15
#define F_DACUTE
16
#define F_CEDILLA
17
#define F_OGONEK
18
#define F_CARON
19
#define F_STROKE
20
#define F_BREVE
22
#define F_DOTLESI
239
#define F_DOTLESJ
25
#define F_GACUTE
83 // greek acute
#define F_GDIA
84 // greek diaere
sis
#define F_GACTDIA
85 // acute diaere
sis
#define F_GGRVDIA
86 // grave diaere
sis
#define F_GGRAVE
87 // greek grave
#define F_GCIRCM
88 // greek circum
flex
#define F_GSMOOTH
89 // smooth breat
hing
#define F_GROUGH
90 // rough breath
ing
#define F_GIOTA
91 // iota subscript
#define F_GSMACT
92 // smooth breat
hing acute
#define F_GRGACT
93 // rough breath
ing acute
#define F_GSMGRV
94 // smooth breat
hing grave
#define F_GRGGRV
95 // rough breath
ing grave
#define F_GSMCIR
96 // smooth breat
hing circumflex
#define F_GRGCIR
97 // rough breath
ing circumflex
#define F_GACTIO
98 // acute iota
#define F_GGRVIO
99 // grave iota
#define F_GCIRIO
100 // circumflex iota
#define F_GSMIO
101 // smooth iota
#define F_GRGIO
102 // rough iota
#define F_GSMAIO
103 // smooth acute iota
#define F_GRGAIO
104 // rough acute iota
#define F_GSMGVIO
105 // smooth grave iota
#define F_GRGGVIO
106 // rough grave iota
#define F_GSMCIO
107 // smooth circumflex io
ta
#define F_GRGCIO
108 // rough circumflex iot
a
#define F_GHPRIME
81 // high prime
#define F_GLPRIME
82 // low prime
#define F_RACUTE
200 // russian acute
#define F_RGRAVE
201 // russian grave
#define F_RRTDESC
204 // russian right descen
der
#define F_ROGONEK
205 // russian ogonek
#define F_RMACRON
206 // russian macron
/*******************************************************************
*********
Desc: I/O Flags
********************************************************************
********/
#define FLM_IO_CURRENT_POS
FLM_MAX_UINT64
#define FLM_IO_RDONLY
0x0001
#define FLM_IO_RDWR
0x0002
#define FLM_IO_EXCL
0x0004
#define FLM_IO_CREATE_DIR
0x0008
#define FLM_IO_SH_DENYRW
0x0010
#define FLM_IO_SH_DENYWR
0x0020
#define FLM_IO_SH_DENYNONE
0x0040
#define FLM_IO_DIRECT
0x0080
#define FLM_IO_DELETE_ON_RELEASE 0x01
00
#define FLM_IO_NO_MISALIGNED 0x02
00
// File Positioning Definitions
#define FLM_IO_SEEK_SET
0 // Beginning of File
#define FLM_IO_SEEK_CUR
1 // Current File Pointer Position
#define FLM_IO_SEEK_END
2 // End of File
// Maximum file size
#define FLM_MAXIMUM_FILE_SIZE 0xFF
FC0000
// Maximum SEN (compressed number) length
#define FLM_MAX_SEN_LEN
9
// Retrieval flags
#define FLM_INCL
0x0010
#define FLM_EXCL
0x0020
#define FLM_EXACT
0x0040
#define FLM_KEY_EXACT
0x0080
#define FLM_FIRST
0x0100
#define FLM_LAST
0x0200
/*******************************************************************
*********
Desc: Comparison flags for strings
********************************************************************
********/
/// \addtogroup compare_rules
/// @{
#define FLM_COMP_CASE_INSENSITIVE 0x0001
///< 0x0001 = Do case sensitive comparison.
#define FLM_COMP_COMPRESS_WHITESPACE 0x0002 ///<
0x0002 = Compare multiple whitespace characters as a single space.
#define FLM_COMP_NO_WHITESPACE 0x0004
///< 0x0004 = Ignore all whitespace during comparison.
#define FLM_COMP_NO_UNDERSCORES 0x0008
///< 0x0008 = Ignore all underscore characters during comparison.
#define FLM_COMP_NO_DASHES
0x0010 ///< 0x0010 = Ignore all dash characters during compari
son.
#define FLM_COMP_WHITESPACE_AS_SPACE 0x0020 ///<
0x0020 = Treat newlines and tabs as spaces during comparison.
#define FLM_COMP_IGNORE_LEADING_SPACE 0x0040 ///<
0x0040 = Ignore leading space characters during comparison.
#define FLM_COMP_IGNORE_TRAILING_SPACE 0x0080 ///<
0x0080 = Ignore trailing space characters during comparison.
#define FLM_COMP_WILD
0x0100
/// @}
/*******************************************************************
*********
Desc: Colors
********************************************************************
********/
/// Colors used for logging messages
typedef enum
{
FLM_BLACK = 0, ///< 0 = Bla
ck
FLM_BLUE, ///<
1 = Blue
FLM_GREEN, ///<
2 = Green
FLM_CYAN, ///<
3 = Cyan
FLM_RED,
///< 4 = Red
FLM_MAGENTA, ///< 5 = Mag
enta
FLM_BROWN, ///<
6 = Brown
FLM_LIGHTGRAY, ///< 7 = Lig
ht Gray
FLM_DARKGRAY, ///< 8 = Dar
k Gray
FLM_LIGHTBLUE, ///< 9 = Lig
ht Blue
FLM_LIGHTGREEN, ///< 10 = Light Gree
n
FLM_LIGHTCYAN, ///< 11 = Li
ght Cyan
FLM_LIGHTRED, ///< 12 = Li
ght Red
FLM_LIGHTMAGENTA, ///< 13 = Li
ght Magenta
FLM_YELLOW, ///<
14 = Light Yellow
FLM_WHITE, ///<
15 = White
FLM_NUM_COLORS,
FLM_CURRENT_COLOR
} eColorType;
#define F_FOREBLACK "%0F"
#define F_FOREBLUE "%1F"
#define F_FOREGREEN "%2F"
#define F_FORECYAN "%3F"
#define F_FORERED "%4F"
#define F_FOREMAGENTA "%5F"
#define F_FOREBROWN "%6F"
#define F_FORELIGHTGRAY "%7F"
#define F_FOREDARKGRAY "%8F"
#define F_FORELIGHTBLUE "%9F"
#define F_FORELIGHTGREEN "%10F"
#define F_FORELIGHTCYAN "%11F"
#define F_FORELIGHTRED "%12F"
#define F_FORELIGHTMAGENTA "%13F"
#define F_FOREYELLOW "%14F"
#define F_FOREWHITE "%15F"
#define F_BACKBLACK "%0B"
#define F_BACKBLUE "%1B"
#define F_BACKGREEN "%2B"
#define F_BACKCYAN "%3B"
#define F_BACKRED "%4B"
#define F_BACKMAGENTA "%5B"
#define F_BACKBROWN "%6B"
#define F_BACKLIGHTGRAY "%7B"
#define F_BACKDARKGRAY "%8B"
#define F_BACKLIGHTBLUE "%9B"
#define F_BACKLIGHTGREEN "%10B"
#define F_BACKLIGHTCYAN "%11B"
#define F_BACKLIGHTRED "%12B"
#define F_BACKLIGHTMAGENTA "%13B"
#define F_BACKYELLOW "%14B"
#define F_BACKWHITE "%15B"
#define F_PUSH_FORECOLOR "%+F"
#define F_POP_FORECOLOR "%-F"
#define F_PUSH_BACKCOLOR "%+B"
#define F_POP_BACKCOLOR "%-B"
#define F_PUSHCOLOR F_PUSH_FORECOLOR F_PUSH_BACK
COLOR
#define F_POPCOLOR F_POP_FORECOLOR F_POP_BACKCO
LOR
/*******************************************************************
*********
/// Structure for reporting slab usage information in cache.
********************************************************************
********/
typedef struct
{
FLMUINT64 ui64Slabs;
///< Total slabs currently allocated.
FLMUINT64 ui64SlabBytes;
///< Total bytes currently allocated in slabs.
FLMUINT64 ui64AllocatedCells;
///< Total cells allocated within slabs.
FLMUINT64 ui64FreeCells;
///< Total cells that are free within slabs.
} FLM_SLAB_USAGE;
/*******************************************************************
*********
/// Structure returned from FlmGetThreadInfo() - contains informatio
n about a thread.
********************************************************************
********/
typedef struct
{
FLMUINT uiThreadId; ///<
Operating system thread ID.
FLMUINT uiThreadGroup; ///< Thread
group this thread belongs to.
FLMUINT uiAppId;
///< Application ID that was assigned to the thread when it was started
.
FLMUINT uiStartTime; ///< Time th
e thread was started.
char * pszThreadName; ///< Name of
the thread.
char * pszThreadStatus; ///< String
indicating the last action the thread reported it was performing.
} F_THREAD_INFO;
typedef enum
{
FLM_THREAD_STATUS_UNKNOWN = 0,
FLM_THREAD_STATUS_INITIALIZING,
FLM_THREAD_STATUS_RUNNING,
FLM_THREAD_STATUS_SLEEPING,
FLM_THREAD_STATUS_TERMINATING
} eThreadStatus;
#define F_THREAD_MIN_STACK_SIZE (16 * 1024)
#define F_THREAD_DEFAULT_STACK_SIZE (16 * 1024)
#define F_DEFAULT_THREAD_GROUP 0
#define F_INVALID_THREAD_GROUP 0xFFFFFFFF
typedef RCODE (FLMAPI * F_THREAD_FUNC)(IF_Thread *);
/*******************************************************************
*********
Desc: Startup and shutdown
********************************************************************
********/
RCODE FLMAPI ftkStartup( void);
void FLMAPI ftkShutdown( void);
/*******************************************************************
*********
Desc: Global data
********************************************************************
********/
extern FLMUINT16 * gv_pui16USCollationTable;
/*******************************************************************
*********
/// This is a pure virtual base class that other classes inherit fro
m.\ It
/// provides methods for reference counting (AddRef, Release).
********************************************************************
********/
flminterface FLMEXP IF_Object
{
virtual ~IF_Object()
{
}
virtual FLMINT FLMAPI AddRef( void) = 0;
virtual FLMINT FLMAPI Release( void) = 0;
virtual FLMINT FLMAPI getRefCount( void) = 0;
};
/*******************************************************************
*********
/// This is the base class that all other classes inherit from.\ I
t
/// provides methods for reference counting (AddRef, Release) as wel
l as
/// methods for overloading new and delete operators.
********************************************************************
********/
class FLMEXP F_Object : public IF_Object
{
public:
F_Object()
{
m_refCnt = 1;
}
virtual ~F_Object()
{
}
/// Increment the reference count for this object.
/// The reference count is the number of pointers that are r
eferencing this object.
/// Return value is the incremented reference count.
virtual FLMINT FLMAPI AddRef( void);
/// Decrement the reference count for this object.
/// The reference count is the number of pointers that are r
eferencing this object.
/// Return value is the decremented reference count. If the
reference count goes to
/// zero, the object will be deleted.
virtual FLMINT FLMAPI Release( void);
/// Return the current reference count on the object.
virtual FLMINT FLMAPI getRefCount( void);
/// Overloaded new operator for objects of this class.
void * FLMAPI operator new(
FLMSIZET uiSize,
///< Number of bytes to allocate - should be sizeof( ThisClass)
.
const char * pszFile,
///< Name of source file where this allocation is made.
int iLine)
///< Line number in source file where this allocation request i
s made.
#ifndef FLM_WATCOM_NLM
throw()
#endif
;
/// Overloaded new operator for objects of this class.
void * FLMAPI operator new(
FLMSIZET uiSize)
///< Number of bytes to allocate - should be sizeof( ThisClass)
.
#ifndef FLM_WATCOM_NLM
throw()
#endif
;
/// Overloaded new operator (array) for objects of this clas
s (with source file and line number).
/// This new operator is called when an array of objects of
this class are allocated.
/// This new operator passes in the current file and line nu
mber. This information is
/// useful in tracking memory allocations to determine where
memory leaks are coming from.
void * FLMAPI operator new[](
FLMSIZET uiSize,
///< Number of bytes to allocate - should be sizeof( ThisClass)
.
const char * pszFile,
///< Name of source file where this allocation is made.
int iLine)
///< Line number in source file where this allocation request i
s made.
#ifndef FLM_WATCOM_NLM
throw()
#endif
;
/// Overloaded new operator (array) for objects of this clas
s.
/// This new operator is called when an array of objects of
this class are allocated.
void * FLMAPI operator new[](
FLMSIZET uiSize)
///< Number of bytes to allocate - should be sizeof( ThisClass)
.
#ifndef FLM_WATCOM_NLM
throw()
#endif
;
/// Overloaded delete operator for objects of this class.
void FLMAPI operator delete(
void * ptr);
///< Pointer to object being freed.
/// Overloaded delete operator (array) for objects of this c
lass.
void FLMAPI operator delete[](
void * ptr);
///< Pointer to array of objects being freed.
#ifndef FLM_WATCOM_NLM
/// Overloaded delete operator for objects of this class (wi
th source file and line number).
/// This delete operator passes in the current file and line
number. This information is
/// useful in tracking memory allocations to determine where
memory leaks are coming from.
void FLMAPI operator delete(
void * ptr,
///< Pointer to object being freed.
const char * file,
///< Name of source file where this delete occurs.
int line);
///< Line number in source file where this delete occurs.
#endif
#ifndef FLM_WATCOM_NLM
/// Overloaded delete operator (array) for objects of this c
lass (with source file and line number).
/// This delete operator is called when an array of objects
of this class is freed.
/// This delete operator passes in the current file and line
number. This information is
/// useful in tracking memory allocations to determine where
memory leaks are coming from.
void FLMAPI operator delete[](
void * ptr,
///< Pointer to object being freed.
const char * file,
///< Name of source file where this delete occurs.
int line);
///< Line number in source file where this delete occurs.
#endif
protected:
FLMATOMIC m_refCnt;
};
/*******************************************************************
*********
Desc: Internal base class
********************************************************************
********/
class FLMEXP F_OSBase
{
public:
F_OSBase()
{
m_refCnt = 1;
}
virtual ~F_OSBase()
{
}
void * operator new(
FLMSIZET uiSize,
const char * pszFile,
int iLine)
#ifndef FLM_WATCOM_NLM
throw()
#endif
;
void * operator new[](
FLMSIZET uiSize,
const char * pszFile,
int iLine)
#ifndef FLM_WATCOM_NLM
throw()
#endif
;
void operator delete(
void * ptr);
void operator delete[](
void * ptr);
#ifndef FLM_WATCOM_NLM
void operator delete(
void * ptr,
const char * file,
int line);
#endif
#ifndef FLM_WATCOM_NLM
void operator delete[](
void * ptr,
const char * file,
int line);
#endif
virtual FINLINE FLMINT FLMAPI AddRef( void)
{
return( ++m_refCnt);
}
virtual FINLINE FLMINT FLMAPI Release( void)
{
FLMINT iRefCnt = --m_refCnt;
if( !iRefCnt)
{
delete this;
}
return( iRefCnt);
}
virtual FINLINE FLMINT FLMAPI getRefCount( void)
{
return( m_refCnt);
}
protected:
FLMATOMIC m_refCnt;
};
/*******************************************************************
*********
Desc: Errors
********************************************************************
********/
#ifdef FLM_DEBUG
RCODE FLMAPI f_makeErr(
RCODE rc,
const char * pszFile,
int iLine,
FLMBOOL bAssert);
FLMINT FLMAPI f_enterDebugger(
const char * pszFile,
int iLine);
#define RC_SET( rc) \
f_makeErr( rc, __FILE__, __LINE__, FALSE)
#define RC_SET_AND_ASSERT( rc) \
f_makeErr( rc, __FILE__, __LINE__, TRUE)
#define RC_UNEXPECTED_ASSERT( rc) \
f_makeErr( rc, __FILE__, __LINE__, TRUE)
#define f_assert( c) \
(void)((c) ? 0 : f_enterDebugger( __FILE__, __LINE__
))
#define flmAssert( c) \
f_assert( c)
#else
#define RC_SET( rc)
(rc)
#define RC_SET_AND_ASSERT( rc) (rc)
#define RC_UNEXPECTED_ASSERT( rc)
#define f_assert(c)
#define flmAssert(c)
#endif
/*******************************************************************
*********
Desc: Memory
********************************************************************
********/
RCODE FLMAPI f_allocImp(
FLMUINT uiSize,
void ** ppvPtr,
FLMBOOL bFromNewOp,
const char * pszFile,
int iLine);
#define f_alloc(s,p) \
f_allocImp( (s), (void **)(p), FALSE, __FILE__, __LINE__)
RCODE FLMAPI f_callocImp(
FLMUINT uiSize,
void ** ppvPtr,
const char * pszFile,
int iLine);
#define f_calloc(s,p) \
f_callocImp( (s), (void **)(p), __FILE__, __LINE__)
RCODE FLMAPI f_reallocImp(
FLMUINT uiSize,
void ** ppvPtr,
const char * pszFile,
int iLine);
#define f_realloc(s,p) \
f_reallocImp( (s), (void **)(p), __FILE__, __LINE__)
RCODE FLMAPI f_recallocImp(
FLMUINT uiSize,
void ** ppvPtr,
const char * pszFile,
int iLine);
#define f_recalloc(s,p) \
f_recallocImp( (s), (void **)(p), __FILE__, __LINE__)
#define f_new \
new( __FILE__, __LINE__)
void FLMAPI f_freeImp(
void ** ppvPtr,
FLMBOOL bFromDelOp);
#define f_free(p) \
f_freeImp( (void **)(p), FALSE)
void f_resetStackInfoImp(
void * pvPtr,
const char * pszFileName,
int iLineNumber);
#define f_resetStackInfo(p) \
f_resetStackInfoImp( (p), __FILE__, __LINE__)
FLMUINT f_msize(
void * pvPtr);
RCODE FLMAPI f_allocAlignedBufferImp(
FLMUINT uiMinSize,
void ** ppvAlloc);
#define f_allocAlignedBuffer(s,p) \
f_allocAlignedBufferImp( (s), (void **)(p))
void FLMAPI f_freeAlignedBufferImp(
void ** ppvAlloc);
#define f_freeAlignedBuffer(p) \
f_freeAlignedBufferImp( (void **)(p))
RCODE FLMAPI f_getMemoryInfo(
FLMUINT64 * pui64TotalPhysMem,
FLMUINT64 * pui64AvailPhysMem);
FLMBOOL FLMAPI f_canGetMemoryInfo( void);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_ThreadInfo : public F_Object
{
virtual FLMUINT FLMAPI getNumThreads( void) = 0;
virtual void FLMAPI getThreadInfo(
FLMUINT uiThreadNum,
FLMUINT * puiThreadId,
FLMUINT * puiThreadGro
up,
FLMUINT * puiAppId,
FLMUINT * puiStartTime
,
const char ** ppszThreadName,
const char ** ppszThreadStatus) =
0;
};
RCODE FLMAPI FlmGetThreadInfo(
IF_ThreadInfo ** ppThreadInfo);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_IStream : public F_Object
{
virtual RCODE FLMAPI read(
void * pvBuffer,
FLMUINT uiBytesToRea
d,
FLMUINT * puiBytesRead
= NULL) = 0;
virtual RCODE FLMAPI closeStream( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_PosIStream : public IF_IStream
{
virtual FLMUINT64 FLMAPI totalSize( void) = 0;
virtual FLMUINT64 FLMAPI remainingSize( void) = 0;
virtual RCODE FLMAPI positionTo(
FLMUINT64 ui64Position
) = 0;
virtual FLMUINT64 FLMAPI getCurrPosition( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_BufferIStream : public IF_PosIStream
{
virtual RCODE FLMAPI openStream(
const char * pucBuffer,
FLMUINT uiLength,
char ** ppucAllocate
dBuffer = NULL) = 0;
virtual FLMUINT64 FLMAPI totalSize( void) = 0;
virtual FLMUINT64 FLMAPI remainingSize( void) = 0;
virtual RCODE FLMAPI closeStream( void) = 0;
virtual RCODE FLMAPI positionTo(
FLMUINT64 ui64Position
) = 0;
virtual FLMUINT64 FLMAPI getCurrPosition( void) = 0;
virtual void FLMAPI truncateStream(
FLMUINT64 ui64Offset =
0) = 0;
virtual RCODE FLMAPI read(
void * pvBuffer,
FLMUINT uiBytesToRea
d,
FLMUINT * puiBytesRead
) = 0;
virtual const FLMBYTE * FLMAPI getBufferAtCurrentOffset( voi
d) = 0;
};
RCODE FLMAPI FlmAllocBufferIStream(
IF_BufferIStream ** ppIStream);
RCODE FLMAPI FlmOpenBufferIStream(
const char * pucBuffer,
FLMUINT uiLength,
IF_PosIStream ** ppIStream);
RCODE FLMAPI FlmOpenBase64EncoderIStream(
IF_IStream * pSourceIStream,
FLMBOOL bLineBreaks,
IF_IStream ** ppIStream);
RCODE FLMAPI FlmOpenBase64DecoderIStream(
IF_IStream * pSourceIStream,
IF_IStream ** ppIStream);
RCODE FLMAPI FlmOpenFileIStream(
const char * pszPath,
IF_PosIStream ** ppIStream);
RCODE FLMAPI FlmOpenMultiFileIStream(
const char * pszDirectory,
const char * pszBaseName,
IF_IStream ** ppIStream);
RCODE FLMAPI FlmOpenBufferedIStream(
IF_IStream * pSourceIStream,
FLMUINT uiBufferSize
,
IF_IStream ** ppIStream);
RCODE FLMAPI FlmOpenUncompressingIStream(
IF_IStream * pIStream,
IF_IStream ** ppIStream);
RCODE FLMAPI FlmOpenFileOStream(
const char * pszFileName,
FLMBOOL bTruncateIfE
xists,
IF_OStream ** ppOStream);
RCODE FLMAPI FlmOpenMultiFileOStream(
const char * pszDirectory,
const char * pszBaseName,
FLMUINT uiMaxFileSiz
e,
FLMBOOL bOkToOverwri
te,
IF_OStream ** ppStream);
RCODE FLMAPI FlmOpenBufferedOStream(
IF_OStream * pOStream,
FLMUINT uiBufferSize
,
IF_OStream ** ppOStream);
RCODE FLMAPI FlmOpenCompressingOStream(
IF_OStream * pOStream,
IF_OStream ** ppOStream);
RCODE FLMAPI FlmRemoveMultiFileStream(
const char * pszDirectory,
const char * pszBaseName);
RCODE FLMAPI FlmWriteToOStream(
IF_IStream * pIStream,
IF_OStream * pOStream);
/*******************************************************************
*********
Desc:
********************************************************************
********/
typedef struct
{
FLMUINT64 ui64Position;
FLMUNICODE uNextChar;
} F_CollStreamPos;
flminterface FLMEXP IF_CollIStream : public IF_PosIStream
{
virtual RCODE FLMAPI openStream(
IF_PosIStream * pIStream,
FLMBOOL bUnicodeStre
am,
FLMUINT uiLanguage,
FLMUINT uiCompareRul
es,
FLMBOOL bMayHaveWild
Cards) = 0;
virtual RCODE FLMAPI closeStream( void) = 0;
virtual RCODE FLMAPI read(
void * pvBuffer,
FLMUINT uiBytesToRea
d,
FLMUINT * puiBytesRead
) = 0;
virtual RCODE FLMAPI read(
FLMBOOL bAllowTwoInt
oOne,
FLMUNICODE * puChar,
FLMBOOL * pbCharIsWild
,
FLMUINT16 * pui16Col,
FLMUINT16 * pui16SubCol,
FLMBYTE * pucCase) = 0
;
virtual FLMUINT64 FLMAPI totalSize( void) = 0;
virtual FLMUINT64 FLMAPI remainingSize( void) = 0;
virtual RCODE FLMAPI positionTo(
FLMUINT64 ui64Position
) = 0;
virtual FLMUINT64 FLMAPI getCurrPosition( void) = 0;
virtual RCODE FLMAPI positionTo(
F_CollStreamPos * pPos) = 0;
virtual void FLMAPI getCurrPosition(
F_CollStreamPos * pPos) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_OStream : public F_Object
{
virtual RCODE FLMAPI write(
const void * pvBuffer,
FLMUINT uiBytesToWri
te,
FLMUINT * puiBytesWrit
ten = NULL) = 0;
virtual RCODE FLMAPI closeStream( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_IOStream : public IF_IStream, public IF_OStre
am
{
#if defined( FLM_WIN) && _MSC_VER < 1300
using IF_IStream::operator delete;
#endif
};
/*******************************************************************
*********
********************************************************************
********/
/// Message severity.
typedef enum
{
F_FATAL_MESSAGE = 0, ///< Indicates that
a fatal error occurred - the kind that would normally
///< require a shutdown or other corrective action by an admini
strator.
F_WARN_MESSAGE, ///< Warning message
.
F_ERR_MESSAGE, ///< Non-fat
al error message.
F_INFO_MESSAGE, ///< Information-onl
y message.
F_DEBUG_MESSAGE ///< Debug message.
} eLogMessageSeverity;
/*******************************************************************
*********
Desc: Logging
********************************************************************
********/
IF_LogMessageClient * FLMAPI f_beginLogMessage(
FLMUINT uiMsgType,
eLogMessageSeverity eMsgSeverity);
void FLMAPI f_logPrintf(
IF_LogMessageClient * pLogMessage,
const char * pszFormatStr, ...);
void FLMAPI f_logVPrintf(
IF_LogMessageClient * pLogMessage,
const char * szFormatStr,
f_va_list * args);
void FLMAPI f_endLogMessage(
IF_LogMessageClient ** ppLogMessage);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_LoggerClient : public F_Object
{
virtual IF_LogMessageClient * FLMAPI beginMessage(
FLMUINT uiMsgType,
eLogMessageSeverity eMsgSeverity = F_DEBUG_MESSA
GE) = 0;
};
void f_setLoggerClient(
IF_LoggerClient * pLogger);
/*******************************************************************
*********
/// This is an abstract base class that allows an application to cat
ch
/// messages. The application must create an implementation for thi
s class
/// and then return an object of that class when the
/// IF_LoggerClient::beginMessage() method is called.
********************************************************************
********/
flminterface FLMEXP IF_LogMessageClient : public F_Object
{
/// Set the current foreground and background colors for the
message.
virtual void FLMAPI changeColor(
eColorType eForeColor,
eColorType eBackColor)
= 0;
/// Append a string to the message. This method may be call
ed
/// multiple times by to format a complete message. The mes
sage is not
/// complete until the ::endMessage() method is called.
virtual void FLMAPI appendString(
const char * pszStr) = 0;
/// Append a newline to the message. This method is called
when a
/// multi-line message is being created. Rather than embedd
ing a
/// newline character, this method is used. This allows an
application
/// to recognize the fact that there are multiple lines in t
he message
/// and to log, display, store, etc. (whatever) them accordi
ngly.
virtual void FLMAPI newline( void) = 0;
/// End the current message. The application should finish
logging,
/// displaying, storing, etc. (whatever) the message. The o
bject
/// should be reset in case a new message is subsequently st
arted.
virtual void FLMAPI endMessage( void) = 0;
virtual void FLMAPI pushForegroundColor( void) = 0;
virtual void FLMAPI popForegroundColor( void) = 0;
virtual void FLMAPI pushBackgroundColor( void) = 0;
virtual void FLMAPI popBackgroundColor( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_FileSystem : public F_Object
{
virtual RCODE FLMAPI createFile(
const char * pszFileName,
FLMUINT uiIoFlags,
IF_FileHdl ** ppFile) = 0;
virtual RCODE FLMAPI createUniqueFile(
char * pszPath,
const char * pszFileExtension,
FLMUINT uiIoFlags,
IF_FileHdl ** ppFile) = 0;
virtual RCODE FLMAPI createLockFile(
const char * pszPath,
IF_FileHdl ** ppLockFileHdl) = 0;
virtual RCODE FLMAPI openFile(
const char * pszFileName,
FLMUINT uiIoFlags,
IF_FileHdl ** ppFile) = 0;
virtual RCODE FLMAPI openDir(
const char * pszDirName,
const char * pszPattern,
IF_DirHdl ** ppDir) = 0;
virtual RCODE FLMAPI createDir(
const char * pszDirName) = 0;
virtual RCODE FLMAPI removeDir(
const char * pszDirName,
FLMBOOL bClear = FAL
SE) = 0;
virtual RCODE FLMAPI doesFileExist(
const char * pszFileName) = 0;
virtual FLMBOOL FLMAPI isDir(
const char * pszFileName) = 0;
virtual RCODE FLMAPI getFileTimeStamp(
const char * pszFileName,
FLMUINT * puiTimeStamp
) = 0;
virtual RCODE FLMAPI getFileSize(
const char * pszFileName,
FLMUINT64 * pui64FileSiz
e) = 0;
virtual RCODE FLMAPI deleteFile(
const char * pszFileName) = 0;
virtual RCODE FLMAPI deleteMultiFileStream(
const char * pszDirectory,
const char * pszBaseName) = 0;
virtual RCODE FLMAPI copyFile(
const char * pszSrcFileName,
const char * pszDestFileName,
FLMBOOL bOverwrite,
FLMUINT64 * pui64BytesCo
pied) = 0;
virtual RCODE FLMAPI copyPartialFile(
IF_FileHdl * pSrcFileHdl,
FLMUINT64 ui64SrcOffse
t,
FLMUINT64 ui64SrcSize,
IF_FileHdl * pDestFileHdl,
FLMUINT64 ui64DestOffs
et,
FLMUINT64 * pui64BytesCo
piedRV) = 0;
virtual RCODE FLMAPI renameFile(
const char * pszFileName,
const char * pszNewFileName) = 0;
virtual RCODE FLMAPI setReadOnly(
const char * pszFileName,
FLMBOOL bReadOnly) =
0;
virtual RCODE FLMAPI getSectorSize(
const char * pszFileName,
FLMUINT * puiSectorSiz
e) = 0;
virtual void FLMAPI pathCreateUniqueName(
FLMUINT * puiTime,
char * pFileName,
const char * pFileExt,
FLMBYTE * pHighChars,
FLMBOOL bModext) = 0
;
virtual void FLMAPI pathParse(
const char * pszPath,
char * pszServer,
char * pszVolume,
char * pszDirPath,
char * pszFileName)
= 0;
virtual RCODE FLMAPI pathReduce(
const char * pszSourcePath,
char * pszDestPath,
char * pszString) =
0;
virtual RCODE FLMAPI pathAppend(
char * pszPath,
const char * pszPathComponent) =
0;
virtual RCODE FLMAPI pathToStorageString(
const char * pPath,
char * pszString) =
0;
virtual FLMBOOL FLMAPI doesFileMatch(
const char * pszFileName,
const char * pszTemplate) = 0;
virtual FLMBOOL FLMAPI canDoAsync( void) = 0;
virtual RCODE FLMAPI allocIOBuffer(
FLMUINT uiMinSize,
IF_IOBuffer ** ppIOBuffer) = 0;
virtual RCODE FLMAPI allocFileHandleCache(
FLMUINT uiMaxCachedF
iles,
FLMUINT uiIdleTimeou
tSecs,
IF_FileHdlCache ** ppFileHdlCache) = 0;
};
RCODE FLMAPI FlmGetFileSystem(
IF_FileSystem ** ppFileSystem);
IF_FileSystem * FLMAPI f_getFileSysPtr( void);
FLMUINT FLMAPI f_getOpenFileCount( void);
RCODE FLMAPI f_chdir(
const char * pszDir);
RCODE FLMAPI f_getcwd(
char * pszDir);
RCODE FLMAPI f_pathReduce(
const char * pszSourcePath,
char * pszDestPath,
char * pszString);
RCODE FLMAPI f_pathAppend(
char * pszPath,
const char * pszPathComponent);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_FileHdl : virtual public F_Object
{
virtual RCODE FLMAPI flush( void) = 0;
virtual RCODE FLMAPI read(
FLMUINT64 ui64Offset,
FLMUINT uiLength,
void * pvBuffer,
FLMUINT * puiBytesRead
= NULL) = 0;
virtual RCODE FLMAPI read(
FLMUINT64 ui64ReadOffs
et,
FLMUINT uiBytesToRea
d,
IF_IOBuffer * pIOBuffer) = 0;
virtual RCODE FLMAPI write(
FLMUINT64 ui64Offset,
FLMUINT uiLength,
const void * pvBuffer,
FLMUINT * puiBytesWrit
ten = NULL) = 0;
virtual RCODE FLMAPI write(
FLMUINT64 ui64WriteOff
set,
FLMUINT uiBytesToWri
te,
IF_IOBuffer * pIOBuffer) = 0;
virtual RCODE FLMAPI seek(
FLMUINT64 ui64Offset,
FLMINT iWhence,
FLMUINT64 * pui64NewOffs
et = NULL) = 0;
virtual RCODE FLMAPI size(
FLMUINT64 * pui64Size) =
0;
virtual RCODE FLMAPI tell(
FLMUINT64 * pui64Offset)
= 0;
virtual RCODE FLMAPI extendFile(
FLMUINT64 ui64FileSize
) = 0;
virtual RCODE FLMAPI truncateFile(
FLMUINT64 ui64FileSize
= 0) = 0;
virtual RCODE FLMAPI closeFile( void) = 0;
virtual FLMBOOL FLMAPI canDoAsync( void) = 0;
virtual FLMBOOL FLMAPI canDoDirectIO( void) = 0;
virtual void FLMAPI setExtendSize(
FLMUINT uiExtendSize
) = 0;
virtual void FLMAPI setMaxAutoExtendSize(
FLMUINT uiMaxAutoExt
endSize) = 0;
virtual FLMUINT FLMAPI getSectorSize( void) = 0;
virtual FLMBOOL FLMAPI isReadOnly( void) = 0;
virtual FLMBOOL FLMAPI isOpen( void) = 0;
virtual RCODE FLMAPI lock( void) = 0;
virtual RCODE FLMAPI unlock( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_FileHdlCache : public F_Object
{
virtual RCODE FLMAPI openFile(
const char * pszFileName,
FLMUINT uiIoFlags,
IF_FileHdl ** ppFile) = 0;
virtual RCODE FLMAPI createFile(
const char * pszFileName,
FLMUINT uiIoFlags,
IF_FileHdl ** ppFile) = 0;
virtual void FLMAPI closeUnusedFiles(
FLMUINT uiUnusedTime
= 0) = 0;
virtual FLMUINT FLMAPI getOpenThreshold( void) = 0;
virtual RCODE FLMAPI setOpenThreshold(
FLMUINT uiMaxOpenFil
es) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_MultiFileHdl : public F_Object
{
virtual RCODE FLMAPI createFile(
const char * pszPath) = 0;
virtual RCODE FLMAPI createUniqueFile(
const char * pszPath,
const char * pszFileExtension) =
0;
virtual RCODE FLMAPI openFile(
const char * pszPath) = 0;
virtual RCODE FLMAPI deleteMultiFile(
const char * pszPath) = 0;
virtual RCODE FLMAPI flush( void) = 0;
virtual RCODE FLMAPI read(
FLMUINT64 ui64Offset,
FLMUINT uiLength,
void * pvBuffer,
FLMUINT * puiBytesRead
= NULL) = 0;
virtual RCODE FLMAPI write(
FLMUINT64 ui64Offset,
FLMUINT uiLength,
void * pvBuffer,
FLMUINT * puiBytesWrit
ten = NULL) = 0;
virtual RCODE FLMAPI getPath(
char * pszFilePath)
= 0;
virtual RCODE FLMAPI size(
FLMUINT64 * pui64FileSiz
e) = 0;
virtual RCODE FLMAPI truncateFile(
FLMUINT64 ui64Offset =
0) = 0;
virtual void FLMAPI closeFile(
FLMBOOL bDelete = FA
LSE) = 0;
};
RCODE FLMAPI FlmAllocMultiFileHdl(
IF_MultiFileHdl ** ppFileHdl);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_SuperFileClient : public F_Object
{
virtual FLMUINT FLMAPI getFileNumber(
FLMUINT uiBlockAddr)
= 0;
virtual FLMUINT FLMAPI getFileOffset(
FLMUINT uiBlockAddr)
= 0;
virtual FLMUINT FLMAPI getBlockAddress(
FLMUINT uiFileNumber
,
FLMUINT uiFileOffset
) = 0;
virtual RCODE FLMAPI getFilePath(
FLMUINT uiFileNumber
,
char * pszPath) = 0
;
virtual FLMUINT64 FLMAPI getMaxFileSize( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
class F_SuperFileHdl : public F_Object
{
public:
F_SuperFileHdl();
virtual ~F_SuperFileHdl();
RCODE FLMAPI setup(
IF_SuperFileClient * pSuperFileClient,
IF_FileHdlCache * pFileHdlCach
e,
FLMUINT uiFi
leOpenFlags,
FLMUINT uiFi
leCreateFlags);
RCODE FLMAPI createFile(
FLMUINT uiFileNumber
,
IF_FileHdl ** ppFileHdl = NULL);
RCODE FLMAPI getFileHdl(
FLMUINT uiFileNumber
,
FLMBOOL bGetForUpdat
e,
IF_FileHdl ** ppFileHdlRV);
RCODE FLMAPI readBlock(
FLMUINT uiBlkAddress
,
FLMUINT uiBytesToRea
d,
void * pvBuffer,
FLMUINT * puiBytesRead
);
RCODE FLMAPI writeBlock(
FLMUINT uiBlkAddress
,
FLMUINT uiBytesToWri
te,
const void * pvBuffer,
FLMUINT * puiBytesWrit
ten);
RCODE FLMAPI writeBlock(
FLMUINT uiBlkAddress
,
FLMUINT uiBytesToWri
te,
IF_IOBuffer * pIOBuffer);
RCODE FLMAPI getFilePath(
FLMUINT uiFileNumber
,
char * pszPath);
RCODE FLMAPI getFileSize(
FLMUINT uiFileNumber
,
FLMUINT64 * pui64FileSiz
e);
RCODE FLMAPI releaseFiles( void);
RCODE FLMAPI allocateBlocks(
FLMUINT uiStartAddre
ss,
FLMUINT uiEndAddress
);
RCODE FLMAPI truncateFile(
FLMUINT uiEOFBlkAddr
ess);
RCODE FLMAPI truncateFile(
FLMUINT uiFileNumber
,
FLMUINT uiOffset);
void FLMAPI truncateFiles(
FLMUINT uiStartFileN
um,
FLMUINT uiEndFileNum
);
RCODE FLMAPI flush( void);
FINLINE void FLMAPI setExtendSize(
FLMUINT uiExtendSize)
{
m_uiExtendSize = uiExtendSize;
}
FINLINE void FLMAPI setMaxAutoExtendSize(
FLMUINT uiMaxAutoExtendSize)
{
m_uiMaxAutoExtendSize = uiMaxAutoExtendSize;
}
FLMBOOL FLMAPI canDoAsync( void);
FLMBOOL FLMAPI canDoDirectIO( void);
private:
IF_SuperFileClient * m_pSuperFileClient;
IF_FileHdlCache * m_pFileHdlCache;
IF_FileHdl * m_pCFileHdl;
IF_FileHdl * m_pBlockFileHdl;
FLMBOOL m_bCFileDirt
y;
FLMBOOL m_bBlockFile
Dirty;
FLMUINT m_uiBlockFil
eNum;
FLMUINT m_uiMaxFileS
ize;
FLMUINT m_uiExtendSi
ze;
FLMUINT m_uiMaxAutoE
xtendSize;
FLMUINT m_uiFileOpen
Flags;
FLMUINT m_uiFileCrea
teFlags;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_AsyncClient : virtual public F_Object
{
virtual RCODE FLMAPI waitToComplete( void) = 0;
virtual RCODE FLMAPI getCompletionCode( void) = 0;
virtual FLMUINT FLMAPI getElapsedTime( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
typedef void (FLMAPI * F_BUFFER_COMPLETION_FUNC)(IF_IOBuffer *, void
*);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_IOBuffer : virtual public F_Object
{
virtual FLMBYTE * FLMAPI getBufferPtr( void) = 0;
virtual FLMUINT FLMAPI getBufferSize( void) = 0;
virtual void FLMAPI setCompletionCallback(
F_BUFFER_COMPLETION_FUNC fnCompletion,
void *
pvData) = 0;
virtual RCODE FLMAPI addCallbackData(
void *
pvData) = 0;
virtual void * FLMAPI getCallbackData(
FLMUINT
uiSlot) = 0;
virtual FLMUINT FLMAPI getCallbackDataCount( void) = 0;
virtual void FLMAPI setAsyncClient(
IF_AsyncClient * pAsy
ncClient) = 0;
virtual void FLMAPI notifyComplete(
RCODE
completionRc) = 0;
virtual void FLMAPI setPending( void) = 0;
virtual void FLMAPI clearPending( void) = 0;
virtual FLMBOOL FLMAPI isPending( void) = 0;
virtual FLMBOOL FLMAPI isComplete( void) = 0;
virtual RCODE FLMAPI waitToComplete( void) = 0;
virtual RCODE FLMAPI getCompletionCode( void) = 0;
virtual FLMUINT FLMAPI getElapsedTime( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_IOBufferMgr : public F_Object
{
virtual RCODE FLMAPI getBuffer(
FLMUINT uiBufferSize
,
IF_IOBuffer ** ppIOBuffer) = 0;
virtual FLMBOOL FLMAPI isIOPending( void) = 0;
virtual RCODE FLMAPI waitForAllPendingIO( void) = 0;
};
RCODE FLMAPI FlmAllocIOBufferMgr(
FLMUINT uiMaxBuffers,
FLMUINT uiMaxBytes,
FLMBOOL bReuseBuffers,
IF_IOBufferMgr ** ppIOBufferMgr);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_DirHdl : public F_Object
{
virtual RCODE FLMAPI next( void) = 0;
virtual const char * FLMAPI currentItemName( void) = 0;
virtual void FLMAPI currentItemPath(
char * pszPath) = 0
;
virtual FLMUINT64 FLMAPI currentItemSize( void) = 0;
virtual FLMBOOL FLMAPI currentItemIsDir( void) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_ResultSetCompare : public F_Object
{
virtual RCODE FLMAPI compare(
const void * pvData1,
FLMUINT uiLength1,
const void * pvData2,
FLMUINT uiLength2,
FLMINT * piCo
mpare) = 0;
};
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_ResultSetSortStatus : public F_Object
{
virtual RCODE FLMAPI reportSortStatus(
FLMUINT64 ui64EstTotal
Units,
FLMUINT64 ui64UnitsDon
e) = 0;
};
#define RS_POSITION_NOT_SET FLM_MAX_UINT64
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_ResultSet : public F_Object
{
virtual RCODE FLMAPI setupResultSet(
const char * pszPath,
IF_ResultSetCompare * pCompare,
FLMUINT uiEn
trySize,
FLMBOOL bDro
pDuplicates = TRUE,
FLMBOOL bEnt
riesInOrder = FALSE,
const char * pszFileName
= NULL) = 0;
virtual FLMUINT64 FLMAPI getTotalEntries( void) = 0;
virtual RCODE FLMAPI addEntry(
const void * pvEntry,
FLMUINT uiEntryLengt
h = 0) = 0;
virtual RCODE FLMAPI finalizeResultSet(
IF_ResultSetSortStatus * pSortStatus = NULL,
FLMUINT64 *
pui64TotalEntries = NULL) = 0;
virtual RCODE FLMAPI getFirst(
void * pvEntryBuffe
r,
FLMUINT uiBufferLeng
th = 0,
FLMUINT * puiEntryLeng
th = NULL) = 0;
virtual RCODE FLMAPI getNext(
void * pvEntryBuffe
r,
FLMUINT uiBufferLeng
th = 0,
FLMUINT * puiEntryLeng
th = NULL) = 0;
virtual RCODE FLMAPI getLast(
void * pvEntryBuffe
r,
FLMUINT uiBufferLeng
th = 0,
FLMUINT * puiEntryLeng
th = NULL) = 0;
virtual RCODE FLMAPI getPrev(
void * pvEntryBuffe
r,
FLMUINT uiBufferLeng
th = 0,
FLMUINT * puiEntryLeng
th = NULL) = 0;
virtual RCODE FLMAPI getCurrent(
void * pvEntryBuffe
r,
FLMUINT uiBufferLeng
th = 0,
FLMUINT * puiEntryLeng
th = NULL) = 0;
virtual RCODE FLMAPI findMatch(
const void * pvMatchEntry,
void * pvFoundEntry
) = 0;
virtual RCODE FLMAPI findMatch(
const void * pvMatchEntry,
FLMUINT uiMatchEntry
Length,
void * pvFoundEntry
,
FLMUINT * puiFoundEntr
yLength) = 0;
virtual RCODE FLMAPI modifyCurrent(
const void * pvEntry,
FLMUINT uiEntryLengt
h = 0) = 0;
virtual FLMUINT64 FLMAPI getPosition( void) = 0;
virtual RCODE FLMAPI setPosition(
FLMUINT64 ui64Position
) = 0;
virtual RCODE FLMAPI resetResultSet(
FLMBOOL bDelete = TR
UE) = 0;
virtual RCODE FLMAPI flushToFile( void) = 0;
};
RCODE FLMAPI FlmAllocResultSet(
IF_ResultSet ** ppResultSet);
/*******************************************************************
**********
Desc:
********************************************************************
*********/
flminterface FLMEXP IF_BTreeResultSet : public F_Object
{
virtual RCODE FLMAPI addEntry(
FLMBYTE * pucKey,
FLMUINT uiKeyLength,
FLMBYTE * pucEntry,
FLMUINT uiEntryLengt
h) = 0;
virtual RCODE FLMAPI modifyEntry(
FLMBYTE * pucKey,
FLMUINT uiKeyLength,
FLMBYTE * pucEntry,
FLMUINT uiEntryLengt
h) = 0;
virtual RCODE FLMAPI getCurrent(
FLMBYTE * pucKey,
FLMUINT uiKeyLength,
FLMBYTE * pucEntry,
FLMUINT uiEntryLengt
h,
FLMUINT * puiReturnLen
gth) = 0;
virtual RCODE FLMAPI getNext(
FLMBYTE * pucKey,
FLMUINT uiKeyBufLen,
FLMUINT * puiKeylen,
FLMBYTE * pucBuffer,
FLMUINT uiBufferLeng
th,
FLMUINT * puiReturnLen
gth) = 0;
virtual RCODE FLMAPI getPrev(
FLMBYTE * pucKey,
FLMUINT uiKeyBufLen,
FLMUINT * puiKeylen,
FLMBYTE * pucBuffer,
FLMUINT uiBufferLeng
th,
FLMUINT * puiReturnLen
gth) = 0;
virtual RCODE FLMAPI getFirst(
FLMBYTE * pucKey,
FLMUINT uiKeyBufLen,
FLMUINT * puiKeylen,
FLMBYTE * pucBuffer,
FLMUINT uiBufferLeng
th,
FLMUINT * puiReturnLen
gth) = 0;
virtual RCODE FLMAPI getLast(
FLMBYTE * pucKey,
FLMUINT uiKeyBufLen,
FLMUINT * puiKeylen,
FLMBYTE * pucBuffer,
FLMUINT uiBufferLeng
th,
FLMUINT * puiReturnLen
gth) = 0;
virtual RCODE FLMAPI findEntry(
FLMBYTE * pucKey,
FLMUINT uiKeyBufLen,
FLMUINT * puiKeylen,
FLMBYTE * pucBuffer,
FLMUINT uiBufferLeng
th,
FLMUINT * puiReturnLen
gth) = 0;
virtual RCODE FLMAPI deleteEntry(
FLMBYTE * pucKey,
FLMUINT uiKeyLength)
= 0;
};
/*******************************************************************
*********
Desc: Random numbers
********************************************************************
********/
#define FLM_MAX_RANDOM ((FLMUINT32)2147483646)
flminterface FLMEXP IF_RandomGenerator : public F_Object
{
virtual void FLMAPI randomize( void) = 0;
virtual void FLMAPI setSeed(
FLMUINT32 ui32seed) =
0;
virtual FLMUINT32 FLMAPI getSeed( void) = 0;
virtual FLMUINT32 FLMAPI getUINT32(
FLMUINT32 ui32Low = 0,
FLMUINT32 ui32High = F
LM_MAX_RANDOM) = 0;
virtual FLMBOOL FLMAPI getBoolean( void) = 0;
};
RCODE FLMAPI FlmAllocRandomGenerator(
IF_RandomGenerator ** ppRandomGenerator);
FLMUINT32 FLMAPI f_getRandomUINT32(
FLMUINT32 ui32Low = 0,
FLMUINT32 ui32High = F
LM_MAX_RANDOM);
FLMBYTE FLMAPI f_getRandomByte( void);
/*******************************************************************
***
Desc: Atomic operations
********************************************************************
**/
FLMINT32 FLMAPI f_atomicInc(
FLMATOMIC * piTarget);
FLMINT32 FLMAPI f_atomicDec(
FLMATOMIC * piTarget);
FLMINT32 FLMAPI f_atomicExchange(
FLMATOMIC * piTarget,
FLMINT32 i32N
ewVal);
/*******************************************************************
*********
Desc: Mutexes
********************************************************************
********/
typedef void * F_MUTEX;
#define F_MUTEX_NULL NULL
RCODE FLMAPI f_mutexCreate(
F_MUTEX * phMutex);
void FLMAPI f_mutexDestroy(
F_MUTEX * phMutex);
void FLMAPI f_mutexLock(
F_MUTEX hMutex);
void FLMAPI f_mutexUnlock(
F_MUTEX hMutex);
#ifdef FLM_DEBUG
void FLMAPI f_assertMutexLocked(
F_MUTEX hMutex);
#else
#define f_assertMutexLocked( h) (void)(h)
#endif
#ifdef FLM_DEBUG
void FLMAPI f_assertMutexNotLocked(
F_MUTEX hMutex);
#else
#define f_assertMutexNotLocked( h) (void)(h)
#endif
/*******************************************************************
*********
Desc: Semaphores
********************************************************************
********/
typedef void * F_SEM;
#define F_SEM_NULL NULL
RCODE FLMAPI f_semCreate(
F_SEM * phSem);
void FLMAPI f_semDestroy(
F_SEM * phSem);
RCODE FLMAPI f_semWait(
F_SEM hSem
,
FLMUINT uiTimeout);
void FLMAPI f_semSignal(
F_SEM hSem
);
FLMUINT FLMAPI f_semGetSignalCount(
F_SEM hSem
);
/*******************************************************************
*********
Desc: Notify Lists
********************************************************************
********/
typedef struct F_NOTIFY_LIST_ITEM
{
F_NOTIFY_LIST_ITEM * pNext; ///< Pointer
to next F_NOTIFY_LIST_ITEM structure in list.
FLMUINT uiThreadId;
///< ID of thread requesting the notify
RCODE * pRc;
///< Pointer to a return code variable that is to
///< be filled in when the operation is
completed.
///< The thread requesting notification
supplies
///< the return code variable to be fil
led in.
void * pvData;
///< Data that is passed through to a custom
///< notify routine
F_SEM hSem
; ///< Semaphore that will be signaled when the
///< operation is complete.
} F_NOTIFY_LIST_ITEM;
RCODE FLMAPI f_notifyWait(
F_MUTEX hMutex,
F_SEM hSem
,
void * pvData,
F_NOTIFY_LIST_ITEM ** ppNotifyList);
void FLMAPI f_notifySignal(
F_NOTIFY_LIST_ITEM * pNotifyList,
RCODE noti
fyRc);
/*******************************************************************
*********
Desc: Reader / Writer Locks
********************************************************************
********/
typedef void * F_RWLOCK;
#define F_RWLOCK_NULL NULL
RCODE FLMAPI f_rwlockCreate(
F_RWLOCK * phReadWriteL
ock);
void FLMAPI f_rwlockDestroy(
F_RWLOCK * phReadWriteL
ock);
RCODE FLMAPI f_rwlockAcquire(
F_RWLOCK hRea
dWriteLock,
F_SEM hSem
,
FLMBOOL bWriter);
RCODE FLMAPI f_rwlockPromote(
F_RWLOCK hRea
dWriteLock,
F_SEM hSem
);
RCODE FLMAPI f_rwlockRelease(
F_RWLOCK hRea
dWriteLock);
/*******************************************************************
*********
Desc: Thread manager
********************************************************************
********/
flminterface FLMEXP IF_ThreadMgr : public F_Object
{
virtual RCODE FLMAPI setupThreadMgr( void) = 0;
virtual RCODE FLMAPI createThread(
IF_Thread ** ppThread,
F_THREAD_FUNC fnThread,
const char * pszThreadName = NULL
,
FLMUINT uiThreadGrou
p = 0,
FLMUINT uiAppId = 0,
void * pvParm1 = NU
LL,
void * pvParm2 = NU
LL,
FLMUINT uiStackSize
= F_THREAD_DEFAULT_STACK_SIZE) = 0;
virtual void FLMAPI shutdownThreadGroup(
FLMUINT uiThreadGrou
p) = 0;
virtual void FLMAPI setThreadShutdownFlag(
FLMUINT uiThreadId)
= 0;
virtual RCODE FLMAPI findThread(
IF_Thread ** ppThread,
FLMUINT uiThreadGrou
p,
FLMUINT uiAppId = 0,
FLMBOOL bOkToFindMe
= TRUE) = 0;
virtual RCODE FLMAPI getNextGroupThread(
IF_Thread ** ppThread,
FLMUINT uiThreadGrou
p,
FLMUINT * puiThreadId)
= 0;
virtual RCODE FLMAPI getThreadInfo(
F_Pool * pPoo
l,
F_THREAD_INFO ** ppThreadInfo,
FLMUINT * puiNumThread
s) = 0;
virtual RCODE FLMAPI getThreadName(
FLMUINT uiThreadId,
char * pszThreadNam
e,
FLMUINT * puiLength) =
0;
virtual FLMUINT FLMAPI getThreadGroupCount(
FLMUINT uiThreadGrou
p) = 0;
virtual FLMUINT FLMAPI allocGroupId( void) = 0;
};
RCODE FLMAPI FlmGetThreadMgr(
IF_ThreadMgr ** ppThreadMgr);
/*******************************************************************
*********
Desc: Thread
********************************************************************
********/
flminterface FLMEXP IF_Thread : public F_Object
{
virtual RCODE FLMAPI startThread(
F_THREAD_FUNC fnThread,
const char * pszThreadName = NULL
,
FLMUINT uiThreadGrou
p = F_DEFAULT_THREAD_GROUP,
FLMUINT uiAppId = 0,
void * pvParm1 = NU
LL,
void * pvParm2 = NU
LL,
FLMUINT uiStackSize = F_THREAD_DEFAU
LT_STACK_SIZE) = 0;
virtual void FLMAPI stopThread( void) = 0;
virtual FLMUINT FLMAPI getThreadId( void) = 0;
virtual FLMBOOL FLMAPI getShutdownFlag( void) = 0;
virtual RCODE FLMAPI getExitCode( void) = 0;
virtual void * FLMAPI getParm1( void) = 0;
virtual void FLMAPI setParm1(
void * pvParm) = 0;
virtual void * FLMAPI getParm2( void) = 0;
virtual void FLMAPI setParm2(
void * pvParm) = 0;
virtual void FLMAPI setShutdownFlag( void) = 0;
virtual FLMBOOL FLMAPI isThreadRunning( void) = 0;
virtual void FLMAPI setThreadStatusStr(
const char * pszStatus) = 0;
virtual void FLMAPI setThreadStatus(
const char * pszBuffer, ...) = 0;
virtual void FLMAPI setThreadStatus(
eThreadStatus genericStatus) = 0;
virtual void FLMAPI setThreadAppId(
FLMUINT uiAppId) = 0
;
virtual FLMUINT FLMAPI getThreadAppId( void) = 0;
virtual FLMUINT FLMAPI getThreadGroup( void) = 0;
virtual void FLMAPI cleanupThread( void) = 0;
virtual void FLMAPI sleep(
FLMUINT uiMillisecon
ds) = 0;
virtual void FLMAPI waitToComplete( void) = 0;
};
RCODE FLMAPI f_threadCreate(
IF_Thread ** ppThread,
F_THREAD_FUNC fnThread,
const char * pszThreadName = NULL,
FLMUINT uiThreadGroup = F_DE
FAULT_THREAD_GROUP,
FLMUINT uiAppId = 0,
void * pvParm1 = NULL,
void * pvParm2 = NULL,
FLMUINT uiStackSize = F_THRE
AD_DEFAULT_STACK_SIZE);
void FLMAPI f_threadDestroy(
IF_Thread ** ppThread);
FLMUINT FLMAPI f_threadId( void);
/*******************************************************************
*********
Desc:
********************************************************************
********/
flminterface FLMEXP IF_IniFile : public F_Object
{
virtual RCODE FLMAPI read(
const char * pszFileName) = 0;
virtual RCODE FLMAPI write( void) = 0;
virtual FLMBOOL FLMAPI getParam(
const char * pszParamName,
FLMUINT * puiParamVal)
= 0;
virtual FLMBOOL FLMAPI getParam(
const char * pszParamName,
FLMBOOL * pbParamVal)
= 0;
virtual FLMBOOL FLMAPI getParam(
const char * pszParamName,
char ** ppszParamVal
) = 0;
virtual RCODE FLMAPI setParam(
const char * pszParamName,
FLMUINT uiPa
ramVal) = 0;
virtual RCODE FLMAPI setParam(
const char * pszParamName,
FLMBOOL bParamVal) =
0;
virtual RCODE FLMAPI setParam(
const char * pszParamName,
const char * pszParamVal) = 0;
virtual FLMBOOL FLMAPI testParam(
const char * pszParamName) = 0;
};
RCODE FLMAPI FlmAllocIniFile(
IF_IniFile ** ppIniFile);
/*******************************************************************
*********
Desc: Serial numbers
********************************************************************
********/
RCODE FLMAPI f_createSerialNumber(
FLMBYTE * pszSerialNum
ber);
#define F_SERIAL_NUM_SIZE 16
/*******************************************************************
*********
Desc: Checksum
********************************************************************
********/
void FLMAPI f_updateCRC(
const void * pvBuffer,
FLMUINT uiLength,
FLMUINT32 * pui32CRC);
FLMUINT32 FLMAPI f_calcFastChecksum(
const void * pvBuffer,
FLMUINT uiLength,
FLMUINT * puiSum = NUL
L,
FLMUINT * puiXOR = NUL
L);
FLMBYTE FLMAPI f_calcPacketChecksum(
const void * pvPacket,
FLMUINT uiBytesToChe
cksum);
/*******************************************************************
*********
Desc:
********************************************************************
********/
char * FLMAPI f_uwtoa(
FLMUINT16 value,
char * ptr);
char * FLMAPI f_udtoa(
FLMUINT value,
char * ptr);
char * FLMAPI f_wtoa(
FLMINT16 valu
e,
char * ptr);
char * FLMAPI f_dtoa(
FLMINT value,
char * ptr);
char * FLMAPI f_ui64toa(
FLMUINT64 value,
char * ptr);
char * FLMAPI f_i64toa(
FLMINT64 valu
e,
char * ptr);
FLMINT FLMAPI f_atoi(
const char * ptr);
FLMINT FLMAPI f_atol(
const char * ptr);
FLMINT FLMAPI f_atod(
const char * ptr);
FLMUINT FLMAPI f_atoud(
const char * ptr,
FLMBOOL bAllowUnpref
ixedHex = FALSE);
FLMUINT64 FLMAPI f_atou64(
const char * pszBuf);
FLMUINT FLMAPI f_unilen(
const FLMUNICODE * puzStr);
FLMUNICODE * FLMAPI f_unicpy(
FLMUNICODE * puzDestStr,
const FLMUNICODE * puzSrcStr);
FLMBOOL FLMAPI f_uniIsUpper(
FLMUNICODE uChar);
FLMBOOL FLMAPI f_uniIsLower(
FLMUNICODE uChar);
FLMBOOL FLMAPI f_uniIsAlpha(
FLMUNICODE uChar);
FLMBOOL FLMAPI f_uniIsDecimalDigit(
FLMUNICODE uChar);
FLMUNICODE FLMAPI f_uniToLower(
FLMUNICODE uChar);
FLMINT FLMAPI f_unicmp(
const FLMUNICODE * puzStr1,
const FLMUNICODE * puzStr2);
FLMINT FLMAPI f_uniicmp(
const FLMUNICODE * puzStr1,
const FLMUNICODE * puzStr2);
FLMINT FLMAPI f_uninativecmp(
const FLMUNICODE * puzStr1,
const char * pszStr2);
FLMINT FLMAPI f_uninativencmp(
const FLMUNICODE * puzStr1,
const char * pszStr2,
FLMUINT uiCount);
RCODE FLMAPI f_nextUCS2Char(
const FLMBYTE ** ppszUTF8,
const FLMBYTE * pszEndOfUTF8String,
FLMUNICODE * puzChar);
RCODE FLMAPI f_numUCS2Chars(
const FLMBYTE * pszUTF8,
FLMUINT * puiNumChars)
;
FLMBOOL FLMAPI f_isWhitespace(
FLMUNICODE ucChar);
FLMUNICODE FLMAPI f_convertChar(
FLMUNICODE uzChar,
FLMUINT uiCompareRul
es);
RCODE FLMAPI f_wpToUnicode(
FLMUINT16 ui16WPChar,
FLMUNICODE * puUniChar);
FLMBOOL FLMAPI f_unicodeToWP(
FLMUNICODE uUniChar,
FLMUINT16 * pui16WPChar)
;
FLMBOOL FLMAPI f_depricatedUnicodeToWP(
FLMUNICODE uUniChar,
FLMUINT16 * pui16WPChar)
;
FLMUINT16 FLMAPI f_wpUpper(
FLMUINT16 ui16WpChar);
FLMBOOL FLMAPI f_wpIsUpper(
FLMUINT16 ui16WpChar);
FLMUINT16 FLMAPI f_wpLower(
FLMUINT16 ui16WpChar);
FLMBOOL FLMAPI f_breakWPChar(
FLMUINT16 ui16WpChar,
FLMUINT16 * pui16BaseCha
r,
FLMUINT16 * pui16Diacrit
icChar);
FLMBOOL FLMAPI f_combineWPChar(
FLMUINT16 * pui16WpChar,
FLMUINT16 ui16BaseChar
,
FLMINT16 ui16
DiacriticChar);
FLMUINT16 FLMAPI f_wpGetCollationImp(
FLMUINT16 ui16WpChar,
FLMUINT uiLanguage);
FINLINE FLMUINT16 FLMAPI f_wpGetCollation(
FLMUINT16 ui16WpChar,
FLMUINT uiLanguage)
{
if( uiLanguage == FLM_US_LANG)
{
return( gv_pui16USCollationTable[ ui16WpChar]);
}
return( f_wpGetCollationImp( ui16WpChar, uiLanguage));
}
RCODE FLMAPI f_wpCheckDoubleCollation(
IF_PosIStream * pIStream,
FLMBOOL bUnicodeStre
am,
FLMBOOL bAllowTwoInt
oOne,
FLMUNICODE * puzChar,
FLMUNICODE * puzChar2,
FLMBOOL * pbTwoIntoOne
,
FLMUINT uiLanguage);
FLMUINT16 FLMAPI f_wpCheckDoubleCollation(
FLMUINT16 * pui16WpChar,
FLMBOOL * pbTwoIntoOne
,
const FLMBYTE ** ppucInputStr,
FLMUINT uiLanguage);
FLMUINT16 FLMAPI f_wpHanToZenkaku(
FLMUINT16 ui16WpChar,
FLMUINT16 ui16NextWpCh
ar,
FLMUINT16 * pui16Zenkaku
);
FLMUINT16 FLMAPI f_wpZenToHankaku(
FLMUINT16 ui16WpChar,
FLMUINT16 * pui16DakutenOrHandak
uten);
FLMUINT FLMAPI f_wpToMixed(
FLMBYTE * pucWPStr,
FLMUINT uiWPStrLen,
const FLMBYTE * pucLowUpBitStr,
FLMUINT uiLang);
RCODE FLMAPI f_asiaParseSubCol(
FLMBYTE * pucWPStr,
FLMUINT * puiWPStrLen,
FLMUINT uiMaxWPBytes,
const FLMBYTE * pucSubColBuf,
FLMUINT * puiSubColBitPos);
RCODE FLMAPI f_asiaColStr2WPStr(
const FLMBYTE * pucColStr,
FLMUINT uiColStrLen,
FLMBYTE * pucWPStr,
FLMUINT * puiWPStrLen,
FLMUINT * puiUnconvCha
rs,
FLMBOOL * pbDataTrunca
ted,
FLMBOOL * pbFirstSubst
ring);
RCODE FLMAPI f_colStr2WPStr(
const FLMBYTE * pucColStr,
FLMUINT uiColStrLen,
FLMBYTE * pucWPStr,
FLMUINT * puiWPStrLen,
FLMUINT uiLang,
FLMUINT * puiUnconvCha
rs,
FLMBOOL * pbDataTrunca
ted,
FLMBOOL * pbFirstSubst
ring);
RCODE FLMAPI f_asiaUTF8ToColText(
IF_PosIStream * pIStream,
FLMBYTE * pucColStr,
FLMUINT * puiColStrLen
,
FLMBOOL bCaseInsensi
tive,
FLMUINT * puiCollation
Len,
FLMUINT * puiCaseLen,
FLMUINT uiCharLimit,
FLMBOOL bFirstSubstr
ing,
FLMBOOL bDataTruncat
ed,
FLMBOOL * pbDataTrunca
ted);
RCODE FLMAPI f_compareUTF8Strings(
const FLMBYTE * pucLString,
FLMUINT uiLStrBytes,
FLMBOOL bLeftWild,
const FLMBYTE * pucRString,
FLMUINT uiRStrBytes,
FLMBOOL bRightWild,
FLMUINT uiCompareRul
es,
FLMUINT uiLanguage,
FLMINT * piRe
sult);
RCODE FLMAPI f_compareUTF8Streams(
IF_PosIStream * pLStream,
FLMBOOL bLeftWild,
IF_PosIStream * pRStream,
FLMBOOL bRightWild,
FLMUINT uiCompareRul
es,
FLMUINT uiLanguage,
FLMINT * piRe
sult);
RCODE FLMAPI f_compareUnicodeStrings(
const FLMUNICODE * puzLString,
FLMUINT uiLStrBytes,
FLMBOOL bLeftWild,
const FLMUNICODE * puzRString,
FLMUINT uiRStrBytes,
FLMBOOL bRightWild,
FLMUINT uiCompareRul
es,
FLMUINT uiLanguage,
FLMINT * piRe
sult);
RCODE FLMAPI f_compareUnicodeStreams(
IF_PosIStream * pLStream,
FLMBOOL bLeftWild,
IF_PosIStream * pRStream,
FLMBOOL bRightWild,
FLMUINT uiCompareRul
es,
FLMUINT uiLanguage,
FLMINT * piRe
sult);
RCODE FLMAPI f_compareCollStreams(
IF_CollIStream * pLStream,
IF_CollIStream * pRStream,
FLMBOOL bOpIsMatch,
FLMUINT uiLanguage,
FLMINT * piRe
sult);
RCODE FLMAPI f_utf8IsSubStr(
const FLMBYTE * pszString,
const FLMBYTE * pszSubString,
FLMUINT uiCompareRul
es,
FLMUINT uiLanguage,
FLMBOOL * pbExists);
RCODE FLMAPI f_readUTF8CharAsUnicode(
IF_IStream * pStream,
FLMUNICODE * puChar);
RCODE FLMAPI f_readUTF8CharAsUTF8(
IF_IStream * pIStream,
FLMBYTE * pucBuf,
FLMUINT * puiLen);
RCODE FLMAPI f_formatUTF8Text(
IF_PosIStream * pIStream,
FLMBOOL bAllowEscape
s,
FLMUINT uiCompareRul
es,
F_DynaBuf * pDynaBuf);
RCODE FLMAPI f_getNextMetaphone(
IF_IStream * pIStream,
FLMUINT * puiMetaphone
,
FLMUINT * puiAltMetaph
one = NULL);
FLMUINT FLMAPI f_getSENLength(
FLMBYTE ucBy
te);
FLMUINT FLMAPI f_getSENByteCount(
FLMUINT64 ui64Num);
FLMUINT FLMAPI f_encodeSEN(
FLMUINT64 ui64Value,
FLMBYTE ** ppucBuffer,
FLMUINT uiBytesWante
d = 0);
RCODE FLMAPI f_encodeSEN(
FLMUINT64 ui64Value,
FLMBYTE ** ppucBuffer,
FLMBYTE * pucEnd);
FLMUINT FLMAPI f_encodeSENKnownLength(
FLMUINT64 ui64Value,
FLMUINT uiSenLen,
FLMBYTE ** ppucBuffer);
RCODE FLMAPI f_decodeSEN(
const FLMBYTE ** ppucBuffer,
const FLMBYTE * pucEnd,
FLMUINT * puiValue);
RCODE FLMAPI f_decodeSEN64(
const FLMBYTE ** ppucBuffer,
const FLMBYTE * pucEnd,
FLMUINT64 * pui64Value);
RCODE FLMAPI f_readSEN(
IF_IStream * pIStream,
FLMUINT * puiValue,
FLMUINT * puiLength =
NULL);
RCODE FLMAPI f_readSEN64(
IF_IStream * pIStream,
FLMUINT64 * pui64Value,
FLMUINT * puiLength =
NULL);
/// Get the language string from a language code
/// \ingroup language
FLMUINT FLMAPI f_languageToNum(
const char * pszLanguage);
/// Convert a language string to the appropriate language code.
/// \ingroup language
void FLMAPI f_languageToStr(
FLMINT iLangNum,
char * pszLanguage
///< Language string that is to be converted to a code.
);
/*******************************************************************
*********
Desc: ASCII character constants and macros
********************************************************************
********/
#define ASCII_TAB 0x09
#define ASCII_NEWLINE 0x0A
#define ASCII_CR 0x0D
#define ASCII_CTRLZ 0x1A
#define ASCII_SPACE 0x20
#define ASCII_DQUOTE 0x22
#define ASCII_POUND 0x23
#define ASCII_DOLLAR 0x24
#define ASCII_SQUOTE 0x27
#define ASCII_WILDCARD 0x2A
#define ASCII_PLUS 0x2B
#define ASCII_COMMA 0x2C
#define ASCII_DASH 0x2D
#define ASCII_MINUS 0x2D
#define ASCII_DOT 0x2E
#define ASCII_SLASH 0x2F
#define ASCII_COLON 0x3A
#define ASCII_SEMICOLON 0x3B
#define ASCII_EQUAL 0x3D
#define ASCII_QUESTIONMARK 0x3F
#define ASCII_AT 0x40
#define ASCII_BACKSLASH 0x5C
#define ASCII_CARAT 0x5E
#define ASCII_UNDERSCORE 0x5F
#define ASCII_TILDE 0x7E
#define ASCII_AMP 0x26
#define ASCII_UPPER_A 0x41
#define ASCII_UPPER_B 0x42
#define ASCII_UPPER_C 0x43
#define ASCII_UPPER_D 0x44
#define ASCII_UPPER_E 0x45
#define ASCII_UPPER_F 0x46
#define ASCII_UPPER_G 0x47
#define ASCII_UPPER_H 0x48
#define ASCII_UPPER_I 0x49
#define ASCII_UPPER_J 0x4A
#define ASCII_UPPER_K 0x4B
#define ASCII_UPPER_L 0x4C
#define ASCII_UPPER_M 0x4D
#define ASCII_UPPER_N 0x4E
#define ASCII_UPPER_O 0x4F
#define ASCII_UPPER_P 0x50
#define ASCII_UPPER_Q 0x51
#define ASCII_UPPER_R 0x52
#define ASCII_UPPER_S 0x53
#define ASCII_UPPER_T 0x54
#define ASCII_UPPER_U 0x55
#define ASCII_UPPER_V 0x56
#define ASCII_UPPER_W 0x57
#define ASCII_UPPER_X 0x58
#define ASCII_UPPER_Y 0x59
#define ASCII_UPPER_Z 0x5A
#define ASCII_LOWER_A 0x61
#define ASCII_LOWER_B 0x62
#define ASCII_LOWER_C 0x63
#define ASCII_LOWER_D 0x64
#define ASCII_LOWER_E 0x65
#define ASCII_LOWER_F 0x66
#define ASCII_LOWER_G 0x67
#define ASCII_LOWER_H 0x68
#define ASCII_LOWER_I 0x69
#define ASCII_LOWER_J 0x6A
#define ASCII_LOWER_K 0x6B
#define ASCII_LOWER_L 0x6C
#define ASCII_LOWER_M 0x6D
#define ASCII_LOWER_N 0x6E
#define ASCII_LOWER_O 0x6F
#define ASCII_LOWER_P 0x70
#define ASCII_LOWER_Q 0x71
#define ASCII_LOWER_R 0x72
#define ASCII_LOWER_S 0x73
#define ASCII_LOWER_T 0x74
#define ASCII_LOWER_U 0x75
#define ASCII_LOWER_V 0x76
#define ASCII_LOWER_W 0x77
#define ASCII_LOWER_X 0x78
#define ASCII_LOWER_Y 0x79
#define ASCII_LOWER_Z 0x7A
#define ASCII_ZERO 0x30
#define ASCII_ONE 0x31
#define ASCII_TWO 0x32
#define ASCII_THREE 0x33
#define ASCII_FOUR 0x34
#define ASCII_FIVE 0x35
#define ASCII_SIX 0x36
#define ASCII_SEVEN 0x37
#define ASCII_EIGHT 0x38
#define ASCII_NINE 0x39
/*******************************************************************
*********
Desc: Native character constants and macros
********************************************************************
********/
#define NATIVE_SPACE ' '
#define NATIVE_DOT '.'
#define NATIVE_PLUS '+'
#define NATIVE_MINUS '-'
#define NATIVE_WILDCARD '*'
#define NATIVE_QUESTIONMARK '?'
#define NATIVE_UPPER_A 'A'
#define NATIVE_UPPER_F 'F'
#define NATIVE_UPPER_X 'X'
#define NATIVE_UPPER_Z 'Z'
#define NATIVE_LOWER_A 'a'
#define NATIVE_LOWER_F 'f'
#define NATIVE_LOWER_X 'x'
#define NATIVE_LOWER_Z 'z'
#define NATIVE_ZERO '0'
#define NATIVE_NINE '9'
#define f_stringToAscii( str)
#define f_toascii( native) \
(native)
#define f_tonative( ascii) \
(ascii)
#define f_toupper( native) \
(((native) >= 'a' && (native) <= 'z') \
? (native) - 'a' + 'A' \
: (native))
#define f_tolower( native) \
(((native) >= 'A' && (native) <= 'Z') \
? (native) - 'A' + 'a' \
: (native))
#define f_islower( native) \
((native) >= 'a' && (native) <= 'z')
#ifndef FLM_ASCII_PLATFORM
#define FLM_ASCII_PLATFORM
#endif
/*******************************************************************
*********
Desc: Unicode character constants and macros
********************************************************************
********/
#define FLM_UNICODE_LINEFEED ((FLMUNICODE)10)
#define FLM_UNICODE_SPACE ((FLMUNICODE
)32)
#define FLM_UNICODE_BANG ((FLMUNICODE
)33)
#define FLM_UNICODE_QUOTE ((FLMUNICODE
)34)
#define FLM_UNICODE_POUND ((FLMUNICODE
)35)
#define FLM_UNICODE_DOLLAR ((FLMUNICODE
)36)
#define FLM_UNICODE_PERCENT ((FLMUNICODE)37)
#define FLM_UNICODE_AMP ((FLMUNICODE
)38)
#define FLM_UNICODE_APOS ((FLMUNICODE
)39)
#define FLM_UNICODE_LPAREN ((FLMUNICODE
)40)
#define FLM_UNICODE_RPAREN ((FLMUNICODE
)41)
#define FLM_UNICODE_ASTERISK ((FLMUNICODE)42)
#define FLM_UNICODE_PLUS ((FLMUNICODE
)43)
#define FLM_UNICODE_COMMA ((FLMUNICODE
)44)
#define FLM_UNICODE_HYPHEN ((FLMUNICODE
)45)
#define FLM_UNICODE_PERIOD ((FLMUNICODE
)46)
#define FLM_UNICODE_FSLASH ((FLMUNICODE
)47)
#define FLM_UNICODE_0 ((FLMUNICODE
)48)
#define FLM_UNICODE_1 ((FLMUNICODE
)49)
#define FLM_UNICODE_2 ((FLMUNICODE
)50)
#define FLM_UNICODE_3 ((FLMUNICODE
)51)
#define FLM_UNICODE_4 ((FLMUNICODE
)52)
#define FLM_UNICODE_5 ((FLMUNICODE
)53)
#define FLM_UNICODE_6 ((FLMUNICODE
)54)
#define FLM_UNICODE_7 ((FLMUNICODE
)55)
#define FLM_UNICODE_8 ((FLMUNICODE
)56)
#define FLM_UNICODE_9 ((FLMUNICODE
)57)
#define FLM_UNICODE_COLON ((FLMUNICODE
)58)
#define FLM_UNICODE_SEMI ((FLMUNICODE
)59)
#define FLM_UNICODE_LT ((FLMUNICODE
)60)
#define FLM_UNICODE_EQ ((FLMUNICODE
)61)
#define FLM_UNICODE_GT ((FLMUNICODE
)62)
#define FLM_UNICODE_QUEST ((FLMUNICODE
)63)
#define FLM_UNICODE_ATSIGN ((FLMUNICODE
)64)
#define FLM_UNICODE_A ((FLMUNICODE
)65)
#define FLM_UNICODE_B ((FLMUNICODE
)66)
#define FLM_UNICODE_C ((FLMUNICODE
)67)
#define FLM_UNICODE_D ((FLMUNICODE
)68)
#define FLM_UNICODE_E ((FLMUNICODE
)69)
#define FLM_UNICODE_F ((FLMUNICODE
)70)
#define FLM_UNICODE_G ((FLMUNICODE
)71)
#define FLM_UNICODE_H ((FLMUNICODE
)72)
#define FLM_UNICODE_I ((FLMUNICODE
)73)
#define FLM_UNICODE_J ((FLMUNICODE
)74)
#define FLM_UNICODE_K ((FLMUNICODE
)75)
#define FLM_UNICODE_L ((FLMUNICODE
)76)
#define FLM_UNICODE_M ((FLMUNICODE
)77)
#define FLM_UNICODE_N ((FLMUNICODE
)78)
#define FLM_UNICODE_O ((FLMUNICODE
)79)
#define FLM_UNICODE_P ((FLMUNICODE
)80)
#define FLM_UNICODE_Q ((FLMUNICODE
)81)
#define FLM_UNICODE_R ((FLMUNICODE
)82)
#define FLM_UNICODE_S ((FLMUNICODE
)83)
#define FLM_UNICODE_T ((FLMUNICODE
)84)
#define FLM_UNICODE_U ((FLMUNICODE
)85)
#define FLM_UNICODE_V ((FLMUNICODE
)86)
#define FLM_UNICODE_W ((FLMUNICODE
)87)
#define FLM_UNICODE_X ((FLMUNICODE
)88)
#define FLM_UNICODE_Y ((FLMUNICODE
)89)
#define FLM_UNICODE_Z ((FLMUNICODE
)90)
#define FLM_UNICODE_LBRACKET ((FLMUNICODE)91)
#define FLM_UNICODE_BACKSLASH ((FLMUNICODE)92)
#define FLM_UNICODE_RBRACKET ((FLMUNICODE)93)
#define FLM_UNICODE_UNDERSCORE ((FLMUNICODE)95)
#define FLM_UNICODE_a ((FLMUNICODE
)97)
#define FLM_UNICODE_b ((FLMUNICODE
)98)
#define FLM_UNICODE_c ((FLMUNICODE
)99)
#define FLM_UNICODE_d ((FLMUNICODE
)100)
#define FLM_UNICODE_e ((FLMUNICODE
)101)
#define FLM_UNICODE_f ((FLMUNICODE
)102)
#define FLM_UNICODE_g ((FLMUNICODE
)103)
#define FLM_UNICODE_h ((FLMUNICODE
)104)
#define FLM_UNICODE_i ((FLMUNICODE
)105)
#define FLM_UNICODE_j ((FLMUNICODE
)106)
#define FLM_UNICODE_k ((FLMUNICODE
)107)
#define FLM_UNICODE_l ((FLMUNICODE
)108)
#define FLM_UNICODE_m ((FLMUNICODE
)109)
#define FLM_UNICODE_n ((FLMUNICODE
)110)
#define FLM_UNICODE_o ((FLMUNICODE
)111)
#define FLM_UNICODE_p ((FLMUNICODE
)112)
#define FLM_UNICODE_q ((FLMUNICODE
)113)
#define FLM_UNICODE_r ((FLMUNICODE
)114)
#define FLM_UNICODE_s ((FLMUNICODE
)115)
#define FLM_UNICODE_t ((FLMUNICODE
)116)
#define FLM_UNICODE_u ((FLMUNICODE
)117)
#define FLM_UNICODE_v ((FLMUNICODE
)118)
#define FLM_UNICODE_w ((FLMUNICODE
)119)
#define FLM_UNICODE_x ((FLMUNICODE
)120)
#define FLM_UNICODE_y ((FLMUNICODE
)121)
#define FLM_UNICODE_z ((FLMUNICODE
)122)
#define FLM_UNICODE_LBRACE ((FLMUNICODE
)123)
#define FLM_UNICODE_PIPE ((FLMUNICODE
)124)
#define FLM_UNICODE_RBRACE ((FLMUNICODE
)125)
#define FLM_UNICODE_TILDE ((FLMUNICODE
)126)
#define FLM_UNICODE_C_CEDILLA ((FLMUNICODE)199)
#define FLM_UNICODE_N_TILDE ((FLMUNICODE)209)
#define FLM_UNICODE_c_CEDILLA ((FLMUNICODE)231)
#define FLM_UNICODE_n_TILDE ((FLMUNICODE)241)
FINLINE FLMBOOL f_isvowel(
FLMUNICODE uChar)
{
uChar = f_uniToLower( uChar);
if( uChar == FLM_UNICODE_a ||
uChar == FLM_UNICODE_e ||
uChar == FLM_UNICODE_i ||
uChar == FLM_UNICODE_o ||
uChar == FLM_UNICODE_u ||
uChar == FLM_UNICODE_y)
{
return( TRUE);
}
return( FALSE);
}
/*******************************************************************
*********
Desc: Endian macros
********************************************************************
********/
FINLINE FLMUINT16 f_littleEndianToUINT16(
const FLMBYTE * pucBuf)
{
FLMUINT16 ui16Val = 0;
ui16Val |= ((FLMUINT16)pucBuf[ 1]) << 8;
ui16Val |= ((FLMUINT16)pucBuf[ 0]);
return( ui16Val);
}
FINLINE FLMUINT32 f_littleEndianToUINT32(
const FLMBYTE * pucBuf)
{
FLMUINT32 ui32Val = 0;
ui32Val |= ((FLMUINT32)pucBuf[ 3]) << 24;
ui32Val |= ((FLMUINT32)pucBuf[ 2]) << 16;
ui32Val |= ((FLMUINT32)pucBuf[ 1]) << 8;
ui32Val |= ((FLMUINT32)pucBuf[ 0]);
return( ui32Val);
}
FINLINE FLMUINT64 f_littleEndianToUINT64(
const FLMBYTE * pucBuf)
{
FLMUINT64 ui64Val = 0;
ui64Val |= ((FLMUINT64)pucBuf[ 7]) << 56;
ui64Val |= ((FLMUINT64)pucBuf[ 6]) << 48;
ui64Val |= ((FLMUINT64)pucBuf[ 5]) << 40;
ui64Val |= ((FLMUINT64)pucBuf[ 4]) << 32;
ui64Val |= ((FLMUINT64)pucBuf[ 3]) << 24;
ui64Val |= ((FLMUINT64)pucBuf[ 2]) << 16;
ui64Val |= ((FLMUINT64)pucBuf[ 1]) << 8;
ui64Val |= ((FLMUINT64)pucBuf[ 0]);
return( ui64Val);
}
FINLINE void f_UINT16ToLittleEndian(
FLMUINT16 ui16Num,
FLMBYTE * pucBuf)
{
pucBuf[ 1] = (FLMBYTE) (ui16Num >> 8);
pucBuf[ 0] = (FLMBYTE) (ui16Num);
}
FINLINE void f_UINT32ToLittleEndian(
FLMUINT32 ui32Num,
FLMBYTE * pucBuf)
{
pucBuf[ 3] = (FLMBYTE) (ui32Num >> 24);
pucBuf[ 2] = (FLMBYTE) (ui32Num >> 16);
pucBuf[ 1] = (FLMBYTE) (ui32Num >> 8);
pucBuf[ 0] = (FLMBYTE) (ui32Num);
}
FINLINE void f_UINT64ToLittleEndian(
FLMUINT64 ui64Num,
FLMBYTE * pucBuf)
{
pucBuf[ 7] = (FLMBYTE) (ui64Num >> 56);
pucBuf[ 6] = (FLMBYTE) (ui64Num >> 48);
pucBuf[ 5] = (FLMBYTE) (ui64Num >> 40);
pucBuf[ 4] = (FLMBYTE) (ui64Num >> 32);
pucBuf[ 3] = (FLMBYTE) (ui64Num >> 24);
pucBuf[ 2] = (FLMBYTE) (ui64Num >> 16);
pucBuf[ 1] = (FLMBYTE) (ui64Num >> 8);
pucBuf[ 0] = (FLMBYTE) (ui64Num);
}
FINLINE FLMUINT16 f_bigEndianToUINT16(
const FLMBYTE * pucBuf)
{
FLMUINT16 ui16Val = 0;
ui16Val |= ((FLMUINT16)pucBuf[ 0]) << 8;
ui16Val |= ((FLMUINT16)pucBuf[ 1]);
return( ui16Val);
}
FINLINE FLMUINT32 f_bigEndianToUINT32(
const FLMBYTE * pucBuf)
{
FLMUINT32 ui32Val = 0;
ui32Val |= ((FLMUINT32)pucBuf[ 0]) << 24;
ui32Val |= ((FLMUINT32)pucBuf[ 1]) << 16;
ui32Val |= ((FLMUINT32)pucBuf[ 2]) << 8;
ui32Val |= ((FLMUINT32)pucBuf[ 3]);
return( ui32Val);
}
FINLINE FLMUINT64 f_bigEndianToUINT64(
const FLMBYTE * pucBuf)
{
FLMUINT64 ui64Val = 0;
ui64Val |= ((FLMUINT64)pucBuf[ 0]) << 56;
ui64Val |= ((FLMUINT64)pucBuf[ 1]) << 48;
ui64Val |= ((FLMUINT64)pucBuf[ 2]) << 40;
ui64Val |= ((FLMUINT64)pucBuf[ 3]) << 32;
ui64Val |= ((FLMUINT64)pucBuf[ 4]) << 24;
ui64Val |= ((FLMUINT64)pucBuf[ 5]) << 16;
ui64Val |= ((FLMUINT64)pucBuf[ 6]) << 8;
ui64Val |= ((FLMUINT64)pucBuf[ 7]);
return( ui64Val);
}
FINLINE FLMINT16 f_bigEndianToINT16(
const FLMBYTE * pucBuf)
{
FLMINT16 i16Val = 0;
i16Val |= ((FLMINT16)pucBuf[ 0]) << 8;
i16Val |= ((FLMINT16)pucBuf[ 1]);
return( i16Val);
}
FINLINE FLMINT32 f_bigEndianToINT32(
const FLMBYTE * pucBuf)
{
FLMINT32 i32Val = 0;
i32Val |= ((FLMINT32)pucBuf[ 0]) << 24;
i32Val |= ((FLMINT32)pucBuf[ 1]) << 16;
i32Val |= ((FLMINT32)pucBuf[ 2]) << 8;
i32Val |= ((FLMINT32)pucBuf[ 3]);
return( i32Val);
}
FINLINE FLMINT64 f_bigEndianToINT64(
const FLMBYTE * pucBuf)
{
FLMINT64 i64Val = 0;
i64Val |= ((FLMINT64)pucBuf[ 0]) << 56;
i64Val |= ((FLMINT64)pucBuf[ 1]) << 48;
i64Val |= ((FLMINT64)pucBuf[ 2]) << 40;
i64Val |= ((FLMINT64)pucBuf[ 3]) << 32;
i64Val |= ((FLMINT64)pucBuf[ 4]) << 24;
i64Val |= ((FLMINT64)pucBuf[ 5]) << 16;
i64Val |= ((FLMINT64)pucBuf[ 6]) << 8;
i64Val |= ((FLMINT64)pucBuf[ 7]);
return( i64Val);
}
FINLINE void f_UINT32ToBigEndian(
FLMUINT32 ui32Num,
FLMBYTE * pucBuf)
{
pucBuf[ 0] = (FLMBYTE) (ui32Num >> 24);
pucBuf[ 1] = (FLMBYTE) (ui32Num >> 16);
pucBuf[ 2] = (FLMBYTE) (ui32Num >> 8);
pucBuf[ 3] = (FLMBYTE) (ui32Num);
}
FINLINE void f_INT32ToBigEndian(
FLMINT32 i32Num,
FLMBYTE * pucBuf)
{
pucBuf[ 0] = (FLMBYTE) (i32Num >> 24);
pucBuf[ 1] = (FLMBYTE) (i32Num >> 16);
pucBuf[ 2] = (FLMBYTE) (i32Num >> 8);
pucBuf[ 3] = (FLMBYTE) (i32Num);
}
FINLINE void f_INT64ToBigEndian(
FLMINT64 i64Num,
FLMBYTE * pucBuf)
{
pucBuf[ 0] = (FLMBYTE) (i64Num >> 56);
pucBuf[ 1] = (FLMBYTE) (i64Num >> 48);
pucBuf[ 2] = (FLMBYTE) (i64Num >> 40);
pucBuf[ 3] = (FLMBYTE) (i64Num >> 32);
pucBuf[ 4] = (FLMBYTE) (i64Num >> 24);
pucBuf[ 5] = (FLMBYTE) (i64Num >> 16);
pucBuf[ 6] = (FLMBYTE) (i64Num >> 8);
pucBuf[ 7] = (FLMBYTE) (i64Num);
}
FINLINE void f_UINT64ToBigEndian(
FLMUINT64 ui64Num,
FLMBYTE * pucBuf)
{
pucBuf[ 0] = (FLMBYTE) (ui64Num >> 56);
pucBuf[ 1] = (FLMBYTE) (ui64Num >> 48);
pucBuf[ 2] = (FLMBYTE) (ui64Num >> 40);
pucBuf[ 3] = (FLMBYTE) (ui64Num >> 32);
pucBuf[ 4] = (FLMBYTE) (ui64Num >> 24);
pucBuf[ 5] = (FLMBYTE) (ui64Num >> 16);
pucBuf[ 6] = (FLMBYTE) (ui64Num >> 8);
pucBuf[ 7] = (FLMBYTE) (ui64Num);
}
FINLINE void f_INT16ToBigEndian(
FLMINT16 i16Num,
FLMBYTE * pucBuf)
{
pucBuf[ 0] = (FLMBYTE) (i16Num >> 8);
pucBuf[ 1] = (FLMBYTE) (i16Num);
}
FINLINE void f_UINT16ToBigEndian(
FLMUINT16 ui16Num,
FLMBYTE * pucBuf)
{
pucBuf[ 0] = (FLMBYTE) (ui16Num >> 8);
pucBuf[ 1] = (FLMBYTE) (ui16Num);
}
#if defined( FLM_STRICT_ALIGNMENT) || defined( FLM_BIG_ENDIAN)
FINLINE FLMUINT16 FB2UW(
const FLMBYTE * pucBuf)
{
FLMUINT16 ui16Val = 0;
ui16Val |= ((FLMUINT16)pucBuf[ 1]) << 8;
ui16Val |= ((FLMUINT16)pucBuf[ 0]);
return( ui16Val);
}
FINLINE FLMUINT32 FB2UD(
const FLMBYTE * pucBuf)
{
FLMUINT32 ui32Val = 0;
ui32Val |= ((FLMUINT32)pucBuf[ 3]) << 24;
ui32Val |= ((FLMUINT32)pucBuf[ 2]) << 16;
ui32Val |= ((FLMUINT32)pucBuf[ 1]) << 8;
ui32Val |= ((FLMUINT32)pucBuf[ 0]);
return( ui32Val);
}
FINLINE FLMUINT64 FB2U64(
const FLMBYTE * pucBuf)
{
FLMUINT64 ui64Val = 0;
ui64Val |= ((FLMUINT64)pucBuf[ 7]) << 56;
ui64Val |= ((FLMUINT64)pucBuf[ 6]) << 48;
ui64Val |= ((FLMUINT64)pucBuf[ 5]) << 40;
ui64Val |= ((FLMUINT64)pucBuf[ 4]) << 32;
ui64Val |= ((FLMUINT64)pucBuf[ 3]) << 24;
ui64Val |= ((FLMUINT64)pucBuf[ 2]) << 16;
ui64Val |= ((FLMUINT64)pucBuf[ 1]) << 8;
ui64Val |= ((FLMUINT64)pucBuf[ 0]);
return( ui64Val);
}
FINLINE void UW2FBA(
FLMUINT uiNum,
FLMBYTE * pucBuf)
{
f_assert( uiNum <= FLM_MAX_UINT16);
pucBuf[ 1] = (FLMBYTE) (uiNum >> 8);
pucBuf[ 0] = (FLMBYTE) (uiNum);
}
FINLINE void UD2FBA(
FLMUINT uiNum,
FLMBYTE * pucBuf)
{
f_assert( uiNum <= FLM_MAX_UINT32);
pucBuf[ 3] = (FLMBYTE) (uiNum >> 24);
pucBuf[ 2] = (FLMBYTE) (uiNum >> 16);
pucBuf[ 1] = (FLMBYTE) (uiNum >> 8);
pucBuf[ 0] = (FLMBYTE) (uiNum);
}
FINLINE void U642FBA(
FLMUINT64 ui64Num,
FLMBYTE * pucBuf)
{
pucBuf[ 7] = (FLMBYTE) (ui64Num >> 56);
pucBuf[ 6] = (FLMBYTE) (ui64Num >> 48);
pucBuf[ 5] = (FLMBYTE) (ui64Num >> 40);
pucBuf[ 4] = (FLMBYTE) (ui64Num >> 32);
pucBuf[ 3] = (FLMBYTE) (ui64Num >> 24);
pucBuf[ 2] = (FLMBYTE) (ui64Num >> 16);
pucBuf[ 1] = (FLMBYTE) (ui64Num >> 8);
pucBuf[ 0] = (FLMBYTE) (ui64Num);
}
#else
#define FB2UW( fbp) \
(*((FLMUINT16 *)(fbp)))
#define FB2UD( fbp) \
(*((FLMUINT32 *)(fbp)))
#define FB2U64( fbp) \
(*((FLMUINT64 *)(fbp)))
#define UW2FBA( uw, fbp) \
(*((FLMUINT16 *)(fbp)) = ((FLMUINT16) (uw)))
#define UD2FBA( uw, fbp) \
(*((FLMUINT32 *)(fbp)) = ((FLMUINT32) (uw)))
#define U642FBA( uw, fbp) \
(*((FLMUINT64 *)(fbp)) = ((FLMUINT64) (uw)))
#endif
#ifdef FLM_BIG_ENDIAN
#define LO( wrd) \
(*((FLMUINT8 *)&wrd + 1))
#define HI( wrd) \
(*(FLMUINT8 *)&wrd)
#else
#define LO(wrd) \
(*(FLMUINT8 *)&wrd)
#define HI(wrd) \
(*((FLMUINT8 *)&wrd + 1))
#endif
/*******************************************************************
*********
Desc: File path functions and macros
********************************************************************
********/
#if defined( FLM_WIN) || defined( FLM_NLM)
#define FWSLASH '/'
#define SLASH '\\'
#define SSLASH "\\"
#define COLON ':'
#define PERIOD '.'
#define PARENT_DIR ".."
#define CURRENT_DIR "."
#else
#ifndef FWSLASH
#define FWSLASH '/'
#endif
#ifndef SLASH
#define SLASH '/'
#endif
#ifndef SSLASH
#define SSLASH "/"
#endif
#ifndef COLON
#define COLON ':'
#endif
#ifndef PERIOD
#define PERIOD '.'
#endif
#ifndef PARENT_DIR
#define PARENT_DIR ".."
#endif
#ifndef CURRENT_DIR
#define CURRENT_DIR "."
#endif
#endif
FLMUINT FLMAPI f_getMaxFileSize( void);
/*******************************************************************
*********
Desc: CPU release and sleep functions
********************************************************************
********/
void FLMAPI f_yieldCPU( void);
void FLMAPI f_sleep(
FLMUINT uiMilliseconds);
/*******************************************************************
*********
Desc: Time, date, timestamp functions
********************************************************************
********/
typedef struct
{
FLMUINT16 year;
FLMBYTE month;
FLMBYTE day;
} F_DATE;
typedef struct
{
FLMBYTE hour;
FLMBYTE minute;
FLMBYTE second;
FLMBYTE hundredth;
} F_TIME;
typedef struct
{
FLMUINT16 year;
FLMBYTE month;
FLMBYTE day;
FLMBYTE hour;
FLMBYTE minute;
FLMBYTE second;
FLMBYTE hundredth;
} F_TMSTAMP;
#define f_timeIsLeapYear(year) \
((((year) & 0x03) == 0) && (((year) % 100) != 0) || (((year)
% 400) == 0))
void f_timeGetSeconds(
FLMUINT * puiSeconds);
void f_timeGetTimeStamp(
F_TMSTAMP * pTimeStamp);
FLMINT f_timeGetLocalOffset( void);
void f_timeSecondsToDate(
FLMUINT uiSeconds,
F_TMSTAMP * pTimeStamp);
void f_timeDateToSeconds(
F_TMSTAMP * pTimeStamp,
FLMUINT * puiSeconds);
FLMINT f_timeCompareTimeStamps(
F_TMSTAMP * pTimeStamp1,
F_TMSTAMP * pTimeStamp2,
FLMUINT flag);
FINLINE FLMUINT f_localTimeToUTC(
FLMUINT uiSeconds)
{
return( uiSeconds + f_timeGetLocalOffset());
}
FLMUINT FLMAPI FLM_GET_TIMER( void);
FLMUINT FLMAPI FLM_ELAPSED_TIME(
FLMUINT uiLaterTime,
FLMUINT uiEarlierTime);
FLMUINT FLMAPI FLM_SECS_TO_TIMER_UNITS(
FLMUINT uiSeconds);
FLMUINT FLMAPI FLM_TIMER_UNITS_TO_SECS(
FLMUINT uiTU);
FLMUINT FLM_TIMER_UNITS_TO_MILLI(
FLMUINT uiTU);
FLMUINT FLM_MILLI_TO_TIMER_UNITS(
FLMUINT uiMilliSeconds);
void FLMAPI f_addElapsedTime(
F_TMSTAMP * pStartTime,
FLMUINT64 * pui64ElapMilli);
/*******************************************************************
*********
Desc: Quick sort
********************************************************************
********/
typedef FLMINT (FLMAPI * F_SORT_COMPARE_FUNC)(
void * pvBuffer,
FLMUINT uiPos1,
FLMUINT uiPos2);
typedef void (FLMAPI * F_SORT_SWAP_FUNC)(
void * pvBuffer,
FLMUINT uiPos1,
FLMUINT uiPos2);
FLMINT FLMAPI f_qsortUINTCompare(
void * pvBuffer,
FLMUINT uiPos1,
FLMUINT uiPos2);
void FLMAPI f_qsortUINTSwap(
void * pvBuffer,
FLMUINT uiPos1,
FLMUINT uiPos2);
void FLMAPI f_qsort(
void * pvBuffer,
FLMUINT uiLowerBounds,
FLMUINT uiUpperBounds,
F_SORT_COMPARE_FUNC fnCompare,
F_SORT_SWAP_FUNC fnSwap);
/*******************************************************************
*********
Desc: Environment
********************************************************************
********/
void FLMAPI f_getenv(
const char * pszKey,