-- The UML model looks like this, as an instance of the UML metamodel: Integer : PrimitiveType Integer.name = "int" Integer.typeId = "-5" Boolean : PrimitiveType Boolean.name = "boolean" Boolean.typeId = "-1" Real : PrimitiveType Real.name = "double" Real.typeId = "-2" Long : PrimitiveType Long.name = "long" Long.typeId = "-3" String : PrimitiveType String.name = "String" String.typeId = "-4" void : PrimitiveType void.name = "void" void.typeId = "void" A : Entity A.name = "A" A.typeId = "139" A.isAbstract = true "abstract" : A.stereotypes x_A : Property x_A.name = "x" x_A : A.ownedAttribute x_A.type = Integer x_A.elementType = Integer x_A.lower = 1 x_A.upper = 1 B : Entity B.name = "B" B.typeId = "141" y_B : Property y_B.name = "y" y_B : B.ownedAttribute y_B.type = Real y_B.elementType = Real y_B.lower = 1 y_B.upper = 1 C : Entity C.name = "C" C.typeId = "143" z_C : Property z_C.name = "z" z_C : C.ownedAttribute z_C.type = String z_C.elementType = String z_C.lower = 1 z_C.upper = 1 B_A : Generalization B_A.name = "B_A" B_A : A.specialization B_A.general = A B_A : B.generalization B_A.specific = B r0 : Association r0.name = "r0" r0_end2 : Property r0_end2.name = "cr" r0_end2 : B.ownedAttribute r0_end2 : r0.memberEnd r0_end2.lower = 0 SetType6 : CollectionType SetType6.name = "Set" SetType6.elementType = C SetType6.typeId = "145" r0_end2.type = SetType6 r0_end2.upper = -1 B : A.subclasses A : B.superclass -- The corresponding part of the C model is: cstructx_0 : CStruct cstructx_0.name = "A" cstructx_0.isAbstract = true cstructx_0.ctypeId = "A" cstructx_1 : CStruct cstructx_1.name = "B" cstructx_1.isAbstract = false cstructx_1.ctypeId = "B" cstructx_2 : CStruct cstructx_2.name = "C" cstructx_2.isAbstract = false cstructx_2.ctypeId = "C" cmemberx_0 : CMember cmemberx_0.name = "super" cmemberx_0.isKey = false cmemberx_0.multiplicity = "ONE" cmemberx_1 : CMember cmemberx_1.name = "x" cmemberx_1.isKey = false cmemberx_1.multiplicity = "ONE" cmemberx_2 : CMember cmemberx_2.name = "y" cmemberx_2.isKey = false cmemberx_2.multiplicity = "ONE" cmemberx_3 : CMember cmemberx_3.name = "cr" cmemberx_3.isKey = false cmemberx_3.multiplicity = "MANY" cmemberx_4 : CMember cmemberx_4.name = "z" cmemberx_4.isKey = false cmemberx_4.multiplicity = "ONE" cprogramx_0 : CProgram cprimitivetypex_0 : CPrimitiveType cprimitivetypex_0.name = "int" cprimitivetypex_0.ctypeId = "-5" cprimitivetypex_1 : CPrimitiveType cprimitivetypex_1.name = "long" cprimitivetypex_1.ctypeId = "-3" cprimitivetypex_2 : CPrimitiveType cprimitivetypex_2.name = "double" cprimitivetypex_2.ctypeId = "-2" cprimitivetypex_3 : CPrimitiveType cprimitivetypex_3.name = "unsigned char" cprimitivetypex_3.ctypeId = "-1" cprimitivetypex_4 : CPrimitiveType cprimitivetypex_4.name = "char" cprimitivetypex_4.ctypeId = "" cprimitivetypex_5 : CPrimitiveType cprimitivetypex_5.name = "void" cprimitivetypex_5.ctypeId = "void" carraytypex_7 : CArrayType carraytypex_7.duplicates = false carraytypex_7.ctypeId = "145" cpointertypex_0 : CPointerType cpointertypex_0.ctypeId = "-4" cpointertypex_1 : CPointerType cpointertypex_1.ctypeId = "139" cpointertypex_2 : CPointerType cpointertypex_2.ctypeId = "141" cpointertypex_3 : CPointerType cpointertypex_3.ctypeId = "143" cmemberx_1 : cstructx_0.members cmemberx_1 : cstructx_0.allMembers cmemberx_0 : cstructx_1.members cmemberx_2 : cstructx_1.members cmemberx_3 : cstructx_1.members cmemberx_2 : cstructx_1.allMembers cmemberx_3 : cstructx_1.allMembers cmemberx_1 : cstructx_1.allMembers cmemberx_4 : cstructx_2.members cmemberx_4 : cstructx_2.allMembers cmemberx_0.type = cpointertypex_1 cmemberx_1.type = cprimitivetypex_0 cmemberx_2.type = cprimitivetypex_2 cmemberx_3.type = carraytypex_7 cmemberx_4.type = cpointertypex_0 cstructx_0 : cprogramx_0.structs cstructx_1 : cprogramx_0.structs cstructx_2 : cprogramx_0.structs carraytypex_7.componentType = cpointertypex_3 cpointertypex_0.pointsTo = cprimitivetypex_4 cpointertypex_1.pointsTo = cstructx_0 cpointertypex_2.pointsTo = cstructx_1 cpointertypex_3.pointsTo = cstructx_2