| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #include "BsCorePrerequisites.h"
- #include "Localization/BsHString.h"
- #include "Localization/BsStringTableManager.h"
- namespace bs
- {
- HString::HString(UINT32 stringTableId)
- :mParameters(nullptr), mIsDirty(true), mStringPtr(nullptr)
- {
- mStringData = StringTableManager::instance().getTable(stringTableId)->getStringData(L"");
- if (mStringData->numParameters > 0)
- mParameters = bs_newN<WString>(mStringData->numParameters);
- }
- HString::HString(const WString& identifierString, UINT32 stringTableId)
- :mParameters(nullptr), mIsDirty(true), mStringPtr(nullptr)
- {
- mStringData = StringTableManager::instance().getTable(stringTableId)->getStringData(identifierString);
- if (mStringData->numParameters > 0)
- mParameters = bs_newN<WString>(mStringData->numParameters);
- }
- HString::HString(const WString& identifierString, const WString& defaultString, UINT32 stringTableId)
- :mParameters(nullptr), mIsDirty(true), mStringPtr(nullptr)
- {
- HStringTable table = StringTableManager::instance().getTable(stringTableId);
- table->setString(identifierString, StringTable::DEFAULT_LANGUAGE, defaultString);
- mStringData = table->getStringData(identifierString);
- if (mStringData->numParameters > 0)
- mParameters = bs_newN<WString>(mStringData->numParameters);
- }
- HString::HString(const HString& copy)
- {
- mStringData = copy.mStringData;
- mIsDirty = copy.mIsDirty;
- mCachedString = copy.mCachedString;
- if (copy.mStringData->numParameters > 0)
- {
- mParameters = bs_newN<WString>(mStringData->numParameters);
- if (copy.mParameters != nullptr)
- {
- for (UINT32 i = 0; i < mStringData->numParameters; i++)
- mParameters[i] = copy.mParameters[i];
- }
- mStringPtr = &mCachedString;
- }
- else
- {
- mParameters = nullptr;
- mStringPtr = &mStringData->string;
- }
- }
- HString::~HString()
- {
- if (mParameters != nullptr)
- bs_deleteN(mParameters, mStringData->numParameters);
- }
- HString::operator const WString& () const
- {
- return getValue();
- }
- HString& HString::operator=(const HString& rhs)
- {
- if (mParameters != nullptr)
- {
- bs_deleteN(mParameters, mStringData->numParameters);
- mParameters = nullptr;
- }
- mStringData = rhs.mStringData;
- mIsDirty = rhs.mIsDirty;
- mCachedString = rhs.mCachedString;
- if (rhs.mStringData->numParameters > 0)
- {
- mParameters = bs_newN<WString>(mStringData->numParameters);
- if (rhs.mParameters != nullptr)
- {
- for (UINT32 i = 0; i < mStringData->numParameters; i++)
- mParameters[i] = rhs.mParameters[i];
- }
- mStringPtr = &mCachedString;
- }
- else
- {
- mParameters = nullptr;
- mStringPtr = &mStringData->string;
- }
- return *this;
- }
- const WString& HString::getValue() const
- {
- if (mIsDirty)
- {
- if (mParameters != nullptr)
- {
- mStringData->concatenateString(mCachedString, mParameters, mStringData->numParameters);
- mStringPtr = &mCachedString;
- }
- else
- {
- mStringPtr = &mStringData->string;
- }
- mIsDirty = false;
- }
- return *mStringPtr;
- }
- void HString::setParameter(UINT32 idx, const WString& value)
- {
- if (idx >= mStringData->numParameters)
- return;
- mParameters[idx] = value;
- mIsDirty = true;
- }
- const HString& HString::dummy()
- {
- static HString dummyVal;
- return dummyVal;
- }
- }
|