X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=cbits%2Ffpstring.c;h=9e0b80921d3185c0977388887fd09830a1ab9a26;hb=d71aee821935e29a3569bc4b401f695536209c85;hp=3d32083c60f6b031394677621ca94a9558d42842;hpb=09521ae6f260453e810280f09d85a44ec3e54089;p=haskell-directory.git diff --git a/cbits/fpstring.c b/cbits/fpstring.c index 3d32083..9e0b809 100644 --- a/cbits/fpstring.c +++ b/cbits/fpstring.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2003 David Roundy - * Copyright (c) 2005-2006 Don Stewart + * Copyright (c) 2005-6 Don Stewart * * All rights reserved. * @@ -29,47 +29,33 @@ * SUCH DAMAGE. */ -#include +#include "fpstring.h" /* copy a string in reverse */ -void reverse(unsigned char *dest, unsigned char *from, int len) -{ - unsigned char *p, *q; - p = from + len - 1; - q = dest; - - while (p >= from) +void fps_reverse(unsigned char *q, unsigned char *p, unsigned long n) { + p += n-1; + while (n-- != 0) *q++ = *p--; } -/* compare bytes ascii-wise */ -static int cmp(const void *p, const void *q) { - return (*(unsigned char *)p - *(unsigned char *)q); -} - -/* quicksort wrapper */ -void my_qsort(unsigned char *base, size_t size) -{ - qsort(base, size, sizeof(char), cmp); -} - /* duplicate a string, interspersing the character through the elements of the duplicated string */ -void intersperse(unsigned char *dest, unsigned char *from, int len, char c) -{ - unsigned char *p, *q; - p = from; - q = dest; - while (p < from + len - 1) { - *q++ = *p++; +void fps_intersperse(unsigned char *q, + unsigned char *p, + unsigned long n, + unsigned char c) { + + while (n > 1) { + *q++ = *p++; *q++ = c; + n--; } - *q = *p; + if (n == 1) + *q = *p; } /* find maximum char in a packed string */ -unsigned char maximum(unsigned char *p, int len) -{ +unsigned char fps_maximum(unsigned char *p, unsigned long len) { unsigned char *q, c = *p; for (q = p; q < p + len; q++) if (*q > c) @@ -78,11 +64,19 @@ unsigned char maximum(unsigned char *p, int len) } /* find minimum char in a packed string */ -unsigned char minimum(unsigned char *p, int len) -{ +unsigned char fps_minimum(unsigned char *p, unsigned long len) { unsigned char *q, c = *p; for (q = p; q < p + len; q++) if (*q < c) c = *q; return c; } + +/* count the number of occurences of a char in a string */ +unsigned long fps_count(unsigned char *p, unsigned long len, unsigned char w) { + unsigned long c; + for (c = 0; len-- != 0; ++p) + if (*p == w) + ++c; + return c; +}