blob: 4cd2f8edba0a321a2488d1cabfbea5b21854ce2b [file] [log] [blame]
/**
* Copyright (c) 2011-2012 Eclipse contributors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*/
package org.eclipse.emf.ecore.xcore.lib;
import org.eclipse.emf.common.util.ECollections;
import org.eclipse.emf.common.util.EMap;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.Functions.Function2;
import org.eclipse.xtext.xbase.lib.MapExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure2;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure3;
public class XcoreEMapExtensions
{
/**
* Applies the given the procedure to each {@link java.util.Map.Entry key-value pair} of the given map.
* The procedure takes the key and the value as arguments.
*
* @param map the map. May not be <code>null</code>.
* @param procedure the procedure. May not be <code>null</code>.
*/
public static <K, V> void forEach(EMap<K, V> map, Procedure2<? super K, ? super V> procedure)
{
MapExtensions.forEach(map.map(), procedure);
}
/**
* Applies the given the procedure to each {@link java.util.Map.Entry key-value pair} of the given map.
* The procedure takes the key, the value, and a loop counter as arguments.
* If the counter would overflow,
* {@link Integer#MAX_VALUE} is returned for all subsequent pairs.
* The first pair is at index zero.
*
* @param map the map. May not be <code>null</code>.
* @param procedure the procedure. May not be <code>null</code>.
*/
public static <K, V> void forEach(EMap<K, V> map, Procedure3<? super K, ? super V, ? super Integer> procedure)
{
MapExtensions.forEach(map.map(), procedure);
}
/**
* Returns a filtered view of the map.
* Changes to one affect the other.
* The mapping is done lazily, i.e.,
* subsequent access to the values in the view will repeatedly apply the predicate.
* Characteristics of the map, such as iteration order, are left intact.
* Changes in the map are reflected in the view.
* The view supports removal, if the map supports removal.
*
* @param map the original map. May not be <code>null</code>.
* @param predicate the predicate for filtering. May not be <code>null</code>.
* @return a filtered view the map. Never <code>null</code>.
*/
public static <K, V> EMap<K, V> filter(EMap<K, V> map, final Function2<? super K, ? super V, Boolean> predicate)
{
return ECollections.asEMap(MapExtensions.filter(map.map(), predicate));
}
/**
* Returns a transformed view of the map that applies the given the transformation to each value of map.
* The mapping is done lazily, i.e.,
* each access of a value in the map will repeatedly apply the transformation.
* Characteristics of the map, such as iteration order, are preserved.
* Changes to the original map are reflected in the view.
* The view supports removal, if the map supports removal.</p>
*
* @param map the map to be transformed. May not be <code>null</code>.
* @param transformation the transformation to apply. May not be <code>null</code>.
* @return a map with the same keys but with transformed values. Never <code>null</code>.
*/
public static <K, V1, V2> EMap<K, V2> mapValues(EMap<K, V1> map, Function1<? super V1, V2> transformation)
{
return ECollections.asEMap(MapExtensions.mapValues(map.map(), transformation));
}
}