• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef CPP_ABCKIT_CORE_FUNCTION_IMPL_H
17 #define CPP_ABCKIT_CORE_FUNCTION_IMPL_H
18 
19 #include "./function.h"
20 #include "./class.h"
21 #include "./module.h"
22 #include "../config.h"
23 #include "../graph.h"
24 
25 namespace abckit::core {
26 
CreateGraph()27 inline Graph Function::CreateGraph() const
28 {
29     const ApiConfig *conf = GetApiConfig();
30     AbckitGraph *graph = conf->cIapi_->createGraphFromFunction(GetView());
31     CheckError(conf);
32     return Graph(graph, conf_, GetResource());
33 }
34 
SetGraph(const Graph & graph)35 inline Function Function::SetGraph(const Graph &graph) const
36 {
37     const ApiConfig *conf = GetApiConfig();
38     conf->cMapi_->functionSetGraph(GetView(), graph.GetResource());
39     CheckError(conf);
40     return *this;
41 }
42 
GetFile()43 inline const File *Function::GetFile() const
44 {
45     return GetResource();
46 }
47 
GetName()48 inline std::string Function::GetName() const
49 {
50     const ApiConfig *conf = GetApiConfig();
51     AbckitString *cString = conf->cIapi_->functionGetName(GetView());
52     CheckError(conf);
53     std::string str = conf->cIapi_->abckitStringToString(cString);
54     CheckError(conf);
55     return str;
56 }
57 
58 // CC-OFFNXT(G.FUD.06) perf critical
GetAnnotations()59 inline std::vector<core::Annotation> Function::GetAnnotations() const
60 {
61     std::vector<core::Annotation> anns;
62 
63     Payload<std::vector<core::Annotation> *> payload {&anns, GetApiConfig(), GetResource()};
64 
65     GetApiConfig()->cIapi_->functionEnumerateAnnotations(
66         GetView(), &payload, [](AbckitCoreAnnotation *ann, void *data) {
67             const auto &payload = *static_cast<Payload<std::vector<core::Annotation> *> *>(data);
68             payload.data->push_back(core::Annotation(ann, payload.config, payload.resource));
69             return true;
70         });
71 
72     CheckError(GetApiConfig());
73 
74     return anns;
75 }
76 
IsStatic()77 inline bool Function::IsStatic() const
78 {
79     const ApiConfig *conf = GetApiConfig();
80     bool result = conf->cIapi_->functionIsStatic(GetView());
81     CheckError(conf);
82     return result;
83 }
84 
GetModule()85 inline core::Module Function::GetModule() const
86 {
87     const ApiConfig *conf = GetApiConfig();
88     AbckitCoreModule *module = conf->cIapi_->functionGetModule(GetView());
89     CheckError(conf);
90     return core::Module(module, conf_, GetResource());
91 }
92 
GetParentClass()93 inline core::Class Function::GetParentClass() const
94 {
95     const ApiConfig *conf = GetApiConfig();
96     AbckitCoreClass *klass = conf->cIapi_->functionGetParentClass(GetView());
97     CheckError(conf);
98     return core::Class(klass, conf_, GetResource());
99 }
100 
101 // CC-OFFNXT(G.FUD.06) perf critical
EnumerateNestedFunctions(const std::function<bool (core::Function)> & cb)102 inline bool Function::EnumerateNestedFunctions(const std::function<bool(core::Function)> &cb) const
103 {
104     Payload<const std::function<bool(core::Function)> &> payload {cb, GetApiConfig(), GetResource()};
105 
106     bool isNormalExit = GetApiConfig()->cIapi_->functionEnumerateNestedFunctions(
107         GetView(), &payload, [](AbckitCoreFunction *nestedFunc, void *data) {
108             const auto &payload = *static_cast<Payload<const std::function<bool(core::Function)> &> *>(data);
109             return payload.data(core::Function(nestedFunc, payload.config, payload.resource));
110         });
111     CheckError(GetApiConfig());
112     return isNormalExit;
113 }
114 
115 // CC-OFFNXT(G.FUD.06) perf critical
EnumerateNestedClasses(const std::function<bool (core::Class)> & cb)116 inline bool Function::EnumerateNestedClasses(const std::function<bool(core::Class)> &cb) const
117 {
118     Payload<const std::function<bool(core::Class)> &> payload {cb, GetApiConfig(), GetResource()};
119 
120     bool isNormalExit = GetApiConfig()->cIapi_->functionEnumerateNestedClasses(
121         GetView(), &payload, [](AbckitCoreClass *nestedClass, void *data) {
122             const auto &payload = *static_cast<Payload<const std::function<bool(core::Class)> &> *>(data);
123             return payload.data(core::Class(nestedClass, payload.config, payload.resource));
124         });
125     CheckError(GetApiConfig());
126     return isNormalExit;
127 }
128 
GetParentFunction()129 inline Function Function::GetParentFunction() const
130 {
131     auto *func = GetApiConfig()->cIapi_->functionGetParentFunction(GetView());
132     CheckError(GetApiConfig());
133     return Function(func, GetApiConfig(), GetResource());
134 }
135 
GetParentNamespace()136 inline core::Namespace Function::GetParentNamespace() const
137 {
138     auto *ns = GetApiConfig()->cIapi_->functionGetParentNamespace(GetView());
139     CheckError(GetApiConfig());
140     return Namespace(ns, GetApiConfig(), GetResource());
141 }
142 
EnumerateAnnotations(const std::function<bool (core::Annotation)> & cb)143 inline bool Function::EnumerateAnnotations(const std::function<bool(core::Annotation)> &cb) const
144 {
145     Payload<const std::function<bool(core::Annotation)> &> payload {cb, GetApiConfig(), GetResource()};
146 
147     bool isNormalExit = GetApiConfig()->cIapi_->functionEnumerateAnnotations(
148         GetView(), &payload, [](AbckitCoreAnnotation *anno, void *data) {
149             const auto &payload = *static_cast<Payload<const std::function<bool(core::Annotation)> &> *>(data);
150             return payload.data(core::Annotation(anno, payload.config, payload.resource));
151         });
152     CheckError(GetApiConfig());
153     return isNormalExit;
154 }
155 
IsCtor()156 inline bool Function::IsCtor() const
157 {
158     auto isCtor = GetApiConfig()->cIapi_->functionIsCtor(GetView());
159     CheckError(GetApiConfig());
160     return isCtor;
161 }
162 
IsAnonymous()163 inline bool Function::IsAnonymous() const
164 {
165     auto isAnonymous = GetApiConfig()->cIapi_->functionIsAnonymous(GetView());
166     CheckError(GetApiConfig());
167     return isAnonymous;
168 }
169 
SetGraph(Graph & graph)170 inline Function Function::SetGraph(Graph &graph) const
171 {
172     GetApiConfig()->cMapi_->functionSetGraph(GetView(), graph.GetResource());
173     CheckError(GetApiConfig());
174     return *this;
175 }
176 
177 }  // namespace abckit::core
178 
179 #endif  // CPP_ABCKIT_CORE_FUNCTION_IMPL_H
180