slang_rs_export_func.h revision 9ef2f785e0cc490af678dfd685995dec787321ff
1462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#ifndef _SLANG_COMPILER_RS_EXPORT_FUNC_HPP 2462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao# define _SLANG_COMPILER_RS_EXPORT_FUNC_HPP 3462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 49ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include "llvm/ADT/StringRef.h" 5462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 6462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <list> 7462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <string> 8462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 9462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace clang { 109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoclass FunctionDecl; 119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace clang 12462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 13462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang { 14462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 15462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSContext; 16462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSExportType; 17462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass 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: 289ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao Parameter(RSExportType *T, const llvm::StringRef &Name) : 299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mType(T), 309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mName(Name.data(), Name.size()) 31462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao { 329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return; 33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao } 34462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const RSExportType *getType() const { return mType; } 369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const std::string &getName() const { return mName; } 379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao }; 389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao private: 409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSContext *mContext; 419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao std::string mName; 429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao std::list<const Parameter*> mParams; 439ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mutable RSExportRecordType *mParamPacketType; 449ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSExportFunc(RSContext *Context, const llvm::StringRef &Name) : 469ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mContext(Context), 479ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mName(Name.data(), Name.size()), 489ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mParamPacketType(NULL) 499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao { 509ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return; 519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 529ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao static RSExportFunc *Create(RSContext *Context, 559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const clang::FunctionDecl *FD); 56462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef std::list<const Parameter*>::const_iterator const_param_iterator; 58462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const_param_iterator params_begin() const { 609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return this->mParams.begin(); 619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const_param_iterator params_end() const { 639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return this->mParams.end(); 649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 65462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const std::string &getName() const { 679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mName; 689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline RSContext *getRSContext() const { 709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mContext; 719ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 72462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline bool hasParam() const { 749ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return !mParams.empty(); 759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline int getNumParameters() const { 779ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mParams.size(); 789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 79462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const RSExportRecordType *getParamPacketType() const; 81462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 829ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ~RSExportFunc(); 83462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 849ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}; // RSExportFunc 85462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 86462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 879ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace slang 88462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 899ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#endif // _SLANG_COMPILER_RS_EXPORT_FUNC_HPP 90