2018-12-12 00:33:54 +00:00
|
|
|
#ifndef LLARP_BUFFER_HPP
|
|
|
|
#define LLARP_BUFFER_HPP
|
|
|
|
|
2019-01-10 19:41:51 +00:00
|
|
|
#include <util/buffer.h>
|
2018-12-12 00:33:54 +00:00
|
|
|
|
|
|
|
namespace llarp
|
|
|
|
{
|
|
|
|
template < typename T >
|
|
|
|
llarp_buffer_t
|
|
|
|
StackBuffer(T& stack)
|
|
|
|
{
|
|
|
|
llarp_buffer_t buff;
|
|
|
|
buff.base = &stack[0];
|
|
|
|
buff.cur = buff.base;
|
|
|
|
buff.sz = sizeof(stack);
|
|
|
|
return buff;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** initialize llarp_buffer_t from raw memory */
|
|
|
|
template < typename T >
|
|
|
|
llarp_buffer_t
|
|
|
|
InitBuffer(T buf, size_t sz)
|
|
|
|
{
|
|
|
|
byte_t* ptr = (byte_t*)buf;
|
|
|
|
llarp_buffer_t ret;
|
|
|
|
ret.cur = ptr;
|
|
|
|
ret.base = ptr;
|
|
|
|
ret.sz = sz;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** initialize llarp_buffer_t from container */
|
|
|
|
template < typename T >
|
|
|
|
llarp_buffer_t
|
|
|
|
Buffer(T& t)
|
|
|
|
{
|
2019-01-02 01:04:04 +00:00
|
|
|
// use data over the first element to "enforce" the container used has
|
|
|
|
// contiguous memory. (Note this isn't required by the standard, but a
|
|
|
|
// reasonable test on most standard library implementations).
|
2019-01-10 17:43:29 +00:00
|
|
|
llarp_buffer_t buff(t.data(), t.data(), t.size());
|
2018-12-12 00:33:54 +00:00
|
|
|
return buff;
|
|
|
|
}
|
|
|
|
|
|
|
|
template < typename T >
|
|
|
|
llarp_buffer_t
|
|
|
|
ConstBuffer(const T& t)
|
|
|
|
{
|
|
|
|
llarp_buffer_t buff;
|
|
|
|
buff.base = (byte_t*)&t[0];
|
|
|
|
buff.cur = buff.base;
|
|
|
|
buff.sz = t.size();
|
|
|
|
return buff;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace llarp
|
|
|
|
|
|
|
|
#endif
|