00001
00002
00003
00004
00005
00006
00007
00008 #ifndef IMPATOM_BOND_GRAPH_H
00009 #define IMPATOM_BOND_GRAPH_H
00010
00011 #include "bond_decorators.h"
00012 #include "Hierarchy.h"
00013 #include "internal/bond_graph_functors.h"
00014 #include <IMP/container/ListSingletonContainer.h>
00015 #include <IMP/internal/NestedIterator.h>
00016 #include <boost/graph/graph_traits.hpp>
00017 #include <boost/graph/properties.hpp>
00018 #include <boost/iterator/transform_iterator.hpp>
00019
00020 #ifndef IMP_SWIG
00021
00022 IMPATOM_BEGIN_NAMESPACE
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 class IMPATOMEXPORT BondGraph{
00059
00060 mutable IntKey index_key_;
00061
00062 public:
00063 IMP_NO_DOXYGEN(Pointer<container::ListSingletonContainer> sc_);
00064
00065
00066
00067
00068
00069
00070 BondGraph(Hierarchy bd);
00071
00072 BondGraph(){}
00073
00074 ~BondGraph();
00075
00076 #ifndef IMP_DOXYGEN
00077
00078 typedef internal::AttributeVertexPropertyMap<FloatKey, Float>
00079 VertexFloatPropertyMap;
00080 typedef internal::AttributeVertexPropertyMap<IntKey, Int>
00081 VertexIntPropertyMap;
00082 typedef internal::AttributeVertexPropertyMap<ParticleKey, Bonded>
00083 VertexVertexPropertyMap;
00084
00085
00086
00087 typedef internal::AttributeEdgePropertyMap<FloatKey, Float>
00088 EdgeFloatPropertyMap;
00089 typedef internal::AttributeEdgePropertyMap<IntKey, Int> EdgeIntPropertyMap;
00090
00091 VertexIntPropertyMap get_vertex_index_map() const;
00092 #else
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 typename VertexFloatPropertyMap;
00106
00107 typename VertexIntPropertyMap;
00108
00109
00110 typename VertexVertexPropertyMap;
00111
00112 typename EdgeFloatPropertyMap;
00113
00114 typename EdgeIntPropertyMap;
00115
00116 VertexIntPropertyMap get_vertex_index_map() const;
00117
00118 #endif
00119
00120
00121 #ifndef IMP_DOXYGEN
00122 typedef std::pair<Bonded,
00123 Bonded> edge_descriptor;
00124 #endif
00125
00126 Bond get_bond(edge_descriptor d) const {
00127 return IMP::atom::get_bond(d.first, d.second);
00128 }
00129
00130 #ifndef IMP_DOXYGEN
00131 struct traversal_category: public virtual boost::adjacency_graph_tag,
00132 public virtual boost::vertex_list_graph_tag,
00133 public virtual boost::edge_list_graph_tag,
00134
00135 public virtual boost::bidirectional_graph_tag
00136 {};
00137 typedef Bonded vertex_descriptor;
00138
00139 typedef int vertices_size_type;
00140 typedef int edges_size_type;
00141 typedef int degree_size_type;
00142
00143 typedef boost::transform_iterator<internal::MakeOutEdgeDescriptor,
00144 vertex_descriptor::BondIterator> out_edge_iterator;
00145 typedef vertex_descriptor::BondedIterator adjacency_iterator;
00146 typedef boost::transform_iterator<internal::MakeBonded,
00147 IMP::container::ListSingletonContainer::ParticleIterator>
00148 vertex_iterator;
00149 typedef boost::disallow_parallel_edge_tag edge_parallel_category;
00150 typedef boost::undirected_tag directed_category;
00151
00152 typedef boost::transform_iterator<internal::MakeInEdgeDescriptor,
00153 vertex_descriptor::BondIterator> in_edge_iterator;
00154
00155
00156
00157
00158
00159 typedef IMP::internal::NestedIterator<internal::NestedTraits> edge_iterator;
00160
00161 struct graph_tag{};
00162 typedef Int vertex_property_type;
00163 #endif
00164
00165 };
00166
00167
00168
00169
00170 IMPATOM_END_NAMESPACE
00171
00172 #include "internal/bond_graph_boost_functions.h"
00173
00174 #endif // IMP_SWIG
00175
00176 #endif