Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 1 | #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 | |
| 13 | namespace android { |
| 14 | namespace hardware { |
| 15 | namespace tests { |
| 16 | namespace pointer { |
| 17 | namespace V1_0 { |
| 18 | namespace implementation { |
| 19 | |
| 20 | using ::android::hardware::tests::pointer::V1_0::IPointer; |
| 21 | using ::android::hardware::Return; |
| 22 | using ::android::hardware::Void; |
| 23 | using ::android::hardware::hidl_vec; |
| 24 | using ::android::hardware::hidl_string; |
| 25 | using ::android::sp; |
| 26 | |
| 27 | struct Pointer : public IPointer { |
| 28 | private: |
| 29 | std::vector<std::string> errors; |
| 30 | public: |
| 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 Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 159 | 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 Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 161 | PUSH_ERROR_IF(a_array[0][0][0].s_ptr->data != 500); |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 162 | for(size_t i = 0; i < 1; i++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 163 | for(size_t j = 0; j < 2; j++) |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 164 | for(size_t k = 0; k < 3; k++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 165 | PUSH_ERROR_IF(a_array[i][j][k].s_ptr != a_array[0][0][0].s_ptr); |
| 166 | return Void(); |
| 167 | } |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 168 | Return<void> foo22(const hidl_array<IPointer::Ada const*, 1, 2, 3>& a_ptr_array) override { |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 169 | PUSH_ERROR_IF(a_ptr_array[0][0][0]->s_ptr->data != 500); |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 170 | for(size_t i = 0; i < 1; i++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 171 | for(size_t j = 0; j < 2; j++) |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 172 | for(size_t k = 0; k < 3; k++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 173 | 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 Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 318 | hidl_array<IPointer::Ada, 1, 2, 3> a_array; |
| 319 | for(size_t i = 0; i < 1; i++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 320 | for(size_t j = 0; j < 2; j++) |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 321 | for(size_t k = 0; k < 3; k++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 322 | a_array[i][j][k] = *a; |
| 323 | _cb(&a_array); |
| 324 | return Void(); |
| 325 | } |
| 326 | Return<void> bar22(bar22_cb _cb) override { |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 327 | hidl_array<const IPointer::Ada *, 1, 2, 3> a_ptr_array; |
| 328 | for(size_t i = 0; i < 1; i++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 329 | for(size_t j = 0; j < 2; j++) |
Yifan Hong | 1d57002 | 2016-11-02 13:29:13 -0700 | [diff] [blame] | 330 | for(size_t k = 0; k < 3; k++) |
Yifan Hong | d5b5b2e | 2016-10-06 13:50:49 -0700 | [diff] [blame] | 331 | a_ptr_array[i][j][k] = a; |
| 332 | _cb(a_ptr_array); |
| 333 | return Void(); |
| 334 | } |
| 335 | }; |
| 336 | |
| 337 | extern "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_ |