| 99 | |
| 100 | private: |
| 101 | class TokenData { |
| 102 | public: |
| 103 | static uv_async_t* NewAsyncToken() { |
| 104 | uv_async_t* asyncHandle = new uv_async_t; |
| 105 | uv_async_init(uv_default_loop(), asyncHandle, AsyncCb); |
| 106 | SetHandleData(asyncHandle->data); |
| 107 | |
| 108 | return asyncHandle; |
| 109 | } |
| 110 | |
| 111 | static uv_async_t* NewAsyncToken(Handle<Function> callback, |
| 112 | Handle<Value> receiver) { |
| 113 | uv_async_t* asyncHandle = NewAsyncToken(); |
| 114 | SetHandleCallbackData(asyncHandle->data, callback, receiver); |
| 115 | |
| 116 | return asyncHandle; |
| 117 | } |
| 118 | |
| 119 | static uv_idle_t* NewIdleToken() { |
| 120 | uv_idle_t* idleHandle = new uv_idle_t; |
| 121 | uv_idle_init(uv_default_loop(), idleHandle); |
| 122 | |
| 123 | SetHandleData(idleHandle->data); |
| 124 | return idleHandle; |
| 125 | } |
| 126 | |
| 127 | static uv_idle_t* NewIdleToken(Handle<Function> callback, |
| 128 | Handle<Value> receiver) { |
| 129 | uv_idle_t* idleHandle = NewIdleToken(); |
| 130 | SetHandleCallbackData(idleHandle->data, callback, receiver); |
| 131 | |
| 132 | return idleHandle; |
| 133 | } |
| 134 | |
| 135 | virtual ~TokenData() { callbackData.Reset(); } |
| 136 | |
| 137 | private: |
| 138 | static void SetHandleData(void*& handleData) { |
| 139 | handleData = new TokenData(); |
| 140 | } |
| 141 | |
| 142 | static void SetHandleCallbackData(void* handleData, |
| 143 | Handle<Function> callback, |
| 144 | Handle<Value> receiver) { |
| 145 | TokenData* Token = static_cast<TokenData*>(handleData); |
| 146 | Token->callbackData.Reset(CreateCallbackData(callback, receiver)); |
| 147 | } |
| 148 | |
| 149 | TokenData() {} |
| 150 | |
| 151 | Persistent<Object> callbackData; |
| 152 | std::function<void()> func; |
| 153 | |
| 154 | friend Async; |
| 155 | }; |
| 156 | |
| 157 | public: |
| 158 | template <typename TInput, typename TResult> |
nothing calls this directly
no outgoing calls
no test coverage detected