//----------------------------------------------------------------------------- // Project : SDK Core // // Category : SDK Core Interfaces // Filename : pluginterfaces/base/conststringtable.cpp // Created by : Steinberg, 09/2007 // Description : constant unicode string table // //----------------------------------------------------------------------------- // This file is part of a Steinberg SDK. It is subject to the license terms // in the LICENSE file found in the top-level directory of this distribution // and at www.steinberg.net/sdklicenses. // No part of the SDK, including this file, may be copied, modified, propagated, // or distributed except according to the terms contained in the LICENSE file. //----------------------------------------------------------------------------- #include "conststringtable.h" #include #include namespace Steinberg { static std::map* stringMap; static std::map* charMap; static char16* generateUTF16 (const char8* str); //---------------------------------------------------------------------------- ConstStringTable* ConstStringTable::instance () { static ConstStringTable stringTable; return &stringTable; } //---------------------------------------------------------------------------- const char16* ConstStringTable::getString (const char8* str) const { std::map::iterator iter = stringMap->find (str); if (iter != stringMap->end ()) return iter->second; char16* uStr = generateUTF16 (str); stringMap->insert (std::make_pair (str, uStr)); return uStr; } //---------------------------------------------------------------------------- const char16 ConstStringTable::getString (const char8 str) const { std::map::iterator iter = charMap->find (str); if (iter != charMap->end ()) return iter->second; char16 uStr = 0; #if BYTEORDER == kBigEndian char8* puStr = (char8*)&uStr; puStr[1] = str; #else uStr = str; #endif charMap->insert (std::make_pair (str, uStr)); return uStr; } //---------------------------------------------------------------------------- ConstStringTable::ConstStringTable () { stringMap = new std::map; charMap = new std::map; } //---------------------------------------------------------------------------- ConstStringTable::~ConstStringTable () { // free out allocated strings { std::map::iterator iter = stringMap->begin (); while (iter != stringMap->end ()) { delete[] iter->second; iter++; } } // delete iterator on map before deleting the map delete stringMap; delete charMap; } //---------------------------------------------------------------------------- char16* generateUTF16 (const char8* str) { int32 len = (int32)strlen (str); char16* result = new char16[len + 1]; for (int32 i = 0; i < len; i++) { #if BYTEORDER == kBigEndian char8* pChr = (char8*)&result[i]; pChr[0] = 0; pChr[1] = str[i]; #else result[i] = str[i]; #endif } result[len] = 0; return result; } //------------------------------------------------------------------------ } // namespace Steinberg