Commit Graph

909 Commits

Author SHA1 Message Date
Peter Dimov 48019a0460 Rename mp_replace_at_impl_f<>::_f and mp_replace_at_impl_p<>::_p to fn, use _q form 2026-03-27 04:25:05 +02:00
Jonathan Poelen b703f0fe56 optimize mp_replace_at (extract f from the struct to benefit from memoization)
compiler |       gcc-12       |      clang-15
before   | 0:00.34s - 134428K | 0:00.33s - 124720K
after    | 0:00.29s - 116920K | 0:00.32s - 122568K

```cpp
using namespace boost::mp11;

template<class I> using f = mp_replace_at<mp_iota<I>, I, void>;
template<class I> using test = mp_transform<f, mp_iota<I>>;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-27 03:27:11 +02:00
Peter Dimov 4f8b62a2d8 Rename mp_filter_impl_f<>::_f to fn, use _q form 2026-03-27 02:03:17 +02:00
Jonathan Poelen 7ee52a8aea optimize mp_filter (extract f from the struct to benefit from memoization)
compiler |       gcc-12      |      clang-15
before   | 0:00.16s - 72460K | 0:00.16s - 102068K
after    | 0:00.14s - 61884K | 0:00.16s - 101828K

```cpp
using namespace boost::mp11;

template<class T> using p = mp_bool<T::value & 1>;
template<class I> using test = mp_filter<p, mp_iota<I>>;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-26 21:41:57 +02:00
Peter Dimov 148c3b282b Rename mp_transform_if_impl_f<>::_f to fn, use _q form 2026-03-26 19:54:37 +02:00
Jonathan Poelen 4e2635ce51 optimize mp_transform_if (extract f from the struct to benefit from memoization)
compiler |       gcc-12      |      clang-15
before   | 0:00.13s - 60432K | 0:00.16s - 100956K
after    | 0:00.11s - 47300K | 0:00.16s - 100484K

```cpp
using namespace boost::mp11;

template<class T> using p = mp_bool<T::value & 1>;
template<class T> using f = mp_size_t<T::value + 1>;
template<class I> using test = mp_transform_if<p, f, mp_iota<I>>;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-26 19:47:00 +02:00
Jonathan Poelen 81b8660466 optimize mp_nth_element
compiler | gcc-15 | clang-20
before   | 0:00.66s - 206316K | 0:01.77s - 246832K
after    | 0:00.63s - 192944K | 0:01.76s - 245956K

```cpp
template<class I> using test = mp_nth_element<mp_iota_c<I::value+1>, I, mp_less>;

using r1 = mp_transform<test, mp_iota_c<30>>;
```
2026-03-26 15:39:34 +02:00
Peter Dimov da34232d24 Rename mp_sort_impl_f<>::f to fn, use _q form 2026-03-26 15:37:56 +02:00
Jonathan Poelen fe850e97ca optimize mp_sort (extract f from the struct to benefit from memoization)
compiler |       gcc-12       |      clang-15
before   | 0:00.46s - 198848K | 0:00.49s - 132632K
after    | 0:00.42s - 183384K | 0:00.48s - 131748K

```cpp
using namespace boost::mp11;

template<class I> using test = mp_sort<mp_iota<I>, mp_less>;

using r1 = mp_transform<test, mp_iota_c<25>>;
```
2026-03-26 15:30:45 +02:00
Peter Dimov fe1f7af136 Rename mp_power_set_impl_f<>::_f to fn, use _q form 2026-03-26 13:25:40 +02:00
Jonathan Poelen 0be25a2ec7 optimize mp_power_set (extract f from the struct to benefit from memoization)
compiler |       gcc-12       |      clang-15
before   | 0:01.35s - 538732K | 0:00.65s - 203924K
after    | 0:01.02s - 396032K | 0:00.65s - 203080K

```cpp
using namespace boost::mp11;

template<class I> using test = mp_power_set<mp_iota<I>>;

using r1 = mp_transform<test, mp_iota_c<15>>;
```
2026-03-26 13:17:02 +02:00
Jonathan Poelen 5e44572f44 optimize mp_drop (extract f from the struct to benefit from memoization)
compiler |       gcc-12       |      clang-15
before   | 0:00.48s - 192464K | 0:00.48s - 154480K
after    | 0:00.43s - 172472K | 0:00.46s - 150404K

```cpp
template<class L> struct f { template<class I> using g = mp_drop<L, I>; };
template<class I, class L = mp_iota<I>> using test = mp_transform<f<L>::template g, L>;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-26 11:29:41 +02:00
Peter Dimov efa2a7b554 Rename mp_map_update_impl_f<>::_f, mp_map_update_impl_f3<>::_f3 to fn, use _q form 2026-03-26 06:15:52 +02:00
Jonathan Poelen 825991fafc optimize mp_map_update (extract f from the struct to benefit from memoization)
compiler |       gcc-12       |      clang-15
before   | 0:00.73s - 270224K | 0:00.54s - 156112K
after    | 0:00.19s - 85004K  | 0:00.29s - 119232K

```cpp
using namespace boost::mp11;

template<class L, class M = mp_transform<mp_list, L>>
struct f { template<class I> using g = mp_map_update<M, mp_list<I>, mp_list>; };

template<class I, class L = mp_iota<I>> using test
  = mp_transform<f<L>::template g, L>;

using r1 = mp_transform<test, mp_iota_c<20>>;
```
2026-03-26 02:05:18 +02:00
Peter Dimov e388a13c6d Inline mp_map_erase_impl 2026-03-25 18:37:38 +02:00
Peter Dimov 93f9ce4fb9 Rename mp_map_erase_impl_f<>::_f to fn, use _q form 2026-03-25 18:35:20 +02:00
Jonathan Poelen a224ca39f7 optimize mp_map_erase (extract f from the struct to benefit from memoization)
compiler |       gcc-12       |      clang-15
before   | 0:00.52s - 197128K | 0:00.44s - 140780K
after    | 0:00.47s - 183968K | 0:00.43s - 139336K

```cpp
using namespace boost::mp11;

template<class L, class M = mp_transform<mp_list, L>>
struct f { template<class I> using g = mp_map_erase<M, I>; };

template<class I, class L = mp_iota<I>> using test
  = mp_transform<f<L>::template g, L>;

using r1 = mp_transform<test, mp_iota_c<30>>;
```
2026-03-25 18:32:37 +02:00
Jonathan Poelen 9613c80646 disable mp_map_find_impl gcc workaround with >=14.4 and >=15.2 2026-03-25 06:27:43 +02:00
Jonathan Poelen a6b6f8f85e optimize mp_map_find_impl gcc workaround
compiler | gcc-15
before   | 0:01.65s - 381364K
after    | 0:00.99s - 213064K

```cpp
template<class L, class M = mp_transform<mp_list, L>>
struct f { template<class I> using g = mp_map_find<M, I>; };

template<class I, class L = mp_iota<I>> using test
  = mp_transform<f<L>::template g, L>;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-25 02:40:18 +02:00
Jonathan Poelen aade5f1488 optimize mp_map_find (extract f from the struct to benefit from memoization)
compiler |       gcc-12       |      clang-15
before   | 0:00.29s - 128600K | 0:00.25s - 120604K
after    | 0:00.22s - 99908K  | 0:00.23s - 116084K

```cpp
using namespace boost::mp11;

template<class L, class M = mp_transform<mp_list, L>>
struct f { template<class I> using g = mp_map_find<M, I>; };

template<class I, class L = mp_iota<I>> using test
  = mp_transform<f<L>::template g, L>;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-25 02:25:07 +02:00
Peter Dimov 7db0511176 Rename detail::mp_transform_push_back to mp_transform_impl_f 2026-03-24 21:00:50 +02:00
Jonathan Poelen c53e110713 optimize mp_transform with 5 lists or more
compiler |      gcc-15       |     clang-20
before   | 0:00.21s - 80328K | 0:00.29s - 117756K
after    | 0:00.20s - 77408K | 0:00.29s - 117468K

```cpp
template<class I, class L = mp_iota<I>> using test
  = mp_transform<mp_list, L, L, L, L, L, L, L, L>;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-24 20:56:35 +02:00
Peter Dimov 0c2bd813d6 Rename detail::mp_fill_first_item to mp_fill_impl_f 2026-03-24 19:02:00 +02:00
Jonathan Poelen b4bfe74487 optimize mp_fill
compiler |      gcc-15       |     clang-20
before   | 0:00.15s - 60740K | 0:00.14s - 94144K
after    | 0:00.10s - 43504K | 0:00.14s - 94188K

```cpp
template<class I, class L = mp_iota<I>> using test
  = mp_fill<L, int>;

using r1 = mp_transform<test, mp_iota_c<100>>;
```
2026-03-24 18:56:19 +02:00
Jonathan Poelen d2c0c220b1 optimize mp_sliding_fold
compiler |      gcc-15       |     clang-20
before   | 0:00.23s - 79084K | 0:00.48s - 135100K
after    | 0:00.22s - 77748K | 0:00.46s - 132436K

```cpp
template<class I, class L = mp_iota<I>> using test
  = mp_list<
      mp_sliding_fold<L, mp_int<2>, mp_plus>,
      mp_sliding_fold<L, mp_int<2>, mp_max>
    >;

using r1 = mp_transform<test, mp_iota_c<50>>;
```
2026-03-24 17:36:18 +02:00
Jonathan Poelen 79fb6dc191 optimize mp_map_replace
compiler |      gcc-15        |     clang-20
before   | 0:00.39s - 114524K | 0:00.66s - 155888K
after    | 0:00.38s - 114140K | 0:00.64s - 155184K

```cpp
template<class I, class L = mp_transform<mp_list, mp_iota<I>>> using test
  = mp_map_replace<L, mp_list<I,I>>;

using r1 = mp_transform<test, mp_iota_c<120>>;
```
2026-03-24 14:40:40 +02:00
Jonathan Poelen 997206a1ae optimize mp_map_replace
compiler |       gcc-12       |      clang-15
before   | 0:00.46s - 187160K | 0:00.38s - 129104K
after    | 0:00.21s - 80236K  | 0:00.33s - 123644K

```cpp
using namespace boost::mp11;

template<class L, class M = mp_transform<mp_list, L>>
struct f { template<class I> using g = mp_map_replace<M, mp_list<I, I>>; };

template<class I, class L = mp_iota<I>> using test
  = mp_transform<f<L>::template g, L>;

using r1 = mp_transform<test, mp_iota_c<30>>;
```
2026-03-24 14:40:21 +02:00
Jonathan Poelen 31ced7d7e2 optimize mp_replace_if
compiler |      gcc-15       |     clang-20
before   | 0:00.23s - 76088K | 0:00.37s - 116984K
after    | 0:00.22s - 75348K | 0:00.35s - 114952K

```cpp
template<class> using pred = mp_false;
template<class I, class L = mp_iota<I>> using test
  = mp_replace_if<L, pred, I>;

using r1 = mp_transform<test, mp_iota_c<120>>;
```
2026-03-24 05:21:51 +02:00
Jonathan Poelen 24e9ec6593 optimize mp_replace
compiler |      gcc-15       |     clang-20
before   | 0:00.30s - 90020K | 0:00.48s - 129272K
after    | 0:00.29s - 89428K | 0:00.46s - 126580K

```cpp
template<class I, class L = mp_iota<I>> using test
  = mp_replace<L, I, I>;

using r1 = mp_transform<test, mp_iota_c<120>>;
```
2026-03-24 03:50:40 +02:00
Jonathan Poelen 0d61d09d3a optimize mp_remove
compiler |      gcc-15       |     clang-20
before   | 0:00.32s - 91276K | 0:00.69s - 156512K
after    | 0:00.31s - 90684K | 0:00.67s - 157560K

```cpp
template<class> using pred = mp_true;
template<class I, class L = mp_iota<I>> using test
  = mp_remove<L, I>;

using r1 = mp_transform<test, mp_iota_c<120>>;
```
2026-03-24 02:27:42 +02:00
Jonathan Poelen e06ba9abd3 optimize mp_copy_if
compiler |      gcc-15       |     clang-20
before   | 0:00.21s - 65820K | 0:00.51s - 138048K
after    | 0:00.21s - 65428K | 0:00.49s - 138540K

```cpp
template<class> using pred = mp_false;
template<class I, class L = mp_iota<I>> using test
  = mp_copy_if<L, pred>;

using r1 = mp_transform<test, mp_iota_c<120>>;
```
2026-03-23 22:49:31 +02:00
Jonathan Poelen 04dd0e118c optimize mp_remove_if
compiler |      gcc-15       |     clang-20
before   | 0:00.21s - 67308K | 0:00.51s - 137744K
after    | 0:00.21s - 66956K | 0:00.49s - 138492K

```cpp
template<class> using pred = mp_true;
template<class I, class L = mp_iota<I>> using test
  = mp_remove_if<L, pred>;

using r1 = mp_transform<test, mp_iota_c<120>>;
```
2026-03-23 21:25:37 +02:00
Jonathan Poelen 2d3a0e9877 optimize integer_sequence with gcc
Use the `__integer_pack` builtin

compiler |      gcc-15
before   | 0:00.14s - 47284K
after    | 0:00.07s - 37572K

```cpp
template<class I> using test
  = make_integer_sequence<int, I::value>;

using r1 = mp_transform<test, mp_iota_c<200>>;
```
2026-03-23 17:49:05 +02:00
Peter Dimov 6ac4c8cae6 Update ci.yml 2026-03-23 16:57:31 +02:00
Peter Dimov 41c54ed155 Add Drone support 2026-03-23 16:15:20 +02:00
Peter Dimov 7f59439e3f Update ci.yml 2026-03-23 15:31:27 +02:00
Peter Dimov b94b089d4e Merge pull request #112 from Lastique/feature/remove_static_assert
Remove dependencies on Boost.StaticAssert
boost-1.91.0.beta1 boost-1.91.0
2026-01-23 02:29:05 +02:00
Andrey Semashev ae2b1bf4fe Remove dependencies on Boost.StaticAssert.
Boost.StaticAssert has been merged into Boost.Config, so remove
the dependency.
2026-01-22 20:13:13 +03:00
Peter Dimov 2c10351d5e Update ci.yml 2025-12-15 15:52:34 +02:00
Peter Dimov fc8003d32c Update version 2025-12-15 15:49:34 +02:00
Peter Dimov fe7447470d Update cuda-windows job in ci.yml boost-1.90.0.beta1 boost-1.90.0 2025-11-03 13:55:57 +02:00
Peter Dimov 6f3796a68c Update cuda-linux job in ci.yml 2025-11-03 10:57:49 +02:00
Peter Dimov 437ddf60af Update documentation of mp_transform 2025-11-01 14:12:53 +02:00
Peter Dimov 24441db797 Merge pull request #109 from joaquintides/fix/docs
fixed definition of list
2025-10-30 10:46:49 +02:00
joaquintides bd1be41b70 s/template class/class template 2025-10-26 20:46:25 +01:00
joaquintides 2e541a7ee9 fixed definition 2025-10-26 12:00:49 +01:00
Peter Dimov d8ddd856e8 Update revision history 2025-10-22 11:09:08 +03:00
Peter Dimov 811aa7a0f1 Update mp_reverse_fold to work on fixed size lists. Fixes #108. 2025-10-21 18:51:31 +03:00
Peter Dimov d27d821192 Test mp_fold and mp_reverse_fold with std::pair. Refs #108. 2025-10-21 18:48:33 +03:00
Peter Dimov 50e2a0a1b8 Update version 2025-10-09 18:32:10 +03:00