CharStringCache.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. namespace Js
  7. {
  8. class CharStringCache
  9. {
  10. public:
  11. CharStringCache();
  12. JavascriptString* GetStringForCharA(char c); // ASCII 7-bit
  13. JavascriptString* GetStringForCharW(char16 c); // Unicode
  14. JavascriptString* GetStringForChar(char16 c); // Either
  15. JavascriptString* GetStringForCharSP(codepoint_t c); // Supplementary char
  16. // For JIT
  17. static const char16 CharStringCacheSize = 0x80; /*range of ASCII 7-bit chars*/
  18. static DWORD GetCharStringCacheAOffset() { return offsetof(CharStringCache, charStringCacheA); }
  19. static JavascriptString* GetStringForChar(CharStringCache *charStringCache, char16 c) { return charStringCache->GetStringForChar(c); }
  20. static JavascriptString* GetStringForCharCodePoint(CharStringCache *charStringCache, codepoint_t c)
  21. {
  22. return (c >= 0x10000 ? charStringCache->GetStringForCharSP(c) : charStringCache->GetStringForCharW((char16)c));
  23. }
  24. private:
  25. Field(PropertyString *) charStringCacheA[CharStringCacheSize];
  26. typedef JsUtil::BaseDictionary<char16, JavascriptString *, Recycler, PowerOf2SizePolicy> CharStringCacheMap;
  27. Field(CharStringCacheMap *) charStringCache;
  28. friend class CharStringCacheValidator;
  29. };
  30. class CharStringCacheValidator
  31. {
  32. // Lower assert that charStringCacheA is at the 0 offset
  33. CompileAssert(offsetof(CharStringCache, charStringCacheA) == 0);
  34. };
  35. };