mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 06:32:19 +03:00
reverting version
This commit is contained in:
72
include/Module/CharBuffer.h
Normal file
72
include/Module/CharBuffer.h
Normal file
@@ -0,0 +1,72 @@
|
||||
#pragma once
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class CharBuffer : Print {
|
||||
public:
|
||||
CharBuffer(size_t size) : _capacity(size < 2 ? 2 : size), _write(0), _read(0) {
|
||||
_pool = new char[_capacity + 1];
|
||||
memset(_pool, 0, _capacity + 1);
|
||||
}
|
||||
|
||||
CharBuffer(const CharBuffer &src) {
|
||||
_capacity = src._capacity;
|
||||
_write = src._write;
|
||||
memcpy(_pool, src._pool, src._write);
|
||||
}
|
||||
|
||||
CharBuffer(const char *str) : CharBuffer(strlen(str) + 1) {
|
||||
write((const uint8_t *)str, strlen(str));
|
||||
}
|
||||
|
||||
~CharBuffer() {
|
||||
delete _pool;
|
||||
}
|
||||
|
||||
void clear() {
|
||||
memset(_pool, 0, _capacity);
|
||||
_write = 0;
|
||||
_read = 0;
|
||||
}
|
||||
|
||||
size_t size() const { return _capacity; }
|
||||
|
||||
size_t free() const { return _capacity - _write - 2; }
|
||||
|
||||
size_t available() const { return _write; }
|
||||
|
||||
const char *c_str() {
|
||||
if (_pool[_write] != '\x00')
|
||||
_pool[_write] = '\x00';
|
||||
return _pool;
|
||||
}
|
||||
|
||||
size_t write(char ch) {
|
||||
return write((uint8_t)ch);
|
||||
};
|
||||
|
||||
size_t write(const uint8_t ch) {
|
||||
size_t n = 0;
|
||||
if (_write < (_capacity - 2)) {
|
||||
_pool[_write++] = ch;
|
||||
n = 1;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
size_t write(const uint8_t *ptr, const size_t size) {
|
||||
size_t n = 0;
|
||||
while (n < size) {
|
||||
uint8_t ch = ptr[n++];
|
||||
if (!write(ch))
|
||||
break;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
protected:
|
||||
char *_pool;
|
||||
size_t _capacity;
|
||||
size_t _write;
|
||||
size_t _read;
|
||||
};
|
||||
Reference in New Issue
Block a user