7#ifndef PXR_BASE_WORK_UTILS_H
8#define PXR_BASE_WORK_UTILS_H
13#include "pxr/base/work/api.h"
18PXR_NAMESPACE_OPEN_SCOPE
21bool Work_ShouldSynchronizeAsyncDestroyCalls();
24struct Work_AsyncMoveDestroyHelper {
25 void operator()()
const { }
32struct Work_AsyncSwapDestroyHelper {
33 Work_AsyncSwapDestroyHelper() =
default;
35 Work_AsyncSwapDestroyHelper(Work_AsyncSwapDestroyHelper
const&) =
delete;
36 Work_AsyncSwapDestroyHelper& operator=(
37 Work_AsyncSwapDestroyHelper
const&) =
delete;
39 Work_AsyncSwapDestroyHelper(Work_AsyncSwapDestroyHelper &&other)
46 Work_AsyncSwapDestroyHelper& operator=(
47 Work_AsyncSwapDestroyHelper &&other)
54 void operator()()
const { }
69 Work_AsyncSwapDestroyHelper<T> helper;
70 swap(helper.obj, obj);
71 if (!Work_ShouldSynchronizeAsyncDestroyCalls())
80 Work_AsyncMoveDestroyHelper<T> helper { std::move(obj) };
81 if (!Work_ShouldSynchronizeAsyncDestroyCalls())
85PXR_NAMESPACE_CLOSE_SCOPE
void WorkMoveDestroyAsync(T &obj)
Like WorkSwapDestroyAsync() but instead, move from obj, leaving it in a moved-from state instead of a...
void WorkSwapDestroyAsync(T &obj)
Swap obj with a default-constructed T instance, return and arrange for the swapped-out instance to be...
void WorkRunDetachedTask(Fn &&fn)
Invoke fn asynchronously, discard any errors it produces, and provide no way to wait for it to comple...