HDK
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
utils.h
Go to the documentation of this file.
1
//
2
// Copyright 2016 Pixar
3
//
4
// Licensed under the terms set forth in the LICENSE.txt file available at
5
// https://openusd.org/license.
6
//
7
#ifndef PXR_BASE_WORK_UTILS_H
8
#define PXR_BASE_WORK_UTILS_H
9
10
///\file work/utils.h
11
12
#include "
pxr/pxr.h
"
13
#include "
pxr/base/work/api.h
"
14
#include "
pxr/base/work/detachedTask.h
"
15
16
#include <utility>
17
18
PXR_NAMESPACE_OPEN_SCOPE
19
20
WORK_API
21
bool
Work_ShouldSynchronizeAsyncDestroyCalls
();
22
23
template
<
class
T>
24
struct
Work_AsyncMoveDestroyHelper
{
25
void
operator()
()
const
{
/* do nothing */
}
26
T
obj
;
27
};
28
29
// Helper for swap-based asynchronous destruction that synthesizes move
30
// construction and assignment using swap.
31
template
<
class
T>
32
struct
Work_AsyncSwapDestroyHelper
{
33
Work_AsyncSwapDestroyHelper
() =
default
;
34
35
Work_AsyncSwapDestroyHelper
(
Work_AsyncSwapDestroyHelper
const
&) =
delete
;
36
Work_AsyncSwapDestroyHelper
&
operator=
(
37
Work_AsyncSwapDestroyHelper
const
&) =
delete
;
38
39
Work_AsyncSwapDestroyHelper
(
Work_AsyncSwapDestroyHelper
&&other)
40
:
obj
()
41
{
42
using
std::swap
;
43
swap
(
obj
, other.obj);
44
}
45
46
Work_AsyncSwapDestroyHelper
&
operator=
(
47
Work_AsyncSwapDestroyHelper
&&other)
48
{
49
using
std::swap
;
50
swap
(
obj
, other.obj);
51
return
*
this
;
52
}
53
54
void
operator()
()
const
{
/* do nothing */
}
55
T
obj
;
56
};
57
58
/// Swap \p obj with a default-constructed T instance, return and arrange
59
/// for the swapped-out instance to be destroyed asynchronously. This means
60
/// that any code that obj's destructor might invoke must be safe to run both
61
/// concurrently with other code and at any point in the future. This might not
62
/// be true, for example, if obj's destructor might try to update some other
63
/// data structure that could be destroyed by the time obj's destruction occurs.
64
/// Be careful.
65
template
<
class
T>
66
void
WorkSwapDestroyAsync
(T &obj)
67
{
68
using
std::swap
;
69
Work_AsyncSwapDestroyHelper<T>
helper;
70
swap
(helper.
obj
, obj);
71
if
(!
Work_ShouldSynchronizeAsyncDestroyCalls
())
72
WorkRunDetachedTask
(std::move(helper));
73
}
74
75
/// Like WorkSwapDestroyAsync() but instead, move from \p obj, leaving it
76
/// in a moved-from state instead of a default constructed state.
77
template
<
class
T>
78
void
WorkMoveDestroyAsync
(T &obj)
79
{
80
Work_AsyncMoveDestroyHelper<T>
helper { std::move(obj) };
81
if
(!
Work_ShouldSynchronizeAsyncDestroyCalls
())
82
WorkRunDetachedTask
(std::move(helper));
83
}
84
85
PXR_NAMESPACE_CLOSE_SCOPE
86
87
#endif // PXR_BASE_WORK_UTILS_H
ArAssetInfo::swap
void swap(ArAssetInfo &lhs, ArAssetInfo &rhs)
Definition:
assetInfo.h:57
Work_AsyncSwapDestroyHelper::operator=
Work_AsyncSwapDestroyHelper & operator=(Work_AsyncSwapDestroyHelper const &)=delete
Work_AsyncSwapDestroyHelper::operator()
void operator()() const
Definition:
utils.h:54
Work_AsyncMoveDestroyHelper
Definition:
utils.h:24
std::swap
void swap(UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &a, UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &b)
Definition:
UT_ArraySet.h:1699
Work_AsyncMoveDestroyHelper::operator()
void operator()() const
Definition:
utils.h:25
Work_AsyncSwapDestroyHelper
Definition:
utils.h:32
swap
void swap(T &lhs, T &rhs)
Definition:
pugixml.cpp:7440
WORK_API
#define WORK_API
Definition:
api.h:23
Work_AsyncSwapDestroyHelper::operator=
Work_AsyncSwapDestroyHelper & operator=(Work_AsyncSwapDestroyHelper &&other)
Definition:
utils.h:46
Work_ShouldSynchronizeAsyncDestroyCalls
PXR_NAMESPACE_OPEN_SCOPE WORK_API bool Work_ShouldSynchronizeAsyncDestroyCalls()
WorkRunDetachedTask
void WorkRunDetachedTask(Fn &&fn)
Definition:
detachedTask.h:45
api.h
pxr.h
Work_AsyncSwapDestroyHelper::Work_AsyncSwapDestroyHelper
Work_AsyncSwapDestroyHelper(Work_AsyncSwapDestroyHelper &&other)
Definition:
utils.h:39
Work_AsyncSwapDestroyHelper::obj
T obj
Definition:
utils.h:55
OBJ_MatchTransform::T
detachedTask.h
Work_AsyncSwapDestroyHelper::Work_AsyncSwapDestroyHelper
Work_AsyncSwapDestroyHelper()=default
PXR_NAMESPACE_OPEN_SCOPE
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition:
path.h:1425
PXR_NAMESPACE_CLOSE_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition:
pxr.h:74
WorkSwapDestroyAsync
void WorkSwapDestroyAsync(T &obj)
Definition:
utils.h:66
WorkMoveDestroyAsync
void WorkMoveDestroyAsync(T &obj)
Definition:
utils.h:78
Work_AsyncMoveDestroyHelper::obj
T obj
Definition:
utils.h:26
pxr
base
work
utils.h
Generated on Wed Aug 27 2025 03:07:15 for HDK by
1.8.6