Diff for /parser3/src/classes/string.C between versions 1.132 and 1.139

version 1.132, 2004/02/11 15:33:12 version 1.139, 2004/04/06 13:14:22
Line 36  DECLARE_CLASS_VAR(string, new MString, 0 Line 36  DECLARE_CLASS_VAR(string, new MString, 0
 // defines for statics  // defines for statics
   
 #define MATCH_VAR_NAME "match"  #define MATCH_VAR_NAME "match"
   #define TRIM_START_OPTION "start"
   #define TRIM_BOTH_OPTION "both"
   #define TRIM_END_OPTION "end"
   
 // statics  // statics
   
Line 101  static void _double(Request& r, MethodPa Line 104  static void _double(Request& r, MethodPa
 }  }
   
 static void _left(Request& r, MethodParams& params) {  static void _left(Request& r, MethodParams& params) {
         size_t n=(size_t)params.as_int(0, "n must be int", r);          ssize_t sn=params.as_int(0, "n must be int", r);
                   if(sn<0)
                   throw Exception("parser.runtime",
                           0, 
                           "n(%d) must be >=0", sn);
           size_t n=(size_t)sn;
   
         const String& string=GET_SELF(r, VString).string();          const String& string=GET_SELF(r, VString).string();
         r.write_assign_lang(string.mid(0, n));          r.write_assign_lang(string.mid(0, n));
 }  }
   
 static void _right(Request& r, MethodParams& params) {  static void _right(Request& r, MethodParams& params) {
         size_t n=(size_t)params.as_int(0, "n must be int", r);          ssize_t sn=(size_t)params.as_int(0, "n must be int", r);
           if(sn<0)
                   throw Exception("parser.runtime",
                           0, 
                           "n(%d) must be >=0", sn);
           size_t n=(size_t)sn;
           
                   
         const String& string=GET_SELF(r, VString).string();          const String& string=GET_SELF(r, VString).string();
         size_t length=string.length();          size_t length=string.length();
Line 118  static void _right(Request& r, MethodPar Line 132  static void _right(Request& r, MethodPar
 static void _mid(Request& r, MethodParams& params) {  static void _mid(Request& r, MethodParams& params) {
         const String& string=GET_SELF(r, VString).string();          const String& string=GET_SELF(r, VString).string();
   
         size_t p=(size_t)max(0, params.as_int(0, "p must be int", r));          ssize_t sbegin=params.as_int(0, "p must be int", r);
         size_t n=params.count()>1?          if(sbegin<0)
                 (size_t)max(0, params.as_int(1, "n must be int", r)):string.length();                  throw Exception("parser.runtime",
                           0, 
                           "p(%d) must be >=0", sbegin);
           size_t begin=(size_t)sbegin;
   
           size_t end;
           if(params.count()>1) {
                   ssize_t sn=params.as_int(1, "n must be int", r);
                   if(sn<0)
                           throw Exception("parser.runtime",
                                   0, 
                                   "n(%d) must be >=0", sn);
                   end=begin+(size_t)sn;
           } else 
                   end=string.length();
                   
         r.write_assign_lang(string.mid(p, p+n));          r.write_assign_lang(string.mid(begin, end));
 }  }
   
 static void _pos(Request& r, MethodParams& params) {  static void _pos(Request& r, MethodParams& params) {
Line 494  static void _normalize(Request& r, Metho Line 522  static void _normalize(Request& r, Metho
         r.write_assign_lang(src);          r.write_assign_lang(src);
 }  }
   
   static void _trim(Request& r, MethodParams& params) {
           const String& src=GET_SELF(r, VString).string();
   
           String::Trim_kind kind=String::TRIM_BOTH;
           const char* chars=0;
           if(params.count()>0) {
                   const String& skind=params.as_string(0, 
                           "'where' must be string");
                   if(skind.length())
                           if(skind==TRIM_START_OPTION)
                                   kind=String::TRIM_START;
                           else if(skind==TRIM_END_OPTION)
                                   kind=String::TRIM_END;
                           else if(skind==TRIM_BOTH_OPTION)
                                   kind=String::TRIM_BOTH;
                           else
                                   throw Exception("parser.runtime",
                                           &skind,
                                           "'kind' must be one of "TRIM_START_OPTION", "TRIM_BOTH_OPTION", "TRIM_END_OPTION);
   
                   if(params.count()>1) {
                           const String& schars=params.as_string(1, "'chars' must be string");
                           if(schars.length())
                                   chars=schars.cstr();
                   }
           }
   
           r.write_assign_lang(src.trim(kind, chars));
   }
   
   static void _append(Request& r, MethodParams& params) {
           // c=a+b
           VString& va=GET_SELF(r, VString);
           const String& a=va.string();
           const String& b=params.as_string(0, "parameter must be string");
           String& c=*new String(a);
           c.append(b, String::L_PASS_APPENDED);
           va.set_string(c);
   }
   
 // constructor  // constructor
   
 MString::MString(): Methoded("string") {  MString::MString(): Methoded("string") {
Line 550  MString::MString(): Methoded("string") { Line 618  MString::MString(): Methoded("string") {
   
         // ^string.normalize[]            // ^string.normalize[]  
         add_native_method("normalize", Method::CT_DYNAMIC, _normalize, 0, 0);          add_native_method("normalize", Method::CT_DYNAMIC, _normalize, 0, 0);
   
           // ^string.trim[[start|both|end][;chars]]
           add_native_method("trim", Method::CT_DYNAMIC, _trim, 0, 2);
   
           // ^string.append[string]
           add_native_method("append", Method::CT_DYNAMIC, _append, 1, 1);
 }         }       

Removed from v.1.132  
changed lines
  Added in v.1.139


E-mail: