下面列出了java.util.ArrayDeque#clone ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Instantiates the referenced template using the given instantiation reference.
*
* @param instantiationReferenceStack Stack of instantiations leading to this instantiation.
* @param instantiationPackage Package where the template should be instantiated.
*
* @return Instantiated template.
*/
TemplatableType instantiate(ArrayDeque<TypeReference> instantiationReferenceStack,
Package instantiationPackage)
{
final TypeReference instantiationReference = instantiationReferenceStack.peek();
final List<TemplateArgument> templateArguments = instantiationReference.getTemplateArguments();
if (templateParameters.size() != templateArguments.size())
{
throw new ParserException(instantiationReference,
"Wrong number of template arguments for template '" + getName() + "'! Expecting " +
templateParameters.size() + ", got " + templateArguments.size() + "!");
}
TemplatableType instantiation = instantiateImpl(templateArguments, instantiationPackage);
instantiation.instantiationReferenceStack = instantiationReferenceStack.clone();
instantiation.template = this;
instantiations.add(instantiation);
return instantiation;
}
/**
* A cloned deque has same elements in same order
*/
public void testClone() throws Exception {
ArrayDeque<Integer> x = populatedDeque(SIZE);
ArrayDeque<Integer> y = x.clone();
assertNotSame(y, x);
assertEquals(x.size(), y.size());
assertEquals(x.toString(), y.toString());
assertTrue(Arrays.equals(x.toArray(), y.toArray()));
while (!x.isEmpty()) {
assertFalse(y.isEmpty());
assertEquals(x.remove(), y.remove());
}
assertTrue(y.isEmpty());
}
/**
* The results of emitting records via BroadcastPartitioner or broadcasting records directly are the same,
* that is all the target channels can receive the whole outputs.
*
* @param isBroadcastEmit whether using {@link RecordWriter#broadcastEmit(IOReadableWritable)} or not
*/
private void emitRecordWithBroadcastPartitionerOrBroadcastEmitRecord(boolean isBroadcastEmit) throws Exception {
final int numberOfChannels = 4;
final int bufferSize = 32;
final int numValues = 8;
final int serializationLength = 4;
@SuppressWarnings("unchecked")
final Queue<BufferConsumer>[] queues = new Queue[numberOfChannels];
for (int i = 0; i < numberOfChannels; i++) {
queues[i] = new ArrayDeque<>();
}
final TestPooledBufferProvider bufferProvider = new TestPooledBufferProvider(Integer.MAX_VALUE, bufferSize);
final ResultPartitionWriter partitionWriter = new CollectingPartitionWriter(queues, bufferProvider);
final ChannelSelector selector = new OutputEmitter(ShipStrategyType.BROADCAST, 0);
final RecordWriter<SerializationTestType> writer = RecordWriter.createRecordWriter(partitionWriter, selector, 0, "test");
final RecordDeserializer<SerializationTestType> deserializer = new SpillingAdaptiveSpanningRecordDeserializer<>(
new String[]{ tempFolder.getRoot().getAbsolutePath() });
final ArrayDeque<SerializationTestType> serializedRecords = new ArrayDeque<>();
final Iterable<SerializationTestType> records = Util.randomRecords(numValues, SerializationTestTypeFactory.INT);
for (SerializationTestType record : records) {
serializedRecords.add(record);
if (isBroadcastEmit) {
writer.broadcastEmit(record);
} else {
writer.emit(record);
}
}
final int requiredBuffers = numValues / (bufferSize / (4 + serializationLength));
for (int i = 0; i < numberOfChannels; i++) {
assertEquals(requiredBuffers, queues[i].size());
final ArrayDeque<SerializationTestType> expectedRecords = serializedRecords.clone();
int assertRecords = 0;
for (int j = 0; j < requiredBuffers; j++) {
Buffer buffer = buildSingleBuffer(queues[i].remove());
deserializer.setNextBuffer(buffer);
assertRecords += DeserializationUtils.deserializeRecords(expectedRecords, deserializer);
}
Assert.assertEquals(numValues, assertRecords);
}
}
/**
* The results of emitting records via BroadcastPartitioner or broadcasting records directly are the same,
* that is all the target channels can receive the whole outputs.
*
* @param isBroadcastEmit whether using {@link RecordWriter#broadcastEmit(IOReadableWritable)} or not
*/
private void emitRecordWithBroadcastPartitionerOrBroadcastEmitRecord(boolean isBroadcastEmit) throws Exception {
final int numberOfChannels = 4;
final int bufferSize = 32;
final int numValues = 8;
final int serializationLength = 4;
@SuppressWarnings("unchecked")
final Queue<BufferConsumer>[] queues = new Queue[numberOfChannels];
for (int i = 0; i < numberOfChannels; i++) {
queues[i] = new ArrayDeque<>();
}
final TestPooledBufferProvider bufferProvider = new TestPooledBufferProvider(Integer.MAX_VALUE, bufferSize);
final ResultPartitionWriter partitionWriter = new CollectingPartitionWriter(queues, bufferProvider);
final ChannelSelector selector = new OutputEmitter(ShipStrategyType.BROADCAST, 0);
final RecordWriter<SerializationTestType> writer = new RecordWriterBuilder()
.setChannelSelector(selector)
.setTimeout(0)
.build(partitionWriter);
final RecordDeserializer<SerializationTestType> deserializer = new SpillingAdaptiveSpanningRecordDeserializer<>(
new String[]{ tempFolder.getRoot().getAbsolutePath() });
final ArrayDeque<SerializationTestType> serializedRecords = new ArrayDeque<>();
final Iterable<SerializationTestType> records = Util.randomRecords(numValues, SerializationTestTypeFactory.INT);
for (SerializationTestType record : records) {
serializedRecords.add(record);
if (isBroadcastEmit) {
writer.broadcastEmit(record);
} else {
writer.emit(record);
}
}
final int requiredBuffers = numValues / (bufferSize / (4 + serializationLength));
for (int i = 0; i < numberOfChannels; i++) {
assertEquals(requiredBuffers, queues[i].size());
final ArrayDeque<SerializationTestType> expectedRecords = serializedRecords.clone();
int assertRecords = 0;
for (int j = 0; j < requiredBuffers; j++) {
Buffer buffer = buildSingleBuffer(queues[i].remove());
deserializer.setNextBuffer(buffer);
assertRecords += DeserializationUtils.deserializeRecords(expectedRecords, deserializer);
}
Assert.assertEquals(numValues, assertRecords);
}
}