1*890232f2SAndroid Build Coastguard Worker /* 2*890232f2SAndroid Build Coastguard Worker * Copyright 2021 Google Inc. All rights reserved. 3*890232f2SAndroid Build Coastguard Worker * 4*890232f2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*890232f2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*890232f2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*890232f2SAndroid Build Coastguard Worker * 8*890232f2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*890232f2SAndroid Build Coastguard Worker * 10*890232f2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*890232f2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*890232f2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*890232f2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*890232f2SAndroid Build Coastguard Worker * limitations under the License. 15*890232f2SAndroid Build Coastguard Worker */ 16*890232f2SAndroid Build Coastguard Worker 17*890232f2SAndroid Build Coastguard Worker import XCTest 18*890232f2SAndroid Build Coastguard Worker @testable import FlatBuffers 19*890232f2SAndroid Build Coastguard Worker 20*890232f2SAndroid Build Coastguard Worker final class FlatBuffersUnionTests: XCTestCase { 21*890232f2SAndroid Build Coastguard Worker testCreateMonstornull22*890232f2SAndroid Build Coastguard Worker func testCreateMonstor() { 23*890232f2SAndroid Build Coastguard Worker 24*890232f2SAndroid Build Coastguard Worker var b = FlatBufferBuilder(initialSize: 20) 25*890232f2SAndroid Build Coastguard Worker let dmg: Int16 = 5 26*890232f2SAndroid Build Coastguard Worker let str = "Axe" 27*890232f2SAndroid Build Coastguard Worker let axe = b.create(string: str) 28*890232f2SAndroid Build Coastguard Worker let weapon = Weapon.createWeapon(builder: &b, offset: axe, dmg: dmg) 29*890232f2SAndroid Build Coastguard Worker let weapons = b.createVector(ofOffsets: [weapon]) 30*890232f2SAndroid Build Coastguard Worker let root = LocalMonster.createMonster( 31*890232f2SAndroid Build Coastguard Worker builder: &b, 32*890232f2SAndroid Build Coastguard Worker offset: weapons, 33*890232f2SAndroid Build Coastguard Worker equipment: .Weapon, 34*890232f2SAndroid Build Coastguard Worker equippedOffset: weapon.o) 35*890232f2SAndroid Build Coastguard Worker b.finish(offset: root) 36*890232f2SAndroid Build Coastguard Worker let buffer = b.sizedByteArray 37*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 38*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(buffer, [16, 0, 0, 0, 0, 0, 10, 0, 16, 0, 8, 0, 7, 0, 12, 0, 10, 0, 0, 0, 0, 0, 0, 1, 8, 0, 0, 0, 20, 0, 0, 0, 1, 0, 0, 0, 12, 0, 0, 0, 8, 0, 12, 0, 8, 0, 6, 0, 8, 0, 0, 0, 0, 0, 5, 0, 4, 0, 0, 0, 3, 0, 0, 0, 65, 120, 101, 0]) 39*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 40*890232f2SAndroid Build Coastguard Worker let monster = LocalMonster.getRootAsMonster(bb: ByteBuffer(bytes: buffer)) 41*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.weapon(at: 0)?.dmg, dmg) 42*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.weapon(at: 0)?.name, str) 43*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.weapon(at: 0)?.nameVector, [65, 120, 101]) 44*890232f2SAndroid Build Coastguard Worker let p: Weapon? = monster.equiped() 45*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(p?.dmg, dmg) 46*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(p?.name, str) 47*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(p?.nameVector, [65, 120, 101]) 48*890232f2SAndroid Build Coastguard Worker } 49*890232f2SAndroid Build Coastguard Worker testEndTableFinishnull50*890232f2SAndroid Build Coastguard Worker func testEndTableFinish() { 51*890232f2SAndroid Build Coastguard Worker var builder = FlatBufferBuilder(initialSize: 20) 52*890232f2SAndroid Build Coastguard Worker let sword = builder.create(string: "Sword") 53*890232f2SAndroid Build Coastguard Worker let axe = builder.create(string: "Axe") 54*890232f2SAndroid Build Coastguard Worker let weaponOne = Weapon.createWeapon( 55*890232f2SAndroid Build Coastguard Worker builder: &builder, 56*890232f2SAndroid Build Coastguard Worker offset: sword, 57*890232f2SAndroid Build Coastguard Worker dmg: 3) 58*890232f2SAndroid Build Coastguard Worker let weaponTwo = Weapon.createWeapon(builder: &builder, offset: axe, dmg: 5) 59*890232f2SAndroid Build Coastguard Worker let name = builder.create(string: "Orc") 60*890232f2SAndroid Build Coastguard Worker let inventory: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 61*890232f2SAndroid Build Coastguard Worker let inv = builder.createVector(inventory, size: 10) 62*890232f2SAndroid Build Coastguard Worker let weapons = builder.createVector(ofOffsets: [weaponOne, weaponTwo]) 63*890232f2SAndroid Build Coastguard Worker let path = builder.createVector(ofStructs: [ 64*890232f2SAndroid Build Coastguard Worker Vec(x: 4.0, y: 5.0, z: 6.0), 65*890232f2SAndroid Build Coastguard Worker Vec(x: 1.0, y: 2.0, z: 3.0), 66*890232f2SAndroid Build Coastguard Worker ]) 67*890232f2SAndroid Build Coastguard Worker let orc = FinalMonster.createMonster( 68*890232f2SAndroid Build Coastguard Worker builder: &builder, 69*890232f2SAndroid Build Coastguard Worker position: Vec(x: 1, y: 2, z: 3), 70*890232f2SAndroid Build Coastguard Worker hp: 300, 71*890232f2SAndroid Build Coastguard Worker name: name, 72*890232f2SAndroid Build Coastguard Worker inventory: inv, 73*890232f2SAndroid Build Coastguard Worker color: .red, 74*890232f2SAndroid Build Coastguard Worker weapons: weapons, 75*890232f2SAndroid Build Coastguard Worker equipment: .Weapon, 76*890232f2SAndroid Build Coastguard Worker equippedOffset: weaponTwo, 77*890232f2SAndroid Build Coastguard Worker path: path) 78*890232f2SAndroid Build Coastguard Worker builder.finish(offset: orc) 79*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 80*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(builder.sizedByteArray, [32, 0, 0, 0, 0, 0, 26, 0, 48, 0, 36, 0, 0, 0, 34, 0, 28, 0, 0, 0, 24, 0, 23, 0, 16, 0, 15, 0, 8, 0, 4, 0, 26, 0, 0, 0, 44, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 76, 0, 0, 0, 0, 0, 44, 1, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 0, 0, 0, 0, 128, 64, 0, 0, 160, 64, 0, 0, 192, 64, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 0, 0, 52, 0, 0, 0, 28, 0, 0, 0, 10, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 3, 0, 0, 0, 79, 114, 99, 0, 244, 255, 255, 255, 0, 0, 5, 0, 24, 0, 0, 0, 8, 0, 12, 0, 8, 0, 6, 0, 8, 0, 0, 0, 0, 0, 3, 0, 12, 0, 0, 0, 3, 0, 0, 0, 65, 120, 101, 0, 5, 0, 0, 0, 83, 119, 111, 114, 100, 0, 0, 0]) 81*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 82*890232f2SAndroid Build Coastguard Worker } 83*890232f2SAndroid Build Coastguard Worker testEnumVectornull84*890232f2SAndroid Build Coastguard Worker func testEnumVector() { 85*890232f2SAndroid Build Coastguard Worker let vectorOfEnums: [ColorsNameSpace.RGB] = [.blue, .green] 86*890232f2SAndroid Build Coastguard Worker 87*890232f2SAndroid Build Coastguard Worker var builder = FlatBufferBuilder(initialSize: 1) 88*890232f2SAndroid Build Coastguard Worker let off = builder.createVector(vectorOfEnums) 89*890232f2SAndroid Build Coastguard Worker let start = ColorsNameSpace.Monster.startMonster(&builder) 90*890232f2SAndroid Build Coastguard Worker ColorsNameSpace.Monster.add(colors: off, &builder) 91*890232f2SAndroid Build Coastguard Worker let end = ColorsNameSpace.Monster.endMonster(&builder, start: start) 92*890232f2SAndroid Build Coastguard Worker builder.finish(offset: end) 93*890232f2SAndroid Build Coastguard Worker // swiftformat:disable all 94*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(builder.sizedByteArray, [12, 0, 0, 0, 0, 0, 6, 0, 8, 0, 4, 0, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0]) 95*890232f2SAndroid Build Coastguard Worker // swiftformat:enable all 96*890232f2SAndroid Build Coastguard Worker let monster = ColorsNameSpace.Monster.getRootAsMonster(bb: builder.buffer) 97*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.colorsCount, 2) 98*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.colors(at: 0), .blue) 99*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(monster.colors(at: 1), .green) 100*890232f2SAndroid Build Coastguard Worker } 101*890232f2SAndroid Build Coastguard Worker testUnionVectornull102*890232f2SAndroid Build Coastguard Worker func testUnionVector() { 103*890232f2SAndroid Build Coastguard Worker var fb = FlatBufferBuilder() 104*890232f2SAndroid Build Coastguard Worker 105*890232f2SAndroid Build Coastguard Worker let swordDmg: Int32 = 8 106*890232f2SAndroid Build Coastguard Worker let attackStart = Attacker.startAttacker(&fb) 107*890232f2SAndroid Build Coastguard Worker Attacker.add(swordAttackDamage: swordDmg, &fb) 108*890232f2SAndroid Build Coastguard Worker let attack = Attacker.endAttacker(&fb, start: attackStart) 109*890232f2SAndroid Build Coastguard Worker 110*890232f2SAndroid Build Coastguard Worker let characterType: [Character] = [.belle, .mulan, .bookfan] 111*890232f2SAndroid Build Coastguard Worker 112*890232f2SAndroid Build Coastguard Worker let characters = [ 113*890232f2SAndroid Build Coastguard Worker fb.create(struct: BookReader(booksRead: 7)), 114*890232f2SAndroid Build Coastguard Worker attack, 115*890232f2SAndroid Build Coastguard Worker fb.create(struct: BookReader(booksRead: 2)), 116*890232f2SAndroid Build Coastguard Worker ] 117*890232f2SAndroid Build Coastguard Worker let types = fb.createVector(characterType) 118*890232f2SAndroid Build Coastguard Worker let characterVector = fb.createVector(ofOffsets: characters) 119*890232f2SAndroid Build Coastguard Worker let end = Movie.createMovie( 120*890232f2SAndroid Build Coastguard Worker &fb, 121*890232f2SAndroid Build Coastguard Worker charactersTypeVectorOffset: types, 122*890232f2SAndroid Build Coastguard Worker charactersVectorOffset: characterVector) 123*890232f2SAndroid Build Coastguard Worker Movie.finish(&fb, end: end) 124*890232f2SAndroid Build Coastguard Worker 125*890232f2SAndroid Build Coastguard Worker var movie = Movie.getRootAsMovie(bb: fb.buffer) 126*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(movie.charactersTypeCount, Int32(characterType.count)) 127*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(movie.charactersCount, Int32(characters.count)) 128*890232f2SAndroid Build Coastguard Worker 129*890232f2SAndroid Build Coastguard Worker for i in 0..<movie.charactersTypeCount { 130*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(movie.charactersType(at: i), characterType[Int(i)]) 131*890232f2SAndroid Build Coastguard Worker } 132*890232f2SAndroid Build Coastguard Worker 133*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 134*890232f2SAndroid Build Coastguard Worker movie.characters(at: 0, type: BookReader_Mutable.self)?.booksRead, 135*890232f2SAndroid Build Coastguard Worker 7) 136*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 137*890232f2SAndroid Build Coastguard Worker movie.characters(at: 1, type: Attacker.self)?.swordAttackDamage, 138*890232f2SAndroid Build Coastguard Worker swordDmg) 139*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 140*890232f2SAndroid Build Coastguard Worker movie.characters(at: 2, type: BookReader_Mutable.self)?.booksRead, 141*890232f2SAndroid Build Coastguard Worker 2) 142*890232f2SAndroid Build Coastguard Worker 143*890232f2SAndroid Build Coastguard Worker var objc: MovieT? = movie.unpack() 144*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 145*890232f2SAndroid Build Coastguard Worker movie.charactersTypeCount, 146*890232f2SAndroid Build Coastguard Worker Int32(objc?.characters.count ?? 0)) 147*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 148*890232f2SAndroid Build Coastguard Worker movie.characters(at: 0, type: BookReader_Mutable.self)?.booksRead, 149*890232f2SAndroid Build Coastguard Worker (objc?.characters[0]?.value as? BookReader)?.booksRead) 150*890232f2SAndroid Build Coastguard Worker fb.clear() 151*890232f2SAndroid Build Coastguard Worker let newMovie = Movie.pack(&fb, obj: &objc) 152*890232f2SAndroid Build Coastguard Worker fb.finish(offset: newMovie) 153*890232f2SAndroid Build Coastguard Worker 154*890232f2SAndroid Build Coastguard Worker let packedMovie = Movie.getRootAsMovie(bb: fb.buffer) 155*890232f2SAndroid Build Coastguard Worker 156*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 157*890232f2SAndroid Build Coastguard Worker packedMovie.characters(at: 0, type: BookReader_Mutable.self)?.booksRead, 158*890232f2SAndroid Build Coastguard Worker movie.characters(at: 0, type: BookReader_Mutable.self)?.booksRead) 159*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 160*890232f2SAndroid Build Coastguard Worker packedMovie.characters(at: 1, type: Attacker.self)?.swordAttackDamage, 161*890232f2SAndroid Build Coastguard Worker movie.characters(at: 1, type: Attacker.self)?.swordAttackDamage) 162*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 163*890232f2SAndroid Build Coastguard Worker packedMovie.characters(at: 2, type: BookReader_Mutable.self)?.booksRead, 164*890232f2SAndroid Build Coastguard Worker movie.characters(at: 2, type: BookReader_Mutable.self)?.booksRead) 165*890232f2SAndroid Build Coastguard Worker } 166*890232f2SAndroid Build Coastguard Worker testStringUnionnull167*890232f2SAndroid Build Coastguard Worker func testStringUnion() { 168*890232f2SAndroid Build Coastguard Worker let string = "Awesome \\\\t\t\nstring!" 169*890232f2SAndroid Build Coastguard Worker var fb = FlatBufferBuilder() 170*890232f2SAndroid Build Coastguard Worker let stringOffset = fb.create(string: string) 171*890232f2SAndroid Build Coastguard Worker let characterType: [Character] = [.bookfan, .other] 172*890232f2SAndroid Build Coastguard Worker 173*890232f2SAndroid Build Coastguard Worker let characters = [ 174*890232f2SAndroid Build Coastguard Worker fb.create(struct: BookReader(booksRead: 7)), 175*890232f2SAndroid Build Coastguard Worker stringOffset, 176*890232f2SAndroid Build Coastguard Worker ] 177*890232f2SAndroid Build Coastguard Worker let types = fb.createVector(characterType) 178*890232f2SAndroid Build Coastguard Worker let characterVector = fb.createVector(ofOffsets: characters) 179*890232f2SAndroid Build Coastguard Worker 180*890232f2SAndroid Build Coastguard Worker let end = Movie.createMovie( 181*890232f2SAndroid Build Coastguard Worker &fb, 182*890232f2SAndroid Build Coastguard Worker mainCharacterType: .other, 183*890232f2SAndroid Build Coastguard Worker mainCharacterOffset: Offset(offset: stringOffset.o), 184*890232f2SAndroid Build Coastguard Worker charactersTypeVectorOffset: types, 185*890232f2SAndroid Build Coastguard Worker charactersVectorOffset: characterVector) 186*890232f2SAndroid Build Coastguard Worker Movie.finish(&fb, end: end) 187*890232f2SAndroid Build Coastguard Worker 188*890232f2SAndroid Build Coastguard Worker var movie = Movie.getRootAsMovie(bb: fb.sizedBuffer) 189*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(movie.mainCharacter(type: String.self), string) 190*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 191*890232f2SAndroid Build Coastguard Worker movie.characters(at: 0, type: BookReader_Mutable.self)?.booksRead, 192*890232f2SAndroid Build Coastguard Worker 7) 193*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(movie.characters(at: 1, type: String.self), string) 194*890232f2SAndroid Build Coastguard Worker 195*890232f2SAndroid Build Coastguard Worker var objc: MovieT? = movie.unpack() 196*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(objc?.mainCharacter?.value as? String, string) 197*890232f2SAndroid Build Coastguard Worker XCTAssertEqual((objc?.characters[0]?.value as? BookReader)?.booksRead, 7) 198*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(objc?.characters[1]?.value as? String, string) 199*890232f2SAndroid Build Coastguard Worker fb.clear() 200*890232f2SAndroid Build Coastguard Worker let newMovie = Movie.pack(&fb, obj: &objc) 201*890232f2SAndroid Build Coastguard Worker fb.finish(offset: newMovie) 202*890232f2SAndroid Build Coastguard Worker 203*890232f2SAndroid Build Coastguard Worker let packedMovie = Movie.getRootAsMovie(bb: fb.buffer) 204*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(packedMovie.mainCharacter(type: String.self), string) 205*890232f2SAndroid Build Coastguard Worker XCTAssertEqual( 206*890232f2SAndroid Build Coastguard Worker packedMovie.characters(at: 0, type: BookReader_Mutable.self)?.booksRead, 207*890232f2SAndroid Build Coastguard Worker 7) 208*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(packedMovie.characters(at: 1, type: String.self), string) 209*890232f2SAndroid Build Coastguard Worker } 210*890232f2SAndroid Build Coastguard Worker testEncodingnull211*890232f2SAndroid Build Coastguard Worker func testEncoding() { 212*890232f2SAndroid Build Coastguard Worker let string = "Awesome \\\\t\t\nstring!" 213*890232f2SAndroid Build Coastguard Worker var fb = FlatBufferBuilder() 214*890232f2SAndroid Build Coastguard Worker 215*890232f2SAndroid Build Coastguard Worker let stringOffset = fb.create(string: string) 216*890232f2SAndroid Build Coastguard Worker 217*890232f2SAndroid Build Coastguard Worker let swordDmg: Int32 = 8 218*890232f2SAndroid Build Coastguard Worker let attackStart = Attacker.startAttacker(&fb) 219*890232f2SAndroid Build Coastguard Worker Attacker.add(swordAttackDamage: swordDmg, &fb) 220*890232f2SAndroid Build Coastguard Worker let attack = Attacker.endAttacker(&fb, start: attackStart) 221*890232f2SAndroid Build Coastguard Worker 222*890232f2SAndroid Build Coastguard Worker let characterType: [Character] = [.belle, .mulan, .bookfan, .other] 223*890232f2SAndroid Build Coastguard Worker 224*890232f2SAndroid Build Coastguard Worker let characters = [ 225*890232f2SAndroid Build Coastguard Worker fb.create(struct: BookReader(booksRead: 7)), 226*890232f2SAndroid Build Coastguard Worker attack, 227*890232f2SAndroid Build Coastguard Worker fb.create(struct: BookReader(booksRead: 2)), 228*890232f2SAndroid Build Coastguard Worker stringOffset, 229*890232f2SAndroid Build Coastguard Worker ] 230*890232f2SAndroid Build Coastguard Worker let types = fb.createVector(characterType) 231*890232f2SAndroid Build Coastguard Worker let characterVector = fb.createVector(ofOffsets: characters) 232*890232f2SAndroid Build Coastguard Worker let end = Movie.createMovie( 233*890232f2SAndroid Build Coastguard Worker &fb, 234*890232f2SAndroid Build Coastguard Worker charactersTypeVectorOffset: types, 235*890232f2SAndroid Build Coastguard Worker charactersVectorOffset: characterVector) 236*890232f2SAndroid Build Coastguard Worker Movie.finish(&fb, end: end) 237*890232f2SAndroid Build Coastguard Worker 238*890232f2SAndroid Build Coastguard Worker var sizedBuffer = fb.sizedBuffer 239*890232f2SAndroid Build Coastguard Worker do { 240*890232f2SAndroid Build Coastguard Worker let reader: Movie = try getCheckedRoot(byteBuffer: &sizedBuffer) 241*890232f2SAndroid Build Coastguard Worker let encoder = JSONEncoder() 242*890232f2SAndroid Build Coastguard Worker encoder.keyEncodingStrategy = .convertToSnakeCase 243*890232f2SAndroid Build Coastguard Worker let data = try encoder.encode(reader) 244*890232f2SAndroid Build Coastguard Worker XCTAssertEqual(data, jsonData.data(using: .utf8)) 245*890232f2SAndroid Build Coastguard Worker } catch { 246*890232f2SAndroid Build Coastguard Worker XCTFail(error.localizedDescription) 247*890232f2SAndroid Build Coastguard Worker } 248*890232f2SAndroid Build Coastguard Worker } 249*890232f2SAndroid Build Coastguard Worker 250*890232f2SAndroid Build Coastguard Worker var jsonData: String { 251*890232f2SAndroid Build Coastguard Worker "{\"characters_type\":[\"Belle\",\"MuLan\",\"BookFan\",\"Other\"],\"characters\":[{\"books_read\":7},{\"sword_attack_damage\":8},{\"books_read\":2},\"Awesome \\\\\\\\t\\t\\nstring!\"]}" 252*890232f2SAndroid Build Coastguard Worker } 253*890232f2SAndroid Build Coastguard Worker } 254*890232f2SAndroid Build Coastguard Worker 255*890232f2SAndroid Build Coastguard Worker public enum ColorsNameSpace { 256*890232f2SAndroid Build Coastguard Worker 257*890232f2SAndroid Build Coastguard Worker enum RGB: Int32, Enum { 258*890232f2SAndroid Build Coastguard Worker typealias T = Int32 259*890232f2SAndroid Build Coastguard Worker static var byteSize: Int { MemoryLayout<Int32>.size } 260*890232f2SAndroid Build Coastguard Worker var value: Int32 { rawValue } 261*890232f2SAndroid Build Coastguard Worker case red = 0, green = 1, blue = 2 262*890232f2SAndroid Build Coastguard Worker } 263*890232f2SAndroid Build Coastguard Worker 264*890232f2SAndroid Build Coastguard Worker struct Monster: FlatBufferObject { 265*890232f2SAndroid Build Coastguard Worker var __buffer: ByteBuffer! { _accessor.bb } 266*890232f2SAndroid Build Coastguard Worker 267*890232f2SAndroid Build Coastguard Worker private var _accessor: Table getRootAsMonsternull268*890232f2SAndroid Build Coastguard Worker static func getRootAsMonster(bb: ByteBuffer) -> Monster { Monster(Table( 269*890232f2SAndroid Build Coastguard Worker bb: bb, 270*890232f2SAndroid Build Coastguard Worker position: Int32(bb.read(def: UOffset.self, position: bb.reader)) + 271*890232f2SAndroid Build Coastguard Worker Int32(bb.reader))) } 272*890232f2SAndroid Build Coastguard Worker 273*890232f2SAndroid Build Coastguard Worker init(_ t: Table) { _accessor = t } 274*890232f2SAndroid Build Coastguard Worker init(_ bb: ByteBuffer, o: Int32) { _accessor = Table(bb: bb, position: o) } 275*890232f2SAndroid Build Coastguard Worker 276*890232f2SAndroid Build Coastguard Worker public var colorsCount: Int32 { 277*890232f2SAndroid Build Coastguard Worker let o = _accessor.offset(4); return o == 0 ? 0 : _accessor 278*890232f2SAndroid Build Coastguard Worker .vector(count: o) } colorsnull279*890232f2SAndroid Build Coastguard Worker public func colors(at index: Int32) -> ColorsNameSpace 280*890232f2SAndroid Build Coastguard Worker .RGB? 281*890232f2SAndroid Build Coastguard Worker { let o = _accessor.offset(4); return o == 0 ? ColorsNameSpace 282*890232f2SAndroid Build Coastguard Worker .RGB(rawValue: 0)! : ColorsNameSpace.RGB(rawValue: _accessor.directRead( 283*890232f2SAndroid Build Coastguard Worker of: Int32.self, 284*890232f2SAndroid Build Coastguard Worker offset: _accessor.vector(at: o) + index * 4)) } startMonsternull285*890232f2SAndroid Build Coastguard Worker static func startMonster(_ fbb: inout FlatBufferBuilder) -> UOffset { fbb 286*890232f2SAndroid Build Coastguard Worker .startTable(with: 1) } addnull287*890232f2SAndroid Build Coastguard Worker static func add(colors: Offset, _ fbb: inout FlatBufferBuilder) { fbb.add( 288*890232f2SAndroid Build Coastguard Worker offset: colors, 289*890232f2SAndroid Build Coastguard Worker at: 4) } 290*890232f2SAndroid Build Coastguard Worker static func endMonster( 291*890232f2SAndroid Build Coastguard Worker _ fbb: inout FlatBufferBuilder, 292*890232f2SAndroid Build Coastguard Worker start: UOffset) 293*890232f2SAndroid Build Coastguard Worker -> Offset 294*890232f2SAndroid Build Coastguard Worker { let end = Offset(offset: fbb.endTable(at: start)); return end 295*890232f2SAndroid Build Coastguard Worker } 296*890232f2SAndroid Build Coastguard Worker } 297*890232f2SAndroid Build Coastguard Worker } 298*890232f2SAndroid Build Coastguard Worker 299*890232f2SAndroid Build Coastguard Worker 300*890232f2SAndroid Build Coastguard Worker enum Equipment: Byte { case none, Weapon } 301*890232f2SAndroid Build Coastguard Worker 302*890232f2SAndroid Build Coastguard Worker enum Color3: Int8 { case red = 0, green, blue } 303*890232f2SAndroid Build Coastguard Worker 304*890232f2SAndroid Build Coastguard Worker struct FinalMonster { 305*890232f2SAndroid Build Coastguard Worker 306*890232f2SAndroid Build Coastguard Worker @inlinable 307*890232f2SAndroid Build Coastguard Worker static func createMonster( 308*890232f2SAndroid Build Coastguard Worker builder: inout FlatBufferBuilder, 309*890232f2SAndroid Build Coastguard Worker position: Vec, 310*890232f2SAndroid Build Coastguard Worker hp: Int16, 311*890232f2SAndroid Build Coastguard Worker name: Offset, 312*890232f2SAndroid Build Coastguard Worker inventory: Offset, 313*890232f2SAndroid Build Coastguard Worker color: Color3, 314*890232f2SAndroid Build Coastguard Worker weapons: Offset, 315*890232f2SAndroid Build Coastguard Worker equipment: Equipment = .none, 316*890232f2SAndroid Build Coastguard Worker equippedOffset: Offset, 317*890232f2SAndroid Build Coastguard Worker path: Offset) -> Offset 318*890232f2SAndroid Build Coastguard Worker { 319*890232f2SAndroid Build Coastguard Worker let start = builder.startTable(with: 11) 320*890232f2SAndroid Build Coastguard Worker builder.create(struct: position, position: 4) 321*890232f2SAndroid Build Coastguard Worker builder.add(element: hp, def: 100, at: 8) 322*890232f2SAndroid Build Coastguard Worker builder.add(offset: name, at: 10) 323*890232f2SAndroid Build Coastguard Worker builder.add(offset: inventory, at: 14) 324*890232f2SAndroid Build Coastguard Worker builder.add(element: color.rawValue, def: Color3.green.rawValue, at: 16) 325*890232f2SAndroid Build Coastguard Worker builder.add(offset: weapons, at: 18) 326*890232f2SAndroid Build Coastguard Worker builder.add( 327*890232f2SAndroid Build Coastguard Worker element: equipment.rawValue, 328*890232f2SAndroid Build Coastguard Worker def: Equipment.none.rawValue, 329*890232f2SAndroid Build Coastguard Worker at: 20) 330*890232f2SAndroid Build Coastguard Worker builder.add(offset: equippedOffset, at: 22) 331*890232f2SAndroid Build Coastguard Worker builder.add(offset: path, at: 24) 332*890232f2SAndroid Build Coastguard Worker return Offset(offset: builder.endTable(at: start)) 333*890232f2SAndroid Build Coastguard Worker } 334*890232f2SAndroid Build Coastguard Worker } 335*890232f2SAndroid Build Coastguard Worker 336*890232f2SAndroid Build Coastguard Worker struct LocalMonster { 337*890232f2SAndroid Build Coastguard Worker 338*890232f2SAndroid Build Coastguard Worker private var __t: Table 339*890232f2SAndroid Build Coastguard Worker 340*890232f2SAndroid Build Coastguard Worker init(_ fb: ByteBuffer, o: Int32) { __t = Table(bb: fb, position: o) } 341*890232f2SAndroid Build Coastguard Worker init(_ t: Table) { __t = t } 342*890232f2SAndroid Build Coastguard Worker weaponnull343*890232f2SAndroid Build Coastguard Worker func weapon(at index: Int32) -> Weapon? { let o = __t 344*890232f2SAndroid Build Coastguard Worker .offset(4); return o == 0 ? nil : Weapon.assign( 345*890232f2SAndroid Build Coastguard Worker __t.indirect(__t.vector(at: o) + (index * 4)), 346*890232f2SAndroid Build Coastguard Worker __t.bb) } 347*890232f2SAndroid Build Coastguard Worker equiped<T: FlatBufferObject>null348*890232f2SAndroid Build Coastguard Worker func equiped<T: FlatBufferObject>() -> T? { 349*890232f2SAndroid Build Coastguard Worker let o = __t.offset(8); return o == 0 ? nil : __t.union(o) 350*890232f2SAndroid Build Coastguard Worker } 351*890232f2SAndroid Build Coastguard Worker getRootAsMonsternull352*890232f2SAndroid Build Coastguard Worker static func getRootAsMonster(bb: ByteBuffer) -> LocalMonster { 353*890232f2SAndroid Build Coastguard Worker LocalMonster(Table( 354*890232f2SAndroid Build Coastguard Worker bb: bb, 355*890232f2SAndroid Build Coastguard Worker position: Int32(bb.read(def: UOffset.self, position: 0)))) 356*890232f2SAndroid Build Coastguard Worker } 357*890232f2SAndroid Build Coastguard Worker 358*890232f2SAndroid Build Coastguard Worker @inlinable 359*890232f2SAndroid Build Coastguard Worker static func createMonster( 360*890232f2SAndroid Build Coastguard Worker builder: inout FlatBufferBuilder, 361*890232f2SAndroid Build Coastguard Worker offset: Offset, 362*890232f2SAndroid Build Coastguard Worker equipment: Equipment = .none, 363*890232f2SAndroid Build Coastguard Worker equippedOffset: UOffset) -> Offset 364*890232f2SAndroid Build Coastguard Worker { 365*890232f2SAndroid Build Coastguard Worker let start = builder.startTable(with: 3) 366*890232f2SAndroid Build Coastguard Worker builder.add(element: equippedOffset, def: 0, at: 8) 367*890232f2SAndroid Build Coastguard Worker builder.add(offset: offset, at: 4) 368*890232f2SAndroid Build Coastguard Worker builder.add( 369*890232f2SAndroid Build Coastguard Worker element: equipment.rawValue, 370*890232f2SAndroid Build Coastguard Worker def: Equipment.none.rawValue, 371*890232f2SAndroid Build Coastguard Worker at: 6) 372*890232f2SAndroid Build Coastguard Worker return Offset(offset: builder.endTable(at: start)) 373*890232f2SAndroid Build Coastguard Worker } 374*890232f2SAndroid Build Coastguard Worker } 375*890232f2SAndroid Build Coastguard Worker 376*890232f2SAndroid Build Coastguard Worker struct Weapon: FlatBufferObject { 377*890232f2SAndroid Build Coastguard Worker 378*890232f2SAndroid Build Coastguard Worker var __buffer: ByteBuffer! { __t.bb } 379*890232f2SAndroid Build Coastguard Worker 380*890232f2SAndroid Build Coastguard Worker static let offsets: (name: VOffset, dmg: VOffset) = (4, 6) 381*890232f2SAndroid Build Coastguard Worker private var __t: Table 382*890232f2SAndroid Build Coastguard Worker 383*890232f2SAndroid Build Coastguard Worker init(_ t: Table) { __t = t } 384*890232f2SAndroid Build Coastguard Worker init(_ fb: ByteBuffer, o: Int32) { __t = Table(bb: fb, position: o)} 385*890232f2SAndroid Build Coastguard Worker 386*890232f2SAndroid Build Coastguard Worker var dmg: Int16 { let o = __t.offset(6); return o == 0 ? 0 : __t.readBuffer( 387*890232f2SAndroid Build Coastguard Worker of: Int16.self, 388*890232f2SAndroid Build Coastguard Worker at: o) } 389*890232f2SAndroid Build Coastguard Worker var nameVector: [UInt8]? { __t.getVector(at: 4) } 390*890232f2SAndroid Build Coastguard Worker var name: String? { 391*890232f2SAndroid Build Coastguard Worker let o = __t.offset(4); return o == 0 ? nil : __t.string(at: o) } 392*890232f2SAndroid Build Coastguard Worker assignnull393*890232f2SAndroid Build Coastguard Worker static func assign(_ i: Int32, _ bb: ByteBuffer) -> Weapon { Weapon(Table( 394*890232f2SAndroid Build Coastguard Worker bb: bb, 395*890232f2SAndroid Build Coastguard Worker position: i)) } 396*890232f2SAndroid Build Coastguard Worker 397*890232f2SAndroid Build Coastguard Worker @inlinable 398*890232f2SAndroid Build Coastguard Worker static func createWeapon( 399*890232f2SAndroid Build Coastguard Worker builder: inout FlatBufferBuilder, 400*890232f2SAndroid Build Coastguard Worker offset: Offset, 401*890232f2SAndroid Build Coastguard Worker dmg: Int16) -> Offset 402*890232f2SAndroid Build Coastguard Worker { 403*890232f2SAndroid Build Coastguard Worker let _start = builder.startTable(with: 2) 404*890232f2SAndroid Build Coastguard Worker Weapon.add(builder: &builder, name: offset) 405*890232f2SAndroid Build Coastguard Worker Weapon.add(builder: &builder, dmg: dmg) 406*890232f2SAndroid Build Coastguard Worker return Weapon.end(builder: &builder, startOffset: _start) 407*890232f2SAndroid Build Coastguard Worker } 408*890232f2SAndroid Build Coastguard Worker 409*890232f2SAndroid Build Coastguard Worker @inlinable 410*890232f2SAndroid Build Coastguard Worker static func end( 411*890232f2SAndroid Build Coastguard Worker builder: inout FlatBufferBuilder, 412*890232f2SAndroid Build Coastguard Worker startOffset: UOffset) -> Offset 413*890232f2SAndroid Build Coastguard Worker { 414*890232f2SAndroid Build Coastguard Worker Offset(offset: builder.endTable(at: startOffset)) 415*890232f2SAndroid Build Coastguard Worker } 416*890232f2SAndroid Build Coastguard Worker 417*890232f2SAndroid Build Coastguard Worker @inlinable addnull418*890232f2SAndroid Build Coastguard Worker static func add(builder: inout FlatBufferBuilder, name: Offset) { 419*890232f2SAndroid Build Coastguard Worker builder.add(offset: name, at: Weapon.offsets.name) 420*890232f2SAndroid Build Coastguard Worker } 421*890232f2SAndroid Build Coastguard Worker 422*890232f2SAndroid Build Coastguard Worker @inlinable addnull423*890232f2SAndroid Build Coastguard Worker static func add(builder: inout FlatBufferBuilder, dmg: Int16) { 424*890232f2SAndroid Build Coastguard Worker builder.add(element: dmg, def: 0, at: Weapon.offsets.dmg) 425*890232f2SAndroid Build Coastguard Worker } 426*890232f2SAndroid Build Coastguard Worker } 427