26
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
namespace Mono.Cecil.Metadata {
29
namespace Mono.Cecil {
31
31
public struct MetadataToken {
36
get { return token & 0x00ffffff; }
40
39
public TokenType TokenType {
41
get { return m_type; }
44
public static readonly MetadataToken Zero = new MetadataToken ((TokenType) 0, 0);
46
public MetadataToken (int token)
48
m_type = (TokenType) (token & 0xff000000);
49
m_rid = (uint) token & 0x00ffffff;
52
public MetadataToken (TokenType table, uint rid)
58
internal static MetadataToken FromMetadataRow (TokenType table, int rowIndex)
60
return new MetadataToken (table, (uint) rowIndex + 1);
65
return (uint) m_type | m_rid;
40
get { return (TokenType) (token & 0xff000000); }
43
public static readonly MetadataToken Zero = new MetadataToken ((uint) 0);
45
public MetadataToken (uint token)
50
public MetadataToken (TokenType type)
55
public MetadataToken (TokenType type, uint rid)
57
token = (uint) type | rid;
60
public MetadataToken (TokenType type, int rid)
62
token = (uint) type | (uint) rid;
70
public uint ToUInt32 ()
68
75
public override int GetHashCode ()
70
return (int) ToUInt ();
73
public override bool Equals (object other)
80
public override bool Equals (object obj)
75
if (other is MetadataToken)
76
return Equals ((MetadataToken) other);
82
if (obj is MetadataToken) {
83
var other = (MetadataToken) obj;
84
return other.token == token;
81
private bool Equals (MetadataToken other)
83
return other.m_rid == m_rid && other.m_type == m_type;
86
90
public static bool operator == (MetadataToken one, MetadataToken other)
88
return one.Equals (other);
92
return one.token == other.token;
91
95
public static bool operator != (MetadataToken one, MetadataToken other)
93
return !one.Equals (other);
97
return one.token != other.token;
96
100
public override string ToString ()
98
return string.Format ("{0} [0x{1}]",
99
m_type, m_rid.ToString ("x4"));
102
return string.Format ("[{0}:0x{1}]", TokenType, RID.ToString ("x4"));