# 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 BasicConditional:
  0 [+1]    UInt  x
  if x == 0:
    1 [+1]  UInt  xc


struct NegativeConditional:
  0 [+1]    UInt  x
  if x != 0:
    1 [+1]  UInt  xc


struct ConditionalAndUnconditionalOverlappingFinalField:
  0 [+1]    UInt  x
  if x == 0:
    1 [+1]  UInt  xc

  1 [+1]    UInt  z


struct ConditionalBasicConditionalFieldFirst:
  if x == 0:
    0 [+1]  UInt  xc

  1 [+1]    UInt  x


struct ConditionalAndDynamicLocation:
  0 [+1]    UInt  x
  2 [+1]    UInt  y
  if x == 0:
    y [+1]  UInt  xc


struct ConditionUsesMinInt:
  0 [+1]    Int  x
  if x - 0x7fff_ffff_ffff_ff80 == -0x8000_0000_0000_0000:
    1 [+1]  UInt  xc


struct NestedConditional:
  0 [+1]    UInt  x
  if x == 0:
    1 [+1]  UInt  xc

  if xc == 0:
    2 [+1]  UInt  xcc


struct CorrectNestedConditional:
  0 [+1]    UInt  x
  if x == 0:
    1 [+1]  UInt  xc

  if x == 0 && xc == 0:
    2 [+1]  UInt  xcc


struct AlwaysFalseCondition:
  0 [+1]    UInt  x
  if false:
    1 [+1]  UInt  xc


struct OnlyAlwaysFalseCondition:
  if false:
    0 [+1]  UInt  xc


struct EmptyStruct:
  -- Empty structure.


struct AlwaysFalseConditionDynamicSize:
  0 [+1]    UInt  x
  x [+1]    UInt  y
  if false:
    1 [+1]  UInt  xc


struct ConditionDoesNotContributeToSize:
  0 [+1]    UInt  x
  if x == 0:
    1 [+1]  UInt  xc
  2 [+1]    UInt  y


enum OnOff:
  OFF = 0
  ON  = 1


struct EnumCondition:
  0 [+1]    OnOff  x
  if x == OnOff.ON:
    1 [+1]  UInt   xc
  if x > OnOff.OFF:
    1 [+1]  UInt   xc2


struct NegativeEnumCondition:
  0 [+1]    OnOff  x
  if x != OnOff.ON:
    1 [+1]  UInt   xc


struct LessThanCondition:
  0 [+1]    UInt  x
  if x < 5:
    1 [+1]  UInt  xc


struct LessThanOrEqualCondition:
  0 [+1]    UInt  x
  if x <= 5:
    1 [+1]  UInt  xc


struct GreaterThanOrEqualCondition:
  0 [+1]    UInt  x
  if x >= 5:
    1 [+1]  UInt  xc


struct GreaterThanCondition:
  0 [+1]    UInt  x
  if x > 5:
    1 [+1]  UInt  xc


struct RangeCondition:
  0 [+1]    UInt  x
  1 [+1]    UInt  y
  if 5 < x <= y < 10:
    2 [+1]  UInt  xc


struct ReverseRangeCondition:
  0 [+1]    UInt  x
  1 [+1]    UInt  y
  if 10 > y >= x > 5:
    2 [+1]  UInt  xc


struct AndCondition:
  0 [+1]    UInt  x
  1 [+1]    UInt  y
  if x == 5 && y == 5:
    2 [+1]  UInt  xc


struct OrCondition:
  0 [+1]    UInt  x
  1 [+1]    UInt  y
  if x == 5 || y == 5:
    2 [+1]  UInt  xc


struct ChoiceCondition:
  0 [+1]    enum  field:
    USE_X = 1
    USE_Y = 2

  1 [+1]    UInt  x
  2 [+1]    UInt  y
  if (field == Field.USE_X ? x : y) == 5:
    3 [+1]  UInt  xyc


struct ContainsBits:
  0 [+1]  bits:
    7 [+1]  UInt  has_top
    0 [+1]  UInt  has_bottom


struct ContainsContainsBits:
  0 [+1]    ContainsBits  condition
  # TODO(bolms): allow Flags to be used as booleans in conditions.
  if condition.has_top == 1:
    1 [+1]  UInt          top


struct ConditionalInline:
  0 [+1]    UInt      payload_id

  if payload_id == 0:
    1 [+3]  struct  type_0:
      0 [+1]  UInt  a
      1 [+1]  UInt  b
      2 [+1]  UInt  c

  if payload_id == 1:
    1 [+3]  struct  type_1:
      0 [+1]  UInt  a
      1 [+1]  UInt  b
      2 [+1]  UInt  c


struct ConditionalAnonymous:
  0 [+1]  UInt  x
  if x > 10:
    1 [+1]  bits:
      0 [+1]  UInt  low
      if low == 1:
        3 [+2]  UInt  mid
      7 [+1]  UInt  high


struct ConditionalOnFlag:
  0 [+1]  bits:
    0 [+1]  Flag  enabled
  if enabled:
    1 [+1]  UInt  value
