Moved shared_container_iterator.hpp in iterator directory, modernized code.

shared_container_iterator now uses std::shared_ptr to store the reference
to the container. boost::shared_ptr is still supported and is wrapped
into std::shared_ptr on construction, so there is overhead due to allocation
of std::shared_ptr state. Going forward, std::shared_ptr is expected
to be the primary use case. As a bonus, this eliminates the dependency
on Boost.SmartPtr.

Moved shared_container_iterator.hpp into the iterator directory and left
a forwarding header for backward compatibility.
This commit is contained in:
Andrey Semashev
2025-02-07 02:07:12 +03:00
parent e446c6e05c
commit a7150173ed
9 changed files with 230 additions and 123 deletions

View File

@ -14,12 +14,14 @@
//
#include "boost/shared_container_iterator.hpp"
#include "boost/shared_ptr.hpp"
#include <boost/iterator/shared_container_iterator.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/core/lightweight_test.hpp>
#include <vector>
#include <memory>
struct resource {
struct resource
{
static int count;
resource() { ++count; }
resource(resource const&) { ++count; }
@ -27,20 +29,20 @@ struct resource {
};
int resource::count = 0;
typedef std::vector<resource> resources_t;
typedef std::vector< resource > resources_t;
typedef boost::shared_container_iterator< resources_t > iterator;
void set_range(iterator& i, iterator& end) {
boost::shared_ptr< resources_t > objs(new resources_t());
template< typename SharedPtr >
void set_range(iterator& i, iterator& end)
{
SharedPtr objs(new resources_t());
for (int j = 0; j != 6; ++j)
objs->push_back(resource());
i = iterator(objs->begin(),objs);
end = iterator(objs->end(),objs);
i = iterator(objs->begin(), objs);
end = iterator(objs->end(), objs);
BOOST_TEST_EQ(resource::count, 6);
}
@ -53,7 +55,18 @@ int main() {
iterator i;
{
iterator end;
set_range(i,end);
set_range< boost::shared_ptr< resources_t > >(i, end);
BOOST_TEST_EQ(resource::count, 6);
}
BOOST_TEST_EQ(resource::count, 6);
}
BOOST_TEST_EQ(resource::count, 0);
{
iterator i;
{
iterator end;
set_range< std::shared_ptr< resources_t > >(i, end);
BOOST_TEST_EQ(resource::count, 6);
}
BOOST_TEST_EQ(resource::count, 6);