All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jolie.lang.parse.VariablePathSet Maven / Gradle / Ivy

/***************************************************************************
 *   Copyright (C) 2011 by Fabrizio Montesi           *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as       *
 *   published by the Free Software Foundation; either version 2 of the    *
 *   License, or (at your option) any later version.                       *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU Library General Public     *
 *   License along with this program; if not, write to the                 *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 *                                                                         *
 *   For details about the authors of this software, see the AUTHORS file. *
 ***************************************************************************/

package jolie.lang.parse;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import jolie.lang.parse.ast.VariablePathNode;

/**
 *
 * @author Fabrizio Montesi
 */
public class VariablePathSet< T extends VariablePathNode > implements Set< T > {
	private final List< T > elements = new ArrayList<>();

	@Override
	public int size() {
		return elements.size();
	}

	@Override
	public boolean isEmpty() {
		return elements.isEmpty();
	}

	@Override
	public boolean contains( Object o ) {
		if( o instanceof VariablePathNode ) {
			VariablePathNode path = (VariablePathNode) o;
			for( VariablePathNode element : elements ) {
				if( path.isEquivalentTo( element ) ) {
					return true;
				}
			}
		}

		return false;
	}

	@Override
	public Iterator< T > iterator() {
		return elements.iterator();
	}

	@Override
	public Object[] toArray() {
		return elements.toArray();
	}

	@Override
	public < K > K[] toArray( K[] a ) {
		return elements.toArray( a );
	}

	@Override
	public boolean add( T e ) {
		for( VariablePathNode element : elements ) {
			if( e.isEquivalentTo( element ) ) {
				return false;
			}
		}
		elements.add( e );
		return true;
	}

	public T getContained( VariablePathNode e ) {
		for( T element : elements ) {
			if( e.isEquivalentTo( element ) ) {
				return element;
			}
		}
		return null;
	}

	@Override
	public boolean remove( Object o ) {
		if( o instanceof VariablePathNode ) {
			VariablePathNode path = (VariablePathNode) o;

			for( int i = 0; i < elements.size(); i++ ) {
				if( path.isEquivalentTo( elements.get( i ) ) ) {
					elements.remove( i );
					return true;
				}
			}
		}

		return false;
	}

	@Override
	public boolean containsAll( Collection< ? > c ) {
		for( Object o : c ) {
			if( !contains( o ) ) {
				return false;
			}
		}

		return true;
	}

	@Override
	public boolean addAll( Collection< ? extends T > c ) {
		for( T n : c ) {
			add( n );
		}
		return true;
	}

	@Override
	public boolean retainAll( Collection< ? > c ) {
		throw new UnsupportedOperationException( "Not supported yet." );
	}

	@Override
	public boolean removeAll( Collection< ? > c ) {
		throw new UnsupportedOperationException( "Not supported yet." );
	}

	@Override
	public void clear() {
		elements.clear();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy