X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/runtime/DateInstanceCache.h diff --git a/runtime/DateInstanceCache.h b/runtime/DateInstanceCache.h index b60c29a..865ee8f 100644 --- a/runtime/DateInstanceCache.h +++ b/runtime/DateInstanceCache.h @@ -26,69 +26,68 @@ #ifndef DateInstanceCache_h #define DateInstanceCache_h -#include +#include "JSCJSValue.h" +#include "JSDateMath.h" +#include #include -#include #include namespace JSC { - extern const double NaN; +class DateInstanceData : public RefCounted { +public: + static Ref create() { return adoptRef(*new DateInstanceData); } - class DateInstanceData : public RefCounted { - public: - static PassRefPtr create() { return adoptRef(new DateInstanceData); } + double m_gregorianDateTimeCachedForMS; + GregorianDateTime m_cachedGregorianDateTime; + double m_gregorianDateTimeUTCCachedForMS; + GregorianDateTime m_cachedGregorianDateTimeUTC; - double m_gregorianDateTimeCachedForMS; - GregorianDateTime m_cachedGregorianDateTime; - double m_gregorianDateTimeUTCCachedForMS; - GregorianDateTime m_cachedGregorianDateTimeUTC; +private: + DateInstanceData() + : m_gregorianDateTimeCachedForMS(PNaN) + , m_gregorianDateTimeUTCCachedForMS(PNaN) + { + } +}; - private: - DateInstanceData() - : m_gregorianDateTimeCachedForMS(NaN) - , m_gregorianDateTimeUTCCachedForMS(NaN) - { - } - }; +class DateInstanceCache { +public: + DateInstanceCache() + { + reset(); + } - class DateInstanceCache { - public: - DateInstanceCache() - { - reset(); - } - - void reset() - { - for (size_t i = 0; i < cacheSize; ++i) - m_cache[i].key = NaN; - } - - DateInstanceData* add(double d) - { - CacheEntry& entry = lookup(d); - if (d == entry.key) - return entry.value.get(); - - entry.key = d; - entry.value = DateInstanceData::create(); - return entry.value.get(); - } + void reset() + { + for (size_t i = 0; i < cacheSize; ++i) + m_cache[i].key = PNaN; + } - private: - static const size_t cacheSize = 16; + DateInstanceData* add(double d) + { + CacheEntry& entry = lookup(d); + if (d == entry.key) + return entry.value.get(); - struct CacheEntry { - double key; - RefPtr value; - }; + entry.key = d; + entry.value = DateInstanceData::create(); + return entry.value.get(); + } - CacheEntry& lookup(double d) { return m_cache[WTF::FloatHash::hash(d) & (cacheSize - 1)]; } +private: + static const size_t cacheSize = 16; - FixedArray m_cache; + struct CacheEntry { + double key; + RefPtr value; }; + CacheEntry& lookup(double d) { return m_cache[WTF::FloatHash::hash(d) & (cacheSize - 1)]; } + + std::array m_cache; +}; + } // namespace JSC #endif // DateInstanceCache_h