Example #1
0
        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));
            }
        }
Example #2
0
        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;
        }
Example #3
0
        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>());
        }
Example #4
0
 public static void Sort <G>(WorkBuffer <G> buf) where G : IComparable <G>
 {
     Internals.Sort <G> .QuickSort(buf.PrivateData, 0, buf.PrivateUsedSize - 1);
 }
Example #5
0
 public void Get <T>(ref WorkBuffer <T> buf)
 {
     buf = Get <T>();
 }