// Copyright (c) 2013 GitHub, Inc. All rights reserved. // Copyright (c) 2012 Intel Corp. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef ATOM_COMMON_API_ATOM_API_ID_WEAK_MAP_H_ #define ATOM_COMMON_API_ATOM_API_ID_WEAK_MAP_H_ #include #include "atom/common/v8/scoped_persistent.h" #include "base/basictypes.h" #include "vendor/node/src/node_object_wrap.h" namespace atom { namespace api { // Like ES6's WeakMap, but the key is Integer and the value is Weak Pointer. class IDWeakMap : public node::ObjectWrap { public: static void Initialize(v8::Handle target); private: IDWeakMap(); virtual ~IDWeakMap(); bool Has(int key) const; void Erase(int key); int GetNextID(); static void WeakCallback(v8::Isolate* isolate, v8::Persistent* value, IDWeakMap* self); static void New(const v8::FunctionCallbackInfo& args); static void Add(const v8::FunctionCallbackInfo& args); static void Get(const v8::FunctionCallbackInfo& args); static void Has(const v8::FunctionCallbackInfo& args); static void Keys(const v8::FunctionCallbackInfo& args); static void Remove(const v8::FunctionCallbackInfo& args); int next_id_; std::map map_; DISALLOW_COPY_AND_ASSIGN(IDWeakMap); }; } // namespace api } // namespace atom #endif // ATOM_COMMON_API_ATOM_API_ID_WEAK_MAP_H_