Diff for /parser3/src/classes/string.C between versions 1.70 and 1.73

version 1.70, 2001/08/07 13:54:13 version 1.73, 2001/09/05 15:05:27
Line 15  static const char *RCSId="$Id$"; Line 15  static const char *RCSId="$Id$";
 #include "pa_vbool.h"  #include "pa_vbool.h"
 #include "pa_string.h"  #include "pa_string.h"
 #include "pa_sql_connection.h"  #include "pa_sql_connection.h"
   #include "pa_dictionary.h"
   
 // defines  // defines
   
Line 38  static void _length(Request& r, const St Line 39  static void _length(Request& r, const St
         r.write_no_lang(result);          r.write_no_lang(result);
 }  }
   
 static void _int(Request& r, const String& method_name, MethodParams *) {  static void _int(Request& r, const String& method_name, MethodParams *params) {
         Pool& pool=r.pool();          Pool& pool=r.pool();
         Value& result=*new(pool) VInt(pool, r.self->as_int());          bool convert_problem=false; Exception rethrow_me;
           int converted;
           PTRY {
                   converted=r.self->as_int();
           }
           PCATCH(e) { // convert problem
                   if(convert_problem=params->size()==0) { // we have a problem when do not have default
                           rethrow_me=e;  
                           converted=0;
                   } else
                           converted=params->as_int(0, r); // (default)
           }
           PEND_CATCH
           if(convert_problem)
                   PTHROW(rethrow_me.type(), rethrow_me.code(), 
                           rethrow_me.problem_source(),
                           rethrow_me.comment());
   
           Value& result=*new(pool) VInt(pool, converted);
         result.set_name(method_name);          result.set_name(method_name);
         r.write_no_lang(result);          r.write_no_lang(result);
 }  }
   
 static void _double(Request& r, const String& method_name, MethodParams *) {  static void _double(Request& r, const String& method_name, MethodParams *params) {
         Pool& pool=r.pool();          Pool& pool=r.pool();
         Value& result=*new(pool) VDouble(pool, r.self->as_double());          bool convert_problem=false; Exception rethrow_me;
           double converted;
           PTRY {
                   converted=r.self->as_double();
           }
           PCATCH(e) { // convert problem
                   if(convert_problem=params->size()==0) { // we have a problem when do not have default
                           rethrow_me=e;  
                           converted=0;
                   } else
                           converted=params->as_double(0, r); // (default)
           }
           PEND_CATCH
           if(convert_problem)
                   PTHROW(rethrow_me.type(), rethrow_me.code(), 
                           rethrow_me.problem_source(),
                           rethrow_me.comment());
   
           Value& result=*new(pool) VDouble(pool, converted);
         result.set_name(method_name);          result.set_name(method_name);
         r.write_no_lang(result);          r.write_no_lang(result);
 }  }
Line 318  const String* sql_result_string(Request& Line 355  const String* sql_result_string(Request&
         ulong limit=0;          ulong limit=0;
         ulong offset=0;          ulong offset=0;
         if(params->size()>1) {          if(params->size()>1) {
                 Value& options_param=params->as_no_junction(1, "options must be hash, not code");                  Value& voptions=params->as_no_junction(1, "options must be hash, not code");
                 if(options=options_param.get_hash()) {                  if(voptions.is_defined())
                         if(Value *vlimit=(Value *)options->get(*sql_limit_name))                          if(options=voptions.get_hash()) {
                                 limit=(ulong)r.process(*vlimit).as_double();                                  if(Value *vlimit=(Value *)options->get(*sql_limit_name))
                         if(Value *voffset=(Value *)options->get(*sql_offset_name))                                          limit=(ulong)r.process(*vlimit).as_double();
                                 offset=(ulong)r.process(*voffset).as_double();                                  if(Value *voffset=(Value *)options->get(*sql_offset_name))
                 } else                                          offset=(ulong)r.process(*voffset).as_double();
                         PTHROW(0, 0,                          } else
                                 &method_name,                                  PTHROW(0, 0,
                                 "options must be hash");                                          &method_name,
                                           "options must be hash");
         } else          } else
                 options=0;                  options=0;
   
Line 386  static void _sql(Request& r, const Strin Line 424  static void _sql(Request& r, const Strin
         r.write_assign_lang(result);          r.write_assign_lang(result);
 }  }
   
   static void _replace(Request& r, const String& method_name, MethodParams *params) {
           Pool& pool=r.pool();
           const String& src=*static_cast<VString *>(r.self)->get_string();
   
           Table *table=params->as_no_junction(0, "parameter must not be code").get_table();
           if(!table)
                   PTHROW(0, 0,
                           &method_name,
                           "parameter must be table");
   
           Dictionary dict(*table);
           r.write_assign_lang(*new(pool) VString(src.replace(pool, dict)));
   }
 // constructor  // constructor
   
 MString::MString(Pool& apool) : Methoded(apool) {  MString::MString(Pool& apool) : Methoded(apool) {
Line 396  MString::MString(Pool& apool) : Methoded Line 447  MString::MString(Pool& apool) : Methoded
         add_native_method("length", Method::CT_DYNAMIC, _length, 0, 0);          add_native_method("length", Method::CT_DYNAMIC, _length, 0, 0);
                   
         // ^string.int[]          // ^string.int[]
         add_native_method("int", Method::CT_DYNAMIC, _int, 0, 0);          // ^string.int(default)
                   add_native_method("int", Method::CT_DYNAMIC, _int, 0, 1);
         // ^string.double[]          // ^string.double[]
         add_native_method("double", Method::CT_DYNAMIC, _double, 0, 0);          // ^string.double(default)
           add_native_method("double", Method::CT_DYNAMIC, _double, 0, 1);
   
         // ^string.format{format}          // ^string.format{format}
         add_native_method("format", Method::CT_DYNAMIC, _string_format, 1, 1);          add_native_method("format", Method::CT_DYNAMIC, _string_format, 1, 1);
Line 431  MString::MString(Pool& apool) : Methoded Line 483  MString::MString(Pool& apool) : Methoded
         // ^sql[query]          // ^sql[query]
         // ^sql[query][$.limit(1) $.offset(2) $.default[n/a]]          // ^sql[query][$.limit(1) $.offset(2) $.default[n/a]]
         add_native_method("sql", Method::CT_STATIC, _sql, 1, 2);          add_native_method("sql", Method::CT_STATIC, _sql, 1, 2);
   
           // ^string.replace[table]
           add_native_method("replace", Method::CT_DYNAMIC, _replace, 1, 1);
 }         }       
   
 // global variable  // global variable

Removed from v.1.70  
changed lines
  Added in v.1.73


E-mail: