slang_rs_export_func.h revision 462aefd62cc646d2ff753c1d003ef3cd7bbea26
1462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#ifndef _SLANG_COMPILER_RS_EXPORT_FUNC_HPP 2462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao# define _SLANG_COMPILER_RS_EXPORT_FUNC_HPP 3462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 4462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include "llvm/ADT/StringRef.h" /* for class llvm::StringRef */ 5462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 6462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <list> 7462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <string> 8462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 9462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace clang { 10462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao class FunctionDecl; 11462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao} /* namespace clang */ 12462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 13462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang { 14462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 15462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaousing namespace clang; 16462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 17462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSContext; 18462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSExportType; 19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSExportRecordType; 20462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSExportFunc { 22462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao friend class RSContext; 23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaopublic: 24462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao class Parameter { 25462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao private: 26462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao RSExportType* mType; 27462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao std::string mName; 28462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 29462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao public: 30462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao Parameter(RSExportType* T, const llvm::StringRef& Name) : 31462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao mType(T), 32462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao mName(Name.data(), Name.size()) 33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao { 34462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao return; 35462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao } 36462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 37462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline const RSExportType* getType() const { return mType; } 38462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline const std::string& getName() const { return mName; } 39462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao }; 40462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 41462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoprivate: 42462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao RSContext* mContext; 43462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao std::string mName; 44462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao std::list<const Parameter*> mParams; 45462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao mutable RSExportRecordType* mParamPacketType; 46462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 47462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao RSExportFunc(RSContext* Context, const llvm::StringRef& Name) : 48462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao mContext(Context), 49462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao mName(Name.data(), Name.size()), 50462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao mParamPacketType(NULL) 51462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao { 52462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao return; 53462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao } 54462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 55462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaopublic: 56462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao static RSExportFunc* Create(RSContext* Context, const FunctionDecl* FD); 57462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 58462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao typedef std::list<const Parameter*>::const_iterator const_param_iterator; 59462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 60462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline const_param_iterator params_begin() const { return this->mParams.begin(); } 61462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline const_param_iterator params_end() const { return this->mParams.end(); } 62462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 63462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline const std::string& getName() const { return mName; } 64462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline RSContext* getRSContext() const { return mContext; } 65462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 66462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline bool hasParam() const { return !mParams.empty(); } 67462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao inline int getNumParameters() const { return mParams.size(); } 68462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 69462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao const RSExportRecordType* getParamPacketType() const; 70462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 71462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao ~RSExportFunc(); 72462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 73462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}; /* RSExportFunc */ 74462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 75462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 76462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao} /* namespace slang */ 77462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 78462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#endif /* _SLANG_COMPILER_RS_EXPORT_FUNC_HPP */ 79