1 /* 2 * Copyright (c) 2022 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_AST_SMQ_H 10 #define OHOS_HDI_AST_SMQ_H 11 12 #include "ast/ast_type.h" 13 14 namespace OHOS { 15 namespace HDI { 16 class ASTSmqType : public ASTType { 17 public: ASTSmqType()18 ASTSmqType() : ASTType(TypeKind::TYPE_SMQ, false), innerType_() {} 19 SetInnerType(const AutoPtr<ASTType> & innerType)20 inline void SetInnerType(const AutoPtr<ASTType> &innerType) 21 { 22 innerType_ = innerType; 23 } 24 25 bool IsSmqType() override; 26 27 bool HasInnerType(TypeKind innerType) const override; 28 29 std::string ToString() const override; 30 31 TypeKind GetTypeKind() override; 32 33 std::string EmitCppType(TypeMode mode = TypeMode::NO_MODE) const override; 34 35 void EmitCppWriteVar(const std::string &parcelName, const std::string &name, StringBuilder &sb, 36 const std::string &prefix, unsigned int innerLevel = 0) const override; 37 38 void EmitCppReadVar(const std::string &parcelName, const std::string &name, StringBuilder &sb, 39 const std::string &prefix, bool initVariable, unsigned int innerLevel = 0) const override; 40 41 void EmitCppMarshalling(const std::string &parcelName, const std::string &name, StringBuilder &sb, 42 const std::string &prefix, unsigned int innerLevel = 0) const override; 43 44 void EmitCppUnMarshalling(const std::string &parcelName, const std::string &name, StringBuilder &sb, 45 const std::string &prefix, bool emitType, unsigned int innerLevel = 0) const override; 46 47 private: 48 AutoPtr<ASTType> innerType_; 49 }; 50 51 class ASTAshmemType : public ASTType { 52 public: ASTAshmemType()53 ASTAshmemType() : ASTType(TypeKind::TYPE_ASHMEM, false) {} 54 55 bool IsAshmemType() override; 56 57 std::string ToString() const override; 58 59 TypeKind GetTypeKind() override; 60 61 std::string EmitCppType(TypeMode mode = TypeMode::NO_MODE) const override; 62 63 void EmitCppWriteVar(const std::string &parcelName, const std::string &name, StringBuilder &sb, 64 const std::string &prefix, unsigned int innerLevel = 0) const override; 65 66 void EmitCppReadVar(const std::string &parcelName, const std::string &name, StringBuilder &sb, 67 const std::string &prefix, bool initVariable, unsigned int innerLevel = 0) const override; 68 69 void EmitCppMarshalling(const std::string &parcelName, const std::string &name, StringBuilder &sb, 70 const std::string &prefix, unsigned int innerLevel = 0) const override; 71 72 void EmitCppUnMarshalling(const std::string &parcelName, const std::string &name, StringBuilder &sb, 73 const std::string &prefix, bool emitType, unsigned int innerLevel = 0) const override; 74 }; 75 } // namespace HDI 76 } // namespace OHOS 77 78 #endif // OHOS_HDI_AST_SMQ_H