diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-07-23 15:21:29 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-07-23 15:21:29 +0200 |
commit | bada6666c70977a058755ccf232e7d67b24adeed (patch) | |
tree | 1e92d50cebce96abaf9bce19e36026c47f77b9ba /libcult/cult/containers/graph.hxx | |
parent | eaf34adcbd8095bc6d1f3371b1227f654c7b19fc (diff) |
New upstream release
Diffstat (limited to 'libcult/cult/containers/graph.hxx')
-rw-r--r-- | libcult/cult/containers/graph.hxx | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/libcult/cult/containers/graph.hxx b/libcult/cult/containers/graph.hxx deleted file mode 100644 index d61cd53..0000000 --- a/libcult/cult/containers/graph.hxx +++ /dev/null @@ -1,193 +0,0 @@ -// file : cult/containers/graph.hxx -// author : Boris Kolpackov <boris@kolpackov.net> -// copyright : Copyright (c) 2005-2010 Boris Kolpackov -// license : GNU GPL v2 + exceptions; see accompanying LICENSE file - -#ifndef CULT_CONTAINERS_GRAPH_HXX -#define CULT_CONTAINERS_GRAPH_HXX - -#include <cult/types.hxx> -#include <cult/eh/exception.hxx> -#include <cult/containers/map.hxx> - -namespace Cult -{ - namespace Containers - { - template <typename N, typename E> - class Graph - { - public: - typedef N Node; - typedef E Edge; - - struct NoEdge: virtual EH::Exception {}; - struct NoNode: virtual EH::Exception {}; - - public: - template <typename T> - T& - new_node (); - - template <typename T, typename A0> - T& - new_node (A0 const&); - - template <typename T, typename A0, typename A1> - T& - new_node (A0 const&, A1 const&); - - template <typename T, typename A0, typename A1, typename A2> - T& - new_node (A0 const&, A1 const&, A2 const&); - - template <typename T, typename A0, typename A1, typename A2, - typename A3> - T& - new_node (A0 const&, A1 const&, A2 const&, A3 const&); - - template <typename T, typename A0, typename A1, typename A2, - typename A3, typename A4> - T& - new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&); - - template <typename T, typename A0, typename A1, typename A2, - typename A3, typename A4, typename A5> - T& - new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, - A5 const&); - - template <typename T, typename A0, typename A1, typename A2, - typename A3, typename A4, typename A5, typename A6> - T& - new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, - A5 const&, A6 const&); - - template <typename T, typename A0, typename A1, typename A2, - typename A3, typename A4, typename A5, typename A6, - typename A7> - T& - new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, - A5 const&, A6 const&, A7 const&); - - template <typename T, typename A0, typename A1, typename A2, - typename A3, typename A4, typename A5, typename A6, - typename A7, typename A8> - T& - new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, - A5 const&, A6 const&, A7 const&, A8 const&); - - template <typename T, typename A0, typename A1, typename A2, - typename A3, typename A4, typename A5, typename A6, - typename A7, typename A8, typename A9> - T& - new_node (A0 const&, A1 const&, A2 const&, A3 const&, A4 const&, - A5 const&, A6 const&, A7 const&, A8 const&, A9 const&); - - public: - template <typename T, typename Left, typename Right> - T& - new_edge (Left&, Right&); - - template <typename T, typename Left, typename Right, - typename A0> - T& - new_edge (Left&, Right&, A0 const&); - - template <typename T, typename Left, typename Right, - typename A0, typename A1> - T& - new_edge (Left&, Right&, A0 const&, A1 const&); - - template <typename T, typename Left, typename Right, - typename A0, typename A1, typename A2> - T& - new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&); - - template <typename T, typename Left, typename Right, - typename A0, typename A1, typename A2, typename A3> - T& - new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&, A3 const&); - - template <typename T, typename Left, typename Right, - typename A0, typename A1, typename A2, typename A3, - typename A4> - T& - new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&, A3 const&, - A4 const&); - - template <typename T, typename Left, typename Right, - typename A0, typename A1, typename A2, typename A3, - typename A4, typename A5> - T& - new_edge (Left&, Right&, A0 const&, A1 const&, A2 const&, A3 const&, - A4 const&, A5 const&); - - // Functions to reset edge's nodes. - // - public: - template <typename TE, typename TN> - Void - reset_left_node (TE& edge, TN& node) - { - edge.set_left_node (node); - } - - template <typename TE, typename TN> - Void - reset_right_node (TE& edge, TN& node) - { - edge.set_right_node (node); - } - - // Functions to add edges to a node. - // - public: - template <typename TN, typename TE> - Void - add_edge_left (TN& node, TE& edge) - { - node.add_edge_left (edge); - } - - template <typename TN, typename TE> - Void - add_edge_right (TN& node, TE& edge) - { - node.add_edge_right (edge); - } - - // Functions to delete edges and nodes. In order to delete a - // a node without leaving any dangling edges you need to make - // sure that each edge pointing to it is either deleted or reset - // to some other node. - // - public: - template <typename T, typename Left, typename Right> - Void - delete_edge (Left& left_node, Right& right_node, T& edge); - - Void - delete_node (Node& node) - { - if (nodes_.erase (&node) == 0) - throw NoNode (); - } - - protected: - typedef Shptr<Node> NodePtr; - typedef Shptr<Edge> EdgePtr; - - typedef Map<Node*, NodePtr> Nodes; - typedef Map<Edge*, EdgePtr> Edges; - - Nodes nodes_; - Edges edges_; - }; - } -} - - -#include <cult/containers/graph.txx> - -#endif // CULT_CONTAINERS_GRAPH_HXX |