X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fdata%2Fstorage-stream.c;h=74769023e74749725183eddb7f6e477a3d1dcca6;hb=1255b66223eac8ff1b0abf138ead22fd801c6633;hp=a758c5a1e021e66051778b320203c186b5c21805;hpb=0d7b430cd1cef60b963a54307622d6f4aa8efeb4;p=pspp diff --git a/src/data/storage-stream.c b/src/data/storage-stream.c index a758c5a1e0..74769023e7 100644 --- a/src/data/storage-stream.c +++ b/src/data/storage-stream.c @@ -21,12 +21,14 @@ #include +#include #include #include #include #include #include +#include #include "xalloc.h" @@ -45,7 +47,7 @@ storage_sink_open (struct case_sink *sink) struct storage_stream_info *info; sink->aux = info = xmalloc (sizeof *info); - info->casefile = casefile_create (sink->value_cnt); + info->casefile = fastfile_create (sink->value_cnt); } /* Destroys storage stream represented by INFO. */ @@ -151,6 +153,7 @@ const struct case_source_class storage_source_class = storage_source_destroy, }; +/* Returns the casefile encapsulated by SOURCE. */ struct casefile * storage_source_get_casefile (struct case_source *source) { @@ -160,13 +163,30 @@ storage_source_get_casefile (struct case_source *source) return info->casefile; } +/* Destroys SOURCE and returns the casefile that it + encapsulated. */ +struct casefile * +storage_source_decapsulate (struct case_source *source) +{ + struct storage_stream_info *info = source->aux; + struct casefile *casefile; + + assert (source->class == &storage_source_class); + casefile = info->casefile; + info->casefile = NULL; + free_case_source (source); + return casefile; +} + +/* Creates and returns a new storage stream that encapsulates + CASEFILE. */ struct case_source * -storage_source_create (struct casefile *cf) +storage_source_create (struct casefile *casefile) { struct storage_stream_info *info; info = xmalloc (sizeof *info); - info->casefile = cf; + info->casefile = casefile; return create_case_source (&storage_source_class, info); }