# 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"] struct RequiresIntegers: [requires: zero_through_nine <= ten_through_twenty - 10] 0 [+1] UInt zero_through_nine [requires: 0 <= this <= 9] 1 [+1] Int ten_through_twenty [requires: 10 <= this <= 20] 2 [+1] UInt disjoint [requires: 0 <= this <= 5 || 15 <= this <= 20] let ztn_plus_ttt = zero_through_nine + ten_through_twenty [requires: 10 <= this <= 19] let alias_of_zero_through_nine = zero_through_nine [requires: 2 <= this <= 7] let zero_through_nine_plus_five = zero_through_nine + 5 [requires: 5 <= this <= 10] struct RequiresBools: [requires: a || b] 0 [+1] bits: 0 [+1] Flag a 1 [+1] Flag b 2 [+1] Flag must_be_true [requires: this] 3 [+1] Flag must_be_false [requires: this == false] let b_must_be_false = b == false [requires: this] let alias_of_a_must_be_true = a [requires: this] struct RequiresEnums: [requires: a == Enum.EN0 || b == Enum.EN0] enum Enum: EN0 = 0 EN1 = 1 EN2 = 2 EN3 = 3 0 [+1] Enum a 1 [+1] Enum b 2 [+1] Enum c [requires: this == Enum.EN0 || this == Enum.EN1] let filtered_a = a == Enum.EN0 ? Enum.EN1 : a [requires: this == Enum.EN1] let alias_of_a = a [requires: this == Enum.EN1] struct RequiresWithOptionalFields: [requires: a || b] 0 [+1] bits: 0 [+1] Flag a 1 [+1] Flag b_exists if b_exists: 2 [+1] Flag b if b_exists: 2 [+1] Flag b_true [requires: this] struct RequiresInArrayElements: struct Element: 0 [+1] UInt:8 x [requires: 0 <= this <= 10] 0 [+4] Element[] xs