streamConsumer.hh 965 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include <istream>
  3. #include "config.h"
  4. #include "jsonObject.hh"
  5. #include "jsonArray.hh"
  6. #include "jsonPrimitive.hh"
  7. #include "wrappedBuffer.hpp"
  8. class StreamConsumer
  9. {
  10. public:
  11. virtual ~StreamConsumer();
  12. static StreamConsumer *read(std::istream &stream);
  13. JSonElement * const getRoot() const;
  14. private:
  15. StreamConsumer(std::istream &stream);
  16. /**
  17. * @return true on success
  18. **/
  19. JSonElement *consumeToken(JSonContainer *parent, std::string &buf);
  20. JSonElement *readNext(JSonContainer *parent);
  21. JSonObject *readObject(JSonContainer *parent);
  22. JSonArray *readArray(JSonContainer *parent);
  23. bool ignoreChar(char c) const noexcept;
  24. std::istream &stream;
  25. JSonElement *root;
  26. WrappedBuffer<char, ERROR_HISTORY_LEN> history;
  27. private:
  28. static float _stof(const std::string &);
  29. static float _stof(const char *);
  30. };