Optimise string functions

This commit is contained in:
Ryan Dwyer 2023-05-19 20:56:31 +10:00
parent 87af76dc3d
commit 9bd41837ad
2 changed files with 26 additions and 83 deletions

View File

@ -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

View File

@ -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);
}