Espresso 0.0.1b
This commit is contained in:
170
lib/string.c
170
lib/string.c
@ -1,32 +1,33 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <vector_extentions/sse.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
extern int16_t sse_initialized;
|
||||
extern int32_t sse_initialized;
|
||||
|
||||
size_t strlen(const char* str)
|
||||
{
|
||||
size_t len = 0;
|
||||
while (str[len]) len++;
|
||||
return len;
|
||||
}
|
||||
|
||||
size_t strcmp(const char *s1, const char *s2)
|
||||
{
|
||||
int32_t i = 0;
|
||||
|
||||
while ((s1[i] == s2[i]))
|
||||
size_t len = 0;
|
||||
while (str[len])
|
||||
{
|
||||
if (s2[i++] == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
len++;
|
||||
}
|
||||
return 1;
|
||||
return len;
|
||||
}
|
||||
|
||||
int32_t strcmp(const char *s1, const char *s2)
|
||||
{
|
||||
while (*s1 && (*s1 == *s2))
|
||||
{
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
return (unsigned char)*s1 - (unsigned char)*s2;
|
||||
}
|
||||
|
||||
|
||||
int32_t strncmp(const char *s1, const char *s2, size_t n)
|
||||
{
|
||||
while (n--)
|
||||
@ -45,16 +46,36 @@ int32_t strncmp(const char *s1, const char *s2, size_t n)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
size_t strcpy(char *dst, const char *src)
|
||||
int32_t strcasecmp(const char* s1, const char* s2)
|
||||
{
|
||||
int32_t i = 0;
|
||||
while ((*dst++ = *src++) != 0)
|
||||
i++;
|
||||
return i;
|
||||
unsigned char c1, c2;
|
||||
|
||||
while (*s1 && *s2)
|
||||
{
|
||||
c1 = lower((unsigned char)*s1);
|
||||
c2 = lower((unsigned char)*s2);
|
||||
|
||||
if (c1 != c2)
|
||||
{
|
||||
return c1 - c2;
|
||||
}
|
||||
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
return lower((unsigned char)*s1) - lower((unsigned char)*s2);
|
||||
}
|
||||
|
||||
char *strncpy(char *dest, const char *src, uint32_t n)
|
||||
char* strcpy(char *dst, const char *src)
|
||||
{
|
||||
char *ret = dst;
|
||||
while ((*dst++ = *src++) != 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
char* strncpy(char *dest, const char *src, uint32_t n)
|
||||
{
|
||||
if (sse_initialized > 0)
|
||||
{
|
||||
@ -63,22 +84,31 @@ char *strncpy(char *dest, const char *src, uint32_t n)
|
||||
|
||||
uint32_t i = 0;
|
||||
for (; i < n && src[i]; ++i)
|
||||
{
|
||||
dest[i] = src[i];
|
||||
}
|
||||
|
||||
for (; i < n; ++i)
|
||||
{
|
||||
dest[i] = '\0';
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
void strcat(char *dest, const char *src)
|
||||
char* strcat(char *dest, const char *src)
|
||||
{
|
||||
char *end = (char *)dest + strlen(dest);
|
||||
memcpy((void *)end, (void *)src, strlen(src));
|
||||
end = end + strlen(src);
|
||||
*end = '\0';
|
||||
char *end = dest + strlen(dest);
|
||||
while (*src)
|
||||
{
|
||||
*end++ = *src++;
|
||||
}
|
||||
|
||||
*end = '\0';
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
||||
char* strdup(const char* s)
|
||||
{
|
||||
if (!s)
|
||||
@ -143,11 +173,11 @@ char* strchr(const char* s, int c)
|
||||
{
|
||||
while (*s)
|
||||
{
|
||||
if (*s == (char)c)
|
||||
{
|
||||
return (char*)s;
|
||||
}
|
||||
s++;
|
||||
if (*s == (char)c)
|
||||
{
|
||||
return (char*)s;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@ -155,43 +185,54 @@ char* strchr(const char* s, int c)
|
||||
|
||||
|
||||
|
||||
void *memset(void *dst, char c, uint32_t n)
|
||||
void* memset(void *dst, char c, uint32_t n)
|
||||
{
|
||||
char *temp = dst;
|
||||
for (; n != 0; n--) *temp++ = c;
|
||||
for (; n != 0; n--)
|
||||
{
|
||||
*temp++ = c;
|
||||
}
|
||||
return dst;
|
||||
}
|
||||
|
||||
void *memcpy(void *dst, const void *src, uint32_t n)
|
||||
void* memcpy(void *dst, const void *src, uint32_t n)
|
||||
{
|
||||
if (sse_initialized > 0)
|
||||
if (sse_initialized > 1)
|
||||
{
|
||||
return sse2_memcpy(dst, src, n);
|
||||
}
|
||||
|
||||
char *ret = dst;
|
||||
char *p = dst;
|
||||
const char *q = src;
|
||||
|
||||
char *d = dst;
|
||||
const char *s = src;
|
||||
while (n--)
|
||||
*p++ = *q++;
|
||||
return ret;
|
||||
{
|
||||
*d++ = *s++;
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
int32_t memcmp(uint8_t *s1, uint8_t *s2, uint32_t n)
|
||||
int32_t memcmp(const void *s1, const void *s2, size_t n)
|
||||
{
|
||||
while (n--)
|
||||
const uint8_t *p1 = (const uint8_t *)s1;
|
||||
const uint8_t *p2 = (const uint8_t *)s2;
|
||||
|
||||
printf("p1: %i, p2: %i\n", (int32_t)*p1, (int32_t)*p2);
|
||||
|
||||
for (size_t i = 0; i < n; i++)
|
||||
{
|
||||
if (p1[i] != p2[i])
|
||||
{
|
||||
if (*s1 != *s2)
|
||||
return 0;
|
||||
s1++;
|
||||
s2++;
|
||||
return (int32_t)p1[i] - (int32_t)p2[i];
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* memclr(const void * const m_start, const size_t m_count)
|
||||
|
||||
void* memclr(void* m_start, size_t m_count)
|
||||
{
|
||||
if (sse_initialized > 0)
|
||||
if (sse_initialized > 1)
|
||||
{
|
||||
return memclr_sse2(m_start, m_count);
|
||||
}
|
||||
@ -215,13 +256,6 @@ int32_t ischar(int32_t c)
|
||||
}
|
||||
|
||||
char upper(char c)
|
||||
{
|
||||
if ((c >= 'a') && (c <= 'z'))
|
||||
return (c - 32);
|
||||
return c;
|
||||
}
|
||||
|
||||
char toupper(char c)
|
||||
{
|
||||
if ((c >= 'a') && (c <= 'z'))
|
||||
{
|
||||
@ -232,7 +266,19 @@ char toupper(char c)
|
||||
|
||||
char lower(char c)
|
||||
{
|
||||
if ((c >= 'A') && (c <= 'Z'))
|
||||
return (c + 32);
|
||||
return c;
|
||||
if ((c >= 'A') && (c <= 'Z'))
|
||||
{
|
||||
return (c + 32);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
char toupper(char c)
|
||||
{
|
||||
return upper(c);
|
||||
}
|
||||
|
||||
char tolower(char c)
|
||||
{
|
||||
return lower(c);
|
||||
}
|
||||
|
Reference in New Issue
Block a user