• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  *
4  * HDF is dual licensed: you can use it either under the terms of
5  * the GPL, or the BSD license, at your option.
6  * See the LICENSE file in the root of this repository for complete details.
7  */
8 
9 #ifndef OHOS_HDI_CPP_CODE_EMITTER_H
10 #define OHOS_HDI_CPP_CODE_EMITTER_H
11 
12 #include "ast/ast.h"
13 #include "codegen/code_emitter.h"
14 #include "util/autoptr.h"
15 #include "util/string.h"
16 #include "util/string_builder.h"
17 
18 namespace OHOS {
19 namespace HDI {
20 class CppCodeEmitter : public CodeEmitter {
21 public:
22     virtual ~CppCodeEmitter() = default;
23 
24     bool OutPut(const AutoPtr<AST>& ast, const String& targetDirectory);
25 protected:
26     void GetStdlibInclusions(HeaderFile::HeaderFileSet& headerFiles);
27 
28     void GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles);
29 
30     void EmitInterfaceMethodParameter(const AutoPtr<ASTParameter>& param, StringBuilder& sb, const String& prefix);
31 
32     void EmitLicense(StringBuilder& sb);
33 
34     void EmitHeadMacro(StringBuilder& sb, const String& fullName);
35 
36     void EmitTailMacro(StringBuilder& sb, const String& fullName);
37 
38     void EmitHeadExternC(StringBuilder& sb);
39 
40     void EmitTailExternC(StringBuilder& sb);
41 
42     bool isVersion(const String& name);
43 
44     std::vector<String> EmitCppNameSpaceVec(const String& namespaceStr);
45 
46     String EmitPackageToNameSpace(const String& packageName);
47 
48     virtual void EmitBeginNamespace(StringBuilder& sb);
49 
50     virtual void EmitEndNamespace(StringBuilder& sb);
51 
52     void EmitUsingNamespace(StringBuilder& sb);
53 
54     String EmitNamespace(const String& packageName);
55 
56     void EmitImportUsingNamespace(StringBuilder& sb);
57 
58     void EmitWriteMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName, StringBuilder& sb,
59         const String& prefix);
60 
61     void EmitReadMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName, bool initVariable,
62         StringBuilder& sb, const String& prefix);
63 
64     void EmitLocalVariable(const AutoPtr<ASTParameter>& param, StringBuilder& sb, const String& prefix);
65 
66     String MacroName(const String& name);
67 
68     String ConstantName(const String& name);
69 
70     String SpecificationParam(StringBuilder& sb, const String& prefix);
71 };
72 } // namespace HDI
73 } // namespace OHOS
74 
75 #endif // OHOS_HDI_CPP_CODE_EMITTER_H