Example #1
0
        /// <inheritdoc />
        public void MergeAtSubprogram(Snapshot snapshot, List <Snapshot> snapshots, ProgramPointBase[] extendedPoints)
        {
            TrackingMergeStructureWorker structureWorker = new TrackingMergeStructureWorker(Factories, snapshot, snapshots);

            structureWorker.MergeStructure();
            ISnapshotStructureProxy structure = structureWorker.Structure;

            TrackingMergeDataWorker dataWorker = new TrackingMergeDataWorker(Factories, snapshot, structure.Readonly, snapshots);

            dataWorker.MergeData();
            ISnapshotDataProxy data = dataWorker.Data;

            int localLevel       = structure.Readonly.CallLevel;
            var structureTracker = structure.Writeable.WriteableChangeTracker;

            structureTracker.SetCallLevel(localLevel);
            structureTracker.SetConnectionType(TrackerConnectionType.SUBPROGRAM_MERGE);

            var dataTracker = data.Writeable.WriteableChangeTracker;

            dataTracker.SetCallLevel(localLevel);
            dataTracker.SetConnectionType(TrackerConnectionType.SUBPROGRAM_MERGE);

            for (int x = 0; x < snapshots.Count; x++)
            {
                Snapshot callSnapshot  = (Snapshot)extendedPoints[x].OutSet.Snapshot;
                Snapshot mergeAncestor = snapshots[x];

                structureTracker.AddCallTracker(callSnapshot, mergeAncestor.Structure.Readonly.ReadonlyChangeTracker);
                dataTracker.AddCallTracker(callSnapshot, mergeAncestor.Data.Readonly.ReadonlyChangeTracker);
            }

            snapshot.SetMemoryMergeResult(localLevel, structure, data);
        }
Example #2
0
        /// <inheritdoc />
        public void Merge(Snapshot snapshot, List <Snapshot> snapshots)
        {
            TrackingMergeStructureWorker structureWorker = new TrackingMergeStructureWorker(Factories, snapshot, snapshots);

            structureWorker.MergeStructure();
            ISnapshotStructureProxy structure = structureWorker.Structure;

            TrackingMergeDataWorker dataWorker = new TrackingMergeDataWorker(Factories, snapshot, structure.Readonly, snapshots);

            dataWorker.MergeData();
            ISnapshotDataProxy data = dataWorker.Data;

            int localLevel = structure.Readonly.CallLevel;

            structure.Writeable.WriteableChangeTracker.SetCallLevel(localLevel);
            structure.Writeable.WriteableChangeTracker.SetConnectionType(TrackerConnectionType.MERGE);

            data.Writeable.WriteableChangeTracker.SetCallLevel(localLevel);
            data.Writeable.WriteableChangeTracker.SetConnectionType(TrackerConnectionType.MERGE);

            snapshot.SetMemoryMergeResult(localLevel, structure, data);
        }