Преглед изворни кода

add stralloc_diff and stralloc_diffs

master
Felix von Leitner пре 18 година
родитељ
комит
3e4db0c7c9
8 измењених фајлова са 93 додато и 2 уклоњено
  1. +1
    -0
      CHANGES
  2. +18
    -1
      stralloc.h
  3. +13
    -0
      stralloc/stralloc_diff.3
  4. +14
    -0
      stralloc/stralloc_diff.c
  5. +14
    -0
      stralloc/stralloc_diffs.3
  6. +14
    -0
      stralloc/stralloc_diffs.c
  7. +1
    -1
      stralloc/stralloc_starts.3
  8. +18
    -0
      t.c

+ 1
- 0
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


+ 18
- 1
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
- 0
stralloc/stralloc_diff.3 Прегледај датотеку

@@ -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
- 0
stralloc/stralloc_diff.c Прегледај датотеку

@@ -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
- 0
stralloc/stralloc_diffs.3 Прегледај датотеку

@@ -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
- 0
stralloc/stralloc_diffs.c Прегледај датотеку

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


+ 1
- 1
stralloc/stralloc_starts.3 Прегледај датотеку

@@ -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
- 0
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…
Откажи
Сачувај