casereader: Implement save, load.
[pspp] / src / data / case.c
index 9d459ac078d4cddc81e22b9132808e2a23965227..d36f66a6ae46385a44ab5a2a9024678a0bf6f674 100644 (file)
@@ -454,8 +454,29 @@ case_save (const struct ccase *c, struct pxd *pxd)
   return pxd_builder_commit (&b);
 }
 
-struct ccase *case_load (struct pxd_object *, const struct pxd *);
+struct ccase *
+case_load (struct pxd_object *object, const struct pxd *pxd)
+{
+  struct caseproto *proto;
+  struct pxd_parser p;
+  struct ccase *c;
+  size_t i;
+
+  pxd_parser_init (&p, object, pxd);
+
+  proto = caseproto_load (pxd_parser_get_link (&p), pxd);
+  c = case_create (proto);
 
+  for (i = 0; i < caseproto_get_n_widths (proto); i++)
+    pxd_parser_get_value (&p, case_data_rw_idx (c, i),
+                          caseproto_get_width (proto, i));
+
+  caseproto_unref (proto);
+
+  pxd_parser_destroy (&p);
+
+  return c;
+}
 
 /* Internal helper function for case_unshare. */
 struct ccase *