1
0
Fork 0

stdlib: Add Lth_ceilk and Lth_fractk

stdlib: Change memcpy calls to memmove calls
stdlib: Optimize Lth_PrintString with hacks
master
Marrub 2016-11-21 01:03:52 -05:00
parent 4b20d830c4
commit 89882c943f
2 changed files with 33 additions and 5 deletions

View File

@ -16,6 +16,7 @@
#define Lth_isidenti(c) \
(isalnum(c) || c == '_' || c == '$' || c == '\'' || c > 0x80)
#define Lth_integk(n) ((int_k_t)(n))
// Extern Functions ----------------------------------------------------------|
@ -40,6 +41,10 @@ wchar_t *Lth_wcsdupstr(char const *s);
// mbs
size_t Lth_mbslen(char const *s);
// accum
int Lth_ceilk(_Accum n);
_Accum Lth_fractk(_Accum n);
// Print
void Lth_PrintString(char const *s);

View File

@ -17,6 +17,7 @@
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include "Lth_stdfix.h"
#define GenStrHash() \
if(s == NULL) return 0; \
@ -50,7 +51,7 @@ char *Lth_strdup(char const *s)
{
size_t len = strlen(s);
char *ret = malloc(len + 1);
memcpy(ret, s, len);
memmove(ret, s, len);
ret[len] = '\0';
return ret;
}
@ -101,7 +102,7 @@ char *Lth_strealoc(char *p, char const *s)
{
size_t len = strlen(s);
p = realloc(p, len + 1);
memcpy(p, s, len);
memmove(p, s, len);
p[len] = '\0';
return p;
}
@ -150,7 +151,7 @@ wchar_t *Lth_wcsdup(wchar_t const *s)
{
size_t len = wcslen(s);
wchar_t *ret = malloc(sizeof(wchar_t) * (len + 1));
wmemcpy(ret, s, len);
wmemmove(ret, s, len);
ret[len] = '\0';
return ret;
}
@ -182,9 +183,32 @@ size_t Lth_mbslen(char const *s)
return ret;
s += next;
}
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
//
@ -192,8 +216,7 @@ size_t Lth_mbslen(char const *s)
//
void Lth_PrintString(char const *s)
{
if(s == NULL) return;
for(char const *p = s; *p;) ACS_PrintChar(*p++);
ACS_PrintGlobalCharArray((int)s, __GDCC__Sta);
}
//