Diff for /parser3/src/classes/array.C between versions 1.27 and 1.30

version 1.27, 2024/10/27 12:24:49 version 1.30, 2024/10/27 17:50:59
Line 614  static void _create_or_append_or_push(Re Line 614  static void _create_or_append_or_push(Re
         int count=params.count();          int count=params.count();
   
         if(array.count()){          if(array.count()){
                 for(int i=0; i<count; i++)                  for(int i=0; i<count; i++){
                         array+=&r.process(params[i]);                          array+=&r.process(params[i]);
                 array.invalidate();                          array.change_used(+1); // after each element, since an exception can occur
                   }
         } else {          } else {
                 for(int i=0; i<count; i++)                  for(int i=0; i<count; i++)
                         array+=&r.process(params[i]);                          array+=&r.process(params[i]);
Line 632  static void _insert(Request& r, MethodPa Line 633  static void _insert(Request& r, MethodPa
   
         for(int i=1; i<count; i++){          for(int i=1; i<count; i++){
                 array.insert(index++, &r.process(params[i]));                  array.insert(index++, &r.process(params[i]));
                   array.change_used(+1); // after each element, since an exception can occur
         }          }
         array.invalidate();  
 }  }
   
 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 656  static void _pop(Request& r, MethodParam Line 661  static void _pop(Request& r, MethodParam
         Value *result=array.pop();          Value *result=array.pop();
         if(result){          if(result){
                 r.write(*result);                  r.write(*result);
                   array.change_used(-1);
         } else {          } else {
                 r.write(*VVoid::get());                  r.write(*VVoid::get());
         }          }
         array.invalidate();  
 }  }
   
 static void _contains(Request& r, MethodParams& params) {  static void _contains(Request& r, MethodParams& params) {
Line 892  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 905  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 1093  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);

Removed from v.1.27  
changed lines
  Added in v.1.30


E-mail: