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: Enumeration 469 160 DataType * Entity: Entity 295 292 Classifier * isAbstract boolean 3 false false false isInterface boolean 3 false false false 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 Entity: Association 603 345 Relationship * addOnly boolean 3 false false false aggregation boolean 3 false false false Entity: Generalization 509 248 Relationship * Entity: EnumerationLiteral 374 54 NamedElement * Entity: BehaviouralFeature 8 471 Feature * abstract Entity: Operation 8 527 BehaviouralFeature * isQuery boolean 3 false false false isCached boolean 3 false false false Entity: Constraint 506 567 null * constraintKind int 3 false false false ordered boolean 3 false false false Entity: Expression 338 591 null * abstract Entity: UseCase 661 449 Classifier * isGeneric boolean 3 false false false isDerived boolean 3 false false false Entity: CollectionType 398 92 DataType * Association: Feature Type 0 210 130 262 140 1 type null Association: Entity Property 1 300 292 63 326 0 ownedAttribute owner ordered Association: Association Property -1 604 394 248 392 0 memberEnd null ordered Association: Enumeration EnumerationLiteral -1 568 161 535 79 0 ownedLiteral 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 Expression -1 225 540 395 588 1 precondition null Association: Operation Expression -1 218 581 338 615 1 postcondition null Association: Constraint Expression -1 510 571 406 591 1 condition null Association: Constraint Expression -1 508 620 429 611 1 succedent null Association: Entity Constraint 1 447 348 578 566 0 constraint owner Association: UseCase Constraint -1 668 505 619 565 0 orderedPostconditions null ordered Association: UseCase Constraint -1 788 505 708 593 0 assumptions null 789 593 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: Association Entity -1 605 356 521 348 -1 linkedClass null Association: UseCase UseCase -1 800 451 845 450 0 extensions null 800 423 904 422 Association: UseCase UseCase 0 863 502 877 473 0 inclusions null 862 525 940 526 940 492 Association: CollectionType Type 0 394 98 307 133 1 elementType null 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 Enumeration 471 165 425 163 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: NamedElement EnumerationLiteral 375 62 260 58 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 Entity: CStruct 229 609 CType * name String 3 false true false Operation: toString CStruct String query true result = "struct " + name Entity: CMember 638 619 null * name String 3 false false false Operation: toString CMember String query true result = " " + type + " " + name + ";\n" Entity: CType 399 845 null * abstract ctypeId String 3 false true false Operation: toString CType String query abstract true true Entity: COperation 56 917 null * name String 3 false false false text String 3 false false false Operation: parameterDeclaration COperation String s Sequence(CVariable) query true ( s.size = 0 => result = "" ) & ( s.size = 1 => result = s[1].type + " " + s[1].name ) & ( s.size > 1 => result = s[1].type + " " + s[1].name + ", " + parameterDeclaration(s.tail) ) Operation: toString COperation String query true result = returnType + " " + name + "(" + parameterDeclaration(parameters) + ")\n" + "{ " + text + " }" Entity: CVariable 417 991 null * name String 3 false false false kind String 3 false false false initialisation String 3 false false false Entity: CProgram 58 1049 null * Operation: printMainOperation CProgram void query true "int main() { return 0; }"->display() Operation: printDeclarations CProgram void true true Operation: printOperations CProgram void true true Operation: printProgramHeader CProgram void true "#include "->display() & "#include "->display() & "#include "->display() & "#include "->display() & "#include "->display() & "#include "->display() & "#define ALLOCATIONSIZE 10\n"->display() & "#define TRUE 1"->display() & "#define FALSE 0\n"->display() & ("#include \"ocl.h\"\n")->display() Entity: CPrimitiveType 210 701 CType * name String 3 false false false Operation: toString CPrimitiveType String query true result = name Entity: CArrayType 116 764 CType * duplicates boolean 3 false false false Operation: toString CArrayType String query true result = componentType + "*" Entity: CPointerType 651 764 CType * Operation: toString CPointerType String query true result = pointsTo + "*" Association: CStruct CMember 1 475 646 637 632 0 members null ordered Association: COperation CVariable -1 316 954 420 1008 0 parameters null ordered Association: CVariable CType 0 547 993 537 900 1 type null Association: COperation CType 0 316 917 401 899 1 returnType null Association: CArrayType CType 0 240 820 401 851 1 componentType null 241 847 Association: CPointerType CType 0 751 802 664 858 1 pointsTo null 681 857 Association: CMember CType 0 640 672 555 845 1 type null Association: CProgram COperation 1 143 1051 153 1005 0 operations null Association: CProgram CVariable 1 239 1098 419 1057 0 variables null Association: CProgram CStruct -1 60 1058 231 635 0 structs null 20 955 21 637 Generalisation: CType CStruct 462 663 462 847 Generalisation: CType CPrimitiveType 365 753 439 845 Generalisation: CType CPointerType 660 801 653 846 Generalisation: CType CArrayType 340 802 403 845 GeneralUseCase: printcode false Constraint: null true printProgramHeader() CProgram printcode false Constraint: null true ( "struct " + name + " {" )->display() & members->forAll( m | ( m.type + " " + m.name + ";" )->display() ) & "};\n"->display() CStruct printcode false Constraint: null true ( "struct " + name + "** " + name.toLowerCase + "_instances = NULL;")->display() & ( "int " + name.toLowerCase + "_size = 0;\n" )->display() CStruct printcode false Constraint: null true self->display() COperation printcode false Constraint: null true "main() { }"->display() CProgram 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: null true CPointerType->exists( p | p.ctypeId = typeId & CStruct->exists( c | c.name = name & c.ctypeId = name & p.pointsTo = c ) ) Entity types2C false Constraint: name = "Sequence" null CArrayType->exists( a | a.ctypeId = typeId & a.duplicates = true & a.componentType = CType[elementType.typeId] ) CollectionType types2C false Constraint: name = "Set" null CArrayType->exists( c | c.ctypeId = typeId & c.duplicates = false & c.componentType = CType[elementType.typeId] ) CollectionType types2C false GeneralUseCase: program2C false Constraint: p : ownedAttribute null CStruct->exists( c | c.name = name & CMember->exists( m | m.name = p.name & m.type = CType[p.type.typeId] & m : c.members ) ) Entity program2C false Constraint: null true COperation->exists( op | op.name = 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: null true CMember->exists( m | m.name = "super" & CStruct->exists( sub | sub.name = specific.name & m : sub.members & m.type = CPointerType[general.typeId] ) ) Generalization program2C false Constraint: null true CProgram->exists( p | p.structs = CStruct.allInstances ) null program2C false