Added qse_str_amend()
almost finished primitive url rewriting
This commit is contained in:
@ -136,6 +136,7 @@ static int mbs_to_wcs (
|
||||
#undef str_ccat
|
||||
#undef str_nccat
|
||||
#undef str_del
|
||||
#undef str_amend
|
||||
#undef str_trm
|
||||
#undef str_pac
|
||||
#undef str_fmt
|
||||
@ -173,22 +174,23 @@ static int mbs_to_wcs (
|
||||
#define str_getlen qse_mbs_getlen
|
||||
#define str_setlen qse_mbs_setlen
|
||||
#define str_clear qse_mbs_clear
|
||||
#define str_swap qse_mbs_swap
|
||||
#define str_cpy qse_mbs_cpy
|
||||
#define str_ncpy qse_mbs_ncpy
|
||||
#define str_cat qse_mbs_cat
|
||||
#define resize_for_ncat resize_for_mbs_ncat
|
||||
#define str_ncat qse_mbs_ncat
|
||||
#define str_nrcat qse_mbs_nrcat
|
||||
#define str_ccat qse_mbs_ccat
|
||||
#define str_nccat qse_mbs_nccat
|
||||
#define str_del qse_mbs_del
|
||||
#define str_trm qse_mbs_trm
|
||||
#define str_pac qse_mbs_pac
|
||||
#define str_fmt qse_mbs_fmt
|
||||
#define str_vfmt qse_mbs_vfmt
|
||||
#define str_fcat qse_mbs_fcat
|
||||
#define str_vfcat qse_mbs_vfcat
|
||||
#define str_swap qse_mbs_swap
|
||||
#define str_cpy qse_mbs_cpy
|
||||
#define str_ncpy qse_mbs_ncpy
|
||||
#define str_cat qse_mbs_cat
|
||||
#define resize_for_ncat resize_for_mbs_ncat
|
||||
#define str_ncat qse_mbs_ncat
|
||||
#define str_nrcat qse_mbs_nrcat
|
||||
#define str_ccat qse_mbs_ccat
|
||||
#define str_nccat qse_mbs_nccat
|
||||
#define str_del qse_mbs_del
|
||||
#define str_amend qse_mbs_amend
|
||||
#define str_trm qse_mbs_trm
|
||||
#define str_pac qse_mbs_pac
|
||||
#define str_fmt qse_mbs_fmt
|
||||
#define str_vfmt qse_mbs_vfmt
|
||||
#define str_fcat qse_mbs_fcat
|
||||
#define str_vfcat qse_mbs_vfcat
|
||||
#include "str-dyn.h"
|
||||
|
||||
/* -------------------------------------------------------- */
|
||||
@ -233,6 +235,7 @@ static int mbs_to_wcs (
|
||||
#undef str_ccat
|
||||
#undef str_nccat
|
||||
#undef str_del
|
||||
#undef str_amend
|
||||
#undef str_trm
|
||||
#undef str_pac
|
||||
#undef str_fmt
|
||||
@ -280,6 +283,7 @@ static int mbs_to_wcs (
|
||||
#define str_ccat qse_wcs_ccat
|
||||
#define str_nccat qse_wcs_nccat
|
||||
#define str_del qse_wcs_del
|
||||
#define str_amend qse_wcs_amend
|
||||
#define str_trm qse_wcs_trm
|
||||
#define str_pac qse_wcs_pac
|
||||
#define str_fmt qse_wcs_fmt
|
||||
|
@ -153,7 +153,7 @@ qse_size_t str_setcapa (str_t* str, qse_size_t capa)
|
||||
str->mmgr, QSE_SIZEOF(char_t)*(capa+1));
|
||||
if (tmp == QSE_NULL) return (qse_size_t)-1;
|
||||
|
||||
if (str->val.ptr != QSE_NULL)
|
||||
if (str->val.ptr)
|
||||
{
|
||||
qse_size_t ncopy = (str->val.len <= capa)? str->val.len: capa;
|
||||
QSE_MEMCPY (tmp, str->val.ptr,
|
||||
@ -185,7 +185,7 @@ qse_size_t str_setlen (str_t* str, qse_size_t len)
|
||||
if (len < str->val.len)
|
||||
{
|
||||
str->val.len = len;
|
||||
str->val.ptr[len] = T('\0');
|
||||
str->val.ptr[len] = T('\0');
|
||||
return len;
|
||||
}
|
||||
|
||||
@ -203,7 +203,7 @@ qse_size_t str_setlen (str_t* str, qse_size_t len)
|
||||
void str_clear (str_t* str)
|
||||
{
|
||||
str->val.len = 0;
|
||||
if (str->val.ptr != QSE_NULL)
|
||||
if (str->val.ptr)
|
||||
{
|
||||
QSE_ASSERT (str->capa >= 1);
|
||||
str->val.ptr[0] = T('\0');
|
||||
@ -385,7 +385,7 @@ qse_size_t str_nccat (str_t* str, char_t c, qse_size_t len)
|
||||
|
||||
qse_size_t str_del (str_t* str, qse_size_t index, qse_size_t size)
|
||||
{
|
||||
if (str->val.ptr != QSE_NULL && index < str->val.len && size > 0)
|
||||
if (str->val.ptr && index < str->val.len && size > 0)
|
||||
{
|
||||
qse_size_t nidx = index + size;
|
||||
if (nidx >= str->val.len)
|
||||
@ -405,9 +405,33 @@ qse_size_t str_del (str_t* str, qse_size_t index, qse_size_t size)
|
||||
return str->val.len;
|
||||
}
|
||||
|
||||
qse_size_t str_amend (str_t* str, qse_size_t pos, qse_size_t len, const char_t* repl)
|
||||
{
|
||||
qse_size_t max_len;
|
||||
qse_size_t repl_len = strlen(repl);
|
||||
|
||||
if (pos >= str->val.len) pos = str->val.len;
|
||||
max_len = str->val.len - pos;
|
||||
if (len > max_len) len = max_len;
|
||||
|
||||
if (len > repl_len)
|
||||
{
|
||||
str_del (str, pos, len - repl_len);
|
||||
}
|
||||
else if (len < repl_len)
|
||||
{
|
||||
qse_size_t old_str_len = str->val.len;
|
||||
if (str_setlen (str, str->val.len + repl_len - len) == (qse_size_t)-1) return (qse_size_t)-1;
|
||||
QSE_MEMMOVE (&str->val.ptr[pos + repl_len], &str->val.ptr[pos + len], QSE_SIZEOF(*repl) * (old_str_len - (pos + len)));
|
||||
}
|
||||
|
||||
if (repl_len > 0) QSE_MEMMOVE (&str->val.ptr[pos], repl, QSE_SIZEOF(*repl) * repl_len);
|
||||
return str->val.len;
|
||||
}
|
||||
|
||||
qse_size_t str_trm (str_t* str)
|
||||
{
|
||||
if (str->val.ptr != QSE_NULL)
|
||||
if (str->val.ptr)
|
||||
{
|
||||
str->val.len = strxtrm (str->val.ptr, str->val.len);
|
||||
}
|
||||
@ -417,7 +441,7 @@ qse_size_t str_trm (str_t* str)
|
||||
|
||||
qse_size_t str_pac (str_t* str)
|
||||
{
|
||||
if (str->val.ptr != QSE_NULL)
|
||||
if (str->val.ptr)
|
||||
{
|
||||
str->val.len = strxpac (str->val.ptr, str->val.len);
|
||||
}
|
||||
|
Reference in New Issue
Block a user