Skip to content

Commit 216e6b7

Browse files
committed
Implement deepest_local_iterator_impl::get
1 parent 8a8aff2 commit 216e6b7

1 file changed

Lines changed: 23 additions & 8 deletions

File tree

include/boost/container/experimental/segmented_iterator_traits.hpp

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -242,25 +242,40 @@ template <class It>
242242
struct deepest_local_iterator_impl<false, It>
243243
{
244244
typedef It type;
245+
BOOST_CONTAINER_FORCEINLINE static type get(It it) { return it; }
245246
};
246247

247248
template <class It>
248249
struct deepest_local_iterator_impl<true, It>
249250
{
250-
private:
251+
private:
252+
251253
typedef typename segmented_iterator_traits<It>::local_iterator local_t;
252-
public:
253-
typedef typename deepest_local_iterator_impl<
254-
segmented_iterator_traits<local_t>::is_segmented_iterator::value,
255-
local_t>::type type;
254+
typedef deepest_local_iterator_impl
255+
< segmented_iterator_traits<local_t>::is_segmented_iterator::value
256+
, local_t> next_layer_t;
257+
258+
public:
259+
260+
typedef typename next_layer_t::type type;
261+
262+
BOOST_CONTAINER_FORCEINLINE static typename next_layer_t::type get(It it)
263+
{ return next_layer_t::get(segmented_iterator_traits<It>::local(it)); }
256264
};
257265

258266
template <class It>
259267
struct deepest_local_iterator
260268
{
261-
typedef typename deepest_local_iterator_impl<
262-
segmented_iterator_traits<It>::is_segmented_iterator::value,
263-
It>::type type;
269+
typedef deepest_local_iterator_impl
270+
< segmented_iterator_traits<It>::is_segmented_iterator::value
271+
, It> next_layer_t;
272+
273+
public:
274+
275+
typedef typename next_layer_t::type type;
276+
277+
BOOST_CONTAINER_FORCEINLINE static typename next_layer_t::type get(It it)
278+
{ return next_layer_t::get(it); }
264279
};
265280

266281
} // namespace detail_algo

0 commit comments

Comments
 (0)