/******************************************************************************* * Copyright (c) 2009-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 *******************************************************************************/ package org.rascalmpl.library.experiments.resource.results.buffers; import java.util.Iterator; import org.rascalmpl.value.IAnnotatable; import org.rascalmpl.value.ISet; import org.rascalmpl.value.ISetRelation; import org.rascalmpl.value.IValue; import org.rascalmpl.value.IWithKeywordParameters; import org.rascalmpl.value.exceptions.IllegalOperationException; import org.rascalmpl.value.type.Type; import org.rascalmpl.value.type.TypeFactory; import org.rascalmpl.value.visitors.IValueVisitor; public class LazySet implements ISet { private final int bufferSize; private ILazyFiller filler; private Type elementType; public LazySet(int bufferSize, ILazyFiller filler, Type elementType) { this.bufferSize = bufferSize; this.filler = filler; this.elementType = elementType; } @Override public Type getElementType() { return elementType; } @Override public boolean isEmpty() { throw new IllegalOperationException("isEmpty over buffered relation", getType()); } @Override public int size() { throw new IllegalOperationException("size over buffered relation", getType()); } @Override public boolean contains(IValue element) { throw new IllegalOperationException("contains over buffered relation", getType()); } @Override public ISet insert(IValue element) { throw new IllegalOperationException("insert over buffered relation", getType()); } @Override public ISet union(ISet set) { throw new IllegalOperationException("union over buffered relation", getType()); } @Override public ISet intersect(ISet set) { throw new IllegalOperationException("intersect over buffered relation", getType()); } @Override public ISet subtract(ISet set) { throw new IllegalOperationException("subtract over buffered relation", getType()); } @Override public ISet delete(IValue elem) { throw new IllegalOperationException("delete over buffered relation", getType()); } @Override public ISet product(ISet set) { throw new IllegalOperationException("product over buffered relation", getType()); } @Override public boolean isSubsetOf(ISet other) { throw new IllegalOperationException("subset over buffered relation", getType()); } @Override public Iterator<IValue> iterator() { LazyIterator bi = new LazyIterator(filler.getBufferedFiller(), bufferSize); bi.init(); return bi; } @Override public Type getType() { return TypeFactory.getInstance().relTypeFromTuple(this.elementType); } @Override public <T, E extends Throwable> T accept(IValueVisitor<T,E> v) throws E { // TODO Auto-generated method stub return null; } @Override public boolean isEqual(IValue other) { // TODO Auto-generated method stub return false; } @Override public String toString() { return "Buffered Relation"; } @Override public boolean isRelation() { return false; } @Override public ISetRelation<ISet> asRelation() { throw new IllegalOperationException( "Relational operations are not supported on lazy representation.", getType()); } @Override public boolean isAnnotatable() { return false; } @Override public IAnnotatable<? extends IValue> asAnnotatable() { throw new IllegalOperationException( "Cannot be viewed as annotatable.", getType()); } @Override public boolean mayHaveKeywordParameters() { return false; } @Override public IWithKeywordParameters<? extends IValue> asWithKeywordParameters() { throw new IllegalOperationException( "Cannot be viewed as with keyword parameters", getType()); } }