/*****************************************************************************
 * Copyright (c) 2016 CEA LIST.
 *
 *
 * 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:
 *  David LOPEZ BETANCUR (CEA LIST)
 *  Sebastien REVOL (CEA LIST)
 *
 *****************************************************************************/
package org.eclipse.papyrus.moka.xygraph.mapping.util;

import java.util.HashMap;
import java.util.Set;

public class LUT<K, V> {
	private HashMap<K, V> key2Value;
	private HashMap<V, K> value2Key;
	
	public LUT(){
		key2Value = new HashMap<>();
		value2Key = new HashMap<>();
	}
	
	public void put(K key, V value){
		key2Value.put(key, value);
		value2Key.put(value, key);
	}
	
	public V getValueOf(K key){
		return key2Value.get(key);
	}
	
	public K getKeyOf(V value){
		return value2Key.get(value);
	}
	public Set<V> valueSet(){	
		return value2Key.keySet();
	}
	
	public Set<K> keySet(){
		return key2Value.keySet();
	}

	public V remove(K key) {
		V val = key2Value.remove(key);
		value2Key.remove(val);
		return val;
	}

	public void dispose() {
		key2Value.clear();
		value2Key.clear();
	}
	
}
