diff options
Diffstat (limited to 'deps/v8/src/compiler/refs-map.h')
-rw-r--r-- | deps/v8/src/compiler/refs-map.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/refs-map.h b/deps/v8/src/compiler/refs-map.h new file mode 100644 index 0000000000..daaf433049 --- /dev/null +++ b/deps/v8/src/compiler/refs-map.h @@ -0,0 +1,54 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_COMPILER_REFS_MAP_H_ +#define V8_COMPILER_REFS_MAP_H_ + +#include "src/base/hashmap.h" +#include "src/globals.h" +#include "src/zone/zone.h" + +namespace v8 { +namespace internal { +namespace compiler { + +class ObjectData; + +class AddressMatcher : public base::KeyEqualityMatcher<Address> { + public: + bool operator()(uint32_t hash1, uint32_t hash2, const Address& key1, + const Address& key2) const { + return key1 == key2; + } +}; + +// This class employs our own implementation of hash map for the purpose of +// storing the mapping between canonical Addresses and allocated ObjectData. +// It's used as the refs map in JSHeapBroker and as the snapshot in +// PerIsolateCompilerCache, as we need a cheap copy between the two and +// std::unordered_map doesn't satisfy this requirement, as it rehashes the +// whole map and copies all entries one by one. +class RefsMap + : public base::TemplateHashMapImpl<Address, ObjectData*, AddressMatcher, + ZoneAllocationPolicy>, + public ZoneObject { + public: + RefsMap(uint32_t capacity, AddressMatcher match, Zone* zone); + RefsMap(const RefsMap* other, Zone* zone); + + bool IsEmpty() const { return occupancy() == 0; } + + // Wrappers around methods from UnderlyingMap + Entry* Lookup(const Address& key) const; + Entry* LookupOrInsert(const Address& key, Zone* zone); + + private: + static uint32_t Hash(Address addr); +}; + +} // namespace compiler +} // namespace internal +} // namespace v8 + +#endif // V8_COMPILER_REFS_MAP_H_ |