This is xnu-11215.1.10. See this file in:
#ifndef TESTS_INTRUSIVE_SHARED_PTR_TEST_POLICY_H
#define TESTS_INTRUSIVE_SHARED_PTR_TEST_POLICY_H
#include <libkern/c++/intrusive_shared_ptr.h>
#include <darwintest_utils.h>
struct test_policy {
static inline int retain_count = 0;
template <typename T>
static void
retain(T&)
{
++retain_count;
}
template <typename T>
static void
release(T&)
{
--retain_count;
}
};
struct tracking_policy {
static inline int retains = 0;
static inline int releases = 0;
static inline int refcount = 0;
static inline bool hit_zero = false;
static void
reset()
{
retains = 0;
releases = 0;
refcount = 0;
hit_zero = false;
}
template <typename T>
static void
retain(T&)
{
++retains;
++refcount;
}
template <typename T>
static void
release(T&)
{
++releases;
--refcount;
if (refcount == 0) {
hit_zero = true;
}
}
};
template <int>
struct dummy_policy {
template <typename T>
static void
retain(T&)
{
}
template <typename T>
static void
release(T&)
{
}
};
template <typename T>
using tracked_shared_ptr = libkern::intrusive_shared_ptr<T, tracking_policy>;
template <typename T>
using test_shared_ptr = libkern::intrusive_shared_ptr<T, test_policy>;
#define CHECK(...) T_ASSERT_TRUE((__VA_ARGS__), # __VA_ARGS__)
#endif // !TESTS_INTRUSIVE_SHARED_PTR_TEST_POLICY_H