From b81bd0506a216150a88d34a97eac5b47110e0159 Mon Sep 17 00:00:00 2001 From: Haven1433 Date: Sat, 3 Sep 2022 21:01:47 -0500 Subject: [PATCH] implement missing method --- src/HexManiac.Core/Models/Runs/TableStreamRun.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs index 79bbd85b..60defe0a 100644 --- a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs +++ b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs @@ -480,7 +480,21 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { public int ExtraLength => 0; public TableStreamRun Append(TableStreamRun run, ModelDelta token, int length) { - throw new NotImplementedException(); + var naturalLength = run.Length; + var newRun = model.RelocateForExpansion(token, run, naturalLength + length * run.ElementLength); + + // add new element data + for (int i = 0; i < run.ElementLength * length; i++) { + var prevIndex = newRun.Start + naturalLength + i - newRun.ElementLength * length; + while (prevIndex < newRun.Start) prevIndex += newRun.ElementLength; + byte prevData = prevIndex >= newRun.Start ? model[prevIndex] : default; + token.ChangeData(model, newRun.Start + naturalLength + i, prevData); + } + + // remove excess element data + for (int i = naturalLength + length * run.ElementLength; i < naturalLength; i++) token.ChangeData(model, newRun.Start + i, 0xFF); + + return new TableStreamRun(model, newRun.Start, run.PointerSources, run.FormatString, run.ElementContent, this, run.ElementCount + length); } public int GetCount(int start, int elementLength, IReadOnlyList pointerSources) {