Bind.FuncProcessor.WrapParameters C# (CSharp) Method

WrapParameters() public static method

public static WrapParameters ( Function func, EnumCollection enums ) : IEnumerable
func Function
enums EnumCollection
return IEnumerable
        public static IEnumerable<Function> WrapParameters(Function func, EnumCollection enums)
        {
            Function f;

            if (func.Parameters.HasPointerParameters)
            {
                Function _this = new Function(func);
                // Array overloads
                foreach (Parameter p in _this.Parameters)
                {
                    if (p.WrapperType == WrapperTypes.ArrayParameter && p.ElementCount != 1)
                    {
                        p.Reference = false;
                        p.Array++;
                        p.Pointer--;
                    }
                }
                f = new Function(_this);
                CreateBody(f, false, enums);
                yield return f;
                foreach (var w in WrapVoidPointers(new Function(f), enums))
                    yield return w;

                _this = new Function(func);
                // Reference overloads
                foreach (Parameter p in _this.Parameters)
                {
                    if (p.WrapperType == WrapperTypes.ArrayParameter)
                    {
                        p.Reference = true;
                        p.Array--;
                        p.Pointer--;
                    }
                }
                f = new Function(_this);
                CreateBody(f, false, enums);
                yield return f;
                foreach (var w in WrapVoidPointers(new Function(f), enums))
                    yield return w;

                _this = func;
                // Pointer overloads
                // Should be last to work around Intellisense bug, where
                // array overloads are not reported if there is a pointer overload.
                foreach (Parameter p in _this.Parameters)
                {
                    if (p.WrapperType == WrapperTypes.ArrayParameter)
                    {
                        p.Reference = false;
                        //p.Array--;
                        //p.Pointer++;
                    }
                }
                f = new Function(_this);
                CreateBody(f, false, enums);
                yield return f;
                foreach (var w in WrapVoidPointers(new Function(f), enums))
                    yield return w;
            }
            else
            {
                f = new Function(func);
                CreateBody(f, false, enums);
                yield return f;
            }
        }