1 /* $XConsortium: StringOf.C /main/1 1996/07/29 17:05:16 cde-hp $ */
2 // Copyright (c) 1994, 1996 James Clark
3 // See the file COPYING for copying permission.
5 #ifndef StringOf_DEF_INCLUDED
6 #define StringOf_DEF_INCLUDED 1
12 namespace SP_NAMESPACE {
16 String<T>::String(const T *ptr, size_t length)
17 : length_(length), alloc_(length)
21 memcpy(ptr_, ptr, length*sizeof(T));
29 : ptr_(0), length_(0), alloc_(0)
34 String<T>::String(const String<T> &s)
35 : length_(s.length_), alloc_(s.length_)
38 ptr_ = new T[length_];
39 memcpy(ptr_, s.ptr_, length_*sizeof(T));
46 String<T> &String<T>::operator=(const String<T> &s)
49 if (s.length_ > alloc_) {
52 ptr_ = new T[alloc_ = s.length_];
54 memcpy(ptr_, s.ptr_, s.length_*sizeof(T));
61 String<T> &String<T>::insert(size_t i, const String<T> &s)
63 if (length_ + s.length_ > alloc_)
65 for (size_t n = length_ - i; n > 0; n--)
66 ptr_[i + n - 1 + s.length_] = ptr_[i + n - 1];
68 memcpy(ptr_ + i, s.ptr_, s.length_*sizeof(T));
73 String<T> &String<T>::append(const T *p, size_t length)
75 if (length_ + length > alloc_)
77 memcpy(ptr_ + length_, p, length*sizeof(T));
83 void String<T>::grow(size_t n)
90 memcpy(s, ptr_, length_*sizeof(T));
96 void String<T>::swap(String<T> &to)
104 size_t tem = to.length_;
105 to.length_ = length_;
109 size_t tem = to.alloc_;
116 String<T> &String<T>::assign(const T *p, size_t n)
121 ptr_ = new T[alloc_ = n];
124 for(T *to = ptr_; n > 0; n--, to++, p++)
130 void String<T>::resize(size_t n)
134 ptr_ = new T[alloc_ = n];
136 memcpy(ptr_, oldPtr_, length_*sizeof(T));
147 #endif /* not StringOf_DEF_INCLUDED */