add stralloc_diff and stralloc_diffs
This commit is contained in:
parent
e108646f26
commit
2cd4641da9
1
CHANGES
1
CHANGES
@ -4,6 +4,7 @@
|
||||
add buffer_putsa, buffer_get_token_sa and buffer_getline_sa
|
||||
extended uudecode test. See comment at top for details.
|
||||
fix #include in ndelay*.3 (Hynek Schlawack)
|
||||
add stralloc_diff and stralloc_diffs (my invention)
|
||||
|
||||
0.14:
|
||||
avoid bus errors in byte_copy
|
||||
|
19
stralloc.h
19
stralloc.h
@ -1,6 +1,13 @@
|
||||
#ifndef STRALLOC_H
|
||||
#define STRALLOC_H
|
||||
|
||||
#ifdef __dietlibc__
|
||||
#include <sys/cdefs.h>
|
||||
#endif
|
||||
#ifndef __pure__
|
||||
#define __pure__
|
||||
#endif
|
||||
|
||||
/* stralloc is the internal data structure all functions are working on.
|
||||
* s is the string.
|
||||
* len is the used length of the string.
|
||||
@ -66,7 +73,17 @@ extern int stralloc_append(stralloc* sa,const char* in); /* beware: this takes a
|
||||
/* stralloc_starts returns 1 if the \0-terminated string in "in", without
|
||||
* the terminating \0, is a prefix of the string stored in sa. Otherwise
|
||||
* it returns 0. sa must already be allocated. */
|
||||
extern int stralloc_starts(stralloc* sa,const char* in);
|
||||
extern int stralloc_starts(stralloc* sa,const char* in) __pure__;
|
||||
|
||||
/* stralloc_diff returns negative, 0, or positive, depending on whether
|
||||
* a is lexicographically smaller than, equal to, or greater than the
|
||||
* string b. */
|
||||
extern int stralloc_diff(const stralloc* a,const stralloc* b) __pure__;
|
||||
|
||||
/* stralloc_diffs returns negative, 0, or positive, depending on whether
|
||||
* a is lexicographically smaller than, equal to, or greater than the
|
||||
* string b[0], b[1], ..., b[n]=='\0'. */
|
||||
extern int stralloc_diffs(const stralloc* a,const char* b) __pure__;
|
||||
|
||||
/* stralloc_0 appends \0 */
|
||||
#define stralloc_0(sa) stralloc_append(sa,"")
|
||||
|
13
stralloc/stralloc_diff.3
Normal file
13
stralloc/stralloc_diff.3
Normal file
@ -0,0 +1,13 @@
|
||||
.TH stralloc_diffs 3
|
||||
.SH NAME
|
||||
stralloc_diffs \- compare two strallocs
|
||||
.SH SYNTAX
|
||||
.B #include <stralloc.h>
|
||||
|
||||
int \fBstralloc_diff\fP(const stralloc* \fIa\fR,const stralloc* \fIb\fR);
|
||||
.SH DESCRIPTION
|
||||
stralloc_diff returns negative, 0, or positive, depending on whether
|
||||
\fIa\fR is lexicographically smaller than, equal to, or greater than the
|
||||
string \fIb\fR.
|
||||
.SH "SEE ALSO"
|
||||
stralloc_diffs(3), stralloc_starts(3)
|
14
stralloc/stralloc_diff.c
Normal file
14
stralloc/stralloc_diff.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include "stralloc.h"
|
||||
#include "byte.h"
|
||||
#include "str.h"
|
||||
|
||||
extern int stralloc_diff(const stralloc* a,const stralloc* b) {
|
||||
register unsigned int i;
|
||||
register int j;
|
||||
for (i=0;;++i) {
|
||||
if (i==a->len) return i==b->len?0:-1; if (i==b->len) return 1;
|
||||
if ((j=(a->s[i]-b->s[i]))) return j;
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
14
stralloc/stralloc_diffs.3
Normal file
14
stralloc/stralloc_diffs.3
Normal file
@ -0,0 +1,14 @@
|
||||
.TH stralloc_diffs 3
|
||||
.SH NAME
|
||||
stralloc_diffs \- check if string is prefix of stralloc
|
||||
.SH SYNTAX
|
||||
.B #include <stralloc.h>
|
||||
|
||||
int \fBstralloc_diffs\fP(stralloc* \fIa\fR,const char* \fIb\fR);
|
||||
.SH DESCRIPTION
|
||||
stralloc_diffs returns negative, 0, or positive, depending on whether
|
||||
the \\0-terminated string in \fIa\fR, without
|
||||
the terminating \\0, is lexicographically smaller than, equal to, or
|
||||
greater than the string stored in \fIa\fR.
|
||||
.SH "SEE ALSO"
|
||||
stralloc_diff(3), stralloc_starts(3), str_diff(3)
|
14
stralloc/stralloc_diffs.c
Normal file
14
stralloc/stralloc_diffs.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include "stralloc.h"
|
||||
#include "byte.h"
|
||||
#include "str.h"
|
||||
|
||||
extern int stralloc_diffs(const stralloc* a,const char* b) {
|
||||
register unsigned int i;
|
||||
register int j;
|
||||
for (i=0;;++i) {
|
||||
if (i==a->len) return (!b[i])?0:-1; if (!b[i]) return 1;
|
||||
if ((j=(a->s[i]-b[i]))) return j;
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ stralloc_starts \- check if string is prefix of stralloc
|
||||
|
||||
int \fBstralloc_starts\fP(stralloc* \fIsa\fR,const char* \fIin\fR);
|
||||
.SH DESCRIPTION
|
||||
stralloc_starts returns 1 if the \\0-terminated string in \fIbuf\fR, without
|
||||
stralloc_starts returns 1 if the \\0-terminated string in \fIin\fR, without
|
||||
the terminating \\0, is a prefix of the string stored in \fIsa\fR. Otherwise
|
||||
it returns 0. \fIsa\fR must already be allocated.
|
||||
.SH "SEE ALSO"
|
||||
|
18
t.c
18
t.c
@ -22,8 +22,26 @@
|
||||
__asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx")
|
||||
|
||||
int main(int argc,char* argv[]) {
|
||||
#if 0
|
||||
static stralloc s,t;
|
||||
stralloc_copys(&s,"fnord");
|
||||
stralloc_copys(&t,"abc"); printf("%d\n",stralloc_diff(&s,&t));
|
||||
stralloc_copys(&t,"fnor"); printf("%d\n",stralloc_diff(&s,&t));
|
||||
stralloc_copys(&t,"fnord"); printf("%d\n",stralloc_diff(&s,&t));
|
||||
stralloc_copys(&t,"fnordh"); printf("%d\n",stralloc_diff(&s,&t));
|
||||
stralloc_copys(&t,"hausen"); printf("%d\n",stralloc_diff(&s,&t));
|
||||
#endif
|
||||
static stralloc s;
|
||||
stralloc_copys(&s,"fnord");
|
||||
printf("%d\n",stralloc_diffs(&s,"abc"));
|
||||
printf("%d\n",stralloc_diffs(&s,"fnor"));
|
||||
printf("%d\n",stralloc_diffs(&s,"fnord"));
|
||||
printf("%d\n",stralloc_diffs(&s,"fnordh"));
|
||||
printf("%d\n",stralloc_diffs(&s,"hausen"));
|
||||
#if 0
|
||||
printf("%d\n",case_starts("fnordhausen","FnOrD"));
|
||||
printf("%d\n",case_starts("fnordhausen","blah"));
|
||||
#endif
|
||||
#if 0
|
||||
char buf[]="FnOrD";
|
||||
case_lowers(buf);
|
||||
|
Loading…
x
Reference in New Issue
Block a user