virtual bool next() { bool next_res = false; if (!rs_) { // Ensure connection is valid if (conn_ && conn_->isOK()) { rs_ = conn_->getAsyncResult(); } else { throw mapnik::datasource_exception("invalid connection in AsyncResultSet::next"); } } next_res = rs_->next(); if (!next_res) { rs_.reset(); rs_ = conn_->getNextAsyncResult(); if (rs_ && rs_->next()) { return true; } close(); prepare_next(); } return next_res; }
/* move record foreward to next entry. * * In case of an error the value of *r is undefined ! */ int record_next(record* r) { btree* tree = r->tree; UInt16 index = r->keyind +1; UInt32 parent; node_buf* buf = prepare_next(tree, r->node_index, &index); if (!buf) return ENOENT; // No (more) such file or directory parent = r->key.parent_cnid; if (record_init(r, tree, buf, index)) return -1; if (r->key.parent_cnid != parent || // end of current directory index != r->keyind) // internal error ? return ENOENT; // No (more) such file or directory return 0; }
/* move record foreward to next extent record. * * In case of an error the value of *r is undefined ! */ int record_next_extent(extent_record* r) { btree* tree = r->tree; UInt16 index = r->keyind +1; UInt32 file_id; UInt8 fork_type; node_buf* buf = prepare_next(tree, r->node_index, &index); if (!buf) return ENOENT; // No (more) such file or directory file_id = r->key.file_id; fork_type = r->key.fork_type; if (record_init_extent(r, tree, buf, index)) return -1; if (r->key.file_id != file_id || // end of current file r->key.fork_type != fork_type || // end of current fork index != r->keyind) // internal error ? return ENOENT; // No (more) such file or directory return 0; }