/*
** Command & Conquer Generals Zero Hour(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
////////////////////////////////////////////////////////////////////////////////
// //
// (c) 2001-2003 Electronic Arts Inc. //
// //
////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------
//
// Westwood Studios Pacific.
//
// Confidential Information
// Copyright (C) 2001 - All Rights Reserved
//
//----------------------------------------------------------------------------
//
// Project: WSYS Library
//
// Module: String
//
// File name: WSYS_String.cpp
//
// Created: 11/5/01 TR
//
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------------
#include "PreRTS.h"
#include
#include
#include
#include
#include "Common/string.h"
// 'assignment within condition expression'.
#pragma warning(disable : 4706)
//----------------------------------------------------------------------------
// Externals
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Defines
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Private Types
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Private Data
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Public Data
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Private Prototypes
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Private Functions
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Public Functions
//----------------------------------------------------------------------------
//============================================================================
// WSYS_String::WSYS_String
//============================================================================
WSYS_String::WSYS_String(const Char *string)
: m_data(NULL)
{
set(string);
}
//============================================================================
// WSYS_String::~WSYS_String
//============================================================================
WSYS_String::~WSYS_String()
{
delete [] m_data;
}
//============================================================================
// WSYS_String::operator==
//============================================================================
Bool WSYS_String::operator== (const char *rvalue) const
{
return strcmp( get(), rvalue) == 0;
}
//============================================================================
// WSYS_String::operator!=
//============================================================================
Bool WSYS_String::operator!= (const char *rvalue) const
{
return strcmp( get(), rvalue) != 0;
}
//============================================================================
// WSYS_String::operator=
//============================================================================
const WSYS_String& WSYS_String::operator= (const WSYS_String &string)
{
set( string.get());
return (*this);
}
//============================================================================
// WSYS_String::operator=
//============================================================================
const WSYS_String& WSYS_String::operator= (const Char *string)
{
set( string );
return (*this);
}
//============================================================================
// WSYS_String::operator+=
//============================================================================
const WSYS_String& WSYS_String::operator+= (const WSYS_String &string)
{
Char *buffer = MSGNEW("WSYS_String") Char [ length() + string.length() + 1 ]; // pool[]ify
if ( buffer != NULL )
{
strcpy( buffer, m_data );
strcat( buffer, string.get() );
delete [] m_data;
m_data = buffer;
}
return (*this);
}
//============================================================================
// WSYS_String::operator+=
//============================================================================
const WSYS_String& WSYS_String::operator+= (const Char *string)
{
if ( string != NULL )
{
Char *buffer = MSGNEW("WSYS_String") Char [ length() + strlen( string ) + 1 ];
if ( buffer != NULL )
{
strcpy( buffer, m_data );
strcat( buffer, string );
delete [] m_data;
m_data = buffer;
}
}
return (*this);
}
//============================================================================
// operator+ (const WSYS_String &string1, const WSYS_String &string2)
//============================================================================
WSYS_String operator+ (const WSYS_String &string1, const WSYS_String &string2)
{
WSYS_String temp(string1);
temp += string2;
return temp;
}
//============================================================================
// operator+ (const Char *string1, const WSYS_String &string2)
//============================================================================
WSYS_String operator+ (const Char *string1, const WSYS_String &string2)
{
WSYS_String temp(string1);
temp += string2;
return temp;
}
//============================================================================
// operator+ (const WSYS_String &string1, const Char *string2)
//============================================================================
WSYS_String operator+ (const WSYS_String &string1, const Char *string2)
{
WSYS_String temp(string1);
temp += string2;
return temp;
}
//============================================================================
// WSYS_String::length
//============================================================================
Int WSYS_String::length(void) const
{
return strlen( m_data );
}
//============================================================================
// WSYS_String::isEmpty
//============================================================================
Bool WSYS_String::isEmpty(void) const
{
return m_data[0] == 0;
}
//============================================================================
// WSYS_String::format
//============================================================================
Int _cdecl WSYS_String::format(const Char *format, ...)
{
Int result = 0;
char *buffer = MSGNEW("WSYS_String") char[100*1024];
if ( buffer )
{
va_list args;
va_start( args, format ); /* Initialize variable arguments. */
result = vsprintf ( buffer, format, args );
va_end( args );
set( buffer );
delete [] buffer;
}
else
{
set("");
}
return result;
}
//============================================================================
// WSYS_String::set
//============================================================================
void WSYS_String::set( const Char *string )
{
delete [] m_data;
if ( string == NULL )
{
string = "";
}
m_data = MSGNEW("WSYS_String") Char [ strlen(string) + 1];
strcpy ( m_data, string );
}
//============================================================================
// WSYS_String::makeUpperCase
//============================================================================
void WSYS_String::makeUpperCase( void )
{
Char *chr = m_data;
Char ch;
while( (ch = *chr) )
{
*chr++ = (Char) toupper( ch );
}
}
//============================================================================
// WSYS_String::makeLowerCase
//============================================================================
void WSYS_String::makeLowerCase( void )
{
Char *chr = m_data;
Char ch;
while( (ch = *chr) )
{
*chr++ = (Char) tolower( ch );
}
}