001/*
002 * Copyright (c) 2016-2017 Chris K Wensel <chris@wensel.net>. All Rights Reserved.
003 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved.
004 *
005 * Project and contact information: http://www.cascading.org/
006 *
007 * This file is part of the Cascading project.
008 *
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 *
013 *     http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 */
021
022package cascading.operation;
023
024import cascading.tuple.Fields;
025import cascading.tuple.TupleEntry;
026import cascading.tuple.TupleEntryCollector;
027
028/** Interface FunctionCall provides access to the current {@link Function} invocation arguments. */
029public interface FunctionCall<C> extends OperationCall<C>
030  {
031  /**
032   * Returns {@link TupleEntry} of argument values.
033   * <p>
034   * Note that the returned TupleEntry should not be cached (stored in a Collection), nor should the underlying Tuple
035   * instance. Where possible Cascading will re-use both TupleEntry and Tuple instances.
036   * <p>
037   * To get a safe copy that can be cached, use {@link TupleEntry#getTupleCopy()}.
038   *
039   * @return TupleEntry
040   */
041  TupleEntry getArguments();
042
043  /**
044   * Return the resolved {@link Fields} declared by the current {@link Operation}.
045   *
046   * @return Fields
047   */
048  Fields getDeclaredFields();
049
050  /**
051   * Returns the {@link cascading.tuple.TupleEntryCollector} used to emit result values.
052   *
053   * @return TupleCollector
054   */
055  TupleEntryCollector getOutputCollector();
056  }