// 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 "base/basictypes.h" #include "vendor/node/src/node_object_wrap.h" namespace atom { namespace api { class IDWeakMap : public node::ObjectWrap { public: static void Initialize(v8::Handle target); private: IDWeakMap(); virtual ~IDWeakMap(); bool Has(int key) const; void Erase(v8::Isolate* isolate, int key); int GetNextID(); static void WeakCallback(v8::Isolate* isolate, v8::Persistent value, void *data); static v8::Handle New(const v8::Arguments& args); static v8::Handle Add(const v8::Arguments& args); static v8::Handle Get(const v8::Arguments& args); static v8::Handle Has(const v8::Arguments& args); static v8::Handle Keys(const v8::Arguments& args); static v8::Handle Remove(const v8::Arguments& 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_