p2p/lib/dt_p2p/stingray_sdk/plugin_foundation/buffer.h

73 lines
2 KiB
C++

#pragma once
#include "stream.h"
//#include "array.h"
#include "allocator.h"
// sourced from engine's data_compiler.h
namespace stingray_plugin_foundation {
namespace buffer
{
//Buffer buffer(const Array<char> &resource, Allocator &allocator) {
// Buffer result;
// result.len = resource.size();
// result.p = (char *)allocator.allocate(result.len);
// memmove(result.p, resource.begin(), result.len);
// return result;
//}
//Buffer buffer(const Array<char> &header, const Array<char> &data, Allocator &allocator) {
// Buffer result;
// result.len = header.size() + data.size();
// XENSURE(result.len > 0);
// result.p = (char *)allocator.allocate(result.len);
// memcpy(result.p, header.begin(), header.size());
// memcpy(result.p + header.size(), data.begin(), data.size());
// return result;
//}
//Buffer buffer(const StringStream &os, Allocator &allocator) {
// Buffer result;
// result.p = (char *)allocator.allocate(os.size());
// result.len = os.size();
// memcpy(result.p, os.c_str(), os.size());
// return result;
//}
//Buffer buffer(MemoryOutputBuffer &ob, Allocator &allocator) {
// Buffer result;
// result.len = (unsigned)ob.position();
// result.p = (char *)allocator.allocate(result.len);
// ob.read(result.p);
// return result;
//}
//Buffer copy(Buffer b, Allocator &allocator)
//{
// Buffer result;
// result.len = b.len;
// result.p = (char *)allocator.allocate(result.len);
// memcpy(result.p, b.p, result.len);
// return result;
//}
//template <class T> Buffer serialize(T &t, Allocator &allocator) {
// MemoryOutputBuffer mob(allocator);
// OutputArchive oa = SharedPtr<OutputBuffer>(mob);
// oa & t;
// return buffer(mob, allocator);
//}
template <class T> Buffer pack(T &t, Allocator &allocator) {
Buffer result;
result.len = sizeof(T);
result.p = (char *)allocator.allocate(result.len);
char *p = result.p;
stream::pack(p, t);
return result;
}
} // namespace buffer
} // namespace stingray_plugin_foundation