Optimise string functions
This commit is contained in:
parent
87af76dc3d
commit
9bd41837ad
|
|
@ -4,10 +4,9 @@
|
|||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
char *strcpy(char *dst, const char *src);
|
||||
char *strncpy(char *dst, const char *src, s32 len);
|
||||
char *strcat(char *dst, const char *src);
|
||||
void strcpy(char *dst, const char *src);
|
||||
void strncpy(char *dst, const char *src, s32 len);
|
||||
void strcat(char *dst, const char *src);
|
||||
s32 strcmp(const char *s1, const char *s2);
|
||||
s32 strncmp(const char *s1, const char *s2, s32 len);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
102
src/lib/str.c
102
src/lib/str.c
|
|
@ -1,111 +1,55 @@
|
|||
#include <ultra64.h>
|
||||
#include "types.h"
|
||||
|
||||
char *strcpy(char *dst, const char *src)
|
||||
void strcpy(char *dst, const char *src)
|
||||
{
|
||||
char *ptr = dst;
|
||||
char c;
|
||||
|
||||
*ptr = c = *src;
|
||||
ptr++;
|
||||
src++;
|
||||
|
||||
while (c != '\0') {
|
||||
*ptr = c = *src;
|
||||
ptr++;
|
||||
do {
|
||||
*dst = c = *src;
|
||||
dst++;
|
||||
src++;
|
||||
}
|
||||
|
||||
return dst;
|
||||
} while (c != '\0');
|
||||
}
|
||||
|
||||
char *strncpy(char *dst, const char *src, s32 len)
|
||||
void strncpy(char *dst, const char *src, s32 len)
|
||||
{
|
||||
char *ptr = dst;
|
||||
char c;
|
||||
|
||||
*ptr = c = *src;
|
||||
ptr++;
|
||||
src++;
|
||||
|
||||
while (c != '\0') {
|
||||
len--;
|
||||
|
||||
if (len == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
*ptr = c = *src;
|
||||
ptr++;
|
||||
do {
|
||||
*dst = c = *src;
|
||||
dst++;
|
||||
src++;
|
||||
}
|
||||
|
||||
while (len--) {
|
||||
*ptr = '\0';
|
||||
ptr++;
|
||||
}
|
||||
|
||||
return dst;
|
||||
} while (c != '\0' && len-- > 0);
|
||||
}
|
||||
|
||||
char *strcat(char *dst, const char *src)
|
||||
void strcat(char *dst, const char *src)
|
||||
{
|
||||
char *ptr = dst;
|
||||
char c;
|
||||
|
||||
while (*ptr != '\0') {
|
||||
ptr++;
|
||||
while (*dst != '\0') {
|
||||
dst++;
|
||||
}
|
||||
|
||||
*ptr = c = *src;
|
||||
ptr++;
|
||||
src++;
|
||||
|
||||
while (c != '\0') {
|
||||
*ptr = c = *src;
|
||||
ptr++;
|
||||
do {
|
||||
*dst = c = *src;
|
||||
dst++;
|
||||
src++;
|
||||
}
|
||||
|
||||
return dst;
|
||||
} while (c != '\0');
|
||||
}
|
||||
|
||||
s32 strcmp(const char *s1, const char *s2)
|
||||
{
|
||||
if (*s1 != *s2) {
|
||||
if (*s1 < *s2) {
|
||||
return -1;
|
||||
} else {
|
||||
while (true) {
|
||||
if (*s1 != *s2) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (*s1 == '\0') {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return strcmp(s1 + 1, s2 + 1);
|
||||
}
|
||||
|
||||
s32 strncmp(const char *s1, const char *s2, s32 len)
|
||||
{
|
||||
if (len == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
len--;
|
||||
|
||||
if (*s1 != *s2) {
|
||||
if (*s1 < *s2) {
|
||||
return -1;
|
||||
} else {
|
||||
return 1;
|
||||
if (*s1 == '\0') {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (*s1 == '\0') {
|
||||
return 0;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
return strncmp(s1 + 1, s2 + 1, len);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue