Compare commits

..

5 Commits

Author SHA1 Message Date
Marcel Otte fc6b0a9899 Heavy work again finally...
Building a better model of protocol fields and implementing...
... at least the empty hulls, but content will follow.
2018-11-02 21:08:00 +01:00
Marcel Otte a60247eb4c Add Readme.md with further development plan 2018-10-19 21:51:58 +02:00
Marcel Otte 1abe32d0d7 Current state of work
- too much changes...
2018-06-02 13:56:15 +02:00
Marcel Otte 1a63595188 Finished tests and fixed RAB accordingly. 2018-02-13 17:15:22 +01:00
Marcel Otte 0e421e68f5 Fixed CMAKE_CXX_FLAGS and added Test for RAB 2018-02-13 15:31:13 +01:00
70 changed files with 1255 additions and 3130 deletions

2
.gitignore vendored
View File

@ -3,3 +3,5 @@
build build
*.user* *.user*
doxygen doxygen
venv
compile_commands.json

View File

@ -1,13 +1,15 @@
cmake_minimum_required(VERSION 2.8.12) cmake_minimum_required(VERSION 2.8.12)
project(network_packet_composer) project(network_packet_composer)
# set(CMAKE_CXX_COMPILER clazy)
set(CMAKE_CXX_FLAGS "--std=c++14 -g -Wall") set(CMAKE_CXX_FLAGS "-std=c++14 -g -Wall")
# Find includes in corresponding build directories # Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed. # Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set( CMAKE_EXPORT_COMPILE_COMMANDS ON )
# Find the QtWidgets library # Find the QtWidgets library
find_package(Qt5Widgets) find_package(Qt5Widgets)

43
Readme.md Normal file
View File

@ -0,0 +1,43 @@
# Network Packet Composer
Is a software to create network packets from scratch for testing purposes.
# Minimal functionality in first alpha version
Be able to:
- Show a row of fields where one field has
- A name
- A description
- A size in bit (values greater are just cut off)
- A value (input in hex)
- Convert this row of fields to a binary array through RAB (RandomAccessBinary)
- Show the created binary array in hex
# Second alpha version
Be able to:
- Use integer as value input, not hex
- Restrict field input with regular expressions
- Write the binary to file (through proper interfaces which may be replaced by sending through the network!)
- Highlight current field inside the shown binary in hex
# Third alpha version
- Allow also text as value input for data payload
- Means also having a special marked field for payload data (checkbox?)
- Write and read field structure in YAML to disk
# Fourth alpha version
- Create multiple structures, meaning protocol stacks
- Write network send logic
# Fifth alpha version
- Optimize
- Think about next additional features
- Release beta
# First beta - TODO

9
conanfile.txt Normal file
View File

@ -0,0 +1,9 @@
[requires]
Qt/5.8.0@osechet/stable
gtest/1.8.0@bincrafters/stable
[options]
Qt:shared=True
[generators]
cmake

View File

@ -1,170 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.16.2.1-->
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="graphml" id="d7" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d0"/>
<node id="n0">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="215.0" x="373.0" y="162.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="192.2333984375" x="11.38330078125" y="3.0">ABinaryUtilisationFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n1">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="215.0" x="373.0" y="246.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="182.17236328125" x="16.413818359375" y="3.0">BinaryUtilisationFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n2">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="102.0" width="215.0" x="373.0" y="369.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="136.84375" x="39.078125" y="3.0">ABinaryUtilisation<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+utilse(byte[])
+getOptions():string (yaml?)
+setOptions(string)
</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n3">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="215.0" x="373.0" y="575.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="188.69140625" x="13.154296875" y="3.0">NetworkBinaryUtilisation<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n4">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="215.0" x="627.0" y="575.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="188.818359375" x="13.0908203125" y="3.0">SaveFileBinaryUtilisation<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<edge id="e0" source="n1" target="n0">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n3" target="n2">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n4" target="n2">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>

View File

@ -1,422 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.15.0.2-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="153.0" width="141.0" x="664.9031141868512" y="-723.559688581315"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="48.19873046875" x="46.400634765625" y="3.0">Editor<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- List of Elements
- EditorPane</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n1">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="194.2067474048443" width="169.7024221453288" x="377.2975778546712" y="-681.0717993079584"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="63.9853515625" x="52.8585352914144" y="3.0">Element<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- Layer
- Input
- Name
- Hint
- SyntaxHint</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n2">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="575.9031141868512" y="-410.55968858131496"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="44.75830078125" x="27.620849609375" y="3.0">Layer<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n3">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="140.0" width="321.0" x="590.25" y="291.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="122.0791015625" x="99.46044921875" y="3.0">IProtocolReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ getProtocolList() : std::list&lt;string&gt;
+ getProtocol(identifier : string) : ProtocolModel
+ setSearchPath(path : string) : void
+ refresh()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n4">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="178.0" x="791.5" y="495.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="153.43017578125" x="12.284912109375" y="3.0">YamlProtocolReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n5">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="178.0" x="532.0" y="495.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="148.4853515625" x="14.75732421875" y="3.0">XMLProtocolReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n6">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="178.0" x="661.75" y="553.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="153.373046875" x="12.3134765625" y="3.0">JSONProtocolReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n7">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="59.0" width="231.0" x="285.0" y="523.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="109.55517578125" x="60.722412109375" y="3.0">ProtocolModel<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- elements : list&lt;ProtocolElement&gt;</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n8">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="78.14549968739891" width="230.99999999999994" x="285.0" y="412.3545003126011"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="89.1474609375" x="70.92626953124997" y="3.0">StackModel<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- stack : list&lt;ProtocolModel&gt;</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n9">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="169.0" width="155.0" x="323.0" y="612.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="125.09423828125" x="14.952880859375" y="3.0">ProtocolElement<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- sizeInBit : int
- name : string
- description : string
- regex : string
- nextLayer : bool</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n10">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="245.80709342560556" width="293.0" x="254.0" y="126.69290657439444"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="108.97119140625" x="92.014404296875" y="3.0">StackManager<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ getAvailableProtocolNames() : list&lt;name&gt;
+ addProtocolToStack(name) : bool
+ getProtocolModel(name) : ProtocolModel
+ loadProtocols()
+ </y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n11">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="95.0" width="293.0" x="-82.25" y="311.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="110.16455078125" x="91.417724609375" y="3.0">StackCompiler<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ compile(model : StackModel) : byte[]
+ compile(pmodel : ProtocolModel) : byte[]</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n12">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="261.11245674740485" width="282.4870242214533" x="254.0" y="-369.3529411764706"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="108.431640625" x="87.02769179822664" y="3.0">ElementModel<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- title
- regex
- userinput
- group
- group-Color
- tooltip/hints?
- additionalInfo
- </y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n13">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="273.06833910034607" x="-147.31689734717258" y="-530.4749134948088"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" modelName="custom" textColor="#000000" visible="true" width="92.64501953125" x="90.21165978454803" y="3.0">EditorModel<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<edge id="e0" source="n4" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n6" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n5" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n8" target="n7">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="white_diamond" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n7" target="n9">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="white_diamond" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n10" target="n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="white_diamond" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n10" target="n8">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="white_diamond" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n10" target="n11">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>

View File

@ -1,683 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.16.2.1-->
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="graphml" id="d7" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d0"/>
<node id="n0">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="960.8218631178765" width="465.9535858976694" x="289.39019539785147" y="62.45209125474912"/>
<y:Fill color="#99CCFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="32.9921875" x="4.0" y="4.0">libuv<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="-0.5" nodeRatioX="-0.5" nodeRatioY="-0.5" offsetX="4.0" offsetY="4.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n1">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="310.0" width="940.5396941005099" x="842.6666666666666" y="713.2739543726254"/>
<y:Fill color="#99CCFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="468.26984705025484" y="153.0">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n2">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="310.0" width="940.5396941005099" x="842.6666666666666" y="387.8630228136873"/>
<y:Fill color="#99CCFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="468.26984705025484" y="153.0">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n3">
<data key="d6">
<y:ShapeNode>
<y:Geometry height="310.0" width="940.5396941005099" x="842.6666666666666" y="62.45209125474912"/>
<y:Fill color="#99CCFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="468.26984705025484" y="153.0">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
<node id="n4">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="126.0" x="776.0" y="207.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="108.19677734375" x="8.901611328125" y="3.0">IUtiliserPlugin<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n5">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="126.0" x="776.0" y="528.8630228136873"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="99.53857421875" x="13.230712890625" y="3.0">IModelPlugin<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n6">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="215.0" x="922.6562187044791" y="149.6302281368728"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="192.2333984375" x="11.38330078125" y="3.0">ABinaryUtilisationFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n7">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="102.0" width="215.0" x="922.6562187044791" y="207.6302281368728"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="136.84375" x="39.078125" y="3.0">ABinaryUtilisation<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+utilse(byte[])
+getOptions():string (yaml?)
+setOptions(string)
</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n8">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="217.0" width="217.0" x="1543.1562187044788" y="402.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="105.36572265625" x="55.817138671875" y="3.0">AFieldFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ createField()
+ createFieldBinaryInformation()
+ createFieldLogicalInformation()
+ createFieldVisualInformation()
+ createFieldRepresentation()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n9">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="64.0" width="146.0" x="1372.8228853711457" y="402.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="139.09716796875" x="3.451416015625" y="3.0">AStructureFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ createStructure()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n10">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="64.0" width="146.0" x="1147.7395520378122" y="402.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="113.89697265625" x="16.051513671875" y="3.0">AModelFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ createModel()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n11">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="1170.7395520378122" y="649.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="58.50732421875" x="20.746337890625" y="3.0">AModel<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n12">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="1395.8228853711457" y="649.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="83.70751953125" x="8.146240234375" y="3.0">AStructure<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n13">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="1601.6562187044788" y="649.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.97607421875" x="25.011962890625" y="3.0">AField<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n14">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="945.6562187044791" y="655.2739543726254"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="93.349609375" x="3.3251953125" y="3.0">ARepository<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n15">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="146.0" x="922.6562187044791" y="402.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="148.7392578125" x="-1.36962890625" y="3.0">ARepositoryFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n16">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="126.0" x="776.0" y="854.2739543726254"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="128.439453125" x="-1.2197265625" y="3.0">ISchemaIOPlugin<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n17">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="939.0" y="901.8630228136873"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="135.8408203125" x="21.57958984375" y="3.0">AStructureReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n18">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="208.0" x="932.0" y="785.8630228136873"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="191.23046875" x="8.384765625" y="3.0">AStructureReaderFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n19">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="1184.5" y="901.8630228136873"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="130.3564453125" x="24.32177734375" y="3.0">AStructureWriter<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n20">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="208.0" x="1170.0" y="785.8630228136873"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="185.74609375" x="11.126953125" y="3.0">AStructureWriterFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="false" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n21">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="59.25" width="161.25" x="324.25" y="191.375"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="124.58642578125" x="18.331787109375" y="25.96875">APluginManager<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="abstract" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n22">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="557.25" y="207.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="167.6298828125" x="5.68505859375" y="3.0">UtiliserPluginManager<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n23">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="557.25" y="528.8630228136873"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="158.9716796875" x="10.01416015625" y="3.0">ModelPluginManager<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n24">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="208.0" x="528.25" y="854.2739543726254"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="187.87255859375" x="10.063720703125" y="3.0">SchemaIOPluginManager<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n25">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="59.25" width="276.25" x="-23.75" y="191.375"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="174.1806640625" x="51.03466796875" y="25.96875">BinaryPacketComposer<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="(main class)" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n26">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="64.375" y="303.80553532410784"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="36.91259765625" x="31.543701171875" y="3.0">Tree<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n27">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="64.375" y="378.45010924981796"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="74.84619140625" x="12.576904296875" y="3.0">TreeNode<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<edge id="e0" source="n22" target="n21">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n23" target="n21">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n24" target="n21">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n23" target="n5">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n22" target="n4">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n24" target="n16">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n26" target="n27">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>

99
doc/core.md Normal file
View File

@ -0,0 +1,99 @@
# core
```plantuml
set namespaceSeparator ::
namespace core {
class BinaryPacketComposer
class RandomAccessBinary
class Tree
class TreeNode
interface YAMLSerializer {
+ string toYAML()
+ void fromYAML(string yaml)
}
interface JSONSerializer {
+ string toJSON()
+ void fromJSON(string json)
}
namespace control {
class ModelController{
- Model[] currentModels
}
class RepositoryController
class DataController
class FieldFactory
class ModelFactory
class StructureFactory
}
namespace model {
class Model {
- Structure[] structures
- Tree<Field> combinedFields
- RandomAccessBinary data
}
class Generator
class Repository {
- Structure[] availableStructures
}
class Structure{
- String name
- String description
- Tree<Field> fields
}
class Field {
- String name
- String description
}
class ValueField {
- String hexvalue
- uint bitsize
}
class CombinationField {
// - list<Field> otherFields
}
class ValidateableValueField {
- Validator validator
}
class RegexValueField {
- String regex
}
class GeneratedField {
- Generator gen
}
class LayerTransitionField {
// placeholder for nesting
// structures inside structures
}
class Validator {
}
class RegexValidator {
}
}
core::Tree *-- core::TreeNode
core::model::Field <|-- core::model::ValueField
core::model::ValueField <|-- core::model::ValidateableValueField
core::model::Field <|-- core::model::CombinationField
core::model::ValidateableValueField <|-- core::model::RegexValueField
core::model::ValidateableValueField <|-- core::model::GeneratedField
core::model::RegexValueField *-- core::model::RegexValidator
core::model::Validator <|-- core::model::RegexValidator
core::model::GeneratedField *-- core::model::Generator
core::model::Field <|-- core::model::LayerTransitionField
core::model::Repository o-- core::model::Structure
core::model::Model o-- core::model::Structure
core::model::Model o-up- core::RandomAccessBinary
core::model::Model <-- core::control::ModelController : controls
core::model::Repository <-- core::control::RepositoryController : controls
core::control::ModelFactory --> core::model::Model : creates
core::control::FieldFactory --> core::model::Field : creates all Variants
core::control::StructureFactory --> core::model::Structure : creates
core::YAMLSerializer <|--- core::model : all classes implement
core::JSONSerializer <|--- core::model : all classes implement
}
```

61
doc/editor-view.md Normal file
View File

@ -0,0 +1,61 @@
# Editor View
```plantuml
@startuml
set namespaceSeparator ::
namespace core::model {
class Field {
- String name
- String description
}
class ValueField {
- String value
- uint bitsize
}
Field <|-- ValueField
class ValidateableValueField {
- Validator validator
}
ValueField <|-- ValidateableValueField
class RegexValueField {
- String regex
}
ValidateableValueField <|-- RegexValueField
class FunctionField {
- Function fnc
}
ValidateableValueField <|-- FunctionField
class LayerTransitionField {
- Layer nextLayer
}
Field <|-- LayerTransitionField
}
namespace editorview {
class Layer {
- int level
}
class FieldView {
- Layer layer
- Field field
}
core::model::Field --* FieldView
core::model::ValueField --* ValueFieldView
FieldView <|-- ValueFieldView
core::model::ValidateableValueField --* ValidateableValueFieldView
ValueFieldView <|-- ValidateableValueFieldView
core::model::ValidateableValueField --* RegexValueFiledView
ValidateableValueFieldView <|-- RegexValueFiledView
core::model::FunctionField --* FunctionFieldView
ValidateableValueFieldView <|-- FunctionFieldView
}
@enduml
```

53
doc/editor.md Normal file
View File

@ -0,0 +1,53 @@
# Editor
```plantuml
set namespaceSeparator ::
class NPC_core::RandomAccessBinary
namespace NPC_editor {
class EditorView {
}
class StructureField {
}
class HexView
EditorView "1" *-- "*" StructureField : contains
HexView ..> NPC_core::RandomAccessBinary : shows data of >
}
namespace NPC_core::control {
class DataController
class ModelController
class FromScratchModelController
ModelController <|-- FromScratchModelController
}
namespace NPC_core::model {
class Model
class Structure
class Field
class DataField
class Repository
Model "1" *-- "*" Structure
DataField ..> Field : represents the data of >
Repository "1" *-- "ALL" Structure
Structure "1" *- "*" Field
}
NPC_core::control::DataController "1" *-up- "*" NPC_core::RandomAccessBinary
NPC_core::model::Field <.. NPC_editor::StructureField : shows <
NPC_core::control::DataController --> NPC_core::model::DataField : controls >
NPC_core::control::ModelController --> NPC_core::model::Model : controls >
NPC_editor::StructureField .> NPC_core::control::DataController : > manipulates data through
```

View File

@ -1,768 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.16.2.1-->
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="graphml" id="d7" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d0"/>
<node id="n0">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="217.0" width="146.0" x="486.5" y="560.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="39.9150390625" x="53.04248046875" y="3.0">Field<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- owningStructure
- binary
- logical
- visual
- representation</y:AttributeLabel>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n1">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="692.3333333333333" y="390.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="51.27734375" x="24.361328125" y="3.0">Binary<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n2">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="692.3333333333333" y="560.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="55.9111328125" x="22.04443359375" y="3.0">Logical<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n3">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="692.3333333333333" y="729.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="48.73828125" x="25.630859375" y="3.0">Visual<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n4">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="134.0" x="675.3333333333333" y="899.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="117.013671875" x="8.4931640625" y="3.0">Representation<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n5">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="217.0" width="184.5" x="261.41666666666674" y="560.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="73.646484375" x="55.4267578125" y="3.0">Structure<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- name
- description
- fields
- data</y:AttributeLabel>
<y:MethodLabel>+ putData(Field*, data)
+ validateData(Field*, data)
+ updateData()
+ ...
</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n6">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="217.0" width="217.0" x="451.0" y="89.45209125474913"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="105.36572265625" x="55.817138671875" y="3.0">AFieldFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ createField()
+ createFieldBinaryInformation()
+ createFieldLogicalInformation()
+ createFieldVisualInformation()
+ createFieldRepresentation()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n7">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="64.0" width="146.0" x="280.66666666666674" y="89.45209125474913"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="139.09716796875" x="3.451416015625" y="3.0">AStructureFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ createStructure()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n8">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="146.0" x="280.66666666666674" y="379.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="129.0361328125" x="8.48193359375" y="3.0">StructureFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n9">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="115.0" x="502.0" y="379.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="95.3046875" x="9.84765625" y="3.0">FieldFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n10">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="497.79677113010416" width="387.7255460588794" x="269.16666666666674" y="842.7739543726256"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="160.86328125" x="113.4311324044397" y="3.0">RandomAccessBinary<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel>- binaryData</y:AttributeLabel>
<y:MethodLabel>+ setBytes(uint position, std::vector&lt;uint8_t&gt; data)
+ setByte(uint position, uint8_t data)
+ setBit(uint64_t position, bool value)
+ setBit(uint bytePosition, uint bitPosition, bool value)
+ setBits(uint64_t position, uint bits, uint value)
+ setBits(uint bytePosition, uint bitPosition, uint bits, uint value)
+ getByte(uint position)
+ getBytes(uint position, uint bytes)
+ getBit(uint64_t position)
+ getBit(uint bytePosition, uint bitPosition)
+ getBits(uint64_t position, uint bits)
+ getBits(uint bytePosition, uint bitPosition, uint bits)
+ get_uint32(uint position)
+ get_uint16(uint position)
+ get_uint64(uint position)
+ get_float(uint position)
+ get_double(uint position)
+ get_string(uint position, uint length)
+ get_hex_string(uint position, uint length)
+ get_hex_string()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n11">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="217.0" width="184.5" x="36.333333333333485" y="560.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="48.4462890625" x="68.02685546875" y="3.0">Model<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+getBinary():byte[]
+getStructures():Structure[]
+addStructure()
+remStructure()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n12">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="64.0" width="146.0" x="55.583333333333485" y="89.45209125474913"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="113.89697265625" x="16.051513671875" y="3.0">AModelFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+ createModel()</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n13">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="123.0" x="67.08333333333348" y="379.4520912547491"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="103.8359375" x="9.58203125" y="3.0">ModelFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n14">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="217.0" width="184.5" x="36.333333333333485" y="839.2739543726256"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="83.28857421875" x="50.605712890625" y="3.0">Repository<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel>+addStructure()
+remStructure()
+getStructures()
</y:MethodLabel>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n15">
<data key="d4"/>
<data key="d5"><![CDATA[Contains the known structures.]]></data>
<data key="d6">
<y:UMLNoteNode>
<y:Geometry height="28.0" width="231.7005405405405" x="12.733063063063241" y="1086.2739543726254"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="191.81640625" x="19.942067145270244" y="5.015625">Contains the known structures.<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:UMLNoteNode>
</data>
</node>
<node id="n16">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="78.5833333333336" y="469.72604562737456"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="58.50732421875" x="20.746337890625" y="3.0">AModel<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n17">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="303.66666666666686" y="476.059885931559"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="83.70751953125" x="8.146240234375" y="3.0">AStructure<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n18">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="509.4999999999999" y="476.059885931559"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.97607421875" x="25.011962890625" y="3.0">AField<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n19">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="-93.66666666666652" y="839.2739543726254"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="93.349609375" x="3.3251953125" y="3.0">ARepository<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n20">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="146.0" x="-269.6666666666665" y="839.2739543726254"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="138.67822265625" x="3.660888671875" y="3.0">RepositoryFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n21">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="146.0" x="-269.6666666666665" y="773.9573550380246"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="148.7392578125" x="-1.36962890625" y="3.0">ARepositoryFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<edge id="e0" source="n1" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n3" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n4" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n5" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="diamond" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n2" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n9" target="n6">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n8" target="n7">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n5" target="n10">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="diamond" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e8" source="n11" target="n5">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="diamond" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e9" source="n13" target="n12">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e10" source="n11" target="n14">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e11" source="n14" target="n15">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e12" source="n5" target="n14">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="diamond"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e13" source="n0" target="n18">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e14" source="n5" target="n17">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e15" source="n11" target="n16">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e16" source="n16" target="n13">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e17" source="n17" target="n8">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e18" source="n18" target="n9">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e19" source="n14" target="n19">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e20" source="n19" target="n20">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e21" source="n20" target="n21">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>

View File

@ -1,8 +1,8 @@
# NPC core # NPC core
```plantuml ```plantuml
abstract class ARepository
abstract class ARepositoryFactory
class RepositoryFactory class RepositoryFactory
class Repository { class Repository {
+addStructure() +addStructure()
@ -10,10 +10,10 @@ class Repository {
+getStructure() +getStructure()
} }
abstract class AStackModelFactory
class StackModelFactory class StackModelFactory
abstract class AStackModel
class StackModel { class StackModel {
+getBinary():byte[] +getBinary():byte[]
+getStructures():Structure[] +getStructures():Structure[]
@ -21,9 +21,9 @@ class StackModel {
+removeStructure() +removeStructure()
} }
abstract class AStructureFactory
class StructureFactory class StructureFactory
abstract class AStructure
class Structure { class Structure {
-name -name
-description -description
@ -34,15 +34,15 @@ class Structure {
+updateData() +updateData()
} }
abstract class AFieldFactory{
class FieldFactory{
+ createField() + createField()
+ createFieldBinaryInformation() + createFieldBinaryInformation()
+ createFieldLogicalInformation() + createFieldLogicalInformation()
+ createFieldVisualInformation() + createFieldVisualInformation()
+ createFieldRepresentation() + createFieldRepresentation()
} }
class FieldFactory
abstract class AField
class Field { class Field {
- owningStructure - owningStructure
- binary - binary
@ -81,22 +81,14 @@ class RandomAccessBinary {
+ get_hex_string() + get_hex_string()
} }
ARepositoryFactory <|-- RepositoryFactory
ARepository <|-- Repository
RepositoryFactory --> Repository : creates > RepositoryFactory --> Repository : creates >
AStackModelFactory <|-- StackModelFactory
AStackModel <|-- StackModel
StackModelFactory --> StackModel: creates > StackModelFactory --> StackModel: creates >
AStructureFactory <|-- StructureFactory
AStructure <|-- Structure
StructureFactory --> Structure : creates > StructureFactory --> Structure : creates >
StackModel *-- Structure StackModel *-- Structure
Repository *-- Structure Repository *-- Structure
AFieldFactory <|-- FieldFactory
AField <|-- Field
FieldFactory --> Field : creates > FieldFactory --> Field : creates >
Structure *-- Field Structure *-- Field

22
doc/mvc.md Normal file
View File

@ -0,0 +1,22 @@
```plantuml
@startuml
package Model {
class StackModel
}
package View {
class Editor
}
package "Controller" as pkg_controller {
class Controller
}
pkg_controller -> Model: controls
View --> pkg_controller: uses
View --> Model: shows
@enduml
```

View File

@ -1,484 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.16.2.1-->
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="graphml" id="d7" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d0"/>
<node id="n0">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="40.0634765625" x="447.96826171875" y="163.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.0634765625" x="5.0" y="3.0">GUI<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n1">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="58.4462890625" x="438.77685546875" y="288.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="48.4462890625" x="5.0" y="3.0">Model<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n2">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="126.88037109375" x="404.559814453125" y="413.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="116.88037109375" x="5.0" y="3.0">ByteDispatcher<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n3">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="150.55712890625" x="689.221435546875" y="288.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="140.55712890625" x="5.0" y="3.0">DefinitionManager<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n4">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="155.1337890625" x="686.93310546875" y="413.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="145.1337890625" x="5.0" y="3.0">ProtocolDefinitions<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n5">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLNoteNode>
<y:Geometry height="265.0" width="1030.8046875" x="173.09765625" y="-134.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="59.8046875" x="947.0" y="11.015625">Workflow<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.5" labelRatioY="-0.5" nodeRatioX="0.47671721879902684" nodeRatioY="-0.4584316037735849" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:UMLNoteNode>
</data>
</node>
<node id="n6">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="150.55712890625" x="375.0" y="-15.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="118.53076171875" x="16.01318359375" y="3.0">load definitions<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n7">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="126.88037109375" x="618.559814453125" y="-15.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="101.93798828125" x="12.47119140625" y="3.0">create binary<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n8">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="838.44287109375" y="-15.5"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="77.66455078125" x="11.167724609375" y="3.0">save/send<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n9">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="150.55712890625" x="223.0" y="-108.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="126.0654296875" x="12.245849609375" y="3.0">create definition<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n10">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="150.55712890625" x="470.0" y="-108.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="113.12890625" x="18.714111328125" y="3.0">save definition<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n11">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="126.88037109375" x="618.559814453125" y="51.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="88.50634765625" x="19.18701171875" y="3.0">read binary<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n12">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="100.0" x="838.44287109375" y="51.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.5078125" x="21.74609375" y="3.0">display<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n13">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="126.88037109375" x="825.002685546875" y="-108.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="123.52001953125" x="1.68017578125" y="3.0">code generation<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<edge id="e0" source="n4" target="n3">
<data key="d10">
<y:BezierEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="83.458984375" x="20.2705078125" y="-58.476806640625">Reads/Writes<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="62.0" distanceToCenter="true" position="right" ratio="0.5144861928474422" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
</y:BezierEdge>
</data>
</edge>
<edge id="e1" source="n3" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="125.306640625" x="-158.68402099609375" y="-38.984375">Generates/Produces<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n2" target="n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="71.0" y="-4.122128335962259">
<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="73.0" distanceToCenter="true" position="right" ratio="0.02195563603440471" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n1" target="n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="standard" target="none"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="54.484375" x="2.7578125" y="-57.476806640625">Displays<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n6" target="n7">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n7" target="n8">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n9" target="n10">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n10" target="n6">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e8" source="n6" target="n11">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e9" source="n11" target="n12">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e10" source="n10" target="n13">
<data key="d8"/>
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.96875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="10.369140625" x="97.04010009765625" y="-38.984375">?<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="left" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>

View File

@ -1,383 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yEd 3.16.2.1-->
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key for="graphml" id="d7" yfiles.type="resources"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d0"/>
<node id="n0">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="731.0" y="144.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="135.8408203125" x="21.57958984375" y="3.0">AStructureReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n1">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="522.0" y="249.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="172.974609375" x="3.0126953125" y="3.0">YAML_StructureReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n2">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="731.0" y="249.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="163.52294921875" x="7.738525390625" y="3.0">XML_StructureReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n3">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="940.0" y="249.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="168.41064453125" x="5.294677734375" y="3.0">JSON_StructureReader<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n4">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="208.0" x="716.5" y="-10.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="181.16943359375" x="13.415283203125" y="3.0">StructureReaderFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n5">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="208.0" x="716.5" y="-110.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="191.23046875" x="8.384765625" y="3.0">AStructureReaderFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n6">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="1358.0" y="144.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="130.3564453125" x="24.32177734375" y="3.0">AStructureWriter<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n7">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="1149.0" y="249.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="167.490234375" x="5.7548828125" y="3.0">YAML_StructureWriter<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n8">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="1358.0" y="249.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="158.03857421875" x="10.480712890625" y="3.0">XML_StructureWriter<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n9">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="179.0" x="1567.0" y="249.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="162.92626953125" x="8.036865234375" y="3.0">JSON_StructureWriter<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n10">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="208.0" x="1343.5" y="-10.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="175.68505859375" x="16.157470703125" y="3.0">StructureWriterFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<node id="n11">
<data key="d4"/>
<data key="d6">
<y:UMLClassNode>
<y:Geometry height="28.0" width="208.0" x="1343.5" y="-110.0"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="185.74609375" x="11.126953125" y="3.0">AStructureWriterFactory<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="-0.03703090122767855" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:UML clipContent="false" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
<y:AttributeLabel/>
<y:MethodLabel/>
</y:UML>
</y:UMLClassNode>
</data>
</node>
<edge id="e0" source="n3" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n2" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n1" target="n0">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n4" target="n5">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e4" source="n0" target="n4">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e5" source="n9" target="n6">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e6" source="n8" target="n6">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e7" source="n7" target="n6">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e8" source="n10" target="n11">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="white_delta"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e9" source="n6" target="n10">
<data key="d8"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="plain"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d7">
<y:Resources/>
</data>
</graphml>

View File

@ -4,11 +4,15 @@ set(HEADERS mainwindow.h
set(SOURCES mainwindow.cpp set(SOURCES mainwindow.cpp
) )
add_subdirectory(model) # add_subdirectory(model)
add_subdirectory(editor) add_subdirectory(editor)
add_subdirectory(parser) add_subdirectory(parser)
add_subdirectory(core) add_subdirectory(core)
add_library(src ${HEADERS} ${SOURCES}) add_library(src ${HEADERS} ${SOURCES})
target_link_libraries(src model editor parser core ) target_link_libraries(src
editor
parser
core
)
qt5_use_modules(src Widgets) qt5_use_modules(src Widgets)

View File

@ -4,41 +4,66 @@ set(HEADERS
TreeNode.h TreeNode.h
BinaryPacketComposer.h BinaryPacketComposer.h
APluginManager.h APluginManager.h
RandomAccessBinary.h
# interfaces to model
model/IField.h
model/ILayerTransitionField.h
model/IStructure.h
model/IModel.h
model/IValueField.h
model/IValidateableValueField.h
model/ICombinationField.h
model/IRegexValueField.h
# full model implementations
model/Repository.h model/Repository.h
model/Model.h model/Model.h
model/Structure.h model/Structure.h
model/Field.h model/Field.h
model/LayerTransitionField.h
model/ValueField.h
model/ValidateableValueField.h
model/CombinationField.h
model/RegexValueField.h
model/Modifier.h
# control classes
control/ARepositoryFactory.h control/ARepositoryFactory.h
control/AFieldFactory.h control/AFieldFactory.h
control/AStructureFactory.h control/AStructureFactory.h
control/AModelFactory.h control/AModelFactory.h
control/ModelController.h
# schema classes
schemaio/AStructureReaderFactory.h schemaio/AStructureReaderFactory.h
schemaio/AStructureWriterFactory.h schemaio/AStructureWriterFactory.h
schemaio/AStructureReader.h schemaio/AStructureReader.h
schemaio/AStructureWriter.h schemaio/AStructureWriter.h
RandomAccessBinary.h
) )
set(SOURCES set(SOURCES
BinaryPacketComposer.cpp BinaryPacketComposer.cpp
APluginManager.cpp APluginManager.cpp
RandomAccessBinary.cpp
model/Repository.cpp model/Repository.cpp
model/Model.cpp model/Model.cpp
model/Structure.cpp model/Structure.cpp
model/Field.cpp model/Field.cpp
model/ValueField.cpp
model/LayerTransitionField.cpp
model/ValidateableValueField.cpp
model/RegexValueField.cpp
model/CombinationField.cpp
model/Modifier.cpp
control/ARepositoryFactory.cpp control/ARepositoryFactory.cpp
control/AFieldFactory.cpp control/AFieldFactory.cpp
control/AStructureFactory.cpp control/AStructureFactory.cpp
control/AModelFactory.cpp control/AModelFactory.cpp
control/ModelController.cpp
schemaio/AStructureReaderFactory.cpp schemaio/AStructureReaderFactory.cpp
schemaio/AStructureWriterFactory.cpp schemaio/AStructureWriterFactory.cpp
schemaio/AStructureReader.cpp schemaio/AStructureReader.cpp
schemaio/AStructureWriter.cpp schemaio/AStructureWriter.cpp
RandomAccessBinary.cpp
) )
add_library(core ${HEADERS} ${SOURCES}) add_library(core ${HEADERS} ${SOURCES})

View File

@ -0,0 +1,14 @@
#ifndef JSONSERIALIZABLE_H
#define JSONSERIALIZABLE_H
#include <string>
namespace NPC_core {
class JSONSerializable {
public:
virtual std::string toJSON() const = 0;
virtual void fromJSON(std::string &json) = 0;
};
}
#endif

View File

@ -1,17 +1,19 @@
#include "RandomAccessBinary.h" #include "RandomAccessBinary.h"
#include <memory> #include <memory>
#include <vector> #include <vector>
#include <iomanip>
#include <iostream>
#include <algorithm>
namespace NPC_core {
RandomAccessBinary::RandomAccessBinary() RandomAccessBinary::RandomAccessBinary() : RandomAccessBinary(1548)
{ {}
this->ptr_data = std::make_unique<std::vector<uint8_t>>();
this->ptr_data->reserve(1548);
}
RandomAccessBinary::RandomAccessBinary(uint possible_packetsize) RandomAccessBinary::RandomAccessBinary(uint possible_packetsize)
{ {
this->ptr_data = std::make_unique<std::vector<uint8_t>>(); this->ptr_data = std::make_unique<std::vector<uint8_t>>();
this->ptr_data->reserve(possible_packetsize); this->ptr_data->reserve(possible_packetsize);
this->endianness = RandomAccessBinary::Endianness::BIG;
} }
RandomAccessBinary::~RandomAccessBinary() RandomAccessBinary::~RandomAccessBinary()
@ -19,7 +21,7 @@ RandomAccessBinary::~RandomAccessBinary()
} }
const RandomAccessBinary::Endianness RandomAccessBinary::getEndianness() RandomAccessBinary::Endianness RandomAccessBinary::getEndianness()
{ {
return this->endianness; return this->endianness;
} }
@ -31,32 +33,36 @@ void RandomAccessBinary::setEndianness(RandomAccessBinary::Endianness endianness
void RandomAccessBinary::setBytes(uint position, const std::vector<uint8_t> &data) void RandomAccessBinary::setBytes(uint position, const std::vector<uint8_t> &data)
{ {
auto it = this->ptr_data->begin();
for(uint i = 0; i < data.size(); ++i) for(uint i = 0; i < data.size(); ++i)
(*this->ptr_data)[position+i] = data[i]; this->ptr_data->insert(it+(position+i), data[i]);
} }
void RandomAccessBinary::setByte(uint position, const uint8_t &data) void RandomAccessBinary::setByte(uint position, const uint8_t &data)
{ {
(*this->ptr_data)[position] = data; auto it = this->ptr_data->begin();
this->ptr_data->insert(it+position, data);
} }
void RandomAccessBinary::setBit(uint64_t position, const bool &value) void RandomAccessBinary::setBit(uint64_t position, const bool &value)
{ {
uint64_t bytePosition = position>>3; uint bytePosition = static_cast<uint>(position>>3);
uint bitPosition = position % 8; uint bitPosition = position % 8;
this->setBit(bytePosition, bitPosition, value); this->setBit(bytePosition, bitPosition, value);
} }
void RandomAccessBinary::setBit(uint bytePosition, uint bitPosition, const bool &value) void RandomAccessBinary::setBit(uint bytePosition, uint bitPosition, const bool &value)
{ {
uint8_t byte = (*this->ptr_data)[bytePosition]; if(ptr_data->size() < bytePosition+1)
uint8_t newbyte = 1; ptr_data->insert(ptr_data->begin()+bytePosition, 0x00);
uint8_t byte = this->ptr_data->at(bytePosition);
uint8_t newbyte = 0;
if (value) if (value)
newbyte = byte | (newbyte << (7-bitPosition)); newbyte = byte | (1<< (7-bitPosition));
else { else {
newbyte = byte & ~(newbyte << (7-bitPosition)); newbyte = byte & ~(1 << (7-bitPosition));
} }
(*this->ptr_data)[bytePosition] = newbyte; ptr_data->insert(ptr_data->begin()+bytePosition, newbyte);
} }
void RandomAccessBinary::setBits(uint64_t position, uint bits, const uint8_t &value) void RandomAccessBinary::setBits(uint64_t position, uint bits, const uint8_t &value)
@ -68,153 +74,217 @@ void RandomAccessBinary::setBits(uint64_t position, uint bits, const uint8_t &va
void RandomAccessBinary::setBits(uint bytePosition, uint bitPosition, uint bits, const uint8_t &value) void RandomAccessBinary::setBits(uint bytePosition, uint bitPosition, uint bits, const uint8_t &value)
{ {
uint8_t byte = (*this->ptr_data)[bytePosition]; if(ptr_data->size() < bytePosition+1)
ptr_data->insert(ptr_data->begin()+bytePosition, 0x00);
uint8_t byte = this->ptr_data->at(bytePosition);
uint8_t newbyte = value; uint8_t newbyte = value;
uint8_t mask = 0; uint8_t mask = 0;
for(uint i = bits-1; i >= 0; --i) for(uint i = 0; i < bits; ++i)
mask |= 1 << i; mask |= (1 << i);
mask <<= (7-bits-bitPosition); mask <<= (8-bits-bitPosition);
byte &= ~mask; byte &= ~mask;
newbyte <<= (7-bits-bitPosition); newbyte <<= (8-bits-bitPosition);
byte |= newbyte; byte |= newbyte;
(*this->ptr_data)[bytePosition] = byte; ptr_data->insert(ptr_data->begin()+bytePosition, byte);
} }
void RandomAccessBinary::set_uint16(uint byteOffset, const uint16_t &data) void RandomAccessBinary::set_uint16(uint byteOffset, const uint16_t &data)
{ {
if (this->endianness == Endianness::BIG) { uint8_t * conv = (uint8_t*)&data;
this->setByte(byteOffset, (uint8_t)(data >> 8)); std::vector<uint8_t> tmp;
this->setByte(byteOffset+1, (uint8_t)(data & 0x0FF)); tmp.assign(conv, conv+sizeof(uint16_t));
} else if (this->endianness == Endianness::LITTLE) { if (this->endianness != Endianness::LITTLE)
this->setByte(byteOffset, (uint8_t)(data & 0x0FF)); std::reverse(tmp.begin(), tmp.end());
this->setByte(byteOffset+1, (uint8_t)(data >> 8)); this->setBytes(byteOffset, tmp);
} else {
//TODO
}
} }
void RandomAccessBinary::set_uint32(uint byteOffset, const uint32_t &data) void RandomAccessBinary::set_uint32(uint byteOffset, const uint32_t &data)
{ {
if (this->endianness == Endianness::BIG) { uint8_t * conv = (uint8_t*)&data;
this->setByte(byteOffset+0, (uint8_t)((data >> 24) & 0x0FF)); std::vector<uint8_t> tmp;
this->setByte(byteOffset+1, (uint8_t)((data >> 16) & 0x0FF)); tmp.assign(conv, conv+sizeof(uint32_t));
this->setByte(byteOffset+2, (uint8_t)((data >> 8) & 0x0FF)); if (this->endianness != Endianness::LITTLE)
this->setByte(byteOffset+3, (uint8_t)(data & 0x0FF)); std::reverse(tmp.begin(), tmp.end());
} else if (this->endianness == Endianness::LITTLE) { this->setBytes(byteOffset, tmp);
this->setByte(byteOffset+3, (uint8_t)((data >> 24) & 0x0FF));
this->setByte(byteOffset+2, (uint8_t)((data >> 16) & 0x0FF));
this->setByte(byteOffset+1, (uint8_t)((data >> 8) & 0x0FF));
this->setByte(byteOffset+0, (uint8_t)(data & 0x0FF));
}
} }
void RandomAccessBinary::set_uint64(uint byteOffset, const uint64_t &data) void RandomAccessBinary::set_uint64(uint byteOffset, const uint64_t &data)
{ {
if (this->endianness == Endianness::BIG) { uint8_t * conv = (uint8_t*)&data;
this->setByte(byteOffset+0, (uint8_t)((data >> 56) & 0x0FF)); std::vector<uint8_t> tmp;
this->setByte(byteOffset+1, (uint8_t)((data >> 48) & 0x0FF)); tmp.assign(conv, conv+sizeof(uint64_t));
this->setByte(byteOffset+2, (uint8_t)((data >> 40) & 0x0FF)); if (this->endianness != Endianness::LITTLE)
this->setByte(byteOffset+3, (uint8_t)((data >> 32) & 0x0FF)); std::reverse(tmp.begin(), tmp.end());
this->setByte(byteOffset+4, (uint8_t)((data >> 24) & 0x0FF)); this->setBytes(byteOffset, tmp);
this->setByte(byteOffset+5, (uint8_t)((data >> 16) & 0x0FF));
this->setByte(byteOffset+6, (uint8_t)((data >> 8) & 0x0FF));
this->setByte(byteOffset+7, (uint8_t)(data & 0x0FF));
} else if (this->endianness == Endianness::LITTLE) {
this->setByte(byteOffset+7, (uint8_t)((data >> 56) & 0x0FF));
this->setByte(byteOffset+6, (uint8_t)((data >> 48) & 0x0FF));
this->setByte(byteOffset+5, (uint8_t)((data >> 40) & 0x0FF));
this->setByte(byteOffset+4, (uint8_t)((data >> 32) & 0x0FF));
this->setByte(byteOffset+3, (uint8_t)((data >> 24) & 0x0FF));
this->setByte(byteOffset+2, (uint8_t)((data >> 16) & 0x0FF));
this->setByte(byteOffset+1, (uint8_t)((data >> 8) & 0x0FF));
this->setByte(byteOffset+0, (uint8_t)(data & 0x0FF));
}
} }
void RandomAccessBinary::set_float(uint position, float &data) void RandomAccessBinary::set_float(uint position, float &data)
{ {
float * conv = &data; uint8_t * conv = (uint8_t*)&data;
this->set_uint32(position, *conv); std::vector<uint8_t> tmp;
tmp.assign(conv, conv+sizeof(float));
if (this->endianness != Endianness::LITTLE)
std::reverse(tmp.begin(), tmp.end());
this->setBytes(position, tmp);
} }
void RandomAccessBinary::set_double(uint position, double &data) void RandomAccessBinary::set_double(uint position, double &data)
{ {
double * conv = &data; uint8_t * conv = (uint8_t*)&data;
this->set_uint64(position, *conv); std::vector<uint8_t> tmp;
tmp.assign(conv, conv+sizeof(double));
if (this->endianness != Endianness::LITTLE)
std::reverse(tmp.begin(), tmp.end());
this->setBytes(position, tmp);
} }
uint8_t RandomAccessBinary::getByte(uint position) uint8_t RandomAccessBinary::getByte(uint position)
{ {
return (*this->ptr_data)[position]; return this->ptr_data->at(position);
} }
const std::vector<uint8_t> RandomAccessBinary::getBytes(uint position, uint length) const std::vector<uint8_t> RandomAccessBinary::getBytes(uint position, uint length)
{ {
std::vector<uint8_t> vec; auto begin = ptr_data->begin() + position;
for(uint i = position; i< position+length; ++i) auto end = ptr_data->begin() + position + length;
vec.push_back((*this->ptr_data)[i]); std::vector<uint8_t> vec(begin, end);
return vec; return vec;
} }
bool RandomAccessBinary::getBit(uint byteOffset, uint bitOffset) bool RandomAccessBinary::getBit(uint byteOffset, uint bitOffset)
{ {
uint8_t byte = (*this->ptr_data)[byteOffset]; uint8_t byte = this->ptr_data->at(byteOffset);
return (byte & (1 << (7-bitOffset))) > 0; return (byte & (1 << (7-bitOffset))) > 0;
} }
bool RandomAccessBinary::getBit(uint64_t position) bool RandomAccessBinary::getBit(uint64_t position)
{ {
uint64_t byteOffset = position>>3; uint byteOffset = static_cast<uint>(position>>3);
uint bitOffset = position % 8; uint bitOffset = position % 8;
return this->getBit(byteOffset, bitOffset); return this->getBit(byteOffset, bitOffset);
} }
const std::vector<bool> RandomAccessBinary::getBits(uint byteOffset, uint8_t bitOffset, uint64_t length) const std::vector<bool> RandomAccessBinary::getBits(uint byteOffset, uint8_t bitOffset, uint64_t length)
{ {
return std::vector<bool>(); uint64_t byteLength = length >> 3;
int olength = length - (byteLength<<3) - bitOffset;
std::vector<uint8_t> tmp(ptr_data->begin()+byteOffset, ptr_data->begin()+byteOffset+byteLength+1);
std::vector<bool> output;
uint i = 0;
for(auto it = tmp.begin(); it != tmp.end(); ++it, ++i){
if(i == 0){
for(int a = 7-bitOffset; a >= 0; --a)
output.push_back((*it & (1 << a)) > 0);
} else if(olength > 0 && i == byteLength) {
for(int a = 7; a >= olength; --a)
output.push_back((*it & (1 << a)) > 0);
} else {
for(int a = 7; a >= 0; --a)
output.push_back((*it & (1 << a)) > 0);
}
}
return output;
} }
const std::vector<bool> RandomAccessBinary::getBits(uint64_t position, uint64_t length) const std::vector<bool> RandomAccessBinary::getBits(uint64_t position, uint64_t length)
{ {
return std::vector<bool>(); uint byteOffset = static_cast<uint>(position>>3);
uint8_t bitOffset = position % 8;
return this->getBits(byteOffset,bitOffset,length);
} }
uint16_t RandomAccessBinary::get_uint16(uint byteOffset) uint16_t RandomAccessBinary::get_uint16(uint byteOffset)
{ {
auto tmp = getBytes(byteOffset, sizeof(uint16_t));
if (endianness != Endianness::LITTLE)
std::reverse(tmp.begin(), tmp.end());
if (tmp.data() != nullptr) {
uint16_t* d = (uint16_t*)tmp.data();
return *d;
}
return 0; return 0;
} }
uint32_t RandomAccessBinary::get_uint32(uint byteOffset) uint32_t RandomAccessBinary::get_uint32(uint byteOffset)
{ {
auto tmp = getBytes(byteOffset, sizeof(uint32_t));
if (endianness != Endianness::LITTLE)
std::reverse(tmp.begin(), tmp.end());
if (tmp.data() != nullptr) {
uint32_t* d = (uint32_t*)tmp.data();
return *d;
}
return 0; return 0;
} }
uint64_t RandomAccessBinary::get_uint64(uint byteOffset) uint64_t RandomAccessBinary::get_uint64(uint byteOffset)
{ {
auto tmp = getBytes(byteOffset, sizeof(uint64_t));
if (endianness != Endianness::LITTLE)
std::reverse(tmp.begin(), tmp.end());
if (tmp.data() != nullptr) {
uint64_t* d = (uint64_t*)tmp.data();
return *d;
}
return 0; return 0;
} }
float RandomAccessBinary::get_float(uint byteOffset) float RandomAccessBinary::get_float(uint byteOffset)
{ {
return 0.0f; float tmp = 0.0;
auto bytes = this->getBytes(byteOffset, sizeof(float));
uint8_t* ptr_tmp = (uint8_t*)&tmp;
if (endianness != Endianness::LITTLE) {
std::reverse(std::begin(bytes), std::end(bytes));
}
uint8_t i = 0;
for(auto it = bytes.begin(); it != bytes.end();++it, ++i)
*(ptr_tmp+i) = *it;
return tmp;
} }
double RandomAccessBinary::get_double(uint byteOffset) double RandomAccessBinary::get_double(uint byteOffset)
{ {
return 0.0; double tmp = 0.0;
auto bytes = this->getBytes(byteOffset, sizeof(double));
uint8_t* ptr_tmp = (uint8_t*)&tmp;
if (endianness != Endianness::LITTLE) {
std::reverse(std::begin(bytes), std::end(bytes));
}
uint8_t i = 0;
for(auto it = bytes.begin(); it != bytes.end();++it, ++i)
*(ptr_tmp+i) = *it;
return tmp;
} }
std::__cxx11::string RandomAccessBinary::get_string(uint byteOffset, uint length) std::__cxx11::string RandomAccessBinary::get_string(uint byteOffset, uint length)
{ {
return ""; std::stringstream output;
uint i = 0;
for(auto it = ptr_data->begin(); it != ptr_data->end() && i < length; ++it, ++i) {
output << *it;
}
return output.str();
} }
std::__cxx11::string RandomAccessBinary::get_hex_string(uint byteOffset, uint length) std::__cxx11::string RandomAccessBinary::get_hex_string(uint byteOffset, uint length)
{ {
return ""; std::stringstream output;
output << std::hex << std::noshowbase << std::right << std::setfill('0');
uint i = 0;
for(auto it = ptr_data->begin()+byteOffset; it != ptr_data->end() && i < length; ++it, ++i) {
output << std::setw(2) << static_cast<int>(*it);
}
return output.str();
} }
std::__cxx11::string RandomAccessBinary::get_hex_string() std::__cxx11::string RandomAccessBinary::get_hex_string()
{ {
return ""; std::stringstream output;
output << std::hex << std::noshowbase << std::right << std::setfill('0');
for(auto it = ptr_data->begin(); it != ptr_data->end(); ++it) {
output << std::setw(2) << static_cast<int>(*it);
}
return output.str();
}
} }

View File

@ -4,6 +4,7 @@
#include <list> #include <list>
#include <memory> #include <memory>
#include <vector> #include <vector>
namespace NPC_core {
class RandomAccessBinary class RandomAccessBinary
{ {
@ -19,7 +20,9 @@ public:
virtual ~RandomAccessBinary(); virtual ~RandomAccessBinary();
void setEndianness(Endianness endianess); void setEndianness(Endianness endianess);
const Endianness getEndianness(); Endianness getEndianness();
void clear() { ptr_data->clear(); }
void setBytes(uint position, const std::vector<uint8_t>& data); void setBytes(uint position, const std::vector<uint8_t>& data);
void setByte(uint position, const uint8_t& data); void setByte(uint position, const uint8_t& data);
@ -61,9 +64,11 @@ public:
std::string get_hex_string(uint byteOffset, uint length); std::string get_hex_string(uint byteOffset, uint length);
std::string get_hex_string(); std::string get_hex_string();
uint64_t size() { return ptr_data->size(); }
private: private:
std::unique_ptr<std::vector<uint8_t>> ptr_data; std::unique_ptr<std::vector<uint8_t>> ptr_data;
Endianness endianness; Endianness endianness;
}; };
}
#endif // RANDOMACCESSBINARY_H #endif // RANDOMACCESSBINARY_H

9
src/core/Validator.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef VALIDATOR_H
#define VALIDATOR_H
namespace NPC_core {
class Validator {
};
}
#endif

View File

@ -0,0 +1,12 @@
#ifndef YAMLSERIALIZABLE_H
#define YAMLSERIALIZABLE_H
#include <string>
namespace NPC_core {
class YAMLSerializable {
public:
virtual std::string toYAML() const = 0;
virtual void fromYAML(std::string &yaml) = 0;
};
}
#endif

View File

@ -0,0 +1,22 @@
#include "AFieldFactory.h"
namespace NPC_core {
namespace Control {
AFieldFactory::AFieldFactory()
{
}
std::shared_ptr<Model::Field> AFieldFactory::createField(std::string name, std::shared_ptr<Model::Structure> parentStructure)
{
auto f = std::make_shared<Model::Field>();
f->setName(name);
return f;
}
std::shared_ptr<Model::Field> AFieldFactory::createFieldFull(std::string name, std::map<std::string, std::string> syntaxes, std::shared_ptr<Model::Structure> parentStructure)
{
auto f = std::make_shared<Model::Field>();
f->setName(name);
return f;
}
}}

View File

@ -6,11 +6,11 @@
namespace NPC_core { namespace NPC_core {
namespace Control { namespace Control {
class FieldFactory class AFieldFactory
{ {
public: public:
FieldFactory(); AFieldFactory();
virtual ~FieldFactory(); virtual ~AFieldFactory();
virtual std::shared_ptr<Model::Field> createField(std::string name, std::shared_ptr<Model::Structure> parentStructure = nullptr); virtual std::shared_ptr<Model::Field> createField(std::string name, std::shared_ptr<Model::Structure> parentStructure = nullptr);
virtual std::shared_ptr<Model::Field> createFieldFull(std::string name, std::map<std::string, std::string> syntaxes, std::shared_ptr<Model::Structure> parentStructure = nullptr); virtual std::shared_ptr<Model::Field> createFieldFull(std::string name, std::map<std::string, std::string> syntaxes, std::shared_ptr<Model::Structure> parentStructure = nullptr);

View File

@ -1,7 +1,7 @@
#include "AModelFactory.h" #include "AModelFactory.h"
namespace NPC_core { namespace NPC_core {
namespace Control { namespace Control {
ModelFactory::ModelFactory() AModelFactory::AModelFactory()
{ {
} }

View File

@ -3,10 +3,10 @@
namespace NPC_core { namespace NPC_core {
namespace Control { namespace Control {
class ModelFactory class AModelFactory
{ {
public: public:
ModelFactory(); AModelFactory();
}; };
}} }}
#endif // AMODELFACTORY_H #endif // AMODELFACTORY_H

View File

@ -1,7 +1,7 @@
#include "ARepositoryFactory.h" #include "ARepositoryFactory.h"
namespace NPC_core { namespace NPC_core {
namespace Control { namespace Control {
RepositoryFactory::RepositoryFactory() ARepositoryFactory::ARepositoryFactory()
{ {
} }

View File

@ -3,10 +3,10 @@
namespace NPC_core { namespace NPC_core {
namespace Control { namespace Control {
class RepositoryFactory class ARepositoryFactory
{ {
public: public:
RepositoryFactory(); ARepositoryFactory();
}; };
}} }}
#endif // AREPOSITORYFACTORY_H #endif // AREPOSITORYFACTORY_H

View File

@ -1,7 +1,7 @@
#include "AStructureFactory.h" #include "AStructureFactory.h"
namespace NPC_core { namespace NPC_core {
namespace Control { namespace Control {
StructureFactory::StructureFactory() AStructureFactory::AStructureFactory()
{ {
} }

View File

@ -3,10 +3,10 @@
namespace NPC_core { namespace NPC_core {
namespace Control { namespace Control {
class StructureFactory class AStructureFactory
{ {
public: public:
StructureFactory(); AStructureFactory();
}; };
}} }}
#endif // ASTRUCTUREFACTORY_H #endif // ASTRUCTUREFACTORY_H

View File

@ -0,0 +1,13 @@
#include "DataController.h"
using namespace NPC_core::control;
DataController::DataController()
{
}
std::shared_ptr<RandomAccessBinary> DataController::getRAB() const
{
return rab;
}

View File

@ -0,0 +1,21 @@
#ifndef DATACONTROLLER_H
#define DATACONTROLLER_H
#include "RandomAccessBinary.h"
#include <memory>
namespace NPC_core {
namespace control {
class DataController
{
public:
DataController();
std::shared_ptr<RandomAccessBinary> getRAB() const;
private:
std::shared_ptr<RandomAccessBinary> rab;
};
}}
#endif // DATACONTROLLER_H

View File

@ -1,25 +0,0 @@
#include "AFieldFactory.h"
namespace NPC_core {
namespace Control {
FieldFactory::FieldFactory()
{
}
std::shared_ptr<Model::Field> FieldFactory::createField(std::string name, std::shared_ptr<Model::Structure> parentStructure)
{
auto f = std::make_shared<Model::Field>();
f->setName(name);
f->setParentStructure(parentStructure);
return f;
}
std::shared_ptr<Model::Field> FieldFactory::createFieldFull(std::string name, std::map<std::string, std::string> syntaxes, std::shared_ptr<Model::Structure> parentStructure)
{
auto f = std::make_shared<Model::Field>();
f->setName(name);
f->setSyntaxes(syntaxes);
f->setParentStructure(parentStructure);
return f;
}
}}

View File

@ -0,0 +1,12 @@
#include "ModelController.h"
namespace NPC_core {
namespace control {
ModelController::ModelController()
{
}
}}

View File

@ -0,0 +1,13 @@
#ifndef MODELCONTROLLER_H
#define MODELCONTROLLER_H
namespace NPC_core {
namespace control {
class ModelController
{
public:
ModelController();
};
}}
#endif // MODELCONTROLLER_H

View File

@ -0,0 +1,11 @@
#include "CombinationField.h"
namespace NPC_core {
namespace Model {
CombinationField::CombinationField() {
}
CombinationField::~CombinationField() {
}
}
}

View File

@ -0,0 +1,16 @@
#ifndef COMBINATIONFIELD_H
#define COMBINATIONFIELD_H
#include "ICombinationField.h"
#include "ValidateableValueField.h"
namespace NPC_core {
namespace Model {
class CombinationField : public ICombinationField, public Field {
public:
CombinationField();
virtual ~CombinationField();
};
}
}
#endif

View File

@ -4,7 +4,6 @@ namespace NPC_core {
namespace Model { namespace Model {
Field::Field() Field::Field()
{ {
this->parentStructure = nullptr;
} }
std::string Field::getName() const std::string Field::getName() const
@ -17,45 +16,14 @@ void Field::setName(const std::string &value)
name = value; name = value;
} }
std::shared_ptr<std::map<std::string, std::string> > Field::getSyntaxes() const std::string Field::getDescription() const
{ {
return syntaxes; return description;
} }
void Field::setSyntaxes(const std::shared_ptr<std::map<std::string, std::string>> &value) void Field::setDescription(const std::string &value)
{ {
syntaxes = value; description = value;
} }
std::string Field::getValue() const
{
return value;
}
void Field::setValue(const std::string &value)
{
this->value = value;
}
std::shared_ptr<Structure> Field::getParentStructure() const
{
return parentStructure;
}
void Field::setParentStructure(const std::shared_ptr<Structure> &value)
{
parentStructure = value;
}
std::shared_ptr<std::map<std::string, std::string> > Field::getChooseableValues() const
{
return chooseableValues;
}
void Field::setChooseableValues(const std::shared_ptr<std::map<std::string, std::string> > &value)
{
chooseableValues = value;
}
} }
} }

View File

@ -5,40 +5,54 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <map> #include <map>
#include "IField.h"
namespace NPC_core { namespace NPC_core {
namespace Model { namespace Model {
class Structure; class Structure;
class Field class Field : public IField {
{
public: public:
Field(); Field();
virtual ~Field(); virtual ~Field(){}
std::string getName() const; std::string getName() const;
void setName(const std::string &value); void setName(const std::string &value);
std::shared_ptr<std::map<std::string, std::string>> getSyntaxes() const; std::string getDescription() const;
void setSyntaxes(const std::shared_ptr<std::map<std::string, std::string>> &value); void setDescription(const std::string &value);
private:
std::string getValue() const;
void setValue(const std::string &value);
std::shared_ptr<Structure> getParentStructure() const;
void setParentStructure(const std::shared_ptr<Structure> &value);
std::shared_ptr<std::map<std::string, std::string> > getChooseableValues() const;
void setChooseableValues(const std::shared_ptr<std::map<std::string, std::string> > &value);
protected:
std::shared_ptr<Structure> parentStructure;
std::string name; std::string name;
std::shared_ptr<std::map<std::string, std::string>> syntaxes; // example : regex; for validation std::string description;
std::string value;
std::shared_ptr<std::map<std::string, std::string>> chooseableValues;
}; };
// class Field : public IField
// {
// public:
// Field();
// virtual ~Field(){}
//
// std::string getName() const;
// void setName(const std::string &value);
//
// std::map<std::string, std::string> getSyntaxes() const;
// void setSyntaxes(const std::map<std::string, std::string> &value);
//
// std::shared_ptr<Structure> getParentStructure() const;
// void setParentStructure(const std::shared_ptr<Structure> &value);
//
// protected:
// std::shared_ptr<Structure> parentStructure;
// std::string name;
// std::map<std::string, std::string> syntaxes; // example : regex; for validation
// std::map<std::string, std::string> options;
// bool nextLevel;
//
// // IField interface
// public:
// bool isNextLevel() { return this->nextLevel; }
// };
}} }}
#endif // AFIELD_H #endif // AFIELD_H

View File

@ -0,0 +1,13 @@
#ifndef ICOMBINATIONFIELD_H
#define ICOMBINATIONFIELD_H
#include "IField.h"
namespace NPC_core {
namespace Model {
class ICombinationField : public IField {
public:
};
}
}
#endif

27
src/core/model/IField.h Normal file
View File

@ -0,0 +1,27 @@
#ifndef IFIELD_H
#define IFIELD_H
#include <string>
namespace NPC_core {
namespace Model {
class IField
{
public:
virtual std::string getName() const = 0;
virtual std::string getDescription() const = 0;
};
// class IField
// {
// public:
// virtual std::string getName() const = 0;
//
// virtual std::map<std::string, std::string> getSyntaxes() const = 0;
//
// virtual std::shared_ptr<Structure> getParentStructure() const = 0;
//
// virtual bool isNextLevel() = 0;
// };
}}
#endif // IFIELD_H

View File

@ -0,0 +1,14 @@
#ifndef ILAYERTRANSITIONFIELD_H
#define ILAYERTRANSITIONFIELD_H
#include "IField.h"
namespace NPC_core {
namespace Model {
class ILayerTransitionField : public IField {
};
}
}
#endif

18
src/core/model/IModel.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef IMODEL_H
#define IMODEL_H
#include "../Tree.h"
#include "Field.h"
#include "../RandomAccessBinary.h"
#include <list>
namespace NPC_core {
namespace Model {
class IModel
{
public:
virtual Tree<Field> getStack() const = 0;
virtual std::list<std::shared_ptr<Structure>> getStructures() const = 0;
virtual std::string getBinaryInHex() const = 0;
};
}}
#endif // IMODEL_H

View File

@ -0,0 +1,16 @@
#ifndef IREGEXVALUEFIELD_H
#define IREGEXVALUEFIELD_H
#include "IValidateableValueField.h"
#include <string>
namespace NPC_core {
namespace Model {
class IRegexValueField : IValidateableValueField {
public:
// virtual std::string getRegex() const = 0;
};
}
}
#endif

View File

@ -0,0 +1,21 @@
#ifndef ISTRUCTURE_H
#define ISTRUCTURE_H
#include <memory>
#include <list>
#include "Field.h"
#include "../Tree.h"
namespace NPC_core {
namespace Model {
class Field;
class IStructure
{
public:
virtual std::string getName() const = 0;
virtual Tree<Field> getElements() const = 0;
};
}}
#endif // ISTRUCTURE_H

View File

@ -0,0 +1,17 @@
#ifndef IVALIDATEABLEVALUEFIELD_H
#define IVALIDATEABLEVALUEFIELD_H
#include "IValueField.h"
#include "../Validator.h"
namespace NPC_core {
namespace Model {
class IValidateableValueField : public IValueField {
public:
virtual bool validate() const = 0;
virtual Validator& getValidator() const = 0;
};
}
}
#endif

View File

@ -0,0 +1,17 @@
#ifndef IVALUEFIELD_H
#define IVALUEFIELD_H
#include <string>
#include "IField.h"
namespace NPC_core {
namespace Model {
class IValueField: public IField {
public:
virtual std::string getValue() const = 0;
virtual uint32_t getBitsize() const = 0;
};
}}
#endif

View File

@ -0,0 +1,10 @@
#include "LayerTransitionField.h"
namespace NPC_core {
namespace Model {
LayerTransitionField::LayerTransitionField() : Field() {
}
LayerTransitionField::~LayerTransitionField() {
}
}
}

View File

@ -0,0 +1,16 @@
#ifndef LAYERTRANSITIONFIELD_H
#define LAYERTRANSITIONFIELD_H
#include "ILayerTransitionField.h"
#include "Field.h"
namespace NPC_core {
namespace Model {
class LayerTransitionField : public Field, public ILayerTransitionField {
public:
LayerTransitionField();
virtual ~LayerTransitionField();
};
}
}
#endif

View File

@ -2,7 +2,27 @@
namespace NPC_core { namespace NPC_core {
namespace Model { namespace Model {
Model::Model() Model::Model()
{
this->rab = std::make_unique<RandomAccessBinary>();
}
Tree<Field> Model::getStack() const
{
return stack;
}
std::list<std::shared_ptr<Structure> > Model::getStructures() const
{
return structures;
}
std::string Model::getBinaryInHex() const {
return this->rab->get_hex_string();
}
void Model::update()
{ {
} }
}} }}

View File

@ -1,19 +1,31 @@
#ifndef AMODEL_H #ifndef AMODEL_H
#define AMODEL_H #define AMODEL_H
#include <memory>
#include "../Tree.h" #include "../Tree.h"
#include "Field.h" #include "Field.h"
#include "../RandomAccessBinary.h"
#include "IModel.h"
#include <list>
namespace NPC_core { namespace NPC_core {
namespace Model { namespace Model {
class Model class Model : public IModel
{ {
public: public:
Model(); Model();
virtual ~Model(); virtual ~Model(){}
Tree<Field> getStack() const;
std::list<std::shared_ptr<Structure>> getStructures() const;
std::string getBinaryInHex() const;
void addStructure(std::shared_ptr<Structure> structure);
void update(); // updates the stack if a new structure has been added, and updates the binary
private: private:
Tree<Field> stack; Tree<Field> stack;
std::unique_ptr<RandomAccessBinary> rab;
std::list<std::shared_ptr<Structure>> structures;
}; };
}} }}
#endif // AMODEL_H #endif // AMODEL_H

View File

@ -0,0 +1,6 @@
#include "Modifier.h"
Modifier::Modifier()
{
}

17
src/core/model/Modifier.h Normal file
View File

@ -0,0 +1,17 @@
#ifndef MODIFIER_H
#define MODIFIER_H
#include <vector>
#include <memory>
class Modifier
{
public:
Modifier();
virtual ~Modifier();
virtual void modifySelf(std::shared_ptr<std::vector<uint8_t>> bytes) = 0;
virtual void modifySelfFromFullData(std::shared_ptr<std::vector<uint8_t>> bytes, const std::shared_ptr<std::vector<uint8_t>> data) = 0;
};
#endif // MODIFIER_H

View File

@ -0,0 +1,13 @@
#include "RegexValueField.h"
namespace NPC_core {
namespace Model {
RegexValueField::RegexValueField() : ValidateableValueField() {
}
RegexValueField::~RegexValueField() {
}
}
}

View File

@ -0,0 +1,16 @@
#ifndef REGEXVALUEFIELD_H
#define REGEXVALUEFIELD_H
#include "ValidateableValueField.h"
#include "IRegexValueField.h"
namespace NPC_core {
namespace Model {
class RegexValueField : public ValidateableValueField, public IRegexValueField {
public:
RegexValueField();
virtual ~RegexValueField();
};
}
}
#endif

View File

@ -16,13 +16,13 @@ void Structure::setName(const std::string &value)
name = value; name = value;
} }
uint Structure::getLayer() const Tree<Field> Structure::getElements() const
{ {
return layer; return elements;
} }
void Structure::setLayer(const uint &value) void Structure::setElements(const Tree<Field> &value)
{ {
layer = value; elements = value;
} }
}} }}

View File

@ -5,28 +5,29 @@
#include <list> #include <list>
#include "Field.h" #include "Field.h"
#include "../Tree.h" #include "../Tree.h"
#include "IStructure.h"
namespace NPC_core { namespace NPC_core {
namespace Model { namespace Model {
class Field; class Field;
class Structure class Structure : public IStructure
{ {
public: public:
Structure(); Structure();
virtual ~Structure(); virtual ~Structure() {}
std::string getName() const; std::string getName() const;
void setName(const std::string &value); void setName(const std::string &value);
uint getLayer() const;
void setLayer(const uint &value); Tree<Field> getElements() const;
void setElements(const Tree<Field> &value);
private: private:
Tree<Field> elements; Tree<Field> elements;
std::string name; std::string name;
uint layer;
}; };
}} }}

View File

@ -0,0 +1,23 @@
#include "ValidateableValueField.h"
namespace NPC_core {
namespace Model {
ValidateableValueField::ValidateableValueField() : ValueField() {
}
ValidateableValueField::~ValidateableValueField() {
}
Validator& ValidateableValueField::getValidator() {
return this->validator;
}
bool ValidateableValueField::validate() {
// return this->validator.validate();
}
void ValidateableValueField::setValidator(Validator& value) {
this->validator = value;
}
}
}

View File

@ -0,0 +1,24 @@
#ifndef VALIDATEABLEVALUEFIELD_H
#define VALIDATEABLEVALUEFIELD_H
#include "ValueField.h"
#include "IValidateableValueField.h"
#include "../Validator.h"
namespace NPC_core {
namespace Model {
class ValidateableValueField : public IValidateableValueField, public ValueField {
public:
ValidateableValueField();
virtual ~ValidateableValueField();
bool validate();
Validator& getValidator();
void setValidator(Validator& value);
private:
Validator validator;
};
}
}
#endif

View File

@ -0,0 +1,28 @@
#include "ValueField.h"
namespace NPC_core {
namespace Model {
ValueField::ValueField() : Field() {
}
ValueField::~ValueField() {}
std::string ValueField::getValue() const {
return this->value;
}
uint32_t ValueField::getBitsize() const {
return this->bitsize;
}
void ValueField::setValue(std::string &value) {
this->value = value;
}
void ValueField::setBitsize(uint32_t &value) {
this->bitsize = value;
}
}
}

View File

@ -0,0 +1,25 @@
#ifndef VALUEFIELD_H
#define VALUEFIELD_H
#include "IValueField.h"
#include "Field.h"
namespace NPC_core {
namespace Model {
class ValueField : public IValueField, public Field {
public:
ValueField();
virtual ~ValueField();
virtual std::string getValue() const;
virtual uint32_t getBitsize() const;
void setValue(std::string &value);
void setBitsize(uint32_t &size);
private:
std::string value;
uint32_t bitsize;
};
}}
#endif

View File

@ -2,11 +2,13 @@
set(HEADERS set(HEADERS
flowlayout.h flowlayout.h
StructureField.h StructureField.h
EditorView.h
) )
set(SOURCES set(SOURCES
flowlayout.cpp flowlayout.cpp
StructureField.cpp StructureField.cpp
EditorView.cpp
) )
add_library(editor ${HEADERS} ${SOURCES}) add_library(editor ${HEADERS} ${SOURCES})

19
src/editor/EditorView.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "EditorView.h"
using namespace NPC_editor;
EditorView::EditorView(QWidget *parent) : QWidget(parent)
{
this->flowLayout = std::make_shared<FlowLayout>();
this->setLayout(this->flowLayout.get());
}
void EditorView::addWidget(QWidget *widget)
{
this->flowLayout->addWidget(widget);
}
void EditorView::remWidget(QWidget *widget)
{
this->flowLayout->removeWidget(widget);
}

28
src/editor/EditorView.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef EDITORVIEW_H
#define EDITORVIEW_H
#include <QWidget>
#include <memory>
#include "flowlayout.h"
namespace NPC_editor {
class EditorView : public QWidget
{
Q_OBJECT
public:
explicit EditorView(QWidget *parent = nullptr);
virtual ~EditorView() {}
void addWidget(QWidget * widget);
void remWidget(QWidget * widget);
signals:
public slots:
private:
std::shared_ptr<FlowLayout> flowLayout;
};
}
#endif // EDITORVIEW_H

View File

@ -10,7 +10,7 @@ class FlowLayout : public QLayout
public: public:
explicit FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1); explicit FlowLayout(QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1);
explicit FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1); explicit FlowLayout(int margin = -1, int hSpacing = -1, int vSpacing = -1);
~FlowLayout(); ~FlowLayout() override;
void addItem(QLayoutItem *item) Q_DECL_OVERRIDE; void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
int horizontalSpacing() const; int horizontalSpacing() const;

View File

@ -1,6 +1,7 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <QPushButton> #include <QPushButton>
#include <iostream> #include <iostream>
#include "editor/EditorView.h"
void MainWindow::doSomething() void MainWindow::doSomething()
{ {
@ -12,8 +13,8 @@ void MainWindow::doSomething()
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
{ {
//editor = new GuidedEditorView(this); editor = new NPC_editor::EditorView(this);
//this->setCentralWidget(editor); this->setCentralWidget(editor);
dockWidget = new QDockWidget(this); dockWidget = new QDockWidget(this);
this->addDockWidget(Qt::LeftDockWidgetArea, dockWidget); this->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

View File

@ -6,14 +6,14 @@
#include <QList> #include <QList>
#include <QGridLayout> #include <QGridLayout>
#include <QDockWidget> #include <QDockWidget>
#include "editor/guidededitorview.h" #include "editor/EditorView.h"
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
{ {
Q_OBJECT Q_OBJECT
private: private:
GuidedEditorView* editor; NPC_editor::EditorView* editor;
QDockWidget* dockWidget; QDockWidget* dockWidget;
public slots: public slots:
void doSomething(); void doSomething();

View File

@ -6,8 +6,10 @@ INCLUDE_DIRECTORIES(/usr/include/gtest)
set(SOURCES set(SOURCES
core/test_tree.cpp core/test_tree.cpp
core/test_rab.cpp
core/test_model.cpp
) )
add_executable(runUnitTests ${SOURCES}) add_executable(runUnitTests ${SOURCES})
target_link_libraries(runUnitTests gtest gtest_main) target_link_libraries(runUnitTests gtest gtest_main core)
add_test(runUnitTests runUnitTests) add_test(runUnitTests runUnitTests)

27
test/core/test_model.cpp Normal file
View File

@ -0,0 +1,27 @@
#include <iostream>
#include <string>
#include "gtest/gtest.h"
#include "../src/core/model/Model.h"
#include "../src/core/model/Field.h"
#include "../src/core/model/Structure.h"
class ModelTest : public ::testing::Test {
protected:
virtual void SetUp(){
baseStructure.setName("BaseStructure");
secondLvlStructure.setName("Second Level");
}
virtual void TearDown(){
}
NPC_core::Model::Structure baseStructure;
NPC_core::Model::Structure secondLvlStructure;
NPC_core::Model::Model m;
};
TEST_F(ModelTest, IsEmptyInitially) {
EXPECT_EQ(0, m.getStructures().size());
}

115
test/core/test_rab.cpp Normal file
View File

@ -0,0 +1,115 @@
#include <iostream>
#include <string>
#include "gtest/gtest.h"
#include "../src/core/RandomAccessBinary.h"
using namespace NPC_core;
class RABTest : public ::testing::Test {
protected:
virtual void SetUp(){
uint64_t bigdata = 0x0CAFEBABE;
test2.set_uint64(0, bigdata);
test4.setEndianness(RandomAccessBinary::Endianness::LITTLE);
}
virtual void TearDown(){
test.clear();
test2.clear();
test3.clear();
test4.clear();
}
RandomAccessBinary test;
RandomAccessBinary test2;
RandomAccessBinary test3;
RandomAccessBinary test4;
};
TEST_F(RABTest, IsEmptyInitially) {
EXPECT_EQ(0, test.size());
EXPECT_EQ("", test.get_hex_string());
}
TEST_F(RABTest, SomeData) {
EXPECT_EQ(8, test2.size());
EXPECT_EQ("00000000cafebabe", test2.get_hex_string());
EXPECT_EQ("cafebabe", test2.get_hex_string(4,4));
}
TEST_F(RABTest, Double) {
//double a = 3.1415;
double a = 2.7182818284;
test3.set_double(0, a);
EXPECT_EQ("4005bf0a8b12500b", test3.get_hex_string());
EXPECT_DOUBLE_EQ(2.7182818284, test3.get_double(0));
// LITTLE ENDIAN
test4.set_double(0, a);
EXPECT_EQ("0b50128b0abf0540", test4.get_hex_string());
EXPECT_DOUBLE_EQ(2.7182818284, test4.get_double(0));
}
TEST_F(RABTest, Float) {
float a = 2.71828f;
test3.set_float(0, a);
EXPECT_EQ("402df84d", test3.get_hex_string());
EXPECT_FLOAT_EQ(2.71828f, test3.get_float(0));
// LITTLE ENDIAN
test4.set_float(0, a);
EXPECT_EQ("4df82d40", test4.get_hex_string());
EXPECT_FLOAT_EQ(2.71828f, test4.get_float(0));
}
TEST_F(RABTest, VariousInteger) {
uint8_t byte = 42;
uint16_t a_short = 31337;
uint32_t a_int = 0xdeadbeef;
uint64_t a_long = 0xcafebabedeadbeef;
test3.setByte(0, byte);
test3.set_uint16(1, a_short);
test3.set_uint32(3, a_int);
test3.set_uint64(7, a_long);
test4.setByte(0, byte);
test4.set_uint16(1, a_short);
test4.set_uint32(3, a_int);
test4.set_uint64(7, a_long);
std::cout << "BIG ENDIAN: " << test3.get_hex_string() << std::endl;
std::cout << "LITTLE ENDIAN: "<< test4.get_hex_string() << std::endl;
EXPECT_EQ("2a7a69deadbeefcafebabedeadbeef", test3.get_hex_string());
EXPECT_EQ("2a697aefbeaddeefbeaddebebafeca", test4.get_hex_string());
}
TEST_F(RABTest, Strings) {
std::string a = "Dies ist ein Test.";
test3.setBytes(0, std::vector<uint8_t>(a.begin(), a.end()));
EXPECT_EQ("Dies ist ein Test.", test3.get_string(0, test3.size()));
EXPECT_EQ("44696573206973742065696e20546573742e", test3.get_hex_string());
}
TEST_F(RABTest, Bits) {
bool bit = true;
test3.setBit(4, bit);
EXPECT_EQ(0x08, test3.getByte(0));
uint8_t bits = 0b101;
test3.setBits(3, 3, bits);
EXPECT_EQ(0x14, test3.getByte(0));
}
TEST_F(RABTest, BitVectors) {
test3.set_uint64(0, 0xdeadbeefcafebabe);
auto vec = test3.getBits(18, 20);
std::stringstream stream;
for( auto it = vec.begin(); it != vec.end(); ++it)
stream << (*it);
EXPECT_EQ("11111011101111110010", stream.str());
test4.set_uint64(0, 0xdeadbeefcafebabe);
auto vec2 = test4.getBits(18, 20);
std::stringstream stream2;
for( auto it = vec2.begin(); it != vec2.end(); ++it)
stream2 << (*it);
EXPECT_EQ("11111011001010111011", stream2.str());
}