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