325N/A * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 325N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 325N/A * This code is free software; you can redistribute it and/or modify it 325N/A * under the terms of the GNU General Public License version 2 only, as 325N/A * published by the Free Software Foundation. Oracle designates this 325N/A * particular file as subject to the "Classpath" exception as provided 325N/A * by Oracle in the LICENSE file that accompanied this code. 325N/A * This code is distributed in the hope that it will be useful, but WITHOUT 325N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 325N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 325N/A * version 2 for more details (a copy is included in the LICENSE file that 325N/A * accompanied this code). 325N/A * You should have received a copy of the GNU General Public License version 325N/A * 2 along with this work; if not, write to the Free Software Foundation, 325N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 325N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 325N/A * or visit www.oracle.com if you need additional information or have any 325N/A * Clones the whole pipeline. 325N/A * Since {@link Tube}s may form an arbitrary directed graph, someone needs 325N/A * to keep track of isomorphism for a clone to happen correctly. This class 325N/A * @author Kohsuke Kawaguchi 325N/A // Pipe to pipe, or tube to tube 325N/A * Invoked by a client of a tube to clone the whole pipeline. 325N/A * {@link Tube}s implementing the {@link Tube#copy(TubeCloner)} method 325N/A * shall use {@link #copy(Tube)} method. 325N/A * The entry point of a pipeline to be copied. must not be null. 325N/A * The cloned pipeline. Always non-null. 325N/A // we often want to downcast TubeCloner to PipeCloner, 325N/A // so let's create PipeCloner to make that possible 325N/A * Invoked by a {@link Tube#copy(TubeCloner)} implementation 325N/A * to copy a reference to another pipe. 325N/A * This method is for {@link Tube} implementations, not for users. 325N/A * If the given tube is already copied for this cloning episode, 325N/A * this method simply returns that reference. Otherwise it copies 325N/A * a tube, make a note, and returns a copied tube. This additional 325N/A * step ensures that a graph is cloned isomorphically correctly. 325N/A * (Think about what happens when a graph is A->B, A->C, B->D, and C->D 325N/A * if you don't have this step.) 325N/A * The tube to be copied. 325N/A * The cloned tube. Always non-null. 325N/A // the pipe must puts its copy to the map by itself 325N/A assert master2copy.
get(t)==r :
"the tube must call the add(...) method to register itself before start copying other pipes, but "+t +
" hasn't done so";
325N/A * This method must be called from within the copy constructor 325N/A * to notify that the copy was created. 325N/A * When your pipe has references to other pipes, 325N/A * it's particularly important to call this method 325N/A * before you start copying the pipes you refer to, 325N/A * or else there's a chance of inifinite loop.