X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fcasereader-provider.h;h=f22cf4accff7b8063b9d812e39f077ea8e206533;hb=656e46ed80e20bf34312f01607a7bebdd2d8d622;hp=0c8b7e538967e4ac15d868e4d19b4f17a80d2437;hpb=43b1296aafe7582e7dbe6c2b6a8b478d7d9b0fcf;p=pspp diff --git a/src/data/casereader-provider.h b/src/data/casereader-provider.h index 0c8b7e5389..f22cf4accf 100644 --- a/src/data/casereader-provider.h +++ b/src/data/casereader-provider.h @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007, 2009, 2011 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 @@ -36,27 +36,30 @@ #ifndef DATA_CASEREADER_PROVIDER_H #define DATA_CASEREADER_PROVIDER_H 1 -#include +#include "data/casereader.h" /* Casereader class for sequential data sources. */ struct casereader_class { /* Mandatory. - Reads the next case from READER into case C, which the - casereader must create and which the client is responsible - for destroying. If successful, returns true and advances - READER to the next case, so that the next call to this - function will read the next case. The case just read will - never be read again by a call to this function for READER. + Reads the next case from READER. If successful, returns + the case and advances READER, so that the next call to + this function will read the following case. The case just + read will never be read again by a call to this function + for READER. - At end of file or upon an I/O error, returns false. After - false is returned once, this function will not be called - again for the given READER. + If a case is successfully returned, the client is + responsible for calling case_unref upon it when it is no + longer needed. + + At end of file or upon an I/O error, returns a null + pointer. After null is returned once, this function will + not be called again for the given READER. If an I/O error occurs, this function should call casereader_force_error on READER. */ - bool (*read) (struct casereader *reader, void *aux, struct ccase *c); + struct ccase *(*read) (struct casereader *reader, void *aux); /* Mandatory. @@ -88,28 +91,31 @@ struct casereader_class (But it might be easier to use the random-access casereader wrapper instead.) - Reads the case at 0-based offset IDX from the beginning of - READER into case C, which the casereader must create and - which the client is responsible for destroying. + Reads and returns the case at 0-based offset IDX from the + beginning of READER. If a case is successfully returned, + the client is responsible for calling case_unref upon it + when it is no longer needed. - At end of file or upon an I/O error, returns false. If - this function returns false, then it will never be called - again for an equal or greater value of IDX, and the "read" - member function will never be called to advance as far as - IDX cases further into the casereader. That is, returning - false indicates that the casereader has fewer than IDX - cases left. + At end of file or upon an I/O error, returns a null + pointer. If this function returns null, then it will + never be called again for an equal or greater value of + IDX, and the "read" member function will never be called + to advance as far as IDX cases further into the + casereader. That is, returning null indicates that the + casereader has fewer than IDX cases left. If an I/O error occurs, this function should call casereader_force_error on READER. */ - bool (*peek) (struct casereader *reader, void *aux, casenumber idx, - struct ccase *c); + struct ccase *(*peek) (struct casereader *reader, void *aux, + casenumber idx); }; struct casereader * casereader_create_sequential (const struct taint *, - size_t value_cnt, casenumber case_cnt, + const struct caseproto *, casenumber case_cnt, const struct casereader_class *, void *); + +void *casereader_dynamic_cast (struct casereader *, const struct casereader_class *); /* Casereader class for random-access data sources. */ struct casereader_random_class @@ -117,21 +123,22 @@ struct casereader_random_class /* Mandatory. Reads the case at 0-based offset IDX from the beginning of - READER into case C, which the casereader must create and - which the client is responsible for destroying. - - At end of file or upon an I/O error, returns false. If - this function returns false, then it will never be called - again for an equal or greater value of IDX, and the "read" - member function will never be called to advance as far as - IDX cases further into the casereader. That is, returning - false indicates that the casereader has fewer than IDX - cases. + READER. If a case is successfully returned, the client is + responsible for calling case_unref upon it when it is no + longer needed. + + At end of file or upon an I/O error, returns a null + pointer. If this function returns null, then it will + never be called again for an equal or greater value of + IDX, and the "read" member function will never be called + to advance as far as IDX cases further into the + casereader. That is, returning null indicates that the + casereader has fewer than IDX cases. If an I/O error occurs, this function should call casereader_force_error on READER. */ - bool (*read) (struct casereader *reader, void *aux, casenumber idx, - struct ccase *c); + struct ccase *(*read) (struct casereader *reader, void *aux, + casenumber idx); /* Mandatory. @@ -153,7 +160,7 @@ struct casereader_random_class }; struct casereader * -casereader_create_random (size_t value_cnt, casenumber case_cnt, +casereader_create_random (const struct caseproto *, casenumber case_cnt, const struct casereader_random_class *, void *aux); #endif /* data/casereader-provider.h */