Index: src/d8.cc |
=================================================================== |
--- src/d8.cc (revision 1587) |
+++ src/d8.cc (working copy) |
@@ -86,7 +86,7 @@ |
} |
-Shell::CounterMap Shell::counter_map_; |
+CounterMap* Shell::counter_map_; |
i::OS::MemoryMappedFile* Shell::counters_file_ = NULL; |
CounterCollection Shell::local_counters_; |
CounterCollection* Shell::counters_ = &local_counters_; |
@@ -94,6 +94,13 @@ |
Persistent<Context> Shell::evaluation_context_; |
+bool CounterMap::Match(void* key1, void* key2) { |
+ const char* name1 = reinterpret_cast<const char*>(key1); |
+ const char* name2 = reinterpret_cast<const char*>(key2); |
+ return !strcmp(name1, name2); |
Kevin Millikin (Chromium)
2009/03/24 13:29:30
return strcmp(name1, name2) == 0; maybe?
|
+} |
+ |
+ |
// Converts a V8 value to a C string. |
const char* ToCString(const v8::String::Utf8Value& value) { |
return *value ? *value : "<string conversion failed>"; |
@@ -298,20 +305,31 @@ |
} |
+int CounterMap::Hash(const char* name) { |
+ int h = 0; |
+ int c; |
+ while ((c = *name++) != 0) { |
+ h += h << 5; |
+ h += c; |
+ } |
+ return h; |
+} |
+ |
+ |
int* Shell::LookupCounter(const char* name) { |
- CounterMap::iterator item = counter_map_.find(name); |
- if (item != counter_map_.end()) { |
- Counter* result = (*item).second; |
- return result->ptr(); |
+ Counter* counter = counter_map_->Lookup(name); |
+ if (counter != NULL) { |
+ return counter->ptr(); |
} |
Counter* result = counters_->GetNextCounter(); |
if (result == NULL) return NULL; |
- counter_map_[name] = result; |
+ counter_map_->Set(name, result); |
return result->Bind(name); |
} |
void Shell::Initialize() { |
+ Shell::counter_map_ = new CounterMap(); |
// Set up counters |
if (i::FLAG_map_counters != NULL) |
MapCounters(i::FLAG_map_counters); |
@@ -382,11 +400,9 @@ |
::printf("+----------------------------------------+-------------+\n"); |
::printf("| Name | Value |\n"); |
::printf("+----------------------------------------+-------------+\n"); |
- for (CounterMap::iterator i = counter_map_.begin(); |
- i != counter_map_.end(); |
- i++) { |
- Counter* counter = (*i).second; |
- ::printf("| %-38s | %11i |\n", (*i).first, counter->value()); |
+ for (CounterMap::Iterator i(counter_map_); i.More(); i.Next()) { |
+ Counter* counter = i.CurrentValue(); |
+ ::printf("| %-38s | %11i |\n", i.CurrentKey(), counter->value()); |
} |
::printf("+----------------------------------------+-------------+\n"); |
} |