/*******************************************************************************
 * Copyright (c) 2000, 2006 QNX Software Systems and others.
 * 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:
 *     QNX Software Systems - Initial API and implementation
 *******************************************************************************/

package org.eclipse.cdt.debug.core.cdi.model;

import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;

/**
 * 
 * Represents the value of a variable. A value representing 
 * a complex data structure contains variables.
 * 
 * @since Jul 9, 2002
 */
public interface ICDIValue extends ICDIObject {
	/**
	 * Returns a description of the type of data this value contains.
	 * 
	 * @return  the name of this value's data type
	 * @throws CDIException if this method fails.  Reasons include:
	 */
	String getTypeName() throws CDIException;

	/**
	 * Return the type of this value.
	 * 
	 * @return
	 * @throws CDIException
	 */
	ICDIType getType() throws CDIException;

	/**
	 * Returns this value as a <code>String</code>.
	 *
	 * @return a String representation of this value
	 * @throws CDIException if this method fails.  Reasons include:
	 */
	String getValueString() throws CDIException;

	/**
	 * Return the number of children.
	 * @return int children count
	 */
	int getChildrenNumber() throws CDIException;
	
	/**
	 * @return true if value is a container like structure.
	 */
	boolean hasChildren() throws CDIException;
	
	/**
	 * Returns the variables in this value. An empty collection 
	 * is returned if there are no variables.
	 * 
	 * @return an array of variables
	 * @throws CDIException if this method fails.  Reasons include:
	 */
	ICDIVariable[] getVariables() throws CDIException;

}
