# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. [$default byte_order: "LittleEndian"] [(cpp) namespace: "emboss::test"] enum Product: VERSION_1 = 0 VERSION_2 = 10 VERSION_X = 23 enum MessageId: AXIS = 0 CONFIG = 1 struct MultiVersion(product: Product): 0 [+1] MessageId message_id if message_id == MessageId.AXIS: 1 [+12] Axes(product == Product.VERSION_X ? 3 : 2) axes if message_id == MessageId.CONFIG: 1 [+4] Config config if product == Product.VERSION_X && message_id == MessageId.CONFIG: 1 [+8] ConfigVX() config_vx struct Axes(axes: UInt:4): 0 [+axes*4] Axis(AxisType.GENERIC)[] values if axes > 0: 0 [+4] Axis(AxisType.X_AXIS) x if axes > 1: 4 [+4] Axis(AxisType.Y_AXIS) y if axes > 2: 8 [+4] Axis(AxisType.Z_AXIS) z let axis_count_plus_one = axes+1 struct AxisPair(axis_type_a_parameter: AxisType, axis_type_b_parameter: AxisType): 0 [+4] Axis(axis_type_a) axis_a 4 [+4] Axis(axis_type_b) axis_b let axis_type_a = axis_type_a_parameter let axis_type_b = axis_type_b_parameter struct AxesEnvelope: 0 [+1] UInt:8 axis_count 1 [+axis_count*4] Axes(axis_count) axes enum AxisType: GENERIC = -1 X_AXIS = 1 Y_AXIS = 2 Z_AXIS = 3 struct Axis(axis_type_parameter: AxisType): 0 [+4] UInt:32 value if axis_type == AxisType.X_AXIS: 0 [+4] UInt:32 x if axis_type == AxisType.Y_AXIS: 0 [+4] UInt:32 y if axis_type == AxisType.Z_AXIS: 0 [+4] UInt:32 z let axis_type = axis_type_parameter bits Config(): 31 [+1] Flag power struct ConfigVX: 0 [+4] bits: 31 [+1] Flag power 4 [+4] UInt gain struct StructWithUnusedParameter(x: UInt:8): 0 [+1] UInt y # StructContainingStructWithUnusedParameter is used to ensure that a struct is # not Ok() if it does not have its parameters, even if it does not directly use # those parameters. struct StructContainingStructWithUnusedParameter: 0 [+1] StructWithUnusedParameter(x) swup 1 [+1] UInt x struct BiasedValue(bias: UInt:8): 0 [+1] UInt raw_value let value = raw_value+bias struct VirtualFirstFieldWithParam(param: UInt:8): # Regression test: virtual fields did not have `public:` annotations, causing # them to pick up the `private:` annotation from the parameter accessor when # they were first in the struct. let value = x 0 [+1] UInt x struct ConstVirtualFirstFieldWithParam(param: UInt:8): # Regression test: see VirtualFirstFieldWithParam let value = 10 0 [+1] UInt x struct SizedArrayOfBiasedValues: 0 [+1] UInt element_count (ec) 1 [+1] UInt bias 2 [+ec] BiasedValue(bias)[] values