Advertisement
Guest User

Untitled

a guest
Sep 20th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. /* Mathias Pedersen 2019 */
  2.  
  3. #pragma once
  4.  
  5. #include <iostream>
  6. #include <vector>
  7. #include <algorithm>
  8.  
  9. class VectorStream
  10. {
  11. std::vector<char> data;
  12. size_t offset = 0;
  13.  
  14. public:
  15. void write(char* buffer, size_t len)
  16. {
  17. for (size_t i = 0; i < len; i++)
  18. data.emplace_back(buffer[i]);
  19. offset += len;
  20. }
  21.  
  22. void writeByte(char value)
  23. {
  24. write(&value, sizeof(value));
  25. }
  26.  
  27. void writeInt(unsigned int value)
  28. {
  29. write(reinterpret_cast<char*>(&value), sizeof(value));
  30. }
  31.  
  32. void writeDouble(double value)
  33. {
  34. write(reinterpret_cast<char*>(&value), sizeof(value));
  35. }
  36.  
  37. void writeString(const std::string& value)
  38. {
  39. writeCompressedInt(value.length());
  40. for (size_t i = 0; i < value.length(); i++)
  41. writeByte(value[i]);
  42. }
  43.  
  44. void writeCompressedInt(unsigned int value)
  45. {
  46. do
  47. {
  48. int v = value & 0x7F;
  49. value >>= 7;
  50.  
  51. if (value)
  52. v |= 0x80;
  53.  
  54. writeByte(v);
  55. } while (value);
  56. }
  57.  
  58. std::string str()
  59. {
  60. std::string data(data.begin(), data.end());
  61. return data;
  62. }
  63. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement