1 #ifndef INCLUDED_BUFFER_H
2 #define INCLUDED_BUFFER_H
12 using cstring = const char *;
20 Reference(int m_size, byte *m_data)
21 : m_size(m_size), m_data(m_data) {}
27 const byte *data() const {
44 const byte *data() const {
55 class IBuffer : Self {
58 operator const IBuffer<details::Reference>() const {
59 return IBuffer<details::Reference>{this->size(), const_cast<byte *>(this->data())};
62 cstring c_str() const {
66 operator cstring() const {
70 std::size_t strlen() const {
71 return ::strlen(c_str());
78 // operator byte *() {
82 void terminate(long offset = -1) {
84 offset += this->size();
89 void copy(cstring str, unsigned int offset = 0, unsigned int limit = 0) {
91 limit = this->size() - offset;
93 strncpy(mut() + offset, str, limit);
96 __attribute__((format(printf, 2, 3)))
97 void sprintf(const char *format, ...) {
98 // todo: check for overflow
100 va_start(argptr, format);
101 vsprintf(this->data(), format, argptr);
107 using BufferVal = IBuffer<details::Value<sz>>;
109 using Buffer = IBuffer<details::Reference>;
112 BufferVal<sz> buffer() {
113 return BufferVal<sz>();