1289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/* 2289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 3289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 5289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This code is free software; you can redistribute it and/or modify it 6289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * under the terms of the GNU General Public License version 2 only, as 7289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * published by the Free Software Foundation. 8289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 9289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This code is distributed in the hope that it will be useful, but WITHOUT 10289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * version 2 for more details (a copy is included in the LICENSE file that 13289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * accompanied this code). 14289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 15289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * You should have received a copy of the GNU General Public License version 16289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 2 along with this work; if not, write to the Free Software Foundation, 17289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 19289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * or visit www.oracle.com if you need additional information or have any 21289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * questions. 22289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 23289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinpackage org.openjdk.testlib.java.util.stream; 24289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 25289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.AbstractPipeline; 26289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.DoublePipeline; 27289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.IntPipeline; 28289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.LongPipeline; 29289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.ReferencePipeline; 30289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.StreamShape; 31289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.Sink; 32289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 33289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/** 34289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * The base type of a stateless test operation 35289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 36289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkininterface StatelessTestOp<E_IN, E_OUT> extends IntermediateTestOp<E_IN, E_OUT> { 37289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 38289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings({"rawtypes", "unchecked"}) 39289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> AbstractPipeline chain(AbstractPipeline upstream, 40289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin StatelessTestOp<?, T> op) { 41289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin int flags = op.opGetFlags(); 42289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin switch (op.outputShape()) { 43289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin case REFERENCE: 44289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return new ReferencePipeline.StatelessOp<Object, T>(upstream, op.inputShape(), flags) { 45289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 46289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public Sink opWrapSink(int flags, Sink<T> sink) { 47289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return op.opWrapSink(flags, isParallel(), sink); 48289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 49289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 50289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin case INT_VALUE: 51289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return new IntPipeline.StatelessOp<Object>(upstream, op.inputShape(), flags) { 52289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 53289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public Sink opWrapSink(int flags, Sink sink) { 54289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return op.opWrapSink(flags, isParallel(), sink); 55289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 56289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 57289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin case LONG_VALUE: 58289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return new LongPipeline.StatelessOp<Object>(upstream, op.inputShape(), flags) { 59289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 60289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public Sink opWrapSink(int flags, Sink sink) { 61289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return op.opWrapSink(flags, isParallel(), sink); 62289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 63289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 64289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin case DOUBLE_VALUE: 65289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return new DoublePipeline.StatelessOp<Object>(upstream, op.inputShape(), flags) { 66289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 67289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public Sink opWrapSink(int flags, Sink sink) { 68289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return op.opWrapSink(flags, isParallel(), sink); 69289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 70289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 71289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin default: throw new IllegalStateException(op.outputShape().toString()); 72289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 73289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 74289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 75289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin default StreamShape inputShape() { return StreamShape.REFERENCE; } 76289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 77289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin default StreamShape outputShape() { return StreamShape.REFERENCE; } 78289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 79289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin default int opGetFlags() { return 0; } 80289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 81289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Sink<E_IN> opWrapSink(int flags, boolean parallel, Sink<E_OUT> sink); 82289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin} 83289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 84