Diff for /parser3/src/main/pa_string.C between versions 1.1 and 1.2

version 1.1, 2001/01/26 14:47:52 version 1.2, 2001/01/26 15:28:39
Line 6  void *String::operator new(size_t size, Line 6  void *String::operator new(size_t size,
         return apool->alloc(size);          return apool->alloc(size);
 }  }
   
 void String::construct(Pool *apool, int achunk_items) {  void String::construct(Pool *apool) {
         pool=apool;          pool=apool;
         chunk_items=achunk_items;          head.count=curr_chunk_rows=CR_PREALLOCATED_COUNT;
           append_here=head.first;
         head_chunk=static_cast<Chunk *>(          head.preallocated_link=0;
                 pool->calloc(sizeof(Chunk::Row)*chunk_items+sizeof(Chunk *)));          link_row=&head.first[curr_chunk_rows];
         append_here=&head_chunk->first;  
         chunk_link_row=&head_chunk->first+chunk_items;  
 }  }
   
 void String::expand() {  void String::expand() {
         chunk_link_row->link=static_cast<Chunk *>(          curr_chunk_rows=curr_chunk_rows*100/CR_GROW_PERCENT;
                 pool->calloc(sizeof(Chunk::Row)*chunk_items+sizeof(Chunk *)));          Chunk *chunk=static_cast<Chunk *>(
         append_here=&chunk_link_row->link->first;                  pool->calloc(sizeof(Chunk::Row)*curr_chunk_rows+sizeof(Chunk *)));
         chunk_link_row=&chunk_link_row->link->first+chunk_items;          chunk->count=curr_chunk_rows;
           link_row->link=chunk;
           append_here=chunk->first;
           link_row=&chunk->first[curr_chunk_rows];
 }  }
   
 String& String::operator += (char *src) {  String& String::operator += (char *src) {
Line 36  String& String::operator += (char *src) Line 37  String& String::operator += (char *src)
   
 size_t String::size() {  size_t String::size() {
         int result=0;          int result=0;
         for(Chunk::Row *row=&head_chunk->first; row; row=&row->link->first)          Chunk *chunk=&head; 
                 for(int i=0; i<chunk_items; i++) {          do {
                   Chunk::Row *row=chunk->first;
                   for(int i=0; i<chunk->count; i++) {
                         if(row==append_here)                          if(row==append_here)
                                 goto break2;                                  goto break2;
   
                         result+=row->item.size;                          result+=row->item.size;
                         row++;                          row++;
                 }                  }
                   chunk=row->link;
           } while(chunk);
 break2:  break2:
         return result;          return result;
 }  }
Line 52  char *String::c_str() { Line 57  char *String::c_str() {
         char *result=static_cast<char *>(pool->alloc(size()+1));          char *result=static_cast<char *>(pool->alloc(size()+1));
   
         char *copy_here=result;          char *copy_here=result;
         for(Chunk::Row *row=&head_chunk->first; row; row=&row->link->first)          Chunk *chunk=&head; 
                 for(int i=0; i<chunk_items; i++) {          do {
                   Chunk::Row *row=chunk->first;
                   for(int i=0; i<chunk->count; i++) {
                         if(row==append_here)                          if(row==append_here)
                                 goto break2;                                  goto break2;
   
Line 61  char *String::c_str() { Line 68  char *String::c_str() {
                         copy_here+=row->item.size;                          copy_here+=row->item.size;
                         row++;                          row++;
                 }                  }
                   chunk=row->link;
           } while(chunk);
 break2:  break2:
         *copy_here=0;          *copy_here=0;
         return result;          return result;

Removed from v.1.1  
changed lines
  Added in v.1.2


E-mail: