Files
src-1.2/external/ours/library/localization/src/shared/StringId.h
T

154 lines
4.9 KiB
C++
Executable File

//========================================================================
//
// StringId.h - Used to access an entry in a string table.
//
// copyright 2001 Sony Online Entertainment
//
//========================================================================
#ifndef _INCLUDED_StringId_H
#define _INCLUDED_StringId_H
#include <string>
#include "Unicode.h"
// ======================================================================
namespace DB
{
class BufferString;
}
//========================================================================
// class StringId
class StringId
{
friend int operator - (const StringId & lhs, const StringId & rhs);
friend bool operator != (const StringId & lhs, const StringId & rhs);
friend bool operator == (const StringId & lhs, const StringId & rhs);
friend bool operator < (const StringId & lhs, const StringId & rhs);
public:
static const StringId cms_invalid;
//-- LocalizationUnicodeString is simply a typedef that is equivalent to Unicode::String
//-- it is defined here to prevent #including Unicode.h
typedef std::basic_string<unsigned short> LocUnicodeString;
StringId ();
StringId (const std::string & table, const std::string & text);
StringId (const std::string & table, unsigned long textIndex);
explicit StringId (const std::string & canonicalRepresentation);
const std::string & getTable () const;
const std::string & getText () const;
unsigned long getTextIndex () const;
bool isInvalid () const;
bool isValid () const;
void clear ();
std::string getDebugString () const;
std::string getCanonicalRepresentation () const;
void setTable (const std::string & table);
void setText (const std::string & text);
//-- text index is a mutable property of the StringId
//-- it is set the first time a StringId is localized, to speed up future lookups
void setTextIndex (unsigned long textIndex) const;
bool localize (LocUnicodeString & result, bool forceEnglish = false) const;
LocUnicodeString localize (bool forceEnglish = false) const;
bool localize (LocUnicodeString & result, const Unicode::NarrowString & locale, bool forceEnglish = false) const;
LocUnicodeString localize (const Unicode::NarrowString & locale, bool forceEnglish = false) const;
static LocUnicodeString decodeString (const LocUnicodeString & str);
static StringId decodeStringId (const LocUnicodeString & str);
public:
// These are defined in MiscPack.cpp, to avoid making this library require linking with the database library
void unpackFromDatabase (const DB::BufferString &table, const DB::BufferString &text);
void packToDatabase (DB::BufferString &table, DB::BufferString &text) const;
private:
std::string m_table;
std::string m_text;
mutable unsigned long m_textIndex; //if this number is nonzero, assume it is valid
};
//----------------------------------------------------------------------
inline const std::string & StringId::getTable() const
{
return m_table;
}
//----------------------------------------------------------------------
inline const std::string & StringId::getText() const
{
return m_text;
}
//----------------------------------------------------------------------
inline unsigned long StringId::getTextIndex() const
{
return m_textIndex;
}
//========================================================================
// friend functions
inline int operator -(const StringId & lhs, const StringId & rhs)
{
return (lhs != rhs) ? 1 : 0;
}
//----------------------------------------------------------------------
inline bool operator !=(const StringId & lhs, const StringId & rhs)
{
return !(lhs == rhs);
}
//----------------------------------------------------------------------
inline bool operator ==(const StringId & lhs, const StringId & rhs)
{
if (&lhs == &rhs)
return true;
if (lhs.m_table != rhs.m_table)
return false;
if (lhs.m_text != rhs.m_text)
return false;
if (lhs.m_text.empty() && lhs.m_textIndex != rhs.m_textIndex)
return false;
return true;
}
//----------------------------------------------------------------------
inline bool operator <(const StringId & lhs, const StringId & rhs)
{
if (&lhs == &rhs)
return false;
if (lhs.m_table != rhs.m_table)
return lhs.m_table < rhs.m_table;
if (lhs.m_text != rhs.m_text)
return lhs.m_text < rhs.m_text;
if (lhs.m_text.empty() && lhs.m_textIndex != rhs.m_textIndex)
return lhs.m_textIndex < rhs.m_textIndex;
return false;
}
//----------------------------------------------------------------------
#endif // _INCLUDED_StringId_H