00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_GRAPH_ATTRIBUTE_REPRESENTATIVE_HH
00027 # define MLN_GRAPH_ATTRIBUTE_REPRESENTATIVE_HH
00028
00035
00036
00037 # include <mln/core/concept/graph.hh>
00038 # include <mln/util/array.hh>
00039
00040
00041 namespace mln
00042 {
00043
00044 namespace graph
00045 {
00046
00047 namespace attribute
00048 {
00049
00052 struct representative_t;
00053
00055 extern representative_t representative;
00056
00057 # ifndef MLN_INCLUDE_ONLY
00058
00063 struct representative_t
00064 {
00066 typedef util::array<unsigned> result;
00067
00068 template <typename G>
00069 void init(const Graph<G>& g)
00070 {
00071 data.resize(0);
00072 deja_vu_.resize(exact(g).v_nmax());
00073 deja_vu_.fill(false);
00074 }
00075
00076 bool to_be_treated(unsigned id)
00077 { return !deja_vu_[id]; }
00078
00079 void new_component_from_vertex(unsigned id)
00080 {
00081 data.append(id);
00082 deja_vu_[id] = true;
00083 }
00084
00085 void process_vertex(unsigned)
00086 {}
00087
00088 bool to_be_queued(unsigned id)
00089 { return !deja_vu_[id]; }
00090
00091 void added_to_queue(unsigned id)
00092 {
00093 deja_vu_[id] = true;
00094 }
00095
00096 void next_component()
00097 {}
00098
00099 void final()
00100 {}
00101
00102 util::array<bool> deja_vu_;
00103 util::array<unsigned> data;
00104 };
00105
00106 representative_t representative;
00107
00108
00109 # endif // ! MLN_INCLUDE_ONLY
00110
00111
00112 }
00113
00114 }
00115
00116 }
00117
00118
00119 #endif // ! MLN_GRAPH_ATTRIBUTE_REPRESENTATIVE_HH