| /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- |
| * vim: set ts=8 sts=4 et sw=4 tw=99: |
| * This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #ifndef js_WeakMapPtr_h |
| #define js_WeakMapPtr_h |
| |
| #include "jspubtd.h" |
| |
| #include "js/TypeDecls.h" |
| |
| namespace JS { |
| |
| // A wrapper around the internal C++ representation of SpiderMonkey WeakMaps, |
| // usable outside the engine. |
| // |
| // The supported template specializations are enumerated in WeakMapPtr.cpp. If |
| // you want to use this class for a different key/value combination, add it to |
| // the list and the compiler will generate the relevant machinery. |
| template <typename K, typename V> |
| class JS_PUBLIC_API(WeakMapPtr) |
| { |
| public: |
| WeakMapPtr() : ptr(nullptr) {} |
| bool init(JSContext* cx); |
| bool initialized() { return ptr != nullptr; } |
| void destroy(); |
| virtual ~WeakMapPtr() { MOZ_ASSERT(!initialized()); } |
| void trace(JSTracer* tracer); |
| |
| V lookup(const K& key); |
| bool put(JSContext* cx, const K& key, const V& value); |
| |
| private: |
| void* ptr; |
| |
| // WeakMapPtr is neither copyable nor assignable. |
| WeakMapPtr(const WeakMapPtr& wmp) = delete; |
| WeakMapPtr& operator=(const WeakMapPtr& wmp) = delete; |
| }; |
| |
| } /* namespace JS */ |
| |
| #endif /* js_WeakMapPtr_h */ |