mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
117 lines
4.2 KiB
C++
117 lines
4.2 KiB
C++
//====== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. =======//
|
||
//
|
||
// Purpose: Defines the more complete set of operations on the string_t defined
|
||
// These should be used instead of direct manipulation to allow more
|
||
// flexibility in future ports or optimization.
|
||
//
|
||
// $NoKeywords: $
|
||
//=============================================================================//
|
||
|
||
#ifndef STRING_T_H
|
||
#define STRING_T_H
|
||
|
||
#if defined( _WIN32 )
|
||
#pragma once
|
||
#endif
|
||
|
||
#ifndef NO_STRING_T
|
||
|
||
#ifdef WEAK_STRING_T
|
||
|
||
typedef int string_t;
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Purpose: The correct way to specify the NULL string as a constant.
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define NULL_STRING 0
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Purpose: Given a string_t, make a C string. By convention the result string
|
||
// pointer should be considered transient and should not be stored.
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define STRING( offset ) ( ( offset ) ? reinterpret_cast<const char *>( offset ) : "" )
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Purpose: Given a C string, obtain a string_t
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define MAKE_STRING( str ) ( ( *str != 0 ) ? reinterpret_cast<int>( str ) : 0 )
|
||
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define IDENT_STRINGS( s1, s2 ) ( *((void **)&(s1)) == *((void **)&(s2)) )
|
||
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#else // Strong string_t
|
||
|
||
//-----------------------------------------------------------------------------
|
||
|
||
struct string_t
|
||
{
|
||
public:
|
||
bool operator!() const { return ( pszValue == nullptr ); }
|
||
bool operator==( const string_t &rhs ) const { return ( pszValue == rhs.pszValue ); }
|
||
bool operator!=( const string_t &rhs ) const { return ( pszValue != rhs.pszValue ); }
|
||
bool operator<( const string_t &rhs ) const { return ((void *)pszValue < (void *)rhs.pszValue ); }
|
||
|
||
const char *ToCStr() const { return ( pszValue ) ? pszValue : ""; }
|
||
|
||
protected:
|
||
const char *pszValue;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
|
||
struct castable_string_t : public string_t // string_t is used in unions, hence, no constructor allowed
|
||
{
|
||
castable_string_t() { pszValue = nullptr; }
|
||
castable_string_t( const char *pszFrom ) { pszValue = (pszFrom && *pszFrom) ? pszFrom : 0; }
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Purpose: The correct way to specify the NULL string as a constant.
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define NULL_STRING castable_string_t()
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Purpose: Given a string_t, make a C string. By convention the result string
|
||
// pointer should be considered transient and should not be stored.
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define STRING( string_t_obj ) (string_t_obj).ToCStr()
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Purpose: Given a C string, obtain a string_t
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define MAKE_STRING( c_str ) castable_string_t( c_str )
|
||
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#define IDENT_STRINGS( s1, s2 ) ( *((void **)&(s1)) == *((void **)&(s2)) )
|
||
|
||
//-----------------------------------------------------------------------------
|
||
|
||
#endif
|
||
|
||
#else // NO_STRING_T
|
||
|
||
typedef const char *string_t;
|
||
#define NULL_STRING 0
|
||
#define STRING( c_str ) ( c_str )
|
||
#define MAKE_STRING( c_str ) ( c_str )
|
||
#define IDENT_STRINGS( s1, s2 ) ( *((void **)&(s1)) == *((void **)&(s2)) )
|
||
|
||
#endif // NO_STRING_T
|
||
|
||
// Zero the object -- necessary for CNetworkVar and possibly other cases.
|
||
inline void EnsureValidValue( string_t &x ) { x = NULL_STRING; }
|
||
|
||
//=============================================================================
|
||
|
||
#endif // STRING_T_H
|