2

I have the following property tree.

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 7
}

I am trying to add couple of child trees to this so that the resulting property tree would look like below.

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 5

    childset1
    {
        child1prop1 4
        child1prop1 6
        child1prop1 9
    }

    childset2
    {
        child2prop1 2
        child2prop1 6
        child2prop1 7
    }
}

I wrote the following code.

// Add General config
pt::ptree propset1;
propset1.put("propset1.prop1", 2);
propset1.put("propset1.prop2", 5);
propset1.put("propset1.prop3", 60);
propset1.put("propset1.prop4", 7);

// Add childset1 config
pt::ptree childset1;
childset1.add("child1prop1", 4);
childset1.add("child1prop2", 6);
childset1.add("child1prop3", 9);
propset1.add_child("childset1", childset1);

// Add childset2 config
pt::ptree childset2;
childset2.add("child2prop1", 2);
childset2.add("child2prop2", 6);
childset2.add("child2prop3", 7);
propset1.add_child("childset2", childset2);

However the above code is resulting into below property tree.

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 5

    childset1
    {
        child1prop1 4
        child1prop1 6
        child1prop1 9
    }
}

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 5

    childset2
    {
        child2prop1 2
        child2prop1 6
        child2prop1 7
    }
}

Can someone please suggest what is correct use of API?

AnilJ
  • 1,951
  • 2
  • 33
  • 60

1 Answers1

2

You're something else differently that you're not showing:

Live On Coliru

#include <boost/property_tree/info_parser.hpp>
#include <sstream>
#include <iostream>

using boost::property_tree::ptree;

int main() {
    ptree pt;
    {
        std::istringstream iss(R"(propset1
        {
            prop1 2
            prop2 5
            prop3 60
            prop4 7
        })");
        read_info(iss, pt);
    }
    auto& propset1 = pt.get_child("propset1");

    // Add childset1 config
    ptree childset1;
    childset1.add("child1prop1", 4);
    childset1.add("child1prop2", 6);
    childset1.add("child1prop3", 9);
    propset1.add_child("childset1", childset1);

    // Add childset2 config
    ptree childset2;
    childset2.add("child2prop1", 2);
    childset2.add("child2prop2", 6);
    childset2.add("child2prop3", 7);
    propset1.add_child("childset2", childset2);

    write_info(std::cout, pt);
}

Prints:

propset1
{
    prop1 2
    prop2 5
    prop3 60
    prop4 7
    childset1
    {
        child1prop1 4
        child1prop2 6
        child1prop3 9
    }
    childset2
    {
        child2prop1 2
        child2prop2 6
        child2prop3 7
    }
}
sehe
  • 374,641
  • 47
  • 450
  • 633
  • For fun, a version with UDLs: [Live On Coliru](http://coliru.stacked-crooked.com/a/658842e2d5e040fc) – sehe Mar 24 '16 at 10:41
  • Thanks. I was missing the use of reference when I was getting the pt.get_child("propset1"); and hence was adding the child nodes into a new object each time. – AnilJ Mar 24 '16 at 18:31