Minh Nguyen / ArduinoJson
Committer:
khaiminhvn
Date:
Fri Mar 19 19:30:50 2021 +0000
Revision:
0:18ba3960b5dd
removed extras

Who changed what in which revision?

UserRevisionLine numberNew contents of line
khaiminhvn 0:18ba3960b5dd 1 // ArduinoJson - arduinojson.org
khaiminhvn 0:18ba3960b5dd 2 // Copyright Benoit Blanchon 2014-2021
khaiminhvn 0:18ba3960b5dd 3 // MIT License
khaiminhvn 0:18ba3960b5dd 4
khaiminhvn 0:18ba3960b5dd 5 #pragma once
khaiminhvn 0:18ba3960b5dd 6
khaiminhvn 0:18ba3960b5dd 7 #include <ArduinoJson/Polyfills/assert.hpp>
khaiminhvn 0:18ba3960b5dd 8
khaiminhvn 0:18ba3960b5dd 9 namespace ARDUINOJSON_NAMESPACE {
khaiminhvn 0:18ba3960b5dd 10
khaiminhvn 0:18ba3960b5dd 11 template <typename TReader>
khaiminhvn 0:18ba3960b5dd 12 class Latch {
khaiminhvn 0:18ba3960b5dd 13 public:
khaiminhvn 0:18ba3960b5dd 14 Latch(TReader reader) : _reader(reader), _loaded(false) {
khaiminhvn 0:18ba3960b5dd 15 #if ARDUINOJSON_DEBUG
khaiminhvn 0:18ba3960b5dd 16 _ended = false;
khaiminhvn 0:18ba3960b5dd 17 #endif
khaiminhvn 0:18ba3960b5dd 18 }
khaiminhvn 0:18ba3960b5dd 19
khaiminhvn 0:18ba3960b5dd 20 void clear() {
khaiminhvn 0:18ba3960b5dd 21 _loaded = false;
khaiminhvn 0:18ba3960b5dd 22 }
khaiminhvn 0:18ba3960b5dd 23
khaiminhvn 0:18ba3960b5dd 24 int last() const {
khaiminhvn 0:18ba3960b5dd 25 return _current;
khaiminhvn 0:18ba3960b5dd 26 }
khaiminhvn 0:18ba3960b5dd 27
khaiminhvn 0:18ba3960b5dd 28 FORCE_INLINE char current() {
khaiminhvn 0:18ba3960b5dd 29 if (!_loaded) {
khaiminhvn 0:18ba3960b5dd 30 load();
khaiminhvn 0:18ba3960b5dd 31 }
khaiminhvn 0:18ba3960b5dd 32 return _current;
khaiminhvn 0:18ba3960b5dd 33 }
khaiminhvn 0:18ba3960b5dd 34
khaiminhvn 0:18ba3960b5dd 35 private:
khaiminhvn 0:18ba3960b5dd 36 void load() {
khaiminhvn 0:18ba3960b5dd 37 ARDUINOJSON_ASSERT(!_ended);
khaiminhvn 0:18ba3960b5dd 38 int c = _reader.read();
khaiminhvn 0:18ba3960b5dd 39 #if ARDUINOJSON_DEBUG
khaiminhvn 0:18ba3960b5dd 40 if (c <= 0)
khaiminhvn 0:18ba3960b5dd 41 _ended = true;
khaiminhvn 0:18ba3960b5dd 42 #endif
khaiminhvn 0:18ba3960b5dd 43 _current = static_cast<char>(c > 0 ? c : 0);
khaiminhvn 0:18ba3960b5dd 44 _loaded = true;
khaiminhvn 0:18ba3960b5dd 45 }
khaiminhvn 0:18ba3960b5dd 46
khaiminhvn 0:18ba3960b5dd 47 TReader _reader;
khaiminhvn 0:18ba3960b5dd 48 char _current;
khaiminhvn 0:18ba3960b5dd 49 bool _loaded;
khaiminhvn 0:18ba3960b5dd 50 #if ARDUINOJSON_DEBUG
khaiminhvn 0:18ba3960b5dd 51 bool _ended;
khaiminhvn 0:18ba3960b5dd 52 #endif
khaiminhvn 0:18ba3960b5dd 53 };
khaiminhvn 0:18ba3960b5dd 54
khaiminhvn 0:18ba3960b5dd 55 } // namespace ARDUINOJSON_NAMESPACE