Boost logo

Boost :

Subject: Re: [boost] [Root Pointer] Ultimate test - Neural Network
From: Phil Bouchard (philippeb8_at_[hidden])
Date: 2016-03-19 13:53:49


On 03/18/2016 10:13 PM, Phil Bouchard wrote:
> On 03/18/2016 09:49 PM, Peter Dimov wrote:
>> Phil Bouchard wrote:
>>> Hi,
>>>
>>> I wrote a small utility that reads PDFs over the Internet and converts
>>> the text into a tree of regular expressions. The goal here is to test
>>> root_ptr<> and see if it will stand up to this complexity.
>>>
>>> The code is very simple for the moment as you can see:
>>> https://github.com/philippeb8/root_ptr/blob/master/example/t100_test1.cpp
>>>
>>
>> I'm probably missing something... but isn't this kind of use enabled
>> much more easily by using list<node> for the root and ordinary node* for
>> the internal pointers? Once the list is destroyed everything is swept
>> away, no need for smart pointers of any kind?
>
> neuron_base got sub lists that will need to be explicitly destroyed as
> well in this case.
>
> I will make it even more complex & cyclic tomorrow.

In implementing a search functionality I realized that there is no easy
way to make a node_ptr<> from this. In my example I am forced to create
a copy of *this so that I can create a note_ptr<> to it:

     node_ptr<neuron_base> search(std::string const & input)
     {
         std::string res;
         boost::match_results<std::string::const_iterator> what;

         if (boost::regex_match(input, what, exp_, boost::match_default
| boost::match_partial))
             if (what[0].matched)
                 for (unsigned k = 1; k < what.size(); ++ k)
                     if (what[k].matched)
                         if (sub_.size() <= 1)
                             return node_ptr<neuron_base>(x_, new
node<neuron_base>(* this)); //< *** Copy of *this
                         else
                             for
(std::list<std::list<neuron_base::pointer> >::const_iterator i =
sub_.begin(); i != sub_.end(); ++ i)
                                 for
(std::list<neuron_base::pointer>::const_iterator j = i->begin(); j !=
i->end(); ++ j)
                                     if (node_ptr<neuron_base> p =
search(input))
                                         return p;

         return node_ptr<neuron_base>(x_);
     }

That's a caveat but the copy of *this is done quickly. Although
search() could easily use neuron_base * because it is a read only function.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk