/*******************************************************************************
 * Copyright (c) 2009 STMicroelectronics.
 * 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:
 *    Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation
 *******************************************************************************/
package org.eclipse.linuxtools.internal.gcov.parser;

import java.io.Serializable;
import java.util.ArrayList;

public class Block implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -7665287885679756014L;
	private final ArrayList<Arc> entryArcs = new ArrayList<Arc>();
	private final ArrayList<Arc> exitArcs = new ArrayList<Arc>();
	private final long flag;
	private long numSuccs = 0;
	private long  numPreds = 0;
	private long  count = 0;
	private boolean isCallSite = false;// Does the call
	private boolean isCallReturn = false; // Is the return
	private boolean isNonLocalReturn = false;
	private boolean validChain = false;
	private boolean invalidChain = false;
	private boolean countValid = false;
	private final BlkLine blkline = new BlkLine();

	/**
	 * Constructor
	 */
	public Block(long flag) {
		this.flag = flag;
	}
	
	
	/* getters & setters */
	public long getFlag() {
		return flag;
	}

	public ArrayList<Arc> getEntryArcs() {
		return entryArcs;
	}

	public ArrayList<Arc> getExitArcs() {
		return exitArcs;
	}

	public boolean isCallSite() {
		return isCallSite;
	}

	public boolean isCallReturn() {
		return isCallReturn;
	}

	public boolean isNonLocalReturn() {
		return isNonLocalReturn;
	}

	public void addEntryArcs(Arc arcEntry) {
		this.entryArcs.add(arcEntry);
	}

	public void addExitArcs(Arc arcExit) {
		this.exitArcs.add(arcExit);
	}

	public void setCallSite(boolean isCallSite) {
		this.isCallSite = isCallSite;
	}

	public void setCallReturn(boolean isCallReturn) {
		this.isCallReturn = isCallReturn;
	}

	public void setNonLocalReturn(boolean isNonLocalReturn) {
		this.isNonLocalReturn = isNonLocalReturn;
	}

	public void decNumSuccs() {
		this.numSuccs--;
	}

	public void decNumPreds() {
		this.numPreds--;
	}

	public void incNumPreds() {
		this.numPreds++;
	}

	public void incNumSuccs() {
		this.numSuccs++;
	}

	public boolean isValidChain() {
		return validChain;
	}

	public void setValidChain(boolean validChain) {
		this.validChain = validChain;
	}

	public boolean isInvalidChain() {
		return invalidChain;
	}

	public void setInvalidChain(boolean invalidChain) {
		this.invalidChain = invalidChain;
	}

	public long getCount() {
		return count;
	}

	public void setCount(long count) {
		this.count = count;
	}

	public void setCountValid(boolean countValid) {
		this.countValid = countValid;
	}

	public boolean isCountValid() {
		return countValid;
	}

	public long getNumSuccs() {
		return numSuccs;
	}

	public long getNumPreds() {
		return numPreds;
	}

	public void setNumSuccs(long numSuccs) {
		this.numSuccs = numSuccs;
	}

	public void setNumPreds(long numPreds) {
		this.numPreds = numPreds;
	}

	public long[] getEncoding() {
		return blkline.encoding;
	}

	public void setEncoding(long[] lineNos) {
		this.blkline.encoding = lineNos;
	}

	public int getLineNum() {
		return blkline.num;
	}

	public void setNumLine(int numline) {
		this.blkline.num = numline;
	}

	static class BlkLine implements Serializable{
		/**
		 * 
		 */
		private static final long serialVersionUID = 2757557929188979686L;
		public long[] encoding;
		public int num;
	}
}
