1 /*++
2 Copyright (c) 2012 Microsoft Corporation
3 
4 Module Name:
5 
6     tactic_manager.h
7 
8 Abstract:
9     Collection of tactics & probes
10 
11 Author:
12 
13     Leonardo (leonardo) 2012-03-06
14 
15 Notes:
16 
17 --*/
18 #pragma once
19 
20 #include "cmd_context/tactic_cmds.h"
21 #include "util/dictionary.h"
22 
23 class tactic_manager {
24 protected:
25     dictionary<tactic_cmd*>  m_name2tactic;
26     dictionary<probe_info*>  m_name2probe;
27     ptr_vector<tactic_cmd>   m_tactics;
28     ptr_vector<probe_info>   m_probes;
29     void finalize_tactic_cmds();
30     void finalize_probes();
31 public:
32     ~tactic_manager();
33 
34     void insert(tactic_cmd * c);
35     void insert(probe_info * p);
36     tactic_cmd * find_tactic_cmd(symbol const & s) const;
37     probe_info * find_probe(symbol const & s) const;
38 
num_tactics()39     unsigned num_tactics() const { return m_tactics.size(); }
num_probes()40     unsigned num_probes() const { return m_probes.size(); }
get_tactic(unsigned i)41     tactic_cmd * get_tactic(unsigned i) const { return m_tactics[i]; }
get_probe(unsigned i)42     probe_info * get_probe(unsigned i) const { return m_probes[i]; }
43 
44     typedef ptr_vector<tactic_cmd>::const_iterator tactic_cmd_iterator;
begin_tactic_cmds()45     tactic_cmd_iterator begin_tactic_cmds() const { return m_tactics.begin(); }
end_tactic_cmds()46     tactic_cmd_iterator end_tactic_cmds() const { return m_tactics.end(); }
47     class tactics_iterator {
48         tactic_manager const& m;
49     public:
tactics_iterator(tactic_manager const & m)50         tactics_iterator(tactic_manager const& m):m(m) {}
begin()51         tactic_cmd_iterator begin() const { return m.begin_tactic_cmds(); }
end()52         tactic_cmd_iterator end() const { return m.end_tactic_cmds(); }
53     };
tactics()54     tactics_iterator tactics() const { return tactics_iterator(*this); }
55 
56     typedef ptr_vector<probe_info>::const_iterator probe_iterator;
begin_probes()57     probe_iterator begin_probes() const { return m_probes.begin(); }
end_probes()58     probe_iterator end_probes() const { return m_probes.end(); }
59 
60     class probes_iterator {
61         tactic_manager const& m;
62     public:
probes_iterator(tactic_manager const & m)63         probes_iterator(tactic_manager const& m):m(m) {}
begin()64         probe_iterator begin() const { return m.begin_probes(); }
end()65         probe_iterator end() const { return m.end_probes(); }
66     };
67 
probes()68     probes_iterator probes() const { return probes_iterator(*this); }
69 
70 };
71 
72 
73 
74 
75