1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected]; 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::Monostate; 20*4d7e907cSAndroid Build Coastguard Worker 21*4d7e907cSAndroid Build Coastguard Workerinterface ISafeUnion { 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard Worker enum BitField : uint8_t { 24*4d7e907cSAndroid Build Coastguard Worker V0 = 1 << 0, 25*4d7e907cSAndroid Build Coastguard Worker V1 = 1 << 1, 26*4d7e907cSAndroid Build Coastguard Worker V2 = 1 << 2, 27*4d7e907cSAndroid Build Coastguard Worker V3 = 1 << 3, 28*4d7e907cSAndroid Build Coastguard Worker }; 29*4d7e907cSAndroid Build Coastguard Worker 30*4d7e907cSAndroid Build Coastguard Worker struct J { 31*4d7e907cSAndroid Build Coastguard Worker vec<uint32_t> j1; 32*4d7e907cSAndroid Build Coastguard Worker uint8_t[65] j2; 33*4d7e907cSAndroid Build Coastguard Worker string j3; 34*4d7e907cSAndroid Build Coastguard Worker }; 35*4d7e907cSAndroid Build Coastguard Worker 36*4d7e907cSAndroid Build Coastguard Worker safe_union SmallSafeUnion { 37*4d7e907cSAndroid Build Coastguard Worker Monostate noinit; 38*4d7e907cSAndroid Build Coastguard Worker 39*4d7e907cSAndroid Build Coastguard Worker uint8_t a; 40*4d7e907cSAndroid Build Coastguard Worker }; 41*4d7e907cSAndroid Build Coastguard Worker 42*4d7e907cSAndroid Build Coastguard Worker safe_union LargeSafeUnion { 43*4d7e907cSAndroid Build Coastguard Worker Monostate noinit; 44*4d7e907cSAndroid Build Coastguard Worker 45*4d7e907cSAndroid Build Coastguard Worker int8_t a; 46*4d7e907cSAndroid Build Coastguard Worker uint16_t b; 47*4d7e907cSAndroid Build Coastguard Worker int32_t c; 48*4d7e907cSAndroid Build Coastguard Worker uint64_t d; 49*4d7e907cSAndroid Build Coastguard Worker 50*4d7e907cSAndroid Build Coastguard Worker int8_t[13] e; 51*4d7e907cSAndroid Build Coastguard Worker int64_t[5] f; 52*4d7e907cSAndroid Build Coastguard Worker 53*4d7e907cSAndroid Build Coastguard Worker string g; 54*4d7e907cSAndroid Build Coastguard Worker vec<bool> h; 55*4d7e907cSAndroid Build Coastguard Worker vec<uint64_t> i; 56*4d7e907cSAndroid Build Coastguard Worker 57*4d7e907cSAndroid Build Coastguard Worker J j; 58*4d7e907cSAndroid Build Coastguard Worker struct K { 59*4d7e907cSAndroid Build Coastguard Worker uint8_t k1; 60*4d7e907cSAndroid Build Coastguard Worker uint64_t k2; 61*4d7e907cSAndroid Build Coastguard Worker } k; 62*4d7e907cSAndroid Build Coastguard Worker 63*4d7e907cSAndroid Build Coastguard Worker SmallSafeUnion l; 64*4d7e907cSAndroid Build Coastguard Worker 65*4d7e907cSAndroid Build Coastguard Worker BitField m; 66*4d7e907cSAndroid Build Coastguard Worker bitfield<BitField> n; 67*4d7e907cSAndroid Build Coastguard Worker }; 68*4d7e907cSAndroid Build Coastguard Worker 69*4d7e907cSAndroid Build Coastguard Worker safe_union InterfaceTypeSafeUnion { 70*4d7e907cSAndroid Build Coastguard Worker Monostate noinit; 71*4d7e907cSAndroid Build Coastguard Worker 72*4d7e907cSAndroid Build Coastguard Worker uint32_t a; 73*4d7e907cSAndroid Build Coastguard Worker int8_t[7] b; 74*4d7e907cSAndroid Build Coastguard Worker interface c; 75*4d7e907cSAndroid Build Coastguard Worker string d; 76*4d7e907cSAndroid Build Coastguard Worker vec<string> e; 77*4d7e907cSAndroid Build Coastguard Worker handle f; 78*4d7e907cSAndroid Build Coastguard Worker vec<handle> g; 79*4d7e907cSAndroid Build Coastguard Worker }; 80*4d7e907cSAndroid Build Coastguard Worker 81*4d7e907cSAndroid Build Coastguard Worker safe_union HandleTypeSafeUnion { 82*4d7e907cSAndroid Build Coastguard Worker Monostate noinit; 83*4d7e907cSAndroid Build Coastguard Worker 84*4d7e907cSAndroid Build Coastguard Worker handle a; 85*4d7e907cSAndroid Build Coastguard Worker handle[5] b; 86*4d7e907cSAndroid Build Coastguard Worker vec<handle> c; 87*4d7e907cSAndroid Build Coastguard Worker }; 88*4d7e907cSAndroid Build Coastguard Worker 89*4d7e907cSAndroid Build Coastguard Worker newLargeSafeUnion() generates (LargeSafeUnion myUnion); 90*4d7e907cSAndroid Build Coastguard Worker setA(LargeSafeUnion myUnion, int8_t a) generates (LargeSafeUnion myUnion); 91*4d7e907cSAndroid Build Coastguard Worker setB(LargeSafeUnion myUnion, uint16_t b) generates (LargeSafeUnion myUnion); 92*4d7e907cSAndroid Build Coastguard Worker setC(LargeSafeUnion myUnion, int32_t c) generates (LargeSafeUnion myUnion); 93*4d7e907cSAndroid Build Coastguard Worker setD(LargeSafeUnion myUnion, uint64_t d) generates (LargeSafeUnion myUnion); 94*4d7e907cSAndroid Build Coastguard Worker setE(LargeSafeUnion myUnion, int8_t[13] e) generates (LargeSafeUnion myUnion); 95*4d7e907cSAndroid Build Coastguard Worker setF(LargeSafeUnion myUnion, int64_t[5] f) generates (LargeSafeUnion myUnion); 96*4d7e907cSAndroid Build Coastguard Worker setG(LargeSafeUnion myUnion, string g) generates (LargeSafeUnion myUnion); 97*4d7e907cSAndroid Build Coastguard Worker setH(LargeSafeUnion myUnion, vec<bool> h) generates (LargeSafeUnion myUnion); 98*4d7e907cSAndroid Build Coastguard Worker setI(LargeSafeUnion myUnion, vec<uint64_t> i) generates (LargeSafeUnion myUnion); 99*4d7e907cSAndroid Build Coastguard Worker setJ(LargeSafeUnion myUnion, J j) generates (LargeSafeUnion myUnion); 100*4d7e907cSAndroid Build Coastguard Worker setK(LargeSafeUnion myUnion, LargeSafeUnion.K k) generates (LargeSafeUnion myUnion); 101*4d7e907cSAndroid Build Coastguard Worker setL(LargeSafeUnion myUnion, SmallSafeUnion l) generates (LargeSafeUnion myUnion); 102*4d7e907cSAndroid Build Coastguard Worker setM(LargeSafeUnion myUnion, BitField m) generates (LargeSafeUnion myUnion); 103*4d7e907cSAndroid Build Coastguard Worker setN(LargeSafeUnion myUnion, bitfield<BitField> m) generates (LargeSafeUnion myUnion); 104*4d7e907cSAndroid Build Coastguard Worker 105*4d7e907cSAndroid Build Coastguard Worker newInterfaceTypeSafeUnion() generates (InterfaceTypeSafeUnion myUnion); 106*4d7e907cSAndroid Build Coastguard Worker setInterfaceA(InterfaceTypeSafeUnion myUnion, uint32_t a) generates (InterfaceTypeSafeUnion myUnion); 107*4d7e907cSAndroid Build Coastguard Worker setInterfaceB(InterfaceTypeSafeUnion myUnion, int8_t[7] b) generates (InterfaceTypeSafeUnion myUnion); 108*4d7e907cSAndroid Build Coastguard Worker setInterfaceC(InterfaceTypeSafeUnion myUnion, interface c) generates (InterfaceTypeSafeUnion myUnion); 109*4d7e907cSAndroid Build Coastguard Worker setInterfaceD(InterfaceTypeSafeUnion myUnion, string d) generates (InterfaceTypeSafeUnion myUnion); 110*4d7e907cSAndroid Build Coastguard Worker setInterfaceE(InterfaceTypeSafeUnion myUnion, vec<string> e) generates (InterfaceTypeSafeUnion myUnion); 111*4d7e907cSAndroid Build Coastguard Worker setInterfaceF(InterfaceTypeSafeUnion myUnion, handle f) generates (InterfaceTypeSafeUnion myUnion); 112*4d7e907cSAndroid Build Coastguard Worker setInterfaceG(InterfaceTypeSafeUnion myUnion, vec<handle> g) generates (InterfaceTypeSafeUnion myUnion); 113*4d7e907cSAndroid Build Coastguard Worker 114*4d7e907cSAndroid Build Coastguard Worker newHandleTypeSafeUnion() generates (HandleTypeSafeUnion myUnion); 115*4d7e907cSAndroid Build Coastguard Worker setHandleA(HandleTypeSafeUnion myUnion, handle a) generates (HandleTypeSafeUnion myUnion); 116*4d7e907cSAndroid Build Coastguard Worker setHandleB(HandleTypeSafeUnion myUnion, handle[5] b) generates (HandleTypeSafeUnion myUnion); 117*4d7e907cSAndroid Build Coastguard Worker setHandleC(HandleTypeSafeUnion myUnion, vec<handle> c) generates (HandleTypeSafeUnion myUnion); 118*4d7e907cSAndroid Build Coastguard Worker}; 119