18 #ifndef viskores_cont_Token_h
19 #define viskores_cont_Token_h
25 #include <condition_variable>
28 #include <type_traits>
43 class VISKORES_CONT_EXPORT
Token final
46 mutable std::unique_ptr<InternalStruct>
Internals;
55 template <
typename ObjectType>
66 : Object(std::move(object))
108 template <
typename T>
111 std::unique_lock<std::mutex>& lock,
112 std::condition_variable* conditionVariablePointer)
114 this->Attach(std::unique_ptr<ObjectReference>(
116 referenceCountPointer,
118 conditionVariablePointer);
122 template <
typename T>
125 std::mutex* mutexPointer,
126 std::condition_variable* conditionVariablePointer)
128 std::unique_lock<std::mutex> lock(*mutexPointer, std::defer_lock);
129 this->Attach(std::forward<T>(
object), referenceCountPoiner, lock, conditionVariablePointer);
144 : InternalsPointer(internalsPointer)
173 std::unique_ptr<viskores::cont::Token::ObjectReference>&& objectReference,
175 std::unique_lock<std::mutex>& lock,
176 std::condition_variable* conditionVariablePointer);
178 VISKORES_CONT bool IsAttached(std::unique_lock<std::mutex>& lock,
206 #endif //viskores_cont_Token_h