Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hashlag/scheduler
Класс, управляющий ленивым вычислением связанных между собой задач.
https://github.com/hashlag/scheduler
Last synced: 3 days ago
JSON representation
Класс, управляющий ленивым вычислением связанных между собой задач.
- Host: GitHub
- URL: https://github.com/hashlag/scheduler
- Owner: hashlag
- Created: 2024-06-02T14:57:25.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-06-02T21:13:49.000Z (6 months ago)
- Last Synced: 2024-06-02T23:30:05.605Z (6 months ago)
- Language: C++
- Homepage:
- Size: 13.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Планировщик
## Описание
Класс `Scheduler`, управляющий ленивым вычислением связанных между собой задач. Задачи могут зависеть друг от друга, и будущий результат выполнения одной задачи может быть использован в качестве параметра для другой.
## Пример использования
Рассмотрим пример нахождения корней квадратного уравнения:
```c++
float a = 1;
float b = -2;
float c = 0;sched::Scheduler scheduler;
auto id1 = scheduler.add([](float a, float c){return -4 * a * c;}, a, c);
auto id2 = scheduler.add([](float b, float v){return b * b + v;}, b, scheduler.get_future_result(id1));
auto id3 = scheduler.add([](float b, float d){return -b + std::sqrt(d);}, b, scheduler.get_future_result(id2));
auto id4 = scheduler.add([](float b, float d){return -b - std::sqrt(d);}, b, scheduler.get_future_result(id2));
auto id5 = scheduler.add([](float a, float v){return v/(2*a);}, a, scheduler.get_future_result(id3));
auto id6 = scheduler.add([](float a, float v){return v/(2*a);},a, scheduler.get_future_result(id4));scheduler.execute_all();
std::cout << "x1 = " << scheduler.get_result(id5) << std::endl;
std::cout << "x2 = " << scheduler.get_result(id6) << std::endl;
```## Публичный интерфейс `Scheduler`
### `add()`
```c++
template
TaskId add(Fn&& fn, Args&&... args);
```Добавляет задачу в планировщик.
### Параметры
| Имя | Тип | Описание |
|--------|--------------------|---------------------------------------------|
| `fn` | `typename Fn` | Функция, для выполнения в качестве задачи. |
| `args` | `typename... Args` | Аргументы для передачи в `fn`. |### Возвращаемое значение
Идентификатор задачи типа `TaskId`.
### `get_future_result()`
```c++
template
FutureResult get_future_result(TaskId id);
```Возвращает объект соответствующий будущему результату выполнения задачи.
Используется для передачи в другую задачу ещё не подсчитанного результата выполнения данной.### Параметры
| Имя | Тип | Описание |
|--------|----------|-----------------------|
| `id` | `TaskId` | Идентификатор задачи. |### Возвращаемое значение
Объект типа `FutureResult`.
### `get_result()`
```c++
template
ReturnType& get_result(TaskId id);
```Возвращает результат выполнения задачи типа `ReturnType`, вычисляет его, если он еще не был подсчитан.
### Параметры
| Имя | Тип | Описание |
|--------|----------|-----------------------|
| `id` | `TaskId` | Идентификатор задачи. |### Возвращаемое значение
Ссылка на результат выполнения задачи.
### `execute_all()`
```c++
void execute_all();
```Выполняет все запланированные задачи.
### `remove()`
```c++
void remove(TaskId id);
```Удаляет задачу из планировщика.
### Параметры
| Имя | Тип | Описание |
|--------|----------|-----------------------|
| `id` | `TaskId` | Идентификатор задачи. |## Требования и ограничения
- Задачи должны быть [Callable objects](https://en.cppreference.com/w/cpp/named_req/Callable) (возможно, move-only).
- Возвращаемое значение [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible).
- Аргументы могут быть move-only.## Тестирование
Код покрыт unit-тестами при помощи [gtest](https://github.com/google/googletest).