streamConsumer.hh 1.1 KB

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