79 lines
1.8 KiB
C#
79 lines
1.8 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using ModestTree;
|
|
|
|
namespace Zenject
|
|
{
|
|
[DebuggerStepThrough]
|
|
public struct BindingId : IEquatable<BindingId>
|
|
{
|
|
Type _type;
|
|
object _identifier;
|
|
|
|
public BindingId(Type type, object identifier)
|
|
{
|
|
_type = type;
|
|
_identifier = identifier;
|
|
}
|
|
|
|
public Type Type
|
|
{
|
|
get { return _type; }
|
|
set { _type = value; }
|
|
}
|
|
|
|
public object Identifier
|
|
{
|
|
get { return _identifier; }
|
|
set { _identifier = value; }
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
if (_identifier == null)
|
|
{
|
|
return _type.PrettyName();
|
|
}
|
|
|
|
return "{0} (ID: {1})".Fmt(_type, _identifier);
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
unchecked // Overflow is fine, just wrap
|
|
{
|
|
int hash = 17;
|
|
hash = hash * 29 + _type.GetHashCode();
|
|
hash = hash * 29 + (_identifier == null ? 0 : _identifier.GetHashCode());
|
|
return hash;
|
|
}
|
|
}
|
|
|
|
public override bool Equals(object other)
|
|
{
|
|
if (other is BindingId)
|
|
{
|
|
BindingId otherId = (BindingId)other;
|
|
return otherId == this;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public bool Equals(BindingId that)
|
|
{
|
|
return this == that;
|
|
}
|
|
|
|
public static bool operator ==(BindingId left, BindingId right)
|
|
{
|
|
return left.Type == right.Type && Equals(left.Identifier, right.Identifier);
|
|
}
|
|
|
|
public static bool operator !=(BindingId left, BindingId right)
|
|
{
|
|
return !left.Equals(right);
|
|
}
|
|
}
|
|
}
|