BsHString.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsCorePrerequisites.h"
  4. #include "BsHString.h"
  5. #include "BsStringTableManager.h"
  6. namespace BansheeEngine
  7. {
  8. HString::HString(UINT32 stringTableId)
  9. :mParameters(nullptr), mIsDirty(true), mStringPtr(nullptr)
  10. {
  11. mStringData = StringTableManager::instance().getTable(stringTableId)->getStringData(L"");
  12. if(mStringData->numParameters > 0)
  13. mParameters = bs_newN<WString>(mStringData->numParameters);
  14. }
  15. HString::HString(const WString& identifierString, UINT32 stringTableId)
  16. :mParameters(nullptr), mIsDirty(true), mStringPtr(nullptr)
  17. {
  18. mStringData = StringTableManager::instance().getTable(stringTableId)->getStringData(identifierString);
  19. if(mStringData->numParameters > 0)
  20. mParameters = bs_newN<WString>(mStringData->numParameters);
  21. }
  22. HString::HString(const WString& identifierString, const WString& defaultString, UINT32 stringTableId)
  23. :mParameters(nullptr), mIsDirty(true), mStringPtr(nullptr)
  24. {
  25. HStringTable table = StringTableManager::instance().getTable(stringTableId);
  26. table->setString(identifierString, StringTable::DEFAULT_LANGUAGE, defaultString);
  27. mStringData = table->getStringData(identifierString);
  28. if (mStringData->numParameters > 0)
  29. mParameters = bs_newN<WString>(mStringData->numParameters);
  30. }
  31. HString::HString(const HString& copy)
  32. {
  33. *this = copy;
  34. }
  35. HString::~HString()
  36. {
  37. if (mParameters != nullptr)
  38. bs_deleteN(mParameters, mStringData->numParameters);
  39. }
  40. HString::operator const WString& () const
  41. {
  42. return getValue();
  43. }
  44. HString& HString::operator=(const HString& rhs)
  45. {
  46. mStringData = rhs.mStringData;
  47. mIsDirty = rhs.mIsDirty;
  48. mCachedString = rhs.mCachedString;
  49. if (rhs.mStringData->numParameters > 0)
  50. {
  51. mParameters = bs_newN<WString>(mStringData->numParameters);
  52. if (rhs.mParameters != nullptr)
  53. {
  54. for (UINT32 i = 0; i < mStringData->numParameters; i++)
  55. mParameters[i] = rhs.mParameters[i];
  56. }
  57. mStringPtr = &mCachedString;
  58. }
  59. else
  60. {
  61. mParameters = nullptr;
  62. mStringPtr = &mStringData->string;
  63. }
  64. return *this;
  65. }
  66. const WString& HString::getValue() const
  67. {
  68. if(mIsDirty)
  69. {
  70. if(mParameters != nullptr)
  71. {
  72. mStringData->concatenateString(mCachedString, mParameters, mStringData->numParameters);
  73. mStringPtr = &mCachedString;
  74. }
  75. else
  76. {
  77. mStringPtr = &mStringData->string;
  78. }
  79. mIsDirty = false;
  80. }
  81. return *mStringPtr;
  82. }
  83. void HString::setParameter(UINT32 idx, const WString& value)
  84. {
  85. if (idx >= mStringData->numParameters)
  86. return;
  87. mParameters[idx] = value;
  88. mIsDirty = true;
  89. }
  90. const HString& HString::dummy()
  91. {
  92. static HString dummyVal;
  93. return dummyVal;
  94. }
  95. }