Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W waLBerla
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 51
    • Issues 51
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 13
    • Merge requests 13
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Releases
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • waLBerla
  • waLBerla
  • Issues
  • #48
Closed
Open
Issue created Jan 27, 2018 by Michael Kuron@kuronOwner36 of 36 checklist items completed36/36 checklist items

Replace Boost with standard library features wherever possible

For the 4.0 release, we should minimize the Boost dependency for higher portability and better compiler error messages. Here is a list of Boost libraries and what should happen with them.

No API change:

  • static_assert
  • cstdint
  • type_traits
  • mpl (should be rewritten to use standard template functionality)
  • enable_if
  • lexical_cast
  • bind
  • random
  • math
  • thread
  • range
  • chrono
  • date_time
  • exception
  • foreach

No visible API change:

  • make_shared, shared_ptr, weak_ptr, dynamic_ptr_cast (because they are imported into the walberla namespace:
  • function (because implicitly convertible)

API change:

  • regex
  • tuple (should be changed to use variadic templates instead. Also, TypeList should use variadic templates instead of its custom boost::tuple clone)
  • array, shared_array
  • filesystem (use C++17 version if available, else fall back to boost)
  • optional (use C++17 version if available, else fall back to boost)
  • any (use C++17 version if available, else fall back to boost)

Rewrite without Boost:

  • algorithm::string (replace with appropriate <algorithm>s and lambda functions)
  • functional::hash
  • integer
  • checked_delete
  • numeric::conversion::cast
  • lambda::bind
  • cast
  • dynamic_bitset (replace with std::vector<bool>)
  • logic::tribool (replace with walberla::optional<bool> or an enum)
  • uuid (only used as random numbers, so just generate two 64-bit integers, set the type bits as required and print them as a hex string with dashes in the right places)
  • units::detail::utility::demangle
  • multi_array (replace with std::vector or even std::array with appropriate index arithmetic)

Keep:

  • python
  • property_tree
  • graph

Finally:

  • Modify the build system to make Boost an optional dependency (if std::filesystem, std::optional and std::any have been found) and disable python_coupling, config::configToBoostPropertyTree, and math::EquationSystem if Boost is not found.
Edited Apr 11, 2019 by Michael Kuron
Assignee
Assign to
Time tracking