X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fcore%2Fbuffer.cpp;h=b6f2e44b9e55555bebcfa08b80bf1ffeadb4a3c5;hb=c356a20547afae97b412da36e0b0a7d51e879401;hp=15a37397bcb18bdf094b5e5a5cef1a7d31b38c31;hpb=6080120777fdf7b6e1184288eff9d205ca7ebf5f;p=libs%2Fgl.git diff --git a/source/core/buffer.cpp b/source/core/buffer.cpp index 15a37397..b6f2e44b 100644 --- a/source/core/buffer.cpp +++ b/source/core/buffer.cpp @@ -32,19 +32,72 @@ void Buffer::data(const void *d) void Buffer::sub_data(size_t off, size_t sz, const void *d) { - if(size==0) - throw invalid_operation("Buffer::sub_data"); - if(off>size || off+sz>size) - throw out_of_range("Buffer::sub_data"); - + check_sub_data(off, sz, "Buffer::sub_data"); BufferBackend::sub_data(off, sz, d); } +Buffer::AsyncTransfer Buffer::sub_data_async(size_t off, size_t sz) +{ + check_sub_data(off, sz, "Buffer::sub_data_async"); + return AsyncTransfer(*this, off, sz); +} + +void Buffer::check_sub_data(size_t off, size_t sz, const char *func) +{ + if(size==0) + throw invalid_operation(func); + if(off>get_total_size() || off%size+sz>size) + throw out_of_range(func); +} + void Buffer::require_size(size_t req_sz) const { if(size