Diff for /parser3/src/classes/string.C between versions 1.78 and 1.83

version 1.78, 2001/10/09 07:06:00 version 1.83, 2001/10/17 15:44:47
Line 43  static void _int(Request& r, const Strin Line 43  static void _int(Request& r, const Strin
         Pool& pool=r.pool();          Pool& pool=r.pool();
         bool convert_problem=false; Exception rethrow_me;          bool convert_problem=false; Exception rethrow_me;
         int converted;          int converted;
           Value *default_code=params->size()>0?
                   default_code=&params->as_junction(0, "default must be int"):0; // (default)
         PTRY {          PTRY {
                 converted=r.self->as_int();                  converted=r.self->as_int();
         }          }
         PCATCH(e) { // convert problem          PCATCH(e) { // convert problem
                 if(convert_problem=params->size()==0) { // we have a problem when do not have default                  if(convert_problem=!default_code) { // we have a problem when no default
                         rethrow_me=e;                            rethrow_me=e;  
                         converted=0;                          converted=0;
                 } else                  } else
                         converted=params->as_int(0, "default must be int", r); // (default)                          converted=r.process(*default_code).as_int();
         }          }
         PEND_CATCH          PEND_CATCH
         if(convert_problem)          if(convert_problem)
Line 68  static void _double(Request& r, const St Line 70  static void _double(Request& r, const St
         Pool& pool=r.pool();          Pool& pool=r.pool();
         bool convert_problem=false; Exception rethrow_me;          bool convert_problem=false; Exception rethrow_me;
         double converted;          double converted;
           Value *default_code=params->size()>0?
                   default_code=&params->as_junction(0, "default must be double"):0; // (default)
         PTRY {          PTRY {
                 converted=r.self->as_double();                  converted=r.self->as_double();
         }          }
         PCATCH(e) { // convert problem          PCATCH(e) { // convert problem
                 if(convert_problem=params->size()==0) { // we have a problem when do not have default                  if(convert_problem=!default_code) { // we have a problem when no default
                         rethrow_me=e;                            rethrow_me=e;  
                         converted=0;                          converted=0;
                 } else                  } else
                         converted=params->as_double(0, "default must be double", r); // (default)                          converted=r.process(*default_code).as_double();
         }          }
         PEND_CATCH          PEND_CATCH
         if(convert_problem)          if(convert_problem)
Line 125  static void _right(Request& r, const Str Line 129  static void _right(Request& r, const Str
 static void _mid(Request& r, const String&, MethodParams *params) {  static void _mid(Request& r, const String&, MethodParams *params) {
         Pool& pool=r.pool();          Pool& pool=r.pool();
   
           const String& string=*static_cast<VString *>(r.self)->get_string();
   
         size_t p=(size_t)params->as_int(0, "p must be int", r);          size_t p=(size_t)params->as_int(0, "p must be int", r);
         size_t n=(size_t)params->as_int(1, "n must be int", r);          size_t n=params->size()>1?
                   (size_t)params->as_int(1, "n must be int", r):string.size();
                   
         const String& string=*static_cast<VString *>(r.self)->get_string();  
         r.write_assign_lang(*new(pool) VString(string.mid(p, p+n)));          r.write_assign_lang(*new(pool) VString(string.mid(p, p+n)));
 }  }
   
Line 343  public: Line 349  public:
 };  };
 #endif  #endif
 const String* sql_result_string(Request& r, const String& method_name, MethodParams *params,  const String* sql_result_string(Request& r, const String& method_name, MethodParams *params,
                                                                 Hash *&options) {                                                                  Hash *& options, Value *& default_code) {
         Pool& pool=r.pool();          Pool& pool=r.pool();
   
         if(!r.connection)          if(!r.connection)
Line 355  const String* sql_result_string(Request& Line 361  const String* sql_result_string(Request&
   
         ulong limit=0;          ulong limit=0;
         ulong offset=0;          ulong offset=0;
           default_code=0;
         if(params->size()>1) {          if(params->size()>1) {
                 Value& voptions=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(voptions.is_defined())                  if(voptions.is_defined())
Line 363  const String* sql_result_string(Request& Line 370  const String* sql_result_string(Request&
                                         limit=(ulong)r.process(*vlimit).as_double();                                          limit=(ulong)r.process(*vlimit).as_double();
                                 if(Value *voffset=(Value *)options->get(*sql_offset_name))                                  if(Value *voffset=(Value *)options->get(*sql_offset_name))
                                         offset=(ulong)r.process(*voffset).as_double();                                          offset=(ulong)r.process(*voffset).as_double();
                                   if(default_code=(Value *)options->get(*sql_default_name)) {
                                           if(!default_code->get_junction())
                                                   PTHROW(0, 0,
                                                           &method_name,
                                                           "default option must be code");
                                   }
                         } else                          } else
                                 PTHROW(0, 0,                                  PTHROW(0, 0,
                                         &method_name,                                          &method_name,
Line 400  static void _sql(Request& r, const Strin Line 413  static void _sql(Request& r, const Strin
         Pool& pool=r.pool();          Pool& pool=r.pool();
   
         Hash *options;          Hash *options;
         const String *string=sql_result_string(r, method_name, params, options);          Value *default_code;
           const String *string=sql_result_string(r, method_name, params, options, default_code);
         if(!string) {          if(!string) {
                 if(options) {                  if(default_code) {
                         if(Value *vdefault=(Value *)options->get(*sql_default_name)) {                          string=r.process(*default_code).get_string();
                                 if(!vdefault->get_junction())                          if(!string)
                                         PTHROW(0, 0,                                  string=new(pool) String(pool);
                                                 &method_name,  
                                                 "default option must be code");  
                                 string=r.process(*vdefault).get_string();  
                                 if(!string)  
                                         string=empty_string;  
                         } else  
                                 PTHROW(0, 0,  
                                         &method_name,  
                                         "produced no result, but no default option specified");  
                 } else                  } else
                         PTHROW(0, 0,                          PTHROW(0, 0,
                                 &method_name,                                  &method_name,
                                 "produced no result, but no options (no default) specified");                                  "produced no result, but no default option specified");
         }          }
         VString& result=*new(pool) VString(*string);          VString& result=*new(pool) VString(*string);
         result.set_name(method_name);          result.set_name(method_name);
Line 438  static void _replace(Request& r, const S Line 443  static void _replace(Request& r, const S
         Dictionary dict(*table);          Dictionary dict(*table);
         r.write_assign_lang(*new(pool) VString(src.replace(pool, dict)));          r.write_assign_lang(*new(pool) VString(src.replace(pool, dict)));
 }  }
   
   static void _save(Request& r, const String& method_name, MethodParams *params) {
           Pool& pool=r.pool();
           Value& vfile_name=params->as_no_junction(0, 
                   "file name must not be code");
   
           const String& src=*static_cast<VString *>(r.self)->get_string();
   
           // write
           file_write(pool, r.absolute(vfile_name.as_string()), 
                   src.cstr(String::UL_AS_IS), src.size(), true);
   }
   
 // constructor  // constructor
   
 MString::MString(Pool& apool) : Methoded(apool) {  MString::MString(Pool& apool) : Methoded(apool) {
Line 462  MString::MString(Pool& apool) : Methoded Line 480  MString::MString(Pool& apool) : Methoded
         // ^string.right(n)          // ^string.right(n)
         add_native_method("right", Method::CT_DYNAMIC, _right, 1, 1);          add_native_method("right", Method::CT_DYNAMIC, _right, 1, 1);
         // ^string.mid(p;n)          // ^string.mid(p;n)
         add_native_method("mid", Method::CT_DYNAMIC, _mid, 2, 2);          add_native_method("mid", Method::CT_DYNAMIC, _mid, 1, 2);
   
         // ^string.pos[substr]          // ^string.pos[substr]
         add_native_method("pos", Method::CT_DYNAMIC, _pos, 1, 1);          add_native_method("pos", Method::CT_DYNAMIC, _pos, 1, 1);
Line 487  MString::MString(Pool& apool) : Methoded Line 505  MString::MString(Pool& apool) : Methoded
   
         // ^string.replace[table]          // ^string.replace[table]
         add_native_method("replace", Method::CT_DYNAMIC, _replace, 1, 1);          add_native_method("replace", Method::CT_DYNAMIC, _replace, 1, 1);
   
           // ^string.save[file]  
           add_native_method("save", Method::CT_DYNAMIC, _save, 1, 1);
 }         }       
   
 // global variable  // global variable

Removed from v.1.78  
changed lines
  Added in v.1.83


E-mail: