source: trunk/sources/HeuristicLab.Scripting/3.3/CSharpScriptBase.cs @ 10857

Last change on this file since 10857 was 10857, checked in by jkarder, 5 years ago

#2136: implemented review comments from mkommend in comment:32:ticket:2136

File size: 6.2 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.IO;
24using System.Text;
25using HeuristicLab.Common;
26
27namespace HeuristicLab.Scripting {
28  public abstract class CSharpScriptBase {
29    protected dynamic vars;
30
31    private readonly EventWriter console;
32    protected EventWriter Console {
33      get { return console; }
34    }
35
36    protected CSharpScriptBase() {
37      console = new EventWriter(this);
38    }
39
40    public abstract void Main();
41
42    internal void Execute(VariableStore variableStore) {
43      vars = new Variables(variableStore);
44      Main();
45    }
46
47    protected internal event EventHandler<EventArgs<string>> ConsoleOutputChanged;
48    private void OnConsoleOutputChanged(string args) {
49      var handler = ConsoleOutputChanged;
50      if (handler != null) handler(null, new EventArgs<string>(args));
51    }
52
53    protected class EventWriter : TextWriter {
54      private readonly CSharpScriptBase script;
55
56      public EventWriter(CSharpScriptBase script) {
57        this.script = script;
58      }
59
60      public override Encoding Encoding {
61        get { return Encoding.UTF8; }
62      }
63
64      #region Write/WriteLine Overrides
65      #region Write
66      public override void Write(bool value) { script.OnConsoleOutputChanged(value.ToString()); }
67      public override void Write(char value) { script.OnConsoleOutputChanged(value.ToString()); }
68      public override void Write(char[] buffer) { script.OnConsoleOutputChanged(new string(buffer)); }
69      public override void Write(char[] buffer, int index, int count) { script.OnConsoleOutputChanged(new string(buffer, index, count)); }
70      public override void Write(decimal value) { script.OnConsoleOutputChanged(value.ToString()); }
71      public override void Write(double value) { script.OnConsoleOutputChanged(value.ToString()); }
72      public override void Write(float value) { script.OnConsoleOutputChanged(value.ToString()); }
73      public override void Write(int value) { script.OnConsoleOutputChanged(value.ToString()); }
74      public override void Write(long value) { script.OnConsoleOutputChanged(value.ToString()); }
75      public override void Write(object value) { script.OnConsoleOutputChanged(value.ToString()); }
76      public override void Write(string value) { script.OnConsoleOutputChanged(value); }
77      public override void Write(string format, object arg0) { script.OnConsoleOutputChanged(string.Format(format, arg0)); }
78      public override void Write(string format, object arg0, object arg1) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg0)); }
79      public override void Write(string format, object arg0, object arg1, object arg2) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2)); }
80      public override void Write(string format, params object[] arg) { script.OnConsoleOutputChanged(string.Format(format, arg)); }
81      public override void Write(uint value) { script.OnConsoleOutputChanged(value.ToString()); }
82      public override void Write(ulong value) { script.OnConsoleOutputChanged(value.ToString()); }
83      #endregion
84
85      #region WriteLine
86      public override void WriteLine() { script.OnConsoleOutputChanged(Environment.NewLine); }
87      public override void WriteLine(bool value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
88      public override void WriteLine(char value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
89      public override void WriteLine(char[] buffer) { script.OnConsoleOutputChanged(new string(buffer) + Environment.NewLine); }
90      public override void WriteLine(char[] buffer, int index, int count) { script.OnConsoleOutputChanged(new string(buffer, index, count) + Environment.NewLine); }
91      public override void WriteLine(decimal value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
92      public override void WriteLine(double value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
93      public override void WriteLine(float value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
94      public override void WriteLine(int value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
95      public override void WriteLine(long value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
96      public override void WriteLine(object value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
97      public override void WriteLine(string value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
98      public override void WriteLine(string format, object arg0) { script.OnConsoleOutputChanged(string.Format(format, arg0) + Environment.NewLine); }
99      public override void WriteLine(string format, object arg0, object arg1) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg1) + Environment.NewLine); }
100      public override void WriteLine(string format, object arg0, object arg1, object arg2) { script.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2) + Environment.NewLine); }
101      public override void WriteLine(string format, params object[] arg) { script.OnConsoleOutputChanged(string.Format(format, arg) + Environment.NewLine); }
102      public override void WriteLine(uint value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
103      public override void WriteLine(ulong value) { script.OnConsoleOutputChanged(value + Environment.NewLine); }
104      #endregion
105      #endregion
106    }
107  }
108}
Note: See TracBrowser for help on using the repository browser.