|
|
| version 1.28, 2024/10/27 13:22:13 | version 1.30, 2024/10/27 17:50:59 |
|---|---|
| Line 639 static void _insert(Request& r, MethodPa | Line 639 static void _insert(Request& r, MethodPa |
| static void _delete(Request& r, MethodParams& params) { | static void _delete(Request& r, MethodParams& params) { |
| ArrayValue& array=GET_SELF(r, VArray).array(); | ArrayValue& array=GET_SELF(r, VArray).array(); |
| if(params.count()>0) | if(params.count()>0) { |
| array.clear(VArray::index(params.as_int(0, PARAM_INDEX, r))); | if(params[0].is_string()) { |
| else | array.clear(VArray::index(*params[0].get_string())); |
| } else { | |
| array.clear(VArray::index(params.as_int(0, PARAM_INDEX, r))); | |
| } | |
| } else | |
| array.clear(); | array.clear(); |
| array.invalidate(); | array.invalidate(); |
| } | } |
| Line 893 static void _at(Request& r, MethodParams | Line 897 static void _at(Request& r, MethodParams |
| ArrayValue& array=GET_SELF(r, VArray).array(); | ArrayValue& array=GET_SELF(r, VArray).array(); |
| size_t count=array.used(); // not array.count() | size_t count=array.used(); // not array.count() |
| int pos=0; | |
| AtResultType result_type=AtResultTypeValue; | AtResultType result_type=AtResultTypeValue; |
| if(params.count() > 1) { | if(params.count() > 1) { |
| const String& stype=params.as_string(1, "type must be string"); | const String& stype=params.as_string(1, "type must be string"); |
| Line 906 static void _at(Request& r, MethodParams | Line 908 static void _at(Request& r, MethodParams |
| throw Exception(PARSER_RUNTIME, &stype, "type must be 'key', 'value' or 'hash'"); | throw Exception(PARSER_RUNTIME, &stype, "type must be 'key', 'value' or 'hash'"); |
| } | } |
| Value& vwhence=params[0]; | int pos=params.as_index(0, count, r); |
| if(vwhence.is_string()) { | |
| const String& swhence=*vwhence.get_string(); | |
| if(swhence == "last") | |
| pos=count-1; | |
| else if(swhence != "first") | |
| throw Exception(PARSER_RUNTIME, &swhence, "whence must be 'first', 'last' or expression"); | |
| } else { | |
| pos=r.process(vwhence).as_int(); | |
| if(pos < 0) | |
| pos+=count; | |
| } | |
| if(count && pos >= 0 && (size_t)pos < count){ | if(count && pos >= 0 && (size_t)pos < count){ |
| if(count == array.count()){ | if(count == array.count()){ |
| Line 1094 MArray::MArray(): Methoded(VARRAY_TYPE) | Line 1085 MArray::MArray(): Methoded(VARRAY_TYPE) |
| // ^array.mid(p;n) | // ^array.mid(p;n) |
| add_native_method("mid", Method::CT_DYNAMIC, _mid, 1, 2); | add_native_method("mid", Method::CT_DYNAMIC, _mid, 1, 2); |
| // ^array.delete[index] | // ^array.delete(index) or ^array.delete[index] |
| add_native_method("delete", Method::CT_DYNAMIC, _delete, 0, 1); | add_native_method("delete", Method::CT_DYNAMIC, _delete, 0, 1); |
| // ^array.remove[index] | // ^array.remove(index) |
| add_native_method("remove", Method::CT_DYNAMIC, _remove, 1, 1); | add_native_method("remove", Method::CT_DYNAMIC, _remove, 1, 1); |
| // ^array.pop[] | // ^array.pop[] |
| add_native_method("pop", Method::CT_DYNAMIC, _pop, 0, 0); | add_native_method("pop", Method::CT_DYNAMIC, _pop, 0, 0); |