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

View File

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

View File

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