public static float NextFloatArg(CIterator <string> iter) { string arg = NextArg(iter); float value; if (float.TryParse(arg, out value)) { return(value); } throw new CCommandException("Can't parse float arg: '" + arg + "'"); }
public static int NextIntArg(CIterator <string> iter) { string arg = NextArg(iter); int value; if (int.TryParse(arg, out value)) { return(value); } throw new CCommandException("Can't parse int arg: '" + arg + "'"); }
internal static List <object> ResolveInvokeParameters(ParameterInfo[] parameters, string[] invokeArgs) { List <object> list = new List <object>(invokeArgs.Length); CIterator <string> iter = new CIterator <string>(invokeArgs); foreach (ParameterInfo param in parameters) { list.Add(ResolveInvokeParameter(param, iter)); } return(list); }
public static string NextArg(CIterator <string> iter) { if (iter.HasNext()) { string arg = CStringUtils.UnArg(iter.Next()); if (!IsValidArg(arg)) { throw new CCommandException("Invalid arg: " + arg); } return(arg); } throw new CCommandException("Unexpected end of args"); }
public static bool NextBoolArg(CIterator <string> iter) { string arg = NextArg(iter).ToLower(); if (arg == "1" || arg == "yes" || arg == "true") { return(true); } if (arg == "0" || arg == "no" || arg == "false") { return(false); } throw new CCommandException("Can't parse bool arg: '" + arg + "'"); }
public static bool Invoke(object target, MethodInfo method, string[] invokeArgs) { ParameterInfo[] parameters = method.GetParameters(); if (parameters.Length == 0) { return(Invoke(target, method, EMPTY_INVOKE_ARGS)); } List <object> invokeList = new List <object>(invokeArgs.Length); CIterator <string> iter = new CIterator <string>(invokeArgs); foreach (ParameterInfo param in parameters) { invokeList.Add(ResolveInvokeParameter(param, iter)); } return(Invoke(target, method, invokeList.ToArray())); }
private static object ResolveInvokeParameter(ParameterInfo param, CIterator <string> iter) { if (param.IsOptional && !iter.HasNext()) { return(param.DefaultValue); } Type type = param.ParameterType; if (type == typeof(string[])) { List <string> values = new List <string>(); while (iter.HasNext()) { values.Add(NextArg(iter)); } return(values.ToArray()); } if (type == typeof(string)) { return(NextArg(iter)); } if (type == typeof(float)) { return(NextFloatArg(iter)); } if (type == typeof(int)) { return(NextIntArg(iter)); } if (type == typeof(bool)) { return(NextBoolArg(iter)); } if (type == typeof(Vector2)) { float x = NextFloatArg(iter); float y = NextFloatArg(iter); return(new Vector2(x, y)); } if (type == typeof(Vector3)) { float x = NextFloatArg(iter); float y = NextFloatArg(iter); float z = NextFloatArg(iter); return(new Vector3(x, y, z)); } if (type == typeof(Vector4)) { float x = NextFloatArg(iter); float y = NextFloatArg(iter); float z = NextFloatArg(iter); float w = NextFloatArg(iter); return(new Vector4(x, y, z, w)); } if (type == typeof(int[])) { List <int> values = new List <int>(); while (iter.HasNext()) { values.Add(NextIntArg(iter)); } return(values.ToArray()); } if (type == typeof(float[])) { List <float> values = new List <float>(); while (iter.HasNext()) { values.Add(NextFloatArg(iter)); } return(values.ToArray()); } if (type == typeof(bool[])) { List <bool> values = new List <bool>(); while (iter.HasNext()) { values.Add(NextBoolArg(iter)); } return(values.ToArray()); } throw new CCommandException("Unsupported value type: " + type); }