1digraph g 2{ 3 edge 4 [ 5 fontname="Helvetica", 6 fontsize=10, 7 labelfontname="Helvetica", 8 labelfontsize=10 9 ]; 10 11 node 12 [ 13 fontname="Helvetica", 14 fontsize=10, 15 shape=record 16 ]; 17 18 initiator 19 [ 20 label="Initiator" 21 ]; 22 23 async_processor 24 [ 25 label="Asynchronous\nOperation Processor" 26 ]; 27 28 async_op 29 [ 30 label="Asynchronous\nOperation" 31 ]; 32 33 completion_queue 34 [ 35 label="Completion\nEvent Queue" 36 ]; 37 38 async_event_demuxer 39 [ 40 label="Asynchronous\nEvent Demultiplexer" 41 ]; 42 43 proactor 44 [ 45 label="Proactor" 46 ]; 47 48 handler 49 [ 50 label="Completion\nHandler" 51 ]; 52 53 initiator -> async_processor 54 [ 55 label="uses", 56 style="dashed" 57 ]; 58 59 initiator -> async_op 60 [ 61 label="starts", 62 style="dashed" 63 ]; 64 65 initiator -> handler 66 [ 67 label="creates", 68 style="dashed" 69 ]; 70 71 async_processor -> async_op 72 [ 73 label="executes", 74 style="dashed" 75 ]; 76 77 async_processor -> completion_queue 78 [ 79 label="enqueues", 80 style="dashed" 81 ]; 82 83 async_op -> handler; 84 85 async_event_demuxer -> completion_queue 86 [ 87 label="dequeues", 88 style="dashed" 89 ]; 90 91 proactor -> async_event_demuxer 92 [ 93 ]; 94 95 proactor -> handler 96 [ 97 label="demultiplexes\n& dispatches" 98 style="dashed" 99 ]; 100} 101