Skip to content

General Design Changes

Hannes Hauswedell edited this page Mar 6, 2017 · 1 revision

General Design Principles

The design goals are the same as for SeqAn 1 and 2. We want a generic library with generic data structures and generic algorithms, while avoiding overhead due to runtime polymorphism. However with C++17 at the horizon we can achieve this with different technologies, which we hadn't at hand for previous SeqAn versions.

Replacing global member function interfaces

While we still will offer free-functions, which implement algorithms over containers and data-structures we will not use something we called global member functions, whose defined the public interface of a data structure anymore. Instead the public interface of a data structure is defined by a concept. Since concept checking allows us to write generic algorithms it is also possible to now use real member functions instead.

Here is a small example of how this could look like.

template <typename host_type, typename gaps_storage = default_gaps_storage<host_type>>
class gaps
{
...
protected: 
    gaps_storage   _storage;
}

Replacing meta-functions

Replacing Template Subclassing

Clone this wiki locally