/// <summary> /// Adds the aliases to given index. Alias entry of the given alias indexes are not changed. /// If given memory index contains no aliases new alias entry is created. /// </summary> /// <param name="index">The index.</param> /// <param name="mustAlias">The must alias.</param> /// <param name="mayAlias">The may alias.</param> public void AddAlias(MemoryIndex index, MemoryIndex mustAlias, MemoryIndex mayAlias) { MemoryAliasBuilder alias; if (!memoryAliases.TryGetValue(index, out alias)) { alias = new MemoryAliasBuilder(); } if (mustAlias != null) { alias.AddMustAlias(mustAlias); if (alias.MayAliasses.Contains(mustAlias)) { alias.MayAliasses.Remove(mustAlias); } } if (mayAlias != null && !alias.MustAliasses.Contains(mayAlias)) { alias.AddMayAlias(mayAlias); } memoryAliases[index] = alias; }
/// <summary> /// Adds the aliases to given index. Alias entry of the given alias indexes are not changed. /// If given memory index contains no aliases new alias entry is created. /// </summary> /// <param name="index">The index.</param> /// <param name="mustAliases">The must aliases.</param> /// <param name="mayAliases">The may aliases.</param> public void AddAliases(MemoryIndex index, IEnumerable <MemoryIndex> mustAliases, IEnumerable <MemoryIndex> mayAliases) { MemoryAliasBuilder alias; if (!memoryAliases.TryGetValue(index, out alias)) { alias = new MemoryAliasBuilder(); } if (mustAliases != null) { alias.AddMustAlias(mustAliases); } if (mayAliases != null) { alias.AddMayAlias(mayAliases); } foreach (MemoryIndex mustIndex in alias.MustAliasses) { if (alias.MayAliasses.Contains(mustIndex)) { alias.MayAliasses.Remove(mustIndex); } } memoryAliases[index] = alias; }
/// <summary> /// Initializes a new instance of the <see cref="MemoryAlias"/> class from the builder object. /// </summary> /// <param name="builder">The builder.</param> internal MemoryAlias(MemoryAliasBuilder builder) { MayAliasses = new ReadOnlyCollection <MemoryIndex>(builder.MayAliasses.ToList()); MustAliasses = new ReadOnlyCollection <MemoryIndex>(builder.MustAliasses.ToList()); }