--- parser3/src/main/Attic/pa_array.C 2001/05/17 19:33:33 1.35 +++ parser3/src/main/Attic/pa_array.C 2001/10/19 12:43:30 1.40 @@ -2,10 +2,9 @@ Parser: array class. Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://design.ru/paf) - $Id: pa_array.C,v 1.35 2001/05/17 19:33:33 parser Exp $ + $Id: pa_array.C,v 1.40 2001/10/19 12:43:30 parser Exp $ */ #include "pa_pool.h" @@ -52,7 +51,7 @@ Array& Array::operator += (Item *src) { Array::Item *Array::get(int index) const { if(!(index>=0 && index=0 && indexrows; row!=append_here; row++) - if((*func)(row->item, info)) - return row->item; + if(void *result=(*func)(row->item, info)) + return result; break; } else { int count=chunk->count; for(int i=0; irows[i].item; - if((*func)(item, info)) - return item; + if(void *result=(*func)(item, info)) + return result; } chunk=chunk->rows[count].link; } @@ -199,20 +198,20 @@ Array::Item* Array::first_that(First_tha return 0; } -Array::Item* Array::first_that(First_that_func func, void *info) const { +void* Array::first_that(Item_that_func func, void *info) const { Chunk *chunk=head; while(true) { if(chunk==tail) { // last chunk? for(Chunk::Row *row=chunk->rows; row!=append_here; row++) - if((*func)(row->item, info)) - return row->item; + if(void *result=(*func)(row->item, info)) + return result; break; } else { int count=chunk->count; for(int i=0; irows[i].item; - if((*func)(item, info)) - return item; + if(void *result=(*func)(item, info)) + return result; } chunk=chunk->rows[count].link; }