/* -*-C++-*- String_data.inl -- implement String_data source file of Flower lib (c) 1997 Han-Wen Nienhuys */ #ifndef STRINGDATA_INL #define STRINGDATA_INL #include #include #include "stringdata.hh" const int INITIALMAX=8; #include void* mymemmove( void* dest, void const* src, size_t n ); #if 0 // redef STRING_DEBUG INLINE void* mymemmove( void* dest, void const* src, size_t n ) { return memmove( dest, src, n ); // wohltempererit: 69006 } #define memmove mymemmove #endif INLINE void String_data::OKW() { assert (references == 1); } INLINE void String_data::OK() { assert(maxlen >= length_i_); assert(bool(data_byte_p_)); assert(references >= 1); } INLINE String_data::String_data() { references=0; maxlen = INITIALMAX; data_byte_p_ = new Byte[maxlen + 1]; data_byte_p_[0] = 0; length_i_ = 0; } INLINE String_data::String_data(String_data const &src) { references=0; maxlen = length_i_ = src.length_i_; data_byte_p_ = new Byte[maxlen+1]; // should calc GNU 8byte overhead. memmove( data_byte_p_, src.data_byte_p_, length_i_ + 1 ); } INLINE String_data::~String_data() { assert(references == 0); delete[] data_byte_p_; } INLINE void String_data::setmax(int j) { OKW(); if (j > maxlen) { delete data_byte_p_; maxlen = j; data_byte_p_ = new Byte[maxlen + 1]; data_byte_p_[0] = 0; length_i_ = 0; } } /* this is all quite hairy: update of length_i_ update of maxlen alloc of buffer copying of buffer needs blondification: split tasks define change authority */ INLINE void String_data::remax(int j) { OKW(); if (j > maxlen) { // maxlen = j; oeps // Byte *p = new Byte[maxlen + 1]; Byte *p = new Byte[j + 1]; memmove( p, data_byte_p_, ( maxlen = 0 && j <= length_i_); data_byte_p_[j] = 0; length_i_ = j; } INLINE Byte& String_data::operator [](int j) { assert(j >= 0 && j <= length_i_); return data_byte_p_[j] ; } INLINE Byte String_data::operator [](int j) const { assert(j >= 0 && j <= length_i_); return data_byte_p_[j]; } #endif // __STRING_UTIL_CC //