Add API to return all keys of weak map.
authorCheng Zhao <zcbenz@gmail.com>
Sat, 27 Apr 2013 08:54:17 +0000 (16:54 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Sat, 27 Apr 2013 08:54:17 +0000 (16:54 +0800)
common/api/atom_api_id_weak_map.cc
common/api/atom_api_id_weak_map.h

index 3b4d975..6b356b8 100644 (file)
@@ -10,14 +10,14 @@ namespace atom {
 namespace api {
 
 IDWeakMap::IDWeakMap()
-    : nextId_(0) {
+    : next_id_(0) {
 }
 
 IDWeakMap::~IDWeakMap() {
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
 
   auto copied_map = map_;
-  for (auto el : copied_map)
+  for (const auto& el : copied_map)
     Erase(isolate, el.first);
 }
 
@@ -35,7 +35,7 @@ void IDWeakMap::Erase(v8::Isolate* isolate, int key) {
 }
 
 int IDWeakMap::GetNextID() {
-  return ++nextId_;
+  return ++next_id_;
 }
 
 // static
@@ -103,6 +103,21 @@ v8::Handle<v8::Value> IDWeakMap::Has(const v8::Arguments& args) {
 }
 
 // static
+v8::Handle<v8::Value> IDWeakMap::Keys(const v8::Arguments& args) {
+  IDWeakMap* obj = ObjectWrap::Unwrap<IDWeakMap>(args.This());
+
+  v8::Handle<v8::Array> keys = v8::Array::New(obj->map_.size());
+
+  int i = 0;
+  for (const auto& el : obj->map_) {
+    keys->Set(i, v8::Integer::New(el.first));
+    ++i;
+  }
+
+  return keys;
+}
+
+// static
 v8::Handle<v8::Value> IDWeakMap::Remove(const v8::Arguments& args) {
   if (!args[0]->IsNumber())
     return node::ThrowTypeError("Bad argument");
@@ -128,6 +143,7 @@ void IDWeakMap::Initialize(v8::Handle<v8::Object> target) {
   NODE_SET_PROTOTYPE_METHOD(t, "add", Add);
   NODE_SET_PROTOTYPE_METHOD(t, "get", Get);
   NODE_SET_PROTOTYPE_METHOD(t, "has", Has);
+  NODE_SET_PROTOTYPE_METHOD(t, "keys", Keys);
   NODE_SET_PROTOTYPE_METHOD(t, "remove", Remove);
 
   target->Set(v8::String::NewSymbol("IDWeakMap"), t->GetFunction());
index ec28d57..c8904a3 100644 (file)
@@ -35,9 +35,10 @@ class IDWeakMap : public node::ObjectWrap {
   static v8::Handle<v8::Value> Add(const v8::Arguments& args);
   static v8::Handle<v8::Value> Get(const v8::Arguments& args);
   static v8::Handle<v8::Value> Has(const v8::Arguments& args);
+  static v8::Handle<v8::Value> Keys(const v8::Arguments& args);
   static v8::Handle<v8::Value> Remove(const v8::Arguments& args);
 
-  int nextId_;
+  int next_id_;
 
   std::map<int, v8::Persistent<v8::Value>> map_;