12using Ptr = TTG_IMPL_NS::Ptr<T>;
14template<
typename T,
typename... Args>
16 return TTG_IMPL_NS::make_ptr(std::forward<Args>(args)...);
21 return TTG_IMPL_NS::get_ptr(std::forward<T>(obj));
40 template<
typename... Ts>
41 struct get_ptr_tpl_t {
43 std::tuple<ttg::Ptr<Ts>...> m_ptr_tuple;
44 bool m_is_ready =
false;
46 get_ptr_tpl_t(
bool is_ready, std::tuple<
ttg::ptr<Ts>...>&& ptrs)
47 : m_ptr_tuple(
std::forward<
std::tuple<
ttg::
Ptr<Ts>...>>(ptrs))
48 , m_is_ready(is_ready)
51 bool await_ready() const noexcept {
55 constexpr void await_suspend( std::coroutine_handle<> )
const noexcept {
59 auto await_resume() const noexcept {
60 return std::move(m_ptr_tuple);
70 bool m_is_ready =
false;
74 , m_is_ready(is_ready)
77 bool await_ready() const noexcept {
81 constexpr void await_suspend( std::coroutine_handle<> )
const noexcept {
85 auto await_resume() const noexcept {
86 return std::move(m_ptr);
102 template<
typename Arg,
typename... Args>
103 auto get_ptr(Arg&& arg, Args&&... args) {
105 using tpl_type = std::tuple<ttg::Ptr<std::decay_t<Arg>, std::decay<Args>...>>;
106 using result_type = std::pair<bool, tpl_type>;
107 result_type p = TTG_IMPL_NS::get_ptr(std::forward<Arg>(arg), std::forward<Args>(args)...);
108 if constexpr (
sizeof...(Args) > 0) {
109 return detail::get_ptr_tpl_t<std::decay_t<Arg>, std::decay_t<Args>...>(p.first, std::move(p.second));
110 }
else if constexpr (
sizeof...(Args) == 0) {
111 return detail::get_ptr_t<std::decay_t<Arg>>(p.first, std::move(std::get<0>(p.second)));
Ptr< std::decay_t< T > > get_ptr(T &&obj)
Ptr< T > make_ptr(Args &&... args)
top-level TTG namespace contains runtime-neutral functionality
TTG_IMPL_NS::Ptr< T > Ptr