--- parser3/src/main/Attic/pa_array.C 2001/03/11 08:16:34 1.22 +++ parser3/src/main/Attic/pa_array.C 2001/03/24 10:54:46 1.26 @@ -1,12 +1,14 @@ -/* - Parser +/** @file + 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.22 2001/03/11 08:16:34 paf Exp $ + $Id: pa_array.C,v 1.26 2001/03/24 10:54:46 paf Exp $ */ -#include +#include "pa_config_includes.h" #include "pa_pool.h" #include "pa_array.h" @@ -145,3 +147,38 @@ Array& Array::append_array(const Array& return *this; } + +void Array::for_each(For_each_func func, void *info) { + Chunk *chunk=head; + while(true) { + if(chunk==tail) { // last chunk? + for(Chunk::Row *row=chunk->rows; row!=append_here; row++) + (*func)(row->item, info); + break; + } else { + int count=chunk->count; + for(int i=0; irows[i].item, info); + chunk=chunk->rows[count].link; + } + } +} + +Array::Item* Array::first_that(First_that_func func, const void *info) { + Chunk *chunk=head; + while(true) { + if(chunk==tail) { // last chunk? + for(Chunk::Row *row=chunk->rows; row!=append_here; row++) + if(Item *result=(*func)(row->item, info)) + return result; + break; + } else { + int count=chunk->count; + for(int i=0; irows[i].item, info)) + return result; + chunk=chunk->rows[count].link; + } + } + return 0; +}