benchmark silo added
[c11concurrency-benchmarks.git] / silo / masstree / doc / patches.mp
1 input elements;
2
3 def thediamond_(suffix $) =
4   $.e -- $.n -- $.w -- $s -- cycle
5 enddef;
6
7 vardef sizediamond_(suffix $) =
8   save a_, b_;
9   (a_,b_) = .5*(urcorner pic_$ - llcorner pic_$);
10   if (unknown $dy or unknown $dx) and unknown $squatness: $squatness = 1; fi
11   if unknown $dy: $dy = $squatness * ($dx + a_) - b_; fi
12   if unknown $dy:
13     $dy = b_ + circmargin * sqrt($squatness+1) + $squatness * a_;
14   fi
15   sizeelement_($);
16 enddef;
17
18 vardef cleardiamond_(suffix $) =
19   _n_ := str $;
20   generic_redeclare(numeric) _n.squatness;
21 enddef;
22
23 vardef patchit@#(expr s, type) =
24   _elementit.@#(s, 0, 0, push, false, false);
25   if type = 0:
26     pproc_.@# := "thecirc_";
27     % sproc_.@# := "sizecirc_";
28   elseif type = 2:
29     _n_ := str @#;
30     generic_declare(numeric) _n.squatness, _n.dx, _n.dy;
31     pproc_.@# := "thediamond_";
32     sproc_.@# := "sizediamond_";
33     expandafter def expandafter clearboxes expandafter =
34       clearboxes cleardiamond_(@#);
35     enddef
36   elseif type = 3:
37     pproc_.@# := "rboxpath_";
38   fi;
39 enddef;
40
41 vardef drawconnpatch(suffix $,$$)(text conn) text rest =
42   interim linejoin := mitered;
43   drawarrow ($.c conn $$.c) cutbefore bpath.$ cutafter bpath.$$ withpen connectionpen rest
44 enddef;