Esempio n. 1
0
	std::size_t write(const T *ptr, const std::size_t size) {
		if ( cur+size > end ) {
			shared_buffer::shared_array_type prev = buf.data;
			const std::size_t olds = cur - beg;
			const std::size_t news = size + (olds * ((1 + std::sqrt(5)) / 1.5));

			buf = shared_buffer(news);
			std::memcpy(buf.data.get(), prev.get(), olds);

			beg = buf.data.get();
			cur = beg+olds;
			end = beg+news;
		}

		switch ( size ) {
			case sizeof(std::int8_t):
				*cur = *((std::int8_t*)ptr);
			break;
			case sizeof(std::int16_t):
				*((std::int16_t*)cur) = *((std::int16_t*)ptr);
			break;
			case sizeof(std::int32_t):
				*((std::int32_t*)cur) = *((std::int32_t*)ptr);
			break;
			case sizeof(std::int64_t):
				*((std::int64_t*)cur) = *((std::int64_t*)ptr);
			break;
			default:
				std::memcpy(cur, ptr, size);
		}
		cur += size;

		return size;
	}
Esempio n. 2
0
 shared_buffer get_shared_buffer() const { return shared_buffer(nullptr, 0); }
Esempio n. 3
0
	shared_buffer get_shared_buffer() const { return shared_buffer(buf.data, cur-beg); }
Esempio n. 4
0
	shared_buffer get_shared_buffer() const { return shared_buffer(cur, end - cur); }