---
milena/mln/util/internal/graph_edge.hh | 30 +++++++++++++++++++++++++-----
milena/mln/util/internal/graph_vertex.hh | 20 ++++++++++++++++++++
2 files changed, 45 insertions(+), 5 deletions(-)
diff --git a/milena/mln/util/internal/graph_edge.hh
b/milena/mln/util/internal/graph_edge.hh
index 24bb716..18f9858 100644
--- a/milena/mln/util/internal/graph_edge.hh
+++ b/milena/mln/util/internal/graph_edge.hh
@@ -69,7 +69,10 @@ namespace mln
void update_id(unsigned id);
/// Return pointer of the graph holding this edge.
- const graph_t * const g() const;
+ const graph_t * g() const;
+
+ /// Set \att g_ with \p g;
+ void change_graph(const graph_t& g);
/// \}
@@ -99,7 +102,7 @@ namespace mln
/// \}
private:
- graph_t * const g_;
+ graph_t * g_;
unsigned id_;
};
@@ -123,7 +126,7 @@ namespace mln
struct subject_impl< const util::edge<G>, E >
{
unsigned id() const;
- const mlc_const(G) * const g() const;
+ const mlc_const(G) * g() const;
unsigned v_other(unsigned id_v) const;
bool is_valid() const;
unsigned v1() const;
@@ -141,6 +144,7 @@ namespace mln
subject_impl< const util::edge<G>, E >
{
void update_id(unsigned id);
+ void change_graph(const mlc_const(G)& g);
private:
E& exact_();
@@ -199,7 +203,7 @@ namespace mln
template <typename G>
inline
- const typename edge<G>::graph_t * const
+ const typename edge<G>::graph_t *
edge<G>::g() const
{
return g_;
@@ -207,6 +211,14 @@ namespace mln
template <typename G>
inline
+ void
+ edge<G>::change_graph(const graph_t& g)
+ {
+ g_ = & g;
+ }
+
+ template <typename G>
+ inline
unsigned
edge<G>::v_other(unsigned id_v) const
{
@@ -303,7 +315,7 @@ namespace mln
template <typename G, typename E>
inline
- const mlc_const(G) * const
+ const mlc_const(G) *
subject_impl< const util::edge<G>, E >::g() const
{
return exact_().get_subject().g();
@@ -370,6 +382,14 @@ namespace mln
return exact_().get_subject().update_id(id);
}
+ template <typename G, typename E>
+ inline
+ void
+ subject_impl< util::edge<G>, E >::change_graph(const mlc_const(G)&
g)
+ {
+ return exact_().get_subject().change_graph(&g);
+ }
+
} // End of namespace mln::internal
# endif // !MLN_INCLUDE_ONLY
diff --git a/milena/mln/util/internal/graph_vertex.hh
b/milena/mln/util/internal/graph_vertex.hh
index 02dee6d..8d35282 100644
--- a/milena/mln/util/internal/graph_vertex.hh
+++ b/milena/mln/util/internal/graph_vertex.hh
@@ -56,6 +56,8 @@ namespace mln
/// Check whether the vertex is still part of the graph.
bool is_valid() const;
+ /// Invalidate that vertex.
+ void invalidate();
unsigned other(unsigned id_e) const;
@@ -118,6 +120,7 @@ namespace mln
struct subject_impl< util::vertex<G>, E > :
subject_impl< const util::vertex<G>, E >
{
+ void invalidate();
void change_graph(const G& g);
void update_id(unsigned id);
@@ -171,6 +174,15 @@ namespace mln
template<typename G>
inline
+ void
+ vertex<G>::invalidate()
+ {
+ id_ = g_->v_nmax();
+ }
+
+
+ template<typename G>
+ inline
unsigned
vertex<G>::other(unsigned id_e) const
{
@@ -338,6 +350,14 @@ namespace mln
template <typename G, typename E>
inline
void
+ subject_impl< util::vertex<G>, E >::invalidate()
+ {
+ exact_().get_subject().invalidate();
+ }
+
+ template <typename G, typename E>
+ inline
+ void
subject_impl< util::vertex<G>, E >::change_graph(const G& g)
{
exact_().get_subject().change_graph(g);
--
1.5.6.5