• 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_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