Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <map>
- #include <iostream>
- #include <string>
- #include <vector>
- // Для простых примитивных типов (int, bool, char и т. д.) и plain old data
- template <typename T>
- void Serialize(T pod, std::ostream& out) {
- size_t sz = 1;
- out.write(reinterpret_cast<char*>(&sz), sizeof(sz));
- out.write(reinterpret_cast<const char*>(&pod), sizeof(T));
- }
- void Serialize(const std::string& str, std::ostream& out) {
- size_t sz = str.size();
- out.write(reinterpret_cast<char*>(&sz), sizeof(sz));
- out.write(reinterpret_cast<const char*>(str.data()), sz * sizeof(char));
- }
- template <typename T>
- void Serialize(const std::vector<T>& data, std::ostream& out) {
- size_t sz = data.size();
- out.write(reinterpret_cast<char*>(&sz), sizeof(sz));
- out.write(reinterpret_cast<const char*>(data.data()), sz * sizeof(T));
- }
- template <typename T1, typename T2>
- void Serialize(const std::map<T1, T2>& data, std::ostream& out) {
- size_t sz = data.size();
- out.write(reinterpret_cast<char*>(&sz), sizeof(sz));
- for (auto& it : data) {
- Serialize(it.first, out);
- Serialize(it.second, out);
- }
- }
- template <typename T>
- void Deserialize(std::istream& in, T& pod) {
- size_t sz;
- in.read(reinterpret_cast<char*>(&sz), sizeof(size_t));
- in.read(reinterpret_cast<char*>(&pod), sizeof(T));
- }
- void Deserialize(std::istream& in, std::string& str) {
- size_t sz;
- in.read(reinterpret_cast<char*>(&sz), sizeof(size_t));
- str.resize(sz);
- in.read(reinterpret_cast<char*>(str.data()), sz * sizeof(char));
- }
- template <typename T>
- void Deserialize(std::istream& in, std::vector<T>& data) {
- size_t sz;
- in.read(reinterpret_cast<char*>(&sz), sizeof(size_t));
- data.resize(sz);
- in.read(reinterpret_cast<char*>(data.data()), sz * sizeof(T));
- }
- template <typename T1, typename T2>
- void Deserialize(std::istream& in, std::map<T1, T2>& data) {
- size_t sz;
- in.read(reinterpret_cast<char*>(&sz), sizeof(size_t));
- for (size_t i = 0; i < sz; ++i) {
- std::pair<T1, T2> p;
- Deserialize(in, p.first);
- Deserialize(in, p.second);
- data[p.first] = p.second;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement