hawxgamer

serialize

Jan 19th, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <sstream>
  5.  
  6. void write_string(std::stringstream & ss, std::string const & s) {
  7.     auto len = s.size();
  8.     ss.write(reinterpret_cast<const char *>(&len), sizeof(len));
  9.     ss.write(s.c_str(), len);
  10. }
  11.  
  12. void read_string(std::stringstream & ss, std::string & s) {
  13.     auto len = s.size();
  14.     ss.read(reinterpret_cast<char *>(&len), sizeof(len));
  15.     s.resize(len);
  16.     ss.read(&s[0], len);
  17. }
  18.  
  19. struct User
  20. {
  21.     std::string name;
  22.     std::string address;
  23.     int age;
  24.  
  25.     void serialize(std::stringstream & ss) const {
  26.         ss.write(reinterpret_cast<const char *>(&age), sizeof(int));
  27.         write_string(ss, name);
  28.         write_string(ss, address);
  29.     }
  30.  
  31.     void deserialize(std::stringstream & ss) {
  32.         ss.read(reinterpret_cast<char *>(&age), sizeof(int));
  33.         read_string(ss, name);
  34.         read_string(ss, address);
  35.     }
  36. };
  37.  
  38. int main() {
  39.     User usrName;
  40.     User usrName2;
  41.  
  42.     usrName.address="viseu";
  43.     usrName.age=23;
  44.     usrName.name="joaquim";
  45.  
  46.     std::stringstream ss;
  47.     usrName.serialize(ss);
  48.  
  49.     for(auto && c : ss.str()) {
  50.         std::cout<< std::hex << static_cast<unsigned int>(c) << ' ';
  51.     }
  52.     std::endl(std::cout);
  53.  
  54.     ss.seekg(0);
  55.     usrName2.deserialize(ss);
  56.  
  57.     std::cout<< usrName2.name << std::endl
  58.         << usrName2.address << std::endl
  59.         << std::dec << usrName2.age << std::endl;
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment