Re: [review] The review of boost::container::hub starts! April 16 - April 26

Amlal El Mahrouss via Boost <[email protected]>
Newsgroups gmane.comp.lib.boost.devel
Message-ID <[email protected]>
Hello,
I hope everyone is doing well.

My review of `hub` will cover: Documentation, Design and the implementation of the hub container.

## DESIGN:

- The presence of pre-conditions, a single container, and free functions is a big plus in the design, this lets the developer use the library without too much hurdle on the development side.
- Speaking of development the presence of a NATVIS file is also a big plus in terms of debugging for Visual Studio. (IIRC a lot of users of Boost develop on Windows)
- There is a clear cause and effect in the design as well, easy to reason about and solve problems upon.
- The usage of known requirements like CopyInsertable in the design is also a big plus to avoid technical debt.

## DOCUMENTATION:

- The format of the documentation consists of the function signature, preconditons, snyposis, and effects. It is another plus for users wanting to get started using the library.
- The addition of equivalent examples is also a plus for the library, knowing what else can be done is as important as the solution.

## IMPLEMENTATION:

- It has clean free functions like erase_if and is easy to read, which fits what the library `container` library should do.

```cpp
template<typename T, typename Allocator, typename Predicate>
typename hub<T, Allocator>::size_type
erase_if(hub<T, Allocator>& x, Predicate pred)
{
  using hub_container = hub<T, Allocator>;
  using size_type = typename hub_container::size_type;
  using block = typename hub_container::block;

  auto s = x.size_;
  for(auto pbb = x.blist.next; pbb != x.blist.header(); ) {
    auto pb = x.static_cast_block_pointer(pbb);
    pbb = pb->next;
    BOOST_CONTAINER_HUB_PREFETCH_BLOCK(pbb, block);
    auto mask = pb->mask;
    do {
      auto n = hub_detail::unchecked_countr_zero(mask);
      if(pred(pb->data()[n])) x.erase_impl(pb, n);
      mask &= mask - 1;
    } while(mask);
  }
  return (size_type)(s - x.size_);
}
```
Fig 1: erase_if implementation (https://github.com/joaquintides/hub/blob/develop/include/boost/container/hub.hpp)

- The design pattern is respected per design guidelines and there is a separation of concerns.
- There is a clear consideration for MSVC and other compilers, which is a big plus for adoption.

## EFFORT:

I went and looked at the documentation, implementation and overall structure of the repository.

## COMMENTS:

- The transparency about `BOOST_CONTAINER_HUB_PREFETCH` is really valuable, it's wroth finding more cases like this in the future and documenting them.

## CHOICE:

I vote to ACCEPT `hub` to be merged into `container`. It clearly has a lot of upsides (including HFT, per the author's examples)
_______________________________________________
Boost mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://lists.boost.org/mailman3/lists/boost.lists.boost.org/
Archived at: https://lists.boost.org/archives/list/[email protected]/message/BAXPANROBL2OWB57HJFWVMX7A75MX7J2/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.