48 lines
1.2 KiB
C#
48 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace Tracing
|
|
{
|
|
public class AddressStack
|
|
{
|
|
// the first frame is the address of the last called method
|
|
private readonly List<ulong> _stack;
|
|
|
|
public AddressStack( int capacity )
|
|
{
|
|
_stack = new List<ulong>( capacity );
|
|
}
|
|
|
|
// No need to override GetHashCode because we don't want to use it as a key in a dictionary
|
|
public override bool Equals( object obj )
|
|
{
|
|
if( obj == null )
|
|
return false;
|
|
|
|
var stack = obj as AddressStack;
|
|
if( stack == null )
|
|
return false;
|
|
|
|
var frameCount = _stack.Count;
|
|
if( frameCount != stack._stack.Count )
|
|
return false;
|
|
|
|
for( int i = 0; i < frameCount; i++ )
|
|
{
|
|
if( _stack[i] != stack._stack[i] )
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public override int GetHashCode() => _stack.GetHashCode();
|
|
|
|
public IReadOnlyList<ulong> Stack => _stack;
|
|
|
|
public void AddFrame( ulong address )
|
|
{
|
|
_stack.Add( address );
|
|
}
|
|
}
|
|
}
|