/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: set ts=8 sts=2 et sw=2 tw=80: * 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_UniquePtr_h #define js_UniquePtr_h #include "mozilla/UniquePtr.h" #include "js/Utility.h" namespace js { // Replacement for mozilla::UniquePtr that defaults to JS::DeletePolicy. template > using UniquePtr = mozilla::UniquePtr; namespace detail { template struct UniqueSelector { typedef UniquePtr SingleObject; }; template struct UniqueSelector { typedef UniquePtr UnknownBound; }; template struct UniqueSelector { typedef UniquePtr KnownBound; }; } // namespace detail // Replacement for mozilla::MakeUnique that correctly calls js_new and produces // a js::UniquePtr. template typename detail::UniqueSelector::SingleObject MakeUnique(Args&&... aArgs) { return UniquePtr(js_new(std::forward(aArgs)...)); } template typename detail::UniqueSelector::UnknownBound MakeUnique( decltype(sizeof(int)) aN) = delete; template typename detail::UniqueSelector::KnownBound MakeUnique(Args&&... aArgs) = delete; } // namespace js #endif /* js_UniquePtr_h */