X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fcasereader.c;h=ee7facb769dbf9a26dc96d717f1249a7fe44879b;hb=ee7be3e962a4faba54d7bc01364365b51167242c;hp=8b78645627e1243f4efb875612b97eac2666cc70;hpb=83ad8f5b760cb46bd1d86f60a40d6aace21118ef;p=pspp diff --git a/src/data/casereader.c b/src/data/casereader.c index 8b78645627..ee7facb769 100644 --- a/src/data/casereader.c +++ b/src/data/casereader.c @@ -183,6 +183,24 @@ casereader_peek (struct casereader *reader, casenumber idx, struct ccase *c) return false; } +/* Returns true if no cases remain to be read from READER, or if + an error has occurred on READER. (A return value of false + does *not* mean that the next call to casereader_peek or + casereader_read will return true, because an error can occur + in the meantime.) */ +bool +casereader_is_empty (struct casereader *reader) +{ + struct ccase c; + if (reader->case_cnt == 0 || !casereader_peek (reader, 0, &c)) + return true; + else + { + case_destroy (&c); + return false; + } +} + /* Returns true if an I/O error or another hard error has occurred on READER, a clone of READER, or on some object on which READER's data has a dependency, false otherwise. */ @@ -338,7 +356,7 @@ casereader_create_sequential (const struct taint *taint, casereader to be replaced by a shim caseader). */ void * casereader_dynamic_cast (struct casereader *reader, - struct casereader_class *class) + const struct casereader_class *class) { return reader->class == class ? reader->aux : NULL; } @@ -375,7 +393,7 @@ struct random_reader_shared void *aux; }; -static struct casereader_class random_reader_casereader_class; +static const struct casereader_class random_reader_casereader_class; /* Creates and returns a new random_reader with the given SHARED data and OFFSET. Inserts the new random reader into the @@ -523,7 +541,7 @@ random_reader_peek (struct casereader *reader, void *br_, } /* Casereader class for random reader. */ -static struct casereader_class random_reader_casereader_class = +static const struct casereader_class random_reader_casereader_class = { random_reader_read, random_reader_destroy, @@ -562,7 +580,7 @@ struct shim struct casereader *subreader; /* Subordinate casereader. */ }; -static struct casereader_random_class shim_class; +static const struct casereader_random_class shim_class; /* Interposes a buffering shim atop READER. */ static void @@ -571,7 +589,7 @@ insert_shim (struct casereader *reader) size_t value_cnt = casereader_get_value_cnt (reader); casenumber case_cnt = casereader_get_case_cnt (reader); struct shim *b = xmalloc (sizeof *b); - b->window = casewindow_create (value_cnt, get_workspace_cases (value_cnt)); + b->window = casewindow_create (value_cnt, settings_get_workspace_cases (value_cnt)); b->subreader = casereader_create_random (value_cnt, case_cnt, &shim_class, b); casereader_swap (reader, b->subreader); @@ -628,7 +646,7 @@ shim_advance (struct casereader *reader UNUSED, void *b_, casenumber case_cnt) } /* Class for the buffered reader. */ -static struct casereader_random_class shim_class = +static const struct casereader_random_class shim_class = { shim_read, shim_destroy,