str.cc
//***********************************************************************
// MODULE : Str - Class Body *
// AUTHOR : Ron Chernich *
// PURPOSE: Derived from the Microsoft C/C++ tutorial material: *
// \C700\SAMPLES\CPPTUTOR\STRNG.CPP *
// HISTORY: *
// 12-JAN-93 First (MSC/C++ 7.00) version *
// 19-MAY-93 Memory leakage through delete of array fixed *
//***********************************************************************
#include "str.hh"
//////////////
// Default constructor
//
Str::Str ()
{
buf = NULL;
length = 0;
}
//////////////
// Constructor that takes a const char *
//
Str::Str (const char *s)
{
length = strlen(s);
buf = new char[length + 1];
strcpy(buf, s);
}
/////////////
// Constructor that takes a char and an int
//
Str::Str (char c, INT16 n)
{
length = n;
buf = new char[length + 1];
memset(buf, c, length);
buf[length] = '\0';
}
////////////
// Copy constructor
//
Str::Str (const Str &other)
{
length = other.length;
buf = new char[length + 1];
strcpy(buf, other.buf);
}
////////////////
// Assign one string to another (watch out for both being same string!)
//
Str &Str::operator = (const Str &other)
{
if (&other == this)
return *this;
DELETE_ARRAY buf;
length = other.length;
buf = new char[length + 1];
strcpy(buf, other.buf);
return *this;
}
///////////
// test for buffer contents equal to char array
// RETURNS: TRUE .. same
// FLASE .. different
//
BOOL Str::operator == (const char *psz)
{
return (strncmp(buf, psz, length) == 0) ? TRUE : FALSE;
}
////////////
// Set a character in a String
//
void Str::StrSet (INT16 index, char newchar)
{
if ((index > 0) && (index <= length))
buf[index - 1] = newchar;
}
////////////
// Get a character in a String
//
char Str::StrGet (INT16 index) const
{
return (((index > 0) && (index <= length)) ? buf[index - 1] : 0);
}
////////////////
// adds char(s) to tail of String
//
void Str::StrAppend (const char *addition)
{
char *temp;
length += strlen(addition);
temp = new char[length + 1]; // Allocate new buffer
strcpy(temp, buf); // Copy contents of old buffer
strcat(temp, addition); // Append new string
DELETE_ARRAY buf; // Deallocate old buffer
buf = temp; // reassign to new buffer
}
///////////////
// Destructor for a String
//
Str::~Str()
{
DELETE_ARRAY buf; // Works even for empty String since delete 0 is safe
}
/********************************** EOF ***********************************/