Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dietmarkuehl/kuhllib
an experimental standard C++ library
https://github.com/dietmarkuehl/kuhllib
Last synced: 3 months ago
JSON representation
an experimental standard C++ library
- Host: GitHub
- URL: https://github.com/dietmarkuehl/kuhllib
- Owner: dietmarkuehl
- Created: 2012-01-10T21:49:09.000Z (about 13 years ago)
- Default Branch: main
- Last Pushed: 2024-04-13T23:13:41.000Z (10 months ago)
- Last Synced: 2024-08-03T06:01:31.842Z (7 months ago)
- Language: C++
- Homepage:
- Size: 2.83 MB
- Stars: 88
- Watchers: 7
- Forks: 7
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# kuhllib
This repository is intended to contain yet another implementation
of the standard C++ library. This is work in progress, intended
primarily to provide an improved interface for the standard algorithms
and a fast implementation of the I/O streams and locales library.
While prototypes for most of the components planned to be implemented
exist, many of them aren't in the repository.## Build
| Library | Linux | MacOS | Windows |
| ------- | ----- | ----- | ------- |
| kuhllib |  |  | |
| toy |  |  |  |You can just use `make` in the current directory. It will invoke `cmake`,
build the code, and run tests. To have more control over the build-process
you can use `cmake` with the `CMakeLists.txt` in the `src` directory.## Concept Overview
This section is intended to yield an overview of the used concepts.
The primary purpose is to serve as a quick reference of what needs
to be implemented rather than necessarily capturing all details.- `operation_state`
template
concept operation_state
= destructible
&& is_object_v
&& requires(S& s) { { execution::start(s) } noexcept; }
;- `receiver`
templatete
concept receiver
= move_constructible>
&& constructible_from, R>
&& requires(const remove_cvref_t& r) { execution::get_env(rec); }
;- `receiver_of`
template
concept receiver_of
= receiver
&& requires(Completions* comps) {
[]... Sigs>(completion_signatures*){}(comps);
}
;- `scheduler`
template
concept scheduler
= copy_constructible>
&& equality_comparable>
&& requires(S&& s, get_completion_scheduler_t const& gcs) {
{ schedule(forward(s)) } -> sender;
{ tag_invoke(gcs, schedule(forward(s))) } noexcept -> same_as>;
}
;- `sender_base` (exposition-only)
template
concept sender_base
= requires (S&& s, E&& e) {
{
get_completion_signatures(forward(s), forward(e))
} -> valid_completion_signatures;
}
;- `sender`
template
concept sender
= sender_base
&& sender_base
&& move_constructible>
;- `sender_of`
template
concept sender_of
= sender
&& same_as,
value_types_of_t>
;- `sender_to`
template
concept sender_to
= sender>
&& receiver_of>>
&& requires(S&& s, R&& r) {
connect(forward(s), forward(r));
}
;- `valid_completion_for` (exposition-only)
template
concept valid_completion_for
= requires(Sig* s) {
[](C(*)(A...)) requires nothrow_tag_invocable{}(s);
}
;## Customization Point Object Overview
This section is intended to yield and overview of the user customization
point objects. The notation resembles how the customization points
can be called. It doesn't represent their respective implementation.
This section is intend as quick reference when implementing the
corresponding customization rather than necessarily capturing all
details.- `get_env(auto&& receiver) -> void`
- `set_error(auto&& receiver, auto&& error) noexcept -> void`
- `set_stopped(auto&& receiver) noexcept -> void`
- `set_value(auto&& receiver, auto&&... args) noexcept -> void`
- `start(auto& state) noexcept -> void`