Пример #1
0
        /// <inheritdoc />
        public void Assign(Snapshot snapshot, MemoryPath path, MemoryEntry value, bool forceStrongWrite)
        {
            if (snapshot.AssignInfo == null)
            {
                snapshot.AssignInfo = new AssignInfo();
            }
            MemoryIndexModificationList pathModifications = snapshot.AssignInfo.GetOrCreatePathModification(path);

            // Collecting all sources of the data
            MemoryEntryCollector entryCollector = new MemoryEntryCollector(snapshot);

            entryCollector.ProcessRootMemoryEntry(value);

            // Collecting all locations where to assign into
            TreeIndexCollector treeCollector = new TreeIndexCollector(snapshot);

            treeCollector.PostProcessAliases = true;
            treeCollector.ProcessPath(path);

            // Provides an assign operation
            AssignWorker worker = new AssignWorker(Factories, snapshot, entryCollector, treeCollector, pathModifications);

            worker.ForceStrongWrite = forceStrongWrite;
            worker.Assign();
        }
Пример #2
0
        /// <inheritdoc />
        public void AssignAlias(Snapshot snapshot, MemoryPath targetPath, MemoryPath sourcePath)
        {
            if (snapshot.AssignInfo == null)
            {
                snapshot.AssignInfo = new AssignInfo();
            }

            // Collects memory location of alias sources
            TreeIndexCollector aliasSourcesCollector = new TreeIndexCollector(snapshot);

            aliasSourcesCollector.ProcessPath(sourcePath);

            // Creates missing source locations and collect source data
            AliasWorker aliasWorker = new AliasWorker(Factories, snapshot, aliasSourcesCollector, snapshot.AssignInfo.AliasAssignModifications);

            aliasWorker.CollectAliases();

            // Collects target locations
            TreeIndexCollector aliasTargetCollector = new TreeIndexCollector(snapshot);

            aliasTargetCollector.ProcessPath(targetPath);

            // Creates missing target locations, create aliases and assign source data
            AssignWorker assignWorker = new AssignWorker(Factories, snapshot, aliasWorker.EntryCollector, aliasTargetCollector, snapshot.AssignInfo.AliasAssignModifications);

            assignWorker.AssignAliasesIntoCollectedIndexes = true;
            assignWorker.Assign();
        }
Пример #3
0
        /// <inheritdoc />
        public void Assign(Snapshot snapshot, Memory.MemoryPath path, AnalysisFramework.Memory.MemoryEntry value, bool forceStrongWrite)
        {
            TemporaryIndex            temporaryIndex = snapshot.CreateTemporary();
            MergeWithinSnapshotWorker mergeWorker    = new MergeWithinSnapshotWorker(snapshot);

            mergeWorker.MergeMemoryEntry(temporaryIndex, value);

            AssignCollector collector = new AssignCollector(snapshot);

            collector.ProcessPath(path);

            if (forceStrongWrite)
            {
                collector.SetAllToMust();
            }

            AssignWorker worker = new AssignWorker(snapshot);

            worker.Assign(collector, temporaryIndex);

            snapshot.ReleaseTemporary(temporaryIndex);
        }