Distances on Directed Graphs in R
1#pragma once
2
3#include <memory>
4#include <vector>
5#include <algorithm> // std::fill, std::reverse
6#include <iostream>
7#include <fstream>
8
9#include <Rcpp.h>
10// [[Rcpp::plugins(cpp11)]]
11// [[Rcpp::depends(RcppParallel,RcppThread)]]
12#include <RcppThread.h>
13#include <RcppParallel.h>
14
15#include "pathfinders.h"
16
17class DGraph;
18class PathFinder;
19
20//----------------------------
21//----- functions in run_sp.cpp
22//----------------------------
23
24namespace run_sp {
25
26std::shared_ptr <HeapDesc> getHeapImpl(const std::string& heap_type);
27
28size_t make_vert_map (const Rcpp::DataFrame &vert_map_in,
29 const std::vector <std::string> &vert_map_id,
30 const std::vector <size_t> &vert_map_n,
31 std::map <std::string, size_t> &vert_map);
32
33void make_vert_to_edge_maps (const std::vector <std::string> &from,
34 const std::vector <std::string> &to, const std::vector <double> &wt,
35 std::unordered_map <std::string, size_t> &verts_to_edge_map,
36 std::unordered_map <std::string, double> &verts_to_dist_map);
37
38size_t get_chunk_size (const size_t nfrom);
39} // end namespace run_sp
40
41namespace categorical {
42
43size_t get_num_edge_types (const std::vector <size_t> &edge_type);
44
45} // end namespace categorical
46
47namespace centrality {
48
49 struct edge_pair_hash {
50 inline std::size_t operator()(const std::pair <size_t, size_t> & v) const {
51 return v.first * 31 + v.second;
52 }
53 };
54
55} // end namespace centrality
56
57
58Rcpp::NumericMatrix rcpp_get_sp_dists (const Rcpp::DataFrame graph,
59 const Rcpp::DataFrame vert_map_in,
60 Rcpp::IntegerVector fromi,
61 Rcpp::IntegerVector toi_in,
62 const std::string& heap_type);
63
64Rcpp::NumericMatrix rcpp_get_sp_dists_par (const Rcpp::DataFrame graph,
65 const Rcpp::DataFrame vert_map_in,
66 Rcpp::IntegerVector fromi,
67 Rcpp::IntegerVector toi_in,
68 const std::string& heap_type,
69 const bool is_spatial);
70
71Rcpp::NumericVector rcpp_get_sp_dists_nearest (const Rcpp::DataFrame graph,
72 const Rcpp::DataFrame vert_map_in,
73 Rcpp::IntegerVector fromi,
74 Rcpp::IntegerVector toi_in,
75 const std::string& heap_type);
76
77Rcpp::NumericMatrix rcpp_get_sp_dists_paired_par (const Rcpp::DataFrame graph,
78 const Rcpp::DataFrame vert_map_in,
79 Rcpp::IntegerVector fromi,
80 Rcpp::IntegerVector toi,
81 const std::string& heap_type,
82 const bool is_spatial);
83
84Rcpp::NumericMatrix rcpp_get_iso (const Rcpp::DataFrame graph,
85 const Rcpp::DataFrame vert_map_in,
86 Rcpp::IntegerVector fromi,
87 Rcpp::NumericVector dlim,
88 const std::string& heap_type);
89
90Rcpp::List rcpp_get_paths (const Rcpp::DataFrame graph,
91 const Rcpp::DataFrame vert_map_in,
92 Rcpp::IntegerVector fromi,
93 Rcpp::IntegerVector toi_in,
94 const std::string& heap_type);
95
96Rcpp::List rcpp_get_paths_pairwise (const Rcpp::DataFrame graph,
97 const Rcpp::DataFrame vert_map_in,
98 Rcpp::IntegerVector fromi,
99 Rcpp::IntegerVector toi_in,
100 const std::string& heap_type);
101
102// in run_sp_categorical:
103Rcpp::NumericMatrix rcpp_get_sp_dists_categorical (const Rcpp::DataFrame graph,
104 const Rcpp::DataFrame vert_map_in,
105 Rcpp::IntegerVector fromi,
106 Rcpp::IntegerVector toi_in,
107 const std::string& heap_type,
108 const bool proportions_only);
109
110Rcpp::NumericMatrix rcpp_get_sp_dists_categ_paired (const Rcpp::DataFrame graph,
111 const Rcpp::DataFrame vert_map_in,
112 Rcpp::IntegerVector fromi,
113 Rcpp::IntegerVector toi_in,
114 const std::string& heap_type);
115
116Rcpp::NumericMatrix rcpp_get_sp_dists_cat_threshold (const Rcpp::DataFrame graph,
117 const Rcpp::DataFrame vert_map_in,
118 Rcpp::IntegerVector fromi,
119 const double dlimit,
120 const std::string& heap_type);
121
122//----------------------------
123//----- functions in centrality.cpp
124//----------------------------
125
126Rcpp::NumericVector rcpp_centrality (const Rcpp::DataFrame graph,
127 const Rcpp::DataFrame vert_map_in,
128 const std::string& heap_type,
129 const double dist_threshold,
130 const bool edge_centrality,
131 const int sample);