slang_rs_export_func.h revision 6315f76e3cc6ff2d012d1183a0b030d4ff0dc808
16315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#ifndef _SLANG_COMPILER_RS_EXPORT_FUNC_H 26315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#define _SLANG_COMPILER_RS_EXPORT_FUNC_H 3462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 4462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <list> 5462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <string> 6462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 76315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "llvm/ADT/StringRef.h" 86315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr 9462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace clang { 106315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class FunctionDecl; 119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace clang 12462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 13462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang { 14462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 156315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class RSContext; 166315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class RSExportType; 176315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class RSExportRecordType; 18462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSExportFunc { 209ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao friend class RSContext; 219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 229ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao class Parameter { 239ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao private: 249ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSExportType *mType; 25462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao std::string mName; 26462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 279ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 286315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr Parameter(RSExportType *T, const llvm::StringRef &Name) 296315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr : mType(T), 306315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr mName(Name.data(), Name.size()) { 319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return; 32462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao } 33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 349ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const RSExportType *getType() const { return mType; } 359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const std::string &getName() const { return mName; } 369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao }; 379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao private: 399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSContext *mContext; 409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao std::string mName; 419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao std::list<const Parameter*> mParams; 429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mutable RSExportRecordType *mParamPacketType; 439ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 446315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr RSExportFunc(RSContext *Context, const llvm::StringRef &Name) 456315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr : mContext(Context), 466315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr mName(Name.data(), Name.size()), 476315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr mParamPacketType(NULL) { 489ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return; 499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 509ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 529ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static RSExportFunc *Create(RSContext *Context, 539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const clang::FunctionDecl *FD); 54462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef std::list<const Parameter*>::const_iterator const_param_iterator; 56462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const_param_iterator params_begin() const { 589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return this->mParams.begin(); 599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const_param_iterator params_end() const { 619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return this->mParams.end(); 629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 63462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const std::string &getName() const { 659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mName; 669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline RSContext *getRSContext() const { 689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mContext; 699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 70462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 719ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline bool hasParam() const { 729ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return !mParams.empty(); 739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 749ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline int getNumParameters() const { 759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mParams.size(); 769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 77462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const RSExportRecordType *getParamPacketType() const; 79462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ~RSExportFunc(); 819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}; // RSExportFunc 82462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 839ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace slang 84462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 856315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#endif // _SLANG_COMPILER_RS_EXPORT_FUNC_H 86