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