Commit Graph

881 Commits

Author SHA1 Message Date
Jonathan Poelen 2c96255255 fix mp_replace_at with msvc-12 2025-11-09 20:33:36 +01:00
Jonathan Poelen 49747e7e48 fix mp_map_update with msvc-12 2025-11-09 20:33:36 +01:00
Jonathan Poelen e8e97059ec 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen a1ba7c2b6b 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen de54a2b597 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen 7fe439513e 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen f6768fef35 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen a76ce80d1a 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen 88314f6877 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen 225f67982c 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen 94162fb325 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>>;
```
2025-11-09 20:33:36 +01:00
Jonathan Poelen b21ff00f9b 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>>;
```
2025-11-09 20:33:36 +01: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
Peter Dimov 1f3d0bbe0c Update ci.yml 2025-09-09 16:43:32 +03:00
Peter Dimov 75e0901b40 Fix typo in mp_push_back example. Closes #107. 2025-09-09 16:37:30 +03:00
Peter Dimov 2fb81c2453 Update version boost-1.89.0 2025-06-28 08:20:51 +03:00
Peter Dimov 1a99027e8c Add an alternative implementation of mp_map_find for GCC 14+. Fixes #106. 2025-05-08 15:50:59 +03:00
Peter Dimov f8ee448fa5 Add test case from #106. Refs #106. 2025-05-08 03:04:21 +03:00
Peter Dimov 7e04eb38f9 Update ci.yml 2025-05-07 21:36:56 +03:00
Peter Dimov e5da96b9b6 Update revision history boost-1.88.0.beta1 boost-1.88.0 2025-01-15 19:35:28 +02:00
Peter Dimov 9910ada772 Clang considers the specialization ambiguous in C++17 and above, rewrite. Fixes #103. 2025-01-07 22:52:07 +02:00
Peter Dimov 7ca1e0a92b Add a specialization of mp_from_sequence_impl to handle the defaulted offset case. Fixes #103. 2025-01-07 21:10:14 +02:00
Peter Dimov e2277a5b2e Add test/mp_from_sequence_3.cpp. Refs #103. 2025-01-07 21:08:55 +02:00
Peter Dimov 43fd186a8e Remove cxxstd=1z from clang-5.0 2024-12-21 22:21:46 +02:00
Peter Dimov abcb365993 Use N=257 for all compilers lacking C++14 constexpr 2024-12-21 22:03:10 +02:00
Peter Dimov 82533c431e Do not use fold expressions for mp_find and mp_find_if 2024-12-21 21:48:37 +02:00
Peter Dimov 35435bf206 Add N=1089 test case to test/mp_find_if_q.cpp 2024-12-21 21:40:56 +02:00
Peter Dimov c08451873c test/mp_find: Decrease N to 257 for MSVC without constexpr 2024-12-21 21:24:02 +02:00
Peter Dimov 784ff13c6e Add a test with N=1089 to mp_find.cpp 2024-12-21 21:04:34 +02:00
Peter Dimov 279041fd42 Update version 2024-12-14 02:09:09 +02:00
Peter Dimov 8d4b6eb840 Apply Node20 workaround 2024-12-13 22:45:58 +02:00
Peter Dimov 7a4a2c3661 Update ci.yml 2024-12-13 22:44:53 +02:00
Peter Dimov b108e01927 Update version 2024-12-13 22:43:40 +02:00
Peter Dimov b06d0e4062 Merge pull request #100 from joaquintides/feature/improved-perf-mp_is_set
Improved performance of  `mp_is_set`
2024-11-09 03:46:10 +02:00
joaquintides 28929d9794 kept old impl for msvc 12.0 2024-11-08 22:07:10 +01:00
joaquintides c2bc9788ca made mp_is_set<S> robust when S is not a list 2024-11-08 19:50:48 +01:00
joaquintides 13a81c86ee added missing #include 2024-11-08 19:21:27 +01:00
joaquintides fb79d23aac improved performance of mp_is_set 2024-11-08 19:08:50 +01:00
Peter Dimov 1caff7ffa9 Change second occurrence of the same code in mp_count.hpp to match boost-1.87.0.beta1 boost-1.87.0 2024-10-22 19:50:32 +03:00
Peter Dimov 9b8d36ec84 Merge pull request #98 from tjcw/issue-97
Candidate fix
2024-10-22 19:40:17 +03:00
Chris Ward 44a731d868 Candidate fix
code without "if constexpr"
2024-10-22 08:59:32 +01:00