This project has retired. For details please refer to its Attic page.
ByteStructVertexIdDataIterator xref
View Javadoc

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.utils;
20  
21  import org.apache.hadoop.io.WritableComparable;
22  
23  import java.io.IOException;
24  import javax.annotation.concurrent.NotThreadSafe;
25  
26  /**
27   * Special iterator that reuses vertex ids and data objects so that the
28   * lifetime of the object is only until next() is called.
29   *
30   * Vertex id ownership can be released if desired through
31   * releaseCurrentVertexId().  This optimization allows us to cut down
32   * on the number of objects instantiated and garbage collected.
33   *
34   * @param <I> vertexId type parameter
35   * @param <T> vertexData type parameter
36   */
37  @NotThreadSafe
38  public class ByteStructVertexIdDataIterator<I extends WritableComparable, T>
39    extends ByteStructVertexIdIterator<I> implements VertexIdDataIterator<I, T> {
40    /** VertexIdData to iterate over */
41    protected AbstractVertexIdData<I, T> vertexIdData;
42    /** Serialized size of the message object in bytestore */
43    protected int dataSize;
44    /** Current data. */
45    private T data;
46  
47    /**
48     * Constructor
49     *
50     * @param vertexIdData vertexIdData
51     */
52    public ByteStructVertexIdDataIterator(
53      AbstractVertexIdData<I, T> vertexIdData) {
54      super(vertexIdData.extendedDataOutput, vertexIdData.getConf());
55      this.vertexIdData = vertexIdData;
56    }
57  
58    @Override
59    public void next() {
60      if (vertexId == null) {
61        vertexId = vertexIdData.getConf().createVertexId();
62      }
63      if (data == null) {
64        data = vertexIdData.createData();
65      }
66      try {
67        vertexId.readFields(extendedDataInput);
68        int initial = extendedDataInput.getPos();
69        vertexIdData.readData(extendedDataInput, data);
70        dataSize = extendedDataInput.getPos() - initial;
71      } catch (IOException e) {
72        throw new IllegalStateException("next: IOException", e);
73      }
74    }
75  
76    @Override
77    public int getCurrentDataSize() {
78      return dataSize;
79    }
80  
81    @Override
82    public T getCurrentData() {
83      return data;
84    }
85  
86    @Override
87    public T releaseCurrentData() {
88      T releasedData = data;
89      data = null;
90      return releasedData;
91    }
92  }