PbCommon.h 1011 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef PBCOMMON_H
  2. #define PBCOMMON_H
  3. #include <cstdint>
  4. #include <PbWriter.h>
  5. #include <optional>
  6. #include <PbReader.h>
  7. class BaseProtobufMessage
  8. {
  9. private:
  10. public:
  11. bool firstField = true;
  12. uint32_t lastMessagePosition;
  13. void parseFromVector(std::vector<uint8_t> const &rawData)
  14. {
  15. auto reader = std::make_shared<PbReader>(rawData);
  16. parseWithReader(reader);
  17. }
  18. void encodeToVector(std::vector<uint8_t> &rawData)
  19. {
  20. auto writer = std::make_shared<PbWriter>(rawData);
  21. encodeWithWriter(writer);
  22. }
  23. void parseWithReader(std::shared_ptr<PbReader> reader)
  24. {
  25. firstField = true;
  26. while (reader->next())
  27. {
  28. if (!decodeField(reader))
  29. {
  30. reader->skip();
  31. } else {
  32. firstField = false;
  33. }
  34. }
  35. }
  36. virtual void encodeWithWriter(std::shared_ptr<PbWriter> writer) = 0;
  37. virtual bool decodeField(std::shared_ptr<PbReader> reader) = 0;
  38. };
  39. #endif