#ifndef __CL_PROGRAM_CLASS_H__
#define __CL_PROGRAM_CLASS_H__

#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include <CL/cl.h>
#endif //__APPLE__

#include "clErrorClass.h"
#include <stdio.h>
#include <sstream>
#include <vector>
#include <string>

//! OpenCLで使用するプログラムを管理するクラス.
/*! プログラムオブジェクトの生成などをする. */
class clProgramClass
{
//変数
private:
    //! プログラムオブジェクトを管理するための構造体.
    /*! 追加した時用に動的配列を内包する. */
    std::vector<cl_program>  clprogram;     //!< プログラムオブジェクトを格納する
    std::vector<std::string> filename;      //!< プログラムオブジェクトを作成する時に使用したファイル名を格納
protected:
public:
//関数
private:
protected:
public:
    clProgramClass();
    ~clProgramClass();

				void            createProgramObject		(const char *filename, const cl_context context, const cl_device_id device_id);
    const       char            *loadProgramSource      (const char *filename) throw(clErrorClass);
                void            showBuildLog            (const cl_program program, const cl_device_id device) const throw(clErrorClass);
    const       unsigned int    getProgramIndex         (const char *filename) const;
    const       cl_program      getProgram              (const char *filename) const;
};
#endif //__CL_PROGRAM_CLASS_H__
