You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,90 @@
|
||||
//---------------------------------------------------------------------
|
||||
// <copyright file="KnownAssembliesSet.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//
|
||||
// @owner [....]
|
||||
// @backupOwner [....]
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace System.Data.Metadata.Edm
|
||||
{
|
||||
/// <summary>
|
||||
/// This class is responsible for keeping track of which assemblies we have already
|
||||
/// considered so we don't reconsider them again.
|
||||
///
|
||||
/// The current rules for an assembly to be "seen" is
|
||||
/// 1. It is already in our dictionary
|
||||
/// AND
|
||||
/// 1. We are in attribute loading mode
|
||||
/// OR
|
||||
/// 2. We have seen it already with a non null EdmItemCollection
|
||||
/// OR
|
||||
/// 3. We are seeing it with a null EdmItemCollection this time
|
||||
/// </summary>
|
||||
internal class KnownAssembliesSet
|
||||
{
|
||||
private Dictionary<Assembly, KnownAssemblyEntry> _assemblies;
|
||||
internal KnownAssembliesSet()
|
||||
{
|
||||
_assemblies = new Dictionary<Assembly, KnownAssemblyEntry>();
|
||||
}
|
||||
|
||||
internal KnownAssembliesSet(KnownAssembliesSet set)
|
||||
{
|
||||
_assemblies = new Dictionary<Assembly, KnownAssemblyEntry>(set._assemblies);
|
||||
}
|
||||
|
||||
internal bool TryGetKnownAssembly(Assembly assembly, object loaderCookie, EdmItemCollection itemCollection, out KnownAssemblyEntry entry)
|
||||
{
|
||||
if (!_assemblies.TryGetValue(assembly, out entry))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!entry.HaveSeenInCompatibleContext(loaderCookie, itemCollection))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
internal IEnumerable<Assembly> Assemblies
|
||||
{
|
||||
get { return _assemblies.Keys; }
|
||||
}
|
||||
|
||||
public IEnumerable<KnownAssemblyEntry> GetEntries(object loaderCookie, EdmItemCollection itemCollection)
|
||||
{
|
||||
return _assemblies.Values.Where(e => e.HaveSeenInCompatibleContext(loaderCookie, itemCollection));
|
||||
}
|
||||
|
||||
internal bool Contains(Assembly assembly, object loaderCookie, EdmItemCollection itemCollection)
|
||||
{
|
||||
KnownAssemblyEntry entry;
|
||||
return TryGetKnownAssembly(assembly, loaderCookie, itemCollection, out entry);
|
||||
}
|
||||
|
||||
internal void Add(Assembly assembly, KnownAssemblyEntry knownAssemblyEntry)
|
||||
{
|
||||
KnownAssemblyEntry current;
|
||||
if (_assemblies.TryGetValue(assembly, out current))
|
||||
{
|
||||
Debug.Assert(current.SeenWithEdmItemCollection != knownAssemblyEntry.SeenWithEdmItemCollection &&
|
||||
knownAssemblyEntry.SeenWithEdmItemCollection, "should only be updating if we haven't seen it with an edmItemCollection yet.");
|
||||
_assemblies[assembly] = knownAssemblyEntry;
|
||||
}
|
||||
else
|
||||
{
|
||||
_assemblies.Add(assembly, knownAssemblyEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user