content: package edu.stanford.rsl.conrad.cuda.splines;
  
  import jcuda.Pointer;
  import jcuda.driver.CUdeviceptr;
  import jcuda.runtime.JCuda;
  import jcuda.runtime.cudaMemcpyKind;
  import edu.stanford.rsl.conrad.geometry.splines.BSpline;
  
  /**
   * Wrapper class to create a BSpline object in the CUDAMemory
   * @author akmaier
   *
   */
  public class CUDABSpline extends BSpline {
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = -4887896401270761029L;
  	private CUdeviceptr deviceX;
  	
  	public CUDABSpline(BSpline spline) {
  		super(spline.getControlPoints(), spline.getKnots());
  		float [] binary = spline.getBinaryRepresentation();
  		int memorySize = binary.length;
  		JCuda.cudaMemcpy(deviceX, Pointer.to(binary), memorySize, 
  				cudaMemcpyKind.cudaMemcpyHostToDevice);
  		deviceX = new CUdeviceptr();
  		JCuda.cudaMalloc(deviceX, memorySize);
  		JCuda.cudaMemset(deviceX, 0, memorySize);
  	}
  
  	/**
  	 * releases the memory on the device for this volume.
  	 */
  	public void destroy(){
  		JCuda.cudaFree(deviceX);
  	}
  	
  	/**
  	 * @return the deviceX
  	 */
  	public CUdeviceptr getDeviceX() {
  		return deviceX;
  	}
  
  	/**
  	 * @param deviceX the deviceX to set
  	 */
  	public void setDeviceX(CUdeviceptr deviceX) {
  		this.deviceX = deviceX;
  	}
  
  }
  
  /*
   * Copyright (C) 2010-2014 - Andreas Maier 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */
  