--- parser3/src/main/pa_string.C 2003/02/04 15:15:03 1.172.2.13 +++ parser3/src/main/pa_string.C 2003/02/20 14:53:35 1.172.2.17 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_STRING_C="$Date: 2003/02/04 15:15:03 $"; +static const char* IDENT_STRING_C="$Date: 2003/02/20 14:53:35 $"; #include "pcre.h" @@ -21,7 +21,7 @@ static const char* IDENT_STRING_C="$Date const int MAX_MATCH_GROUPS=100; -class String_match_table_template_columns: public Array { +class String_match_table_template_columns: public ArrayString { Pool pool; public: String_match_table_template_columns() { @@ -74,6 +74,8 @@ String& String::real_append(STRING_APPEN fragment->origin.line=line; #endif + fsize+=size; + return *this; } @@ -103,9 +105,12 @@ int String::cmp(int& partial, const Stri bool a_break; bool b_break; - while(!( - (a_break=(a_current==a_end)) - || (b_break=(b_current==b_end)))) { + while(true) { + a_break=(a_current==a_end); + b_break=(b_current==b_end); + if(a_break || b_break) + break; + if(pos+a_current->size > this_offset) { if(lang!=UL_UNSPECIFIED && a_current->lang>(String_UL)lang) return -1; // wrong lang -- bail out @@ -169,9 +174,10 @@ int String::cmp(int& partial, const char bool a_break; bool b_break=b_size==0; - while(!( - (a_break=(a_current==a_end)) - || b_break)) { + while(true) { + a_break=(a_current==a_end); + if(a_break || b_break) + break; if(pos+a_current->size > this_offset) { if(lang!=UL_UNSPECIFIED && a_current->lang>(String_UL)lang) return -1; // wrong lang -- bail out @@ -293,7 +299,7 @@ int String::pos(const char* substr, size return -1; } -void String::split(Array& result, +void String::split(ArrayString& result, size_t* pos_after_ref, const char* delim, size_t delim_size, Untaint_lang lang, int limit) { @@ -320,7 +326,7 @@ void String::split(Array& res } } -void String::split(Array& result, +void String::split(ArrayString& result, size_t* pos_after_ref, const String& delim, Untaint_lang lang, int limit) { @@ -434,7 +440,7 @@ TablePtr String::match(Charset& source_c if(exec_substrings==PCRE_ERROR_NOMATCH) { pcre_free(code); - row_action(*result.get(), 0/*last time, no raw*/, 0, 0, poststart, postfinish, info); + row_action(result, ArrayStringPtr(0)/*last time, no raw*/, 0, 0, poststart, postfinish, info); if(option_bits[1]) return result; // global=true+result else @@ -451,7 +457,7 @@ TablePtr String::match(Charset& source_c int prefinish=ovector[0]; poststart=ovector[1]; - object_ptr > row(new Array); + object_ptr row(new ArrayString); if(need_pre_post_match) { *row+=mid(0, prefinish); // .prematch column value *row+=mid(prefinish, poststart); // .match @@ -467,11 +473,11 @@ TablePtr String::match(Charset& source_c *row+=mid(ovector[i*2+0], ovector[i*2+1]); // .i column value } - row_action(*result, row.get(), prestart, prefinish, poststart, postfinish, info); + row_action(result, row, prestart, prefinish, poststart, postfinish, info); if(!option_bits[1] || prestart==poststart) { // not global | going to hang pcre_free(code); - row_action(*result, 0/*last time, no row*/, 0, 0, poststart, postfinish, info); + row_action(result, ArrayStringPtr(0)/*last time, no row*/, 0, 0, poststart, postfinish, info); return result; } prestart=poststart;