Example #1
0
    public static ArrayList ReadParams(XmlNode funcnode)
    {
        ArrayList fparams = new ArrayList();

        foreach (XmlNode paramnode in funcnode.ChildNodes)
        {
            if (paramnode.NodeType != XmlNodeType.Element)
            {
                continue;
            }

            if (paramnode.Name != "param")
            {
                continue;
            }

            GlParam param = new GlParam();
            param.name    = paramnode.Attributes["name"].Value;
            param.valtype = paramnode.Attributes["valtype"].Value;
            param.gltype  = paramnode.Attributes["type"].Value;
            param.inout   = paramnode.Attributes["inout"].Value;

            // fix bad names
            if (param.name == "params" ||
                param.name == "base" ||
                param.name == "string" ||
                param.name == "ref" ||
                param.name == "object" ||
                param.name == "out" ||
                param.name == "in")
            {
                param.name = "arg_" + param.name;
            }

            fparams.Add(param);
        }

        return(fparams);
    }
Example #2
0
    public static ArrayList GenParamList(ArrayList fparams, int i)
    {
        if (i >= fparams.Count)
        {
            return(null);
        }

        ArrayList results = new ArrayList();
        GlParam   param   = fparams[i] as GlParam;

        ArrayList nextparams = GenParamList(fparams, i + 1);

        if (nextparams == null)
        {
            foreach (string nativetype in param.nativetypes)
            {
                results.Add(new FuncParams(nativetype, param.name, true));
            }
            foreach (string nonclstype in param.nonclstypes)
            {
                results.Add(new FuncParams(nonclstype, param.name, false));
            }
            return(results);
        }

        foreach (FuncParams fp in nextparams)
        {
            foreach (string nativetype in param.nativetypes)
            {
                results.Add(new FuncParams(nativetype, param.name, true, fp));
            }
            foreach (string nonclstype in param.nonclstypes)
            {
                results.Add(new FuncParams(nonclstype, param.name, false, fp));
            }
        }

        return(results);
    }
Example #3
0
    public void ExpandParam(GlParam param)
    {
        ArrayList entries = typeHash[param.gltype] as ArrayList;

        if (entries == null)
        {
            Console.WriteLine("ExpandParam: type '{0}' not found in map!", param.gltype);
            throw new Exception();
        }

        int want_array, want_out;

        if (param.valtype == "array")
        {
            want_array = 1;
        }
        else
        {
            want_array = -1;
        }

        if (param.inout == "out")
        {
            want_out = 1;
        }
        else
        {
            want_out = -1;
        }

        // find the first one that matches
        foreach (GlTypeMapEntry tme in entries)
        {
            if (tme.if_return == 0 &&
                (tme.if_out == 0 || tme.if_out == want_out) &&
                (tme.if_array == 0 || tme.if_array == want_array))
            {
                // found one
                if (tme.is_generic == 1)
                {
                    if (want_out == 1)
                    {
                        param.nativetypes = new ArrayList(outArrayExpansions);
                        param.nonclstypes = new ArrayList(outArrayNonCLSExpansions);
                    }
                    else
                    {
                        param.nativetypes = new ArrayList(inArrayExpansions);
                        param.nonclstypes = new ArrayList(inArrayNonCLSExpansions);
                    }
                }
                else
                {
                    string target       = tme.type;
                    string nonclstarget = tme.nonclstype;
                    param.nativetypes = new ArrayList();
                    param.nonclstypes = new ArrayList();

                    if (want_array == 1)
                    {
                        if (want_out == 1)
                        {
                            if (tme.if_out == 1)
                            {
                                // let the param handle whether it wants "out" or not
                                if (target != null)
                                {
                                    param.nativetypes.Add(target);
                                }
                                if (nonclstarget != null)
                                {
                                    param.nonclstypes.Add(nonclstarget);
                                }
                            }
                            else
                            {
                                // an out array
                                if (target != null)
                                {
                                    param.nativetypes.Add("out " + target);
                                    param.nativetypes.Add("[Out] " + target + " []");
                                }
                                if (nonclstarget != null)
                                {
                                    param.nonclstypes.Add("out " + nonclstarget);
                                    param.nonclstypes.Add("[Out] " + nonclstarget + " []");
                                }
                            }
                        }
                        else
                        {
                            // an in array
                            if (target != null)
                            {
                                param.nativetypes.Add("ref " + target);
                                param.nativetypes.Add(target + " []");
                            }
                            if (nonclstarget != null)
                            {
                                param.nonclstypes.Add("ref " + nonclstarget);
                                param.nonclstypes.Add(nonclstarget + " []");
                            }
                        }
                    }
                    else
                    {
                        if (want_out == 1)
                        {
                            if (tme.if_out == 1)
                            {
                                // let the param handle whether it wants "out" or not
                                if (target != null)
                                {
                                    param.nativetypes.Add(target);
                                }
                                if (nonclstarget != null)
                                {
                                    param.nonclstypes.Add(nonclstarget);
                                }
                            }
                            else
                            {
                                // an out value
                                if (target != null)
                                {
                                    param.nativetypes.Add("out " + target);
                                }
                                if (nonclstarget != null)
                                {
                                    param.nonclstypes.Add("out " + nonclstarget);
                                }
                            }
                        }
                        else
                        {
                            // an in value
                            if (target != null)
                            {
                                param.nativetypes.Add(target);
                            }
                            if (nonclstarget != null)
                            {
                                param.nonclstypes.Add(nonclstarget);
                            }
                        }
                    }
                }

                return;
            }
        }

        Console.WriteLine("ExpandParam: No match found for '{0}'", param.gltype);
        throw new Exception();
    }