Skip to content

Commit a53bfa5

Browse files
committed
Added FunctionNode.
1 parent 2772e13 commit a53bfa5

14 files changed

+712
-14
lines changed

CodeGenerator/CSharpCodeGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Text;
66
using ReClassNET.Logger;
77
using ReClassNET.Nodes;
8+
using ReClassNET.Util;
89

910
namespace ReClassNET.CodeGenerator
1011
{
@@ -84,7 +85,7 @@ private IEnumerable<MemberDefinition> YieldMemberDefinitions(IEnumerable<BaseNod
8485
Contract.Ensures(Contract.Result<IEnumerable<MemberDefinition>>() != null);
8586
Contract.Ensures(Contract.ForAll(Contract.Result<IEnumerable<MemberDefinition>>(), d => d != null));
8687

87-
foreach (var member in members.Where(n => !(n is BaseHexNode)))
88+
foreach (var member in members.WhereNot(n => n is BaseHexNode))
8889
{
8990
if (member is BitFieldNode)
9091
{

CodeGenerator/CppCodeGenerator.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Text;
66
using ReClassNET.Logger;
77
using ReClassNET.Nodes;
8+
using ReClassNET.Util;
89

910
namespace ReClassNET.CodeGenerator
1011
{
@@ -48,7 +49,7 @@ public string GenerateCode(IEnumerable<ClassNode> classes, ILogger logger)
4849
sb.AppendLine(
4950
string.Join(
5051
"\n\n",
51-
OrderByInheritance(classes).Select(c =>
52+
OrderByInheritance(classes.Where(c => c.Nodes.None(n => n is FunctionNode))).Select(c =>
5253
{
5354
var csb = new StringBuilder();
5455
csb.Append($"class {c.Name}");
@@ -74,7 +75,7 @@ public string GenerateCode(IEnumerable<ClassNode> classes, ILogger logger)
7475
csb.AppendLine(
7576
string.Join(
7677
"\n",
77-
YieldMemberDefinitions(c.Nodes.Skip(skipFirstMember ? 1 : 0), logger)
78+
YieldMemberDefinitions(c.Nodes.Skip(skipFirstMember ? 1 : 0).WhereNot(n => n is FunctionNode), logger)
7879
.Select(m => MemberDefinitionToString(m))
7980
.Select(s => "\t" + s)
8081
)
@@ -92,6 +93,18 @@ public string GenerateCode(IEnumerable<ClassNode> classes, ILogger logger)
9293
);
9394
}
9495

96+
var functions = classes.SelectMany(c2 => c2.Nodes).OfType<FunctionNode>().Where(f => f.BelongsToClass == c);
97+
if (functions.Any())
98+
{
99+
csb.AppendLine();
100+
csb.AppendLine(
101+
string.Join(
102+
"\n",
103+
functions.Select(f => $"\t{f.Signature} {{ }}")
104+
)
105+
);
106+
}
107+
95108
csb.Append($"}}; //Size: 0x{c.MemorySize:X04}");
96109
return csb.ToString();
97110
})
@@ -145,7 +158,7 @@ private IEnumerable<MemberDefinition> YieldMemberDefinitions(IEnumerable<BaseNod
145158
int fill = 0;
146159
int fillStart = 0;
147160

148-
foreach (var member in members.Where(m => !(m is VTableNode)))
161+
foreach (var member in members.WhereNot(m => m is VTableNode))
149162
{
150163
if (member is BaseHexNode)
151164
{

DataExchange/ReClassFile.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,8 @@ public override int Draw(ViewInfo view, int x, int y)
381381
typeof(UTF8TextPtrNode),
382382
typeof(UTF16TextPtrNode),
383383
typeof(BitFieldNode),
384-
typeof(UInt64Node)
384+
typeof(UInt64Node),
385+
typeof(FunctionNode)
385386
};
386387

387388
#endregion

DataExchange/ReClassNetFile.Read.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,17 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
171171
TryGetAttributeValue(element, XmlBitsAttribute, out bits, logger);
172172
bitFieldNode.Bits = bits;
173173
}
174+
var functionNode = node as FunctionNode;
175+
if (functionNode != null)
176+
{
177+
functionNode.Signature = element.Attribute(XmlSignatureAttribute)?.Value ?? string.Empty;
178+
179+
var reference = NodeUuid.FromBase64String(element.Attribute(XmlReferenceAttribute)?.Value, false);
180+
if (project.ContainsClass(reference))
181+
{
182+
functionNode.BelongsToClass = project.GetClassByUuid(reference);
183+
}
184+
}
174185

175186
yield return node;
176187
}

DataExchange/ReClassNetFile.Write.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,13 @@ private IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> nodes, IL
120120
{
121121
element.SetAttributeValue(XmlBitsAttribute, bitFieldNode.Bits);
122122
}
123+
var functionNode = node as FunctionNode;
124+
if (functionNode != null)
125+
{
126+
var uuid = functionNode.BelongsToClass == null ? NodeUuid.Zero : functionNode.BelongsToClass.Uuid;
127+
element.SetAttributeValue(XmlReferenceAttribute, uuid.ToBase64String());
128+
element.SetAttributeValue(XmlSignatureAttribute, functionNode.Signature);
129+
}
123130

124131
yield return element;
125132
}

DataExchange/ReClassNetFile.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public partial class ReClassNetFile : IReClassImport, IReClassExport
3737
public const string XmlCountAttribute = "count";
3838
public const string XmlBitsAttribute = "bits";
3939
public const string XmlLengthAttribute = "length";
40+
public const string XmlSignatureAttribute = "signature";
4041

4142
private ReClassNetProject project;
4243

@@ -49,13 +50,15 @@ public ReClassNetFile(ReClassNetProject project)
4950

5051
private static Dictionary<string, Type> BuildInStringToTypeMap = new Type[]
5152
{
53+
typeof(BoolNode),
5254
typeof(BitFieldNode),
5355
typeof(ClassInstanceArrayNode),
5456
typeof(ClassInstanceNode),
5557
typeof(ClassPtrArrayNode),
5658
typeof(ClassPtrNode),
5759
typeof(DoubleNode),
5860
typeof(FloatNode),
61+
typeof(FunctionNode),
5962
typeof(FunctionPtrNode),
6063
typeof(Hex8Node),
6164
typeof(Hex16Node),

Forms/ProcessMemoryViewForm.Designer.cs

Lines changed: 227 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)