slang_rs_export_func.h revision 462aefd62cc646d2ff753c1d003ef3cd7bbea26
1#ifndef _SLANG_COMPILER_RS_EXPORT_FUNC_HPP
2#   define _SLANG_COMPILER_RS_EXPORT_FUNC_HPP
3
4#include "llvm/ADT/StringRef.h"     /* for class llvm::StringRef */
5
6#include <list>
7#include <string>
8
9namespace clang {
10    class FunctionDecl;
11}   /* namespace clang */
12
13namespace slang {
14
15using namespace clang;
16
17class RSContext;
18class RSExportType;
19class RSExportRecordType;
20
21class RSExportFunc {
22    friend class RSContext;
23public:
24    class Parameter {
25    private:
26        RSExportType* mType;
27        std::string mName;
28
29    public:
30        Parameter(RSExportType* T, const llvm::StringRef& Name) :
31            mType(T),
32            mName(Name.data(), Name.size())
33        {
34            return;
35        }
36
37        inline const RSExportType* getType() const { return mType; }
38        inline const std::string& getName() const { return mName; }
39    };
40
41private:
42    RSContext* mContext;
43    std::string mName;
44    std::list<const Parameter*> mParams;
45    mutable RSExportRecordType* mParamPacketType;
46
47    RSExportFunc(RSContext* Context, const llvm::StringRef& Name) :
48        mContext(Context),
49        mName(Name.data(), Name.size()),
50        mParamPacketType(NULL)
51    {
52        return;
53    }
54
55public:
56    static RSExportFunc* Create(RSContext* Context, const FunctionDecl* FD);
57
58    typedef std::list<const Parameter*>::const_iterator const_param_iterator;
59
60    inline const_param_iterator params_begin() const { return this->mParams.begin(); }
61    inline const_param_iterator params_end() const { return this->mParams.end(); }
62
63    inline const std::string& getName() const { return mName; }
64    inline RSContext* getRSContext() const { return mContext; }
65
66    inline bool hasParam() const { return !mParams.empty(); }
67    inline int getNumParameters() const { return mParams.size(); }
68
69    const RSExportRecordType* getParamPacketType() const;
70
71    ~RSExportFunc();
72
73};  /* RSExportFunc */
74
75
76}   /* namespace slang */
77
78#endif  /* _SLANG_COMPILER_RS_EXPORT_FUNC_HPP */
79