Boost logo

Boost Users :

Subject: [Boost-users] Boost Graph write_grahml - wrong source- and target-ID's in edge of XML-File
From: lila (lea.gelb_at_[hidden])
Date: 2019-05-13 11:27:11


Hi there,

I want to create an xml-file out of my Graph... So I'm using the
write_graphml Function with dynamic_properties. Everything is fine, I get a
file, but there are wrong source- and target- ID's in the edge structs ...

Here an example:

 <node id="n1">
      <data key="key0">vertex_7</data>
      <data key="key2">bf88aa63-bff1-5c04-8daf-37a5e31981f6</data>
      <data key="key6">12.5</data>
      <data key="key7">7.5</data>
    </node>

    <edge id="e1" source="n1" target="n2">
      <data key="key1">edge_4_5</data>
      <data key="key3">26c512cb-46d8-5eb5-8021-2aac9f492227</data>
      <data key="key4">45844430-f1ea-5355-b7ce-eb566fe89256</data>
      <data key="key5">ecac63d6-e531-5ce8-9578-13cb63d040de</data>
    </edge>

In the edge there is the wrong source-ID - it should be the ID of Vertex 4
(source="n0") not 7 (source="n1")

My Graph:

struct vertex
{
   float x;
   float y;
   string name;
   string uuid;
};

struct edge
{
   string source_v_uuid; //startpoint uuid
   string target_v_uuid; //endpoint uuid
   string name; // name - edge_from_src-Vertex_to_dest-Vertex
   string uuid;
};

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,
vertex, edge> myGraph;

And my Properties:

 boost::dynamic_properties dyn_p;
         // fill vertex properties
         dyn_p.property("name", get(&vertex::name, graph));
         dyn_p.property("x-value", get(&vertex::x, graph));
         dyn_p.property("y-value", get(&vertex::y, graph));
         dyn_p.property("uuid", get(&vertex::uuid, graph));
         // fill edge properties
         dyn_p.property("name", get(&edge::name, graph));
         dyn_p.property("v-src-uuid", get(&edge::source_v_uuid, graph));
         dyn_p.property("v-dest-uuid", get(&edge::source_v_uuid, graph));
         dyn_p.property("uuid", get(&edge::uuid, graph));

         write_graphml(ofs, graph, dyn_p, true);

I tried to create a property map by myself to set the UUID as the (vertex
(source/target)) -ID's, but that changed nothing, there are still wrong
source- and target- ID's in the edge struct.

         auto map = get(&vertex2::uuid, graph);
         write_graphml(ofs, graph, map, dyn_p, true);

Can anybody help me? Or even give me a hint to figure out what is going
wrong?

--
Sent from: http://boost.2283326.n4.nabble.com/Boost-Users-f2553780.html

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net