stdlib: Add Lth_ceilk and Lth_fractk
stdlib: Change memcpy calls to memmove calls stdlib: Optimize Lth_PrintString with hacksmaster
parent
4b20d830c4
commit
89882c943f
|
@ -16,6 +16,7 @@
|
||||||
#define Lth_isidenti(c) \
|
#define Lth_isidenti(c) \
|
||||||
(isalnum(c) || c == '_' || c == '$' || c == '\'' || c > 0x80)
|
(isalnum(c) || c == '_' || c == '$' || c == '\'' || c > 0x80)
|
||||||
|
|
||||||
|
#define Lth_integk(n) ((int_k_t)(n))
|
||||||
|
|
||||||
|
|
||||||
// Extern Functions ----------------------------------------------------------|
|
// Extern Functions ----------------------------------------------------------|
|
||||||
|
@ -40,6 +41,10 @@ wchar_t *Lth_wcsdupstr(char const *s);
|
||||||
// mbs
|
// mbs
|
||||||
size_t Lth_mbslen(char const *s);
|
size_t Lth_mbslen(char const *s);
|
||||||
|
|
||||||
|
// accum
|
||||||
|
int Lth_ceilk(_Accum n);
|
||||||
|
_Accum Lth_fractk(_Accum n);
|
||||||
|
|
||||||
// Print
|
// Print
|
||||||
void Lth_PrintString(char const *s);
|
void Lth_PrintString(char const *s);
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include "Lth_stdfix.h"
|
||||||
|
|
||||||
#define GenStrHash() \
|
#define GenStrHash() \
|
||||||
if(s == NULL) return 0; \
|
if(s == NULL) return 0; \
|
||||||
|
@ -50,7 +51,7 @@ char *Lth_strdup(char const *s)
|
||||||
{
|
{
|
||||||
size_t len = strlen(s);
|
size_t len = strlen(s);
|
||||||
char *ret = malloc(len + 1);
|
char *ret = malloc(len + 1);
|
||||||
memcpy(ret, s, len);
|
memmove(ret, s, len);
|
||||||
ret[len] = '\0';
|
ret[len] = '\0';
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -101,7 +102,7 @@ char *Lth_strealoc(char *p, char const *s)
|
||||||
{
|
{
|
||||||
size_t len = strlen(s);
|
size_t len = strlen(s);
|
||||||
p = realloc(p, len + 1);
|
p = realloc(p, len + 1);
|
||||||
memcpy(p, s, len);
|
memmove(p, s, len);
|
||||||
p[len] = '\0';
|
p[len] = '\0';
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -150,7 +151,7 @@ wchar_t *Lth_wcsdup(wchar_t const *s)
|
||||||
{
|
{
|
||||||
size_t len = wcslen(s);
|
size_t len = wcslen(s);
|
||||||
wchar_t *ret = malloc(sizeof(wchar_t) * (len + 1));
|
wchar_t *ret = malloc(sizeof(wchar_t) * (len + 1));
|
||||||
wmemcpy(ret, s, len);
|
wmemmove(ret, s, len);
|
||||||
ret[len] = '\0';
|
ret[len] = '\0';
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -182,9 +183,32 @@ size_t Lth_mbslen(char const *s)
|
||||||
return ret;
|
return ret;
|
||||||
s += next;
|
s += next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Lth_ceilk
|
||||||
|
//
|
||||||
|
int Lth_ceilk(_Accum n)
|
||||||
|
{
|
||||||
|
union { int_k_t i; _Accum a; } u = { .a = n };
|
||||||
|
if(u.i & 0xFFF1)
|
||||||
|
return u.i &= 0xFFFF0000, u.a + 1;
|
||||||
|
else
|
||||||
|
return (int)u.a;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Lth_fractk
|
||||||
|
//
|
||||||
|
_Accum Lth_fractk(_Accum n)
|
||||||
|
{
|
||||||
|
union { int_k_t i; _Accum a; } u = { .a = n };
|
||||||
|
u.i &= 0xFFFF;
|
||||||
|
return u.a;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Lth_PrintString
|
// Lth_PrintString
|
||||||
//
|
//
|
||||||
|
@ -192,8 +216,7 @@ size_t Lth_mbslen(char const *s)
|
||||||
//
|
//
|
||||||
void Lth_PrintString(char const *s)
|
void Lth_PrintString(char const *s)
|
||||||
{
|
{
|
||||||
if(s == NULL) return;
|
ACS_PrintGlobalCharArray((int)s, __GDCC__Sta);
|
||||||
for(char const *p = s; *p;) ACS_PrintChar(*p++);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue