Diff for /parser3/src/main/pa_string.C between versions 1.172.2.21.2.32 and 1.172.2.21.2.35

version 1.172.2.21.2.32, 2003/03/27 10:04:08 version 1.172.2.21.2.35, 2003/04/02 10:10:01
Line 28  public: Line 28  public:
                 *this+=new String("match");                  *this+=new String("match");
                 *this+=new String("postmatch");                  *this+=new String("postmatch");
                 for(int i=0; i<MAX_MATCH_GROUPS; i++) {                  for(int i=0; i<MAX_MATCH_GROUPS; i++) {
                         char *cname=new(PointerFreeGC) char[3/*strlen("100")*/+1/*terminating 0*/];                          *this+=new String(StringBody::Format(1+i), String::L_CLEAN);
                         *this+=new String(cname, sprintf(cname, "%d", 1+i));  
                 }                  }
         }          }
 };  };
Line 46  void String::ArrayFragment::append_posit Line 45  void String::ArrayFragment::append_posit
         size_t fragment_begin=0;          size_t fragment_begin=0;
         size_t fragment_end;          size_t fragment_end;
         for(Array_iterator<element_type> i(src); ; fragment_begin=fragment_end) {          for(Array_iterator<element_type> i(src); ; fragment_begin=fragment_end) {
                 const element_type& fragment=i.next();                  const element_type fragment=i.next();
                 fragment_end=fragment_begin+fragment.length;                              fragment_end=fragment_begin+fragment.length;            
   
                 if(substr_begin<fragment_begin) // not reached fragments which may include 'substr'?                  if(substr_begin<fragment_begin) // not reached fragments which may include 'substr'?
Line 62  void String::ArrayFragment::append_posit Line 61  void String::ArrayFragment::append_posit
                 while(substr_end>fragment_end) { // are there more fragments including pieces of 'substr'?                  while(substr_end>fragment_end) { // are there more fragments including pieces of 'substr'?
                         fragment_begin=fragment_end;                          fragment_begin=fragment_end;
   
                         const element_type& fragment=i.next();                          const element_type fragment=i.next();
                         fragment_end=fragment_begin+fragment.length;                          fragment_end=fragment_begin+fragment.length;
   
                         if(substr_end>fragment_end) // are there still more?                          if(substr_end>fragment_end) // are there still more?
Line 105  uint StringBody::hash_code() const { Line 104  uint StringBody::hash_code() const {
   
 // String methods  // String methods
   
 String::String(const char* cstr, size_t length, bool tainted): body(CORD_EMPTY) {  String::String(const char* cstr, size_t help_length, bool tainted): body(CORD_EMPTY) {
         append(cstr, length, tainted?L_TAINTED:L_CLEAN);          append_help_length(cstr, help_length, tainted?L_TAINTED:L_CLEAN);
 }  }
   
 String::String(const String& src): body(src.body) {  String::String(const String& src): body(src.body) {
         fragments.append(src.fragments);          fragments.append(src.fragments);
 }  }
   
 String& String::append(const char* str, size_t length, Language lang) {  String& String::append_help_length(const char* str, size_t helper_length, Language lang) {
         if(!str)          if(!str)
                 return *this;                  return *this;
         size_t use_length=length?length:strlen(str);          size_t use_length=helper_length?helper_length:strlen(str);
         if(!use_length)          if(!use_length)
                 return *this;                  return *this;
   
         body.append(str, use_length);          body.append_help_length(str, use_length);
         fragments+=Fragment(lang, use_length);          fragments+=Fragment(lang, use_length);
   
         return *this;          return *this;
 }  }
   String& String::append_strdup(const char* str, size_t length, Language lang) {
           body.append_strdup(str, length);
           fragments+=Fragment(lang, length);
   
           return *this;
   }
   
 /// @todo check in doc: whether it documents NOW bad situation "abc".mid(-1, 3) =were?="ab"  /// @todo check in doc: whether it documents NOW bad situation "abc".mid(-1, 3) =were?="ab"
 String& String::mid(size_t substr_begin, size_t substr_end) const {  String& String::mid(size_t substr_begin, size_t substr_end) const {
Line 164  size_t String::pos(const StringBody subs Line 169  size_t String::pos(const StringBody subs
         size_t fragment_begin=0;          size_t fragment_begin=0;
         size_t fragment_end;          size_t fragment_end;
         for(Array_iterator<ArrayFragment::element_type> i(fragments); i.has_next(); fragment_begin=fragment_end) {          for(Array_iterator<ArrayFragment::element_type> i(fragments); i.has_next(); fragment_begin=fragment_end) {
                 const Fragment& fragment=i.next();                  const Fragment fragment=i.next();
                 fragment_end=fragment_begin+fragment.length;                  fragment_end=fragment_begin+fragment.length;
   
                 if(substr_begin<fragment_begin) // not reached fragments which may include 'result'?                  if(substr_begin<fragment_begin) // not reached fragments which may include 'result'?
Line 432  const String& String::replace(const Dict Line 437  const String& String::replace(const Dict
                 if(Table::element_type row=dict.first_that_begins(current)) {                  if(Table::element_type row=dict.first_that_begins(current)) {
                         // prematch                          // prematch
                         if(size_t prematch_length=current-prematch_begin) {                          if(size_t prematch_length=current-prematch_begin) {
                                 result.body.append(prematch_begin, prematch_length);                                  result.body.append_strdup(prematch_begin, prematch_length);
                                 result.fragments.append_positions(fragments, prematch_begin-old_cstr, current-old_cstr);                                  result.fragments.append_positions(fragments, prematch_begin-old_cstr, current-old_cstr);
                         }                          }
   
Line 455  const String& String::replace(const Dict Line 460  const String& String::replace(const Dict
   
         // postmatch          // postmatch
         if(size_t postmatch_length=current-prematch_begin) {          if(size_t postmatch_length=current-prematch_begin) {
                 result.body.append(prematch_begin, postmatch_length);                  result.body.append_strdup(prematch_begin, postmatch_length);
                 result.fragments.append_positions(fragments, prematch_begin-old_cstr, current-old_cstr);                  result.fragments.append_positions(fragments, prematch_begin-old_cstr, current-old_cstr);
         }          }
   
Line 552  String::C String::serialize(size_t prolo Line 557  String::C String::serialize(size_t prolo
   
         // 3: lang info          // 3: lang info
         for(Array_iterator<ArrayFragment::element_type> i(fragments); i.has_next(); ) {          for(Array_iterator<ArrayFragment::element_type> i(fragments); i.has_next(); ) {
                 const Fragment& fragment=i.next();                  const Fragment fragment=i.next();
                 // lang                  // lang
                 memcpy(cur, &fragment.lang, sizeof(fragment.lang));  cur+=sizeof(fragment.lang);                  memcpy(cur, &fragment.lang, sizeof(fragment.lang));  cur+=sizeof(fragment.lang);
                 // length                  // length

Removed from v.1.172.2.21.2.32  
changed lines
  Added in v.1.172.2.21.2.35


E-mail: