X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fcasereader-provider.h;h=f22cf4accff7b8063b9d812e39f077ea8e206533;hb=81579d9e9f994fb2908f50af41c3eb033d216e58;hp=d4c6af28c556abf79b1ce70aa4bf0036c241bd46;hpb=f5c108becd49d78f4898cab11352291f5689d24e;p=pspp-builds.git diff --git a/src/data/casereader-provider.h b/src/data/casereader-provider.h index d4c6af28..f22cf4ac 100644 --- a/src/data/casereader-provider.h +++ b/src/data/casereader-provider.h @@ -1,20 +1,18 @@ -/* PSPP - computes sample statistics. - Copyright (C) 2007 Free Software Foundation, Inc. +/* PSPP - a program for statistical analysis. + 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 the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. 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., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ + along with this program. If not, see . */ /* Definitions needed to implement a new type of casereader. Code that only uses casereaders does not need this header. @@ -38,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. @@ -90,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 @@ -119,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. @@ -155,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 */