Removed template parameter of CharPointerReader and StringMover

This commit is contained in:
Benoit Blanchon
2018-11-16 16:24:36 +01:00
parent 399ccec645
commit 637f7a5bfa
3 changed files with 22 additions and 26 deletions

View File

@ -6,33 +6,30 @@
namespace ARDUINOJSON_NAMESPACE { namespace ARDUINOJSON_NAMESPACE {
template <typename TChar>
class UnsafeCharPointerReader { class UnsafeCharPointerReader {
const TChar* _ptr; const char* _ptr;
public: public:
explicit UnsafeCharPointerReader(const TChar* ptr) explicit UnsafeCharPointerReader(const char* ptr)
: _ptr(ptr ? ptr : reinterpret_cast<const TChar*>("")) {} : _ptr(ptr ? ptr : reinterpret_cast<const char*>("")) {}
char read() { char read() {
return static_cast<char>(*_ptr++); return static_cast<char>(*_ptr++);
} }
bool ended() const { bool ended() const {
// we cannot know // we cannot know, that's why it's unsafe
return false; return false;
} }
}; };
template <typename TChar>
class SafeCharPointerReader { class SafeCharPointerReader {
const TChar* _ptr; const char* _ptr;
const TChar* _end; const char* _end;
public: public:
explicit SafeCharPointerReader(const TChar* ptr, size_t len) explicit SafeCharPointerReader(const char* ptr, size_t len)
: _ptr(ptr ? ptr : reinterpret_cast<const TChar*>("")), : _ptr(ptr ? ptr : reinterpret_cast<const char*>("")), _end(_ptr + len) {}
_end(_ptr + len) {}
char read() { char read() {
return static_cast<char>(*_ptr++); return static_cast<char>(*_ptr++);
@ -44,18 +41,18 @@ class SafeCharPointerReader {
}; };
template <typename TChar> template <typename TChar>
inline UnsafeCharPointerReader<TChar> makeReader(TChar* input) { inline UnsafeCharPointerReader makeReader(TChar* input) {
return UnsafeCharPointerReader<TChar>(input); return UnsafeCharPointerReader(reinterpret_cast<const char*>(input));
} }
template <typename TChar> template <typename TChar>
inline SafeCharPointerReader<TChar> makeReader(TChar* input, size_t n) { inline SafeCharPointerReader makeReader(TChar* input, size_t n) {
return SafeCharPointerReader<TChar>(input, n); return SafeCharPointerReader(reinterpret_cast<const char*>(input), n);
} }
#if ARDUINOJSON_ENABLE_ARDUINO_STRING #if ARDUINOJSON_ENABLE_ARDUINO_STRING
inline SafeCharPointerReader<char> makeReader(const String& input) { inline SafeCharPointerReader makeReader(const String& input) {
return SafeCharPointerReader<char>(input.c_str(), input.length()); return SafeCharPointerReader(input.c_str(), input.length());
} }
#endif #endif

View File

@ -6,17 +6,16 @@
namespace ARDUINOJSON_NAMESPACE { namespace ARDUINOJSON_NAMESPACE {
template <typename TChar>
class StringMover { class StringMover {
public: public:
class StringBuilder { class StringBuilder {
public: public:
typedef ZeroTerminatedRamStringConst StringType; typedef ZeroTerminatedRamStringConst StringType;
StringBuilder(TChar** ptr) : _writePtr(ptr), _startPtr(*ptr) {} StringBuilder(char** ptr) : _writePtr(ptr), _startPtr(*ptr) {}
void append(char c) { void append(char c) {
*(*_writePtr)++ = TChar(c); *(*_writePtr)++ = char(c);
} }
StringType complete() const { StringType complete() const {
@ -25,17 +24,17 @@ class StringMover {
} }
private: private:
TChar** _writePtr; char** _writePtr;
TChar* _startPtr; char* _startPtr;
}; };
StringMover(TChar* ptr) : _ptr(ptr) {} StringMover(char* ptr) : _ptr(ptr) {}
StringBuilder startString() { StringBuilder startString() {
return StringBuilder(&_ptr); return StringBuilder(&_ptr);
} }
private: private:
TChar* _ptr; char* _ptr;
}; };
} // namespace ARDUINOJSON_NAMESPACE } // namespace ARDUINOJSON_NAMESPACE

View File

@ -21,10 +21,10 @@ struct StringStorage {
template <typename TChar> template <typename TChar>
struct StringStorage<TChar*, struct StringStorage<TChar*,
typename enable_if<!is_const<TChar>::value>::type> { typename enable_if<!is_const<TChar>::value>::type> {
typedef StringMover<TChar> type; typedef StringMover type;
static type create(MemoryPool&, TChar* input) { static type create(MemoryPool&, TChar* input) {
return type(input); return type(reinterpret_cast<char*>(input));
} }
}; };