/**
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *  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 
 * 
 *  Based on ideas from Xtext, Xtend, Xcore
 *   
 *  Contributors:  
 *  		Christophe Loetz  (Loetz GmbH&Co.KG) - Initial implementation 
 *  
 */
package org.eclipse.osbp.xtext.entitymock;

import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Property Filler Unsigned Double Random</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.osbp.xtext.entitymock.PropertyFillerUnsignedDoubleRandom#getItems <em>Items</em>}</li>
 * </ul>
 *
 * @see org.eclipse.osbp.xtext.entitymock.EntityMockDSLPackage#getPropertyFillerUnsignedDoubleRandom()
 * @model
 * @generated
 */
public interface PropertyFillerUnsignedDoubleRandom extends PropertyFillerDoubleType {
	/**
	 * Returns the value of the '<em><b>Items</b></em>' attribute list.
	 * The list contents are of type {@link java.lang.Double}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Items</em>' attribute list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Items</em>' attribute list.
	 * @see org.eclipse.osbp.xtext.entitymock.EntityMockDSLPackage#getPropertyFillerUnsignedDoubleRandom_Items()
	 * @model unique="false"
	 * @generated
	 */
	EList<Double> getItems();

} // PropertyFillerUnsignedDoubleRandom
