• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (C) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *	http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #ifndef _ADLT_TEST_OOP_A_H_
16 #define _ADLT_TEST_OOP_A_H_
17 
18 #include <cstdio>
19 
20 namespace liba {
21 #define LIB_SUFFIX A
22 #define STRINGIZE1(value) #value
23 #define STRINGIZE(value) STRINGIZE1(value)
24 #define LIB_STRING STRINGIZE(LIB_SUFFIX)
25 
26 /***
27  * Constructor/destructor test classes
28  ***/
29 
30 class Class {
31 public:
32     explicit Class(int);
33     ~Class();
34     int Payload(const char *);
35 
36 private:
37     int intVar = 0;
38 };
39 
40 /***
41  * Vtable test classes
42  ***/
43 
44 class GlobalPoly {
45 public:
46     explicit GlobalPoly(int);
47     virtual int VirtualMethod();
48     static GlobalPoly *New(int value);
49     static GlobalPoly *NewDerived(int value);
50 
51     virtual ~GlobalPoly();
52 
53 protected:
54     int intVar = 0;
55 };
56 
57 class GlobalPolyDerived : public GlobalPoly {
58 public:
59     explicit GlobalPolyDerived(int);
60     int VirtualMethod() override;
61 };
62 
63 class InlinePoly {
64 public:
InlinePoly(int value)65     explicit InlinePoly(int value) : intVar(value) {}
VirtualMethod()66     virtual int VirtualMethod() {
67         puts("InlinePoly" LIB_STRING "::VirtualMethod");
68         return intVar;
69     }
70     static InlinePoly *New(int value);
71     static InlinePoly *NewDerived(int value);
72 
73     virtual ~InlinePoly() = default;
74 
75 protected:
76     int intVar = 0;
77 };
78 
79 class InlinePolyDerived : public InlinePoly {
80 public:
InlinePolyDerived(int value)81     explicit InlinePolyDerived(int value) : InlinePoly(value) {}
VirtualMethod()82     int VirtualMethod() override {
83         puts("InlinePolyDerived" LIB_STRING "::VirtualMethod");
84         return intVar + 20;
85     }
86 };
87 
88 class LocalPoly {
89 public:
90     explicit LocalPoly(int value);
91     virtual int VirtualMethod();
92     static LocalPoly *New(int value);
93     static LocalPoly *NewDerived(int value);
94 
95     virtual ~LocalPoly();
96 
97 protected:
98     int intVar = 0;
99 };
100 
101 /***
102  * Virtual inheritance test classes
103  ***/
104 
105 class DiamondRoot {
106 public:
107     explicit DiamondRoot(int data);
108     virtual ~DiamondRoot() = default;
109 
110     virtual int VirtualMethod();
111     virtual int VirtualMethod1();
112     virtual int VirtualMethod2();
113     virtual int VirtualMethod3();
114 
115 protected:
116     int rootData;
117 };
118 
119 class DiamondLeft : public virtual DiamondRoot {
120 public:
121     explicit DiamondLeft(int rootData, int data);
122     ~DiamondLeft() override = default;
123 
124     int VirtualMethod1() override;
125 
126 protected:
127     int leftData;
128 };
129 
130 class DiamondRight : public virtual DiamondRoot {
131 public:
132     explicit DiamondRight(int rootData, int data);
133     ~DiamondRight() override = default;
134 
135     int VirtualMethod2() override;
136 
137 protected:
138     int rightData;
139 };
140 
141 class DiamondChild : public DiamondLeft, public DiamondRight {
142 public:
143     explicit DiamondChild(int rootData, int leftData, int rightData, int data);
144 
145     int VirtualMethod3() override;
146 
147 protected:
148     int childData;
149 };
150 
151 #undef STRINGIZE1
152 #undef STRINGIZE
153 #undef LIB_STRING
154 #undef LIB_SUFFIX
155 } // namespace liba
156 
157 #endif