Skip to content

Commit

Permalink
Merge pull request #60 from prakashupes/gsoc-prakash
Browse files Browse the repository at this point in the history
GSoC-2020- pgr_mrt() [Week 6]
  • Loading branch information
prakashupes committed Jul 12, 2020
2 parents aa6d420 + 57f3139 commit bd4ad9d
Show file tree
Hide file tree
Showing 16 changed files with 215 additions and 72 deletions.
13 changes: 9 additions & 4 deletions include/drivers/spanningTree/mrt_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


#include "c_types/pgr_edge_t.h"
#include "c_types/pgr_mrt_rt.h"

#ifdef __cplusplus
extern "C" {
Expand All @@ -53,10 +54,14 @@ extern "C" {
********************************************************/
void
do_pgr_mrt(
pgr_edge_t *data_edges,
size_t total_tuples,
int64_t root_vertex,
pgr_ltdtree_rt **return_tuples,
pgr_edge_t *data_edges_1,
size_t total_tuples_1,

pgr_edge_t *data_edges_2,
size_t total_tuples_2,

bool directed,
pgr_mrt_rt **return_tuples,
size_t *return_count,
char **log_msg,
char **notice_msg,
Expand Down
62 changes: 57 additions & 5 deletions include/spanningTree/pgr_mrt_driver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,63 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#include "cpp_common/pgr_messages.h"
#include <iostream>
#include <algorithm>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/dominator_tree.hpp>
#include <boost/property_map/property_map.hpp>
#include <boost/property_map/vector_property_map.hpp>
#include <boost/type_traits.hpp>

#include "c_types/pgr_mrt_rt.h"
#include <boost/graph/two_graphs_common_spanning_trees.hpp>

using namespace boost;
using namespace std;

namespace pgrouting {
namespace functions {

template<class Graph>
class Pgr_mrt : public pgrouting::Pgr_messages {
public:
std::vector<pgr_mrt_rt> results;
typedef typename Graph::E E;
typedef typename Graph::E_i E_i;

std::vector<pgr_mrt_rt> pgr_mrt(
Graph &graph_1,
Graph &graph_2,
bool directed

){
log<<"Inside main boost driver"<<endl;
if(directed)
{
//log<<"Edge "<<E<<endl;


log<<"In directed graph total edges G1 "<<graph_1.num_edges()<<endl;
log<<"In directed graph total edges G2 "<<graph_2.num_edges()<<endl;
log<<"Need coding"<<endl;
}
else
{
log<<"Working with undirected graph"<<endl;

vector<bool> inL(graph_1.num_edges(), false);

std::vector< std::vector<bool> > coll;
boost::tree_collector<
std::vector< std::vector<bool> >,
std::vector<bool>
> tree_collector(coll);
boost::two_graphs_common_spanning_trees
(
graph_1,
graph_2,
tree_collector,
inL
);
}
return results;

}
};
}
}

#endif // INCLUDE_PGR_MRT_DRIVER_HPP
6 changes: 3 additions & 3 deletions pgtap/LTDTree/LTDTree-innerQuery.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
SELECT plan(56);


SELECT has_function('pgr_ltdtree',
SELECT has_function('pgr_lengauer_tarjan_dominator_tree',
ARRAY['text', 'bigint']);

SELECT function_returns('pgr_ltdtree',
SELECT function_returns('pgr_lengauer_tarjan_dominator_tree',
ARRAY['text', 'bigint'],
'setof record');

-- ONE TO ONE
SELECT style_dijkstra('pgr_ltdtree', ',1)');
SELECT style_dijkstra('pgr_lengauer_tarjan_dominator_tree', ',1)');

SELECT finish();
ROLLBACK;
34 changes: 17 additions & 17 deletions pgtap/LTDTree/ltdtree-edge-cases.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,56 +10,56 @@ WHERE id > 18;
SELECT is_empty('q1', 'q1: Graph with 0 edge and 0 vertex');


PREPARE ltdtree_test1 AS
PREPARE lengauer_tarjan_dominator_tree_test1 AS
SELECT *
FROM pgr_ltdtree(
FROM pgr_lengauer_tarjan_dominator_tree(
'SELECT id, source, target, cost, reverse_cost
FROM edge_table
WHERE id < 0',1
);

PREPARE ltdtree_test2 AS
PREPARE lengauer_tarjan_dominator_tree_test2 AS
SELECT *
FROM pgr_ltdtree(
FROM pgr_lengauer_tarjan_dominator_tree(
'SELECT id, source, target, cost, reverse_cost
FROM edge_table
WHERE id = 0',1
);

PREPARE ltdtree_test3 AS
PREPARE lengauer_tarjan_dominator_tree_test3 AS
SELECT *
FROM pgr_ltdtree(
FROM pgr_lengauer_tarjan_dominator_tree(
'SELECT id, source, target, cost, reverse_cost
FROM edge_table
WHERE id > 18',1
);

SELECT is_empty('ltdtree_test1', 'ltdtree_test1: Graph with 0 edge and 0 vertex');
SELECT is_empty('ltdtree_test2', 'ltdtree_test2: Graph with 0 edge and 0 vertex');
SELECT is_empty('ltdtree_test3', 'ltdtree_test3: Graph with 0 edge and 0 vertex');
SELECT is_empty('lengauer_tarjan_dominator_tree_test1', 'lengauer_tarjan_dominator_tree_test1: Graph with 0 edge and 0 vertex');
SELECT is_empty('lengauer_tarjan_dominator_tree_test2', 'lengauer_tarjan_dominator_tree_test2: Graph with 0 edge and 0 vertex');
SELECT is_empty('lengauer_tarjan_dominator_tree_test3', 'lengauer_tarjan_dominator_tree_test3: Graph with 0 edge and 0 vertex');



--root not present tests
PREPARE ltdtree_test4 AS
PREPARE lengauer_tarjan_dominator_tree_test4 AS
SELECT *
FROM pgr_ltdtree(
FROM pgr_lengauer_tarjan_dominator_tree(
'SELECT id, source, target, cost, reverse_cost
FROM edge_table
WHERE id > 2',1
);


PREPARE ltdtree_test5 AS
PREPARE lengauer_tarjan_dominator_tree_test5 AS
SELECT *
FROM pgr_ltdtree(
FROM pgr_lengauer_tarjan_dominator_tree(
'SELECT id, source, target, cost, reverse_cost
FROM edge_table
WHERE id > 2',1
);

SELECT is_empty('ltdtree_test4', 'ltdtree_test4: Root not present in the Graph');
SELECT is_empty('ltdtree_test5', 'ltdtree_test5: Root not present in the Graph');
SELECT is_empty('lengauer_tarjan_dominator_tree_test4', 'lengauer_tarjan_dominator_tree_test4: Root not present in the Graph');
SELECT is_empty('lengauer_tarjan_dominator_tree_test5', 'lengauer_tarjan_dominator_tree_test5: Root not present in the Graph');

--vertex not present in the graph tests

Expand All @@ -70,7 +70,7 @@ SELECT is_empty('ltdtree_test5', 'ltdtree_test5: Root not present in the Graph')
--id constrained tests
PREPARE q2 AS
SELECT *
FROM pgr_ltdtree(
FROM pgr_lengauer_tarjan_dominator_tree(
'SELECT id, source, target, cost, reverse_cost
FROM edge_table
WHERE id > 0',1
Expand All @@ -80,7 +80,7 @@ SELECT isnt_empty('q2', 'q1: Graph with 0 edge and 0 vertex');
-- Negative root tests
PREPARE q3 AS
SELECT *
FROM pgr_ltdtree(
FROM pgr_lengauer_tarjan_dominator_tree(
'SELECT id, source, target, cost, reverse_cost
FROM edge_table',-1
);
Expand Down
2 changes: 1 addition & 1 deletion pgtap/LTDTree/no_crash_test-LTDTree.sql
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ params = ARRAY[
'(SELECT id FROM edge_table_vertices_pgr WHERE id IN (-1))'
]::TEXT[];

RETURN query SELECT * FROM no_crash_test('pgr_ltdtree', params, subs);
RETURN query SELECT * FROM no_crash_test('pgr_lengauer_tarjan_dominator_tree', params, subs);
END
$BODY$
LANGUAGE plpgsql VOLATILE;
Expand Down
11 changes: 11 additions & 0 deletions pgtap/spanningTree/mrt/mrt-edge-cases.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
\i setup.sql
SELECT plan(1);

SELECT todo_start('Complete the inner query tests');

SELECT pass('Sample Test');

SELECT todo_end();

SELECT finish();
ROLLBACK;
12 changes: 12 additions & 0 deletions pgtap/spanningTree/mrt/mrt-innerQuery.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
\i setup.sql

SELECT plan(1);

SELECT todo_start('Complete the inner query tests');

SELECT pass('Sample Test');

SELECT todo_end();

SELECT finish();
ROLLBACK;
12 changes: 12 additions & 0 deletions pgtap/spanningTree/mrt/no_crash_test-mrt.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
\i setup.sql

SELECT plan(1);

SELECT todo_start('Complete the inner query tests');

SELECT pass('Sample Test');

SELECT todo_end();

SELECT finish();
ROLLBACK;
12 changes: 12 additions & 0 deletions pgtap/spanningTree/mrt/pgr_mrt_types_check.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
\i setup.sql

SELECT plan(1);

SELECT todo_start('Complete the inner query tests');

SELECT pass('Sample Test');

SELECT todo_end();

SELECT finish();
ROLLBACK;
8 changes: 4 additions & 4 deletions sql/LTDTree/LTDTree.sql
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
---------------
-- pgr_LTDTree
---------------
CREATE OR REPLACE FUNCTION pgr_LTDTree(
CREATE OR REPLACE FUNCTION pgr_lengauer_tarjan_dominator_tree (
TEXT, -- edges_sql (required)
root_vertex BIGINT , -- vertex (required)
OUT seq integer,
Expand All @@ -46,7 +46,7 @@ BEGIN

RETURN QUERY
SELECT *
FROM _pgr_LTDTree(_pgr_get_statement($1),$2);
FROM _pgr_lengauer_tarjan_dominator_tree (_pgr_get_statement($1),$2);
END;
$BODY$
LANGUAGE plpgsql VOLATILE STRICT;
Expand All @@ -55,13 +55,13 @@ LANGUAGE plpgsql VOLATILE STRICT;
-- COMMENTS


COMMENT ON FUNCTION pgr_LTDTree(TEXT,BIGINT)
COMMENT ON FUNCTION pgr_lengauer_tarjan_dominator_tree (TEXT,BIGINT)
IS 'pgr_LTDTree
- EXPERIMENTAL
- Directed graph
- Parameters:
- edges SQL with columns: id, source, target, cost [,reverse_cost]
- Documentation:
- ${PGROUTING_DOC_LINK}/pgr_LTDTree.html
- ${PGROUTING_DOC_LINK}/pgr_lengauer_tarjan_dominator_tree .html
';

6 changes: 3 additions & 3 deletions sql/LTDTree/_LTDTree.sql
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
********************************************************************PGR-GNU*/
---------------
-- pgr_LTDTree
-- _pgr_lengauer_tarjan_dominator_tree
---------------
CREATE OR REPLACE FUNCTION _pgr_LTDTree(
CREATE OR REPLACE FUNCTION _pgr_lengauer_tarjan_dominator_tree (
edges_sql TEXT, -- edges_sql (required)
root_vid BIGINT , -- vertex (required)
OUT seq integer,
Expand All @@ -43,6 +43,6 @@ LANGUAGE c VOLATILE STRICT;
-- COMMENTS


COMMENT ON FUNCTION _pgr_LTDTree(TEXT,BIGINT)
COMMENT ON FUNCTION _pgr_lengauer_tarjan_dominator_tree (TEXT,BIGINT)
IS 'pgRouting internal function';

2 changes: 1 addition & 1 deletion sql/spanningTree/_mrt.sql
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-- _pgr_mrt
---------------

CREATE OR REPLACE FUNCTION _pgr_LTDTree(
CREATE OR REPLACE FUNCTION _pgr_mrt(
edges_sql1 TEXT, -- edges_sql1 (required)
edges_sql2 TEXT, -- edges_sql2 (required)
directed BOOLEAN DEFAULT true,
Expand Down
2 changes: 1 addition & 1 deletion sql/spanningTree/mrt.sql
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
---------------
-- pgr_mrt
---------------
CREATE OR REPLACE FUNCTION pgr_LTDTree(
CREATE OR REPLACE FUNCTION pgr_mrt(
edges_sql1 TEXT, -- edges_sql1 (required)
edges_sql2 TEXT, -- edges_sql2 (required)
directed BOOLEAN DEFAULT true,
Expand Down
6 changes: 3 additions & 3 deletions src/LTDTree/LTDTree.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#include "c_common/arrays_input.h"
#include "drivers/LTDTree/LTDTree_driver.h"

PGDLLEXPORT Datum _pgr_ltdtree(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(_pgr_ltdtree);
PGDLLEXPORT Datum _pgr_lengauer_tarjan_dominator_tree (PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(_pgr_lengauer_tarjan_dominator_tree );


static
Expand Down Expand Up @@ -104,7 +104,7 @@ process(char* edges_sql,
}

PGDLLEXPORT Datum
_pgr_ltdtree(PG_FUNCTION_ARGS) {
_pgr_lengauer_tarjan_dominator_tree(PG_FUNCTION_ARGS) {
FuncCallContext *funcctx;
TupleDesc tuple_desc;

Expand Down
Loading

0 comments on commit bd4ad9d

Please sign in to comment.