X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvfm.h;h=cfd639a925ead255085b610cc7f6bb49aca25637;hb=53ceff2865473a6b561b521986fafd31a993a1a6;hp=06425b2c854d43196d9a3aae98ee1cc450b082db;hpb=37597beca4a11edba50b847932fdfeca3a648fa2;p=pspp diff --git a/src/vfm.h b/src/vfm.h index 06425b2c85..cfd639a925 100644 --- a/src/vfm.h +++ b/src/vfm.h @@ -14,17 +14,14 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ #if !vfm_h #define vfm_h 1 #include -/* This is the time at which vfm was last invoked. */ -extern time_t last_vfm_invocation; - struct ccase; typedef struct write_case_data *write_case_data; typedef int write_case_func (write_case_data); @@ -36,7 +33,6 @@ extern struct case_source *vfm_source; struct case_source { const struct case_source_class *class; /* Class. */ - size_t value_cnt; /* Number of `union value's in case. */ void *aux; /* Auxiliary data. */ }; @@ -59,25 +55,21 @@ struct case_source_class void (*destroy) (struct case_source *); }; -extern const struct case_source_class memory_source_class; -extern const struct case_source_class disk_source_class; -extern const struct case_source_class data_list_source_class; +extern const struct case_source_class storage_source_class; extern const struct case_source_class file_type_source_class; extern const struct case_source_class input_program_source_class; -extern const struct case_source_class get_source_class; -extern const struct case_source_class import_source_class; -extern const struct case_source_class sort_source_class; struct dictionary; struct case_source *create_case_source (const struct case_source_class *, - const struct dictionary *, void *); +void free_case_source (struct case_source *); + int case_source_is_complex (const struct case_source *); int case_source_is_class (const struct case_source *, const struct case_source_class *); -struct case_list *memory_source_get_cases (const struct case_source *); -void memory_source_set_cases (const struct case_source *, - struct case_list *); + +struct casefile *storage_source_get_casefile (struct case_source *); +struct case_source *storage_source_create (struct casefile *); /* The replacement active file, to which cases are written. */ extern struct case_sink *vfm_sink; @@ -86,7 +78,8 @@ extern struct case_sink *vfm_sink; struct case_sink { const struct case_sink_class *class; /* Class. */ - void *aux; /* Auxiliary data. */ + void *aux; /* Auxiliary data. */ + size_t value_cnt; /* Number of `union value's in case. */ }; /* A case sink class. */ @@ -94,7 +87,7 @@ struct case_sink_class { const char *name; /* Identifying name. */ - /* Creates the sink and opens it for writing. */ + /* Opens the sink for writing. */ void (*open) (struct case_sink *); /* Writes a case to the sink. */ @@ -103,33 +96,38 @@ struct case_sink_class /* Closes and destroys the sink. */ void (*destroy) (struct case_sink *); - /* Closes and destroys the sink and returns a source that can - read back the cases that were written, perhaps transformed - in some way. */ + /* Closes the sink and returns a source that can read back + the cases that were written, perhaps transformed in some + way. The sink must still be separately destroyed by + calling destroy(). */ struct case_source *(*make_source) (struct case_sink *); }; -extern const struct case_sink_class memory_sink_class; -extern const struct case_sink_class disk_sink_class; -extern const struct case_sink_class sort_sink_class; +extern const struct case_sink_class storage_sink_class; +extern const struct case_sink_class null_sink_class; -struct case_sink *create_case_sink (const struct case_sink_class *, void *); +struct case_sink *create_case_sink (const struct case_sink_class *, + const struct dictionary *, + void *); +void case_sink_open (struct case_sink *); +void case_sink_write (struct case_sink *, const struct ccase *); +void case_sink_destroy (struct case_sink *); +void free_case_sink (struct case_sink *); /* Number of cases to lag. */ extern int n_lag; -void procedure (void (*begin_func) (void *aux), - int (*proc_func) (struct ccase *, void *aux), - void (*end_func) (void *aux), - void *aux); +void procedure (int (*proc_func) (struct ccase *, void *aux), void *aux); +void procedure_with_splits (void (*begin_func) (void *aux), + int (*proc_func) (struct ccase *, void *aux), + void (*end_func) (void *aux), + void *aux); struct ccase *lagged_case (int n_before); -void compact_case (struct ccase *dest, const struct ccase *src); -void write_active_file_to_disk (void); - -void process_active_file (void (*begin_func) (void *), - int (*casefunc) (struct ccase *, void *), - void (*end_func) (void *), - void *aux); -void process_active_file_output_case (const struct ccase *); + +void multipass_procedure_with_splits (void (*) (const struct casefile *, + void *), + void *aux); + +time_t vfm_last_invocation (void); #endif /* !vfm_h */