Begin to restructure to use Web Workers.
Chris Pressey
10 years ago
9 | 9 | <div id="container"></div> |
10 | 10 | |
11 | 11 | </body> |
12 | <script src="../src/matchbox.js"></script> | |
12 | <script src="../src/matchbox-launcher.js"></script> | |
13 | 13 | <script> |
14 | launch('../src/yoob/', 'container', {}); | |
14 | launch('../src/', 'container', {}); | |
15 | 15 | </script> |
0 | "use strict"; | |
1 | ||
2 | function launch(prefix, container, config) { | |
3 | if (typeof container === 'string') { | |
4 | container = document.getElementById(container); | |
5 | } | |
6 | config = config || {}; | |
7 | var deps = [ | |
8 | "yoob/scanner.js", | |
9 | "yoob/tape.js", | |
10 | "yoob/preset-manager.js", | |
11 | "yoob/element-factory.js", | |
12 | "matchbox.js" | |
13 | ]; | |
14 | var loaded = 0; | |
15 | for (var i = 0; i < deps.length; i++) { | |
16 | var elem = document.createElement('script'); | |
17 | elem.src = prefix + deps[i]; | |
18 | elem.onload = function() { | |
19 | if (++loaded < deps.length) return; | |
20 | ||
21 | var matchbox = (new Matchbox()).init({ | |
22 | 'workerURL': config.workerURL || "../src/matchbox-worker.js" | |
23 | }); | |
24 | ||
25 | var output; | |
26 | ||
27 | var controlPanel = yoob.makeDiv(container); | |
28 | var presetSelect = yoob.makeSelect(controlPanel, "Preset:", []); | |
29 | ||
30 | var makeContainer = function() { | |
31 | var c = yoob.makeDiv(container); | |
32 | c.style.display = 'inline-block'; | |
33 | c.style.verticalAlign = 'top'; | |
34 | return c; | |
35 | }; | |
36 | ||
37 | var prog1Ctr = makeContainer(); | |
38 | var run1Btn = yoob.makeButton(prog1Ctr, "Run", function() { | |
39 | output.innerHTML = matchbox.run(prog1ta.value); | |
40 | }); | |
41 | yoob.makeLineBreak(prog1Ctr); | |
42 | var prog1ta = yoob.makeTextArea(prog1Ctr, 20, 20); | |
43 | ||
44 | var prog2Ctr = makeContainer(); | |
45 | var run2Btn = yoob.makeButton(prog2Ctr, "Run", function() { | |
46 | output.innerHTML = matchbox.run(prog2ta.value); | |
47 | }); | |
48 | yoob.makeLineBreak(prog2Ctr); | |
49 | var prog2ta = yoob.makeTextArea(prog2Ctr, 20, 20); | |
50 | ||
51 | var resultCtr = makeContainer(); | |
52 | var findRacesBtn = yoob.makeButton( | |
53 | resultCtr, "Find Race Conditions", function() { | |
54 | output.innerHTML = matchbox.findRaceConditions( | |
55 | prog1ta.value, prog2ta.value | |
56 | ); | |
57 | }); | |
58 | output = yoob.makeDiv(resultCtr); | |
59 | ||
60 | var sourceRoot = config.sourceRoot || '../eg/'; | |
61 | var p = new yoob.PresetManager(); | |
62 | p.init({ | |
63 | 'selectElem': presetSelect, | |
64 | 'setPreset': function(n) { | |
65 | matchbox.loadSourceFromURL(sourceRoot + n, function(p1, p2) { | |
66 | prog1ta.value = p1; | |
67 | prog2ta.value = p2; | |
68 | }); | |
69 | } | |
70 | }); | |
71 | p.add('basic-race.mbox'); | |
72 | p.add('basic-no-race.mbox'); | |
73 | p.add('petersons-no-race.mbox'); | |
74 | p.select('basic-race.mbox'); | |
75 | ||
76 | }; | |
77 | document.body.appendChild(elem); | |
78 | } | |
79 | } |
0 | importScripts('matchbox.js'); | |
1 | ||
2 | addEventListener('message', function(e) { | |
3 | if (e.data[0] === 'interleave') { | |
4 | postMessage(findAllInterleavings(e.data[1], e.data[2])); | |
5 | } | |
6 | }); |
0 | 0 | "use strict"; |
1 | ||
2 | function launch(prefix, container, config) { | |
3 | if (typeof container === 'string') { | |
4 | container = document.getElementById(container); | |
5 | } | |
6 | config = config || {}; | |
7 | var deps = [ | |
8 | "scanner.js", | |
9 | "tape.js", | |
10 | "preset-manager.js", | |
11 | "element-factory.js" | |
12 | ]; | |
13 | var loaded = 0; | |
14 | for (var i = 0; i < deps.length; i++) { | |
15 | var elem = document.createElement('script'); | |
16 | elem.src = prefix + deps[i]; | |
17 | elem.onload = function() { | |
18 | if (++loaded < deps.length) return; | |
19 | ||
20 | var sourceRoot = config.sourceRoot || '../eg/'; | |
21 | ||
22 | var matchbox = (new Matchbox()).init({}); | |
23 | var output; | |
24 | ||
25 | var controlPanel = yoob.makeDiv(container); | |
26 | var presetSelect = yoob.makeSelect(controlPanel, "Preset:", []); | |
27 | ||
28 | var makeContainer = function() { | |
29 | var c = yoob.makeDiv(container); | |
30 | c.style.display = 'inline-block'; | |
31 | c.style.verticalAlign = 'top'; | |
32 | return c; | |
33 | }; | |
34 | ||
35 | var prog1Ctr = makeContainer(); | |
36 | var run1Btn = yoob.makeButton(prog1Ctr, "Run", function() { | |
37 | output.innerHTML = matchbox.run(prog1ta.value); | |
38 | }); | |
39 | yoob.makeLineBreak(prog1Ctr); | |
40 | var prog1ta = yoob.makeTextArea(prog1Ctr, 20, 20); | |
41 | ||
42 | var prog2Ctr = makeContainer(); | |
43 | var run2Btn = yoob.makeButton(prog2Ctr, "Run", function() { | |
44 | output.innerHTML = matchbox.run(prog2ta.value); | |
45 | }); | |
46 | yoob.makeLineBreak(prog2Ctr); | |
47 | var prog2ta = yoob.makeTextArea(prog2Ctr, 20, 20); | |
48 | ||
49 | var resultCtr = makeContainer(); | |
50 | var findRacesBtn = yoob.makeButton( | |
51 | resultCtr, "Find Race Conditions", function() { | |
52 | output.innerHTML = matchbox.findRaceConditions( | |
53 | prog1ta.value, prog2ta.value | |
54 | ); | |
55 | }); | |
56 | output = yoob.makeDiv(resultCtr); | |
57 | ||
58 | var p = new yoob.PresetManager(); | |
59 | p.init({ | |
60 | 'selectElem': presetSelect, | |
61 | 'setPreset': function(n) { | |
62 | matchbox.loadSourceFromURL(sourceRoot + n, function(p1, p2) { | |
63 | prog1ta.value = p1; | |
64 | prog2ta.value = p2; | |
65 | }); | |
66 | } | |
67 | }); | |
68 | p.add('basic-race.mbox'); | |
69 | p.add('basic-no-race.mbox'); | |
70 | p.add('petersons-no-race.mbox'); | |
71 | p.select('basic-race.mbox'); | |
72 | ||
73 | }; | |
74 | document.body.appendChild(elem); | |
75 | } | |
76 | } | |
77 | 1 | |
78 | 2 | var matchboxScanner; |
79 | 3 | |
326 | 250 | var Matchbox = function() { |
327 | 251 | this.init = function(cfg) { |
328 | 252 | cfg = cfg || {}; |
253 | this.workerURL = cfg.workerURL; | |
254 | if (this.workerURL) { | |
255 | this.worker = new Worker(this.workerURL); | |
256 | } | |
329 | 257 | initScanner(); |
330 | 258 | return this; |
331 | 259 | }; |