libstr sux
This commit is contained in:
parent
d76402418c
commit
a81ee1d982
90
lib/libstr.c
90
lib/libstr.c
@ -1,90 +0,0 @@
|
|||||||
#include "libstr.h"
|
|
||||||
|
|
||||||
/* Use strchr in <string.h> */
|
|
||||||
/* char *charin(char c, char *str){ return strchr(str, c); } */
|
|
||||||
/* size_t charindex(char c, char *str){ return strchr(str, c) - str; } */
|
|
||||||
/* bool charisin(char c, char *str){ return strchr(str, c) == NULL; } */
|
|
||||||
|
|
||||||
/* lower bound is a limitation of mathematics,
|
|
||||||
* upper bound is controlled by how many digits are defined
|
|
||||||
* in the header */
|
|
||||||
#define CHECKBASE(b) ((b) >= 2 && base < (sizeof(ASCII_DIGITS_LOWER) / sizeof(*ASCII_DIGITS_LOWER))
|
|
||||||
|
|
||||||
int *
|
|
||||||
strtonumb(char *s, enum Strtype t, void *n, int base){
|
|
||||||
int i;
|
|
||||||
int polarity;
|
|
||||||
int retval;
|
|
||||||
retval = 0;
|
|
||||||
while(*s != '\0'){
|
|
||||||
if(!CHECKBASE(base))
|
|
||||||
return NULL;
|
|
||||||
/* assume *s is in ASCII_DIGITS_LOWER or ASCII_DIGITS_UPPER */
|
|
||||||
for(i = 0; i < base; ++i)
|
|
||||||
if(ASCII_DIGITS_LOWER[i] == *s
|
|
||||||
|| ASCII_DIGITS_UPPER == *s){
|
|
||||||
retval = retval * 10 + i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(i == base)
|
|
||||||
return NULL;
|
|
||||||
++s;
|
|
||||||
}
|
|
||||||
*n = retval;
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
stris(enum Strtype t, char *s){
|
|
||||||
return strisb(t, s, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
strisb(enum Strtype t, char *s, int base)
|
|
||||||
{
|
|
||||||
int retval;
|
|
||||||
retval = 0;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if(!CHECKBASE(base))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
/* negatives */
|
|
||||||
if((t == STRIS_TYPE_FLOAT || t == STRIS_TYPE_INT) && *s == '-'){
|
|
||||||
++s;
|
|
||||||
if(t == STRIS_TYPE_INT)
|
|
||||||
t = STRIS_TYPE_UINT;
|
|
||||||
}
|
|
||||||
|
|
||||||
while(*s != '\0')
|
|
||||||
switch(t){
|
|
||||||
case STRIS_TYPE_FLOAT:
|
|
||||||
if(*s == '.'){
|
|
||||||
++s;
|
|
||||||
t = STRIS_TYPE_UINT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
default:
|
|
||||||
for(i = 0; i < base; ++i)
|
|
||||||
if(ASCII_DIGITS_LOWER[i] == *s
|
|
||||||
|| ASCII_DIGITS_UPPER[i] == *s){
|
|
||||||
retval = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(i == base)
|
|
||||||
return 0;
|
|
||||||
++s;
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
int
|
|
||||||
strisb(enum Strtype t, char *s, int base){
|
|
||||||
int n;
|
|
||||||
return !(strtonumb(s, t, &n, base) == NULL);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
10
lib/libstr.h
10
lib/libstr.h
@ -1,10 +0,0 @@
|
|||||||
#include "ascii.h"
|
|
||||||
|
|
||||||
enum Strtype{
|
|
||||||
STRIS_TYPE_UINT = 1,
|
|
||||||
STRIS_TYPE_INT,
|
|
||||||
STRIS_TYPE_FLOAT
|
|
||||||
};
|
|
||||||
|
|
||||||
int strisb(enum Strtype t, char *str, int base);
|
|
||||||
int stris(enum Strtype t, char *str);
|
|
Loading…
Reference in New Issue
Block a user