EmbASP-CSharp
Handler.cs
1 using System;
2 using System.Collections.Generic;
3 
4 namespace it.unical.mat.embasp.@base
5 {
6  public abstract class Handler
7  {
8  protected internal IDictionary<int, InputProgram> programs;
9  protected internal IDictionary<int, OptionDescriptor> options;
10 
11  public Handler()
12  {
13  programs = new Dictionary<int, InputProgram>();
14  options = new Dictionary<int, OptionDescriptor>();
15  }
16 
17  public virtual int AddOption(OptionDescriptor o)
18  {
19  int last_index = options.Count;
20  int current_value = last_index;
21  options[last_index++] = o;
22  return current_value;
23  }
24 
25  public virtual int AddProgram(InputProgram program)
26  {
27  int last_index = programs.Count;
28  int current_value = last_index;
29  programs[last_index++] = program;
30  return current_value;
31  }
32 
33  protected internal virtual IList<OptionDescriptor> CollectOptions(IList<int> option_index)
34  {
35  IList<OptionDescriptor> input_option = new List<OptionDescriptor>();
36 
37  if (option_index == null)
38  foreach (KeyValuePair<int, OptionDescriptor> option in options)
39  input_option.Add(options[option.Key]);
40  else
41  foreach (int index in option_index)
42  input_option.Add(options[index]);
43  return input_option;
44  }
45 
46  protected internal virtual IList<InputProgram> CollectPrograms(IList<int> program_index)
47  {
48  IList<InputProgram> input_programs = new List<InputProgram>();
49 
50  if (program_index == null)
51  foreach (KeyValuePair<int, InputProgram> program in programs)
52  input_programs.Add(programs[program.Key]);
53  else
54  foreach (int index in program_index)
55  input_programs.Add(programs[index]);
56  return input_programs;
57  }
58 
59  public virtual InputProgram GetInputProgram(int key) => programs[key];
60 
61  public virtual OptionDescriptor GetOptionDescriptor(int key) => options[key];
62 
63  public virtual void RemoveAll()
64  {
65  programs.Clear();
66  options.Clear();
67  }
68 
69  public virtual void RemoveOption(int option_id) => options.Remove(option_id);
70 
71  public virtual bool RemoveOption(OptionDescriptor o)
72  {
73  bool result = false;
74  foreach (KeyValuePair<int, OptionDescriptor> entry in options)
75  if (entry.Value.Equals(o))
76  {
77  options.Remove(entry.Key);
78  result = true;
79  }
80  return result;
81  }
82 
83  public virtual bool RemoveProgram(InputProgram p)
84  {
85  bool result = false;
86  foreach (KeyValuePair<int, InputProgram> entry in programs)
87  if (entry.Value.Equals(p))
88  {
89  programs.Remove(entry.Key);
90  result = true;
91  }
92  return result;
93  }
94 
95  public virtual void RemoveProgram(int program_id) => programs.Remove(program_id);
96 
97  public virtual void StartAsync(ICallback c) => StartAsync(c, (IList<int>)null, (IList<int>)null);
98 
99  public virtual void StartAsync(ICallback c, IList<int> program_index, IList<int> option_index) { }
100 
101  public virtual Output StartSync() => StartSync((IList<int>)null, (IList<int>)null);
102 
103  public virtual Output StartSync(IList<int> program_index, IList<int> option_index) => null;
104  }
105 }
base.ICallback
Definition: Callback.cs:3
base
Definition: Callback.cs:1
it.unical.mat.embasp
Definition: AnswerSet.cs:5
base.OptionDescriptor
Definition: OptionDescriptor.cs:3
base.Output
Definition: Output.cs:5
base.InputProgram
Definition: InputProgram.cs:7
base.Handler
Definition: Handler.cs:6