#include <boost/graph/adjacency_list.hpp>
#include <iostream>
#include <string>
struct SLCompBlock {
std::string name;
// Constructor for convenience
SLCompBlock(const std::string& n) : name(n) {}
};
int main() {
typedef boost::adjacency_list<boost::setS, boost::vecS, boost::directedS, const SLCompBlock*> Graph;
Graph boostGraph;
// Example SLCompBlock objects
SLCompBlock block1("Block 1");
SLCompBlock block2("Block 2");
SLCompBlock block3("Block 3");
// Add vertices to the graph
auto v1 = boost::add_vertex(&block1, boostGraph);
auto v2 = boost::add_vertex(&block2, boostGraph);
auto v3 = boost::add_vertex(&block3, boostGraph);
// Add some edges for demonstration purposes
boost::add_edge(v1, v2, boostGraph);
boost::add_edge(v2, v3, boostGraph);
// Loop over all edges and print information about the connected nodes
typedef boost::graph_traits<Graph>::edge_iterator edge_iter;
std::pair<edge_iter, edge_iter> ei;
for (ei = boost::edges(boostGraph); ei.first != ei.second; ++ei.first) {
// Get the current edge
auto edge = *ei.first;
// Get the source and target vertices of the current edge
auto u = boost::source(edge, boostGraph);
auto v = boost::target(edge, boostGraph);
// Access the SLCompBlock objects
const SLCompBlock* sourceBlock = boostGraph[u];
const SLCompBlock* targetBlock = boostGraph[v];
// Print the connection
std::cout << "Edge connects \"" << sourceBlock->name << "\" to \"" << targetBlock->name << "\"" << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGJvb3N0L2dyYXBoL2FkamFjZW5jeV9saXN0LmhwcD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IFNMQ29tcEJsb2NrIHsKICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAvLyBDb25zdHJ1Y3RvciBmb3IgY29udmVuaWVuY2UKICAgIFNMQ29tcEJsb2NrKGNvbnN0IHN0ZDo6c3RyaW5nJiBuKSA6IG5hbWUobikge30KfTsKCmludCBtYWluKCkgewogICAgdHlwZWRlZiBib29zdDo6YWRqYWNlbmN5X2xpc3Q8Ym9vc3Q6OnNldFMsIGJvb3N0Ojp2ZWNTLCBib29zdDo6ZGlyZWN0ZWRTLCBjb25zdCBTTENvbXBCbG9jayo+IEdyYXBoOwogICAgR3JhcGggYm9vc3RHcmFwaDsKCiAgICAvLyBFeGFtcGxlIFNMQ29tcEJsb2NrIG9iamVjdHMKICAgIFNMQ29tcEJsb2NrIGJsb2NrMSgiQmxvY2sgMSIpOwogICAgU0xDb21wQmxvY2sgYmxvY2syKCJCbG9jayAyIik7CiAgICBTTENvbXBCbG9jayBibG9jazMoIkJsb2NrIDMiKTsKCiAgICAvLyBBZGQgdmVydGljZXMgdG8gdGhlIGdyYXBoCiAgICBhdXRvIHYxID0gYm9vc3Q6OmFkZF92ZXJ0ZXgoJmJsb2NrMSwgYm9vc3RHcmFwaCk7CiAgICBhdXRvIHYyID0gYm9vc3Q6OmFkZF92ZXJ0ZXgoJmJsb2NrMiwgYm9vc3RHcmFwaCk7CiAgICBhdXRvIHYzID0gYm9vc3Q6OmFkZF92ZXJ0ZXgoJmJsb2NrMywgYm9vc3RHcmFwaCk7CgogICAgLy8gQWRkIHNvbWUgZWRnZXMgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMKICAgIGJvb3N0OjphZGRfZWRnZSh2MSwgdjIsIGJvb3N0R3JhcGgpOwogICAgYm9vc3Q6OmFkZF9lZGdlKHYyLCB2MywgYm9vc3RHcmFwaCk7CgogICAgLy8gTG9vcCBvdmVyIGFsbCBlZGdlcyBhbmQgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbm5lY3RlZCBub2RlcwogICAgdHlwZWRlZiBib29zdDo6Z3JhcGhfdHJhaXRzPEdyYXBoPjo6ZWRnZV9pdGVyYXRvciBlZGdlX2l0ZXI7CiAgICBzdGQ6OnBhaXI8ZWRnZV9pdGVyLCBlZGdlX2l0ZXI+IGVpOwogICAgZm9yIChlaSA9IGJvb3N0OjplZGdlcyhib29zdEdyYXBoKTsgZWkuZmlyc3QgIT0gZWkuc2Vjb25kOyArK2VpLmZpcnN0KSB7CiAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGVkZ2UKICAgICAgICBhdXRvIGVkZ2UgPSAqZWkuZmlyc3Q7CiAgICAgICAgCiAgICAgICAgLy8gR2V0IHRoZSBzb3VyY2UgYW5kIHRhcmdldCB2ZXJ0aWNlcyBvZiB0aGUgY3VycmVudCBlZGdlCiAgICAgICAgYXV0byB1ID0gYm9vc3Q6OnNvdXJjZShlZGdlLCBib29zdEdyYXBoKTsKICAgICAgICBhdXRvIHYgPSBib29zdDo6dGFyZ2V0KGVkZ2UsIGJvb3N0R3JhcGgpOwoKICAgICAgICAvLyBBY2Nlc3MgdGhlIFNMQ29tcEJsb2NrIG9iamVjdHMKICAgICAgICBjb25zdCBTTENvbXBCbG9jayogc291cmNlQmxvY2sgPSBib29zdEdyYXBoW3VdOwogICAgICAgIGNvbnN0IFNMQ29tcEJsb2NrKiB0YXJnZXRCbG9jayA9IGJvb3N0R3JhcGhbdl07CgogICAgICAgIC8vIFByaW50IHRoZSBjb25uZWN0aW9uCiAgICAgICAgc3RkOjpjb3V0IDw8ICJFZGdlIGNvbm5lY3RzIFwiIiA8PCBzb3VyY2VCbG9jay0+bmFtZSA8PCAiXCIgdG8gXCIiIDw8IHRhcmdldEJsb2NrLT5uYW1lIDw8ICJcIiIgPDwgc3RkOjplbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9