Seaside/SpyCustom/string_t.h
2021-06-16 16:13:22 +03:00

67 lines
1.6 KiB
C

#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;
#define NULL_STRING 0
#define STRING( offset ) ( ( offset ) ? reinterpret_cast<const char *>( offset ) : "" )
#define MAKE_STRING( str ) ( ( *str != 0 ) ? reinterpret_cast<int>( str ) : 0 )
#define IDENT_STRINGS( s1, s2 ) ( *((void **)&(s1)) == *((void **)&(s2)) )
#else
struct string_t
{
public:
bool operator!() const { return (pszValue == NULL); }
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
{
castable_string_t() { pszValue = NULL; }
castable_string_t(const char* pszFrom) { pszValue = (pszFrom && *pszFrom) ? pszFrom : 0; }
};
#define NULL_STRING castable_string_t()
#define STRING( string_t_obj ) (string_t_obj).ToCStr()
#define MAKE_STRING( c_str ) castable_string_t( c_str )
#define IDENT_STRINGS( s1, s2 ) ( *((void **)&(s1)) == *((void **)&(s2)) )
#endif
#else
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
inline void EnsureValidValue(string_t& x) { x = NULL_STRING; }
#endif