* Copyright 2013, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef STRING_H
#define STRING_H
#include "StringPool.h"
class String {
public:
String();
String(const String& other);
~String();
bool SetTo(const char* string);
bool SetTo(const char* string, size_t maxLength);
bool SetToExactLength(const char* string,
size_t length);
const char* Data() const;
uint32 Hash() const;
bool IsEmpty() const;
String& operator=(const String& other);
bool operator==(const String& other) const;
bool operator!=(const String& other) const;
operator const char*() const;
private:
StringData* fData;
};
inline
String::String()
:
fData(StringData::GetEmpty())
{
}
inline
String::String(const String& other)
:
fData(other.fData)
{
fData->AcquireReference();
}
inline
String::~String()
{
fData->ReleaseReference();
}
inline bool
String::SetTo(const char* string)
{
return SetToExactLength(string, (string == NULL) ? 0 : strlen(string));
}
inline bool
String::SetTo(const char* string, size_t maxLength)
{
return SetToExactLength(string, strnlen(string, maxLength));
}
inline const char*
String::Data() const
{
return fData->String();
}
inline uint32
String::Hash() const
{
return fData->Hash();
}
inline bool
String::IsEmpty() const
{
return fData == StringData::Empty();
}
inline bool
String::operator==(const String& other) const
{
return fData == other.fData;
}
inline bool
String::operator!=(const String& other) const
{
return !(*this == other);
}
inline
String::operator const char*() const
{
return fData->String();
}
#endif