My Project
|
00001 00005 #ifndef SEED_H_ 00006 #define SEED_H_ 00007 00008 #include <set> 00009 #include <iostream> 00010 #include <vector> 00011 00012 #include "density.h" 00013 #include "graph.h" 00014 00022 class seed 00023 { 00024 public: 00025 typedef std::set<directed_t::vertex> vertex_set; 00033 seed(const density<bidirected_t>* dens, const bidirected_t::graph& g); 00041 seed(const density<bidirected_t>* dens, const bidirected_t::graph& g, 00042 bidirected_t::vertex s); 00048 seed(const seed& other); 00054 seed& operator =(const seed& rhs); 00055 00061 bool can_add_vertex(const bidirected_t::vertex& v) const; 00067 bool can_rm_vertex(const bidirected_t::vertex& v) const; 00073 void add_vertex(const bidirected_t::vertex& v); 00079 void rm_vertex(const bidirected_t::vertex& v); 00080 00086 const bidirected_t::edge_name_t& win() const { return win_; }; 00092 const bidirected_t::edge_name_t& wout() const { return wout_; }; 00098 const bidirected_t::graph& graph() const { return *g_; }; 00104 const density<bidirected_t>* dens_func() const { return dens_; }; 00110 const vertex_set& vertices() const { return vertices_; }; 00116 double dens() const { return (*dens_)(win_, wout_, vertices_.size()); }; 00117 00121 void print(); 00122 00123 private: 00131 void find_p(const bidirected_t::vertex& v, 00132 bidirected_t::edge_name_t* p_plus, 00133 bidirected_t::edge_name_t* p_minus, 00134 bidirected_t::edge_name_t* p_not) const; 00135 00136 const bidirected_t::graph* g_; 00137 const density<bidirected_t>* dens_; 00138 bidirected_t::edge_name_t win_; 00139 bidirected_t::edge_name_t wout_; 00140 vertex_set vertices_; 00141 }; 00142 00149 std::vector<seed>* fracture_seed(const seed& S); 00150 00155 void fracture_seed(const seed& S, seed::vertex_set& seen, 00156 seed& P, bidirected_t::vertex v); 00157 00158 #endif