예제 #1
0
 private ArgValue GetArgValue(FuncArg arg, IList <ArgValue> values, IEventArgs args)
 {
     if (values != null)
     {
         foreach (ArgValue av in values)
         {
             if (arg.GetName().Equals(av.GetName()))
             {
                 return(av);
             }
         }
     }
     return(new ArgValue(arg.GetName(), FreeUtil.ReplaceVar(arg.GetDefaultValue(), args)));
 }
예제 #2
0
        private void SetArg(FuncArg arg, IList <ArgValue> funcArgs, IEventArgs args)
        {
            ArgValue fa = GetArgValue(arg, funcArgs, args);

            if (fa != null)
            {
                IPara para = ParaUtil.GetPara(arg.GetType());
                if (para != null)
                {
                    try
                    {
                        IPara old = new ParaExp(fa.GetValue()).GetSourcePara(args);
                        if (old != null)
                        {
                            if (old.GetValue() != null)
                            {
                                para = para.Initial("=", old.GetValue().ToString());
                            }
                            else
                            {
                                para = para.Initial("=", string.Empty);
                            }
                        }
                        else
                        {
                            para = para.Initial("=", FreeUtil.ReplaceNumber(fa.GetValue(), args));
                        }
                    }
                    catch (Exception)
                    {
                        para = para.Initial("=", FreeUtil.ReplaceNumber(fa.GetValue(), args));
                    }
                    para.SetName("arg_" + arg.GetName());
                    args.GetDefault().GetParameters().TempUse(para);
                    IPara p = (IPara)para.Borrow();
                    p.SetName(arg.GetName());
                    if (para.GetValue() != null)
                    {
                        p.SetValue("=", para);
                    }
                    args.GetDefault().GetParameters().TempUse(p);
                    FreeLog.FuncArg(p.ToString());
                }
                else
                {
                    // 非简单变量
                    ((BaseEventArgs)args).TempUse(arg.GetName(), args.GetUnit(fa.GetValue()));
                }
            }
        }
예제 #3
0
 private void RemoveArg(FuncArg fa, IEventArgs args)
 {
     if (fa != null)
     {
         string t = fa.GetType();
         if ("string".Equals(t) || "int".Equals(t) || "bool".Equals(t) || "float".Equals(t) || "long".Equals(t) || "double".Equals(t))
         {
             IPara p = args.GetDefault().GetParameters().Get("arg_" + fa.GetName());
             p.Recycle();
             p = args.GetDefault().GetParameters().Get(fa.GetName());
             p.Recycle();
             args.GetDefault().GetParameters().Resume("arg_" + fa.GetName());
             args.GetDefault().GetParameters().Resume(fa.GetName());
         }
         else
         {
             ((BaseEventArgs)args).Resume(fa.GetName());
         }
     }
 }