Files
triton/atidlas/lazy_program_compiler.hpp
Philippe Tillet 609c7af6ce Initial commit
2014-08-30 18:02:17 -04:00

42 lines
1.1 KiB
C++

#ifndef ATIDLAS_LAZY_PROGRAM_COMPILER_HPP
#define ATIDLAS_LAZY_PROGRAM_COMPILER_HPP
#include <map>
#include "viennacl/ocl/context.hpp"
namespace atidlas
{
class lazy_program_compiler
{
public:
lazy_program_compiler(viennacl::ocl::context * ctx, std::string const & name, std::string const & src, bool force_recompilation) : ctx_(ctx), name_(name), src_(src), force_recompilation_(force_recompilation){ }
lazy_program_compiler(viennacl::ocl::context * ctx, std::string const & name, bool force_recompilation) : ctx_(ctx), name_(name), force_recompilation_(force_recompilation){ }
void add(std::string const & src) { src_+=src; }
std::string const & src() const { return src_; }
viennacl::ocl::program & program()
{
if (force_recompilation_ && ctx_->has_program(name_))
ctx_->delete_program(name_);
if (!ctx_->has_program(name_))
{
// std::cout << src_ << std::endl;
ctx_->add_program(src_, name_);
}
return ctx_->get_program(name_);
}
private:
viennacl::ocl::context * ctx_;
std::string name_;
std::string src_;
bool force_recompilation_;
};
}
#endif