/// <summary> the function will printout one or more templates. This implementation
        /// is slightly different than CLIPS in that it can take one or more
        /// template names. The definition in CLIPS beginners guide states the
        /// function does the following: (ppdeftemplate &lt;deftemplate-name>)
        /// </summary>
        public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
        {
            GenericHashMap <object, object> filter = new GenericHashMap <object, object>();

            if (params_Renamed != null && params_Renamed.Length > 0)
            {
                for (int idx = 0; idx < params_Renamed.Length; idx++)
                {
                    if (params_Renamed[idx] is ValueParam)
                    {
                        Object df = ((ValueParam)params_Renamed[idx]).Value;
                        filter.Put(df, df);
                    }
                }
            }
            List <Object> templ = (List <Object>)engine.CurrentFocus.Templates;
            IEnumerator   itr   = templ.GetEnumerator();

            while (itr.MoveNext())
            {
                ITemplate tp = (ITemplate)itr.Current;
                if (filter.Get(tp.Name) != null)
                {
                    engine.writeMessage(tp.toPPString() + "\r\n", "t");
                }
            }
            return(new DefaultReturnVector());
        }
Пример #2
0
        public void HashPerformance()
        {
            //int[] series = new int[] {1000, 10000, 100000, 1000000, 10000000};
            int[]            series = new int[] { 1000, 10000 };
            HashMapBenchmark util   = new HashMapBenchmark();
            Random           ran    = new Random();

            for (int idx = 0; idx < series.Length; idx++)
            {
                GenericHashMap <object, object> map = util.createHashMap(series[idx]);
                long start = DateTime.Now.Ticks;
                for (int idz = 0; idz < 10000000; idz++)
                {
                    String key = ran.Next(series[idx]).ToString();
                    Object val = map.Get(key);
                }
                long   end     = DateTime.Now.Ticks;
                long   el      = end - start;
                double perOp   = (double)el / 10000000;
                String fstring = (perOp * 1000000).ToString();
                Console.WriteLine("Test for " + series[idx] + " items");
                Console.WriteLine("elapsed time " + el + " millisecond");
                Console.WriteLine("per lookup " + fstring + " nanosecond");
            }
        }
Пример #3
0
        public void GenericHashPerformance()
        {
            //int[] series = new int[] {1000, 10000, 100000, 1000000, 10000000};
            int[]            series = new int[] { 1000, 10000 };
            HashMapBenchmark util   = new HashMapBenchmark();
            Random           ran    = new Random();

            for (int idx = 0; idx < series.Length; idx++)
            {
                GenericHashMap <string, string> map = util.createGenericHashMap(series[idx]);
                long start = DateTime.Now.Ticks;
                for (int idz = 0; idz < 10000000; idz++)
                {
                    String key = ran.Next(series[idx]).ToString();
                    Object val = map.Get(key);
                }

                foreach (IHashMapEntry <string, string> entry in map)
                {
                    string val = entry.Value;
                }

                List <String> keys = new List <String>(map.Count);

                foreach (String key in map.Keys)
                {
                    keys.Add(key);
                    string val = map[key];
                }

                foreach (String val in map.Values)
                {
                    bool yes = map.ContainsValue(val);
                }


                foreach (String key in keys)
                {
                    map.Remove(key);
                }

                long   end     = DateTime.Now.Ticks;
                long   el      = end - start;
                double perOp   = (double)el / 10000000;
                String fstring = (perOp * 1000000).ToString();
                Console.WriteLine("Test for " + series[idx] + " items");
                Console.WriteLine("elapsed time " + el + " millisecond");
                Console.WriteLine("per lookup " + fstring + " nanosecond");
            }
        }
Пример #4
0
 public static IStrategy getStrategy(String key)
 {
     return(registry.Get(key));
 }
Пример #5
0
 /// <summary> the function will printout one or more templates. This implementation
 /// is slightly different than CLIPS in that it can take one or more
 /// template names. The definition in CLIPS beginners guide states the 
 /// function does the following: (ppdeftemplate &lt;deftemplate-name>)
 /// </summary>
 public virtual IReturnVector executeFunction(Rete engine, IParameter[] params_Renamed)
 {
     GenericHashMap<object, object> filter = new GenericHashMap<object, object>();
     if (params_Renamed != null && params_Renamed.Length > 0)
     {
         for (int idx = 0; idx < params_Renamed.Length; idx++)
         {
             if (params_Renamed[idx] is ValueParam)
             {
                 Object df = ((ValueParam) params_Renamed[idx]).Value;
                 filter.Put(df, df);
             }
         }
     }
     List<Object> templ = (List<Object>) engine.CurrentFocus.Templates;
     IEnumerator itr = templ.GetEnumerator();
     while (itr.MoveNext())
     {
         ITemplate tp = (ITemplate) itr.Current;
         if (filter.Get(tp.Name) != null)
         {
             engine.writeMessage(tp.toPPString() + "\r\n", "t");
         }
     }
     return new DefaultReturnVector();
 }
Пример #6
0
 /// <summary> Return the string form of the operator
 /// </summary>
 /// <param name="">opr
 /// </param>
 /// <returns>
 ///
 /// </returns>
 public static String getPPOperator(int opr)
 {
     return((String)OPR_MAP.Get(opr.ToString()));
 }
Пример #7
0
 public virtual Object getBindingValue(string var)
 {
     return(bindings.Get(var));
 }