Example #1
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();
        }
Example #2
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();
        }
Example #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AssignWorker"/> class.
        /// </summary>
        /// <param name="factories">The factories.</param>
        /// <param name="snapshot">The snapshot.</param>
        /// <param name="memoryEntryCollector">The memory entry collector.</param>
        /// <param name="treeCollector">The tree collector.</param>
        /// <param name="pathModifications">The path modifications.</param>
        public AssignWorker(ModularMemoryModelFactories factories, Snapshot snapshot, MemoryEntryCollector memoryEntryCollector,
                            TreeIndexCollector treeCollector, MemoryIndexModificationList pathModifications)
            : base(factories, snapshot, treeCollector, pathModifications)
        {
            this.memoryEntryCollector = memoryEntryCollector;

            ForceStrongWrite = false;
            AssignAliasesIntoCollectedIndexes = false;
        }
Example #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AbstractAssignWorker"/> class.
        /// </summary>
        /// <param name="factories">The factories.</param>
        /// <param name="snapshot">The snapshot.</param>
        /// <param name="treeCollector">The tree collector.</param>
        /// <param name="pathModifications">The path modifications.</param>
        public AbstractAssignWorker(ModularMemoryModelFactories factories, Snapshot snapshot,
                                    TreeIndexCollector treeCollector, MemoryIndexModificationList pathModifications)
        {
            Factories = factories;

            this.Snapshot          = snapshot;
            this.treeCollector     = treeCollector;
            this.PathModifications = pathModifications;

            this.Structure = snapshot.Structure.Writeable;
            this.Data      = snapshot.CurrentData.Writeable;
        }
Example #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AliasWorker"/> class.
 /// </summary>
 /// <param name="factories">The factories.</param>
 /// <param name="snapshot">The snapshot.</param>
 /// <param name="treeCollector">The tree collector.</param>
 /// <param name="pathModifications">The path modifications.</param>
 public AliasWorker(ModularMemoryModelFactories factories, Snapshot snapshot, TreeIndexCollector treeCollector, MemoryIndexModificationList pathModifications)
     : base(factories, snapshot, treeCollector, pathModifications)
 {
     EntryCollector = new MemoryEntryCollector(snapshot);
 }