/*****************************************************************************
 * Copyright (c) 2016 CEA LIST.
 *
 *
 * 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:
 *  David LOPEZ BETANCUR (CEA LIST)
 *  Sebastien REVOL (CEA LIST)
 *
 *****************************************************************************/
package org.eclipse.papyrus.moka.xygraph.mapping.util;

import java.util.ArrayList;
import java.util.List;

/**
 * This class will hold a raw set of values from a variable.
 *  
 *
 */
public class DataBatch {
	
	private List<Double> values;
	
	private DataBatch(int size){
		values = new ArrayList<>(size);
	}
	
	public static DataBatch fromDouble(List<Double> values){
		DataBatch batch = new DataBatch(values.size());
		batch.values.addAll(values);
		return batch;
	}
	
	public static DataBatch fromBoolean(List<Boolean> values){
		
		DataBatch batch = new DataBatch(values.size());
		
		for(int i = 0; i < values.size(); i++)
			batch.values.add(values.get(i) ? 1.0 : 0.0);
		
		return batch;
	}
	
	public static DataBatch fromInteger(List<Integer> values){
		
		DataBatch batch = new DataBatch(values.size());
		
		//TODO This is insanely slow !
		for(int i = 0; i < values.size(); i++)
			batch.values.add((double)values.get(i));
		
		return batch;
	}
	
	public static DataBatch dummy(){
		DataBatch batch = new DataBatch(1);
		return batch;
	}
	
	public List<Double> getValues(){
		return values;
	}
	
	public int size(){
		return values.size();
	}
	
	public void addValue(double value){
		values.add(value);
	}
	
	public void clean(){
		values.clear();
	}
}
	
