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> ¶m, 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> ¶m, const std::string &parcelName, StringBuilder &sb, 59 const std::string &prefix); 60 61 void EmitReadMethodParameter(const AutoPtr<ASTParameter> ¶m, 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