subcase: Rename subcase_destroy() to subcase_uninit().
[pspp] / src / data / subcase.h
index d50d0748ba86fbe89b64cd93db82f3b0f6a07408..4e5043648c4728fbbacfe01fecb5ab3f0cf0173a 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2009 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
@@ -44,7 +44,8 @@ struct subcase
   {
     struct subcase_field *fields;
     size_t n_fields;
-    size_t n_values;
+
+    struct caseproto *proto;    /* Created lazily. */
   };
 
 void subcase_init_empty (struct subcase *);
@@ -52,17 +53,36 @@ void subcase_init_vars (struct subcase *,
                         const struct variable *const *, size_t n_vars);
 void subcase_init_var (struct subcase *,
                        const struct variable *, enum subcase_direction);
+void subcase_init (struct subcase *, int index, int width,
+                  enum subcase_direction);
+
 void subcase_clone (struct subcase *, const struct subcase *);
 void subcase_clear (struct subcase *);
-void subcase_destroy (struct subcase *);
+void subcase_uninit (struct subcase *);
 
+bool subcase_contains (const struct subcase *, int case_index);
+bool subcase_contains_var (const struct subcase *, const struct variable *);
+
+bool subcase_add (struct subcase *, int case_index, int width,
+                 enum subcase_direction direction);
 bool subcase_add_var (struct subcase *, const struct variable *,
                       enum subcase_direction);
 
+void subcase_add_always (struct subcase *sc, int case_index, int width,
+                         enum subcase_direction direction);
+void subcase_add_var_always (struct subcase *, const struct variable *,
+                             enum subcase_direction);
+void subcase_add_vars_always (struct subcase *,
+                              const struct variable *const *, size_t n_vars);
+void subcase_add_proto_always (struct subcase *, const struct caseproto *);
+
+const struct caseproto *subcase_get_proto (const struct subcase *);
+
 static inline bool subcase_is_empty (const struct subcase *);
 static inline size_t subcase_get_n_fields (const struct subcase *);
-static inline size_t subcase_get_n_values (const struct subcase *);
 
+static inline size_t subcase_get_case_index (const struct subcase *,
+                                             size_t idx);
 static inline enum subcase_direction subcase_get_direction (
   const struct subcase *, size_t idx);
 
@@ -92,6 +112,12 @@ bool subcase_equal_cx (const struct subcase *,
 bool subcase_equal_xx (const struct subcase *,
                        const union value *a, const union value *b);
 
+static inline size_t
+subcase_get_case_index (const struct subcase *sc, size_t idx)
+{
+  return sc->fields[idx].case_index;
+}
+
 static inline enum subcase_direction
 subcase_get_direction (const struct subcase *sc, size_t idx)
 {
@@ -110,10 +136,4 @@ subcase_get_n_fields (const struct subcase *sc)
   return sc->n_fields;
 }
 
-static inline size_t
-subcase_get_n_values (const struct subcase *sc)
-{
-  return sc->n_values;
-}
-
 #endif /* data/subcase.h */