blob: 41d96fdbc04901da082fa0e8e95aa0ae2b25ff21 [file] [log] [blame]
Yifan Hongd5b5b2e2016-10-06 13:50:49 -07001#ifndef HIDL_GENERATED_android_hardware_tests_pointer_V1_0_Pointer_H_
2#define HIDL_GENERATED_android_hardware_tests_pointer_V1_0_Pointer_H_
3
4#include <android/hardware/tests/pointer/1.0/IPointer.h>
5#include <android-base/logging.h>
6#include <hidl/Status.h>
7
8#include <hidl/MQDescriptor.h>
9
10// TODO move to Pointer.cpp so that I won't have weird macros in headers
11#define PUSH_ERROR_IF(__cond__) if(__cond__) { errors.push_back(std::to_string(__LINE__) + ": " + #__cond__); }
12
13namespace android {
14namespace hardware {
15namespace tests {
16namespace pointer {
17namespace V1_0 {
18namespace implementation {
19
20using ::android::hardware::tests::pointer::V1_0::IPointer;
21using ::android::hardware::Return;
22using ::android::hardware::Void;
23using ::android::hardware::hidl_vec;
24using ::android::hardware::hidl_string;
25using ::android::sp;
26
27struct Pointer : public IPointer {
28private:
29 std::vector<std::string> errors;
30public:
31 Return<int32_t> getErrors() {
32 if(!errors.empty()) {
33 for(const auto& e : errors)
34 ALOGW("SERVER(Pointer) error: %s", e.c_str());
35 }
36 return errors.size();
37 }
38 Return<void> foo1(const IPointer::Sam& s, IPointer::Sam const* s_ptr) override {
39 PUSH_ERROR_IF(!(&s == s_ptr));
40 return Void();
41 }
42 Return<void> foo2(const IPointer::Sam& s, const IPointer::Ada& a) override {
43 PUSH_ERROR_IF(!(&s == a.s_ptr));
44 return Void();
45 }
46 Return<void> foo3(const IPointer::Sam& s, const IPointer::Ada& a, const IPointer::Bob& b) override {
47 PUSH_ERROR_IF(!(&a == b.a_ptr && a.s_ptr == b.s_ptr && a.s_ptr == &s));
48 return Void();
49 }
50 Return<void> foo4(IPointer::Sam const* s_ptr) override {
51 PUSH_ERROR_IF(!(s_ptr->data == 500));
52 return Void();
53 }
54 Return<void> foo5(const IPointer::Ada& a, const IPointer::Bob& b) override {
55 PUSH_ERROR_IF(!(a.s_ptr == b.s_ptr && b.a_ptr == &a));
56 return Void();
57 }
58 Return<void> foo6(IPointer::Ada const* a_ptr) override {
59 PUSH_ERROR_IF(!(a_ptr->s_ptr->data == 500));
60 return Void();
61 }
62 Return<void> foo7(IPointer::Ada const* a_ptr, IPointer::Bob const* b_ptr) override {
63 PUSH_ERROR_IF(!(a_ptr->s_ptr == b_ptr->s_ptr && a_ptr == b_ptr->a_ptr && a_ptr->s_ptr->data == 500));
64 return Void();
65 }
66 Return<void> foo8(const IPointer::Dom& d) override {
67 const IPointer::Cin& c = d.c;
68 PUSH_ERROR_IF(&c.a != c.b_ptr->a_ptr);
69 PUSH_ERROR_IF(c.a.s_ptr != c.b_ptr->s_ptr);
70 PUSH_ERROR_IF(c.a.s_ptr->data != 500);
71 return Void();
72 }
73 Return<void> foo9(::android::hardware::hidl_string const* str_ref) override {
74 ALOGI("SERVER(Pointer) foo9 got string @ %p (size = %ld) \"%s\"",
75 str_ref->c_str(),
76 (unsigned long) str_ref->size(), str_ref->c_str());
77 PUSH_ERROR_IF(!(strcmp(str_ref->c_str(), "meowmeowmeow") == 0));
78 return Void();
79 }
80 Return<void> foo10(const ::android::hardware::hidl_vec<IPointer::Sam const*>& s_ptr_vec) override {
81 PUSH_ERROR_IF(s_ptr_vec[0]->data != 500);
82 if(s_ptr_vec.size() != 5) {
83 errors.push_back("foo10: s_ptr_vec.size() != 5");
84 return Void();
85 }
86 for(size_t i = 0; i < s_ptr_vec.size(); i++)
87 PUSH_ERROR_IF(s_ptr_vec[0] != s_ptr_vec[i]);
88 return Void();
89 }
90 Return<void> foo11(::android::hardware::hidl_vec<IPointer::Sam> const* s_vec_ptr) override {
91 if(s_vec_ptr->size() != 5) {
92 errors.push_back("foo11: s_vec_ptr->size() != 5");
93 return Void();
94 }
95 for(size_t i = 0; i < 5; i++)
96 PUSH_ERROR_IF((*s_vec_ptr)[i].data != 500);
97 return Void();
98 }
99 Return<void> foo12(hidl_array<IPointer::Sam, 5> const* s_array_ref) override {
100 for(size_t i = 0; i < 5; ++i)
101 PUSH_ERROR_IF((*s_array_ref)[i].data != 500);
102 return Void();
103 }
104 Return<void> foo13(const hidl_array<IPointer::Sam const*, 5>& s_ref_array) override {
105 PUSH_ERROR_IF(s_ref_array[0]->data != 500)
106 for(size_t i = 0; i < 5; i++)
107 PUSH_ERROR_IF(s_ref_array[i] != s_ref_array[0])
108 return Void();
109 }
110 Return<void> foo14(IPointer::Sam const* const* const* s_3ptr) override {
111 PUSH_ERROR_IF(!((***s_3ptr).data == 500))
112 return Void();
113 }
114 Return<void> foo15(int32_t const* const* const* i_3ptr) override {
115 PUSH_ERROR_IF(!((***i_3ptr) == 500))
116 return Void();
117 }
118
119 Return<void> foo16(const IPointer::Ptr& p) override {
120 PUSH_ERROR_IF((*p.array_ptr)[0].s_ptr->data != 500);
121 for(size_t i = 0; i < 5; i++) PUSH_ERROR_IF((*p.array_ptr)[i].s_ptr != (*p.array_ptr)[0].s_ptr);
122 PUSH_ERROR_IF(*(p.int_ptr) != 500);
123 for(size_t i = 0; i < 5; i++) PUSH_ERROR_IF((*p.int_array_ptr)[i] != 500);
124 for(size_t i = 0; i < 5; i++) PUSH_ERROR_IF(p.int_ptr_array[i] != p.int_ptr);
125 PUSH_ERROR_IF(p.a_ptr_vec.size() != 5);
126 PUSH_ERROR_IF(p.a_ptr_vec[0]->s_ptr->data != 500);
127 for(size_t i = 0; i < 5; i++) PUSH_ERROR_IF(p.a_ptr_vec[i]->s_ptr != p.a_ptr_vec[0]->s_ptr);
128 PUSH_ERROR_IF(strcmp(p.str_ref->c_str(), "meowmeowmeow") != 0);
129 PUSH_ERROR_IF(p.a_vec_ptr->size() != 5);
130 PUSH_ERROR_IF((*p.a_vec_ptr)[0].s_ptr->data != 500);
131 for(size_t i = 0; i < 5; i++) PUSH_ERROR_IF((*p.a_vec_ptr)[i].s_ptr != (*p.a_vec_ptr)[0].s_ptr);
132 return Void();
133 };
134 Return<void> foo17(IPointer::Ptr const* p) override {
135 return foo16(*p);
136 };
137 Return<void> foo18(hidl_string const* str_ref, hidl_string const* str_ref2, const hidl_string& str) override {
138 PUSH_ERROR_IF(&str != str_ref);
139 PUSH_ERROR_IF(str_ref != str_ref2);
140 PUSH_ERROR_IF(strcmp(str.c_str(), "meowmeowmeow") != 0)
141 return Void();
142 };
143 Return<void> foo19(
144 hidl_vec<IPointer::Ada> const* a_vec_ref,
145 const hidl_vec<IPointer::Ada>& a_vec,
146 hidl_vec<IPointer::Ada> const* a_vec_ref2) {
147 PUSH_ERROR_IF(&a_vec != a_vec_ref);
148 PUSH_ERROR_IF(a_vec_ref2 != a_vec_ref);
149 PUSH_ERROR_IF(a_vec.size() != 5);
150 PUSH_ERROR_IF(a_vec[0].s_ptr->data != 500);
151 for(size_t i = 0; i < 5; i++)
152 PUSH_ERROR_IF(a_vec[i].s_ptr != a_vec[0].s_ptr);
153 return Void();
154 };
155
156 Return<void> foo20(const hidl_vec<IPointer::Sam const*>&) override {
157 return Void();
158 }
Yifan Hong1d570022016-11-02 13:29:13 -0700159 Return<void> foo21(hidl_array<IPointer::Ada, 1, 2, 3> const* a_array_ptr) override {
160 const hidl_array<IPointer::Ada, 1, 2, 3>& a_array = *a_array_ptr;
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700161 PUSH_ERROR_IF(a_array[0][0][0].s_ptr->data != 500);
Yifan Hong1d570022016-11-02 13:29:13 -0700162 for(size_t i = 0; i < 1; i++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700163 for(size_t j = 0; j < 2; j++)
Yifan Hong1d570022016-11-02 13:29:13 -0700164 for(size_t k = 0; k < 3; k++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700165 PUSH_ERROR_IF(a_array[i][j][k].s_ptr != a_array[0][0][0].s_ptr);
166 return Void();
167 }
Yifan Hong1d570022016-11-02 13:29:13 -0700168 Return<void> foo22(const hidl_array<IPointer::Ada const*, 1, 2, 3>& a_ptr_array) override {
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700169 PUSH_ERROR_IF(a_ptr_array[0][0][0]->s_ptr->data != 500);
Yifan Hong1d570022016-11-02 13:29:13 -0700170 for(size_t i = 0; i < 1; i++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700171 for(size_t j = 0; j < 2; j++)
Yifan Hong1d570022016-11-02 13:29:13 -0700172 for(size_t k = 0; k < 3; k++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700173 PUSH_ERROR_IF(a_ptr_array[i][j][k] != a_ptr_array[0][0][0]);
174 return Void();
175 }
176
177 IPointer::Sam *s;
178 IPointer::Ada *a;
179 IPointer::Bob *b;
180 IPointer::Cin *c;
181 IPointer::Dom *d;
182
183 IPointer::Ptr p;
184 hidl_array<IPointer::Ada, 5> a_array;
185 int32_t someInt;
186 hidl_array<int32_t, 5> someIntArray;
187 hidl_string str;
188 hidl_vec<IPointer::Ada> a_vec;
189 Pointer() {
190 d = new IPointer::Dom();
191 s = new IPointer::Sam();
192 b = new IPointer::Bob();
193 c = &d->c;
194 a = &c->a;
195 b->s_ptr = a->s_ptr = s;
196 b->a_ptr = a;
197 c->b_ptr = b;
198 s->data = 500;
199
200 someInt = 500;
201 for(size_t i = 0; i < 5; i++) someIntArray[i] = 500;
202
203 for(size_t i = 0; i < 5; i++) a_array[i] = *a;
204
205 for(size_t i = 0; i < 5; i++) p.ptr_array[i] = a;
206 p.array_ptr = &a_array;
207 p.int_ptr = &someInt;
208 p.int_array_ptr = &someIntArray;
209 for(size_t i = 0; i < 5; i++) p.int_ptr_array[i] = &someInt;
210 p.a_ptr_vec.resize(5);
211 for(size_t i = 0; i < 5; i++) p.a_ptr_vec[i] = a;
212 str = "meowmeowmeow";
213 p.str_ref = &str;
214 a_vec.resize(5);
215 for(size_t i = 0; i < 5; i++) a_vec[i].s_ptr = s;
216 p.a_vec_ptr = &a_vec;
217 }
218 ~Pointer() {
219 delete d; delete s; delete b;
220 }
221 Return<void> bar1(bar1_cb _cb) override {
222 _cb(*s, s);
223 return Void();
224 }
225 Return<void> bar2(bar2_cb _cb) override {
226 _cb(*s, *a);
227 return Void();
228 }
229 Return<void> bar3(bar3_cb _cb) override {
230 _cb(*s, *a, *b);
231 return Void();
232 }
233 Return<void> bar4(bar4_cb _cb) override {
234 _cb(s);
235 return Void();
236 }
237 Return<void> bar5(bar5_cb _cb) override {
238 _cb(*a, *b);
239 return Void();
240 }
241 Return<void> bar6(bar6_cb _cb) override {
242 _cb(a);
243 return Void();
244 }
245 Return<void> bar7(bar7_cb _cb) override {
246 _cb(a, b);
247 return Void();
248 }
249 Return<void> bar8(bar8_cb _cb) override {
250 _cb(*d);
251 return Void();
252 }
253 Return<void> bar9(bar9_cb _cb) override {
254 _cb(&str);
255 return Void();
256 }
257 Return<void> bar10(bar10_cb _cb) override {
258 hidl_vec<const IPointer::Sam *> v; v.resize(5);
259 for(size_t i = 0; i < 5; i++) v[i] = s;
260 _cb(v);
261 return Void();
262 }
263 Return<void> bar11(bar11_cb _cb) override {
264 hidl_vec<IPointer::Sam> v; v.resize(5);
265 for(size_t i = 0; i < 5; i++) v[i].data = 500;
266 _cb(&v);
267 return Void();
268 }
269 Return<void> bar12(bar12_cb _cb) override {
270 hidl_array<IPointer::Sam, 5> array;
271 for(size_t i = 0; i < 5; i++) array[i] = *s;
272 _cb(&array);
273 return Void();
274 }
275 Return<void> bar13(bar13_cb _cb) override {
276 hidl_array<const IPointer::Sam *, 5> array;
277 for(size_t i = 0; i < 5; i++) array[i] = s;
278 _cb(array);
279 return Void();
280 }
281 Return<void> bar14(bar14_cb _cb) override {
282 IPointer::Sam const* p1 = s;
283 IPointer::Sam const* const* p2 = &p1;
284 _cb(&p2);
285 return Void();
286 }
287 Return<void> bar15(bar15_cb _cb) override {
288 int32_t const* p1 = &someInt;
289 int32_t const* const* p2 = &p1;
290 _cb(&p2);
291 return Void();
292 }
293 Return<void> bar16(bar16_cb _cb) override {
294 _cb(p);
295 return Void();
296 }
297 Return<void> bar17(bar17_cb _cb) override {
298 _cb(&p);
299 return Void();
300 }
301 Return<void> bar18(bar18_cb _cb) override {
302 _cb(&str, &str, str);
303 return Void();
304 }
305 Return<void> bar19(bar19_cb _cb) override {
306 _cb(&a_vec, a_vec, &a_vec);
307 return Void();
308 }
309 Return<void> bar20(bar20_cb _cb) override {
310 // 1026 == PARCEL_REF_CAP + 2.
311 // 1026 means 1 writeBuffer and 1025 writeReferences. 1025 > PARCEL_REF_CAP.
312 hidl_vec<const IPointer::Sam *> v; v.resize(1026);
313 for(size_t i = 0; i < 1026; i++) v[i] = s;
314 _cb(v);
315 return Void();
316 }
317 Return<void> bar21(bar21_cb _cb) override {
Yifan Hong1d570022016-11-02 13:29:13 -0700318 hidl_array<IPointer::Ada, 1, 2, 3> a_array;
319 for(size_t i = 0; i < 1; i++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700320 for(size_t j = 0; j < 2; j++)
Yifan Hong1d570022016-11-02 13:29:13 -0700321 for(size_t k = 0; k < 3; k++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700322 a_array[i][j][k] = *a;
323 _cb(&a_array);
324 return Void();
325 }
326 Return<void> bar22(bar22_cb _cb) override {
Yifan Hong1d570022016-11-02 13:29:13 -0700327 hidl_array<const IPointer::Ada *, 1, 2, 3> a_ptr_array;
328 for(size_t i = 0; i < 1; i++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700329 for(size_t j = 0; j < 2; j++)
Yifan Hong1d570022016-11-02 13:29:13 -0700330 for(size_t k = 0; k < 3; k++)
Yifan Hongd5b5b2e2016-10-06 13:50:49 -0700331 a_ptr_array[i][j][k] = a;
332 _cb(a_ptr_array);
333 return Void();
334 }
335};
336
337extern "C" IPointer* HIDL_FETCH_IPointer(const char* name);
338
339} // namespace implementation
340} // namespace V1_0
341} // namespace pointer
342} // namespace tests
343} // namespace hardware
344} // namespace android
345
346#undef PUSH_ERROR_IF
347
348#endif // HIDL_GENERATED_android_hardware_tests_pointer_V1_0_Pointer_H_