public void AddVertices(WorkBuffer <Vector2> buffer) { var firstEdgeIdx = -1; var prevEdgeidx = -1; var vertices = Vertices; var edges = Edges; var indicies = VertexIndices; var size = buffer.UsedSize; var data = buffer.Data; for (var i = 0; i < size; ++i) { var v = data[i]; var idx = -1; var index = indicies[v]; if (index != null) { idx = (int)index; } if (idx == -1) { vertices.Add(v); idx = vertices.Count - 1; indicies[v] = idx; } if (idx == prevEdgeidx) { continue; } if (i == 0) { firstEdgeIdx = idx; } else { edges.Add(new Int2(prevEdgeidx, idx)); } prevEdgeidx = idx; } if (prevEdgeidx != firstEdgeIdx) { edges.Add(new Int2(prevEdgeidx, firstEdgeIdx)); } }
public void Release <T>(ref WorkBuffer <T> buf) { Stack <object> list; buf.Clear(); if (!Pool.TryGetValue(typeof(T), out list)) { Pool[typeof(T)] = list = new Stack <object>(); } list.Push(buf); buf = null; }
public WorkBuffer <T> Get <T>() { Stack <object> list; WorkBuffer <T> buf = null; if (Pool.TryGetValue(typeof(T), out list)) { if (list.Count > 0) { buf = (WorkBuffer <T>)list.Pop(); } } return(buf ?? new WorkBuffer <T>()); }
public static void Sort <G>(WorkBuffer <G> buf) where G : IComparable <G> { Internals.Sort <G> .QuickSort(buf.PrivateData, 0, buf.PrivateUsedSize - 1); }
public void Get <T>(ref WorkBuffer <T> buf) { buf = Get <T>(); }