--- parser3/src/classes/array.C 2024/10/17 22:24:44 1.18 +++ parser3/src/classes/array.C 2024/10/22 21:56:17 1.21 @@ -17,7 +17,7 @@ #include "pa_vbool.h" #include "pa_vmethod_frame.h" -volatile const char * IDENT_ARRAY_C="$Id: array.C,v 1.18 2024/10/17 22:24:44 moko Exp $"; +volatile const char * IDENT_ARRAY_C="$Id: array.C,v 1.21 2024/10/22 21:56:17 moko Exp $"; // class @@ -544,7 +544,7 @@ static void _right(Request& r, MethodPar if(sn>0){ size_t used=GET_SELF(r, VArray).array().used(); - if(sn=0", begin); - size_t end; - size_t length=0; - if(params.count()>1) { int n=params.as_int(1, "n must be int", r); if(n<0) @@ -908,35 +904,35 @@ static void _at(Request& r, MethodParams } if(count && pos >= 0 && (size_t)pos < count){ - switch(result_type) { - case AtResultTypeKey: - { - for(ArrayValue::Iterator i(array); i; i.next() ){ - if(i.value() && !(pos--)){ + if(count == array.count()){ + switch(result_type) { + case AtResultTypeKey: + r.write(*new VString(*new String(pa_uitoa(pos), String::L_TAINTED))); + break; + case AtResultTypeValue: + r.write(*array[pos]); + break; + case AtResultTypeHash: + r.write(SingleElementHash(pa_uitoa(pos), array[pos])); + break; + } + } else { + for(ArrayValue::Iterator i(array); i; i.next() ){ + if(i.value() && !(pos--)){ + switch(result_type) { + case AtResultTypeKey: r.write(*new VString(*new String(i.key(), String::L_TAINTED))); break; - } - } - break; - } - case AtResultTypeValue: - { - for(ArrayValue::Iterator i(array); i; i.next() ) - if(i.value() &&!(pos--)){ + case AtResultTypeValue: r.write(*i.value()); break; - } - break; - } - case AtResultTypeHash: - { - for(ArrayValue::Iterator i(array); i; i.next() ) - if(i.value() &&!(pos--)){ + case AtResultTypeHash: r.write(SingleElementHash(i.key(), i.value())); break; - } + } break; } + } } } } @@ -1025,7 +1021,7 @@ static void _select(Request& r, MethodPa r.write(*result); } -static void _reverse(Request& r, MethodParams& params) { +static void _reverse(Request& r, MethodParams&) { ArrayValue& source_array=GET_SELF(r, VArray).array(); VArray& result=*new VArray(source_array.count());