Beispiel #1
0
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            String asrt = "";

            if (params_Renamed.Length > 0)
            {
                Deffact fact = null;
                if (params_Renamed[0].Value is Deffact)
                {
                    fact = (Deffact)params_Renamed[0].Value;
                }
                else
                {
                    Deftemplate tmpl = (Deftemplate)engine.CurrentFocus.getTemplate(params_Renamed[0].StringValue);
                    if (tmpl == null)
                    {
                        throw new AssertException("Deftemplate named " + params_Renamed[0].StringValue + " was not found.");
                    }

                    fact = (Deffact)tmpl.createFact((Object[])params_Renamed[1].Value, -1);
                }
                if (fact.hasBinding())
                {
                    fact.resolveValues(engine, triggerFacts);
                    fact = fact.cloneFact();
                }
                try
                {
                    engine.assertFact(fact);
                    // if the fact id is still -1, it means it wasn't asserted
                    // if it was asserted, we return the fact id, otherwise
                    // we return "false".
                    if (fact.FactId > 0)
                    {
                        asrt = fact.FactId.ToString();
                    }
                    else
                    {
                        asrt = "false";
                    }
                }
                catch (AssertException e)
                {
                    // we should log this and output an error
                    asrt = "false";
                }
            }
            else
            {
                asrt = "false";
            }
            DefaultReturnVector ret = new DefaultReturnVector();
            DefaultReturnValue  rv  = new DefaultReturnValue(Constants.STRING_TYPE, asrt);

            ret.addReturnValue(rv);
            return(ret);
        }
Beispiel #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);
        }
Beispiel #3
0
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            DefaultReturnVector ret = new DefaultReturnVector();

            if (params_Renamed != null && params_Renamed.Length == 1)
            {
                String         rlz   = params_Renamed[0].StringValue;
                Defrule        r     = (Defrule)engine.CurrentFocus.findRule(params_Renamed[0].StringValue);
                IList <object> facts = GenerateFacts.generateFacts(r, engine);
                if (facts.Count > 0)
                {
                    try
                    {
                        engine.Watch = WatchType.WATCH_ALL;
                        IEnumerator itr = facts.GetEnumerator();
                        while (itr.MoveNext())
                        {
                            Object data = itr.Current;
                            if (data is Deffact)
                            {
                                engine.assertFact((Deffact)data);
                            }
                            else
                            {
                                engine.assertObject(data, null, false, true);
                            }
                        }
                        engine.fire();
                        engine.UnWatch = WatchType.WATCH_ALL;
                    }
                    catch (AssertException e)
                    {
                        System.Diagnostics.Trace.WriteLine(e.Message);
                    }
                }
            }
            DefaultReturnValue rv = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, true);

            ret.addReturnValue(rv);
            return(ret);
        }
Beispiel #4
0
        public static void main(String[] args)
        {
            String rulefile = "./benchmark_files/4K_rules_50Kdata_sequential.clp";

            //String datafile = "./benchmark_files/test.clp";
            //bool keepopen = false;
            if (args != null && args.Length > 0)
            {
                rulefile = args[0];
            }
            //if (args.Length >= 2)
            //{
            //    if (args[1].Equals("true", StringComparison.InvariantCultureIgnoreCase))
            //    {
            //        keepopen = true;
            //    }
            //}
            Console.WriteLine("Using file " + rulefile);

            MemoryBenchmark2 mb      = new MemoryBenchmark2();
            long             begin   = DateTime.Now.Ticks;
            long             totalET = 0;
            long             parseET = 0;
            ArrayList        facts   = new ArrayList(50000);
            // Runtime rt = Runtime.getRuntime();
            long total1 = GC.GetTotalMemory(true);
            //long free1 = rt.freeMemory();
            //long used1 = total1 - free1;
            int loopcount = 5;

            Console.WriteLine("Used memory before creating engine " + total1 + " bytes " +
                              (total1 / 1024) + " Kb");
            for (int loop = 0; loop < loopcount; loop++)
            {
                Console.WriteLine(" ---------------------------------- ");
                Rete engine = new Rete();
                facts.Clear();

                long total2 = GC.GetTotalMemory(true);
                //long free2 = rt.freeMemory();
                //long used2 = total2 - free2;
                Console.WriteLine("Used memory after creating engine " + total2 + " bytes " +
                                  (total2 / 1024) + " Kb");

                try
                {
                    StreamReader freader = new StreamReader(rulefile);
                    CLIPSParser  parser  = new CLIPSParser(engine, freader);
                    long         start   = DateTime.Now.Ticks;
                    mb.parse(engine, parser, facts);
                    long end = DateTime.Now.Ticks;
                    long el  = end - start;
                    parser.close();
                    //rt.gc();
                    parseET += el;

                    long total3 = GC.GetTotalMemory(true);
                    //long free3 = rt.freeMemory();
                    //long used3 = total3 - free3;
                    Console.WriteLine("Used memory after loading rules, and parsing data " +
                                      (total3 / 1024) + " Kb " + (total3 / 1024 / 1024) + " Mb");
                    Console.WriteLine("elapsed time to parse the rules and data " +
                                      el + " ms");

                    Console.WriteLine("Number of rules: " +
                                      engine.CurrentFocus.RuleCount);
                    // now assert the facts
                    IEnumerator itr    = facts.GetEnumerator();
                    long        start2 = DateTime.Now.Ticks;
                    while (itr.MoveNext())
                    {
                        Deffact fct = (Deffact)itr.Current;
                        engine.assertFact(fct);
                    }
                    int  actCount = engine.ActivationList.size();
                    long end2     = DateTime.Now.Ticks;
                    long et2      = end2 - start2;
                    totalET += et2;
                    // now fire the rules
                    long start3 = 0;
                    long end3   = 0;
                    int  fired  = 0;
                    try
                    {
                        start3 = DateTime.Now.Ticks;
                        fired  = engine.fire();
                        end3   = DateTime.Now.Ticks;
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                    facts.Clear();

                    long total4 = GC.GetTotalMemory(true);
                    //long free4 = rt.freeMemory();
                    //long used4 = total4 - free4;

                    Console.WriteLine("");
                    Console.WriteLine("Number of facts - " + engine.DeffactCount);
                    Console.WriteLine("Time to assert facts " + et2 + " ms");
                    Console.WriteLine("Used memory after assert " +
                                      (total4 / 1024) + " Kb " + (total4 / 1024 / 1024) + " Mb");
                    engine.printWorkingMemory(true, false);
                    Console.WriteLine("number of activations " + actCount);
                    Console.WriteLine("rules fired " + fired);
                    Console.WriteLine("time to fire rules " + (end3 - start3) + " ms");
                }
                catch (FileNotFoundException e)
                {
                    Console.WriteLine(e.Message);
                }
                catch (AssertException e)
                {
                    Console.WriteLine(e.Message);
                }
                engine.close();
                engine = null;
                //rt.gc();engine.close();
            }
            long finished = DateTime.Now.Ticks;

            Console.WriteLine("average parse ET - " + parseET / loopcount + " ms");
            Console.WriteLine("average assert ET - " + totalET / loopcount + " ms");
            Console.WriteLine("total run time " + (finished - begin) + " ms");
        }
Beispiel #5
0
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            DefaultReturnVector rv = new DefaultReturnVector();
            bool loaded            = true;

            if (params_Renamed != null && params_Renamed.Length > 0)
            {
                for (int idx = 0; idx < params_Renamed.Length; idx++)
                {
                    String input = null;
                    if (params_Renamed[idx] is ValueParam)
                    {
                        input = ((ValueParam)params_Renamed[idx]).StringValue;
                    }
                    else if (params_Renamed[idx] is BoundParam)
                    {
                    }
                    if (input.IndexOf((Char)'\\') > -1)
                    {
                        input.Replace("\\", "/");
                    }
                    // check to see if the path is an absolute windows path
                    // or absolute unix path
                    if (input.IndexOf(":") < 0 && !input.StartsWith("/") && !input.StartsWith("./"))
                    {
                        input = "./" + input;
                    }
                    try
                    {
                        Stream inStream = null;
                        if (Regex.IsMatch(input, "^[a-zA-Z]+://.*"))
                        {
                            Uri url = new Uri(input);
                            inStream = ((HttpWebRequest)WebRequest.Create(url)).GetResponse().GetResponseStream();
                            // Otherwise treat it as normal file on the Filesystem
                        }
                        else
                        {
                            inStream = new FileStream(new FileInfo(input).FullName, FileMode.Open, FileAccess.Read);
                        }
                        CLIPSParser parser = new CLIPSParser(inStream);
                        IList       data   = parser.loadExpr();
                        IEnumerator itr    = data.GetEnumerator();
                        while (itr.MoveNext())
                        {
                            Object       val  = itr.Current;
                            ValueParam[] vp   = (ValueParam[])val;
                            Deftemplate  tmpl = (Deftemplate)engine.CurrentFocus.getTemplate(vp[0].StringValue);
                            Deffact      fact = (Deffact)tmpl.createFact((Object[])vp[1].Value, -1);

                            engine.assertFact(fact);
                        }
                    }
                    catch (FileNotFoundException e)
                    {
                        loaded = false;
                        engine.writeMessage(e.Message + Constants.LINEBREAK, Constants.DEFAULT_OUTPUT);
                    }
                    catch (ParseException e)
                    {
                        loaded = false;
                        engine.writeMessage(e.Message + Constants.LINEBREAK, Constants.DEFAULT_OUTPUT);
                    }
                    catch (AssertException e)
                    {
                        loaded = false;
                        engine.writeMessage(e.Message + Constants.LINEBREAK, Constants.DEFAULT_OUTPUT);
                    }
                    catch (IOException e)
                    {
                        loaded = false;
                        engine.writeMessage(e.Message + Constants.LINEBREAK, Constants.DEFAULT_OUTPUT);
                    }
                }
            }
            else
            {
                loaded = false;
            }
            DefaultReturnValue drv = new DefaultReturnValue(Constants.BOOLEAN_OBJECT, loaded);

            rv.addReturnValue(drv);
            return(rv);
        }