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); }
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); }
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(); }