Skip to content

Commit 95fd1ce

Browse files
committed
Implement partition/reference.h & topology.h
1 parent 6b5fd8b commit 95fd1ce

File tree

2 files changed

+345
-0
lines changed

2 files changed

+345
-0
lines changed
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
/** Copyright 2020 Alibaba Group Holding Limited.
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License.
14+
*/
15+
16+
#include <sstream>
17+
18+
#include "src/predefine.h"
19+
// GRIN headers
20+
#include "partition/reference.h"
21+
22+
#ifdef GRIN_ENABLE_VERTEX_REF
23+
GRIN_VERTEX_REF grin_get_vertex_ref_by_vertex(GRIN_GRAPH g, GRIN_VERTEX v) {
24+
return v;
25+
}
26+
27+
void grin_destroy_vertex_ref(GRIN_GRAPH g, GRIN_VERTEX_REF vr) { return; }
28+
29+
GRIN_VERTEX grin_get_vertex_from_vertex_ref(GRIN_GRAPH g, GRIN_VERTEX_REF vr) {
30+
return vr;
31+
}
32+
33+
GRIN_PARTITION grin_get_master_partition_from_vertex_ref(GRIN_GRAPH g,
34+
GRIN_VERTEX_REF vr) {
35+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
36+
return _g->GetMasterPartitionIdFromVertexGid(vr);
37+
}
38+
39+
const char* grin_serialize_vertex_ref(GRIN_GRAPH g, GRIN_VERTEX_REF vr) {
40+
std::stringstream ss;
41+
ss << vr;
42+
int len = ss.str().length() + 1;
43+
char* out = new char[len];
44+
snprintf(out, len, "%s", ss.str().c_str());
45+
return out;
46+
}
47+
48+
void grin_destroy_serialized_vertex_ref(GRIN_GRAPH g, const char* svr) {
49+
delete[] svr;
50+
}
51+
52+
GRIN_VERTEX_REF grin_deserialize_to_vertex_ref(GRIN_GRAPH g, const char* svr) {
53+
std::stringstream ss(svr);
54+
long long int vr; // NOLINT
55+
ss >> vr;
56+
return vr;
57+
}
58+
59+
bool grin_is_master_vertex(GRIN_GRAPH g, GRIN_VERTEX v) {
60+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
61+
return _g->GetMasterPartitionIdFromVertexGid(v) == _g->GetPartitionId();
62+
}
63+
64+
bool grin_is_mirror_vertex(GRIN_GRAPH g, GRIN_VERTEX v) {
65+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
66+
return _g->GetMasterPartitionIdFromVertexGid(v) != _g->GetPartitionId();
67+
}
68+
#endif
69+
70+
#ifdef GRIN_TRAIT_FAST_VERTEX_REF
71+
long long int grin_serialize_vertex_ref_as_int64(GRIN_GRAPH g, // NOLINT
72+
GRIN_VERTEX_REF vr) {
73+
return vr;
74+
}
75+
76+
GRIN_VERTEX_REF grin_deserialize_int64_to_vertex_ref(
77+
GRIN_GRAPH g,
78+
long long int fvr) { // NOLINT
79+
return fvr;
80+
}
81+
#endif
82+
83+
#ifdef GRIN_TRAIT_MASTER_VERTEX_MIRROR_PARTITION_LIST
84+
GRIN_PARTITION_LIST grin_get_master_vertex_mirror_partition_list(
85+
GRIN_GRAPH g, GRIN_VERTEX v) {
86+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
87+
auto pid = _g->GetMasterPartitionIdFromVertexGid(v);
88+
if (pid != _g->GetPartitionId())
89+
return GRIN_NULL_PARTITION_LIST;
90+
auto pl = new GRIN_PARTITION_LIST_T();
91+
for (auto i = 0; i < _g->GetPartitionNum(); ++i) {
92+
if (i != pid)
93+
pl->push_back(i);
94+
}
95+
return pl;
96+
}
97+
#endif
98+
99+
#ifdef GRIN_TRAIT_MIRROR_VERTEX_MIRROR_PARTITION_LIST
100+
GRIN_PARTITION_LIST grin_get_mirror_vertex_mirror_partition_list(
101+
GRIN_GRAPH g, GRIN_VERTEX v) {
102+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
103+
auto pid = _g->GetMasterPartitionIdFromVertexGid(v);
104+
if (pid == _g->GetPartitionId())
105+
return GRIN_NULL_PARTITION_LIST;
106+
auto pl = new GRIN_PARTITION_LIST_T();
107+
for (auto i = 0; i < _g->GetPartitionNum(); ++i) {
108+
if (i != pid)
109+
pl->push_back(i);
110+
}
111+
return pl;
112+
}
113+
#endif
114+
115+
#ifdef GRIN_ENABLE_EDGE_REF
116+
GRIN_EDGE_REF grin_get_edge_ref_by_edge(GRIN_GRAPH g, GRIN_EDGE e) { return e; }
117+
118+
void grin_destroy_edge_ref(GRIN_GRAPH g, GRIN_EDGE_REF er) { return; }
119+
120+
GRIN_EDGE grin_get_edge_from_edge_ref(GRIN_GRAPH g, GRIN_EDGE_REF er) {
121+
return er;
122+
}
123+
124+
GRIN_PARTITION grin_get_master_partition_from_edge_ref(GRIN_GRAPH g,
125+
GRIN_EDGE_REF er) {
126+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
127+
return _g->GetMasterPartitionIdFromEdgeGid(er);
128+
}
129+
130+
const char* grin_serialize_edge_ref(GRIN_GRAPH g, GRIN_EDGE_REF er) {
131+
std::stringstream ss;
132+
ss << er;
133+
int len = ss.str().length() + 1;
134+
char* out = new char[len];
135+
snprintf(out, len, "%s", ss.str().c_str());
136+
return out;
137+
}
138+
139+
void grin_destroy_serialized_edge_ref(GRIN_GRAPH g, const char* ser) {
140+
delete[] ser;
141+
}
142+
143+
GRIN_EDGE_REF grin_deserialize_to_edge_ref(GRIN_GRAPH g, const char* ser) {
144+
std::stringstream ss(ser);
145+
long long int er; // NOLINT
146+
ss >> er;
147+
return er;
148+
}
149+
150+
bool grin_is_master_edge(GRIN_GRAPH g, GRIN_EDGE e) {
151+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
152+
return _g->GetMasterPartitionIdFromEdgeGid(e) == _g->GetPartitionId();
153+
}
154+
155+
bool grin_is_mirror_edge(GRIN_GRAPH g, GRIN_EDGE e) {
156+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
157+
return _g->GetMasterPartitionIdFromEdgeGid(e) != _g->GetPartitionId();
158+
}
159+
#endif
160+
161+
#ifdef GRIN_TRAIT_MASTER_EDGE_MIRROR_PARTITION_LIST
162+
GRIN_PARTITION_LIST grin_get_master_edge_mirror_partition_list(GRIN_GRAPH g,
163+
GRIN_EDGE e) {
164+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
165+
auto pid = _g->GetMasterPartitionIdFromEdgeGid(e);
166+
if (pid != _g->GetPartitionId())
167+
return GRIN_NULL_PARTITION_LIST;
168+
auto pl = new GRIN_PARTITION_LIST_T();
169+
for (size_t i = 0; i < _g->GetPartitionNum(); ++i) {
170+
if (i != pid)
171+
pl->push_back(i);
172+
}
173+
return pl;
174+
}
175+
#endif
176+
177+
#ifdef GRIN_TRAIT_MIRROR_EDGE_MIRROR_PARTITION_LIST
178+
GRIN_PARTITION_LIST grin_get_mirror_edge_mirror_partition_list(GRIN_GRAPH g,
179+
GRIN_EDGE e) {
180+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
181+
auto pid = _g->GetMasterPartitionIdFromEdgeGid(e);
182+
if (pid == _g->GetPartitionId())
183+
return GRIN_NULL_PARTITION_LIST;
184+
auto pl = new GRIN_PARTITION_LIST_T();
185+
for (size_t i = 0; i < _g->GetPartitionNum(); ++i) {
186+
if (i != pid)
187+
pl->push_back(i);
188+
}
189+
return pl;
190+
}
191+
#endif
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
/** Copyright 2020 Alibaba Group Holding Limited.
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License.
14+
*/
15+
16+
#include "src/predefine.h"
17+
// GRIN headers
18+
#include "partition/topology.h"
19+
20+
#if defined(GRIN_TRAIT_SELECT_MASTER_FOR_VERTEX_LIST) && \
21+
!defined(GRIN_WITH_VERTEX_PROPERTY)
22+
GRIN_VERTEX_LIST grin_get_vertex_list_select_master(GRIN_GRAPH);
23+
24+
GRIN_VERTEX_LIST grin_get_vertex_list_select_mirror(GRIN_GRAPH);
25+
#endif
26+
27+
#if defined(GRIN_TRAIT_SELECT_MASTER_FOR_VERTEX_LIST) && \
28+
defined(GRIN_WITH_VERTEX_PROPERTY)
29+
GRIN_VERTEX_LIST grin_get_vertex_list_by_type_select_master(
30+
GRIN_GRAPH g, GRIN_VERTEX_TYPE vtype) {
31+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
32+
return new GRIN_VERTEX_LIST_T(vtype, ONE_PARTITION, _g->GetPartitionId());
33+
}
34+
35+
GRIN_VERTEX_LIST grin_get_vertex_list_by_type_select_mirror(
36+
GRIN_GRAPH g, GRIN_VERTEX_TYPE vtype) {
37+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
38+
return new GRIN_VERTEX_LIST_T(vtype, ALL_BUT_ONE_PARTITION,
39+
_g->GetPartitionId());
40+
}
41+
#endif
42+
43+
#if defined(GRIN_TRAIT_SELECT_PARTITION_FOR_VERTEX_LIST) && \
44+
!defined(GRIN_WITH_VERTEX_PROPERTY)
45+
GRIN_VERTEX_LIST grin_get_vertex_list_select_partition(GRIN_GRAPH,
46+
GRIN_PARTITION);
47+
#endif
48+
49+
#if defined(GRIN_TRAIT_SELECT_PARTITION_FOR_VERTEX_LIST) && \
50+
defined(GRIN_WITH_VERTEX_PROPERTY)
51+
GRIN_VERTEX_LIST grin_get_vertex_list_by_type_select_partition(
52+
GRIN_GRAPH g, GRIN_VERTEX_TYPE vtype, GRIN_PARTITION p) {
53+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
54+
if (p >= _g->GetPartitionNum()) {
55+
return GRIN_NULL_VERTEX_LIST;
56+
}
57+
return new GRIN_VERTEX_LIST_T(vtype, ONE_PARTITION, p);
58+
}
59+
#endif
60+
61+
#if defined(GRIN_TRAIT_SELECT_MASTER_FOR_EDGE_LIST) && \
62+
!defined(GRIN_WITH_EDGE_PROPERTY)
63+
GRIN_EDGE_LIST grin_get_edge_list_select_master(GRIN_GRAPH);
64+
65+
GRIN_EDGE_LIST grin_get_edge_list_select_mirror(GRIN_GRAPH);
66+
#endif
67+
68+
#if defined(GRIN_TRAIT_SELECT_MASTER_FOR_EDGE_LIST) && \
69+
defined(GRIN_WITH_EDGE_PROPERTY)
70+
GRIN_EDGE_LIST grin_get_edge_list_by_type_select_master(GRIN_GRAPH g,
71+
GRIN_EDGE_TYPE etype) {
72+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
73+
return new GRIN_EDGE_LIST_T(etype, ONE_PARTITION, _g->GetPartitionId());
74+
}
75+
76+
GRIN_EDGE_LIST grin_get_edge_list_by_type_select_mirror(GRIN_GRAPH g,
77+
GRIN_EDGE_TYPE etype) {
78+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
79+
return new GRIN_EDGE_LIST_T(etype, ALL_BUT_ONE_PARTITION,
80+
_g->GetPartitionId());
81+
}
82+
#endif
83+
84+
#if defined(GRIN_TRAIT_SELECT_PARTITION_FOR_EDGE_LIST) && \
85+
!defined(GRIN_WITH_EDGE_PROPERTY)
86+
GRIN_EDGE_LIST grin_get_edge_list_select_partition(GRIN_GRAPH, GRIN_PARTITION);
87+
#endif
88+
89+
#if defined(GRIN_TRAIT_SELECT_PARTITION_FOR_EDGE_LIST) && \
90+
defined(GRIN_WITH_EDGE_PROPERTY)
91+
GRIN_EDGE_LIST grin_get_edge_list_by_type_select_partition(GRIN_GRAPH g,
92+
GRIN_EDGE_TYPE etype,
93+
GRIN_PARTITION p) {
94+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
95+
if (p >= _g->GetPartitionNum()) {
96+
return GRIN_NULL_EDGE_LIST;
97+
}
98+
return new GRIN_EDGE_LIST_T(etype, ONE_PARTITION, p);
99+
}
100+
#endif
101+
102+
#if defined(GRIN_TRAIT_SELECT_MASTER_NEIGHBOR_FOR_ADJACENT_LIST) && \
103+
!defined(GRIN_WITH_VERTEX_PROPERTY)
104+
GRIN_ADJACENT_LIST grin_get_adjacent_list_select_master_neighbor(GRIN_GRAPH,
105+
GRIN_DIRECTION,
106+
GRIN_VERTEX);
107+
108+
GRIN_ADJACENT_LIST grin_get_adjacent_list_select_mirror_neighbor(GRIN_GRAPH,
109+
GRIN_DIRECTION,
110+
GRIN_VERTEX);
111+
#endif
112+
113+
#if defined(GRIN_TRAIT_SELECT_MASTER_NEIGHBOR_FOR_ADJACENT_LIST) && \
114+
defined(GRIN_WITH_VERTEX_PROPERTY)
115+
GRIN_ADJACENT_LIST grin_get_adjacent_list_by_edge_type_select_master_neighbor(
116+
GRIN_GRAPH g, GRIN_DIRECTION d, GRIN_VERTEX v, GRIN_EDGE_TYPE etype) {
117+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
118+
auto vtype = DEMO_STORAGE_NAMESPACE::get_type_id_from_gid(v);
119+
auto vid = DEMO_STORAGE_NAMESPACE::get_id_from_gid(v);
120+
return new GRIN_ADJACENT_LIST_T(vtype, vid, d, etype, ONE_PARTITION,
121+
_g->GetPartitionId());
122+
}
123+
124+
GRIN_ADJACENT_LIST grin_get_adjacent_list_by_edge_type_select_mirror_neighbor(
125+
GRIN_GRAPH g, GRIN_DIRECTION d, GRIN_VERTEX v, GRIN_EDGE_TYPE etype) {
126+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
127+
auto vtype = DEMO_STORAGE_NAMESPACE::get_type_id_from_gid(v);
128+
auto vid = DEMO_STORAGE_NAMESPACE::get_id_from_gid(v);
129+
return new GRIN_ADJACENT_LIST_T(vtype, vid, d, etype, ALL_BUT_ONE_PARTITION,
130+
_g->GetPartitionId());
131+
}
132+
#endif
133+
134+
#if defined(GRIN_TRAIT_SELECT_NEIGHBOR_PARTITION_FOR_ADJACENT_LIST) && \
135+
!defined(GRIN_WITH_VERTEX_PROPERTY)
136+
GRIN_ADJACENT_LIST grin_get_adjacent_list_select_partition_neighbor(
137+
GRIN_GRAPH, GRIN_DIRECTION, GRIN_VERTEX, GRIN_PARTITION);
138+
#endif
139+
140+
#if defined(GRIN_TRAIT_SELECT_NEIGHBOR_PARTITION_FOR_ADJACENT_LIST) && \
141+
defined(GRIN_WITH_VERTEX_PROPERTY)
142+
GRIN_ADJACENT_LIST
143+
grin_get_adjacent_list_by_edge_type_select_partition_neighbor(
144+
GRIN_GRAPH g, GRIN_DIRECTION d, GRIN_VERTEX v, GRIN_EDGE_TYPE etype,
145+
GRIN_PARTITION p) {
146+
auto _g = static_cast<GRIN_GRAPH_T*>(g);
147+
if (p >= _g->GetPartitionNum()) {
148+
return GRIN_NULL_ADJACENT_LIST;
149+
}
150+
auto vtype = DEMO_STORAGE_NAMESPACE::get_type_id_from_gid(v);
151+
auto vid = DEMO_STORAGE_NAMESPACE::get_id_from_gid(v);
152+
return new GRIN_ADJACENT_LIST_T(vtype, vid, d, etype, ONE_PARTITION, p);
153+
}
154+
#endif

0 commit comments

Comments
 (0)