Exemplo n.º 1
0
 public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
 {
     DefaultReturnVector rv = new DefaultReturnVector();
     if (params_Renamed != null && params_Renamed.Length >= 1)
     {
         for (int idx = 0; idx < params_Renamed.Length; idx++)
         {
             if (params_Renamed[idx] is BoundParam)
             {
                 BoundParam bp = (BoundParam) params_Renamed[idx];
                 Deffact fact = (Deffact) bp.Fact;
                 try
                 {
                     if (bp.ObjectBinding)
                     {
                         engine.retractObject(fact.ObjectInstance);
                     }
                     else
                     {
                         engine.retractFact(fact);
                     }
                     DefaultReturnValue rval = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, true);
                     rv.addReturnValue(rval);
                 }
                 catch (RetractException e)
                 {
                     DefaultReturnValue rval = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, false);
                     rv.addReturnValue(rval);
                 }
             }
             else if (params_Renamed[idx] is ValueParam)
             {
                 Decimal bi = params_Renamed[idx].BigDecimalValue;
                 try
                 {
                     engine.retractById(Decimal.ToInt64(bi));
                     DefaultReturnValue rval = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, true);
                     rv.addReturnValue(rval);
                 }
                 catch (RetractException e)
                 {
                     DefaultReturnValue rval = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, false);
                     rv.addReturnValue(rval);
                 }
             }
         }
     }
     return rv;
 }
Exemplo n.º 2
0
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            bool exec = false;
            if (engine != null && params_Renamed != null && params_Renamed.Length >= 2 && params_Renamed[0].ObjectBinding)
            {
                BoundParam bp = (BoundParam) params_Renamed[0];
                Deffact fact = (Deffact) bp.Fact;
                try
                {
                    // first retract the fact
                    engine.retractFact(fact);
                    // now modify the fact
                    SlotParam[] sp = new SlotParam[params_Renamed.Length - 1];
                    for (int idx = 0; idx < sp.Length; idx++)
                    {
                        IParameter p = params_Renamed[idx + 1];
                        if (p is SlotParam)
                        {
                            sp[idx] = (SlotParam) p;
                        }
                    }
                    fact.updateSlots(engine, convertToSlots(sp, fact.Deftemplate));
                    if (fact.hasBinding())
                    {
                        fact.resolveValues(engine, triggerFacts);
                        fact = fact.cloneFact();
                    }
                    // now assert the fact using the same fact-id
                    engine.assertFact(fact);
                    exec = true;
                }
                catch (RetractException e)
                {
                    engine.writeMessage(e.Message);
                }
                catch (AssertException e)
                {
                    engine.writeMessage(e.Message);
                }
            }

            DefaultReturnVector rv = new DefaultReturnVector();
            DefaultReturnValue rval = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, exec);
            rv.addReturnValue(rval);
            return rv;
        }
Exemplo n.º 3
0
 /// <summary> if all the facts have not expired, the method returns true. If a fact has
 /// expired, the method will retract the fact.
 /// </summary>
 /// <param name="">inx
 /// </param>
 /// <param name="">engine
 /// </param>
 /// <param name="">mem
 /// </param>
 /// <returns>
 /// 
 /// </returns>
 protected internal virtual bool checkFacts(Index inx, Rete engine, IWorkingMemory mem)
 {
     IFact[] facts = inx.Facts;
     bool fresh = true;
     long current = (DateTime.Now.Ticks - 621355968000000000)/10000;
     for (int idx = 0; idx < facts.Length; idx++)
     {
         if (facts[idx] is ITemporalFact)
         {
             TemporalDeffact tf = (TemporalDeffact) facts[idx];
             if (tf.ExpirationTime < current)
             {
                 // the fact has expired
                 fresh = false;
                 try
                 {
                     engine.retractFact(tf);
                 }
                 catch (RetractException e)
                 {
                     // we do nothing
                 }
             }
         }
     }
     return fresh;
 }