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