/******************************************************************************* * Copyright (c) 2002 - 2006 IBM Corporation. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.util.intset; import com.ibm.wala.util.debug.Assertions; import com.ibm.wala.util.debug.UnimplementedError; /** * A debugging factory that creates debugging bitsets that are implemented as * two bitsets that perform consistency checks for every operation. */ public class DebuggingMutableIntSetFactory implements MutableIntSetFactory<DebuggingMutableIntSet> { private MutableIntSetFactory<?> primary; private MutableIntSetFactory<?> secondary; public DebuggingMutableIntSetFactory(MutableIntSetFactory<?> p, MutableIntSetFactory<?> s) { primary = p; secondary = s; if (p == null) { throw new IllegalArgumentException("null p"); } if (s == null) { throw new IllegalArgumentException("null s"); } } public DebuggingMutableIntSetFactory() { this(new MutableSparseIntSetFactory(), new MutableSharedBitVectorIntSetFactory()); } @Override public DebuggingMutableIntSet make(int[] set) { if (set == null) { throw new IllegalArgumentException("null set"); } return new DebuggingMutableIntSet(primary.make(set), secondary.make(set)); } @Override public DebuggingMutableIntSet parse(String string) { int[] backingStore = SparseIntSet.parseIntArray(string); return make(backingStore); } @Override public DebuggingMutableIntSet makeCopy(IntSet x) throws UnimplementedError { if (x == null) { throw new IllegalArgumentException("null x"); } if (x instanceof DebuggingMutableIntSet) { DebuggingMutableIntSet db = (DebuggingMutableIntSet) x; MutableIntSet pr = primary.makeCopy(db.primaryImpl); MutableIntSet sr = secondary.makeCopy(db.secondaryImpl); assert pr.sameValue(db.primaryImpl); assert sr.sameValue(db.secondaryImpl); assert pr.sameValue(sr); return new DebuggingMutableIntSet(pr, sr); } else { Assertions.UNREACHABLE(); return null; } } @Override public DebuggingMutableIntSet make() { return new DebuggingMutableIntSet(primary.make(), secondary.make()); } public void setPrimaryFactory(MutableIntSetFactory<?> x) { if (x == null) { throw new IllegalArgumentException("null x"); } if (x == this) { throw new IllegalArgumentException("bad recursion"); } primary = x; } public void setSecondaryFactory(MutableIntSetFactory<?> x) { if (x == null) { throw new IllegalArgumentException("null x"); } if (x == this) { throw new IllegalArgumentException("bad recursion"); } secondary = x; } }