From df13f94693d1a6ebf3c3cbf742e3e0be87751e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radek=20Hu=C5=A1ek?= <PitelVonSacek@gmail.com> Date: Wed, 9 Dec 2015 11:29:57 +0100 Subject: [PATCH] Interface & classes transfer mechanism change Function testGroupConnectivity now doesn't return list of classes by default but you have to opt in for it. Moreover the transfer mechanism of list of classes between C++ and Python was changed from instance variable to (virtual) function. --- group-connectivity.h | 6 ++++++ groupConnectivity.pyx | 17 +++++++++-------- timit.md | 4 ++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/group-connectivity.h b/group-connectivity.h index 6a19341..024d7c6 100644 --- a/group-connectivity.h +++ b/group-connectivity.h @@ -34,6 +34,7 @@ struct AbstractTester { std::vector<EdgeId> spanningTree, std::vector< std::vector<DirectedEdgeId> > elementaryCycles ) =0; + virtual std::vector<size_t> getClasses() =0; virtual bool run() =0; virtual ~AbstractTester() {} @@ -125,6 +126,11 @@ struct Tester : public AbstractTester { } + virtual std::vector<size_t> getClasses() { + return classes; + } + + virtual bool run() { Mapping forb(edges, 0); diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx index a732146..44d8f87 100644 --- a/groupConnectivity.pyx +++ b/groupConnectivity.pyx @@ -12,10 +12,8 @@ cdef extern from "group-connectivity.h" namespace "Ring": cdef extern from "group-connectivity.h": cdef cppclass AbstractTester: - bool isConnected - vector[size_t] classes - void init(int, vector[int], vector[vector[int]]) + vector[size_t] getClasses() bool run() cdef cppclass Tester[T](AbstractTester): @@ -31,7 +29,7 @@ def pathToEdges(G, path): u = v return ret -def testGroupConnectivity(G, group = "Z4", debug = False): +def testGroupConnectivity(G, group = "Z4", getClasses = False, debug = False): cdef AbstractTester* tester = NULL if group == "Z4": tester = new Tester[Z4[int]]() @@ -59,11 +57,14 @@ def testGroupConnectivity(G, group = "Z4", debug = False): tester.init(G.num_edges(), [ l for (_, _, l) in spanningTree.edge_iterator() ], elemCycles) ret = tester.run() - classes = tester.classes - - del tester - return (ret, classes) + if getClasses: + classes = tester.getClasses() + del tester + return (ret, classes) + else: + del tester + return ret def subdivisionIterator(G, edges = None): if edges is None: diff --git a/timit.md b/timit.md index c2b38c1..b108ebe 100644 --- a/timit.md +++ b/timit.md @@ -7,8 +7,8 @@ Command: graphs.CubeGraph(3).edges()[0:2], function = lambda H: "%-20s Z4: %-5s Z2_2: %s" % ( H.graph6_string(), - groupConnectivity.testGroupConnectivity(H, "Z4")[0], - groupConnectivity.testGroupConnectivity(H, "Z2_2")[0] + groupConnectivity.testGroupConnectivity(H, "Z4"), + groupConnectivity.testGroupConnectivity(H, "Z2_2") ) ) `` -- GitLab