Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/js/WeakMapPtr.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
 * vim: set ts=8 sts=4 et sw=4 tw=99:
3
 * This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef js_WeakMapPtr_h
8
#define js_WeakMapPtr_h
9
10
#include "jspubtd.h"
11
12
#include "js/TypeDecls.h"
13
14
namespace JS {
15
16
// A wrapper around the internal C++ representation of SpiderMonkey WeakMaps,
17
// usable outside the engine.
18
//
19
// The supported template specializations are enumerated in gc/WeakMapPtr.cpp.
20
// If you want to use this class for a different key/value combination, add it
21
// to the list and the compiler will generate the relevant machinery.
22
template <typename K, typename V>
23
class JS_PUBLIC_API(WeakMapPtr)
24
{
25
  public:
26
6
    WeakMapPtr() : ptr(nullptr) {}
27
    bool init(JSContext* cx);
28
36
    bool initialized() { return ptr != nullptr; }
29
    void destroy();
30
0
    virtual ~WeakMapPtr() { MOZ_ASSERT(!initialized()); }
31
    void trace(JSTracer* tracer);
32
33
    V lookup(const K& key);
34
    bool put(JSContext* cx, const K& key, const V& value);
35
    V removeValue(const K& key);
36
37
  private:
38
    void* ptr;
39
40
    // WeakMapPtr is neither copyable nor assignable.
41
    WeakMapPtr(const WeakMapPtr& wmp) = delete;
42
    WeakMapPtr& operator=(const WeakMapPtr& wmp) = delete;
43
};
44
45
} /* namespace JS */
46
47
#endif  /* js_WeakMapPtr_h */