libnative-utilities/include/raknet/RakWString.hpp
2024-08-15 18:40:30 +08:00

124 lines
3.3 KiB
C++

/*
* Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#ifndef __RAK_W_STRING_H
#define __RAK_W_STRING_H
#include "Export.hpp"
#include "RakNetTypes.hpp" // int64_t
#include "RakString.hpp"
#ifdef _WIN32
#include "WindowsIncludes.hpp"
#endif
namespace RakNet
{
/// \brief String class for Unicode
class RAK_DLL_EXPORT RakWString
{
public:
// Constructors
RakWString();
RakWString( const RakString &right );
RakWString( const wchar_t *input );
RakWString( const RakWString & right);
RakWString( const char *input );
~RakWString();
/// Implicit return of wchar_t*
operator wchar_t* () const {if (c_str) return c_str; return (wchar_t*) L"";}
/// Same as std::string::c_str
const wchar_t* C_String(void) const {if (c_str) return c_str; return (const wchar_t*) L"";}
/// Assignment operators
RakWString& operator = ( const RakWString& right );
RakWString& operator = ( const RakString& right );
RakWString& operator = ( const wchar_t * const str );
RakWString& operator = ( wchar_t *str );
RakWString& operator = ( const char * const str );
RakWString& operator = ( char *str );
/// Concatenation
RakWString& operator +=( const RakWString& right);
RakWString& operator += ( const wchar_t * const right );
RakWString& operator += ( wchar_t *right );
/// Equality
bool operator==(const RakWString &right) const;
// Comparison
bool operator < ( const RakWString& right ) const;
bool operator <= ( const RakWString& right ) const;
bool operator > ( const RakWString& right ) const;
bool operator >= ( const RakWString& right ) const;
/// Inequality
bool operator!=(const RakWString &right) const;
/// Set the value of the string
void Set( wchar_t *str );
/// Returns if the string is empty. Also, C_String() would return ""
bool IsEmpty(void) const;
/// Returns the length of the string
size_t GetLength(void) const;
/// Has the string into an unsigned int
static unsigned long ToInteger(const RakWString &rs);
/// Compare strings (case sensitive)
int StrCmp(const RakWString &right) const;
/// Compare strings (not case sensitive)
int StrICmp(const RakWString &right) const;
/// Clear the string
void Clear(void);
/// Print the string to the screen
void Printf(void);
/// Print the string to a file
void FPrintf(FILE *fp);
/// Serialize to a bitstream, uncompressed (slightly faster)
/// \param[out] bs Bitstream to serialize to
void Serialize(BitStream *bs) const;
/// Static version of the Serialize function
static void Serialize(const wchar_t * const str, BitStream *bs);
/// Deserialize what was written by Serialize
/// \param[in] bs Bitstream to serialize from
/// \return true if the deserialization was successful
bool Deserialize(BitStream *bs);
/// Static version of the Deserialize() function
static bool Deserialize(wchar_t *str, BitStream *bs);
protected:
wchar_t* c_str;
size_t c_strCharLength;
};
}
const RakNet::RakWString RAK_DLL_EXPORT operator+(const RakNet::RakWString &lhs, const RakNet::RakWString &rhs);
#endif