Merge in Data.ByteString head. Fixes ByteString+cbits in hugs
[ghc-base.git] / cbits / fpstring.c
index 3d32083..3fabcc8 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2003 David Roundy
- * Copyright (c) 2005-2006 Don Stewart
+ * Copyright (c) 2005-6 Don Stewart
  *
  * All rights reserved.
  *
  * SUCH DAMAGE.
  */
 
-#include <stdlib.h>
+#include "fpstring.h"
 
 /* copy a string in reverse */
-void reverse(unsigned char *dest, unsigned char *from, int len)
-{
+void reverse(unsigned char *dest, unsigned char *from, int len) {
     unsigned char *p, *q;
     p = from + len - 1;
     q = dest;
@@ -48,15 +47,13 @@ static int cmp(const void *p, const void *q) {
 }
 
 /* quicksort wrapper */
-void my_qsort(unsigned char *base, size_t size)
-{
+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)
-{
+void intersperse(unsigned char *dest, unsigned char *from, int len, char c) {
     unsigned char *p, *q;
     p = from;
     q = dest;
@@ -68,8 +65,7 @@ void intersperse(unsigned char *dest, unsigned char *from, int len, char c)
 }
 
 /* find maximum char in a packed string */
-unsigned char maximum(unsigned char *p, int len)
-{
+unsigned char maximum(unsigned char *p, int len) {
     unsigned char *q, c = *p;
     for (q = p; q < p + len; q++)
         if (*q > c)
@@ -78,11 +74,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 minimum(unsigned char *p, int 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 */
+int count(unsigned char *p, int len, unsigned char w) {
+    int c;
+    for (c = 0; len--; ++p)
+        if (*p == w)
+            ++c;
+    return c;
+}