#include "data/dictionary.h"
#include "data/identifier.h"
+#include "data/variable.h"
#include "libpspp/assertion.h"
#include "libpspp/i18n.h"
+#include "libpspp/pxd.h"
#include "libpspp/str.h"
#include "gl/xalloc.h"
assert (var_cnt > 0);
assert (id_is_plausible (name, false));
+ vector->name = xstrdup (name);
vector->name = xstrdup (name);
vector->vars = xmemdup (vars, var_cnt * sizeof *vector->vars);
return utf8_strcasecmp (a->name, b->name);
}
+struct pxd_object *
+vector_save (const struct vector *vector, struct pxd *pxd)
+{
+ struct pxd_builder b;
+ size_t i;
+
+ pxd_builder_init (&b, pxd);
+
+ pxd_builder_put_string (&b, vector->name);
+
+ pxd_builder_put_size_t (&b, vector->var_cnt);
+ for (i = 0; i < vector->var_cnt; i++)
+ pxd_builder_put_size_t (&b, var_get_dict_index (vector->vars[i]));
+
+ return pxd_builder_commit (&b);
+}
+
+struct vector *
+vector_load (struct pxd_object *object, const struct pxd *pxd,
+ const struct dictionary *dict)
+{
+ struct pxd_parser p;
+ struct vector *vector;
+ size_t i;
+
+ vector = xzalloc (sizeof *vector);
+
+ pxd_parser_init (&p, object, pxd);
+
+ vector->name = pxd_parser_get_string (&p);
+
+ vector->var_cnt = pxd_parser_get_size_t (&p);
+ vector->vars = xmalloc (vector->var_cnt * sizeof *vector->vars);
+ for (i = 0; i < vector->var_cnt; i++)
+ vector->vars[i] = dict_get_var (dict, pxd_parser_get_size_t (&p));
+
+ return vector;
+}