/******************************************************************************* * Copyright (c) 2009 Elliott Baron * 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: * Elliott Baron - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.codan.extension; import java.util.ArrayList; import java.util.List; public class ExecutionState { private List clauses; private boolean top; private boolean bottom; public ExecutionState() { clauses = new ArrayList(); } public void addClause(ExecutionStateClause node) { setTop(false); setBottom(false); clauses.add(node); } public void removeClause(ExecutionStateClause node) { clauses.remove(node); if (clauses.size() == 0) { setTop(true); setBottom(false); } } public ExecutionStateClause[] getClauses() { return clauses.toArray(new ExecutionStateClause[clauses.size()]); } public boolean isTop() { return top; } public boolean isBottom() { return bottom; } public void setTop(boolean top) { this.top = top; } public void setBottom(boolean bottom) { this.bottom = bottom; } @Override public String toString() { String ret; if (top) { ret = "[TOP]"; } else if (bottom) { ret = "[BOTTOM]"; } else { StringBuffer buf = new StringBuffer(); if (clauses.size() > 0) { for (ExecutionStateClause c : clauses) { if (!c.isTrue()) { buf.append("NOT "); } buf.append(c.getNode().getRawSignature()); buf.append(" AND "); } buf.delete(buf.length() - 5 /* " AND ".length() */, buf.length()); } ret = buf.toString(); } return ret; } }