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
|
add buffer_putsa, buffer_get_token_sa and buffer_getline_sa
|
||||||
extended uudecode test. See comment at top for details.
|
extended uudecode test. See comment at top for details.
|
||||||
fix #include in ndelay*.3 (Hynek Schlawack)
|
fix #include in ndelay*.3 (Hynek Schlawack)
|
||||||
|
add stralloc_diff and stralloc_diffs (my invention)
|
||||||
|
|
||||||
0.14:
|
0.14:
|
||||||
avoid bus errors in byte_copy
|
avoid bus errors in byte_copy
|
||||||
|
19
stralloc.h
19
stralloc.h
@ -1,6 +1,13 @@
|
|||||||
#ifndef STRALLOC_H
|
#ifndef STRALLOC_H
|
||||||
#define 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.
|
/* stralloc is the internal data structure all functions are working on.
|
||||||
* s is the string.
|
* s is the string.
|
||||||
* len is the used length of 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
|
/* 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
|
* the terminating \0, is a prefix of the string stored in sa. Otherwise
|
||||||
* it returns 0. sa must already be allocated. */
|
* 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 */
|
/* stralloc_0 appends \0 */
|
||||||
#define stralloc_0(sa) stralloc_append(sa,"")
|
#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);
|
int \fBstralloc_starts\fP(stralloc* \fIsa\fR,const char* \fIin\fR);
|
||||||
.SH DESCRIPTION
|
.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
|
the terminating \\0, is a prefix of the string stored in \fIsa\fR. Otherwise
|
||||||
it returns 0. \fIsa\fR must already be allocated.
|
it returns 0. \fIsa\fR must already be allocated.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
|
18
t.c
18
t.c
@ -22,8 +22,26 @@
|
|||||||
__asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx")
|
__asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx")
|
||||||
|
|
||||||
int main(int argc,char* argv[]) {
|
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","FnOrD"));
|
||||||
printf("%d\n",case_starts("fnordhausen","blah"));
|
printf("%d\n",case_starts("fnordhausen","blah"));
|
||||||
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
char buf[]="FnOrD";
|
char buf[]="FnOrD";
|
||||||
case_lowers(buf);
|
case_lowers(buf);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user