blob: ce33eecc35cbe1b6e53c0bdf7b332ae8fd7eda2c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.common.sets.mapping;
import java.util.Iterator;
import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
/**
* A type of axiomatic set mapping that operates injectively on the input
* set to create its result set. Note that the injection (one-to-oneness)
* of the mapping is based on Java objects and not on the value of the object.
* Therefore, the result set is not guaranteed to be injective on the basis
* of value.
*
* For example, consider a set of integers:
*
* X = {new Integer(4), new Integer(6), new Integer(9)}
*
* an ObjectInjectiveSetMapping may be defined that maps this set
* to a result based on:
*
* map(x) = new Boolean(x < 8) for all x in X
*
* An ObjectiveInjectiveSetMapping result set would look like this:
*
* map(X) = {new Boolean(true), new Boolean(true), new Boolean(false)}
*
* Note that boolean TRUE maps twice, so based on the value of the set members,
* the mapping is not injective. However, each Java object in X maps to a
* distinct Java object in map(X)
*
* This interface should not be implemented by clients. Clients should
* sub-class AbstractObjectInjectiveSetMapping to avoid future API breakage.
*
* <p><b>Provisional API - subject to change</b></p>
*
* @author cbateman
*
*/
public interface ObjectInjectiveSetMapping extends AxiomaticSetMapping
{
/**
* This method optimizes the case where a client wants to apply some
* mapping or constraint to each element of a set until a particular
* condition applies and then stop.
*
* Mapping's that implement this
* interface should generally implement their map(set) method as:
*
* for (Iterator it = mapIterator(set); it.hasNext();)
* {
* result.add(doMapping(it.next));
* }
*
* @param set
* @return an iterator that allows a client to apply the mapping
* one element of set at a time. The iterator is immutable and should
* throw UnsupportedOperationException if remove() is called.
*/
public Iterator mapIterator(AxiomaticSet set);
}