Commit fdeea6b7 authored by knowledge4igor's avatar knowledge4igor

First step of server buffer refactoring

parent 2fdbe570
......@@ -121,33 +121,17 @@ private:
template<typename CharT>
size_t ArrayStreamBuf<CharT>::maxSize = Const::DefaultMaxPayload;
struct Buffer {
struct Buffer
{
Buffer();
Buffer(std::shared_ptr<char> _data, int _length, bool _isDetached = false);
Buffer(const char * _data, int _length, bool _isDetached = false);
Buffer() : data(nullptr), length(0), isDetached(false) {}
Buffer(std::shared_ptr<char> _data, int _length, bool _isDetached = false) : data(_data), length(_length), isDetached(_isDetached) {}
Buffer(const char * _data, int _length, bool _isDetached = false) : data(nullptr), length(_length), isDetached(_isDetached) {
data = std::shared_ptr<char>(new char[_length+1](), std::default_delete<char[]>());
std::copy(_data, _data + _length + 1, data.get());
}
Buffer detach(int fromIndex){
if (!data) Buffer();
if (length < fromIndex)
throw std::range_error("Trying to detach buffer from an index bigger than lengthght.");
auto newDatalength = length - fromIndex;
auto newData = std::shared_ptr<char>(new char[newDatalength + 1](), std::default_delete<char[]>());
std::copy(data.get() + fromIndex, data.get() + length, newData.get());
return Buffer(newData, newDatalength, true);
}
std::shared_ptr<char> data;
int length;
int isDetached;
Buffer detach(size_t fromIndex);
std::shared_ptr<char> data;
size_t length;
int isDetached;
};
struct FileBuffer {
......
......@@ -16,6 +16,41 @@
namespace Pistache {
Buffer::Buffer()
: data(nullptr)
, length(0)
, isDetached(false)
{ }
Buffer::Buffer(std::shared_ptr<char> _data, int _length, bool _isDetached)
: data(_data)
, length(_length)
, isDetached(_isDetached)
{ }
Buffer::Buffer(const char * _data, int _length, bool _isDetached)
: data(nullptr)
, length(_length)
, isDetached(_isDetached)
{
data = std::shared_ptr<char>(new char[_length+1](), std::default_delete<char[]>());
std::copy(_data, _data + _length + 1, data.get());
}
Buffer Buffer::detach(size_t fromIndex)
{
if (!data)
return Buffer();
if (length < fromIndex)
throw std::range_error("Trying to detach buffer from an index bigger than lengthght.");
auto newDatalength = length - fromIndex;
auto newData = std::shared_ptr<char>(new char[newDatalength + 1](), std::default_delete<char[]>());
std::copy(data.get() + fromIndex, data.get() + length, newData.get());
return Buffer(newData, newDatalength, true);
}
FileBuffer::FileBuffer(const std::string& fileName)
: fileName_(fileName)
......
......@@ -28,6 +28,7 @@ pistache_test(streaming_test)
pistache_test(rest_server_test)
pistache_test(string_view_test)
pistache_test(mailbox_test)
pistache_test(stream_test)
if (PISTACHE_SSL)
......
......@@ -46,7 +46,7 @@ void dumpData(const Rest::Request&req, Http::ResponseWriter response) {
stream.ends();
}
TEST(stream, from_description)
TEST(streaming, from_description)
{
Address addr(Ipv4::any(), Port(0));
const size_t threads = 20;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment