Exemple #1
0
        public override int LengthForNewRun(IDataModel model, int pointerAddress)
        {
            var tableRun       = GetTable(model, pointerAddress);
            var pointerSegment = GetSegment(tableRun, pointerAddress);

            TableStreamRun.TryParseTableStream(model, -1, new SortedSpan <int>(pointerAddress), pointerSegment.Name, pointerSegment.InnerFormat, tableRun.ElementContent, out var newStream);
            return(newStream.Length);
        }
Exemple #2
0
 public override void UpdateNewRunFromPointerFormat(IDataModel model, ModelDelta token, string name, ref IFormattedRun run)
 {
     if (!TableStreamRun.TryParseTableStream(model, run.Start, run.PointerSources, name, Format, null, out var runAttempt))
     {
         return;
     }
     model.ClearFormat(token, run.Start, runAttempt.Length);
     run = runAttempt;
 }
 public override void UpdateNewRunFromPointerFormat(IDataModel model, ModelDelta token, string name, IReadOnlyList <ArrayRunElementSegment> sourceSegments, int parentIndex, ref IFormattedRun run)
 {
     if (!TableStreamRun.TryParseTableStream(model, run.Start, run.PointerSources, name, Format, null, out var runAttempt))
     {
         return;
     }
     model.ClearFormat(token, run.Start, runAttempt.Length);
     run = runAttempt;
 }
 public override IFormattedRun WriteNewRun(IDataModel owner, ModelDelta token, int source, int destination, string name, IReadOnlyList <ArrayRunElementSegment> sourceSegments)
 {
     // don't bother checking the TryParse result: we very much expect that the data originally in the run won't fit the parse.
     TableStreamRun.TryParseTableStream(owner, destination, new SortedSpan <int>(source), name, Format, sourceSegments, out var tableStream);
     if (TableStreamRun.TryWriteNewEndToken(token, ref tableStream))
     {
         return(tableStream);
     }
     return(tableStream.DeserializeRun("", token));
 }
Exemple #5
0
 public override bool TryAddFormatAtDestination(IDataModel owner, ModelDelta token, int source, int destination, string name, IReadOnlyList <ArrayRunElementSegment> sourceSegments)
 {
     if (TableStreamRun.TryParseTableStream(owner, destination, new SortedSpan <int>(source), name, Format, sourceSegments, out var tsRun))
     {
         if (!(token is NoDataChangeDeltaModel))
         {
             owner.ObserveRunWritten(token, tsRun);
         }
         return(true);
     }
     return(false);
 }
Exemple #6
0
 public override bool TryAddFormatAtDestination(IDataModel owner, ModelDelta token, int source, int destination, string name, IReadOnlyList <ArrayRunElementSegment> sourceSegments, int parentIndex)
 {
     if (TableStreamRun.TryParseTableStream(owner, destination, new SortedSpan <int>(source), name, Format, sourceSegments, out var tsRun))
     {
         if (token is not NoDataChangeDeltaModel)
         {
             // we know that the data format matches, but there may already be a run there that starts sooner
             if (owner.GetNextRun(tsRun.Start) is ITableRun existingTable && existingTable.Start < tsRun.Start)
             {
                 // there is already a format that starts sooner: do nothing, but return true because the format matches
             }
             else
             {
                 owner.ClearFormat(token, tsRun.Start + 1, tsRun.Length - 1);
                 owner.ObserveRunWritten(token, tsRun);
             }
         }
         return(true);
     }