# TaskFactory

<a id="taskfactory"></a>

# TaskFactory

```cpp
#include <icy/sched/taskfactory.h>

class TaskFactory
```

[Defined in src/sched/include/icy/sched/taskfactory.h:49](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L49)

The [TaskFactory](#taskfactory) can dynamically instantiate registered [sched::Task](https://auscaster.com/icey/docs/api-reference/icy-sched-Task.md#task-5) and [sched::Trigger](https://auscaster.com/icey/docs/api-reference/icy-sched-Trigger.md#trigger-1) classes from named strings.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
| std::unique_ptr< [`sched::Task`](https://auscaster.com/icey/docs/api-reference/icy-sched-Task.md#task-5) > | [`createTask`](#createtask) `inline` | Instantiates and returns a registered task by type name. |
| `void` | [`registerTask`](#registertask) `inline` | Registers a task type T under the given name. Subsequent calls to [createTask()](#createtask) with this `type` will return a T instance. |
| `void` | [`unregisterTask`](#unregistertask) `inline` | Removes the task registration for `type`. No-op if not registered. |
| [`TaskMap`](#taskmap) | [`tasks`](#tasks-2) `const` `inline` | Returns a snapshot copy of the registered task map. |
| std::unique_ptr< [`sched::Trigger`](https://auscaster.com/icey/docs/api-reference/icy-sched-Trigger.md#trigger-1) > | [`createTrigger`](#createtrigger-1) `inline` | Instantiates and returns a registered trigger by type name. |
| `void` | [`registerTrigger`](#registertrigger) `inline` | Registers a trigger type T under the given name. |
| `void` | [`unregisterTrigger`](#unregistertrigger) `inline` | Removes the trigger registration for `type`. No-op if not registered. |
| [`TriggerMap`](#triggermap) | [`triggers`](#triggers) `const` `inline` | Returns a snapshot copy of the registered trigger map. |

---

<a id="createtask"></a>

### createTask

`inline`

```cpp
inline std::unique_ptr< sched::Task > createTask(const std::string & type)
```

[Defined in src/sched/include/icy/sched/taskfactory.h:67](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L67)

Instantiates and returns a registered task by type name. 
#### Returns
Owning pointer to the new task instance.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `const std::string &` | Registered type name. |

#### Exceptions

| Exception | Description |
|-----------|-------------|
| `std::runtime_error` | if `type` is not registered. |

---

<a id="registertask"></a>

### registerTask

`inline`

```cpp
template<typename T> inline void registerTask(const std::string & type)
```

[Defined in src/sched/include/icy/sched/taskfactory.h:81](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L81)

Registers a task type T under the given name. Subsequent calls to [createTask()](#createtask) with this `type` will return a T instance.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `const std::string &` | Type name string to register. |

---

<a id="unregistertask"></a>

### unregisterTask

`inline`

```cpp
inline void unregisterTask(const std::string & type)
```

[Defined in src/sched/include/icy/sched/taskfactory.h:89](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L89)

Removes the task registration for `type`. No-op if not registered.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `const std::string &` | Type name to deregister. |

---

<a id="tasks-2"></a>

### tasks

`const` `inline`

```cpp
inline TaskMap tasks() const
```

[Defined in src/sched/include/icy/sched/taskfactory.h:99](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L99)

Returns a snapshot copy of the registered task map.

---

<a id="createtrigger-1"></a>

### createTrigger

`inline`

```cpp
inline std::unique_ptr< sched::Trigger > createTrigger(const std::string & type)
```

[Defined in src/sched/include/icy/sched/taskfactory.h:114](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L114)

Instantiates and returns a registered trigger by type name. 
#### Returns
Owning pointer to the new trigger instance.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `const std::string &` | Registered type name. |

#### Exceptions

| Exception | Description |
|-----------|-------------|
| `std::runtime_error` | if `type` is not registered. |

---

<a id="registertrigger"></a>

### registerTrigger

`inline`

```cpp
template<typename T> inline void registerTrigger(const std::string & type)
```

[Defined in src/sched/include/icy/sched/taskfactory.h:127](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L127)

Registers a trigger type T under the given name.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `const std::string &` | Type name string to register. |

---

<a id="unregistertrigger"></a>

### unregisterTrigger

`inline`

```cpp
inline void unregisterTrigger(const std::string & type)
```

[Defined in src/sched/include/icy/sched/taskfactory.h:135](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L135)

Removes the trigger registration for `type`. No-op if not registered.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `const std::string &` | Type name to deregister. |

---

<a id="triggers"></a>

### triggers

`const` `inline`

```cpp
inline TriggerMap triggers() const
```

[Defined in src/sched/include/icy/sched/taskfactory.h:145](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L145)

Returns a snapshot copy of the registered trigger map.

## Public Static Methods

| Return | Name | Description |
|--------|------|-------------|
| [`TaskFactory`](#taskfactory) & | [`getDefault`](#getdefault-6) `static` `inline` | Returns the default [TaskFactory](#taskfactory) singleton. |

---

<a id="getdefault-6"></a>

### getDefault

`static` `inline`

```cpp
static inline TaskFactory & getDefault()
```

[Defined in src/sched/include/icy/sched/taskfactory.h:53](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L53)

Returns the default [TaskFactory](#taskfactory) singleton.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `std::mutex` | [`_mutex`](#_mutex-22)  |  |
| [`TaskMap`](#taskmap) | [`_tasks`](#_tasks-3)  |  |
| [`TriggerMap`](#triggermap) | [`_triggers`](#_triggers)  |  |

---

<a id="_mutex-22"></a>

### _mutex

```cpp
std::mutex _mutex
```

[Defined in src/sched/include/icy/sched/taskfactory.h:152](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L152)

---

<a id="_tasks-3"></a>

### _tasks

```cpp
TaskMap _tasks
```

Type: [`TaskMap`](#taskmap)

[Defined in src/sched/include/icy/sched/taskfactory.h:154](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L154)

---

<a id="_triggers"></a>

### _triggers

```cpp
TriggerMap _triggers
```

Type: [`TriggerMap`](#triggermap)

[Defined in src/sched/include/icy/sched/taskfactory.h:155](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L155)

## Public Types

| Name | Description |
|------|-------------|
| [`TaskMap`](#taskmap)  | Scheduled Tasks. |
| [`TriggerMap`](#triggermap)  | Schedule Triggers. |

---

<a id="taskmap"></a>

### TaskMap

```cpp
using TaskMap = std::map< std::string, std::unique_ptr< sched::Task >(*)()>
```

Type: std::map< std::string, std::unique_ptr< [`sched::Task`](https://auscaster.com/icey/docs/api-reference/icy-sched-Task.md#task-5) >(*)()>

[Defined in src/sched/include/icy/sched/taskfactory.h:61](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L61)

Scheduled Tasks.

---

<a id="triggermap"></a>

### TriggerMap

```cpp
using TriggerMap = std::map< std::string, std::unique_ptr< sched::Trigger >(*)()>
```

Type: std::map< std::string, std::unique_ptr< [`sched::Trigger`](https://auscaster.com/icey/docs/api-reference/icy-sched-Trigger.md#trigger-1) >(*)()>

[Defined in src/sched/include/icy/sched/taskfactory.h:108](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/taskfactory.h#L108)

Schedule Triggers.
