Diff for /parser3/src/main/pa_string.C between versions 1.172.2.21.2.36 and 1.172.2.21.2.38

version 1.172.2.21.2.36, 2003/04/08 11:08:12 version 1.172.2.21.2.38, 2003/04/08 13:58:30
Line 42  void String::ArrayFragment::append_posit Line 42  void String::ArrayFragment::append_posit
         if(substr_begin==substr_end)          if(substr_begin==substr_end)
                 return;                  return;
   
         FILE *err=fopen("append.log", "wt");  //      FILE *err=fopen("append.log", "wt");
   
         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 Fragment fragment=i.next();                  const Fragment fragment=i.next();
                 fragment_end=fragment_begin+fragment.length;                              fragment_end=fragment_begin+fragment.length;            
                 fprintf(err, "1end=%u\n", fragment_end);fflush(err);                  //fprintf(err, "1end=%u\n", fragment_end);fflush(err);
   
                 // not reached fragments which may include 'substr'?                  // not reached fragments which may include 'substr'?
                 if(!(substr_begin>=fragment_begin && substr_begin<=fragment_end))                  if(!(substr_begin>=fragment_begin && substr_begin<=fragment_end))
Line 63  void String::ArrayFragment::append_posit Line 63  void String::ArrayFragment::append_posit
                         while(true) {                          while(true) {
                                 const Fragment fragment=i.next();                                  const Fragment fragment=i.next();
                                 fragment_end=(fragment_begin=fragment_end)+fragment.length;                                  fragment_end=(fragment_begin=fragment_end)+fragment.length;
                                 fprintf(err, "2end=%u\n", fragment_end);fflush(err);                                  //fprintf(err, "2end=%u\n", fragment_end);fflush(err);
   
                                 if(substr_end>fragment_end) // are there still more?                                  if(substr_end>fragment_end) // are there still more?
                                         append(Fragment(fragment.lang, fragment.length)); // appending whole fragment                                          append(Fragment(fragment.lang, fragment.length)); // appending whole fragment
                                 else { // no, it was last                                  else { // no, it was last
                                         append(Fragment(fragment.lang, substr_end-fragment_begin));                                          append(Fragment(fragment.lang, substr_end-fragment_begin));
                                         fclose(err);                                          //fclose(err);
                                         return;                                          return;
                                 }                                  }
                         }                          }
Line 77  void String::ArrayFragment::append_posit Line 77  void String::ArrayFragment::append_posit
   
                 break;                  break;
         }          }
         fclose(err);          //fclose(err);
 }  }
   
 // StringBody methods  // StringBody methods
Line 111  uint StringBody::hash_code() const { Line 111  uint StringBody::hash_code() const {
 String::String(const char* cstr, size_t helper_length, bool tainted): body(CORD_EMPTY) {  String::String(const char* cstr, size_t helper_length, bool tainted): body(CORD_EMPTY) {
         append_help_length(cstr, helper_length, tainted?L_TAINTED:L_CLEAN);          append_help_length(cstr, helper_length, tainted?L_TAINTED:L_CLEAN);
 }  }
   String::String(const String::C cstr, bool tainted): body(CORD_EMPTY) {
           append_know_length(cstr.str, cstr.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);
           ASSERT_STRING_INVARIANT(*this);
 }  }
   
   String& String::append_know_length(const char* str, size_t known_length, Language lang) {
           body.append_know_length(str, known_length);
           fragments+=Fragment(lang, known_length);
   
           ASSERT_STRING_INVARIANT(*this);
           return *this;
   }
 String& String::append_help_length(const char* str, size_t helper_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;
Line 123  String& String::append_help_length(const Line 134  String& String::append_help_length(const
         if(!known_length)          if(!known_length)
                 return *this;                  return *this;
   
         body.append_know_length(str, known_length);          return append_know_length(str, known_length, lang);
         fragments+=Fragment(lang, known_length);  
   
         return *this;  
 }  }
 String& String::append_strdup(const char* str, size_t helper_length, Language lang) {  String& String::append_strdup(const char* str, size_t helper_length, Language lang) {
         size_t known_length=helper_length?helper_length:strlen(str);          size_t known_length=helper_length?helper_length:strlen(str);
Line 136  String& String::append_strdup(const char Line 144  String& String::append_strdup(const char
         body.append_strdup_know_length(str, known_length);          body.append_strdup_know_length(str, known_length);
         fragments+=Fragment(lang, known_length);          fragments+=Fragment(lang, known_length);
   
           ASSERT_STRING_INVARIANT(*this);
         return *this;          return *this;
 }  }
   
Line 157  String& String::mid(size_t substr_begin, Line 166  String& String::mid(size_t substr_begin,
   
 //      SAPI::log("piece of '%s' from %d to %d is '%s'",  //      SAPI::log("piece of '%s' from %d to %d is '%s'",
                 //cstr(), substr_begin, substr_end, result.cstr());                  //cstr(), substr_begin, substr_end, result.cstr());
           ASSERT_STRING_INVARIANT(result);
         return result;          return result;
 }  }
   
Line 469  const String& String::replace(const Dict Line 479  const String& String::replace(const Dict
                 result.fragments.append_positions(fragments, prematch_begin-old_cstr, current-old_cstr);                  result.fragments.append_positions(fragments, prematch_begin-old_cstr, current-old_cstr);
         }          }
   
           ASSERT_STRING_INVARIANT(result);
         return result;          return result;
 }  }
   
Line 545  static int serialize_body_piece(const ch Line 556  static int serialize_body_piece(const ch
         memcpy(*cur, s, length);  *cur+=length;          memcpy(*cur, s, length);  *cur+=length;
         return 0;          return 0;
 };  };
 String::C String::serialize(size_t prolog_length) const {  String::Cm String::serialize(size_t prolog_length) const {
         size_t buf_length=          size_t buf_length=
                 prolog_length                  prolog_length
                 +fragments.count()*(sizeof(Language)+sizeof(size_t))                  +fragments.count()*(sizeof(Language)+sizeof(size_t))
                 +length();                  +length();
         C result(new(PointerFreeGC) char[buf_length], buf_length);          String::Cm result(new(PointerFreeGC) char[buf_length], buf_length);
   
         // 1: prolog          // 1: prolog
         char *cur=result.str+prolog_length;          char *cur=result.str+prolog_length;
Line 611  bool String::deserialize(size_t prolog_l Line 622  bool String::deserialize(size_t prolog_l
                 body=StringBody(cur, buf_length);                  body=StringBody(cur, buf_length);
         }          }
   
           ASSERT_STRING_INVARIANT(*this);
         return true;          return true;
 }  }

Removed from v.1.172.2.21.2.36  
changed lines
  Added in v.1.172.2.21.2.38


E-mail: