/*
* 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.complex;
import com.jogamp.opencl.CLContext;
import com.jogamp.opencl.CLDevice;
import edu.stanford.rsl.conrad.data.Grid;
import edu.stanford.rsl.conrad.data.generic.GenericGrid;
import edu.stanford.rsl.conrad.data.generic.datatypes.Complex;
public abstract class ComplexGrid extends GenericGrid<Complex> {
public abstract float[] getAslinearMemory();
public abstract void setAslinearMemory(float[] buffer);
public abstract Grid getRealGrid();
public abstract Grid getImagGrid();
public abstract Grid getMagGrid();
public abstract Grid getPhaseGrid();
public abstract float getRealAtIndex(int... idx);
public abstract void setRealAtIndex(float val, int... idx);
public abstract float getImagAtIndex(int... idx);
public abstract void setImagAtIndex(float val, int... idx);
public abstract int getOffset();
@Override
public void show() {
show(this.getClass().getSimpleName());
}
@Override
public void show(String s) {
getMagGrid().show(s+ " - Magnitude");
//getPhaseGrid().show(s+ " - Phase");
}
@Override
public void initializeDelegate(CLContext context, CLDevice device) {
if(this.getAslinearMemory()==null) throw new NullPointerException("Host buffer needs to be initialized before the OpenCL delegate can be created");
delegate = new OpenCLComplexMemoryDelegate(this.getAslinearMemory(), context, device);
}
@Override
public ComplexGridOperatorInterface getGridOperator() {
return (openCLactive) ? OpenCLComplexGridOperator.getInstance() : ComplexGridOperator.getInstance();
}
@Override
public ComplexGridOperatorInterface selectGridOperator(boolean useOpenCLOperator) {
return (useOpenCLOperator) ? OpenCLComplexGridOperator.getInstance() : ComplexGridOperator.getInstance();
}
}