Advertisement
Guest User

Untitled

a guest
Jan 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. #include <map>
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5.  
  6.  
  7. // Для простых примитивных типов (int, bool, char и т. д.) и plain old data
  8. template<typename T>
  9. void Serialize(T pod, std::ostream &out);
  10.  
  11. void Serialize(const std::string &str, std::ostream &out);
  12.  
  13. template<typename T>
  14. void Serialize(const std::vector<T> &data, std::ostream &out);
  15.  
  16. template<typename T1, typename T2>
  17. void Serialize(const std::map<T1, T2> &data, std::ostream &out);
  18.  
  19.  
  20. template<typename T>
  21. void Deserialize(std::istream &in, T &pod);
  22.  
  23. void Deserialize(std::istream &in, std::string &str);
  24.  
  25. template<typename T>
  26. void Deserialize(std::istream &in, std::vector<T> &data);
  27.  
  28. template<typename T1, typename T2>
  29. void Deserialize(std::istream &in, std::map<T1, T2> &data);
  30.  
  31.  
  32. template<typename T>
  33. void Serialize(T pod, std::ostream &out) {
  34.     out.write(reinterpret_cast<const char *>(&pod), sizeof(pod));
  35. }
  36.  
  37. void Serialize(const std::string &str, std::ostream &out) {
  38.     out.write(reinterpret_cast<const char *>(sizeof(str), sizeof(sizeof(str)));
  39.     for (auto el : str) {
  40.         out.write(reinterpret_cast<const char *>(&el), sizeof(el));
  41.     }
  42. }
  43.  
  44. template<typename T>
  45. void Serialize(const std::vector<T> &data, std::ostream &out) {
  46.     out.write(reinterpret_cast<char *>(sizeof(data), sizeof(sizeof(data)));
  47.     for (auto el: data) {
  48.         out.write(reinterpret_cast<const char *>(&el), sizeof(el));
  49.     }
  50. }
  51.  
  52. template<typename T1, typename T2>
  53. void Serialize(const std::map<T1, T2> &data, std::ostream &out) {
  54.     out.write(reinterpret_cast<char *>(sizeof(data)), sizeof(sizeof(data)));
  55.     for (auto &el: data){
  56.         Serialize(el.first, out);
  57.         Serialize(el.second, out);
  58.     }
  59. };
  60.  
  61. template<typename T>
  62. void Deserialize(std::istream &in, T &pod){
  63.     in.read(reinterpret_cast<char*> (&pod), sizeof(T));
  64. }
  65.  
  66.  
  67. void Deserialize(std::istream &in, std::string &str){
  68.     size_t sz;
  69.     in.read(reinterpret_cast<char *>(&sz), sizeof(size_t));
  70.     for(size_t i = 0; i != sz; ++i){
  71.         in.read(reinterpret_cast<char *>(&(str[i])), sizeof(char));
  72.     }
  73. }
  74.  
  75. template<typename T1, typename T2>
  76. void Deserialize(std::istream &in, std::map<T1, T2> &data){
  77.     size_t sz;
  78.     in.read(reinterpret_cast<char *>(&sz), sizeof(size_t));
  79.     for(size_t i = 0; i != sz; ++i){
  80.         T1 first;
  81.         T2 second;
  82.         Deserialize(in, first);
  83.         Deserialize(in, second);
  84.         data[first] = second;
  85.     }
  86. };
  87.  
  88. template<typename T>
  89. void Deserialize(std::istream &in, std::vector<T> &data){
  90.     size_t sz;
  91.     in.read(reinterpret_cast<char *>(&sz), sizeof(size_t));
  92.     for(size_t i = 0; i != sz; ++i){
  93.         Deserialize(in, data[i]);
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement