A small configuration table can store feature keys and on/off flags.

Program

Play the program to query a feature key and read the configured flag.

target_key
config_flag_lookup.f90
Replay: real traced execution (multi-file project)
program config_flag_lookup_demo
    implicit none
    integer :: keys(3)
    integer :: enabled(3)
    integer :: target_key
    integer :: i
    integer :: flag

    keys = [1, 2, 3]
    enabled = [1, 0, 1]
    target_key = 2
    flag = 0
    do i = 1, 3
        if (keys(i) == target_key) flag = enabled(i)
    end do
    print '(I0, 1X, I0)', target_key, flag
end program config_flag_lookup_demo
program config_flag_lookup_demo
    implicit none
    integer :: keys(3)
    integer :: enabled(3)
    integer :: target_key
    integer :: i
    integer :: flag

    keys = [1, 2, 3]
    enabled = [1, 0, 1]
    target_key = 1
    flag = 0
    do i = 1, 3
        if (keys(i) == target_key) flag = enabled(i)
    end do
    print '(I0, 1X, I0)', target_key, flag
end program config_flag_lookup_demo
program config_flag_lookup_demo
    implicit none
    integer :: keys(3)
    integer :: enabled(3)
    integer :: target_key
    integer :: i
    integer :: flag

    keys = [1, 2, 3]
    enabled = [1, 0, 1]
    target_key = 4
    flag = 0
    do i = 1, 3
        if (keys(i) == target_key) flag = enabled(i)
    end do
    print '(I0, 1X, I0)', target_key, flag
end program config_flag_lookup_demo
  1. keys ← [1, 2, 3]

    9keys = [1, 2, 3]10enabled = [1, 0, 1]
    values this step[1, 2, 3]keys
  2. enabled ← [1, 0, 1]

    9keys = [1, 2, 3]10enabled = [1, 0, 1]11target_key = 2
    values this step[1, 0, 1]enabled
  3. target_key ← 2

    10enabled = [1, 0, 1]11target_key = 212flag = 0
    values this step2target_key
  4. flag ← 0

    11target_key = 212flag = 013do i = 1, 3
    values this step0flag
  5. i ← 1

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step1i
  6. if (keys(i) == target_key) flag = enabled(i)

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step.false.keys(1) == target_key
  7. i ← 2

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step2i
  8. flag ← 0

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step0flag.true.keys(2) == target_key
  9. i ← 3

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step3i
  10. if (keys(i) == target_key) flag = enabled(i)

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step.false.keys(3) == target_key
  11. print '(I0, 1X, I0)', target_key, flag

    15    end do16    print '(I0, 1X, I0)', target_key, flag17end program config_flag_lookup_demo
    output2 0
    values this step2target_key0flag
  1. keys ← [1, 2, 3]

    9keys = [1, 2, 3]10enabled = [1, 0, 1]
    values this step[1, 2, 3]keys
  2. enabled ← [1, 0, 1]

    9keys = [1, 2, 3]10enabled = [1, 0, 1]11target_key = 1
    values this step[1, 0, 1]enabled
  3. target_key ← 1

    10enabled = [1, 0, 1]11target_key = 112flag = 0
    values this step1target_key
  4. flag ← 0

    11target_key = 112flag = 013do i = 1, 3
    values this step0flag
  5. i ← 1

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step1i
  6. flag ← 1

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step1flag.true.keys(1) == target_key
  7. i ← 2

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step2i
  8. if (keys(i) == target_key) flag = enabled(i)

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step.false.keys(2) == target_key
  9. i ← 3

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step3i
  10. if (keys(i) == target_key) flag = enabled(i)

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step.false.keys(3) == target_key
  11. print '(I0, 1X, I0)', target_key, flag

    15    end do16    print '(I0, 1X, I0)', target_key, flag17end program config_flag_lookup_demo
    output1 1
    values this step1target_key1flag
  1. keys ← [1, 2, 3]

    9keys = [1, 2, 3]10enabled = [1, 0, 1]
    values this step[1, 2, 3]keys
  2. enabled ← [1, 0, 1]

    9keys = [1, 2, 3]10enabled = [1, 0, 1]11target_key = 4
    values this step[1, 0, 1]enabled
  3. target_key ← 4

    10enabled = [1, 0, 1]11target_key = 412flag = 0
    values this step4target_key
  4. flag ← 0

    11target_key = 412flag = 013do i = 1, 3
    values this step0flag
  5. i ← 1

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step1i
  6. if (keys(i) == target_key) flag = enabled(i)

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step.false.keys(1) == target_key
  7. i ← 2

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step2i
  8. if (keys(i) == target_key) flag = enabled(i)

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step.false.keys(2) == target_key
  9. i ← 3

    12flag = 013do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)
    values this step3i
  10. if (keys(i) == target_key) flag = enabled(i)

    13do i = 1, 314    if (keys(i) == target_key) flag = enabled(i)15end do
    values this step.false.keys(3) == target_key
  11. print '(I0, 1X, I0)', target_key, flag

    15    end do16    print '(I0, 1X, I0)', target_key, flag17end program config_flag_lookup_demo
    output4 0
    values this step4target_key0flag

Follow the Lookup

  1. keys is [1, 2, 3].
  2. enabled is [1, 0, 1].
  3. target_key starts at 2.
  4. flag starts at 0, then the loop checks each key.
  5. Key 2 matches row 2, so flag becomes 0 and the program prints 2 0. | target_key | matching row | enabled value | output | | ---: | --- | ---: | --- | | 1 | row 1 | 1 | 1 1 | | 2 | row 2 | 0 | 2 0 | | 4 | none | 0 | 4 0 |
feature key `target_key` chooses which setting row to read.
flag table `enabled` stores compact integer flags for the feature rows.
missing default `flag` starts at zero, so unknown keys stay disabled.

Exercise: config_flag_lookup.f90

Reproduce 2 0, then use target_key 1 and 4 to predict 1 1 and 4 0.