|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- //-----------------------------------------------------------------------------
- // 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 <cstring>
- #include <map>
-
- namespace Steinberg {
-
- static std::map<const char8*, char16*>* stringMap;
- static std::map<const char8, char16>* 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<const char8*, char16*>::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<const char8, char16>::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<const char8*, char16*>;
- charMap = new std::map<const char8, char16>;
- }
-
- //----------------------------------------------------------------------------
- ConstStringTable::~ConstStringTable ()
- {
- // free out allocated strings
- {
- std::map<const char8*, char16*>::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
|