Patch #6441. Reviewed by John Darrington.
authorBen Pfaff <blp@gnu.org>
Wed, 5 Mar 2008 05:56:51 +0000 (05:56 +0000)
committerBen Pfaff <blp@gnu.org>
Wed, 5 Mar 2008 05:56:51 +0000 (05:56 +0000)
(ss_match_char_in): New function.

src/libpspp/ChangeLog
src/libpspp/str.c
src/libpspp/str.h

index 7f22461015354ef809cacf86114490aa0406032e..c201dc0770fd222489db551eb4936ccbe4b648ee 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-04  Ben Pfaff  <blp@gnu.org>
+
+       Patch #6441.  Reviewed by John Darrington.
+
+       * str.c (ss_match_char_in): New function.
+
 2008-02-18  Ben Pfaff  <blp@gnu.org>
 
        Patch #6426.  Thanks to John Darrington for review.
index b88493d47fabafff46fd36a724cdcc1ad3e26d68..9a7c6da8bfa8c36e50cca3cfd7b7bfe99a6cf0db 100644 (file)
@@ -546,6 +546,23 @@ ss_match_char (struct substring *ss, char c)
     return false;
 }
 
+/* If the first character in SS is in MATCH, removes it and
+   returns the character that was removed.
+   Otherwise, returns EOF without changing the string. */
+int
+ss_match_char_in (struct substring *ss, struct substring match)
+{
+  int c = EOF;
+  if (ss->length > 0
+      && memchr (match.string, ss->string[0], match.length) != NULL)
+    {
+      c = ss->string[0];
+      ss->string++;
+      ss->length--;
+    }
+  return c;
+}
+
 /* If SS begins with TARGET, removes it and returns true.
    Otherwise, returns false without changing SS. */
 bool
index 0d48bd9bf02229a15b920e2c33280ffa326f62b8..ff00b3593356580bd3a2888a1d2c26ebaec4c217 100644 (file)
@@ -105,6 +105,7 @@ bool ss_tokenize (struct substring src, struct substring delimiters,
                   size_t *save_idx, struct substring *token);
 void ss_advance (struct substring *, size_t);
 bool ss_match_char (struct substring *, char);
+int ss_match_char_in (struct substring *, struct substring);
 bool ss_match_string (struct substring *, const struct substring);
 int ss_get_char (struct substring *);
 size_t ss_get_chars (struct substring *, size_t cnt, struct substring *);