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