1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- -- auxiliary functions for the reworked speed restriction system
- local function s_lessp(a, b)
- if not a or a == -1 then
- return false
- elseif not b or b == -1 then
- return true
- else
- return a < b
- end
- end
- local function s_greaterp(a, b)
- return s_lessp(b, a)
- end
- local function s_not_lessp(a, b)
- return not s_lessp(a, b)
- end
- local function s_not_greaterp(a, b)
- return not s_greaterp(a, b)
- end
- local function s_equalp(a, b)
- return (a or -1) == (b or -1)
- end
- local function s_not_equalp(a, b)
- return (a or -1) ~= (b or -1)
- end
- local function s_max(a, b)
- if s_lessp(a, b) then
- return b
- else
- return a
- end
- end
- local function s_min(a, b)
- if s_lessp(a, b) then
- return a
- else
- return b
- end
- end
- local function get_speed_restriction_from_table (tbl)
- local strictest = -1
- for _, v in pairs(tbl) do
- strictest = s_min(strictest, v)
- end
- if strictest == -1 then
- return nil
- end
- return strictest
- end
- local function set_speed_restriction (tbl, rtype, rval)
- if rval then
- tbl[rtype or "main"] = rval
- end
- return tbl
- end
- local function set_speed_restriction_for_train (train, rtype, rval)
- local t = train.speed_restrictions_t or {main = train.speed_restriction}
- train.speed_restrictions_t = set_speed_restriction(t, rtype, rval)
- train.speed_restriction = get_speed_restriction_from_table(t)
- end
- local function merge_speed_restriction_from_aspect_to_train (train, asp)
- return set_speed_restriction_for_train(train, asp.type, asp.main)
- end
- return {
- lessp = s_lessp,
- greaterp = s_greaterp,
- not_lessp = s_not_lessp,
- not_greaterp = s_not_greaterp,
- equalp = s_equalp,
- not_equalp = s_not_equalp,
- max = s_max,
- min = s_min,
- set_restriction = set_speed_restriction_for_train,
- merge_aspect = merge_speed_restriction_from_aspect_to_train,
- }
|