MCPcopy Create free account
hub / github.com/nodejs/nan / AsyncProgressWorkerBase

Class AsyncProgressWorkerBase

nan.h:2218–2263  ·  view source on GitHub ↗

abstract */

Source from the content-addressed store, hash-verified

2216template<class T>
2217/* abstract */
2218class AsyncProgressWorkerBase : public AsyncBareProgressWorker<T> {
2219 public:
2220 explicit AsyncProgressWorkerBase(
2221 Callback *callback_,
2222 const char* resource_name = "nan:AsyncProgressWorkerBase")
2223 : AsyncBareProgressWorker<T>(callback_, resource_name), asyncdata_(NULL),
2224 asyncsize_(0) {
2225 }
2226
2227 virtual ~AsyncProgressWorkerBase() {
2228 delete[] asyncdata_;
2229 }
2230
2231 void WorkProgress() {
2232 uv_mutex_lock(&this->async_lock);
2233 T *data = asyncdata_;
2234 size_t size = asyncsize_;
2235 asyncdata_ = NULL;
2236 asyncsize_ = 0;
2237 uv_mutex_unlock(&this->async_lock);
2238
2239 // Don't send progress events after we've already completed.
2240 if (this->callback) {
2241 this->HandleProgressCallback(data, size);
2242 }
2243 delete[] data;
2244 }
2245
2246 private:
2247 void SendProgress_(const T *data, size_t count) {
2248 T *new_data = new T[count];
2249 std::copy(data, data + count, new_data);
2250
2251 uv_mutex_lock(&this->async_lock);
2252 T *old_data = asyncdata_;
2253 asyncdata_ = new_data;
2254 asyncsize_ = count;
2255 uv_async_send(&this->async);
2256 uv_mutex_unlock(&this->async_lock);
2257
2258 delete[] old_data;
2259 }
2260
2261 T *asyncdata_;
2262 size_t asyncsize_;
2263};
2264
2265// This ensures compatibility to the previous un-templated AsyncProgressWorker
2266// class definition.

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected