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_ASTARRAYTYPE_H 10 #define OHOS_HDI_ASTARRAYTYPE_H 11 12 #include "ast/ast_type.h" 13 14 namespace OHOS { 15 namespace HDI { 16 class ASTArrayType : public ASTType { 17 public: SetElementType(const AutoPtr<ASTType> & elementType)18 inline void SetElementType(const AutoPtr<ASTType>& elementType) 19 { 20 elementType_ = elementType; 21 } 22 GetElementType()23 inline AutoPtr<ASTType> GetElementType() 24 { 25 return elementType_; 26 } 27 28 bool IsArrayType() override; 29 30 String ToString() override; 31 32 TypeKind GetTypeKind() override; 33 34 String EmitCType(TypeMode mode = TypeMode::NO_MODE) const override; 35 36 String EmitCppType(TypeMode mode = TypeMode::NO_MODE) const override; 37 38 String EmitJavaType(TypeMode mode, bool isInnerType = false) const override; 39 40 void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName, 41 const String& gotoLabel, StringBuilder& sb, const String& prefix) const override; 42 43 void EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName, 44 const String& gotoLabel, StringBuilder& sb, const String& prefix) const override; 45 46 void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName, 47 const String& gotoLabel, StringBuilder& sb, const String& prefix) const override; 48 49 void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName, 50 const String& gotoLabel, StringBuilder& sb, const String& prefix) const override; 51 52 void EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName, 53 const String& gotoLabel, StringBuilder& sb, const String& prefix) const override; 54 55 void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb, 56 const String& prefix, unsigned int innerLevel = 0) const override; 57 58 void EmitCppReadVar(const String& parcelName, const String& name, StringBuilder& sb, 59 const String& prefix, bool initVariable, unsigned int innerLevel = 0) const override; 60 61 void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override; 62 63 void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix, 64 std::vector<String>& freeObjStatements) const override; 65 66 void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb, 67 const String& prefix, unsigned int innerLevel = 0) const override; 68 69 void EmitCppUnMarshalling(const String& parcelName, const String& name, StringBuilder& sb, 70 const String& prefix, bool emitType, unsigned int innerLevel = 0) const override; 71 72 void EmitMemoryRecycle(const String& name, bool isClient, bool ownership, StringBuilder& sb, 73 const String& prefix) const override; 74 75 void EmitJavaWriteVar(const String& parcelName, const String& name, StringBuilder& sb, 76 const String& prefix) const override; 77 78 void EmitJavaReadVar(const String& parcelName, const String& name, StringBuilder& sb, 79 const String& prefix) const override; 80 81 void EmitJavaReadInnerVar(const String& parcelName, const String& name, bool isInner, StringBuilder& sb, 82 const String& prefix) const override; 83 private: 84 void EmitJavaWriteArrayVar(const String& parcelName, const String& name, StringBuilder& sb, 85 const String& prefix) const; 86 87 void EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& ecName, 88 const String& gotoLabel, StringBuilder& sb, const String& prefix) const; 89 90 void EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& ecName, 91 const String& gotoLabel, StringBuilder& sb, const String& prefix) const; 92 93 void EmitCStubReadStrElement(const String& parcelName, const String& name, const String& ecName, 94 const String& gotoLabel, StringBuilder& sb, const String& prefix) const; 95 96 void EmitCStringElementUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, 97 const String& newPrefix, std::vector<String>& freeObjStatements) const; 98 99 AutoPtr<ASTType> elementType_; 100 }; 101 } // namespace HDI 102 } // namespace OHOS 103 104 #endif // OHOS_HDI_ASTARRAYTYPE_H