Coverage Report - org.apache.giraph.graph.Vertex
 
Classes in this File Line Coverage Branch Coverage Complexity
Vertex
N/A
N/A
1
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing, software
 13  
  * distributed under the License is distributed on an "AS IS" BASIS,
 14  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 15  
  * See the License for the specific language governing permissions and
 16  
  * limitations under the License.
 17  
  */
 18  
 
 19  
 package org.apache.giraph.graph;
 20  
 
 21  
 import org.apache.giraph.conf.ImmutableClassesGiraphConfigurable;
 22  
 import org.apache.giraph.edge.Edge;
 23  
 import org.apache.giraph.edge.MutableEdge;
 24  
 import org.apache.hadoop.io.Writable;
 25  
 import org.apache.hadoop.io.WritableComparable;
 26  
 
 27  
 /**
 28  
  * Class which holds vertex id, data and edges.
 29  
  *
 30  
  * @param <I> Vertex id
 31  
  * @param <V> Vertex data
 32  
  * @param <E> Edge data
 33  
  */
 34  
 public interface Vertex<I extends WritableComparable,
 35  
     V extends Writable, E extends Writable> extends
 36  
     ImmutableClassesGiraphConfigurable<I, V, E> {
 37  
   /**
 38  
    * Initialize id, value, and edges.
 39  
    * This method (or the alternative form initialize(id, value)) must be called
 40  
    * after instantiation, unless readFields() is called.
 41  
    *
 42  
    * @param id Vertex id
 43  
    * @param value Vertex value
 44  
    * @param edges Iterable of edges
 45  
    */
 46  
   void initialize(I id, V value, Iterable<Edge<I, E>> edges);
 47  
 
 48  
   /**
 49  
    * Initialize id and value. Vertex edges will be empty.
 50  
    * This method (or the alternative form initialize(id, value, edges))
 51  
    * must be called after instantiation, unless readFields() is called.
 52  
    *
 53  
    * @param id Vertex id
 54  
    * @param value Vertex value
 55  
    */
 56  
   void initialize(I id, V value);
 57  
 
 58  
   /**
 59  
    * Get the vertex id.
 60  
    *
 61  
    * @return My vertex id.
 62  
    */
 63  
   I getId();
 64  
 
 65  
   /**
 66  
    * Get the vertex value (data stored with vertex)
 67  
    *
 68  
    * @return Vertex value
 69  
    */
 70  
   V getValue();
 71  
 
 72  
   /**
 73  
    * Set the vertex data (immediately visible in the computation)
 74  
    *
 75  
    * @param value Vertex data to be set
 76  
    */
 77  
   void setValue(V value);
 78  
 
 79  
   /**
 80  
    * After this is called, the compute() code will no longer be called for
 81  
    * this vertex unless a message is sent to it.  Then the compute() code
 82  
    * will be called once again until this function is called.  The
 83  
    * application finishes only when all vertices vote to halt.
 84  
    */
 85  
   void voteToHalt();
 86  
 
 87  
   /**
 88  
    * Get the number of outgoing edges on this vertex.
 89  
    *
 90  
    * @return the total number of outbound edges from this vertex
 91  
    */
 92  
   int getNumEdges();
 93  
 
 94  
   /**
 95  
    * Get a read-only view of the out-edges of this vertex.
 96  
    * Note: edge objects returned by this iterable may be invalidated as soon
 97  
    * as the next element is requested. Thus, keeping a reference to an edge
 98  
    * almost always leads to undesired behavior.
 99  
    * Accessing the edges with other methods (e.g., addEdge()) during iteration
 100  
    * leads to undefined behavior.
 101  
    *
 102  
    * @return the out edges (sort order determined by subclass implementation).
 103  
    */
 104  
   Iterable<Edge<I, E>> getEdges();
 105  
 
 106  
   /**
 107  
    * Set the outgoing edges for this vertex.
 108  
    *
 109  
    * @param edges Iterable of edges
 110  
    */
 111  
   void setEdges(Iterable<Edge<I, E>> edges);
 112  
 
 113  
   /**
 114  
    * Get an iterable of out-edges that can be modified in-place.
 115  
    * This can mean changing the current edge value or removing the current edge
 116  
    * (by using the iterator version).
 117  
    * Note: accessing the edges with other methods (e.g., addEdge()) during
 118  
    * iteration leads to undefined behavior.
 119  
    *
 120  
    * @return An iterable of mutable out-edges
 121  
    */
 122  
   Iterable<MutableEdge<I, E>> getMutableEdges();
 123  
 
 124  
   /**
 125  
    * Return the value of the first edge with the given target vertex id,
 126  
    * or null if there is no such edge.
 127  
    * Note: edge value objects returned by this method may be invalidated by
 128  
    * the next call. Thus, keeping a reference to an edge value almost always
 129  
    * leads to undesired behavior.
 130  
    *
 131  
    * @param targetVertexId Target vertex id
 132  
    * @return Edge value (or null if missing)
 133  
    */
 134  
   E getEdgeValue(I targetVertexId);
 135  
 
 136  
   /**
 137  
    * If an edge to the target vertex exists, set it to the given edge value.
 138  
    * This only makes sense with strict graphs.
 139  
    *
 140  
    * @param targetVertexId Target vertex id
 141  
    * @param edgeValue Edge value
 142  
    */
 143  
   void setEdgeValue(I targetVertexId, E edgeValue);
 144  
 
 145  
   /**
 146  
    * Get an iterable over the values of all edges with the given target
 147  
    * vertex id. This only makes sense for multigraphs (i.e. graphs with
 148  
    * parallel edges).
 149  
    * Note: edge value objects returned by this method may be invalidated as
 150  
    * soon as the next element is requested. Thus, keeping a reference to an
 151  
    * edge value almost always leads to undesired behavior.
 152  
    *
 153  
    * @param targetVertexId Target vertex id
 154  
    * @return Iterable of edge values
 155  
    */
 156  
   Iterable<E> getAllEdgeValues(final I targetVertexId);
 157  
 
 158  
   /**
 159  
    * Add an edge for this vertex (happens immediately)
 160  
    *
 161  
    * @param edge Edge to add
 162  
    */
 163  
   void addEdge(Edge<I, E> edge);
 164  
 
 165  
   /**
 166  
    * Removes all edges pointing to the given vertex id.
 167  
    *
 168  
    * @param targetVertexId the target vertex id
 169  
    */
 170  
   void removeEdges(I targetVertexId);
 171  
 
 172  
   /**
 173  
    * If a {@link org.apache.giraph.edge.MutableEdgesWrapper} was used to
 174  
    * provide a mutable iterator, copy any remaining edges to the new
 175  
    * {@link org.apache.giraph.edge.OutEdges} data structure and keep a direct
 176  
    * reference to it (thus discarding the wrapper).
 177  
    * Called by the Giraph infrastructure after computation.
 178  
    */
 179  
   void unwrapMutableEdges();
 180  
 
 181  
   /**
 182  
    * Re-activate vertex if halted.
 183  
    */
 184  
   void wakeUp();
 185  
 
 186  
   /**
 187  
    * Is this vertex done?
 188  
    *
 189  
    * @return True if halted, false otherwise.
 190  
    */
 191  
   boolean isHalted();
 192  
 }
 193