Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/Extensions.cs @ 14834

Last change on this file since 14834 was 14834, checked in by pkimmesw, 7 years ago

#2665 LexicaseSelector, Performance improvements, UI Fixes, Debugger only shows used stacks, fixed Debugger stepping, Added vector expressions, ERCOptions,

File size: 2.1 KB
Line 
1using System.Collections.Generic;
2using System.Linq;
3
4namespace HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter {
5  using System;
6  using System.Collections;
7  using System.Reflection;
8
9  using Attributes;
10
11  using Stack;
12
13  public static class Extensions {
14    private static readonly IDictionary<StackTypes, PropertyInfo> StackProperties = typeof(PushInterpreter)
15        .GetProperties()
16        .Select(p => new { Property = p, Attribute = p.GetCustomAttribute<PushStackAttribute>() })
17        .Where(x => x.Attribute != null)
18        .ToDictionary(x => x.Attribute.StackType, x => x.Property);
19
20    public static IEnumerable<T> GetStackEntriesByType<T>(this IPushInterpreter interpreter, StackTypes stackType) {
21      return StackProperties.ContainsKey(stackType)
22        ? ((IEnumerable)StackProperties[stackType].GetValue(interpreter)).OfType<T>()
23        : null;
24    }
25
26    public static IPushStackBase GetStackBaseByType(this IPushInterpreter interpreter, StackTypes stackType) {
27      return StackProperties.ContainsKey(stackType)
28        ? (IPushStackBase)StackProperties[stackType].GetValue(interpreter)
29        : null;
30    }
31
32    public static Type GetStackEntryType(this StackTypes stackType) {
33      return StackProperties.ContainsKey(stackType)
34        ? StackProperties[stackType].PropertyType.GetGenericArguments().Single()
35        : null;
36    }
37
38    public static void PrintStacks(this IPushInterpreter interpreter) {
39      var stackTypesType = typeof(StackTypes);
40
41      foreach (StackTypes type in Enum.GetValues(stackTypesType)) {
42        var stackName = Enum.GetName(stackTypesType, type);
43        var stack = GetStackBaseByType(interpreter, type);
44
45        if (stack.IsEmpty || !stack.IsEnabled) return;
46        Console.WriteLine("--------- {0} ---------\n{1}\n", stackName, stack);
47      }
48
49      if (interpreter.CustomExpressions.Count > 0) {
50        Console.WriteLine("--------- Custom Expressions ---------");
51        foreach (var ce in interpreter.CustomExpressions) {
52          Console.WriteLine("{0}: {1}", ce.Key, ce.Value);
53        }
54      }
55    }
56  }
57}
58
Note: See TracBrowser for help on using the repository browser.