00001
00002
00003 #ifndef _SPAF_GRAPH_NODE_HPP_
00004 #define _SPAF_GRAPH_NODE_HPP_
00005
00006 #include <iostream>
00007 #include <list>
00008 #include <boost/graph/graph_concepts.hpp>
00009
00010 namespace jafar {
00011 namespace spaf {
00012 class Feature;
00013 }
00014 namespace spafgraph {
00015 class Edge;
00016 class EdgeProximity;
00017 class NodeDescriptor;
00022 class Node {
00023 friend std::ostream& spafgraph::operator<<(std::ostream& s, const Node& n);
00024 friend class Graph;
00025 private:
00026 Node();
00027 Node(spaf::Feature* feature, Node* parent);
00028 public:
00029 ~Node();
00030 public:
00031 const spaf::Feature* feature() const;
00032 spaf::Feature* feature();
00033 const Edge* edgeParent() const;
00034 const std::list<EdgeProximity*>& edgesProximities() const;
00035 const std::list<Edge*>& edgesToUnCoarserLevel() const;
00036 const std::list<Edge*>& edgesToCoarserLevel() const;
00037 const std::list<Edge*>& edgesChildren() const;
00038 std::list<Edge*> edges() const;
00044 const EdgeProximity* edgeProximity( const Node* n ) const;
00045 public:
00050 EdgeProximity* addProximityWith( Node* n );
00051 NodeDescriptor* nodeDescriptor();
00052 public:
00053 Node* parent();
00054 const std::list<Node*>& children();
00055 protected:
00056 int id() const;
00057 private:
00058 void registerChild(Node* );
00059 private:
00060 struct Private;
00061 Private* const d;
00062 };
00063 std::ostream& operator<<(std::ostream& s, const Node&);
00064 }
00065 }
00066
00067 #endif