Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/UniquePtrExtensions.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
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
/* Useful extensions to UniquePtr. */
8
9
#ifndef mozilla_UniquePtrExtensions_h
10
#define mozilla_UniquePtrExtensions_h
11
12
#include "mozilla/fallible.h"
13
#include "mozilla/UniquePtr.h"
14
15
namespace mozilla {
16
17
/**
18
 * MakeUniqueFallible works exactly like MakeUnique, except that the memory
19
 * allocation performed is done fallibly, i.e. it can return nullptr.
20
 */
21
template<typename T, typename... Args>
22
typename detail::UniqueSelector<T>::SingleObject
23
MakeUniqueFallible(Args&&... aArgs)
24
{
25
  return UniquePtr<T>(new (fallible) T(std::forward<Args>(aArgs)...));
26
}
27
28
template<typename T>
29
typename detail::UniqueSelector<T>::UnknownBound
30
MakeUniqueFallible(decltype(sizeof(int)) aN)
31
0
{
32
0
  typedef typename RemoveExtent<T>::Type ArrayType;
33
0
  return UniquePtr<T>(new (fallible) ArrayType[aN]());
34
0
}
Unexecuted instantiation: mozilla::detail::UniqueSelector<char []>::UnknownBound mozilla::MakeUniqueFallible<char []>(unsigned long)
Unexecuted instantiation: mozilla::detail::UniqueSelector<unsigned char []>::UnknownBound mozilla::MakeUniqueFallible<unsigned char []>(unsigned long)
Unexecuted instantiation: mozilla::detail::UniqueSelector<char16_t []>::UnknownBound mozilla::MakeUniqueFallible<char16_t []>(unsigned long)
Unexecuted instantiation: mozilla::detail::UniqueSelector<nsFramesetSpec []>::UnknownBound mozilla::MakeUniqueFallible<nsFramesetSpec []>(unsigned long)
Unexecuted instantiation: mozilla::detail::UniqueSelector<float []>::UnknownBound mozilla::MakeUniqueFallible<float []>(unsigned long)
Unexecuted instantiation: mozilla::detail::UniqueSelector<unsigned int []>::UnknownBound mozilla::MakeUniqueFallible<unsigned int []>(unsigned long)
Unexecuted instantiation: mozilla::detail::UniqueSelector<txObject* []>::UnknownBound mozilla::MakeUniqueFallible<txObject* []>(unsigned long)
Unexecuted instantiation: mozilla::detail::UniqueSelector<unsigned short []>::UnknownBound mozilla::MakeUniqueFallible<unsigned short []>(unsigned long)
35
36
template<typename T, typename... Args>
37
typename detail::UniqueSelector<T>::KnownBound
38
MakeUniqueFallible(Args&&... aArgs) = delete;
39
40
namespace detail {
41
42
template<typename T>
43
struct FreePolicy
44
{
45
6
  void operator()(const void* ptr) {
46
6
    free(const_cast<void*>(ptr));
47
6
  }
mozilla::detail::FreePolicy<char>::operator()(void const*)
Line
Count
Source
45
6
  void operator()(const void* ptr) {
46
6
    free(const_cast<void*>(ptr));
47
6
  }
Unexecuted instantiation: mozilla::detail::FreePolicy<char const>::operator()(void const*)
Unexecuted instantiation: mozilla::detail::FreePolicy<char []>::operator()(void const*)
Unexecuted instantiation: mozilla::detail::FreePolicy<unsigned char>::operator()(void const*)
Unexecuted instantiation: mozilla::detail::FreePolicy<char16_t []>::operator()(void const*)
48
};
49
50
} // namespace detail
51
52
template<typename T>
53
using UniqueFreePtr = UniquePtr<T, detail::FreePolicy<T>>;
54
55
} // namespace mozilla
56
57
#endif // mozilla_UniquePtrExtensions_h