/*
 * Copyright (C) 2014 - Martin Berger
 * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/
package edu.stanford.rsl.conrad.data.generic;

import edu.stanford.rsl.conrad.data.generic.datatypes.Gridable;

public interface GenericGridOperatorInterface<T extends Gridable<T>> {
	
	public void addBy(final GenericGrid<T> grid, T val);
	public void addBy(final GenericGrid<T> gridA, final GenericGrid<T> gridB);
	public void subtractBy(final GenericGrid<T> grid, T val);
	public void subtractBy(final GenericGrid<T> gridA, final GenericGrid<T> gridB);
	public void multiplyBy(final GenericGrid<T> grid, T val);
	public void multiplyBy(final GenericGrid<T> gridA, final GenericGrid<T> gridB);
	public void divideBy(final GenericGrid<T> grid, T val);
	public void divideBy(final GenericGrid<T> gridA, final GenericGrid<T> gridB);
	public void copy(final GenericGrid<T> gridA, final GenericGrid<T> gridB);
	public void fill(final GenericGrid<T> grid, T val);
	
	public T sum(final GenericGrid<T> grid);
	public T min(final GenericGrid<T> grid);
	public T max(final GenericGrid<T> grid);
	public T dotProduct(final GenericGrid<T> gridA, final GenericGrid<T> gridB);
}
