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

Side by Side Diff: runtime/vm/hash_table.h

Issue 1709273003: Make function lookup in classes thread-safe: (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: d Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « runtime/vm/flow_graph_optimizer.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_HASH_TABLE_H_ 5 #ifndef VM_HASH_TABLE_H_
6 #define VM_HASH_TABLE_H_ 6 #define VM_HASH_TABLE_H_
7 7
8 // Temporarily used when sorting the indices in EnumIndexHashTable. 8 // Temporarily used when sorting the indices in EnumIndexHashTable.
9 // TODO(koda): Remove these dependencies before using in production. 9 // TODO(koda): Remove these dependencies before using in production.
10 #include <map> 10 #include <map>
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 key_handle_(Object::Handle(zone_)), 92 key_handle_(Object::Handle(zone_)),
93 smi_handle_(Smi::Handle(zone_)), 93 smi_handle_(Smi::Handle(zone_)),
94 data_(&Array::Handle(zone_, data)), 94 data_(&Array::Handle(zone_, data)),
95 released_data_(NULL) {} 95 released_data_(NULL) {}
96 // Like above, except uses current zone. 96 // Like above, except uses current zone.
97 explicit HashTable(RawArray* data) 97 explicit HashTable(RawArray* data)
98 : zone_(Thread::Current()->zone()), 98 : zone_(Thread::Current()->zone()),
99 key_handle_(Object::Handle(zone_)), 99 key_handle_(Object::Handle(zone_)),
100 smi_handle_(Smi::Handle(zone_)), 100 smi_handle_(Smi::Handle(zone_)),
101 data_(&Array::Handle(zone_, data)), 101 data_(&Array::Handle(zone_, data)),
102 released_data_(NULL) {} 102 released_data_(NULL) {
103 ASSERT(!data_->IsNull());
104 }
103 105
104 // Returns the final table. The handle is cleared when this HashTable is 106 // Returns the final table. The handle is cleared when this HashTable is
105 // destroyed. 107 // destroyed.
106 Array& Release() { 108 Array& Release() {
107 ASSERT(data_ != NULL); 109 ASSERT(data_ != NULL);
108 ASSERT(released_data_ == NULL); 110 ASSERT(released_data_ == NULL);
109 // Ensure that no methods are called after 'Release'. 111 // Ensure that no methods are called after 'Release'.
110 released_data_ = data_; 112 released_data_ = data_;
111 data_ = NULL; 113 data_ = NULL;
112 return *released_data_; 114 return *released_data_;
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 291
290 RawObject* InternalGetKey(intptr_t entry) const { 292 RawObject* InternalGetKey(intptr_t entry) const {
291 return data_->At(KeyIndex(entry)); 293 return data_->At(KeyIndex(entry));
292 } 294 }
293 295
294 void InternalSetKey(intptr_t entry, const Object& key) const { 296 void InternalSetKey(intptr_t entry, const Object& key) const {
295 data_->SetAt(KeyIndex(entry), key); 297 data_->SetAt(KeyIndex(entry), key);
296 } 298 }
297 299
298 intptr_t GetSmiValueAt(intptr_t index) const { 300 intptr_t GetSmiValueAt(intptr_t index) const {
301 ASSERT(!data_->IsNull());
299 ASSERT(Object::Handle(zone(), data_->At(index)).IsSmi()); 302 ASSERT(Object::Handle(zone(), data_->At(index)).IsSmi());
300 return Smi::Value(Smi::RawCast(data_->At(index))); 303 return Smi::Value(Smi::RawCast(data_->At(index)));
301 } 304 }
302 305
303 void SetSmiValueAt(intptr_t index, intptr_t value) const { 306 void SetSmiValueAt(intptr_t index, intptr_t value) const {
304 smi_handle_ = Smi::New(value); 307 smi_handle_ = Smi::New(value);
305 data_->SetAt(index, smi_handle_); 308 data_->SetAt(index, smi_handle_);
306 } 309 }
307 310
308 void AdjustSmiValueAt(intptr_t index, intptr_t delta) const { 311 void AdjustSmiValueAt(intptr_t index, intptr_t delta) const {
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 // We currently never shrink. 685 // We currently never shrink.
683 HashTables::EnsureLoadFactor(0.0, kMaxLoadFactor, *this); 686 HashTables::EnsureLoadFactor(0.0, kMaxLoadFactor, *this);
684 } 687 }
685 }; 688 };
686 689
687 690
688 template<typename KeyTraits> 691 template<typename KeyTraits>
689 class UnorderedHashSet : public HashSet<UnorderedHashTable<KeyTraits, 0> > { 692 class UnorderedHashSet : public HashSet<UnorderedHashTable<KeyTraits, 0> > {
690 public: 693 public:
691 typedef HashSet<UnorderedHashTable<KeyTraits, 0> > BaseSet; 694 typedef HashSet<UnorderedHashTable<KeyTraits, 0> > BaseSet;
692 explicit UnorderedHashSet(RawArray* data) : BaseSet(data) {} 695 explicit UnorderedHashSet(RawArray* data) : BaseSet(data) {
696 ASSERT(data != Array::null());
697 }
693 UnorderedHashSet(Zone* zone, RawArray* data) : BaseSet(zone, data) {} 698 UnorderedHashSet(Zone* zone, RawArray* data) : BaseSet(zone, data) {}
694 }; 699 };
695 700
696 701
697 template<typename KeyTraits> 702 template<typename KeyTraits>
698 class EnumIndexHashSet : public HashSet<EnumIndexHashTable<KeyTraits, 0> > { 703 class EnumIndexHashSet : public HashSet<EnumIndexHashTable<KeyTraits, 0> > {
699 public: 704 public:
700 typedef HashSet<EnumIndexHashTable<KeyTraits, 0> > BaseSet; 705 typedef HashSet<EnumIndexHashTable<KeyTraits, 0> > BaseSet;
701 explicit EnumIndexHashSet(RawArray* data) : BaseSet(data) {} 706 explicit EnumIndexHashSet(RawArray* data) : BaseSet(data) {}
702 EnumIndexHashSet(Zone* zone, RawArray* data) : BaseSet(zone, data) {} 707 EnumIndexHashSet(Zone* zone, RawArray* data) : BaseSet(zone, data) {}
703 }; 708 };
704 709
705 } // namespace dart 710 } // namespace dart
706 711
707 #endif // VM_HASH_TABLE_H_ 712 #endif // VM_HASH_TABLE_H_
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_optimizer.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698