casereader: New function casereader_advance(). fc11-i386-build45 fc11-x64-build42 lenny-x64-build66 sid-i386-build114
authorBen Pfaff <blp@gnu.org>
Sat, 5 Dec 2009 22:49:07 +0000 (14:49 -0800)
committerBen Pfaff <blp@gnu.org>
Sat, 5 Dec 2009 22:49:07 +0000 (14:49 -0800)
src/data/casereader.c
src/data/casereader.h

index 0eb3baf5c1ea1af841915c0b01a29a06403fe444..77278851e6c90c324ae455e248fb114ac16d8401 100644 (file)
@@ -264,13 +264,7 @@ casereader_count_cases__ (struct casereader *reader, casenumber max_cases)
   casenumber n_cases;
 
   clone = casereader_clone (reader);
-  for (n_cases = 0; n_cases < max_cases; n_cases++)
-    {
-      struct ccase *c = casereader_read (clone);
-      if (c == NULL)
-        break;
-      case_unref (c);
-    }
+  n_cases = casereader_advance (clone, max_cases);
   casereader_destroy (clone);
 
   return n_cases;
@@ -315,6 +309,26 @@ casereader_get_proto (const struct casereader *reader)
   return reader->proto;
 }
 
+/* Skips past N cases in READER, stopping when the last case in
+   READER has been read or on an input error.  Returns the number
+   of cases successfully skipped. */
+casenumber
+casereader_advance (struct casereader *reader, casenumber n)
+{
+  casenumber i;
+
+  for (i = 0; i < n; i++)
+    {
+      struct ccase *c = casereader_read (reader);
+      if (c == NULL)
+        break;
+      case_unref (c);
+    }
+
+  return i;
+}
+
+
 /* Copies all the cases in READER to WRITER, propagating errors
    appropriately. */
 void
index 107e60693bb6022d9c7ecd55ec6b4b3931d86f30..fb9d50ff68e31308cc8ab8ef6cc70d6f356f01e6 100644 (file)
@@ -80,6 +80,7 @@ casenumber casereader_count_cases (struct casereader *);
 void casereader_truncate (struct casereader *, casenumber);
 const struct caseproto *casereader_get_proto (const struct casereader *);
 
+casenumber casereader_advance (struct casereader *, casenumber);
 void casereader_transfer (struct casereader *, struct casewriter *);
 \f
 struct casereader *