Advertisement
Guest User

Untitled

a guest
May 31st, 2017
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. class RandomBytesRequest : public AsyncWrap {
  2.  public:
  3.   enum FreeMode { FREE_DATA, DONT_FREE_DATA };
  4.  
  5.   RandomBytesRequest(Environment* env,
  6.                      Local<Object> object,
  7.                      size_t size,
  8.                      char* data,
  9.                      FreeMode free_mode)
  10.       : AsyncWrap(env, object, AsyncWrap::PROVIDER_RANDOMBYTESREQUEST),
  11.         error_(0),
  12.         size_(size),
  13.         data_(data),
  14.         free_mode_(free_mode) {
  15.     Wrap(object, this);
  16.   }
  17.  
  18.   ~RandomBytesRequest() override {
  19.     ClearWrap(object());
  20.     persistent().Reset();
  21.   }
  22.  
  23.   uv_work_t* work_req() {
  24.     return &work_req_;
  25.   }
  26.  
  27.   inline size_t size() const {
  28.     return size_;
  29.   }
  30.  
  31.   inline char* data() const {
  32.     return data_;
  33.   }
  34.  
  35.   inline void set_data(char* data) {
  36.     data_ = data;
  37.   }
  38.  
  39.   inline void release() {
  40.     size_ = 0;
  41.     if (free_mode_ == FREE_DATA) {
  42.       free(data_);
  43.     }
  44.   }
  45.  
  46.   inline void return_memory(char** d, size_t* len) {
  47.     *d = data_;
  48.     data_ = nullptr;
  49.     *len = size_;
  50.     size_ = 0;
  51.   }
  52.  
  53.   inline unsigned long error() const {  // NOLINT(runtime/int)
  54.     return error_;
  55.   }
  56.  
  57.   inline void set_error(unsigned long err) {  // NOLINT(runtime/int)
  58.     error_ = err;
  59.   }
  60.  
  61.   size_t self_size() const override { return sizeof(*this); }
  62.  
  63.   uv_work_t work_req_;
  64.  
  65.  private:
  66.   unsigned long error_;  // NOLINT(runtime/int)
  67.   size_t size_;
  68.   char* data_;
  69.   const FreeMode free_mode_;
  70. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement