Entity: NamedElement 103 30 null * abstract name String 3 false false false Entity: Relationship 549 34 NamedElement * abstract Entity: Feature 6 125 NamedElement * abstract isStatic boolean 3 false false false Entity: Type 261 133 NamedElement * abstract typeId String 3 false true false Entity: Classifier 275 201 Type * abstract Entity: StructuralFeature 26 208 Feature * abstract isReadOnly boolean 3 false false false Entity: DataType 343 143 Classifier * abstract Entity: PrimitiveType 405 196 DataType * Entity: Entity 295 292 Classifier * isAbstract boolean 3 false false false isInterface boolean 3 false false false Operation: inheritedOperations Entity Set(Operation) query true (superclass.size = 0 => result = Set{}) & (superclass.size > 0 => result = (superclass.any.ownedOperation)->union(superclass.any.inheritedOperations()->select( p | p.name /: superclass.any.ownedOperation.name ))) Entity: Property 27 325 StructuralFeature * lower int 3 false false false upper int 3 false false false isOrdered boolean 3 false false false isUnique boolean 3 false false false isDerived boolean 3 false false false Operation: mapMultiplicity Property String query true (upper = 1 & lower = 1 => result = "ONE") & (upper = 1 & lower = 0 => result = "ZERONE") & (true => result = "MANY") Entity: Association 603 345 Relationship * addOnly boolean 3 false false false aggregation boolean 3 false false false Entity: Generalization 509 248 Relationship * Entity: BehaviouralFeature 8 471 Feature * abstract isAbstract boolean 3 false false false Entity: Operation 8 527 BehaviouralFeature * isQuery boolean 3 false false false isCached boolean 3 false false false Entity: Expression 338 791 null * abstract needsBracket boolean 3 false false false umlKind UMLKind 3 false false false expId String 3 false true false isStatic boolean 3 false false false Entity: UseCase 661 449 Classifier * isGeneric boolean 3 false false false isDerived boolean 3 false false false Entity: CollectionType 398 92 DataType * Entity: CStruct 729 609 CType * name String 3 false true false isAbstract boolean 3 false false false Operation: toString CStruct String query true result = "struct " + name Operation: allCMembers CStruct Set(CMember) query true sups = members->select(name = "super") & (sups.size = 0 => result = members) & (sups.size > 0 => result = (members - sups)->union(sups.any.inheritedCMembers())) Operation: addOpDec CStruct String ent String query true result = "void add" + ent + "(void* obj);\n" Operation: createOpDec CStruct String ent String query true result = "struct " + ent + "* create" + ent + "(void);\n" Operation: createPKOpDec CStruct String ent String key String query true result = "struct " + ent + "* createByPK" + ent + "(char* _value);\n" Operation: concatenateOpDec CStruct String query true result = "struct " + name + "** concatenate" + name + "(struct " + name + "* _col1[], struct " + name + "* _col2[]);\n" Operation: intersectionOpDec CStruct String query true result = "struct " + name + "** intersection" + name + "(struct " + name + "* _col1[], struct " + name + "* _col2[]);\n" Operation: insertAtOpDec CStruct String query true result = "struct " + name + "** insertAt" + name + "(struct " + name + "* _col1[], int ind, struct " + name + "* _col2[]);\n" Operation: exists1OpDec CStruct String query true result = "unsigned char exists1" + name + "(struct " + name + "* _col[], unsigned char (*test)(struct " + name + "*));\n" Operation: isUniqueOpDec CStruct String query true result = "unsigned char isUnique" + name + "(struct " + name + "* _col[], void* (*fe)(struct " + name + "*));\n" Operation: frontOpDec CStruct String query true result = "struct " + name + "** front" + name + "(struct " + name + "* _col[]);\n" Operation: tailOpDec CStruct String query true result = "struct " + name + "** tail" + name + "(struct " + name + "* _col[]);\n" Operation: removeAllOpDec CStruct String query true result = "struct " + name + "** removeAll" + name + "(struct " + name + "* _col1[], struct " + name + "* _col2[]);\n" Operation: asSetOpDec CStruct String query true result = "struct " + name + "** asSet" + name + "(struct " + name + "* _col[]);\n" Entity: CMember 1138 619 null * name String 3 false false false isKey boolean 3 false false false multiplicity String 3 false false false Operation: toString CMember String query true (isKey = true => result = " " + type + " " + name + "; /* key */") & (isKey = false => result = " " + type + " " + name + "; /* " + multiplicity + " */") Operation: inheritedCMembers CMember Set(CMember) query type : CPointerType & type.pointsTo : CStruct anc = type.pointsTo & result = anc.allCMembers() Operation: getterOpDec CMember String ent String query true result = type + " get" + ent + "_" + name + "(struct " + ent + "* self);\n" Operation: inheritedGetterOpDec CMember String ent String sup String query true (name /= "super" => result = type + " get" + ent + "_" + name + "(struct " + ent + "* self);\n") & (name = "super" => result = self.ancestorGetterOpsDec(ent,sup) ) Operation: ancestorGetterOpsDec CMember String ent String sup String query type : CPointerType & type.pointsTo : CStruct anc = type.pointsTo & result = anc.members->collect( m | m.inheritedGetterOpDec(ent, sup) )->sum() Operation: inheritedGetterOpsDec CMember String ent String query type : CPointerType & type.pointsTo : CStruct sup = type.pointsTo & result = sup.members->collect( m | m.inheritedGetterOpDec(ent, sup.name) )->sum() Operation: setterOpDec CMember String ent String query true result = "void set" + ent + "_" + name + "(struct " + ent + "* self, " + type + " _value);\n" Operation: inheritedSetterOpDec CMember String ent String sup String query true (name /= "super" => result = "void set" + ent + "_" + name + "(struct " + ent + "* self, " + type + " _value);\n") & (name = "super" => result = self.ancestorSetterOpsDec(ent,sup) ) Operation: ancestorSetterOpsDec CMember String ent String sup String query type : CPointerType & type.pointsTo : CStruct anc = type.pointsTo & result = anc.members->collect( m | m.inheritedSetterOpDec(ent, sup) )->sum() Operation: inheritedSetterOpsDec CMember String ent String query type : CPointerType & type.pointsTo : CStruct sup = type.pointsTo & result = sup.members->collect( m | m.inheritedSetterOpDec(ent, sup.name) )->sum() Operation: getAllOpDec CMember String ent String query true result = type + "* getAll" + ent + "_" + name + "(struct " + ent + "* _col[]);\n" Operation: getAllOp1Dec CMember String ent String query true result = type + "* getAll" + ent + "_" + name + "(struct " + ent + "* _col[]);\n" Operation: inheritedAllOpDec CMember String ent String sup String query true (name /= "super" & type : CPrimitiveType => result = getAllOpDec(ent)) & (name /= "super" & type : CPointerType => result = getAllOp1Dec(ent)) & (name = "super" => result = self.ancestorAllOpsDec(ent,sup) ) Operation: ancestorAllOpsDec CMember String ent String sup String query type : CPointerType anc = type.pointsTo & result = anc.members->collect( m | m.inheritedAllOpDec(ent, sup) )->sum() Operation: inheritedAllOpsDec CMember String ent String query type : CPointerType sup = type.pointsTo & result = sup.members->collect( m | m.inheritedAllOpDec(ent, sup.name) )->sum() Operation: getPKOpDec CMember String ent String query true e = ent.toLowerCase & result = "struct " + ent + "* get" + ent + "ByPK(char* _ex);\n" Operation: getPKsOpDec CMember String ent String query true e = ent.toLowerCase & result = "struct " + ent + "** get" + ent + "ByPKs(char* _col[]);\n" Operation: initialiser CMember String query true (isKey = true => result = "") & (name = "super" => result = " result->super = create" + type.pointsTo.name + "();\n") & (type : CPointerType or type : CArrayType => result = " result->" + name + " = NULL;\n") & (type : CPrimitiveType => result = " result->" + name + " = 0;\n") Entity: CType 899 845 null * abstract ctypeId String 3 false true false Operation: toString CType String query abstract true true Entity: COperation 556 917 null * name String 3 false false false opId String 3 false true false isStatic boolean 3 false false false scope String 3 false false false isQuery boolean 3 false false false inheritedFrom String 3 false false false isAbstract boolean 3 false false false Operation: parameterDeclaration COperation String s Sequence(CVariable) static query true ( s.size = 0 => result = "void" ) & ( s.size = 1 => result = s[1].type + " " + s[1].name ) & ( s.size > 1 => result = s[1].type + " " + s[1].name + ", " + COperation.parameterDeclaration(s.tail) ) Operation: parameterNames COperation String s Sequence(CVariable) query true ( s.size = 0 => result = "" ) & ( s.size = 1 => result = s[1].name ) & ( s.size > 1 => result = s[1].name + ", " + parameterNames(s.tail) ) Operation: getDeclaration COperation String query true result = returnType + " " + name + "(" + COperation.parameterDeclaration(parameters) + ");\n" Entity: CVariable 917 991 null * name String 3 false false false kind String 3 false false false initialisation String 3 false false false Entity: CProgram 558 1049 null * Operation: printOperationDecs CProgram void true operations->forAll( op | op.getDeclaration()->display() ) Operation: printLoadOpDecs CProgram void true "unsigned char loadModel(void);"->display() Operation: printMainOperation CProgram void true "int main() { return 0; }"->display() Operation: printDeclarations CProgram void true true Entity: CPrimitiveType 710 701 CType * name String 3 false false false Operation: toString CPrimitiveType String query true result = name Entity: CArrayType 616 764 CType * duplicates boolean 3 false false false Operation: toString CArrayType String query true result = componentType + "*" Entity: CPointerType 1151 764 CType * Operation: toString CPointerType String query true result = pointsTo + "*" Entity: BinaryExpression 57 960 Expression * operator String 3 false false false variable String 3 false false false Entity: UnaryExpression 654 912 Expression * operator String 3 false false false Entity: CollectionExpression 646 838 Expression * isOrdered boolean 3 false false false Type: UMLKind 789 996 value attribute role variable constant function queryop operation classid Entity: BasicExpression 284 1028 Expression * data String 3 false false false prestate boolean 3 false false false Association: Feature Type 0 210 130 262 140 1 type null Association: Feature Type 0 220 130 272 140 1 elementType null Association: Entity Property 1 300 292 63 326 0 ownedAttribute owner ordered Association: Entity Entity 0 300 292 333 306 -1 superclass subclasses Association: Association Property -1 604 394 248 392 0 memberEnd null ordered Association: Entity Generalization 1 362 293 511 251 0 generalization specific Association: Generalization Entity 0 579 273 523 325 1 general specialization Association: Entity Operation 1 326 346 208 530 0 ownedOperation owner ordered Association: Operation Entity 0 211 509 326 346 0 definers null ordered Association: BehaviouralFeature Property -1 166 474 186 423 0 parameters null ordered Association: UseCase Property -1 664 450 246 421 0 parameters null ordered Association: CollectionType Type 0 394 98 307 133 1 elementType null Association: CStruct CMember 1 975 646 1137 632 0 members null ordered Association: CStruct CMember 0 985 656 1147 642 0 allMembers null Association: COperation CVariable -1 816 954 920 1008 0 parameters null ordered Association: COperation CStruct 0 816 954 985 668 0 definers null ordered Association: CVariable CType 0 1047 993 937 900 1 type null Association: COperation CType 0 816 917 901 899 1 returnType null Association: CArrayType CType 0 740 820 901 851 1 componentType null 741 847 Association: CPointerType CType 0 1251 802 1164 858 1 pointsTo null 1181 857 Association: CMember CType 0 1140 672 1055 845 1 type null Association: CProgram COperation 1 643 1051 653 1005 0 operations null Association: CProgram CVariable 1 739 1098 1019 1057 0 variables null Association: CProgram CStruct -1 560 1058 731 635 0 structs null 520 955 521 637 Association: Expression Type 0 340 791 266 176 1 type null Association: Expression Type 0 345 791 309 178 1 elementType null Association: CollectionExpression Expression 0 647 857 338 798 0 elements null Association: BinaryExpression Expression 0 124 960 338 799 1 left null 125 778 Association: BinaryExpression Expression 0 208 972 338 805 1 right null 221 781 Association: BasicExpression Expression 0 427 1033 350 770 0 parameters null ordered Association: UnaryExpression Expression -1 657 915 413 792 1 argument null Association: BasicExpression Property 0 588 1037 27 359 -1 referredProperty null Association: BasicExpression Entity 0 588 237 297 299 0 context null Association: BasicExpression BasicExpression -1 287 1134 339 1158 -1 arrayIndex null 227 1133 227 1196 307 1197 Association: Property Expression -1 664 678 335 816 1 initialValue null 665 826 514 822 Association: BasicExpression BasicExpression -1 490 953 408 1162 -1 objectRef null 552 953 551 1002 443 1203 Generalisation: NamedElement Feature 53 127 105 67 Generalisation: NamedElement Relationship 552 40 261 35 Generalisation: NamedElement Type 278 135 243 68 Generalisation: Feature StructuralFeature 168 210 167 162 Generalisation: Type Classifier 287 203 287 156 Generalisation: DataType PrimitiveType 414 198 414 165 Generalisation: Classifier Entity 336 296 335 224 Generalisation: Classifier DataType 372 164 334 203 Generalisation: StructuralFeature Property 51 329 52 247 Generalisation: Relationship Association 731 348 650 58 Generalisation: Relationship Generalization 588 247 583 56 Generalisation: Feature BehaviouralFeature 12 472 14 165 Generalisation: BehaviouralFeature Operation 35 528 35 493 Generalisation: Classifier UseCase 777 452 356 220 775 245 Generalisation: DataType CollectionType 420 119 422 145 Generalisation: CType CStruct 962 663 962 847 Generalisation: CType CPrimitiveType 865 753 939 845 Generalisation: CType CPointerType 1160 801 1153 846 Generalisation: CType CArrayType 840 802 903 845 Generalisation: Expression UnaryExpression 655 939 341 810 Generalisation: Expression BasicExpression 357 1026 347 813 Generalisation: Expression BinaryExpression 57 1018 348 818 23 1019 24 818 288 816 Generalisation: Expression CollectionExpression 722 839 375 837 722 823 474 822 GeneralUseCase: printcode false Constraint: null true allMembers = allCMembers() CStruct printcode false Constraint: null true ( "struct " + name + " {" )->display() & members->forAll( m | m->display() ) & "};\n"->display() CStruct printcode false Constraint: true f : members & f.name /= "super" f.getterOpDec(name)->display() CStruct printcode false Constraint: true f : members & f.name = "super" f.inheritedGetterOpsDec(name)->display() CStruct printcode false Constraint: true f : members & f.name /= "super" f.setterOpDec(name)->display() CStruct printcode false Constraint: true f : members & f.name = "super" f.inheritedSetterOpsDec(name)->display() CStruct printcode false Constraint: true f : allMembers & f.type : CPrimitiveType f.getAllOpDec(name)->display() CStruct printcode false Constraint: true f : allMembers & f.name /= "super" & f.type : CPointerType f.getAllOp1Dec(name)->display() CStruct printcode false Constraint: true allMembers->exists( k | k.isKey ) & key = allMembers->select( isKey )->any() key.getPKOpDec(name)->display() & key.getPKsOpDec(name)->display() CStruct printcode false Constraint: null true ( "struct " + name + "** append" + name + "(struct " + name + "* col[], struct " + name + "* ex);\n" )->display() CStruct printcode false Constraint: null true self.addOpDec(name)->display() CStruct printcode false Constraint: null allMembers->exists( k | k.isKey ) & key = allMembers->select( isKey )->any() self.createPKOpDec(name, key.name)->display() CStruct printcode false Constraint: null true self.createOpDec(name)->display() CStruct printcode false Constraint: null true ( "struct " + name + "** insert" + name + "(struct " + name + "* col[], struct " + name + "* self);\n" )->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->select" & be.left.elementType.name = name ) ( "struct " + name + "** select" + name + "(struct " + name + "* col[], unsigned char (*test)(struct " + name + "* self));\n" )->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->reject" & be.left.elementType.name = name ) ( "struct " + name + "** reject" + name + "(struct " + name + "* col[], unsigned char (*test)(struct " + name + "* self));\n" )->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->collect" & be.left.elementType.name = name ) ( " void** collect" + name + "(struct " + name + "* col[], void* (*fe)(struct " + name + "*));\n" )->display() & ( " int* collect" + name + "_int(struct " + name + "* col[], int (*fe)(struct " + name + "*));\n" )->display() & ( " long* collect" + name + "_long(struct " + name + "* col[], long (*fe)(struct " + name + "*));\n" )->display() & ( " double* collect" + name + "_double(struct " + name + "* col[], double (*fe)(struct " + name + "*));\n" )->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->exists" & be.left.elementType.name = name ) ( " unsigned char exists" + name + "(struct " + name + "* col[], unsigned char (*test)(struct " + name + "* ex));\n" )->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->forAll" & be.left.elementType.name = name ) ( " unsigned char forAll" + name + "(struct " + name + "* col[], unsigned char (*test)(struct " + name + "* ex));" )->display() CStruct printcode false Constraint: null true (" struct " + name + "** subrange" + name + "(struct " + name + "** col, int i, int j);")->display() CStruct printcode false Constraint: null true (" struct " + name + "** reverse" + name + "(struct " + name + "* col[]);")->display() CStruct printcode false Constraint: null true ("struct " + name + "** remove" + name + "(struct " + name + "* col[], struct " + name + "* ex);")->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->union" & be.left.elementType.name = name ) ("struct " + name + "** union" + name + "(struct " + name + "* col1[], struct " + name + "* col2[]);")->display() CStruct printcode false Constraint: null true self.removeAllOpDec()->display() CStruct printcode false Constraint: null true self.frontOpDec()->display() CStruct printcode false Constraint: null true self.tailOpDec()->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "^" & be.left.elementType.name = name ) self.concatenateOpDec()->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->intersection" & be.left.elementType.name = name ) self.intersectionOpDec()->display() CStruct printcode false Constraint: null BasicExpression->exists( b | b.data = "insertAt" ) self.insertAtOpDec()->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->exists1" & be.left.elementType.name = name ) self.exists1OpDec()->display() CStruct printcode false Constraint: null BinaryExpression->exists( be | be.operator = "->isUnique" & be.left.elementType.name = name ) self.isUniqueOpDec()->display() CStruct printcode false Constraint: null UnaryExpression->exists( be | be.operator = "->asSet" & be.argument.elementType.name = name ) self.asSetOpDec()->display() CStruct printcode false Constraint: null true printOperationDecs() CProgram printcode false Constraint: null Set{ classifierBehaviour }->size() > 0 (CType[resultType.typeId] + " " + name + "(" + COperation.parameterDeclaration(parameters) + ");\n")->display() UseCase printcode false GeneralUseCase: types2C false Constraint: name = "int" null CPrimitiveType->exists( p | p.ctypeId = typeId & p.name = "int" ) PrimitiveType types2C false Constraint: name = "long" null CPrimitiveType->exists( p | p.ctypeId = typeId & p.name = "long" ) PrimitiveType types2C false Constraint: name = "double" null CPrimitiveType->exists( p | p.ctypeId = typeId & p.name = "double" ) PrimitiveType types2C false Constraint: name = "boolean" null CPrimitiveType->exists( p | p.ctypeId = typeId & p.name = "unsigned char" ) PrimitiveType types2C false Constraint: name = "String" null CPointerType->exists( t | t.ctypeId = typeId & CPrimitiveType->exists( p | p.name = "char" & t.pointsTo = p ) ) PrimitiveType types2C false Constraint: name = "void" null CPrimitiveType->exists( p | p.ctypeId = typeId & p.name = "void" ) PrimitiveType types2C false Constraint: null true CPointerType->exists( p | p.ctypeId = typeId & CStruct->exists( c | c.name = name & c.ctypeId = name & c.isAbstract = isAbstract & p.pointsTo = c ) ) Entity types2C false Constraint: name = "Sequence" elementType /: CollectionType CArrayType->exists( a | a.ctypeId = typeId & a.duplicates = true & a.componentType = CType@pre[elementType.typeId] ) CollectionType types2C false Constraint: name = "Set" elementType /: CollectionType CArrayType->exists( c | c.ctypeId = typeId & c.duplicates = false & c.componentType = CType@pre[elementType.typeId] ) CollectionType types2C false Constraint: name = "Sequence" elementType : CollectionType CArrayType->exists( a | a.ctypeId = typeId & a.duplicates = true & a.componentType = CType@pre[elementType.typeId] ) CollectionType types2C false Constraint: name = "Set" elementType : CollectionType CArrayType->exists( c | c.ctypeId = typeId & c.duplicates = false & c.componentType = CType@pre[elementType.typeId] ) CollectionType types2C false GeneralUseCase: program2C false Constraint: null true CMember->exists( m | m.name = "super" & m.multiplicity = "ONE" & CStruct->exists( sub | sub.name = specific.name & m : sub.members & m.type = CPointerType[general.typeId] ) ) Generalization program2C false Constraint: p : ownedAttribute & p.name.size > 0 null CStruct->exists( c | c.name = name & CMember->exists( m | m.name = p.name & m.isKey = p.isUnique & m.multiplicity = p.mapMultiplicity() & m.type = CType@pre[p.type.typeId] & m : c.members ) ) Entity program2C false Constraint: null isStatic = false COperation->exists( op | op.name = name + "_" + owner.name & op.opId = name + "_" + owner.name & op.inheritedFrom = "" & op.scope = "entity" & op.isQuery = isQuery & op.isStatic = isStatic & op.isAbstract = isAbstract & op.definers = CStruct[definers.name] & op.returnType = CType[type.typeId] & CVariable->exists( s | s.name = "self" & s.type = CType[owner.typeId] & s : op.parameters ) & parameters->forAll( p | CVariable->exists( v | v.name = p.name & v.type = CType[p.type.typeId] & v : op.parameters ) ) ) Operation program2C false Constraint: iop : inheritedOperations() iop.isStatic = false & iop.name /: ownedOperation.name COperation->exists( op | op.name = iop.name + "_" + name & op.inheritedFrom = superclass.any.name & op.opId = iop.name + "_" + name & op.scope = "entity" & op.isQuery = iop.isQuery & op.isStatic = false & op.returnType = CType[iop.type.typeId] & CVariable->exists( s | s.name = "self" & s.type = CType[typeId] & s : op.parameters ) & iop.parameters->forAll( p | CVariable->exists( v | v.name = p.name & v.type = CType[p.type.typeId] & v : op.parameters ) ) ) Entity program2C false Constraint: null isStatic = true COperation->exists( op | op.name = name & op.opId = name + "_" + owner.name & op.scope = "entity" & op.isQuery = isQuery & op.isStatic = isStatic & op.returnType = CType[type.typeId] & parameters->forAll( p | CVariable->exists( v | v.name = p.name & v.type = CType[p.type.typeId] & v : op.parameters ) ) ) Operation program2C false Constraint: null true CProgram->exists( p | p.structs = CStruct.allInstances & p.operations = COperation.allInstances ) null program2C false Entity: Statement 366 1118 null * abstract statId String 3 false true false Entity: ReturnStatement 272 1175 Statement * Entity: BreakStatement 289 1209 Statement * Entity: OperationCallStatement 248 1366 Statement * assignsTo String 3 false false false Entity: ImplicitCallStatement 305 1413 Statement * assignsTo String 3 false false false Entity: LoopStatement 509 1304 Statement * abstract Entity: BoundedLoopStatement 501 1400 LoopStatement * Entity: UnboundedLoopStatement 543 1354 LoopStatement * Entity: AssignStatement 28 1022 Statement * Entity: SequenceStatement 683 1123 Statement * kind int 3 false false false Entity: ConditionalStatement 135 1063 Statement * Entity: CreationStatement 286 1245 Statement * createsInstanceOf String 3 false false false assignsTo String 3 false false false Association: CreationStatement Type 0 270 1266 27 255 1 type null Association: CreationStatement Type 0 268 1279 108 257 1 elementType null Association: AssignStatement Type 0 27 1066 27 255 -1 type null Association: BehaviouralFeature Statement -1 424 32 430 1116 1 activity null Association: ReturnStatement Expression -1 275 1178 200 185 -1 returnValue null Association: UseCase Statement -1 545 28 448 1122 1 classifierBehaviour null Association: UseCase Type 0 545 28 148 222 1 resultType null Association: OperationCallStatement Expression -1 254 1368 175 209 1 callExp null 201 1309 Association: ImplicitCallStatement Expression -1 309 1434 110 206 1 callExp null 180 1400 Association: LoopStatement Expression -1 510 1315 201 198 1 test null 267 1309 Association: AssignStatement Expression -1 32 1043 106 198 1 left null Association: AssignStatement Expression -1 118 1044 124 180 1 right null Association: ConditionalStatement Expression -1 179 1087 179 177 1 test null Association: ConditionalStatement Statement -1 302 1084 367 1122 1 ifPart null 303 120 Association: ConditionalStatement Statement -1 218 1085 367 1139 -1 elsePart null 217 1139 Association: SequenceStatement Statement -1 687 1159 453 1130 0 statements null ordered Association: LoopStatement Statement -1 627 1305 451 1141 1 body null 625 1175 Generalisation: Statement ReturnStatement 383 1179 380 1140 Generalisation: Statement BreakStatement 417 1213 414 1143 Generalisation: Statement OperationCallStatement 439 1365 429 1143 Generalisation: Statement ImplicitCallStatement 467 1416 439 1144 Generalisation: Statement LoopStatement 515 1307 447 1144 Generalisation: LoopStatement BoundedLoopStatement 522 1404 519 1328 Association: BoundedLoopStatement Expression -1 515 1315 211 198 1 loopRange null Association: BoundedLoopStatement Expression -1 520 1315 221 198 1 loopVar null Generalisation: LoopStatement UnboundedLoopStatement 635 1356 634 1327 Generalisation: Statement SequenceStatement 686 1128 451 1124 Generalisation: Statement ConditionalStatement 312 1068 385 1119 383 1067 Generalisation: Statement AssignStatement 164 1034 408 1120 403 1047 Generalisation: Statement CreationStatement 427 1244 422 1142