2 subgraph cluster_legend {
5 ## The following legend is an attempt to match UML notation,
6 ## except for template_class and Factory->object, which are
7 ## invented for this diagram.
9 SubClass [label="Derived Class"];
14 Interface [label="Interface / ABC", style=dashed];
15 template_class [shape=diamond]; # Link will name parameter(s)
17 SubClass -> BaseClass [arrowhead="empty"];
18 SubClass -> Interface [arrowhead="empty", style=dashed];
19 Part -> Whole [arrowhead="diamond", label="ownership"];
20 Part -> Whole [arrowhead="odiamond", label="pointer"];
21 RefCountedPart -> Whole [arrowhead="diamond", color=red,
22 label="partial\nownership"];
23 A -> B [arrowhead="none", headlabel="?..?", taillabel="?..?",
25 // Often a "subgraph { rank=same; .. }" is used to wrap the
26 // below to make the generative relationship distinctive
27 // from the other class relationships.
28 Factory -> object [arrowhead=veevee];
31 ClientSocketPoolBase [shape=diamond];
32 ClientSocketPoolBaseHelper;
34 ClientSocketPoolBaseHelper_ConnectJobFactory
35 [style=dotted, label="ClientSocketPoolBaseHelper::\nConnectJobFactory"];
36 ClientSocketPoolBase_ConnectJobFactory
37 [style=dotted, shape=diamond,
38 label="ClientSocketPoolBase::\nConnectJobFactory"];
39 ClientSocketPoolBase_ConnectJobFactoryAdaptor
41 label="ClientSocketPoolBase::\nConnectJobFactoryAdaptor"];
43 HigherLayeredPool [style=dotted];
44 LowerLayeredPool [style=dotted];
45 ClientSocketPool [style=dotted];
47 ConnectJob [style=dashed];
48 ConnectJob_Delegate [style=dotted, label="ConnectJob::Delegate"];
50 ClientSocketFactory [style=dotted];
51 DefaultClientSocketFactory;
53 StreamSocket [style=dotted]
56 TransportSocketParams;
57 TransportConnectJobHelper;
58 TransportConnectJobFactory;
61 TransportClientSocketPool -> ClientSocketPool [arrowhead=empty];
62 ClientSocketPool -> LowerLayeredPool [arrowhead=empty];
63 ClientSocketPoolBaseHelper -> ConnectJob_Delegate [arrowhead=empty];
64 TransportConnectJobFactory -> ClientSocketPoolBase_ConnectJobFactory
65 [arrowhead=empty, label="TransportSocketParams"];
66 ClientSocketPoolBase_ConnectJobFactoryAdaptor ->
67 ClientSocketPoolBaseHelper_ConnectJobFactory
68 [arrowhead=empty, arrowtail=none];
69 TransportConnectJob -> ConnectJob [arrowhead=empty];
70 DefaultClientSocketFactory -> ClientSocketFactory [arrowhead=empty];
71 StreamSocket -> Socket [arrowhead=empty]
72 TCPClientSocket -> StreamSocket [arrowhead=empty]
74 ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
75 ClientSocketPoolBase -> TransportClientSocketPool
76 [arrowhead=diamond, label="TransportSocketParams"];
77 ClientSocketPoolBase_ConnectJobFactory ->
78 ClientSocketPoolBase_ConnectJobFactoryAdaptor [arrowhead=diamond];
79 ClientSocketPoolBaseHelper_ConnectJobFactory ->
80 ClientSocketPoolBaseHelper [arrowhead=diamond];
81 TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];
82 TransportSocketParams -> TransportConnectJobHelper
83 [arrowhead=diamond, color=red];
85 ConnectJob -> ConnectJob_Delegate
86 [dir=back, arrowhead=none, arrowtail=odiamond];
87 HigherLayeredPool -> ClientSocketPoolBaseHelper
88 [arrowhead=odiamond, taillabel="*"];
89 LowerLayeredPool -> ClientSocketPoolBaseHelper
90 [arrowhead=odiamond, taillabel="*"];
91 ClientSocketFactory -> ClientSocketPoolBaseHelper [arrowhead=odiamond];
95 ClientSocketPoolBaseHelper_ConnectJobFactory -> ConnectJob
98 ClientSocketPoolBase_ConnectJobFactory -> ConnectJob [arrowhead=veevee];
99 ClientSocketFactory -> TCPClientSocket [arrowhead=veevee]