Changeset View
Changeset View
Standalone View
Standalone View
libraries/source/spidermonkey/include-win32-debug/js/SweepingAPI.h
- This file was added.
/* -*- 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_SweepingAPI_h | |||||
#define js_SweepingAPI_h | |||||
#include "js/HeapAPI.h" | |||||
namespace js { | |||||
template <typename T> | |||||
class WeakCacheBase {}; | |||||
} // namespace js | |||||
namespace JS { | |||||
template <typename T> class WeakCache; | |||||
namespace shadow { | |||||
JS_PUBLIC_API(void) | |||||
RegisterWeakCache(JS::Zone* zone, JS::WeakCache<void*>* cachep); | |||||
} // namespace shadow | |||||
// A WeakCache stores the given Sweepable container and links itself into a | |||||
// list of such caches that are swept during each GC. | |||||
template <typename T> | |||||
class WeakCache : public js::WeakCacheBase<T>, | |||||
private mozilla::LinkedListElement<WeakCache<T>> | |||||
{ | |||||
friend class mozilla::LinkedListElement<WeakCache<T>>; | |||||
friend class mozilla::LinkedList<WeakCache<T>>; | |||||
WeakCache() = delete; | |||||
WeakCache(const WeakCache&) = delete; | |||||
using SweepFn = void (*)(T*); | |||||
SweepFn sweeper; | |||||
T cache; | |||||
public: | |||||
using Type = T; | |||||
template <typename U> | |||||
WeakCache(Zone* zone, U&& initial) | |||||
: cache(mozilla::Forward<U>(initial)) | |||||
{ | |||||
sweeper = GCPolicy<T>::sweep; | |||||
shadow::RegisterWeakCache(zone, reinterpret_cast<WeakCache<void*>*>(this)); | |||||
} | |||||
WeakCache(WeakCache&& other) | |||||
: sweeper(other.sweeper), | |||||
cache(mozilla::Move(other.cache)) | |||||
{ | |||||
} | |||||
const T& get() const { return cache; } | |||||
T& get() { return cache; } | |||||
void sweep() { sweeper(&cache); } | |||||
}; | |||||
} // namespace JS | |||||
#endif // js_SweepingAPI_h |
Wildfire Games · Phabricator