Previous commit wasn't at root dir. Now added the files.
This commit is contained in:
parent
4a081e0bf0
commit
616b1f1e52
4 changed files with 1525 additions and 0 deletions
756
doc/ana/ana-class-diagram.xmi
Normal file
756
doc/ana/ana-class-diagram.xmi
Normal file
|
@ -0,0 +1,756 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XMI verified="false" xmi.version="1.2" timestamp="2010-05-31T16:49:14" xmlns:UML="http://schema.omg.org/spec/UML/1.3">
|
||||
<XMI.header>
|
||||
<XMI.documentation>
|
||||
<XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
|
||||
<XMI.exporterVersion>1.5.8</XMI.exporterVersion>
|
||||
<XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
|
||||
</XMI.documentation>
|
||||
<XMI.metamodel xmi.version="1.3" href="UML.xml" xmi.name="UML"/>
|
||||
</XMI.header>
|
||||
<XMI.content>
|
||||
<UML:Model isSpecification="false" isAbstract="false" isLeaf="false" xmi.id="m1" isRoot="false" name="UML Model">
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Stereotype visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="folder" name="folder"/>
|
||||
<UML:Stereotype visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="datatype" name="datatype"/>
|
||||
<UML:Stereotype visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="typedef" name="typedef"/>
|
||||
<UML:Stereotype visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="constructor" name="constructor"/>
|
||||
<UML:Stereotype visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="enum" name="enum"/>
|
||||
<UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Logical View" name="Logical View">
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Package stereotype="folder" visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Datatypes" name="Datatypes">
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="f2i76YyYRBRc" name="int"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="kcbGi7xV1YmX" name="char"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="ZCRk97Qn77uD" name="bool"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="dql52DhknG0U" name="float"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="OxzNUjs1wJl3" name="double"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="OAqVHiguXSxZ" name="short"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="deHOtFsHBscd" name="long"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="ZUeVmPXAZNeo" name="unsigned int"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="4Khbke8NHPmA" name="unsigned short"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="cPnUzQ4T4XDS" name="unsigned long"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="2OzO0oSIT335" name="string"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="zRFk1w3OmUAl" isRoot="false" xmi.id="GIwrQczJQYIN" name="const Predicate"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="zRFk1w3OmUAl" isRoot="false" xmi.id="m107kFZQZ8S9" name="const Predicate&"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="tM3eoIJ9SXyK" isRoot="false" xmi.id="4GldMDnq5ha8" name="const _GenericClientSelector< Predicate >&"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="UA8YNGbBYlnP" isRoot="false" xmi.id="qlX5VHLHxiHK" name="const Message&"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="zFJb40w8Ghjc" isRoot="false" xmi.id="1sDvYH7ynV4m" name="ListenerHandler*"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="XWWAQV9oTCkM" isRoot="false" xmi.id="vUr5BtbljVgK" name="SenderHandler*"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="DDzCwgjwfTsO" isRoot="false" xmi.id="hAyu5Leen5d0" name="ConnectionHandler*"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="Jw6DueJMoPsA" isRoot="false" xmi.id="gpI3Jv9pLaar" name="const ClientSelector&"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="UA8YNGbBYlnP" isRoot="false" xmi.id="PQ0FbtpmidtG" name="const net_api::Message&"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="AiCrTCA1zAjD" name="undef">
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="PzBExyU9naKM"/>
|
||||
</UML:GeneralizableElement.generalization>
|
||||
</UML:DataType>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" elementReference="uEvMu2ETuweR" isRoot="false" xmi.id="gWhYOKGlH9Ct" name="const predicate"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="RnTrTU3Biwrp" name="timer*"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="ScGZv0N34SkC" name="char*"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="h21Cskafp1XO" name="void*"/>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Package visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="mBrYb81eB7nZ" name="ana">
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Class stereotype="typedef" visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="zfLmSBXc25D8" name="NetInt"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="false" isLeaf="false" elementReference="HiuQRlKeaeuq" isRoot="false" xmi.id="5qJAbrZtXTJy" name="MessageSize"/>
|
||||
<UML:Class stereotype="typedef" visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="HiuQRlKeaeuq" name="NetUint"/>
|
||||
<UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="false" isLeaf="false" elementReference="HiuQRlKeaeuq" isRoot="false" xmi.id="bclDUbD9wxa7" name="ClientID"/>
|
||||
<UML:Class stereotype="typedef" visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="UA8YNGbBYlnP" name="Message"/>
|
||||
<UML:Class stereotype="typedef" visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="IgwmxuxYUilz" name="Port"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="tM3eoIJ9SXyK" name="_generic_predicate">
|
||||
<UML:ModelElement.templateParameter>
|
||||
<UML:TemplateParameter visibility="public" isSpecification="false" namespace="tM3eoIJ9SXyK" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="UkRNcm75NDNO" name="predicate"/>
|
||||
</UML:ModelElement.templateParameter>
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="SM5st1BNlcjL"/>
|
||||
<UML:Generalization xmi.idref="HELEzIdwZESY"/>
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute visibility="private" isSpecification="false" xmi.id="CDjA9z48OIqN" type="gWhYOKGlH9Ct" name="pred"/>
|
||||
<UML:Operation visibility="private" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="EslzMvkbBeQZ" name="selects">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="iKZ4cPRoFDla" type="ZCRk97Qn77uD"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="0D8fuVluJk73" type="TC47ikd44tqK" value="" name="cid"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation stereotype="constructor" visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="6UBG8ZpNye1t" name="_generic_predicate">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="XXccaclNATl9" type="FbVXeTkk8eGs" value="" name="pred"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation stereotype="constructor" visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="3DdzrcsdeqiM" name="_generic_predicate">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="ySaoaICD7hxT" type="SiIeQbDIOVHV" value="" name="other"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="zFJb40w8Ghjc" comment="Handler Interfaces" name="listener_handler">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="yqeoD1UAEmmI" name="handle_message">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="IpKpuYPNc6lH" type="ZCRk97Qn77uD" value="" name="has_error"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="AgrbgT4Sp7we" type="TC47ikd44tqK" value="" name="cid"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="bV3jQhY6kY8S" type="Mkg4niyyOnX5" value="" name="msg"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="k0yuqHFe1lhW" name="handle_disconnect">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="oyxQ2jigZhpV" type="ZCRk97Qn77uD" value="" name="has_error"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="qbJYtq8im46o" type="TC47ikd44tqK" value="" name="cid"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="DDzCwgjwfTsO" name="connection_handler">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="WBrQzjDVfuzz" name="handle_connect">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="ZKhM5UpNy5AZ" type="ZCRk97Qn77uD" value="" name="has_error"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="F1NCodnNvThy" type="TC47ikd44tqK" value="" name="cid"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="XWWAQV9oTCkM" name="send_handler">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="C3SNJkUEiVoA" name="handle_send">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="XbZybKMaic4O" type="ZCRk97Qn77uD" value="" name="error_occurred"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="0nQ1OIWg6vUF" type="TC47ikd44tqK" value="" name="cid"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="QYQ81CGRwMrT" comment="Main classes." name="listener">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="mKWhHi1j18dW" name="set_listener_handler">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="skDZjrGssdkP" type="rYTL0kdSxnrb" value="" name="listener"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="F5MGDxkCqx6M" name="id">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="CDKxhMkOgv0J" type="TC47ikd44tqK"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="protected" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="BZplFbQCJJSM" name="run_listener"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="y5iKdovstF77" name="server">
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="1defWfyTignL"/>
|
||||
<UML:Generalization xmi.idref="A85c4mcYU2i8"/>
|
||||
<UML:Generalization xmi.idref="4zR2pDQZUVXd"/>
|
||||
<UML:Generalization xmi.idref="MLLmVXXjdMgE"/>
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="nReLWcnBkl4n" name="send_all">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="ILMSRiT4DPHr" type="Mkg4niyyOnX5" value="" name="msg"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="4IPquAXDTtdv" type="wxM25Ap3fyHy" value="" name="handler"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="K4GPjSVQtNXY" type="ZCRk97Qn77uD" value="true" name="copy_buffer"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="Y1fIkh4oNUd8" name="send_if">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="C0FUQ5PYaazS" type="Mkg4niyyOnX5" value="" name="msg"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="RRBOrnb2nqWB" type="wxM25Ap3fyHy" value="" name="handler"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="PiSZyGc7SJu4" type="GsQNf0Kxm88I" value="" name="pred"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="5gM7ouhok4bf" type="ZCRk97Qn77uD" value="true" name="copy_buffer"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="PVaCUJi89zBQ" name="send_one">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="e1kO8qgXZ94X" type="TC47ikd44tqK" value="" name="client"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="JpMRR1C33vRB" type="Mkg4niyyOnX5" value="" name="msg"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="u9OnB0mUo6tD" type="wxM25Ap3fyHy" value="" name="handler"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="BXTK81ENEm0v" type="ZCRk97Qn77uD" value="true" name="copy_buffer"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="IxP2XL6HKQAq" name="run">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="VValuUpPT5az" type="bwAWuCCBKijf" value="" name="pt"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Uj0RGsEWneWK" name="~ server"/>
|
||||
</UML:Classifier.feature>
|
||||
<UML:Namespace.ownedElement>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="y5iKdovstF77" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="EkOvR9ErpQDj" name="ClientProxy">
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="jcpuLvpRNk8T"/>
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute visibility="private" isSpecification="false" ownerScope="classifier" xmi.id="TbGnuaAYFxNl" type="bclDUbD9wxa7" name="last_client_id_"/>
|
||||
<UML:Attribute visibility="private" isSpecification="false" xmi.id="ZUR1FZaErCy8" type="bclDUbD9wxa7" name="id_"/>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="aswxa2Q7500i" name="send">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="NpZT3JyQJLai" type="qlX5VHLHxiHK" value="" name="message"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="Y5Pd3NLQDssG" type="vUr5BtbljVgK" value="" name=""/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="BogT9G92i08t" name="id">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="shcbCHtiMIMP" type="bclDUbD9wxa7"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="efnrWd7hSl8b" name="~ ClientProxy"/>
|
||||
<UML:Operation stereotype="constructor" visibility="protected" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="1IekIkb8PCkZ" name="ClientProxy"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="zccH0m6ttqiX" name="client">
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="fxxGkMcE3dfH"/>
|
||||
<UML:Generalization xmi.idref="QEtkrYQr9no5"/>
|
||||
<UML:Generalization xmi.idref="uOyO2ktfmi0x"/>
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="e7Pfk3xDviUR" name="connect">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="okMKnPfs2bVa" type="4F6v8IdrSWej" value="" name="handler"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="9LGadllFsAua" name="run">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="lEWvPqH71Teq" type="2OzO0oSIT335" value="" name="address"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="hlx1vtLNelOM" type="bwAWuCCBKijf" value="" name="pt"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="zLnOynO78efl" name="send">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="yX9GIYt9ZSe9" type="Mkg4niyyOnX5" value="" name="msg"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="UA71cj88nlnw" type="wxM25Ap3fyHy" value="" name="handler"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="4f7lG0z7OmID" name="~ client"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="mBrYb81eB7nZ" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="Jw6DueJMoPsA" name="send_predicate">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="dTLBC8YVmUFh" name="selects">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="Vd6J0yReQnna" type="ZCRk97Qn77uD"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="Ix0BMBT9zUX1" type="TC47ikd44tqK" value="" name="cid"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Package>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="9o0XZn8R795w" name="ClientSelector"/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="tM3eoIJ9SXyK" xmi.id="SM5st1BNlcjL" parent="9o0XZn8R795w" name=""/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="zRFk1w3OmUAl" name="Predicate"/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="y5iKdovstF77" xmi.id="1defWfyTignL" parent="DrJ1nPNxbfvI" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="EkOvR9ErpQDj" xmi.id="jcpuLvpRNk8T" parent="DrJ1nPNxbfvI" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="zccH0m6ttqiX" xmi.id="fxxGkMcE3dfH" parent="DrJ1nPNxbfvI" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="tM3eoIJ9SXyK" xmi.id="HELEzIdwZESY" parent="Jw6DueJMoPsA" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="zccH0m6ttqiX" xmi.id="QEtkrYQr9no5" parent="QYQ81CGRwMrT" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="AiCrTCA1zAjD" xmi.id="PzBExyU9naKM" parent="QYQ81CGRwMrT" name=""/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="sBvfcZwLzeoC" name="client_proxy">
|
||||
<UML:GeneralizableElement.generalization>
|
||||
<UML:Generalization xmi.idref="9NirbuYFF1Vs"/>
|
||||
<UML:Generalization xmi.idref="1sj0FT8DfspU"/>
|
||||
<UML:Generalization xmi.idref="EJFQ5av6Couo"/>
|
||||
</UML:GeneralizableElement.generalization>
|
||||
<UML:Classifier.feature>
|
||||
<UML:Attribute visibility="private" isSpecification="false" ownerScope="classifier" xmi.id="8xCmerp16cYd" type="TC47ikd44tqK" name="last_client_id_"/>
|
||||
<UML:Attribute visibility="private" isSpecification="false" xmi.id="R6BotMTg2YGf" type="TC47ikd44tqK" name="id_"/>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="true" isLeaf="false" isRoot="false" xmi.id="cthpsAhisudR" name="send">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="ETEHOx7r4Kcb" type="Mkg4niyyOnX5" value="" name="msg"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="SwyROihdBwuZ" type="wxM25Ap3fyHy" value="" name="handler"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="ujZEgTgFo8NX" type="ZCRk97Qn77uD" value="true" name="copy_buffer"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="LX6DRjdjBH22" name="id">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="4aGcH1XSmvWD" type="TC47ikd44tqK"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="c0GA96aTehe5" name="~ client_proxy"/>
|
||||
<UML:Operation stereotype="constructor" visibility="protected" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="OHpXWpZaPnBe" name="client_proxy"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="DrJ1nPNxbfvI" name="NetListener"/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="sBvfcZwLzeoC" xmi.id="9NirbuYFF1Vs" parent="DrJ1nPNxbfvI" name=""/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="pi7ZdbnFc1Pj" name="ClientID"/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="sBvfcZwLzeoC" xmi.id="1sj0FT8DfspU" parent="QYQ81CGRwMrT" name=""/>
|
||||
<UML:Association visibility="public" isSpecification="false" namespace="Logical View" xmi.id="pyx0sA7THnbc" name="">
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" multiplicity="1" xmi.id="xHppizzjy7TB" type="sBvfcZwLzeoC" name="" aggregation="none"/>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" multiplicity="1" xmi.id="XGR5AasxYpxO" type="zccH0m6ttqiX" name="" aggregation="none"/>
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association visibility="public" isSpecification="false" namespace="Logical View" xmi.id="ueL8Ficf3ztp" name="">
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" xmi.id="p9vvuFVRRUlq" type="y5iKdovstF77" name="" aggregation="aggregate"/>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" xmi.id="MvoerEglszr6" type="sBvfcZwLzeoC" name="" aggregation="none"/>
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association visibility="public" isSpecification="false" namespace="Logical View" xmi.id="hSjkRdYFmTAe" name="">
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" multiplicity="1" xmi.id="id397mxShm6X" type="y5iKdovstF77" name="" aggregation="aggregate"/>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" multiplicity="*" xmi.id="0kGrj8xOag6z" type="sBvfcZwLzeoC" name="" aggregation="none"/>
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Dependency visibility="public" isSpecification="false" namespace="Logical View" supplier="zFJb40w8Ghjc" xmi.id="P3KDIpYKJYCk" client="QYQ81CGRwMrT" name=""/>
|
||||
<UML:Dependency visibility="public" isSpecification="false" namespace="Logical View" supplier="XWWAQV9oTCkM" xmi.id="fudwQperYscg" client="y5iKdovstF77" name=""/>
|
||||
<UML:Dependency visibility="public" isSpecification="false" namespace="Logical View" supplier="DDzCwgjwfTsO" xmi.id="EWsmOSRNthyd" client="y5iKdovstF77" name=""/>
|
||||
<UML:Dependency visibility="public" isSpecification="false" namespace="Logical View" supplier="DDzCwgjwfTsO" xmi.id="rsCSNN1E2TG7" client="zccH0m6ttqiX" name=""/>
|
||||
<UML:Dependency visibility="public" isSpecification="false" namespace="Logical View" supplier="XWWAQV9oTCkM" xmi.id="hsKiJZnfBVAs" client="zccH0m6ttqiX" name=""/>
|
||||
<UML:Dependency visibility="public" isSpecification="false" namespace="Logical View" supplier="XWWAQV9oTCkM" xmi.id="VvJhPTZxCoLX" client="sBvfcZwLzeoC" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="sBvfcZwLzeoC" xmi.id="EJFQ5av6Couo" parent="QYQ81CGRwMrT" name=""/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="MczLZXFSrkYf" name="ana::listener_handler*"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="rYTL0kdSxnrb" name="listener_handler*"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="uEvMu2ETuweR" name="predicate"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="TC47ikd44tqK" name="client_id"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="FbVXeTkk8eGs" name="const predicate&"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="uhT8Zyf9aEkJ" name="const _generic_client_selector< predicate >&"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="SiIeQbDIOVHV" name="const _generic_predicate< predicate >&"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Mkg4niyyOnX5" name="const message&"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="4F6v8IdrSWej" name="connection_handler*"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="wxM25Ap3fyHy" name="send_handler*"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="feS2kWtCx2an" name="const client_predicate&"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="GsQNf0Kxm88I" name="const send_predicate&"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="bwAWuCCBKijf" name="port"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="g5Nu2Vyx7Iwk" name="timer">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation stereotype="constructor" visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="0KctyGlFFK8n" name="timer"/>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="CTUOy4mkSakC" name="wait">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="SrIURd1B7yPF" type="feF3bJnLlN5v" value="" name="milliseconds"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="a9x6hlRclTcC" type="nVqCh6qt86lG" value="" name="handler"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="LeJpGtxDzezO" name="cancel"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="feF3bJnLlN5v" name="size_t"/>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="nVqCh6qt86lG" name="Handler"/>
|
||||
<UML:Enumeration stereotype="enum" visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="3B0vn1vHgFWq" name="timeout_policy">
|
||||
<UML:EnumerationLiteral visibility="public" isSpecification="false" namespace="3B0vn1vHgFWq" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="5G7Jzmr9VCN1" name="NoTimeouts"/>
|
||||
<UML:EnumerationLiteral visibility="public" isSpecification="false" namespace="3B0vn1vHgFWq" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="pK4x2vQyXPcr" name="FixedTime"/>
|
||||
<UML:EnumerationLiteral visibility="public" isSpecification="false" namespace="3B0vn1vHgFWq" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Crm46jXhAbw9" name="TimePerKilobyte"/>
|
||||
</UML:Enumeration>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="GQmmp3EdIBp7" name="timed_sender">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="xK80cxg7xCmq" name="set_timeouts">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="1SrfXkHCSLiN" type="3B0vn1vHgFWq" value="" name="policy"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="gqMGm2NhC8Yk" type="feF3bJnLlN5v" value="0" name="milliseconds"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="pVsbYDJiLrQ4" name="start_timer">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="rWJJxO9Nn1X5" type="RnTrTU3Biwrp"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="vItpwhJQ0dWq" type="ZOYtDyx0T1R6" value="" name="buffer"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="8Kz6lyWpq27A" type="nVqCh6qt86lG" value="" name="handler"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation stereotype="constructor" visibility="protected" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="m8F1NhVXmQkM" name="timed_sender"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="ZOYtDyx0T1R6" name="const_buffer"/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="y5iKdovstF77" xmi.id="A85c4mcYU2i8" parent="GQmmp3EdIBp7" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="zccH0m6ttqiX" xmi.id="uOyO2ktfmi0x" parent="GQmmp3EdIBp7" name=""/>
|
||||
<UML:Association visibility="public" isSpecification="false" namespace="Logical View" xmi.id="XU33Ma0mnAft" name="">
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="false" isSpecification="false" xmi.id="1xIBdwISQclM" type="GQmmp3EdIBp7" name="" aggregation="none"/>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" xmi.id="yujlwHoRjpS5" type="3B0vn1vHgFWq" name="" aggregation="none"/>
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Association visibility="public" isSpecification="false" namespace="Logical View" xmi.id="k0H0SgcE2Y8j" name="">
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="false" isSpecification="false" xmi.id="J205TjvvmLLb" type="GQmmp3EdIBp7" name="" aggregation="none"/>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" xmi.id="Wv5cUSxCSFDv" type="g5Nu2Vyx7Iwk" name="" aggregation="none"/>
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="JmNEH4Et10uf" name="read_buffer_implementation">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation stereotype="constructor" visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="ReFR9wZrUjrn" name="read_buffer_implementation">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="2BlpKGb5Qm09" type="feF3bJnLlN5v" value="" name="size"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="true" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="BJZ7Lkq846jA" name="base_char">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="JzLbzlt2S9Cn" type="ScGZv0N34SkC"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="true" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="pjQp7RuZ96UK" name="base">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="E8pzb6MY3rXG" type="h21Cskafp1XO"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="true" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="BqblyCrifeNf" name="size">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="qRj1cPItMbUL" type="feF3bJnLlN5v"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="d7KZJBIwnfaS" name="~read_buffer_implementation"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="y5iKdovstF77" xmi.id="4zR2pDQZUVXd" parent="QYQ81CGRwMrT" name=""/>
|
||||
<UML:Generalization discriminator="" visibility="public" isSpecification="false" namespace="Logical View" child="y5iKdovstF77" xmi.id="MLLmVXXjdMgE" parent="QYQ81CGRwMrT" name=""/>
|
||||
<UML:Association visibility="public" isSpecification="false" namespace="Logical View" xmi.id="PeC5KuXzBKuM" name="">
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="false" isSpecification="false" xmi.id="VQ0yGzntR71a" type="y5iKdovstF77" name="" aggregation="none"/>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" xmi.id="4VOEPD9orLuA" type="JmNEH4Et10uf" name="" aggregation="none"/>
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
<UML:Class visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Pj2lCSl9hiuY" name="copying_buffer">
|
||||
<UML:Classifier.feature>
|
||||
<UML:Operation stereotype="constructor" visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="a8qhkV9zVxwv" name="copying_buffer">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="qn53AlY08Bf8" type="ZOYtDyx0T1R6" value="" name="buffer"/>
|
||||
<UML:Parameter visibility="private" isSpecification="false" xmi.id="ZvGir6PxuZ0g" type="ZCRk97Qn77uD" value="true" name="copy_buffer"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="true" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="htq1cMEMfF82" name="base">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="rTskCYrRuQiF" type="h21Cskafp1XO"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="true" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="fxWlUQuHrAmk" name="size">
|
||||
<UML:BehavioralFeature.parameter>
|
||||
<UML:Parameter kind="return" xmi.id="0G1QTwul0JO6" type="feF3bJnLlN5v"/>
|
||||
</UML:BehavioralFeature.parameter>
|
||||
</UML:Operation>
|
||||
<UML:Operation visibility="public" isSpecification="false" isQuery="false" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="EiABVLeHRnQk" name="~copying_buffer"/>
|
||||
</UML:Classifier.feature>
|
||||
</UML:Class>
|
||||
<UML:Association visibility="public" isSpecification="false" namespace="Logical View" xmi.id="g6JuTSJAS2Kv" name="">
|
||||
<UML:Association.connection>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="false" isSpecification="false" xmi.id="mTaUL8cKfKOf" type="y5iKdovstF77" name="" aggregation="none"/>
|
||||
<UML:AssociationEnd changeability="changeable" visibility="public" isNavigable="true" isSpecification="false" xmi.id="Qc5izJrdNAXq" type="Pj2lCSl9hiuY" name="" aggregation="none"/>
|
||||
</UML:Association.connection>
|
||||
</UML:Association>
|
||||
</UML:Namespace.ownedElement>
|
||||
<XMI.extension xmi.extender="umbrello">
|
||||
<diagrams>
|
||||
<diagram showopsig="1" linecolor="#ff0000" snapx="10" showattribassocs="1" snapy="10" linewidth="0" showattsig="1" showpubliconly="0" showpackage="0" showstereotype="0" name="class diagram" font="Sans Serif,12,-1,5,50,0,0,0,0,0" canvasheight="1005" canvaswidth="1715" localid="" snapcsgrid="0" showgrid="0" showops="1" usefillcolor="1" fillcolor="#ffffc0" zoom="100" xmi.id="SiK2R6stUvFt" documentation="" showscope="1" snapgrid="0" showatts="1" type="1">
|
||||
<widgets>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="469" showattsigs="601" y="336" showattributes="1" font="Sans Serif,12,-1,5,50,0,0,0,0,0" drawascircle="0" width="393" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="DDzCwgjwfTsO" showscope="1" height="50" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="879" showattsigs="601" y="217" showattributes="1" font="Sans Serif,12,-1,5,50,0,0,0,0,0" drawascircle="0" width="584" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="zFJb40w8Ghjc" showscope="1" height="70" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="84" showattsigs="601" y="488" showattributes="1" font="Sans Serif,12,-1,5,50,1,0,0,0,0" drawascircle="0" width="447" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="zccH0m6ttqiX" showscope="1" height="104" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="575" showattsigs="601" y="487" showattributes="1" font="Sans Serif,12,-1,5,75,1,0,0,0,0" drawascircle="0" width="908" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="y5iKdovstF77" showscope="1" height="123" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="451" showattsigs="601" y="192" showattributes="1" font="Sans Serif,12,-1,5,75,1,0,0,0,0" drawascircle="0" width="391" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="QYQ81CGRwMrT" showscope="1" height="85" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="460" showattsigs="601" y="416" showattributes="1" font="Sans Serif,12,-1,5,50,0,0,0,0,0" drawascircle="0" width="411" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="XWWAQV9oTCkM" showscope="1" height="50" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="203" showattsigs="601" y="68" showattributes="1" font="Sans Serif,12,-1,5,50,0,0,0,0,0" drawascircle="0" width="238" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="Jw6DueJMoPsA" showscope="1" height="50" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="546" showattsigs="601" y="31" showattributes="1" font="Sans Serif,12,-1,5,50,0,0,0,0,0" width="597" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="tM3eoIJ9SXyK" showscope="1" height="125" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="361" showattsigs="601" y="649" showattributes="1" font="Sans Serif,12,-1,5,50,1,0,0,0,0" drawascircle="0" width="653" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="sBvfcZwLzeoC" showscope="1" height="133" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="786" showattsigs="601" y="809" showattributes="1" font="Sans Serif,12,-1,5,75,0,0,0,0,0" width="366" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="g5Nu2Vyx7Iwk" showscope="1" height="85" showopsigs="601"/>
|
||||
<enumwidget width="141" x="203" y="796" usesdiagramusefillcolor="0" usesdiagramfillcolor="0" isinstance="0" fillcolor="#ffffc0" height="114" linecolor="#ff0000" xmi.id="3B0vn1vHgFWq" showpackage="0" usefillcolor="1" linewidth="none" font="Sans Serif,12,-1,5,75,1,0,0,0,0"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="381" showattsigs="601" y="916" showattributes="1" font="Sans Serif,12,-1,5,75,0,0,0,0,0" width="505" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="GQmmp3EdIBp7" showscope="1" height="85" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="1182" showattsigs="601" y="703" showattributes="1" font="Sans Serif,12,-1,5,75,0,0,0,0,0" width="344" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="JmNEH4Et10uf" showscope="1" height="123" showopsigs="601"/>
|
||||
<classwidget linecolor="#ff0000" usesdiagramfillcolor="0" linewidth="none" showoperations="1" usesdiagramusefillcolor="0" showpubliconly="0" showpackage="0" x="1040" showattsigs="601" y="326" showattributes="1" font="Sans Serif,12,-1,5,75,0,0,0,0,0" width="519" isinstance="0" usefillcolor="1" fillcolor="#ffffc0" xmi.id="Pj2lCSl9hiuY" showscope="1" height="104" showopsigs="601"/>
|
||||
</widgets>
|
||||
<messages/>
|
||||
<associations>
|
||||
<assocwidget indexa="1" indexb="1" widgetaid="tM3eoIJ9SXyK" linecolor="none" totalcounta="2" xmi.id="HELEzIdwZESY" widgetbid="Jw6DueJMoPsA" totalcountb="2" type="500" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="546" starty="93"/>
|
||||
<endpoint endx="441" endy="93"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="2" widgetaid="zccH0m6ttqiX" linecolor="none" totalcounta="4" xmi.id="QEtkrYQr9no5" widgetbid="QYQ81CGRwMrT" totalcountb="3" type="500" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="193" starty="488"/>
|
||||
<endpoint endx="451" endy="263"/>
|
||||
<point x="193" y="263"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="2" widgetaid="sBvfcZwLzeoC" linecolor="none" totalcounta="3" xmi.id="pyx0sA7THnbc" widgetbid="zccH0m6ttqiX" totalcountb="3" type="503" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="361" starty="695"/>
|
||||
<endpoint endx="305" endy="592"/>
|
||||
<point x="305" y="695"/>
|
||||
</linepath>
|
||||
<floatingtext width="18" x="329" y="667" usesdiagramusefillcolor="1" posttext="" usesdiagramfillcolor="1" isinstance="0" fillcolor="none" height="24" role="701" linecolor="none" xmi.id="T5O3q6wAnpzO" usefillcolor="1" linewidth="none" font="Sans Serif,12,-1,5,50,0,0,0,0,0" text="1" pretext=""/>
|
||||
<floatingtext width="18" x="307" y="595" usesdiagramusefillcolor="1" posttext="" usesdiagramfillcolor="1" isinstance="0" fillcolor="none" height="24" role="702" linecolor="none" xmi.id="XwbFdfG7RI3N" usefillcolor="1" linewidth="none" font="Sans Serif,12,-1,5,50,0,0,0,0,0" text="1" pretext=""/>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="2" indexb="1" widgetaid="y5iKdovstF77" linecolor="none" totalcounta="4" xmi.id="hSjkRdYFmTAe" widgetbid="sBvfcZwLzeoC" totalcountb="2" type="501" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="1117" starty="610"/>
|
||||
<endpoint endx="1014" endy="719"/>
|
||||
<point x="1117" y="719"/>
|
||||
</linepath>
|
||||
<floatingtext width="18" x="1119" y="612" usesdiagramusefillcolor="1" posttext="" usesdiagramfillcolor="1" isinstance="0" fillcolor="none" height="24" role="701" linecolor="none" xmi.id="lQK2NYcpe0sS" usefillcolor="1" linewidth="none" font="Sans Serif,12,-1,5,50,0,0,0,0,0" text="1" pretext=""/>
|
||||
<floatingtext width="16" x="1016" y="693" usesdiagramusefillcolor="1" posttext="" usesdiagramfillcolor="1" isinstance="0" fillcolor="none" height="24" role="702" linecolor="none" xmi.id="6ncsaZE7UpM5" usefillcolor="1" linewidth="none" font="Sans Serif,12,-1,5,50,0,0,0,0,0" text="*" pretext=""/>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="1" widgetaid="QYQ81CGRwMrT" linecolor="none" totalcounta="2" xmi.id="P3KDIpYKJYCk" widgetbid="zFJb40w8Ghjc" totalcountb="2" type="502" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="842" starty="252"/>
|
||||
<endpoint endx="879" endy="252"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="1" widgetaid="y5iKdovstF77" linecolor="none" totalcounta="5" xmi.id="fudwQperYscg" widgetbid="XWWAQV9oTCkM" totalcountb="2" type="502" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="941" starty="487"/>
|
||||
<endpoint endx="871" endy="418"/>
|
||||
<point x="941" y="418"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="2" indexb="1" widgetaid="y5iKdovstF77" linecolor="none" totalcounta="5" xmi.id="EWsmOSRNthyd" widgetbid="DDzCwgjwfTsO" totalcountb="2" type="502" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="1001" starty="487"/>
|
||||
<endpoint endx="862" endy="360"/>
|
||||
<point x="1001" y="360"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="2" indexb="1" widgetaid="zccH0m6ttqiX" linecolor="none" totalcounta="4" xmi.id="rsCSNN1E2TG7" widgetbid="DDzCwgjwfTsO" totalcountb="2" type="502" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="305" starty="488"/>
|
||||
<endpoint endx="469" endy="355"/>
|
||||
<point x="305" y="355"/>
|
||||
<point x="378" y="355"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="3" indexb="1" widgetaid="zccH0m6ttqiX" linecolor="none" totalcounta="4" xmi.id="hsKiJZnfBVAs" widgetbid="XWWAQV9oTCkM" totalcountb="2" type="502" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="417" starty="488"/>
|
||||
<endpoint endx="460" endy="418"/>
|
||||
<point x="417" y="418"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="1" widgetaid="sBvfcZwLzeoC" linecolor="none" totalcounta="2" xmi.id="VvJhPTZxCoLX" widgetbid="XWWAQV9oTCkM" totalcountb="2" type="502" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="556" starty="649"/>
|
||||
<endpoint endx="556" endy="466"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="2" indexb="1" widgetaid="sBvfcZwLzeoC" linecolor="none" totalcounta="3" xmi.id="EJFQ5av6Couo" widgetbid="QYQ81CGRwMrT" totalcountb="3" type="500" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="361" starty="742"/>
|
||||
<endpoint endx="451" endy="240"/>
|
||||
<point x="23" y="742"/>
|
||||
<point x="23" y="240"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="1" widgetaid="y5iKdovstF77" linecolor="none" totalcounta="4" xmi.id="A85c4mcYU2i8" widgetbid="GQmmp3EdIBp7" totalcountb="2" type="500" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="1166" starty="610"/>
|
||||
<endpoint endx="886" endy="964"/>
|
||||
<point x="1166" y="964"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="1" widgetaid="zccH0m6ttqiX" linecolor="none" totalcounta="3" xmi.id="uOyO2ktfmi0x" widgetbid="GQmmp3EdIBp7" totalcountb="2" type="500" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="126" starty="592"/>
|
||||
<endpoint endx="381" endy="943"/>
|
||||
<point x="126" y="943"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="1" indexb="1" widgetaid="GQmmp3EdIBp7" linecolor="none" totalcounta="3" xmi.id="XU33Ma0mnAft" widgetbid="3B0vn1vHgFWq" totalcountb="2" type="512" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="403" starty="916"/>
|
||||
<endpoint endx="344" endy="853"/>
|
||||
<point x="403" y="853"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="2" indexb="1" widgetaid="GQmmp3EdIBp7" linecolor="none" totalcounta="3" xmi.id="k0H0SgcE2Y8j" widgetbid="g5Nu2Vyx7Iwk" totalcountb="2" type="512" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="701" starty="916"/>
|
||||
<endpoint endx="786" endy="855"/>
|
||||
<point x="701" y="855"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="3" indexb="1" widgetaid="y5iKdovstF77" linecolor="none" totalcounta="5" xmi.id="MLLmVXXjdMgE" widgetbid="QYQ81CGRwMrT" totalcountb="2" type="500" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="1022" starty="487"/>
|
||||
<endpoint endx="767" endy="277"/>
|
||||
<point x="1022" y="326"/>
|
||||
<point x="767" y="326"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="3" indexb="1" widgetaid="y5iKdovstF77" linecolor="none" totalcounta="4" xmi.id="PeC5KuXzBKuM" widgetbid="JmNEH4Et10uf" totalcountb="2" type="512" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="1307" starty="610"/>
|
||||
<endpoint endx="1307" endy="703"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
<assocwidget indexa="4" indexb="1" widgetaid="y5iKdovstF77" linecolor="none" totalcounta="5" xmi.id="g6JuTSJAS2Kv" widgetbid="Pj2lCSl9hiuY" totalcountb="2" type="512" linewidth="none">
|
||||
<linepath>
|
||||
<startpoint startx="1307" starty="487"/>
|
||||
<endpoint endx="1307" endy="430"/>
|
||||
</linepath>
|
||||
</assocwidget>
|
||||
</associations>
|
||||
</diagram>
|
||||
</diagrams>
|
||||
</XMI.extension>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Use Case View" name="Use Case View">
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Component View" name="Component View">
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Deployment View" name="Deployment View">
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
<UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Entity Relationship Model" name="Entity Relationship Model">
|
||||
<UML:Namespace.ownedElement/>
|
||||
</UML:Model>
|
||||
</UML:Namespace.ownedElement>
|
||||
</UML:Model>
|
||||
</XMI.content>
|
||||
<XMI.extensions xmi.extender="umbrello">
|
||||
<docsettings viewid="SiK2R6stUvFt" uniqueid="0G1QTwul0JO6" documentation=""/>
|
||||
<listview>
|
||||
<listitem open="1" type="800" id="Views">
|
||||
<listitem open="1" type="801" id="Logical View">
|
||||
<listitem open="0" type="807" id="SiK2R6stUvFt" label="class diagram"/>
|
||||
<listitem open="0" type="813" id="pi7ZdbnFc1Pj"/>
|
||||
<listitem open="0" type="813" id="9o0XZn8R795w"/>
|
||||
<listitem open="1" type="813" id="nVqCh6qt86lG"/>
|
||||
<listitem open="0" type="813" id="DrJ1nPNxbfvI"/>
|
||||
<listitem open="0" type="813" id="zRFk1w3OmUAl"/>
|
||||
<listitem open="1" type="813" id="MczLZXFSrkYf"/>
|
||||
<listitem open="1" type="813" id="TC47ikd44tqK"/>
|
||||
<listitem open="0" type="813" id="sBvfcZwLzeoC">
|
||||
<listitem open="0" type="814" id="8xCmerp16cYd"/>
|
||||
<listitem open="0" type="814" id="R6BotMTg2YGf"/>
|
||||
<listitem open="0" type="815" id="cthpsAhisudR"/>
|
||||
<listitem open="0" type="815" id="LX6DRjdjBH22"/>
|
||||
<listitem open="0" type="815" id="c0GA96aTehe5"/>
|
||||
<listitem open="0" type="815" id="OHpXWpZaPnBe"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="4F6v8IdrSWej"/>
|
||||
<listitem open="1" type="813" id="uhT8Zyf9aEkJ"/>
|
||||
<listitem open="1" type="813" id="SiIeQbDIOVHV"/>
|
||||
<listitem open="1" type="813" id="feS2kWtCx2an"/>
|
||||
<listitem open="1" type="813" id="Mkg4niyyOnX5"/>
|
||||
<listitem open="1" type="813" id="FbVXeTkk8eGs"/>
|
||||
<listitem open="1" type="813" id="GsQNf0Kxm88I"/>
|
||||
<listitem open="1" type="813" id="ZOYtDyx0T1R6"/>
|
||||
<listitem open="1" type="813" id="Pj2lCSl9hiuY">
|
||||
<listitem open="0" type="815" id="a8qhkV9zVxwv"/>
|
||||
<listitem open="0" type="815" id="htq1cMEMfF82"/>
|
||||
<listitem open="0" type="815" id="fxWlUQuHrAmk"/>
|
||||
<listitem open="0" type="815" id="EiABVLeHRnQk"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="rYTL0kdSxnrb"/>
|
||||
<listitem open="1" type="813" id="bwAWuCCBKijf"/>
|
||||
<listitem open="1" type="813" id="uEvMu2ETuweR"/>
|
||||
<listitem open="1" type="813" id="JmNEH4Et10uf">
|
||||
<listitem open="0" type="815" id="ReFR9wZrUjrn"/>
|
||||
<listitem open="0" type="815" id="BJZ7Lkq846jA"/>
|
||||
<listitem open="0" type="815" id="pjQp7RuZ96UK"/>
|
||||
<listitem open="0" type="815" id="BqblyCrifeNf"/>
|
||||
<listitem open="0" type="815" id="d7KZJBIwnfaS"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="wxM25Ap3fyHy"/>
|
||||
<listitem open="1" type="813" id="feF3bJnLlN5v"/>
|
||||
<listitem open="1" type="813" id="GQmmp3EdIBp7">
|
||||
<listitem open="0" type="815" id="xK80cxg7xCmq"/>
|
||||
<listitem open="0" type="815" id="pVsbYDJiLrQ4"/>
|
||||
<listitem open="0" type="815" id="m8F1NhVXmQkM"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="g5Nu2Vyx7Iwk">
|
||||
<listitem open="0" type="815" id="0KctyGlFFK8n"/>
|
||||
<listitem open="0" type="815" id="CTUOy4mkSakC"/>
|
||||
<listitem open="0" type="815" id="LeJpGtxDzezO"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="818" id="mBrYb81eB7nZ">
|
||||
<listitem open="0" type="813" id="UA8YNGbBYlnP"/>
|
||||
<listitem open="0" type="813" id="zfLmSBXc25D8"/>
|
||||
<listitem open="0" type="813" id="HiuQRlKeaeuq"/>
|
||||
<listitem open="0" type="813" id="IgwmxuxYUilz"/>
|
||||
<listitem open="0" type="813" id="tM3eoIJ9SXyK">
|
||||
<listitem open="0" type="814" id="CDjA9z48OIqN"/>
|
||||
<listitem open="0" type="815" id="EslzMvkbBeQZ"/>
|
||||
<listitem open="0" type="815" id="6UBG8ZpNye1t"/>
|
||||
<listitem open="0" type="815" id="3DdzrcsdeqiM"/>
|
||||
<listitem open="0" type="816" id="UkRNcm75NDNO"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="zccH0m6ttqiX">
|
||||
<listitem open="0" type="815" id="e7Pfk3xDviUR"/>
|
||||
<listitem open="0" type="815" id="9LGadllFsAua"/>
|
||||
<listitem open="0" type="815" id="zLnOynO78efl"/>
|
||||
<listitem open="0" type="815" id="4f7lG0z7OmID"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="DDzCwgjwfTsO">
|
||||
<listitem open="0" type="815" id="WBrQzjDVfuzz"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="813" id="QYQ81CGRwMrT">
|
||||
<listitem open="0" type="815" id="mKWhHi1j18dW"/>
|
||||
<listitem open="0" type="815" id="F5MGDxkCqx6M"/>
|
||||
<listitem open="0" type="815" id="BZplFbQCJJSM"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="zFJb40w8Ghjc">
|
||||
<listitem open="0" type="815" id="yqeoD1UAEmmI"/>
|
||||
<listitem open="0" type="815" id="k0yuqHFe1lhW"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="XWWAQV9oTCkM">
|
||||
<listitem open="0" type="815" id="C3SNJkUEiVoA"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="Jw6DueJMoPsA">
|
||||
<listitem open="0" type="815" id="dTLBC8YVmUFh"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="813" id="y5iKdovstF77">
|
||||
<listitem open="0" type="813" id="EkOvR9ErpQDj">
|
||||
<listitem open="0" type="814" id="TbGnuaAYFxNl"/>
|
||||
<listitem open="0" type="814" id="ZUR1FZaErCy8"/>
|
||||
<listitem open="0" type="815" id="aswxa2Q7500i"/>
|
||||
<listitem open="0" type="815" id="BogT9G92i08t"/>
|
||||
<listitem open="0" type="815" id="efnrWd7hSl8b"/>
|
||||
<listitem open="0" type="815" id="1IekIkb8PCkZ"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="815" id="nReLWcnBkl4n"/>
|
||||
<listitem open="0" type="815" id="Y1fIkh4oNUd8"/>
|
||||
<listitem open="0" type="815" id="PVaCUJi89zBQ"/>
|
||||
<listitem open="0" type="815" id="IxP2XL6HKQAq"/>
|
||||
<listitem open="0" type="815" id="Uj0RGsEWneWK"/>
|
||||
</listitem>
|
||||
<listitem open="0" type="829" id="bclDUbD9wxa7"/>
|
||||
<listitem open="0" type="829" id="5qJAbrZtXTJy"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="830" id="Datatypes">
|
||||
<listitem open="0" type="829" id="hAyu5Leen5d0"/>
|
||||
<listitem open="0" type="829" id="1sDvYH7ynV4m"/>
|
||||
<listitem open="0" type="829" id="vUr5BtbljVgK"/>
|
||||
<listitem open="1" type="829" id="ZCRk97Qn77uD"/>
|
||||
<listitem open="1" type="829" id="kcbGi7xV1YmX"/>
|
||||
<listitem open="1" type="829" id="ScGZv0N34SkC"/>
|
||||
<listitem open="0" type="829" id="gpI3Jv9pLaar"/>
|
||||
<listitem open="0" type="829" id="qlX5VHLHxiHK"/>
|
||||
<listitem open="0" type="829" id="GIwrQczJQYIN"/>
|
||||
<listitem open="0" type="829" id="m107kFZQZ8S9"/>
|
||||
<listitem open="0" type="829" id="4GldMDnq5ha8"/>
|
||||
<listitem open="0" type="829" id="PQ0FbtpmidtG"/>
|
||||
<listitem open="1" type="829" id="gWhYOKGlH9Ct"/>
|
||||
<listitem open="1" type="829" id="OxzNUjs1wJl3"/>
|
||||
<listitem open="1" type="829" id="dql52DhknG0U"/>
|
||||
<listitem open="1" type="829" id="f2i76YyYRBRc"/>
|
||||
<listitem open="1" type="829" id="deHOtFsHBscd"/>
|
||||
<listitem open="1" type="829" id="OAqVHiguXSxZ"/>
|
||||
<listitem open="1" type="829" id="2OzO0oSIT335"/>
|
||||
<listitem open="1" type="829" id="RnTrTU3Biwrp"/>
|
||||
<listitem open="0" type="829" id="AiCrTCA1zAjD"/>
|
||||
<listitem open="1" type="829" id="ZUeVmPXAZNeo"/>
|
||||
<listitem open="1" type="829" id="cPnUzQ4T4XDS"/>
|
||||
<listitem open="1" type="829" id="4Khbke8NHPmA"/>
|
||||
<listitem open="1" type="829" id="h21Cskafp1XO"/>
|
||||
</listitem>
|
||||
<listitem open="1" type="831" id="3B0vn1vHgFWq">
|
||||
<listitem open="0" type="839" id="5G7Jzmr9VCN1"/>
|
||||
<listitem open="0" type="839" id="pK4x2vQyXPcr"/>
|
||||
<listitem open="0" type="839" id="Crm46jXhAbw9"/>
|
||||
</listitem>
|
||||
</listitem>
|
||||
<listitem open="1" type="802" id="Use Case View"/>
|
||||
<listitem open="1" type="821" id="Component View"/>
|
||||
<listitem open="1" type="827" id="Deployment View"/>
|
||||
<listitem open="1" type="836" id="Entity Relationship Model"/>
|
||||
</listitem>
|
||||
</listview>
|
||||
<codegeneration>
|
||||
<codegenerator language="C++"/>
|
||||
</codegeneration>
|
||||
</XMI.extensions>
|
||||
</XMI>
|
544
doc/ana/description.tex
Normal file
544
doc/ana/description.tex
Normal file
|
@ -0,0 +1,544 @@
|
|||
\documentclass[a4paper,12pt,english]{article}
|
||||
|
||||
\newcommand{\ana}{\textbf{ana}}
|
||||
|
||||
\usepackage{listings}
|
||||
|
||||
% \usepackage{setspace}
|
||||
|
||||
\usepackage{color}
|
||||
\usepackage{textcomp}
|
||||
\definecolor{listinggray}{gray}{0.9}
|
||||
\definecolor{lbcolor}{rgb}{0.95,0.95,0.95}
|
||||
\lstset{
|
||||
backgroundcolor=\color{lbcolor},
|
||||
tabsize=4,
|
||||
rulecolor=,
|
||||
language=matlab,
|
||||
basicstyle=\scriptsize,
|
||||
upquote=true,
|
||||
aboveskip={1.5\baselineskip},
|
||||
columns=fixed,
|
||||
showstringspaces=false,
|
||||
extendedchars=true,
|
||||
breaklines=true,
|
||||
prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
|
||||
frame=single,
|
||||
showtabs=false,
|
||||
showspaces=false,
|
||||
showstringspaces=false,
|
||||
identifierstyle=\ttfamily,
|
||||
keywordstyle=\color[rgb]{0.1,0.1,0.6}\bfseries,
|
||||
commentstyle=\color[rgb]{0.133,0.545,0.133},
|
||||
stringstyle=\color[rgb]{0.627,0.126,0.941},
|
||||
}
|
||||
|
||||
|
||||
\title{Developing Server/Client applications \\
|
||||
using the \ana \ API/library}
|
||||
|
||||
\author{Guillermo Biset}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\vfill
|
||||
|
||||
\begin{abstract}
|
||||
Developing network applications is no easy task. Most of the time, the
|
||||
important features are not even network-related, yet the implementers
|
||||
spend most of their time coding to get this part of the functionality
|
||||
right.
|
||||
|
||||
This document introduces \ana, an API designed to let you develop
|
||||
simple network server and client applications using an asynchronous
|
||||
(i.e. non blocking) model in C++ without having to deal directly with
|
||||
network components such as sockets.
|
||||
|
||||
\end{abstract}
|
||||
|
||||
\newpage
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\newpage
|
||||
|
||||
\section{Preliminaries}
|
||||
|
||||
\textbf{Disclaimer}: This section contains no technical information
|
||||
whatsoever.
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
\textbf{Ana} (stands for Asynchronous Network API) is an API designed
|
||||
to help you develop server and client applications using an
|
||||
asynchronous model (i.e. non-blocking operations .) By using it the
|
||||
progammer doesn't need to pay too much attention to the network code
|
||||
itself but can concentrate on other features relevant to the program.
|
||||
|
||||
Also, \ana \ comes with an accompanying implementation. Hence, it is
|
||||
also a library that implements the API features. For example, MPI is
|
||||
an API for message passing and LAM/MPI is a library that implements
|
||||
it. Further on it is possible that the two will be separated, but this
|
||||
is unlikely at the moment.
|
||||
|
||||
The dynamics involved in writing server/client applications using \ana
|
||||
\ is fairly simple. There are interfaces designed for each set of
|
||||
handlers relevant to network events (described in later sections) that
|
||||
one must implement and every event will be issued by a corresponding
|
||||
component with a unique ID.
|
||||
|
||||
In the simpler cases, developing a server involves:
|
||||
\begin{enumerate}
|
||||
\item Creating an \ana::server object.
|
||||
\item Running it on a given port.
|
||||
\item Having a class of your own inherit from the corresponding
|
||||
interfaces to handle network events.
|
||||
\item Implement these handlers.
|
||||
\end{enumerate}
|
||||
|
||||
The client side implementation is analogous:
|
||||
\begin{enumerate}
|
||||
\item Create an \ana::client object.
|
||||
\item Instruct it to connect to a given address:port.
|
||||
\item Create classes that inherit from the corresponding
|
||||
interfaces to handle network events.
|
||||
\item Implement these handlers.
|
||||
\end{enumerate}
|
||||
|
||||
\section{On Asynchronous Operations}
|
||||
|
||||
Evidently, implementing these handlers may not be so simple. However,
|
||||
a large amount of functionality may be achieved from simple
|
||||
implementations in them.
|
||||
|
||||
Every operation in \ana \ is asynchronous, which is both a good
|
||||
feature and a bad one. The drawback is that some assumptions usually
|
||||
made about function invocation require thinking twice about them.
|
||||
|
||||
The main problem is not understanding fully what the function does, in
|
||||
our case, and as an example, a \texttt{send} operation does not
|
||||
necessarily return after it has sent any data to anyone, it just
|
||||
\emph{queues} the corresponding operation, thus leaving the work to be
|
||||
carried out at a later time.
|
||||
|
||||
It is through the invocation of the handler that one can understand
|
||||
what happened.
|
||||
|
||||
For example:
|
||||
\begin{itemize}
|
||||
\item Returning from a send operation doesn't mean the data was
|
||||
sent (you just started sending it, the library will let you know
|
||||
when the operation was completed.)
|
||||
\item Returning from a connect operation doesn't mean the client
|
||||
succesfully connected to the server (you just instructed it to
|
||||
start a connection attempt.)
|
||||
\item Implementing the handler for an event involves error
|
||||
checking to see if the event failed and, if you performed
|
||||
several operations of a single type (e.g. many send operations)
|
||||
you won't be able to identify which of these failed (since the
|
||||
error belongs only to \textit{one} of these.)
|
||||
\end{itemize}
|
||||
|
||||
%\section{Features}
|
||||
|
||||
%\textbf{Ana} incorporates the following features:
|
||||
%\begin{description}
|
||||
% \item [
|
||||
%\end{description}
|
||||
|
||||
\section{API overview}
|
||||
|
||||
\subsection{Namespaces}
|
||||
|
||||
The list of namespaces is as follows:
|
||||
|
||||
\begin{description}
|
||||
|
||||
\item[\ana] : Main namespace.
|
||||
|
||||
\item[\ana::time] : Functions to build time durations
|
||||
(i.e. \ana::time::seconds.)
|
||||
|
||||
\item[\ana::detail] : Implementation specific definitions.
|
||||
|
||||
\end{description}
|
||||
|
||||
The whole API can be found under one namespace: \ana. From now on I
|
||||
will refer to elements in the \ana \ namespace using C++ scope
|
||||
operator ::, for instance, method \texttt{f} from namespace \ana \ may
|
||||
be referred to as \ana::\texttt{f}.
|
||||
|
||||
Since timeout configuration (to be discussed) may be done using
|
||||
different functions to construct time durations, a \textbf{time}
|
||||
namespace is added to \ana. So, the \ana::\textbf{time} namespace
|
||||
contains functions for creating time durations.
|
||||
|
||||
The last namespace, and the one least relevant to the user of the API
|
||||
is the namespace \textbf{detail}, enclosing all implementation related
|
||||
code.
|
||||
|
||||
\subsection{Basic Types Defined}
|
||||
|
||||
Here is a list of some of the simple types defined under the \ana
|
||||
\ namespace
|
||||
|
||||
\begin{description}
|
||||
\item [ana\_uint] : Standard unsigned int. This type should be used
|
||||
if you expect to serialize data in an object, send it over the
|
||||
network, and then extract it on the other side (which may have a
|
||||
different architecture.)
|
||||
\item [ana\_int] : Standard int. Idem.
|
||||
\item [client\_id] : A unique ID of a network component. This type
|
||||
has a total order, so it can be compared to other instances of
|
||||
its type. A server will have an ID equal to zero and every client
|
||||
a greater than zero value.
|
||||
\item [port] : A string representing a port descriptor, the string
|
||||
should be able to cast itself to a unsigned short int.
|
||||
\item [address] : A string representing a network address, it may
|
||||
be an IP address of a hostname.
|
||||
\item [send\_type] : Send operation type, this is related to the
|
||||
lifecycle of the buffer used in the send operation, which may
|
||||
involve copying the buffer or not (this can result in great
|
||||
improvement regarding memory usage.) A value of this type may be
|
||||
evaluated as a boolean (where \emph{true} means to copy the
|
||||
buffer.) To set a value, constants \texttt{ZeroCopy} and
|
||||
\texttt{CopyBuffer} are provided. See section \ref{bufcopy} for
|
||||
more information.
|
||||
\item [error\_code] : Descriptor of an error code. It can also
|
||||
evaluate to a boolean value where \emph{false} means no error
|
||||
occurred.
|
||||
\end{description}
|
||||
|
||||
\subsection{Main Classes}
|
||||
|
||||
The main classes to be used from the \ana \ API are:
|
||||
\begin{description}
|
||||
|
||||
\item[ana::server] : A network server. An object of this type can
|
||||
handle several connected clients. It is possible to create pointers
|
||||
to an object of this type using the function
|
||||
\ana::\texttt{create\_server}.
|
||||
|
||||
\item[ana::client] : A network client. A network entity that can
|
||||
connect to a running server. To create a pointer to an object of
|
||||
this type use the \ana::\texttt{create\_client} function.
|
||||
|
||||
\end{description}
|
||||
|
||||
\subsection{Main Interfaces}
|
||||
|
||||
\begin{description}
|
||||
|
||||
\item[\ana::listener\_handler] : Should be implemented to handle
|
||||
incoming messages and the disconnection of a connected component.
|
||||
|
||||
\item[\ana::connection\_handler] : Handling of new connections.
|
||||
|
||||
\item[\ana::send\_handler] : Handling completed or failed send events.
|
||||
|
||||
\end{description}
|
||||
|
||||
\subsection{Extras}
|
||||
|
||||
\subsubsection{Timers}
|
||||
|
||||
Besides supporting configurable timeouts on send operations, \ana
|
||||
\ provides a simple timer interface to be used for general purposes.
|
||||
One can create timers and set them to call a specific handler after a
|
||||
certain amount of time has passed.
|
||||
|
||||
To create these time lapses functions are provided under the
|
||||
\textbf{time} namespace for milliseconds, seconds, minutes and hours,
|
||||
and these functions may be used in both cases (instructing a general
|
||||
purpose timer to wait for given amount of time or configuring the
|
||||
amount of time required for a timeout event on a send operation.)
|
||||
|
||||
Here are a few examples of how to construct time durations:
|
||||
\begin{center}
|
||||
\begin{tabular}{|l|l|}
|
||||
\hline
|
||||
Five minutes & \texttt{ana::time::minutes(5)} \\
|
||||
\hline
|
||||
A second and a half & \texttt{ana::time::seconds(1.5)} \\
|
||||
\hline
|
||||
One hour and ten milliseconds & \texttt{ana::time::hours(1)} + \\
|
||||
\ & \texttt{ana::time::milliseconds(10)} \\
|
||||
\hline
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\section{Using the API}
|
||||
|
||||
\subsection{Important Recommendations}
|
||||
|
||||
Here are some very important recommendations about using
|
||||
\ana. Explanations can be found in the following subsection.
|
||||
|
||||
\begin{itemize}
|
||||
\item If you are unsure about the consistency of the memory region
|
||||
you are using to send data, then use a send operation that copies
|
||||
the buffer before using it (this ensures that the buffer is
|
||||
copied before the invocation to the operation returns.)
|
||||
|
||||
There are two ways to accomplish this, but to keep things short,
|
||||
just use the default send operation without setting that specific
|
||||
parameter (e.g. \texttt{server\_->send\_all( ana::buffer ( str )
|
||||
) } .)
|
||||
\item Always prefer single multiple-send operations (e.g.
|
||||
\texttt{send\_if}) to executing many times a single-send
|
||||
operation (\texttt{send\_one}.)
|
||||
\item If you are \textbf{absolutely} sure the memory you'll be
|
||||
using for the send buffer will be consistent from the time of the
|
||||
invocation to the send operation to the invocation of its
|
||||
associated handler, then use a zero copy send operation
|
||||
(e.g. \texttt{server\_->send\_all( ana::buffer( str ),
|
||||
ana::ZeroCopy ) } .)
|
||||
\item Use the code as if handlers are called in a mutually
|
||||
exclusive way, but they are executed concurrently with the rest
|
||||
of your application code.
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Details about Buffers}
|
||||
\label{bufcopy}
|
||||
|
||||
There is a reason why multiple-send operations are better. If you are
|
||||
using a multiple-send operation ( \texttt{send\_all},
|
||||
\texttt{send\_if} ) that copies the buffer (the default behavior) then
|
||||
the buffer will be copied only once. Also, sending to each client will
|
||||
read from that original buffer. Finally, the buffer will be destructed
|
||||
automatically after the last handler has been called.
|
||||
|
||||
\subsection{Details about Threads}
|
||||
|
||||
\textbf{Ana} can't intercede between you and the rest of your program,
|
||||
this means that it can't ensure mutual exclusion between its code and
|
||||
your own. What it can ensure is that the handlers you implemented will
|
||||
be called from a single thread (i.e. there won't be two different
|
||||
handlers running concurrently.)
|
||||
|
||||
But this forces the user of the API to take this case under
|
||||
consideration and implement its own mutual exclusion
|
||||
mechanism. However, the most common scenario will have a clear
|
||||
separation between the rest of the program and the code using \ana.
|
||||
|
||||
For instance, there is no shared data structure between \ana \ and its
|
||||
user. The case to look out for is when the implementation of the
|
||||
network event handlers happen to modify data that is also modified
|
||||
within the rest of the code.
|
||||
|
||||
\section{Example: Chat Application}
|
||||
|
||||
This section describes the devolopment of a chat server and client
|
||||
applications. There is nothing interesting about it except the fact
|
||||
that it serves to show how one would go about using \ana.
|
||||
|
||||
First of all, we will develop two separate executable files, one for
|
||||
the server and one for the client. The server application will start a
|
||||
chat server in a given port and connect clients, keeping track of their
|
||||
assigned names. It also provides commands to change a client's name and
|
||||
listing everyone connected.
|
||||
|
||||
A client can connect to a running server and send messages or commands
|
||||
to it. Regular messages will in turn be broadcasted to every other
|
||||
client (prepending the name of the originating client first) and commands
|
||||
executed.
|
||||
|
||||
Since the client application is simpler, lets look at code for it first.
|
||||
|
||||
\subsection{Client Code}
|
||||
|
||||
The main function is very straightforward, it just creates a \texttt{ChatClient}
|
||||
object and tells it to run according to parameters taken from the command
|
||||
line. So, if the executable is \texttt{client} one may execute the
|
||||
following command: \texttt{./client -n billy -a address.com -p 12345}.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\lstset{language=C++}
|
||||
\begin{lstlisting}[frame=single]
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GetOpt_pp options(argc, argv);
|
||||
|
||||
if (options >> OptionPresent('h', "help"))
|
||||
show_help();
|
||||
else
|
||||
{
|
||||
port pt(DEFAULT_PORT);
|
||||
std::string address(DEFAULT_ADDRESS);
|
||||
std::string name("Unnamed");
|
||||
|
||||
options >> Option('p', "port", pt)
|
||||
>> Option('a',"address",address)
|
||||
>> Option('n',"name",name);
|
||||
std::cout << "Main client app.: Starting client" << std::endl;
|
||||
|
||||
ChatClient client(address,pt,name);
|
||||
client.run();
|
||||
}
|
||||
}
|
||||
\end{lstlisting}
|
||||
\centering \caption{The client's main function.}
|
||||
\label{client-main}
|
||||
\end{table}
|
||||
|
||||
So, not much to look at here, move along. Table \ref{chatclient-decl} is a little
|
||||
more interesting and shows how one should declare classes to implement the
|
||||
handler methods relevant to network events.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\lstset{language=C++}
|
||||
\begin{lstlisting}[frame=single]
|
||||
class ChatClient : public ana::listener_handler,
|
||||
public ana::send_handler,
|
||||
public ana::connection_handler
|
||||
{
|
||||
public:
|
||||
ChatClient(const std::string& address, port pt, std::string name)
|
||||
: continue_(true),
|
||||
client_( create_client(address,pt) ),
|
||||
name_(name)
|
||||
{
|
||||
}
|
||||
|
||||
void run();
|
||||
/* ... */
|
||||
private:
|
||||
/* Handler profiles. */
|
||||
virtual void handle_connect( ana::error_code error,
|
||||
ana::client_id server_id );
|
||||
|
||||
virtual void handle_disconnect( ana::error_code error,
|
||||
ana::client_id server_id);
|
||||
|
||||
virtual void handle_message( ana::error_code error,
|
||||
ana::client_id,
|
||||
ana::detail::read_buffer msg);
|
||||
|
||||
virtual void handle_send( ana::error_code error,
|
||||
ana::client_id client);
|
||||
|
||||
/* Attributes. */
|
||||
bool continue_;
|
||||
ana::client* client_;
|
||||
std::string name_;
|
||||
};
|
||||
\end{lstlisting}
|
||||
\centering \caption{A class that will implement handlers (all of them in this case.)}
|
||||
\label{chatclient-decl}
|
||||
\end{table}
|
||||
|
||||
\begin{table}[!htb]
|
||||
\lstset{language=C++}
|
||||
\begin{lstlisting}[frame=single]
|
||||
void ChatClient::run()
|
||||
{
|
||||
try
|
||||
{
|
||||
client_->connect( this );
|
||||
client_->set_listener_handler( this );
|
||||
client_->run();
|
||||
|
||||
// list available commands
|
||||
|
||||
run_input(); // read lines and send them
|
||||
}
|
||||
catch(const std::exception& e)
|
||||
{
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
|
||||
delete client_;
|
||||
}
|
||||
\end{lstlisting}
|
||||
\centering \caption{Running a client application.}
|
||||
\label{client-run}
|
||||
\end{table}
|
||||
|
||||
For this particular client application most handlers are trivial, method
|
||||
\texttt{handle\_disconnect} simply informs that the server disconnected
|
||||
and sets things up to quit, function \texttt{handle\_message} prints the
|
||||
incoming message and \texttt{handle\_send} reports the error if it occurred.
|
||||
|
||||
Method \texttt{handle\_connect} has some interest to it since it tells the
|
||||
server what its desired name is. Table \ref{client-connect} shows the
|
||||
corresponding code.
|
||||
|
||||
\begin{table}[!htb]
|
||||
\lstset{language=C++}
|
||||
\begin{lstlisting}[frame=single]
|
||||
virtual void handle_connect( ana::error_code error, client_id server_id )
|
||||
{
|
||||
if ( error )
|
||||
std::cerr << "Error connecting." << std::endl;
|
||||
else
|
||||
client_->send( ana::buffer( std::string("/name ") + name_) , this);
|
||||
}
|
||||
\end{lstlisting}
|
||||
\centering \caption{Implementation of the connection handler in the chat client's app.}
|
||||
\label{client-connect}
|
||||
\end{table}
|
||||
|
||||
\subsection{Server Code}
|
||||
|
||||
Things are a little more interesting on the server side. Table \ref{server-run}
|
||||
shows the code from running a server and table \ref{server-message} shows the
|
||||
code that handles an incoming message in the server side. Exactly as one would
|
||||
expect, if not a command, the message is broadcasted to everyone else (i.e.
|
||||
with the exception of the originating client.)
|
||||
|
||||
|
||||
\begin{table}[!htb]
|
||||
\lstset{language=C++}
|
||||
\begin{lstlisting}[frame=single]
|
||||
void ChatServer::run(port pt)
|
||||
{
|
||||
server_->set_connection_handler( this );
|
||||
server_->set_listener_handler( this );
|
||||
server_->run(pt);
|
||||
server_->set_timeouts(ana::FixedTime, ana::time::seconds(10));
|
||||
|
||||
std::cout << "Server running, Enter to quit." << std::endl;
|
||||
|
||||
std::string s;
|
||||
std::getline(std::cin, s); //yes, i've seen better code :)
|
||||
}
|
||||
\end{lstlisting}
|
||||
\centering \caption{Running a server.}
|
||||
\label{server-run}
|
||||
\end{table}
|
||||
|
||||
|
||||
\begin{table}[!htb]
|
||||
\lstset{language=C++}
|
||||
\begin{lstlisting}[frame=single]
|
||||
void ChatServer::handle_message( ana::error_code error,
|
||||
client_id client,
|
||||
ana::detail::read_buffer buffer)
|
||||
{
|
||||
if (! error)
|
||||
{
|
||||
std::string msg = buffer->string();
|
||||
|
||||
if (msg[0] == '/')
|
||||
parse_command(client, msg); //interpret the command
|
||||
else
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << names_[client] << " : " << msg;
|
||||
server_->send_if(ana::buffer( ss.str() ), this,
|
||||
create_predicate( boost::bind(
|
||||
std::not_equal_to<client_id>(), client, _1) ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
handle_disconnect(error, client);
|
||||
}
|
||||
\end{lstlisting}
|
||||
\centering \caption{Conditional broadcasting of an incoming message.}
|
||||
\label{server-message}
|
||||
\end{table}
|
||||
|
||||
|
||||
\end{document}
|
225
doc/ana/images/logo.svg
Normal file
225
doc/ana/images/logo.svg
Normal file
|
@ -0,0 +1,225 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
width="155.37711"
|
||||
height="160.5291"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="logo.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
sodipodi:modified="true"
|
||||
inkscape:export-filename="/home/billy/code/wesnoth/src/ana/logo.png"
|
||||
inkscape:export-xdpi="400"
|
||||
inkscape:export-ydpi="400">
|
||||
<metadata
|
||||
id="metadata48">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
inkscape:cy="82.905649"
|
||||
inkscape:cx="199.09833"
|
||||
inkscape:zoom="2.3394383"
|
||||
inkscape:window-height="829"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
guidetolerance="10.0"
|
||||
gridtolerance="10.0"
|
||||
objecttolerance="10.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:current-layer="g2342"
|
||||
showgrid="false"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3839"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 243.82591 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="587.38898 : 243.82591 : 1"
|
||||
inkscape:persp3d-origin="293.69449 : 162.55061 : 1"
|
||||
id="perspective2918" />
|
||||
<linearGradient
|
||||
id="Grad1"
|
||||
x1="41.194874"
|
||||
y1="616.47717"
|
||||
x2="118.93135"
|
||||
y2="527.55511"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(4.556763,0,0,-4.315033,25.816852,2748.7314)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#bb0000"
|
||||
id="stop7" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#5f0000"
|
||||
id="stop9" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="Grad2"
|
||||
x1="530.80951"
|
||||
y1="486.63101"
|
||||
x2="174.80548"
|
||||
y2="211.22995"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.960006,0,0,0.960006,2.4684814e-6,-3e-6)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#9a0000"
|
||||
id="stop12" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#f22803"
|
||||
id="stop14" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="Grad3"
|
||||
x1="187.87357"
|
||||
y1="224.59892"
|
||||
x2="581.83746"
|
||||
y2="483.10001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.960006,0,0,0.960006,2.4684814e-6,-1e-5)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#ec6c60"
|
||||
id="stop17" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#d11412"
|
||||
id="stop19" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="Grad4"
|
||||
x1="250.39845"
|
||||
y1="101.53633"
|
||||
x2="412.0943"
|
||||
y2="264.54187"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.960006,0,0,0.960006,2.4684814e-6,-3e-6)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#ffd9d9"
|
||||
id="stop22" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#ff2727"
|
||||
id="stop24" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="Grad5"
|
||||
cx="295.47125"
|
||||
cy="186.09634"
|
||||
r="179.55"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.14292e-8,1.531256,-0.876504,-2.165967e-5,451.06789,-254.78987)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#ffffff"
|
||||
id="stop27" />
|
||||
<stop
|
||||
offset="0.5"
|
||||
stop-color="#ffffff"
|
||||
id="stop29" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#d5d5d5"
|
||||
id="stop31" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="g2342"
|
||||
transform="matrix(0.185336,0,0,0.185336,136.82398,-51.944208)">
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="m -614.61996,1019.0606 c -19.39569,-6.9136 -33.58991,-27.63033 -33.67943,-49.15573 -0.12518,-30.08765 21.82857,-52.18729 51.84266,-52.18729 30.01402,0 51.96772,22.09964 51.8426,52.18729 -0.1527,36.73903 -35.40235,61.49013 -70.00583,49.15573 l 0,0 z"
|
||||
id="path4960" />
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="m -704.5683,765.36008 c -19.39569,-6.9136 -33.58996,-27.6303 -33.67942,-49.15564 -0.12518,-30.08773 21.82851,-52.18738 51.8426,-52.18738 30.01408,0 51.96772,22.09965 51.84265,52.18738 -0.1527,36.73901 -35.40235,61.49 -70.00583,49.15564 l 0,0 z"
|
||||
id="path4962" />
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="m -597.31478,498.75108 c -19.3957,-6.91355 -33.58992,-27.63025 -33.67943,-49.15564 -0.12518,-30.08773 21.82857,-52.18732 51.8426,-52.18732 30.01408,0 51.96772,22.09959 51.84265,52.18732 -0.15269,36.73901 -35.40235,61.49005 -70.00582,49.15564 l 0,0 z"
|
||||
id="path4964" />
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="m -338.36794,383.91986 c -19.39569,-6.91355 -33.58991,-27.63025 -33.67942,-49.15564 -0.12518,-30.08774 21.82857,-52.18738 51.84265,-52.18738 30.01403,0 51.96772,22.09964 51.8426,52.18738 -0.1527,36.739 -35.4023,61.48999 -70.00583,49.15564 l 0,0 z"
|
||||
id="path4966" />
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="m -62.36693,511.8909 c -19.395746,-6.91355 -33.589966,-27.63025 -33.679479,-49.15564 -0.125178,-30.08768 21.828571,-52.18732 51.842653,-52.18732 30.014082,0 51.9677233,22.09964 51.8425993,52.18732 -0.152695,36.739 -35.4022963,61.49005 -70.0057733,49.15564 l 0,0 z"
|
||||
id="path4968" />
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="M 30.098998,759.3059 C 10.703306,752.39234 -3.4909681,731.67565 -3.5804271,710.15025 -3.7056051,680.06252 18.248144,657.96288 48.262172,657.96288 c 30.01408,0 51.967718,22.09964 51.842648,52.18737 -0.152692,36.73901 -35.402348,61.49 -70.005822,49.15565 l 0,0 z"
|
||||
id="path4970" />
|
||||
<a
|
||||
id="a4982"
|
||||
transform="translate(-448.95658,249.75134)">
|
||||
<path
|
||||
id="path4974"
|
||||
d="m 99.075296,728.9995 -28.43085,-35.20811 22.206695,-0.6601 22.206639,-0.6601 0,-30.82094 0,-30.82094 -17.058314,-3.79511 c -21.723087,-4.83289 -49.748619,-18.36372 -66.796791,-32.24969 -7.315524,-5.95853 -14.202583,-10.50946 -15.304582,-10.1131 -3.58198,1.28847 -48.08634,42.17228 -48.269737,44.34293 -0.0982,1.15919 6.020579,9.08226 13.596765,17.60683 l 13.7749278,15.49926 -18.9642598,1.38402 c -53.496838,3.90437 -70.857469,4.32043 -70.857469,1.69832 0,-4.29485 14.374056,-84.32679 15.342729,-85.42517 0.485604,-0.551 7.351729,6.05241 15.257424,14.67416 l 14.374002,15.67601 25.738442,-22.14157 25.7383889,-22.14157 -9.9574286,-17.47307 C -17.55531,532.17994 -27.937049,501.47684 -27.937049,490.3798 c 0,-9.25038 -4.673296,-10.35255 -36.550265,-8.61969 l -29.927214,1.62688 1.313291,22.0124 1.31329,22.01234 -6.706198,-4.78622 c -14.765725,-10.53832 -64.396015,-49.58772 -64.845845,-51.02096 -0.44784,-1.42789 62.40914,-53.65919 66.60573,-55.34607 1.051927,-0.42302 1.91258,8.65843 1.91258,20.1807 l 0,20.94952 32.28914,0 c 17.759043,0 32.289139,-0.56271 32.289139,-1.25044 0,-10.16321 9.342276,-41.20106 17.325884,-57.56194 22.982799,-47.09873 59.602451,-76.7356 109.557992,-88.66717 10.549055,-2.51959 20.121725,-5.52262 21.272555,-6.67345 1.20932,-1.20932 1.39778,-14.87094 0.44675,-32.369 l -1.64587,-30.27663 -20.624273,0 c -11.370484,0 -20.279384,-0.93878 -19.855559,-2.09231 0.423015,-1.15083 12.516618,-17.29993 26.875082,-35.88693 l 26.10621,-33.79451 14.6202,18.01253 c 8.04107,9.90687 20.84625,25.79655 28.45588,35.3103 l 13.83579,17.29777 -21.69643,0.6601 -21.69643,0.6601 0,31.84524 0,31.84519 19.98727,3.92714 c 22.83582,4.48688 47.57111,15.18189 67.59075,29.22487 l 13.79737,9.67831 20.49904,-18.71433 c 11.2745,-10.29293 21.66336,-20.1172 23.08634,-21.83181 2.02066,-2.43472 -0.43866,-6.60919 -11.22895,-19.06154 -10.62724,-12.26395 -12.88282,-16.06094 -9.77231,-16.45024 9.53932,-1.19377 84.54823,-5.09399 85.21151,-4.43065 0.81063,0.81058 -12.4536,76.06784 -14.68722,83.33125 -1.21908,3.96415 -3.39707,2.42171 -15.95864,-11.30153 l -14.54693,-15.89222 -19.14058,16.92213 c -10.52732,9.3072 -21.08042,18.69669 -23.4513,20.86562 -4.18716,3.83045 -4.10045,4.24893 3.02623,14.60725 11.56008,16.80203 20.82326,38.59153 25.00653,58.82198 l 3.85268,18.63216 27.15068,0 27.15064,0 0,-21.91048 c 0,-12.05076 0.49586,-21.91053 1.10243,-21.91053 1.80208,0 70.76817,53.44342 69.97237,54.2232 -0.40197,0.39388 -16.29856,13.29596 -35.32611,28.67165 l -34.59549,27.95588 -0.6601,-21.983 -0.66009,-21.98304 -27.59292,0 -27.59291,0 0,8.74093 c 0,20.20266 -14.88507,59.06931 -31.06218,81.10691 l -7.92264,10.79278 21.26554,21.1771 c 11.696,11.64739 22.16191,21.17711 23.2576,21.17711 1.09563,0 8.21244,-6.78838 15.81506,-15.08536 7.60262,-8.29693 14.13104,-14.77732 14.50754,-14.40082 1.33083,1.33083 10.53417,87.64644 9.4598,88.72081 -0.59973,0.59972 -19.24511,-1.06617 -41.43416,-3.70203 -22.18905,-2.63586 -42.23227,-4.79249 -44.5404,-4.79249 -2.93122,0 0.64116,-4.87514 11.84767,-16.1682 l 16.04432,-16.1682 -21.87206,-21.82107 -21.87211,-21.82102 -10.37866,7.06306 c -24.76314,16.85221 -59.85346,29.70718 -81.0918,29.70718 l -8.85657,0 0,31.13594 0,31.13599 21.91053,0 c 12.05076,0 21.91048,0.52931 21.91048,1.17689 0,1.18887 -46.65386,62.06787 -51.7075,67.47351 -2.15176,2.30171 -8.74142,-4.52686 -31.159673,-32.28914 z"
|
||||
style="fill:#006398;fill-opacity:1;stroke:none" />
|
||||
<g
|
||||
style="font-size:172.65939331px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||
id="text2840">
|
||||
<path
|
||||
d="m 73.818503,507.05389 -22.445721,0 0,-54.90568 -26.589547,0 c -4.489187,5e-5 -8.690561,1.55398 -12.604136,4.6618 -3.7985371,2.99281 -5.6977885,6.61865 -5.6977597,10.87754 -2.88e-5,5.06471 1.7265634,9.32364 5.1797817,12.7768 3.568257,3.223 7.712078,4.83448 12.431476,4.83446 l 15.712005,0 0,21.75508 -19.337852,0 c -10.129384,0 -18.7623446,-3.85605 -25.8989088,-11.56818 -7.1365982,-7.8272 -10.7048882,-17.09325 -10.7048822,-27.79816 -6e-6,-10.35951 3.280519,-19.28024 9.8415852,-26.7622 6.56103432,-7.59694 14.8486769,-11.39545 24.8629528,-11.39552 l 55.251006,0 0,77.52406"
|
||||
style="font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;font-family:Cupertino;-inkscape-font-specification:Cupertino Bold"
|
||||
id="path2845" />
|
||||
<path
|
||||
d="m 175.83323,507.05389 -23.48168,0 0,-37.46708 c -7e-5,-2.87762 -0.63316,-5.17974 -1.89925,-6.90638 -1.26624,-1.84165 -3.10794,-3.79846 -5.52511,-5.87042 l -3.97116,-3.28053 c -2.5324,-1.61143 -5.12229,-2.41717 -7.76967,-2.41723 l -26.41689,0 0,55.94164 -21.927744,0 0,-77.52406 53.179094,0 c 5.64014,7e-5 10.53215,1.03603 14.67605,3.10787 4.25885,1.84177 8.28757,5.12229 12.08615,9.84158 1.95672,1.95687 3.56821,3.79857 4.83447,5.5251 1.26608,1.72665 2.41714,3.56835 3.45319,5.5251 1.8416,3.45324 2.76245,7.4244 2.76255,11.9135 l 0,41.61091"
|
||||
style="font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;font-family:Cupertino;-inkscape-font-specification:Cupertino Bold"
|
||||
id="path2847" />
|
||||
<path
|
||||
d="m 277.50263,507.05389 -22.44572,0 0,-54.90568 -26.58955,0 c -4.48918,5e-5 -8.69056,1.55398 -12.60413,4.6618 -3.79854,2.99281 -5.69779,6.61865 -5.69776,10.87754 -3e-5,5.06471 1.72656,9.32364 5.17978,12.7768 3.56826,3.223 7.71208,4.83448 12.43148,4.83446 l 15.712,0 0,21.75508 -19.33785,0 c -10.12939,0 -18.76235,-3.85605 -25.89891,-11.56818 -7.1366,-7.8272 -10.70489,-17.09325 -10.70488,-27.79816 -1e-5,-10.35951 3.28052,-19.28024 9.84158,-26.7622 6.56104,-7.59694 14.84868,-11.39545 24.86295,-11.39552 l 55.25101,0 0,77.52406"
|
||||
style="font-variant:normal;font-weight:bold;font-stretch:normal;fill:#ffffff;font-family:Cupertino;-inkscape-font-specification:Cupertino Bold"
|
||||
id="path2849" />
|
||||
</g>
|
||||
</a>
|
||||
<path
|
||||
style="fill:#006398;fill-opacity:1;stroke:none"
|
||||
d="m -459.59586,587.20888 c -12.63743,-12.68501 -24.16719,-23.06367 -25.62169,-23.06367 -1.45454,0 -8.7009,6.89822 -16.10307,15.3294 l -13.45848,15.32945 -1.58145,-6.68057 c -2.33651,-9.87018 -9.897,-81.47607 -8.72621,-82.64681 1.01524,-1.01529 72.30134,6.99109 82.58925,9.2758 5.26433,1.16912 4.73259,2.07655 -9.79373,16.7151 l -15.36026,15.47886 24.17474,24.09246 24.17474,24.09246 -7.33775,7.57057 c -4.03576,4.16385 -7.93198,7.57063 -8.65833,7.57063 -0.72636,0 -11.66034,-10.37866 -24.29776,-23.06368 z"
|
||||
id="path4976" />
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="m -338.36794,1140.9127 c -19.39569,-6.9136 -33.58991,-27.6303 -33.67943,-49.1557 -0.12517,-30.0877 21.82858,-52.1873 51.8426,-52.1873 30.01409,0 51.96778,22.0996 51.84266,52.1873 -0.1527,36.739 -35.40235,61.49 -70.00583,49.1557 l 0,0 z"
|
||||
id="path4978" />
|
||||
<path
|
||||
style="fill:#970000;fill-opacity:1;stroke:none"
|
||||
d="m -77.813118,1031.3925 c -32.538472,-14.9263 -41.792742,-58.76644 -17.752029,-84.09641 26.02414,-27.41972 72.424732,-19.3344 86.8206925,15.12852 14.1954082,33.98275 -11.6876905,73.19989 -48.3113365,73.19989 -6.342534,0 -15.683299,-1.9044 -20.757327,-4.232 z"
|
||||
id="path4980" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 14 KiB |
BIN
doc/ana/images/modules.png
Normal file
BIN
doc/ana/images/modules.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 279 KiB |
Loading…
Add table
Reference in a new issue