diff options
author | Karl Berry <karl@freefriends.org> | 2017-04-19 23:04:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-04-19 23:04:15 +0000 |
commit | f74161ca4e7eb3c5af9afcbe92522ae3b58987c1 (patch) | |
tree | 3c30a13df5ac7968195c85070a2b074578e669d2 /Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua | |
parent | 1d5a55ac8f5506a7ae9cfca52f4b588182e199d4 (diff) |
context beta/cont-tmf.zip (Apr 16 12:55)
git-svn-id: svn://tug.org/texlive/trunk@43931 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua | 73 |
1 files changed, 57 insertions, 16 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua b/Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua index 4968e8cfc1d..8bfc09e58c5 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/supp-ran.lua @@ -10,8 +10,8 @@ if not modules then modules = { } end modules ['supp-ran'] = { local report_system = logs.reporter("system","randomizer") -local trace_random = false trackers.register("system.randomizer", function(v) trace_random = v end) -local trace_random_mp = false trackers.register("system.randomizer.mp",function(v) trace_random_mp = v end) +local trace_random = false trackers.register("system.randomizer", function(v) trace_random = v end) +local trace_detail = false trackers.register("system.randomizer.detail",function(v) trace_detail = v end) local insert, remove = table.insert, table.remove @@ -26,6 +26,14 @@ local stack = { } local last = 1 local maxcount = 2^30-1 -- 1073741823 +math.random = function(...) + local n = random(...) + if trace_detail then + report_system("math %s",n) + end + return n +end + local function setrandomseedi(n) if n <= 1 then n = n * maxcount @@ -33,17 +41,22 @@ local function setrandomseedi(n) n = n * 1000 end n = round(n) - if trace_random then - report_system("setting seed to %s",n) - end randomseed(n) last = random(0,maxcount) -- we need an initial value + if trace_detail then + report_system("seed %s from %s",last,n) + elseif trace_random then + report_system("setting seed %s",n) + end end math.setrandomseedi = setrandomseedi local function getrandomnumber(min,max) last = random(min,max) + if trace_detail then + report_system("number %s",last) + end return last end @@ -56,19 +69,19 @@ local function getrandomseed() return last end -local function getmprandomnumber() - last = random(0,4095) - if trace_random_mp then - report_system("using mp seed %s",last) - end - return last -end +-- local function getmprandomnumber() +-- last = random(0,4095) +-- if trace_detail then +-- report_system("mp number %s",last) +-- end +-- return last +-- end -- maybe stack local function pushrandomseed() insert(stack,last) - if trace_random then + if trace_random or trace_detail then report_system("pushing seed %s",last) end end @@ -76,7 +89,7 @@ end local function reuserandomseed(n) local seed = stack[#stack] if seed then - if trace_random then + if trace_random or trace_detail then report_system("reusing seed %s",last) end randomseed(seed) @@ -86,19 +99,47 @@ end local function poprandomseed() local seed = remove(stack) if seed then - if trace_random then + if trace_random or trace_detail then report_system("popping seed %s",seed) end randomseed(seed) end end +local function getrandom(where,...) + if type(where) == "string" then + local n = random(...) + if trace_detail then + report_system("%s %s",where,n) + end + return n + else + local n = random(where,...) + if trace_detail then + report_system("utilities %s",n) + end + return n + end +end + +utilities.randomizer = { + setseedi = setrandomseedi, + getnumber = getrandomnumber, + setseed = setrandomseed, + getseed = getrandomseed, + -- getmpnumber = getmprandomnumber, + pushseed = pushrandomseed, + reuseseed = reuserandomseed, + popseed = poprandomseed, + get = getrandom, +} + -- todo: also open up in utilities.randomizer.* implement { name = "getrandomnumber", actions = { getrandomnumber, context }, arguments = { "integer", "integer" } } implement { name = "getrandomdimen", actions = { getrandomnumber, context }, arguments = { "dimen", "dimen" } } implement { name = "getrandomfloat", actions = { getrandomnumber, context }, arguments = { "number", "number" } } -implement { name = "getmprandomnumber", actions = { getmprandomnumber, context } } +--------- { name = "getmprandomnumber", actions = { getmprandomnumber, context } } implement { name = "setrandomseed", actions = { setrandomseed }, arguments = { "integer" } } implement { name = "getrandomseed", actions = { getrandomseed, context } } implement { name = "pushrandomseed", actions = { pushrandomseed } } |