mirror of
https://github.com/eledio-devices/thirdparty-ArduinoJson.git
synced 2025-11-01 00:38:27 +01:00
57 lines
1.2 KiB
C++
57 lines
1.2 KiB
C++
// ArduinoJson - https://arduinojson.org
|
|
// Copyright © 2014-2023, Benoit BLANCHON
|
|
// MIT License
|
|
|
|
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
|
|
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
|
|
|
|
template <>
|
|
struct Reader<const __FlashStringHelper*, void> {
|
|
const char* _ptr;
|
|
|
|
public:
|
|
explicit Reader(const __FlashStringHelper* ptr)
|
|
: _ptr(reinterpret_cast<const char*>(ptr)) {}
|
|
|
|
int read() {
|
|
return pgm_read_byte(_ptr++);
|
|
}
|
|
|
|
size_t readBytes(char* buffer, size_t length) {
|
|
memcpy_P(buffer, _ptr, length);
|
|
_ptr += length;
|
|
return length;
|
|
}
|
|
};
|
|
|
|
template <>
|
|
struct BoundedReader<const __FlashStringHelper*, void> {
|
|
const char* _ptr;
|
|
const char* _end;
|
|
|
|
public:
|
|
explicit BoundedReader(const __FlashStringHelper* ptr, size_t size)
|
|
: _ptr(reinterpret_cast<const char*>(ptr)), _end(_ptr + size) {}
|
|
|
|
int read() {
|
|
if (_ptr < _end)
|
|
return pgm_read_byte(_ptr++);
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
size_t readBytes(char* buffer, size_t length) {
|
|
size_t available = static_cast<size_t>(_end - _ptr);
|
|
if (available < length)
|
|
length = available;
|
|
memcpy_P(buffer, _ptr, length);
|
|
_ptr += length;
|
|
return length;
|
|
}
|
|
};
|
|
|
|
ARDUINOJSON_END_PRIVATE_NAMESPACE
|