PbWriter.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef PBWRITER_H
  2. #define PBWRITER_H
  3. #include <vector>
  4. #include <string>
  5. #include <memory>
  6. #include <PbWireType.h>
  7. class PbWriter
  8. {
  9. private:
  10. std::vector<uint8_t> &rawData;
  11. uint32_t pos;
  12. uint32_t msgStartPos = 0;
  13. void encodeVarInt(uint32_t low, uint32_t high, int32_t atIndex = 0);
  14. uint32_t encodeZigzag32(int32_t value);
  15. uint64_t encodeZigzag64(int64_t value);
  16. public:
  17. PbWriter(std::vector<uint8_t> &rawData);
  18. template <typename T>
  19. void encodeVarInt(T, int32_t atIndex = 0);
  20. template <typename T>
  21. void encodeFixed(T);
  22. void addSVarInt32(uint32_t tag, int32_t);
  23. void addSVarInt64(uint32_t tag, int64_t);
  24. void addString(uint32_t tag, std::string &target);
  25. void addVector(uint32_t tag, std::vector<uint8_t> &target);
  26. template <typename T>
  27. void addVarInt(uint32_t tag, T intType);
  28. void addBool(uint32_t tag, bool value);
  29. void addField(uint32_t tag, PbWireType wiretype);
  30. uint32_t startMessage();
  31. void finishMessage(uint32_t tag, uint32_t pos);
  32. };
  33. #endif