Пример #1
0
        // Gets the identifier for a portable function.
        public int GetIdentifier(ActionSet actionSet, IWorkshopPortableFunctionIdentifier portableFunction)
        {
            var compatible = GetCompatibleLambda(actionSet.ThisTypeLinker, portableFunction);

            if (compatible != null)
            {
                return(compatible.Identifier);
            }
            return(CreateCompatibleLambda(actionSet.ThisTypeLinker, portableFunction).Identifier);
        }
Пример #2
0
        // Gets a CompatibleLambda that supports the provided type linker and portable function.
        CompatibleLambda GetCompatibleLambda(InstanceAnonymousTypeLinker typeLinker, IWorkshopPortableFunctionIdentifier portableFunction)
        {
            // Iterate through each compatible lambda.
            foreach (var compatibleLambda in _compatibleLambdas)
            {
                // Make sure the keys match and the type linker is compatible..
                if (compatibleLambda.Runner.Key == portableFunction.Key &&
                    compatibleLambda.TypeLinker.Compatible(typeLinker))
                {
                    // This lambda is compatible with the provided lambda.
                    return(compatibleLambda);
                }
            }

            // No compatible lambdas were found.
            return(null);
        }
Пример #3
0
        CompatibleLambda CreateCompatibleLambda(InstanceAnonymousTypeLinker typeLinker, IWorkshopPortableFunctionIdentifier portableFunction)
        {
            var compatibleLambda = new CompatibleLambda(_assignCurrentIdentifier++, portableFunction.CreateRunner(_parameterRecycler), typeLinker);

            _parameterRecycler.Reset();
            _compatibleLambdas.Add(compatibleLambda);
            return(compatibleLambda);
        }