private void InnerAddSlot(VFXSlot slot, int index, bool notify)
        {
            var slotList = slot.direction == VFXSlot.Direction.kInput ? m_InputSlots : m_OutputSlots;

            if (!slot.IsMasterSlot())
            {
                throw new ArgumentException("InnerAddSlot expect only a masterSlot");
            }

            if (slot.owner != this as IVFXSlotContainer)
            {
                if (slot.owner != null)
                {
                    slot.owner.RemoveSlot(slot);
                }

                int realIndex = index == -1 ? slotList.Count : index;
                slotList.Insert(realIndex, slot);
                slot.SetOwner(this);
                if (notify)
                {
                    Invalidate(InvalidationCause.kStructureChanged);
                }
            }
        }
        private void InnerRemoveSlot(VFXSlot slot, bool notify)
        {
            var slotList = slot.direction == VFXSlot.Direction.kInput ? m_InputSlots : m_OutputSlots;

            if (!slot.IsMasterSlot())
            {
                throw new ArgumentException();
            }

            if (slot.owner == this as IVFXSlotContainer)
            {
                slotList.Remove(slot);
                slot.SetOwner(null);
                if (notify)
                {
                    Invalidate(InvalidationCause.kStructureChanged);
                }
            }
        }