/** * @note des first will be reset to ref. */ static void move(buffer& des, buffer& src) { des.reset(); if (src.is_ref()) { des.data_ = src.data_; des.size_ = src.size_; } else if (src.is_small()) { des.capacity_ = RESP_SMALL_BUFFER_SIZE; des.data_ = des.small_; des.size_ = src.size_; std::memcpy(des.data_, src.data_, des.size_); } else { /// large des.capacity_ = src.capacity_; des.data_ = src.data_; des.size_ = src.size_; } /// clear src src.capacity_ = 0; src.data_ = 0; src.size_ = 0; }