Added type size to custom attributes
This commit is contained in:
@@ -98,6 +98,8 @@ namespace CodeGenerator {
|
|||||||
//Add the class to the namespace
|
//Add the class to the namespace
|
||||||
ns.Types.Add(ctd);
|
ns.Types.Add(ctd);
|
||||||
|
|
||||||
|
var totalSize = 0;
|
||||||
|
|
||||||
//Add the fields to the class
|
//Add the fields to the class
|
||||||
Log($"Fields: {type.Fields.Count}");
|
Log($"Fields: {type.Fields.Count}");
|
||||||
for (var index = 0; index < type.Fields.Count; index++) {
|
for (var index = 0; index < type.Fields.Count; index++) {
|
||||||
@@ -113,10 +115,17 @@ namespace CodeGenerator {
|
|||||||
Log($"Generating field {field.Name}");
|
Log($"Generating field {field.Name}");
|
||||||
cmf = CreateMemberField(field);
|
cmf = CreateMemberField(field);
|
||||||
}
|
}
|
||||||
cmf.CustomAttributes.Add(GenerateDNAFieldAttribute(index, field, field.M_Parent.M_Parent));
|
|
||||||
|
var size = 0;
|
||||||
|
var attributes = GenerateDNAFieldAttribute(index, field, field.M_Parent.M_Parent, out size);
|
||||||
|
totalSize += size;
|
||||||
|
|
||||||
|
cmf.CustomAttributes.Add(attributes);
|
||||||
ctd.Members.Add(cmf);
|
ctd.Members.Add(cmf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctd.CustomAttributes[0].Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression(totalSize)));
|
||||||
|
|
||||||
Log("Generating Parameterless constructor");
|
Log("Generating Parameterless constructor");
|
||||||
if(ctd.Members.Count > 0)
|
if(ctd.Members.Count > 0)
|
||||||
ctd.Members.Add(GenerateParameterlessConstructor(type, ctd));
|
ctd.Members.Add(GenerateParameterlessConstructor(type, ctd));
|
||||||
@@ -330,17 +339,41 @@ namespace CodeGenerator {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
ctd.Members.Add(cmp);
|
ctd.Members.Add(cmp);
|
||||||
|
|
||||||
|
cmf = new CodeMemberField(typeof(int), "_size") {
|
||||||
|
Attributes = MemberAttributes.Private
|
||||||
|
};
|
||||||
|
|
||||||
|
ctd.Members.Add(cmf);
|
||||||
|
|
||||||
|
cmp = new CodeMemberProperty() {
|
||||||
|
Name = "Size",
|
||||||
|
Type = new CodeTypeReference(typeof(int)),
|
||||||
|
Attributes = MemberAttributes.Public,
|
||||||
|
HasGet = true,
|
||||||
|
GetStatements = {
|
||||||
|
new CodeMethodReturnStatement(new CodeSnippetExpression("_size"))
|
||||||
|
},
|
||||||
|
HasSet = true,
|
||||||
|
SetStatements = {
|
||||||
|
new CodeAssignStatement(new CFieldRefExp(new CThisRefExp(), "_size"), new CArgRefExp("value"))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ctd.Members.Add(cmp);
|
||||||
|
|
||||||
var cc = new CodeConstructor() { Attributes = MemberAttributes.Public };
|
var cc = new CodeConstructor() { Attributes = MemberAttributes.Public };
|
||||||
|
|
||||||
cc.Parameters.AddRange(new CParamDeclExp[] {
|
cc.Parameters.AddRange(new CParamDeclExp[] {
|
||||||
new(typeof(int), "originalIndex"),
|
new(typeof(int), "originalIndex"),
|
||||||
new(typeof(string), "originalName")
|
new(typeof(string), "originalName"),
|
||||||
|
new(typeof(int), "size")
|
||||||
});
|
});
|
||||||
|
|
||||||
cc.Statements.AddRange(new CodeAssignStatement[] {
|
cc.Statements.AddRange(new CodeAssignStatement[] {
|
||||||
new(new CFieldRefExp(new CThisRefExp(), "OriginalIndex"), new CArgRefExp("originalIndex")),
|
new(new CFieldRefExp(new CThisRefExp(), "OriginalIndex"), new CArgRefExp("originalIndex")),
|
||||||
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName"))
|
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")),
|
||||||
|
new(new CFieldRefExp(new CThisRefExp(), "Size"), new CArgRefExp("size"))
|
||||||
});
|
});
|
||||||
|
|
||||||
ctd.Members.Add(cc);
|
ctd.Members.Add(cc);
|
||||||
@@ -348,15 +381,15 @@ namespace CodeGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static CodeAttributeDeclaration GenerateDNAFieldAttribute(int index, BlendFile.DnaField field,
|
private static CodeAttributeDeclaration GenerateDNAFieldAttribute(int index, BlendFile.DnaField field,
|
||||||
BlendFile.Dna1Body body) {
|
BlendFile.Dna1Body body, out int size) {
|
||||||
string t;
|
string t;
|
||||||
int size = body.Lengths[field.IdxType];
|
size = body.Lengths[field.IdxType];
|
||||||
|
|
||||||
bool isPointer = false;
|
bool isPointer = false;
|
||||||
|
|
||||||
if (field.Name.StartsWith('*'))
|
if (field.Name.StartsWith('*'))
|
||||||
{
|
{
|
||||||
size = 4;
|
size = 8;
|
||||||
isPointer = true;
|
isPointer = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user