Skip to content
Snippets Groups Projects
  • Abd Errahmane Kiouche's avatar
    Update (p,t)_compression/LICENSE-Apache2.0, (p,t)_compression/LICENSE-MIT.txt,... · 16f9ee91
    Abd Errahmane Kiouche authored
    Update (p,t)_compression/LICENSE-Apache2.0, (p,t)_compression/LICENSE-MIT.txt, (p,t)_compression/Notice.txt, (p,t)_compression/graph.cpp, (p,t)_compression/graph.h, (p,t)_compression/hash.h, (p,t)_compression/io.cpp, (p,t)_compression/io.h, (p,t)_compression/main.cpp, (p,t)_compression/p_k_compression.cpp, (p,t)_compression/p_k_compression.h files
    Deleted (pt) compression/LICENSE-Apache2.0, (pt) compression/LICENSE-MIT.txt, (pt) compression/Notice.txt, (pt) compression/graph.cpp, (pt) compression/graph.h, (pt) compression/hash.h, (pt) compression/io.cpp, (pt) compression/io.h, (pt) compression/main.cpp, (pt) compression/p_k_compression.cpp, (pt) compression/p_k_compression.h files
    16f9ee91
io.cpp 2.41 KiB
//
// Created by Kiouche on 1/20/2020.
//

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <unistd.h>
#include <vector>
#include "graph.h"
#include "io.h"
#include "hash.h"

namespace  std {

    tuple<graph,unordered_map<edge , double>>  read_graph_from_file(string filename,bool directed) {

        ifstream f(filename);
        string line;
        graph g;
        unordered_map<edge , double>   edges_scores;
        int loops = 0;

        if (f.is_open()) {
            while (getline(f, line)) {
                uint32_t src_id, dst_id;
                edge e,e_r;
                double score;
                stringstream ss;
                ss.str(line);
                ss >> src_id;
                ss >> dst_id;
                ss >> score;

                if (src_id!=dst_id) {
                    e.first = src_id ; e.second = dst_id;
                    e_r.first = dst_id; e.second = src_id;
                    g[src_id].insert(dst_id);
                    if(!directed) g[dst_id].insert(src_id);
                    edges_scores[make_pair(src_id,dst_id)] = score ;
                   // if(!directed) edges_scores[e_r] = score;
                }
                else loops++;
            }
        } else  {
            cout << "Unable to open " << filename << " ! \n";
            exit(-1);
        }
        cout << "number of nodes = " << g.size() << endl;
        cout << "loops = " << loops << endl;
        return {g,edges_scores};
    }

    void graph_to_file (po::variables_map &var,double runtime, double c_rate,vector<edge> &edges){

        ofstream file;
        file.open(var["output_file"].as<string>());
        file << "Original graph" << "\t"<< var["input"].as<string>() <<endl;
        file << "Directed" << "\t" << to_string(var["directed"].as<bool>()) << endl;
        file << "Depth" << "\t" << to_string(var["depth"].as<int>()) << endl;
        vector<double> p_values = var["proportions"].as<vector<double>>();
        int depth = var["depth"].as<int>();
        for (int i = 0;i<=depth;i++){
            file << "k " + to_string(i) << "\t" << to_string(p_values.at(i)) << endl;
        }
        file << "execution time " << "\t" << to_string(runtime) << endl;
        file << "compression rate " << "\t" << to_string(c_rate) << endl;

        file << endl;

        for (auto e : edges){
            file << e.first <<"\t"<< e.second << endl;
        }
        file.close();
    }

}