コード例 #1
0
        protected Barrier GenerateSubtreeBarrier(int startOffset = 0, BarrierFlags flags = BarrierFlags.None)
        {
            var result      = new SlotDictionary();
            var resultFlags = flags;

            for (var i = NodeIndex + startOffset; i < NextNodeIndex; i++)
            {
                Barrier barrier;
                if (!Result.TryGet(i, out barrier))
                {
                    continue;
                }

                foreach (var slot in barrier.Slots)
                {
                    result[slot.Name] |= slot.Flags;
                }

                resultFlags |= barrier.Flags;
            }

            return(Barrier.New(
                       NodeIndex, resultFlags, result
                       ));
        }
コード例 #2
0
        protected void CreateBarrier(SlotDictionary slots, BarrierFlags flags = BarrierFlags.None)
        {
            Barrier existing;

            if (Result.TryGet(NodeIndex, out existing))
            {
                Result.Remove(existing);

                foreach (var slot in existing.Slots)
                {
                    slots[slot.Name] |= slot.Flags;
                }

                Result.Add(Barrier.New(
                               NodeIndex,
                               flags | existing.Flags,
                               slots
                               ));
            }
            else
            {
                Result.Add(Barrier.New(
                               NodeIndex, flags, slots
                               ));
            }
        }
コード例 #3
0
 public static Barrier New(int node, BarrierFlags flags, SlotDictionary slots)
 {
     return(new Barrier(node, flags, slots.ToArray()));
 }