Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(826)

Unified Diff: runtime/vm/hash_table.h

Issue 2083103002: Remove some uses of STL map. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/hash_map_test.cc ('k') | runtime/vm/hash_table_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/hash_table.h
diff --git a/runtime/vm/hash_table.h b/runtime/vm/hash_table.h
index 8408f23e2eb12b8feb97b8a92b4e009419f3c309..f1079b8aba86b41468a2f18d29cda298ed03693b 100644
--- a/runtime/vm/hash_table.h
+++ b/runtime/vm/hash_table.h
@@ -5,11 +5,6 @@
#ifndef VM_HASH_TABLE_H_
#define VM_HASH_TABLE_H_
-// Temporarily used when sorting the indices in EnumIndexHashTable.
-// TODO(koda): Remove these dependencies before using in production.
-#include <map>
-#include <vector>
-
#include "platform/assert.h"
#include "vm/object.h"
@@ -22,20 +17,16 @@ namespace dart {
// - HashTable
// The next layer provides ordering and iteration functionality:
// - UnorderedHashTable
-// - EnumIndexHashTable
// - LinkedListHashTable (TODO(koda): Implement.)
-// The utility class HashTables handles growth and conversion (e.g., converting
-// a compact EnumIndexHashTable to an iteration-efficient LinkedListHashTable).
+// The utility class HashTables handles growth and conversion.
// The next layer fixes the payload size and provides a natural interface:
// - HashMap
// - HashSet
// Combining either of these with an iteration strategy, we get the templates
// intended for use outside this file:
// - UnorderedHashMap
-// - EnumIndexHashMap
// - LinkedListHashMap
// - UnorderedHashSet
-// - EnumIndexHashSet
// - LinkedListHashSet
// Each of these can be finally specialized with KeyTraits to support any set of
// lookup key types (e.g., look up a char* in a set of String objects), and
@@ -435,74 +426,6 @@ class UnorderedHashTable : public HashTable<KeyTraits, kUserPayloadSize, 0> {
};
-// Table with insertion order, using one payload component for the enumeration
-// index, and one metadata element for the next enumeration index.
-template<typename KeyTraits, intptr_t kUserPayloadSize>
-class EnumIndexHashTable
- : public HashTable<KeyTraits, kUserPayloadSize + 1, 1> {
- public:
- typedef HashTable<KeyTraits, kUserPayloadSize + 1, 1> BaseTable;
- static const intptr_t kPayloadSize = kUserPayloadSize;
- static const intptr_t kNextEnumIndex = BaseTable::kMetaDataIndex;
- EnumIndexHashTable(Object* key, Smi* value, Array* data)
- : BaseTable(key, value, data) {}
- EnumIndexHashTable(Zone* zone, RawArray* data)
- : BaseTable(zone, data) {}
- explicit EnumIndexHashTable(RawArray* data)
- : BaseTable(Thread::Current()->zone(), data) {}
- // Note: Does not check for concurrent modification.
- class Iterator {
- public:
- explicit Iterator(const EnumIndexHashTable* table) : index_(-1) {
- // TODO(koda): Use GrowableArray after adding stateful comparator support.
- std::map<intptr_t, intptr_t> enum_to_entry;
- for (intptr_t i = 0; i < table->NumEntries(); ++i) {
- if (table->IsOccupied(i)) {
- intptr_t enum_index =
- table->GetSmiValueAt(table->PayloadIndex(i, kPayloadSize));
- enum_to_entry[enum_index] = i;
- }
- }
- for (std::map<intptr_t, intptr_t>::iterator it = enum_to_entry.begin();
- it != enum_to_entry.end();
- ++it) {
- entries_.push_back(it->second);
- }
- }
- bool MoveNext() {
- if (index_ < (static_cast<intptr_t>(entries_.size() - 1))) {
- index_++;
- return true;
- }
- return false;
- }
- intptr_t Current() {
- return entries_[index_];
- }
-
- private:
- intptr_t index_;
- std::vector<intptr_t> entries_;
- };
-
- void Initialize() const {
- BaseTable::Initialize();
- BaseTable::SetSmiValueAt(kNextEnumIndex, 0);
- }
-
- void InsertKey(intptr_t entry, const Object& key) const {
- BaseTable::InsertKey(entry, key);
- BaseTable::SmiHandle() =
- Smi::New(BaseTable::GetSmiValueAt(kNextEnumIndex));
- BaseTable::UpdatePayload(entry, kPayloadSize, BaseTable::SmiHandle());
- // TODO(koda): Handle possible Smi overflow from repeated insert/delete.
- BaseTable::AdjustSmiValueAt(kNextEnumIndex, 1);
- }
-
- // No extra book-keeping needed for DeleteEntry.
-};
-
-
class HashTables : public AllStatic {
public:
// Allocates and initializes a table.
@@ -687,18 +610,6 @@ class UnorderedHashMap : public HashMap<UnorderedHashTable<KeyTraits, 1> > {
};
-template<typename KeyTraits>
-class EnumIndexHashMap : public HashMap<EnumIndexHashTable<KeyTraits, 1> > {
- public:
- typedef HashMap<EnumIndexHashTable<KeyTraits, 1> > BaseMap;
- explicit EnumIndexHashMap(RawArray* data)
- : BaseMap(Thread::Current()->zone(), data) {}
- EnumIndexHashMap(Zone* zone, RawArray* data) : BaseMap(zone, data) {}
- EnumIndexHashMap(Object* key, Smi* value, Array* data)
- : BaseMap(key, value, data) {}
-};
-
-
template<typename BaseIterTable>
class HashSet : public BaseIterTable {
public:
@@ -791,18 +702,6 @@ class UnorderedHashSet : public HashSet<UnorderedHashTable<KeyTraits, 0> > {
: BaseSet(key, value, data) {}
};
-
-template<typename KeyTraits>
-class EnumIndexHashSet : public HashSet<EnumIndexHashTable<KeyTraits, 0> > {
- public:
- typedef HashSet<EnumIndexHashTable<KeyTraits, 0> > BaseSet;
- explicit EnumIndexHashSet(RawArray* data)
- : BaseSet(Thread::Current()->zone(), data) {}
- EnumIndexHashSet(Zone* zone, RawArray* data) : BaseSet(zone, data) {}
- EnumIndexHashSet(Object* key, Smi* value, Array* data)
- : BaseSet(key, value, data) {}
-};
-
} // namespace dart
#endif // VM_HASH_TABLE_H_
« no previous file with comments | « runtime/vm/hash_map_test.cc ('k') | runtime/vm/hash_table_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698