#parse("main/Header.vm") package com.nativelibs4java.opencl; import com.nativelibs4java.util.IOUtils; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Map; import java.lang.reflect.Array; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author ochafik */ public abstract class CLAbstractUserProgram { final CLProgram program; String rawSource; Map<String, String> velocityArgs; volatile boolean addedSources; protected Long getSourceChecksum() { return null; } public CLProgram getProgram() { return program; } protected void checkArrayLength(Object arr, int length, String argName) { if (arr == null) throw new IllegalArgumentException("Argument " + argName + " cannot be null. Expected array of size " + length); int len = Array.getLength(arr); if (len != length) throw new IllegalArgumentException("Argument " + argName + " must be an array of size " + length + ", but given array of size " + len); } protected static String readRawSourceForClass(Class<?> c) throws IOException { String simpleName = c.getSimpleName(); InputStream srcIn = c.getResourceAsStream(simpleName + ".cl"); try { if (srcIn == null) srcIn = c.getResourceAsStream(simpleName + ".c"); if (srcIn == null) throw new FileNotFoundException("OpenCL source code not found : '" + simpleName + "'"); return IOUtils.readText(srcIn); } finally { if (srcIn != null) srcIn.close(); } } protected CLAbstractUserProgram(CLProgram program, String rawSource) { this.program = program; this.rawSource = rawSource; } protected CLAbstractUserProgram(CLContext context, String rawSource) { this(context.createProgram(), rawSource); } protected synchronized void addSources() { if (addedSources) { return; } String src; if (velocityArgs != null) { src = rawSource;//veloTransform(rawSource, velocityArgs); } else { src = rawSource; } program.addSource(src); addedSources = true; } protected void defineMacro(String name, String value) { if (value == null) { program.undefineMacro(name); } else { program.defineMacro(name, value); } } protected synchronized CLKernel createKernel(String name) throws CLBuildException { addSources(); return program.createKernel(name); } }