blob: 10940f92e88c58b0de0c3ef64c7dff4761e13cd4 [file] [log] [blame]
% Licensed to the Apache Software Foundation (ASF) under one
% or more contributor license agreements. See the NOTICE file
% distributed with this work for additional information
% regarding copyright ownership. The ASF licenses this file
% to you under the Apache License, Version 2.0 (the
% "License"); you may not use this file except in compliance
% with the License. You may obtain a copy of the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing,
% software distributed under the License is distributed on an
% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
% KIND, either express or implied. See the License for the
% specific language governing permissions and limitations
% under the License.
% Metapost figure compiled offline to create the class diagram for modular fold/reduce
% need MetaUML (https://github.com/ogheorghies/MetaUML) to compile this file
% to create pdf figure: mptopdf class_diagram.mp
input metauml;
beginfig(1);
iClass.foreColor := (.9, .9, .8); % global color for all classes
%------------------------------------------------------
% classes in 1st column
Class.A("DynamicStruct")
()
("+DynamicStruct()",
"#copy()",
"#setSize()");
ClassTemplate.TA("Container")(A);
Class.B("Accumulator")
()
("+Accumulator()",
"+operator<<()",
"+operator=()",
"#bind()");
ClassTemplate.TB("Container")(B);
Class.C("HandleMap")
()
();
ClassTemplate.TC("EigenType,", "Handle")(C);
topToBottom(35)(A, B, C);
drawObjects(A, TA, B, TB, C, TC);
%------------------------------------------------------
% classes in 2nd column
Class.D("DynamicStructContainer")
()
("+rootContainer()",
"+storage()",
"+byteStream()");
D.nw = (120, 90);
classStereotypes.D("<<concept>>");
Class.E("Rebindable")
()
("+rebind()");
classStereotypes.E("<<concept>>");
Class.F("Ref")
()
("+operator T&()",
"+ptr()");
ClassTemplate.TF("T")(F);
Note.EB("Member variables", "need to be", "Rebindable");
EB.s = E.n + (40, 30);
EB.info.foreColor := (.7, .7, .7);
EB.info.iName.iFont.scale := 0.5;
leftToRight(60)(B, E);
topToBottom(30)(E, F);
drawObjects(D, E, F, TF, EB);
%------------------------------------------------------
% classes in 3rd column
Class.G("DynamicStructRootContainer")
()();
G.nw = (250, 30);
ClassTemplate.TG("Storage")(G);
Class.H("ByteStream")
()
("+seek()",
"+rdstate()",
"+size()",
"+tell()",
"+eof()",
"+read<T>()");
ClassTemplate.TH("StreamBuf")(H);
Class.I("ByteStreamHandleBuf")
("#pos")
("+seek()",
"+size()",
"+tell()",
"+resize()");
ClassTemplate.TI("Storage")(I);
Class.J("ContiguousDataHandle")
()
("+ptr()");
classStereotypes.J("<<concept>>");
topToBottom(35)(G, H, I, J);
drawObjects(G, TG, H, TH, I, TI, J);
%------------------------------------------------------
% links in 1st column
link(inheritance)(pathManhattanY(A.n, D.w));
link(inheritance)(B.n -- A.s);
link(compositionUni)(E.w -- B.e);
clink(dashedLink)(B, EB);
link(inheritance)(C.n -- E.sw);
% links in 2nd column
link(association)(pathManhattanY(D.s, A.e));
item(iAssoc)("1")(obj.nw = D.s);
item(iAssoc)("container")(obj.ne = D.s);
link(inheritance)(F.n -- E.s);
% links in 3rd column
link(inheritance)(pathManhattanY(G.n, D.e));
link(association)(G.s -- H.n);
item(iAssoc)("1")(obj.sw = H.n);
item(iAssoc)("byteStream")(obj.se = H.n);
link(association)(H.s -- I.n);
item(iAssoc)("1")(obj.sw = I.n);
item(iAssoc)("streamBuf")(obj.se = I.n);
link(association)(I.s -- J.n);
item(iAssoc)("1")(obj.sw = J.n);
item(iAssoc)("storage")(obj.se = J.n);
endfig;
end