/******************************************************************************* * Copyright (c) 2011-2013 CWI * 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: * * Arnold Lankamp - Arnold.Lankamp@cwi.nl *******************************************************************************/ package org.rascalmpl.parser.gtd.util; public class IndexedIntegerList{ private final static int DEFAULT_SIZE = 8; private int[] elements; private int size; public IndexedIntegerList(){ super(); elements = new int[DEFAULT_SIZE]; } public IndexedIntegerList(IndexedIntegerList original){ super(); int[] oldElements = original.elements; int length = oldElements.length; size = original.size; elements = new int[length]; System.arraycopy(oldElements, 0, elements, 0, size); } public void enlarge(){ int[] oldElements = elements; elements = new int[size << 1]; System.arraycopy(oldElements, 0, elements, 0, size); } public void add(int element){ while(size >= elements.length){ enlarge(); } elements[size++] = element; } public int getElement(int index){ return elements[index]; } public boolean contains(int element){ for(int i = size - 1; i >= 0; --i){ if(elements[i] == element){ return true; } } return false; } public int find(int element){ for(int i = size - 1; i >= 0; --i){ if(elements[i] == element){ return i; } } return -1; } public int size(){ return size; } public int capacity(){ return elements.length; } public void clear(){ int length = elements.length; elements = new int[length]; size = 0; } public void dirtyClear(){ size = 0; } }