初始化提交

This commit is contained in:
王立帮
2024-07-20 22:09:06 +08:00
commit c247dd07a6
6876 changed files with 2743096 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2020
// MIT License
#pragma once
#include <ArduinoJson/Memory/MemoryPool.hpp>
namespace ARDUINOJSON_NAMESPACE {
class StringCopier {
public:
StringCopier(MemoryPool& pool) : _pool(&pool) {}
void startString() {
_pool->getFreeZone(&_ptr, &_capacity);
_size = 0;
}
const char* save() {
ARDUINOJSON_ASSERT(_ptr);
return _pool->saveStringFromFreeZone(_size);
}
void append(const char* s) {
while (*s) append(*s++);
}
void append(const char* s, size_t n) {
while (n-- > 0) append(*s++);
}
void append(char c) {
if (!_ptr)
return;
if (_size >= _capacity) {
_ptr = 0;
_pool->markAsOverflowed();
return;
}
_ptr[_size++] = c;
}
bool isValid() {
return _ptr != 0;
}
const char* c_str() {
return _ptr;
}
typedef storage_policies::store_by_copy storage_policy;
private:
MemoryPool* _pool;
char* _ptr;
size_t _size;
size_t _capacity;
};
} // namespace ARDUINOJSON_NAMESPACE

View File

@@ -0,0 +1,42 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2020
// MIT License
#pragma once
#include <ArduinoJson/Namespace.hpp>
#include <ArduinoJson/Strings/StoragePolicy.hpp>
namespace ARDUINOJSON_NAMESPACE {
class StringMover {
public:
StringMover(char* ptr) : _writePtr(ptr) {}
void startString() {
_startPtr = _writePtr;
}
const char* save() const {
return _startPtr;
}
void append(char c) {
*_writePtr++ = c;
}
bool isValid() const {
return true;
}
const char* c_str() const {
return _startPtr;
}
typedef storage_policies::store_by_address storage_policy;
private:
char* _writePtr;
char* _startPtr;
};
} // namespace ARDUINOJSON_NAMESPACE

View File

@@ -0,0 +1,23 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2020
// MIT License
#pragma once
#include <ArduinoJson/StringStorage/StringCopier.hpp>
#include <ArduinoJson/StringStorage/StringMover.hpp>
namespace ARDUINOJSON_NAMESPACE {
template <typename TInput>
StringCopier makeStringStorage(TInput&, MemoryPool& pool) {
return StringCopier(pool);
}
template <typename TChar>
StringMover makeStringStorage(
TChar* input, MemoryPool&,
typename enable_if<!is_const<TChar>::value>::type* = 0) {
return StringMover(reinterpret_cast<char*>(input));
}
} // namespace ARDUINOJSON_NAMESPACE