12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using dnlib.DotNet;
- using HybridCLR.Editor.Meta;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace HybridCLR.Editor.AOT
- {
- public class ConstraintContext
- {
- public class ImplType
- {
- public TypeSig BaseType { get; }
- public List<TypeSig> Interfaces { get; }
- public bool ValueType { get; }
- private readonly int _hash;
- public ImplType(TypeSig baseType, List<TypeSig> interfaces, bool valueType)
- {
- BaseType = baseType;
- Interfaces = interfaces;
- ValueType = valueType;
- _hash = ComputHash();
- }
- public override bool Equals(object obj)
- {
- ImplType o = (ImplType)obj;
- return MetaUtil.EqualsTypeSig(this.BaseType, o.BaseType)
- && MetaUtil.EqualsTypeSigArray(this.Interfaces, o.Interfaces)
- && this.ValueType == o.ValueType;
- }
- public override int GetHashCode()
- {
- return _hash;
- }
- private int ComputHash()
- {
- int hash = 0;
- if (BaseType != null)
- {
- hash = HashUtil.CombineHash(hash, TypeEqualityComparer.Instance.GetHashCode(BaseType));
- }
- if (Interfaces.Count > 0)
- {
- hash = HashUtil.CombineHash(hash, HashUtil.ComputHash(Interfaces));
- }
- return hash;
- }
- }
- public HashSet<ImplType> ImplTypes { get; } = new HashSet<ImplType>();
- public GenericClass ApplyConstraints(GenericClass gc)
- {
- return gc;
- }
- public GenericMethod ApplyConstraints(GenericMethod gm)
- {
- return gm;
- }
- }
- }
|