case, caseproto: Implement save and load.
[pspp] / src / data / case.c
index bb6f7c0a8e05c735f9b17cd0aab309993e4d7a21..9d459ac078d4cddc81e22b9132808e2a23965227 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2004, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2007, 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -435,6 +435,28 @@ case_data_all_rw (struct ccase *c)
   return c->values;
 }
 
+struct pxd_object *
+case_save (const struct ccase *c, struct pxd *pxd)
+{
+  struct pxd_builder b;
+  size_t i;
+
+  pxd_builder_init (&b, pxd);
+
+  pxd_builder_put_link (&b, caseproto_save (c->proto, pxd));
+  for (i = 0; i < caseproto_get_n_widths (c->proto); i++)
+    {
+      int width = caseproto_get_width (c->proto, i);
+      if (width >= 0)
+        pxd_builder_put_value (&b, case_data_idx (c, i), width);
+    }
+
+  return pxd_builder_commit (&b);
+}
+
+struct ccase *case_load (struct pxd_object *, const struct pxd *);
+
+
 /* Internal helper function for case_unshare. */
 struct ccase *
 case_unshare__ (struct ccase *old)