Configuration Records
Config Flag Lookup
Table Driven Settings
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.
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
keys ← [1, 2, 3]
9keys = [1, 2, 3]10enabled = [1, 0, 1]values this step[1, 2, 3]keysenabled ← [1, 0, 1]
9keys = [1, 2, 3]10enabled = [1, 0, 1]11target_key = 2values this step[1, 0, 1]enabledtarget_key ← 2
10enabled = [1, 0, 1]11target_key = 212flag = 0values this step2target_keyflag ← 0
11target_key = 212flag = 013do i = 1, 3values this step0flagi ← 1
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step1iif (keys(i) == target_key) flag = enabled(i)
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step.false.keys(1) == target_keyi ← 2
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step2iflag ← 0
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step0flag.true.keys(2) == target_keyi ← 3
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step3iif (keys(i) == target_key) flag = enabled(i)
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step.false.keys(3) == target_keyprint '(I0, 1X, I0)', target_key, flag
15 end do16 print '(I0, 1X, I0)', target_key, flag17end program config_flag_lookup_demooutput2 0values this step2target_key0flag
keys ← [1, 2, 3]
9keys = [1, 2, 3]10enabled = [1, 0, 1]values this step[1, 2, 3]keysenabled ← [1, 0, 1]
9keys = [1, 2, 3]10enabled = [1, 0, 1]11target_key = 1values this step[1, 0, 1]enabledtarget_key ← 1
10enabled = [1, 0, 1]11target_key = 112flag = 0values this step1target_keyflag ← 0
11target_key = 112flag = 013do i = 1, 3values this step0flagi ← 1
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step1iflag ← 1
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step1flag.true.keys(1) == target_keyi ← 2
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step2iif (keys(i) == target_key) flag = enabled(i)
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step.false.keys(2) == target_keyi ← 3
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step3iif (keys(i) == target_key) flag = enabled(i)
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step.false.keys(3) == target_keyprint '(I0, 1X, I0)', target_key, flag
15 end do16 print '(I0, 1X, I0)', target_key, flag17end program config_flag_lookup_demooutput1 1values this step1target_key1flag
keys ← [1, 2, 3]
9keys = [1, 2, 3]10enabled = [1, 0, 1]values this step[1, 2, 3]keysenabled ← [1, 0, 1]
9keys = [1, 2, 3]10enabled = [1, 0, 1]11target_key = 4values this step[1, 0, 1]enabledtarget_key ← 4
10enabled = [1, 0, 1]11target_key = 412flag = 0values this step4target_keyflag ← 0
11target_key = 412flag = 013do i = 1, 3values this step0flagi ← 1
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step1iif (keys(i) == target_key) flag = enabled(i)
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step.false.keys(1) == target_keyi ← 2
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step2iif (keys(i) == target_key) flag = enabled(i)
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step.false.keys(2) == target_keyi ← 3
12flag = 013do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)values this step3iif (keys(i) == target_key) flag = enabled(i)
13do i = 1, 314 if (keys(i) == target_key) flag = enabled(i)15end dovalues this step.false.keys(3) == target_keyprint '(I0, 1X, I0)', target_key, flag
15 end do16 print '(I0, 1X, I0)', target_key, flag17end program config_flag_lookup_demooutput4 0values this step4target_key0flag
Follow the Lookup
keysis[1, 2, 3].enabledis[1, 0, 1].target_keystarts at2.flagstarts at0, then the loop checks each key.- Key
2matches row 2, soflagbecomes0and the program prints2 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.