| | | | | |

String Implementation: Builders

  void String::Wrap(const char* Cptr)
  {
    Clear();
    if (Cptr)
      {
        size_ = StrLen(Cptr);
        data_ = NewCstr(size_);
        StrCpy(data_, Cptr);
      }
  }

  void String::GetLine (std::istream& is)
  {
    size_t currSize = 0, buffSize = initBuffSize;
    char* buffer;
    buffer = NewCstr(buffSize);
    char x = is.get();
    while ((x != '\n') && (!is.eof()))
      {
        if (currSize == buffSize)  // need more buffer 
          {
            buffSize *= 2;
            char* newbuffer = NewCstr(buffSize);
            for (size_t i = 0; i < currSize; ++i)
              {
                newbuffer[i] = buffer[i];
              }
            delete [] buffer;
            buffer = newbuffer;
          }
        buffer[currSize++] = x;
        x = is.get();
      }
    buffer[currSize] = '\0';
    Wrap(buffer);
    delete [] buffer;
  }

  int String::SetSize (size_t size, char fill)
  {
    if (data_ == 0)
      {
        data_ = NewCstr(size);
        if (data_ == 0) return 0;
        size_ = size;
        for (size_t j = 0; j < size_; ++j)
          data_[j] = fill;
        return 1;
      }

    if (size != Size())
      {
        char* newdata = NewCstr(size);
        if (newdata == 0) return 0;
        size_t i;
        if (size < Size())
          {
            for (i = 0; i < size; ++i)
              newdata[i] = data_[i];
          }
        else
          {
            for (i = 0; i < Size(); ++i)
              newdata[i] = data_[i];
            for (i = Size(); i < size; ++i)
              newdata[i] = fill;
          }
        delete [] data_;
        data_ = newdata;
        size_ = size;
      }
    return 1;
  }

  void String::Clear()
  {
    // Debug d("Clear()");
    if (data_)
      {
        delete [] data_;
        data_ = 0;
        size_ = 0;
      }
  }

| | Top of Page | 3. C Strings, Proper Type, and String Objects - 15 of 17