streamConsumer.hh 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include <istream>
  3. #include "params.hh"
  4. #include "jsonObject.hh"
  5. #include "jsonArray.hh"
  6. #include "jsonPrimitive.hh"
  7. #include "linearHistory.hh"
  8. #include "warning.hh"
  9. class StreamConsumer
  10. {
  11. public:
  12. StreamConsumer(std::istream &stream);
  13. virtual ~StreamConsumer();
  14. StreamConsumer *read();
  15. JSonElement * const getRoot() const;
  16. const std::list<Warning> &getMessages() const;
  17. StreamConsumer *withConfig(const AParams *);
  18. private:
  19. /**
  20. * @return true on success
  21. **/
  22. JSonElement *consumeToken(JSonContainer *parent, std::string &buf);
  23. JSonElement *readNext(JSonContainer *parent);
  24. JSonObject *readObject(JSonContainer *parent);
  25. JSonArray *readArray(JSonContainer *parent);
  26. bool ignoreChar(char c) const noexcept;
  27. static void appendUnicode(const char [4], std::string &);
  28. std::istream &stream;
  29. JSonElement *root;
  30. const AParams *params;
  31. std::list<Warning> warnings;
  32. LinearHistory history;
  33. private:
  34. static float _stof(const std::string &);
  35. static float _stof(const char *);
  36. };