public MCNE_PerfectHashtable(int[] keys, MethodCallNode[] values) { count = keys.Length; var length = keys.Length - 1; while (true) { ++length; var was = new bool[length]; bool ok = true; foreach (var key in keys) { var index = key % length; if (was[index]) { ok = false; break; } was[index] = true; } if (ok) { break; } } handles = new int[length]; children = new MethodCallNode[length]; for (int i = 0; i < keys.Length; ++i) { var index = keys[i] % length; handles[index] = keys[i]; children[index] = values[i]; } }
public MethodCallNode StartMethod(int methodId) { var child = edges.Jump(methodId); if (child != null) { return(child); } child = new MethodCallNode(this, methodId); edges = MethodCallNodeEdgesFactory.Create(edges.MethodIds.Concat(new[] { methodId }), edges.Children.Concat(new[] { child })); return(child); }
public MethodCallNode(MethodCallNode parent, int methodId) { this.parent = parent; MethodId = methodId; edges = new MCNE_Empty(); }
public MethodCallTree() { root = new MethodCallNode(null, 0); current = root; startTicks = MethodBaseTracingInstaller.TicksReader(); }