added qse_mbsxstr()/qse_wcsxstr() and related functions

This commit is contained in:
2011-03-30 09:37:19 +00:00
parent 5662ae2010
commit 9cf0386f11
14 changed files with 2190 additions and 414 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: str.h 420 2011-03-29 11:20:29Z hyunghwan.chung $
* $Id: str.h 421 2011-03-29 15:37:19Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -776,10 +776,10 @@ qse_wchar_t* qse_wcsxdup2 (
* The qse_mbsstr() function searchs a string @a str for the first occurrence
* of a substring @a sub.
* @return pointer to the first occurrence in @a str if @a sub is found,
* QSE_NULL if not.
* #QSE_NULL if not.
*/
qse_mchar_t* qse_mbsstr (
const qse_mchar_t* str,
const qse_mchar_t* str,
const qse_mchar_t* sub
);
@ -787,74 +787,187 @@ qse_mchar_t* qse_mbsstr (
* The qse_wcsstr() function searchs a string @a str for the first occurrence
* of a substring @a sub.
* @return pointer to the first occurrence in @a str if @a sub is found,
* QSE_NULL if not.
* #QSE_NULL if not.
*/
qse_wchar_t* qse_wcsstr (
const qse_wchar_t* str,
const qse_wchar_t* str,
const qse_wchar_t* sub
);
#ifdef QSE_CHAR_IS_MCHAR
# define qse_strstr(str,sub) qse_mbsstr(str,sub)
#else
# define qse_strstr(str,sub) qse_wcsstr(str,sub)
#endif
qse_char_t* qse_strxstr (
const qse_char_t* str,
qse_size_t size,
const qse_char_t* sub
qse_mchar_t* qse_mbsxstr (
const qse_mchar_t* str,
qse_size_t size,
const qse_mchar_t* sub
);
qse_char_t* qse_strxnstr (
const qse_char_t* str,
qse_size_t strsz,
const qse_char_t* sub,
qse_size_t subsz
qse_wchar_t* qse_wcsxstr (
const qse_wchar_t* str,
qse_size_t size,
const qse_wchar_t* sub
);
qse_char_t* qse_strcasestr (
const qse_char_t* str,
const qse_char_t* sub
qse_mchar_t* qse_mbsxnstr (
const qse_mchar_t* str,
qse_size_t strsz,
const qse_mchar_t* sub,
qse_size_t subsz
);
qse_char_t* qse_strxcasestr (
const qse_char_t* str,
qse_size_t size,
const qse_char_t* sub
qse_wchar_t* qse_wcsxnstr (
const qse_wchar_t* str,
qse_size_t strsz,
const qse_wchar_t* sub,
qse_size_t subsz
);
qse_char_t* qse_strxncasestr (
const qse_char_t* str,
qse_size_t strsz,
const qse_char_t* sub,
qse_size_t subsz
qse_mchar_t* qse_mbscasestr (
const qse_mchar_t* str,
const qse_mchar_t* sub
);
qse_wchar_t* qse_wcscasestr (
const qse_wchar_t* str,
const qse_wchar_t* sub
);
qse_mchar_t* qse_mbsxcasestr (
const qse_mchar_t* str,
qse_size_t size,
const qse_mchar_t* sub
);
qse_wchar_t* qse_wcsxcasestr (
const qse_wchar_t* str,
qse_size_t size,
const qse_wchar_t* sub
);
qse_mchar_t* qse_mbsxncasestr (
const qse_mchar_t* str,
qse_size_t strsz,
const qse_mchar_t* sub,
qse_size_t subsz
);
qse_wchar_t* qse_wcsxncasestr (
const qse_wchar_t* str,
qse_size_t strsz,
const qse_wchar_t* sub,
qse_size_t subsz
);
/**
* The qse_strrstr() function searchs a string @a str for the last occurrence
* The qse_mbsrstr() function searchs a string @a str for the last occurrence
* of a substring @a sub.
* @return pointer to the last occurrence in @a str if @a sub is found,
* QSE_NULL if not.
* #QSE_NULL if not.
*/
qse_char_t* qse_strrstr (
const qse_char_t* str,
const qse_char_t* sub
qse_mchar_t* qse_mbsrstr (
const qse_mchar_t* str,
const qse_mchar_t* sub
);
qse_char_t* qse_strxrstr (
const qse_char_t* str,
qse_size_t size,
const qse_char_t* sub
/**
* The qse_wcsrstr() function searchs a string @a str for the last occurrence
* of a substring @a sub.
* @return pointer to the last occurrence in @a str if @a sub is found,
* #QSE_NULL if not.
*/
qse_wchar_t* qse_wcsrstr (
const qse_wchar_t* str,
const qse_wchar_t* sub
);
qse_char_t* qse_strxnrstr (
const qse_char_t* str,
qse_size_t strsz,
const qse_char_t* sub,
qse_size_t subsz
qse_mchar_t* qse_mbsxrstr (
const qse_mchar_t* str,
qse_size_t size,
const qse_mchar_t* sub
);
qse_wchar_t* qse_wcsxrstr (
const qse_wchar_t* str,
qse_size_t size,
const qse_wchar_t* sub
);
qse_mchar_t* qse_mbsxnrstr (
const qse_mchar_t* str,
qse_size_t strsz,
const qse_mchar_t* sub,
qse_size_t subsz
);
qse_wchar_t* qse_wcsxnrstr (
const qse_wchar_t* str,
qse_size_t strsz,
const qse_wchar_t* sub,
qse_size_t subsz
);
qse_mchar_t* qse_mbsrcasestr (
const qse_mchar_t* str,
const qse_mchar_t* sub
);
qse_wchar_t* qse_wcsrcasestr (
const qse_wchar_t* str,
const qse_wchar_t* sub
);
qse_mchar_t* qse_mbsxrcasestr (
const qse_mchar_t* str,
qse_size_t size,
const qse_mchar_t* sub
);
qse_wchar_t* qse_wcsxrcasestr (
const qse_wchar_t* str,
qse_size_t size,
const qse_wchar_t* sub
);
qse_mchar_t* qse_mbsxnrcasestr (
const qse_mchar_t* str,
qse_size_t strsz,
const qse_mchar_t* sub,
qse_size_t subsz
);
qse_wchar_t* qse_wcsxnrcasestr (
const qse_wchar_t* str,
qse_size_t strsz,
const qse_wchar_t* sub,
qse_size_t subsz
);
#ifdef QSE_CHAR_IS_MCHAR
# define qse_strstr(str,sub) qse_mbsstr(str,sub)
# define qse_strxstr(str,size,sub) qse_mbsxstr(str,size,sub)
# define qse_strxnstr(str,strsz,sub,subsz) qse_mbsxnstr(str,strsz,sub,subsz)
# define qse_strcasestr(str,sub) qse_mbscasestr(str,sub)
# define qse_strxcasestr(str,size,sub) qse_mbsxcasestr(str,size,sub)
# define qse_strxncasestr(str,strsz,sub,subsz) qse_mbsxncasestr(str,strsz,sub,subsz)
# define qse_strrstr(str,sub) qse_mbsrstr(str,sub)
# define qse_strxrstr(str,size,sub) qse_mbsxrstr(str,size,sub)
# define qse_strxnrstr(str,strsz,sub,subsz) qse_mbsxnrstr(str,strsz,sub,subsz)
# define qse_strrcasestr(str,sub) qse_mbsrcasestr(str,sub)
# define qse_strxrcasestr(str,size,sub) qse_mbsxrcasestr(str,size,sub)
# define qse_strxnrcasestr(str,strsz,sub,subsz) qse_mbsxnrcasestr(str,strsz,sub,subsz)
#else
# define qse_strstr(str,sub) qse_wcsstr(str,sub)
# define qse_strxstr(str,size,sub) qse_wcsxstr(str,size,sub)
# define qse_strxnstr(str,strsz,sub,subsz) qse_wcsxnstr(str,strsz,sub,subsz)
# define qse_strcasestr(str,sub) qse_wcscasestr(str,sub)
# define qse_strxcasestr(str,size,sub) qse_wcsxcasestr(str,size,sub)
# define qse_strxncasestr(str,strsz,sub,subsz) qse_wcsxncasestr(str,strsz,sub,subsz)
# define qse_strrstr(str,sub) qse_wcsrstr(str,sub)
# define qse_strxrstr(str,size,sub) qse_wcsxrstr(str,size,sub)
# define qse_strxnrstr(str,strsz,sub,subsz) qse_wcsxnrstr(str,strsz,sub,subsz)
# define qse_strrcasestr(str,sub) qse_wcsrcasestr(str,sub)
# define qse_strxrcasestr(str,size,sub) qse_wcsxrcasestr(str,size,sub)
# define qse_strxnrcasestr(str,strsz,sub,subsz) qse_wcsxnrcasestr(str,strsz,sub,subsz)
#endif
/**
* The qse_strxword() function finds a whole word in a string.
*/

View File

@ -1,5 +1,5 @@
/*
* $Id: conf_msw.h 397 2011-03-15 03:40:39Z hyunghwan.chung $
* $Id: conf_msw.h 421 2011-03-29 15:37:19Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -33,44 +33,102 @@ _M_IX86 x86 platform
_M_X64 x64 platform
*/
/* windows for most of non-x86 platforms dropped.
* make it selective to support old non-x86 windows platforms. */
#define QSE_ENDIAN_LITTLE
#define QSE_SIZEOF_CHAR 1
#define QSE_SIZEOF_SHORT 2
#define QSE_SIZEOF_INT 4
/*
* You must define which character type to use as a default character here.
*
* #define QSE_CHAR_IS_WCHAR
* #define QSE_CHAR_IS_MCHAR
*/
/*#ifdef _WIN64
#define QSE_SIZEOF_LONG 8
#else*/
#define QSE_SIZEOF_LONG 4
/*#endif*/
#if defined(__POCC__) || defined(__DMC__) || defined(__GNUC__)
/* pelles c with no microsoft extension */
#define QSE_SIZEOF_LONG_LONG 8
#define QSE_SIZEOF___INT8 0
#define QSE_SIZEOF___INT16 0
#define QSE_SIZEOF___INT32 0
#define QSE_SIZEOF___INT64 0
#define QSE_SIZEOF___INT128 0
#if defined(__WATCOMC__)
# define QSE_SIZEOF_CHAR 1
# define QSE_SIZEOF_SHORT 2
# define QSE_SIZEOF_INT 4
# define QSE_SIZEOF_LONG 4
# define QSE_SIZEOF_LONG_LONG 8
#
# if defined(_WIN64)
# define QSE_SIZEOF_VOID_P 8
# else
# define QSE_SIZEOF_VOID_P 4
# endif
# define QSE_SIZEOF_FLOAT 4
# define QSE_SIZEOF_DOUBLE 8
# define QSE_SIZEOF_LONG_DOUBLE 8
# define QSE_SIZEOF_WCHAR_T 2
#
# define QSE_SIZEOF___INT8 1
# define QSE_SIZEOF___INT16 2
# define QSE_SIZEOF___INT32 4
# define QSE_SIZEOF___INT64 8
# define QSE_SIZEOF___INT128 0
#
# define QSE_SIZEOF_OFF64_T 0
# define QSE_SIZEOF_OFF_T 8
#
# define QSE_CHAR_IS_WCHAR
#elif defined(__GNUC__) || defined(__DMC__) || defined(__POCC__)
# define QSE_SIZEOF_CHAR 1
# define QSE_SIZEOF_SHORT 2
# define QSE_SIZEOF_INT 4
# define QSE_SIZEOF_LONG 4
# define QSE_SIZEOF_LONG_LONG 8
#
# if defined(_WIN64)
# define QSE_SIZEOF_VOID_P 8
# else
# define QSE_SIZEOF_VOID_P 4
# endif
# define QSE_SIZEOF_FLOAT 4
# define QSE_SIZEOF_DOUBLE 8
# define QSE_SIZEOF_LONG_DOUBLE 16
# define QSE_SIZEOF_WCHAR_T 2
#
# define QSE_SIZEOF___INT8 0
# define QSE_SIZEOF___INT16 0
# define QSE_SIZEOF___INT32 0
# define QSE_SIZEOF___INT64 0
# define QSE_SIZEOF___INT128 0
#
# define QSE_SIZEOF_OFF64_T 0
# define QSE_SIZEOF_OFF_T 8
#
# define QSE_CHAR_IS_WCHAR
#elif defined(_MSC_VER)
# define QSE_SIZEOF_CHAR 1
# define QSE_SIZEOF_SHORT 2
# define QSE_SIZEOF_INT 4
# define QSE_SIZEOF_LONG 4
# if (_MSC_VER>=1310)
# define QSE_SIZEOF_LONG_LONG 8
# else
# define QSE_SIZEOF_LONG_LONG 0
# endif
#
# if defined(_WIN64)
# define QSE_SIZEOF_VOID_P 8
# else
# define QSE_SIZEOF_VOID_P 4
# endif
# define QSE_SIZEOF_FLOAT 4
# define QSE_SIZEOF_DOUBLE 8
# define QSE_SIZEOF_LONG_DOUBLE 8
# define QSE_SIZEOF_WCHAR_T 2
#
# define QSE_SIZEOF___INT8 1
# define QSE_SIZEOF___INT16 2
# define QSE_SIZEOF___INT32 4
# define QSE_SIZEOF___INT64 8
# define QSE_SIZEOF___INT128 0
#
# define QSE_SIZEOF_OFF64_T 0
# define QSE_SIZEOF_OFF_T 8
#
# define QSE_CHAR_IS_WCHAR
#else
#define QSE_SIZEOF_LONG_LONG 0
#define QSE_SIZEOF___INT8 1
#define QSE_SIZEOF___INT16 2
#define QSE_SIZEOF___INT32 4
#define QSE_SIZEOF___INT64 8
#define QSE_SIZEOF___INT128 0
# error Define the size of various data types.
#endif
#ifdef _WIN64
#define QSE_SIZEOF_VOID_P 8
#else
#define QSE_SIZEOF_VOID_P 4
#endif
#define QSE_SIZEOF_FLOAT 4
#define QSE_SIZEOF_DOUBLE 8
#define QSE_SIZEOF_LONG_DOUBLE 16
#define QSE_SIZEOF_WCHAR_T 2