xref: /aosp_15_r20/external/flatbuffers/swift/Sources/FlatBuffers/Constants.swift (revision 890232f25432b36107d06881e0a25aaa6b473652)
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 #if !os(WASI)
18*890232f2SAndroid Build Coastguard Worker   #if os(Linux)
19*890232f2SAndroid Build Coastguard Worker   import CoreFoundation
20*890232f2SAndroid Build Coastguard Worker   #else
21*890232f2SAndroid Build Coastguard Worker   import Foundation
22*890232f2SAndroid Build Coastguard Worker   #endif
23*890232f2SAndroid Build Coastguard Worker #else
24*890232f2SAndroid Build Coastguard Worker import SwiftOverlayShims
25*890232f2SAndroid Build Coastguard Worker #endif
26*890232f2SAndroid Build Coastguard Worker 
27*890232f2SAndroid Build Coastguard Worker /// A boolean to see if the system is littleEndian
28*890232f2SAndroid Build Coastguard Worker let isLitteEndian: Bool = {
29*890232f2SAndroid Build Coastguard Worker   let number: UInt32 = 0x12345678
30*890232f2SAndroid Build Coastguard Worker   return number == number.littleEndian
31*890232f2SAndroid Build Coastguard Worker }()
32*890232f2SAndroid Build Coastguard Worker /// Constant for the file id length
33*890232f2SAndroid Build Coastguard Worker let FileIdLength = 4
34*890232f2SAndroid Build Coastguard Worker /// Type aliases
35*890232f2SAndroid Build Coastguard Worker public typealias Byte = UInt8
36*890232f2SAndroid Build Coastguard Worker public typealias UOffset = UInt32
37*890232f2SAndroid Build Coastguard Worker public typealias SOffset = Int32
38*890232f2SAndroid Build Coastguard Worker public typealias VOffset = UInt16
39*890232f2SAndroid Build Coastguard Worker /// Maximum size for a buffer
40*890232f2SAndroid Build Coastguard Worker public let FlatBufferMaxSize = UInt32
41*890232f2SAndroid Build Coastguard Worker   .max << ((MemoryLayout<SOffset>.size * 8 - 1) - 1)
42*890232f2SAndroid Build Coastguard Worker 
43*890232f2SAndroid Build Coastguard Worker /// Protocol that All Scalars should conform to
44*890232f2SAndroid Build Coastguard Worker ///
45*890232f2SAndroid Build Coastguard Worker /// Scalar is used to conform all the numbers that can be represented in a FlatBuffer. It's used to write/read from the buffer.
46*890232f2SAndroid Build Coastguard Worker public protocol Scalar: Equatable {
47*890232f2SAndroid Build Coastguard Worker   associatedtype NumericValue
48*890232f2SAndroid Build Coastguard Worker   var convertedEndian: NumericValue { get }
49*890232f2SAndroid Build Coastguard Worker }
50*890232f2SAndroid Build Coastguard Worker 
51*890232f2SAndroid Build Coastguard Worker extension Scalar where Self: Verifiable {}
52*890232f2SAndroid Build Coastguard Worker 
53*890232f2SAndroid Build Coastguard Worker extension Scalar where Self: FixedWidthInteger {
54*890232f2SAndroid Build Coastguard Worker   /// Converts the value from BigEndian to LittleEndian
55*890232f2SAndroid Build Coastguard Worker   ///
56*890232f2SAndroid Build Coastguard Worker   /// Converts values to little endian on machines that work with BigEndian, however this is NOT TESTED yet.
57*890232f2SAndroid Build Coastguard Worker   public var convertedEndian: NumericValue {
58*890232f2SAndroid Build Coastguard Worker     self as! Self.NumericValue
59*890232f2SAndroid Build Coastguard Worker   }
60*890232f2SAndroid Build Coastguard Worker }
61*890232f2SAndroid Build Coastguard Worker 
62*890232f2SAndroid Build Coastguard Worker extension Double: Scalar, Verifiable {
63*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = UInt64
64*890232f2SAndroid Build Coastguard Worker 
65*890232f2SAndroid Build Coastguard Worker   public var convertedEndian: UInt64 {
66*890232f2SAndroid Build Coastguard Worker     bitPattern.littleEndian
67*890232f2SAndroid Build Coastguard Worker   }
68*890232f2SAndroid Build Coastguard Worker }
69*890232f2SAndroid Build Coastguard Worker 
70*890232f2SAndroid Build Coastguard Worker extension Float32: Scalar, Verifiable {
71*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = UInt32
72*890232f2SAndroid Build Coastguard Worker 
73*890232f2SAndroid Build Coastguard Worker   public var convertedEndian: UInt32 {
74*890232f2SAndroid Build Coastguard Worker     bitPattern.littleEndian
75*890232f2SAndroid Build Coastguard Worker   }
76*890232f2SAndroid Build Coastguard Worker }
77*890232f2SAndroid Build Coastguard Worker 
78*890232f2SAndroid Build Coastguard Worker extension Bool: Scalar, Verifiable {
79*890232f2SAndroid Build Coastguard Worker   public var convertedEndian: UInt8 {
80*890232f2SAndroid Build Coastguard Worker     self == true ? 1 : 0
81*890232f2SAndroid Build Coastguard Worker   }
82*890232f2SAndroid Build Coastguard Worker 
83*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = UInt8
84*890232f2SAndroid Build Coastguard Worker }
85*890232f2SAndroid Build Coastguard Worker 
86*890232f2SAndroid Build Coastguard Worker extension Int: Scalar, Verifiable {
87*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = Int
88*890232f2SAndroid Build Coastguard Worker }
89*890232f2SAndroid Build Coastguard Worker 
90*890232f2SAndroid Build Coastguard Worker extension Int8: Scalar, Verifiable {
91*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = Int8
92*890232f2SAndroid Build Coastguard Worker }
93*890232f2SAndroid Build Coastguard Worker 
94*890232f2SAndroid Build Coastguard Worker extension Int16: Scalar, Verifiable {
95*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = Int16
96*890232f2SAndroid Build Coastguard Worker }
97*890232f2SAndroid Build Coastguard Worker 
98*890232f2SAndroid Build Coastguard Worker extension Int32: Scalar, Verifiable {
99*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = Int32
100*890232f2SAndroid Build Coastguard Worker }
101*890232f2SAndroid Build Coastguard Worker 
102*890232f2SAndroid Build Coastguard Worker extension Int64: Scalar, Verifiable {
103*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = Int64
104*890232f2SAndroid Build Coastguard Worker }
105*890232f2SAndroid Build Coastguard Worker 
106*890232f2SAndroid Build Coastguard Worker extension UInt8: Scalar, Verifiable {
107*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = UInt8
108*890232f2SAndroid Build Coastguard Worker }
109*890232f2SAndroid Build Coastguard Worker 
110*890232f2SAndroid Build Coastguard Worker extension UInt16: Scalar, Verifiable {
111*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = UInt16
112*890232f2SAndroid Build Coastguard Worker }
113*890232f2SAndroid Build Coastguard Worker 
114*890232f2SAndroid Build Coastguard Worker extension UInt32: Scalar, Verifiable {
115*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = UInt32
116*890232f2SAndroid Build Coastguard Worker }
117*890232f2SAndroid Build Coastguard Worker 
118*890232f2SAndroid Build Coastguard Worker extension UInt64: Scalar, Verifiable {
119*890232f2SAndroid Build Coastguard Worker   public typealias NumericValue = UInt64
120*890232f2SAndroid Build Coastguard Worker }
121*890232f2SAndroid Build Coastguard Worker 
FlatBuffersVersion_2_0_0null122*890232f2SAndroid Build Coastguard Worker public func FlatBuffersVersion_2_0_0() {}
123