1digraph {
2	rankdir=LR
3	compound=true
4	fontname="Inconsolata, Consolas"
5	fontsize=10
6	margin="0,0"
7	ranksep=0.3
8	nodesep=0.15
9	penwidth=0.5
10	colorscheme=spectral7
11
12	node [shape=box, fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5, style=filled, fillcolor=white]
13	edge [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5]
14
15	subgraph cluster0 {
16		style=filled
17		fillcolor=4
18
19		Encoding [label="<<concept>>\nEncoding"]
20
21		edge [arrowtail=onormal, dir=back]
22		Encoding -> { UTF8; UTF16; UTF32; ASCII; AutoUTF }
23		UTF16 -> { UTF16LE; UTF16BE }
24		UTF32 -> { UTF32LE; UTF32BE }
25	}
26
27	subgraph cluster1 {
28		style=filled
29		fillcolor=5
30
31		Stream [label="<<concept>>\nStream"]
32		InputByteStream [label="<<concept>>\nInputByteStream"]
33		OutputByteStream [label="<<concept>>\nOutputByteStream"]
34
35		edge [arrowtail=onormal, dir=back]
36		Stream -> {
37			StringStream; InsituStringStream; StringBuffer;
38			EncodedInputStream; EncodedOutputStream;
39			AutoUTFInputStream; AutoUTFOutputStream
40			InputByteStream; OutputByteStream
41		}
42
43		InputByteStream ->	{ MemoryStream; FlieReadStream }
44		OutputByteStream -> { MemoryBuffer; FileWriteStream }
45	}
46
47	subgraph cluster2 {
48		style=filled
49		fillcolor=3
50
51		Allocator [label="<<concept>>\nAllocator"]
52
53		edge [arrowtail=onormal, dir=back]
54		Allocator -> { CrtAllocator; MemoryPoolAllocator }
55	}
56
57	{
58		edge [arrowtail=odiamond, arrowhead=vee, dir=both]
59		EncodedInputStream -> InputByteStream
60		EncodedOutputStream -> OutputByteStream
61		AutoUTFInputStream -> InputByteStream
62		AutoUTFOutputStream -> OutputByteStream
63		MemoryPoolAllocator -> Allocator [label="base", tailport=s]
64	}
65
66	{
67		edge [arrowhead=vee, style=dashed]
68		AutoUTFInputStream -> AutoUTF
69		AutoUTFOutputStream -> AutoUTF
70	}
71
72	//UTF32LE -> Stream [style=invis]
73}