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