internal protected T SubchannelsInternal()

in ExpressionBuilder/ExpressionBuilder/ExpressionNodes/ExpressionBuilder.ExpressionNode.cs [395:433]


        internal protected T SubchannelsInternal<T>(params string[] subchannels) where T : class
        {
            ExpressionNodeType swizzleNodeType = ExpressionNodeType.Swizzle;
            T newNode;

            switch (subchannels.GetLength(0))
            {
                case 1:
                    newNode = ExpressionFunctions.Function<ScalarNode>(swizzleNodeType, this) as T;
                    break;

                case 2:
                    newNode = ExpressionFunctions.Function<Vector2Node>(swizzleNodeType, this) as T;
                    break;

                case 3:
                    newNode = ExpressionFunctions.Function<Vector3Node>(swizzleNodeType, this) as T;
                    break;

                case 4:
                    newNode = ExpressionFunctions.Function<Vector4Node>(swizzleNodeType, this) as T;
                    break;

                case 6:
                    newNode = ExpressionFunctions.Function<Matrix3x2Node>(swizzleNodeType, this) as T;
                    break;

                case 16:
                    newNode = ExpressionFunctions.Function<Matrix4x4Node>(swizzleNodeType, this) as T;
                    break;

                default:
                    throw new Exception($"Invalid subchannel count ({subchannels.GetLength(0)})");
            }

            (newNode as ExpressionNode)._subchannels = subchannels;

            return newNode;
        }