casereader: New function casereader_create_empty().
authorBen Pfaff <blp@gnu.org>
Sun, 6 Dec 2009 02:30:51 +0000 (18:30 -0800)
committerBen Pfaff <blp@gnu.org>
Sun, 6 Dec 2009 02:30:51 +0000 (18:30 -0800)
src/data/casereader.c
src/data/casereader.h

index 77278851e6c90c324ae455e248fb114ac16d8401..57afff844d251acc9bbffbb40f1b9eb9c7232986 100644 (file)
@@ -699,3 +699,42 @@ static const struct casereader_random_class shim_class =
     shim_destroy,
     shim_advance,
   };
+\f
+static const struct casereader_class casereader_null_class;
+
+/* Returns a casereader with no cases.  The casereader has the prototype
+   specified by PROTO.  PROTO may be specified as a null pointer, in which case
+   the casereader has no variables. */
+struct casereader *
+casereader_create_empty (const struct caseproto *proto_)
+{
+  struct casereader *reader;
+  struct caseproto *proto;
+
+  proto = proto_ != NULL ? caseproto_ref (proto_) : caseproto_create ();
+  reader = casereader_create_sequential (NULL, proto, 0,
+                                         &casereader_null_class, NULL);
+  caseproto_unref (proto);
+
+  return reader;
+}
+
+static struct ccase *
+casereader_null_read (struct casereader *reader UNUSED, void *aux UNUSED)
+{
+  return NULL;
+}
+
+static void
+casereader_null_destroy (struct casereader *reader UNUSED, void *aux UNUSED)
+{
+  /* Nothing to do. */
+}
+
+static const struct casereader_class casereader_null_class =
+  {
+    casereader_null_read,
+    casereader_null_destroy,
+    NULL,                       /* clone */
+    NULL,                       /* peek */
+  };
index fb9d50ff68e31308cc8ab8ef6cc70d6f356f01e6..5300ee1d345b6cd80f710957f60a1fcc1a986517 100644 (file)
@@ -83,6 +83,8 @@ 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 *casereader_create_empty (const struct caseproto *);
+
 struct casereader *
 casereader_create_filter_func (struct casereader *,
                                bool (*include) (const struct ccase *,