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 package org.apache.giraph.types.ops.collections;
19
20 import java.io.DataInput;
21 import java.io.DataOutput;
22 import java.io.IOException;
23
24 import org.apache.giraph.function.Consumer;
25 import org.apache.giraph.function.Predicate;
26 import org.apache.giraph.types.ops.PrimitiveTypeOps;
27 import org.apache.hadoop.io.Writable;
28
29 /**
30 * Collection over mutable elements, which are probably
31 * internally stored differently/efficiently, and are accessed
32 * through methods providing "return" value.
33 *
34 * @param <T> Element type
35 */
36 public interface WCollection<T> extends Writable {
37 /** Removes all of the elements from this */
38 void clear();
39 /**
40 * Number of elements in this list
41 * @return size
42 */
43 int size();
44 /**
45 * Capacity of currently allocated memory
46 * @return capacity
47 */
48 int capacity();
49 /**
50 * Forces allocated memory to hold exactly N values
51 * @param n new capacity
52 */
53 void setCapacity(int n);
54 /**
55 * Add value to the collection
56 * @param value Value
57 */
58 void addW(T value);
59 /**
60 * TypeOps for type of elements this object holds
61 * @return TypeOps
62 */
63 PrimitiveTypeOps<T> getElementTypeOps();
64 /**
65 * Fast iterator over collection objects, which doesn't allocate new
66 * element for each returned element, and can be iterated multiple times
67 * using reset().
68 *
69 * Object returned by next() is only valid until next() is called again,
70 * because it is reused.
71 *
72 * @return RessettableIterator
73 */
74 ResettableIterator<T> fastIteratorW();
75 /**
76 * Fast iterator over collection objects, which doesn't allocate new
77 * element for each returned element, and can be iterated multiple times
78 * using reset().
79 *
80 * Each call to next() populates passed value.
81 *
82 * @param iterationValue Value that call to next() will populate
83 * @return RessettableIterator
84 */
85 ResettableIterator<T> fastIteratorW(T iterationValue);
86 /**
87 * Traverse all elements of the collection, calling given function on each
88 * element. Passed values are valid only during the call to the passed
89 * function, so data needs to be consumed during the function.
90 *
91 * @param f Function to call on each element.
92 */
93 void fastForEachW(Consumer<T> f);
94 /**
95 * Traverse all elements of the collection, calling given function on each
96 * element, or until predicate returns false.
97 * Passed values are valid only during the call to the passed
98 * function, so data needs to be consumed during the function.
99 *
100 * @param f Function to call on each element.
101 * @return true if the predicate returned true for all elements,
102 * false if it returned false for some element.
103 */
104 boolean fastForEachWhileW(Predicate<T> f);
105 /**
106 * Write elements to the DataOutput stream, without the size itself.
107 * Can be read back using readElements function.
108 *
109 * @param out Data output
110 */
111 void writeElements(DataOutput out) throws IOException;
112 /**
113 * Read elements from DataInput stream, with passing the size instead
114 * reading it from the stream.
115 *
116 * @param in Data Input
117 * @param size Number of elements
118 */
119 void readElements(DataInput in, int size) throws IOException;
120 }