forked from bblanchon/ArduinoJson
Removed template parameter of CharPointerReader and StringMover
This commit is contained in:
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user