Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
2.6 kB
6
Indexable
Never
#pragma once

#include <filesystem>
#include <string>
#include <unordered_map>

#include "map_renderer.h"
#include "transport_catalogue.h"
#include "transport_router.h"
#include "transport_catalogue.pb.h"

namespace serialize {

class Serializator final {
public:
    using ProtoTransportCatalogue = transport_catalogue_serialize::TransportCatalogue;
    using TransportCatalogue = transport_catalogue::TransportCatalogue;

    struct Settings {
        std::filesystem::path path;
    };

    Serializator(const Settings &settings) : settings_(settings) {};
    void ResetSettings(const Settings &settings);

    // Добавляет данные транспортного каталога для сериализации
    void AddTransportCatalogue(const TransportCatalogue &catalogue);

    // сохраняет данные транспортного каталога в бинарном виде в соответсвии с настройками
    bool Serialize();

    // загружает данные в транспортный каталог из файла в соответствии с настройками
    bool Deserialize(TransportCatalogue &catalogue);
private:
    void Clear() noexcept;

    void SaveStops(const TransportCatalogue &catalogue);
    void LoadStops(TransportCatalogue &catalogue);

    void SaveRoutes(const TransportCatalogue &catalogue);
    void LoadRoutes(TransportCatalogue &catalogue);

    void SaveRouteStops(const domain::Route &route, transport_catalogue_serialize::Route &p_route);
    void LoadRoute(TransportCatalogue &catalogue, const transport_catalogue_serialize::Route &p_route) const;

    void SaveDistances(const TransportCatalogue &catalogue);
    void LoadDistances(TransportCatalogue &catalogue) const;

    static transport_catalogue_serialize::Coordinates MakeProtoCoordinates(const geo::Coordinates &coordinates);
    static geo::Coordinates MakeCoordinates(const transport_catalogue_serialize::Coordinates &p_coordinates);

    static transport_catalogue_serialize::RouteType MakeProtoRouteType(domain::RouteType route_type);
    static domain::RouteType MakeRouteType(transport_catalogue_serialize::RouteType p_route_type);


    Settings settings_;

    ProtoTransportCatalogue proto_catalogue_;
    std::unordered_map<int, std::string_view> stop_name_by_id_;
    std::unordered_map<std::string_view, int> stop_id_by_name_;
    std::unordered_map<int, std::string_view> route_name_by_id_;
    std::unordered_map<std::string_view, int> route_id_by_name_;
};


} // namespace serialize