1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.giraph.utils;
20
21 import com.google.common.collect.Iterables;
22 import org.apache.giraph.edge.Edge;
23 import org.apache.giraph.edge.EdgeFactory;
24 import org.apache.giraph.edge.OutEdges;
25 import org.apache.hadoop.conf.Configuration;
26 import org.apache.hadoop.io.Writable;
27 import org.apache.hadoop.io.WritableComparable;
28 import org.apache.hadoop.io.WritableUtils;
29
30 import java.util.ArrayList;
31 import java.util.Collection;
32 import java.util.Collections;
33 import java.util.Comparator;
34 import java.util.Iterator;
35
36
37
38
39 public class EdgeIterables {
40
41 private EdgeIterables() { }
42
43
44
45
46
47
48
49
50
51
52
53 public static <I extends WritableComparable, E extends WritableComparable>
54 boolean equals(Iterable<Edge<I, E>> e1, Iterable<Edge<I, E>> e2) {
55 Iterator<Edge<I, E>> i1 = e1.iterator();
56 Iterator<Edge<I, E>> i2 = e2.iterator();
57 while (i1.hasNext()) {
58 if (!i2.hasNext()) {
59 return false;
60 }
61 if (!EdgeComparator.equal(i1.next(), i2.next())) {
62 return false;
63 }
64 }
65 return true;
66 }
67
68
69
70
71
72
73
74
75
76
77
78
79 public static <I extends WritableComparable, E extends WritableComparable>
80 ArrayList<Edge<I, E>> copy(Iterable<Edge<I, E>> edges) {
81 Configuration conf = new Configuration();
82 ArrayList<Edge<I, E>> edgeList =
83 new ArrayList<Edge<I, E>>(Iterables.size(edges));
84 for (Edge<I, E> edge : edges) {
85 edgeList.add(EdgeFactory.create(
86 WritableUtils.clone(edge.getTargetVertexId(), conf),
87 WritableUtils.clone(edge.getValue(), conf)));
88 }
89 return edgeList;
90 }
91
92
93
94
95
96
97
98
99
100
101
102 public static <I extends WritableComparable, E extends WritableComparable>
103 boolean sameEdges(Iterable<Edge<I, E>> e1, Iterable<Edge<I, E>> e2) {
104 ArrayList<Edge<I, E>> edgeList1 = copy(e1);
105 ArrayList<Edge<I, E>> edgeList2 = copy(e2);
106 Comparator<Edge<I, E>> edgeComparator = new EdgeComparator<I, E>();
107 Collections.sort(edgeList1, edgeComparator);
108 Collections.sort(edgeList2, edgeComparator);
109 return equals(edgeList1, edgeList2);
110 }
111
112
113
114
115
116
117
118
119
120
121
122 public static <I extends WritableComparable, E extends Writable> int size(
123 Iterable<Edge<I, E>> edges) {
124 if (edges instanceof OutEdges) {
125 return ((OutEdges) edges).size();
126 } else {
127 return Iterables.size(edges);
128 }
129 }
130
131
132
133
134
135
136
137
138
139
140
141
142
143 public static <I extends WritableComparable, E extends Writable>
144 void initialize(OutEdges<I, E> edges, Iterable<Edge<I, E>> edgesIterable) {
145 if (edgesIterable instanceof OutEdges ||
146 edgesIterable instanceof Collection) {
147 edges.initialize(size(edgesIterable));
148 } else {
149 edges.initialize();
150 }
151 for (Edge<I, E> edge : edgesIterable) {
152 edges.add(edge);
153 }
154 if (edges instanceof Trimmable) {
155 ((Trimmable) edges).trim();
156 }
157 }
158 }