streamConsumer.hh 1.2 KB

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