enhanced string cache for awk

This commit is contained in:
2009-09-19 22:28:49 +00:00
parent ae7b0a5bdd
commit bc43362962
9 changed files with 234 additions and 167 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: str_bas.c 289 2009-09-16 06:35:29Z hyunghwan.chung $
* $Id: str_bas.c 290 2009-09-19 04:28:49Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -543,6 +543,72 @@ qse_char_t* qse_strxnstr (
return QSE_NULL;
}
qse_char_t* qse_strcasestr (const qse_char_t* str, const qse_char_t* sub)
{
const qse_char_t* x, * y;
y = sub;
if (*y == QSE_T('\0')) return (qse_char_t*)str;
while (*str != QSE_T('\0'))
{
if (QSE_TOUPPER(*str) != QSE_TOUPPER(*y))
{
str++;
continue;
}
x = str;
while (1)
{
if (*y == QSE_T('\0')) return (qse_char_t*)str;
if (QSE_TOUPPER(*x) != QSE_TOUPPER(*y)) break;
x++; y++;
}
y = sub;
str++;
}
return QSE_NULL;
}
qse_char_t* qse_strxcasestr (
const qse_char_t* str, qse_size_t size, const qse_char_t* sub)
{
return qse_strxncasestr (str, size, sub, qse_strlen(sub));
}
qse_char_t* qse_strxncasestr (
const qse_char_t* str, qse_size_t strsz,
const qse_char_t* sub, qse_size_t subsz)
{
const qse_char_t* end, * subp;
if (subsz == 0) return (qse_char_t*)str;
if (strsz < subsz) return QSE_NULL;
end = str + strsz - subsz;
subp = sub + subsz;
while (str <= end)
{
const qse_char_t* x = str;
const qse_char_t* y = sub;
while (1)
{
if (y >= subp) return (qse_char_t*)str;
if (QSE_TOUPPER(*x) != QSE_TOUPPER(*y)) break;
x++; y++;
}
str++;
}
return QSE_NULL;
}
qse_char_t* qse_strrstr (const qse_char_t* str, const qse_char_t* sub)
{
return qse_strxnrstr (str, qse_strlen(str), sub, qse_strlen(sub));