• 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_builder.h"
16 
17 namespace OHOS {
18 namespace HDI {
19 class CppCodeEmitter : public CodeEmitter {
20 public:
21     virtual ~CppCodeEmitter() = default;
22 
23     bool OutPut(const AutoPtr<AST> &ast, const std::string &targetDirectory);
24 
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 std::string &prefix);
31 
32     void EmitLicense(StringBuilder &sb);
33 
34     void EmitHeadMacro(StringBuilder &sb, const std::string &fullName);
35 
36     void EmitTailMacro(StringBuilder &sb, const std::string &fullName);
37 
38     void EmitHeadExternC(StringBuilder &sb);
39 
40     void EmitTailExternC(StringBuilder &sb);
41 
42     bool isVersion(const std::string &name);
43 
44     std::vector<std::string> EmitCppNameSpaceVec(const std::string &namespaceStr);
45 
46     std::string EmitPackageToNameSpace(const std::string &packageName);
47 
48     virtual void EmitBeginNamespace(StringBuilder &sb);
49 
50     virtual void EmitEndNamespace(StringBuilder &sb);
51 
52     virtual void EmitUsingNamespace(StringBuilder &sb);
53 
54     std::string EmitNamespace(const std::string &packageName);
55 
56     void EmitImportUsingNamespace(StringBuilder &sb);
57 
58     void EmitWriteMethodParameter(const AutoPtr<ASTParameter> &param, const std::string &parcelName, StringBuilder &sb,
59         const std::string &prefix);
60 
61     void EmitReadMethodParameter(const AutoPtr<ASTParameter> &param, const std::string &parcelName, bool initVariable,
62         StringBuilder &sb, const std::string &prefix);
63 
64     std::string MacroName(const std::string &name);
65 
66     std::string ConstantName(const std::string &name);
67 
68     std::string SpecificationParam(StringBuilder &sb, const std::string &prefix);
69 };
70 } // namespace HDI
71 } // namespace OHOS
72 
73 #endif // OHOS_HDI_CPP_CODE_EMITTER_H