# TimedManager

<a id="timedmanager"></a>

# TimedManager

```cpp
#include <icy/timedmanager.h>

template<classTKey, classTValue>
class TimedManager
```

[Defined in src/base/include/icy/timedmanager.h:29](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L29)

> **Inherits:** [`KeyedStore< TKey, TValue >`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore)

Timed pointer manager

Provides timed persistent data storage for class instances. TValue must implement the clone() method.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`TimedManager`](#timedmanager-1) | `function` | Declared here |
| [`~TimedManager`](#timedmanager-2) | `function` | Declared here |
| [`add`](#add-7) | `function` | Declared here |
| [`expires`](#expires) | `function` | Declared here |
| [`expires`](#expires-1) | `function` | Declared here |
| [`clear`](#clear-6) | `function` | Declared here |
| [`_tmutex`](#_tmutex) | `variable` | Declared here |
| [`_timeouts`](#_timeouts) | `variable` | Declared here |
| [`_timer`](#_timer-1) | `variable` | Declared here |
| [`setTimeout`](#settimeout-1) | `function` | Declared here |
| [`onRemove`](#onremove-3) | `function` | Declared here |
| [`onTimeout`](#ontimeout-1) | `function` | Declared here |
| [`onTimerUpdate`](#ontimerupdate) | `function` | Declared here |
| [`Base`](#base) | `typedef` | Declared here |
| [`TimeoutMap`](#timeoutmap) | `typedef` | Declared here |
| [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-1) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`~KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-2) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-3) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#operator-43) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-4) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#operator-44) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`get`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#get-3) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`add`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#add-1) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`tryAdd`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#tryadd) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`put`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#put-3) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`erase`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#erase) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`contains`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#contains) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`empty`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#empty) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`size`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#size-2) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`clear`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#clear-1) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map-1) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`begin`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#begin-3) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`end`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#end) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`begin`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#begin-4) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`end`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#end-1) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`_map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#_map) | `variable` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`onAdd`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#onadd) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`onRemove`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#onremove) | `function` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |
| [`Map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map-2) | `typedef` | Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore) |

## Inherited from [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-1)  | Defaulted constructor. |
| `function` | [`~KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-2) `virtual` `inline` |  |
| `function` | [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-3)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#operator-43)  | Deleted assignment operator. |
| `function` | [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore-4)  | Defaulted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#operator-44)  | Defaulted assignment operator. |
| `function` | [`get`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#get-3) `const` `inline` | Returns the item for `key`, or nullptr if not found. |
| `function` | [`add`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#add-1) `inline` | Inserts a uniquely owned item. Returns a reference to the stored item. |
| `function` | [`tryAdd`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#tryadd) `inline` | Inserts if absent; returns false on duplicate (never throws). |
| `function` | [`put`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#put-3) `inline` | Inserts or replaces the item under `key`. |
| `function` | [`erase`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#erase) `inline` | Removes and destroys the item under `key`. |
| `function` | [`contains`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#contains) `const` `inline` |  |
| `function` | [`empty`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#empty) `const` `inline` |  |
| `function` | [`size`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#size-2) `const` `inline` |  |
| `function` | [`clear`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#clear-1) `inline` |  |
| `function` | [`map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) `inline` | Direct map access for iteration. |
| `function` | [`map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map-1) `const` `inline` |  |
| `function` | [`begin`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#begin-3) `inline` |  |
| `function` | [`end`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#end) `inline` |  |
| `function` | [`begin`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#begin-4) `const` `inline` |  |
| `function` | [`end`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#end-1) `const` `inline` |  |
| `variable` | [`_map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#_map)  |  |
| `function` | [`onAdd`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#onadd) `virtual` `inline` | Override for lifecycle reactions. |
| `function` | [`onRemove`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#onremove) `virtual` `inline` |  |
| `typedef` | [`Map`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map-2)  |  |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`TimedManager`](#timedmanager-1) `inline` | Constructs a [TimedManager](#timedmanager) and starts the internal expiry-check timer. |
|  | [`~TimedManager`](#timedmanager-2) `virtual` `inline` |  |
| [`void`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`add`](#add-7) `inline` | Add an item which will expire (and be deleted) after the specified timeout value. If the timeout is 0 the item will be stored indefinitely. The [TimedManager](#timedmanager) assumes ownership of the given pointer. |
| [`bool`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`expires`](#expires) `virtual` `inline` | Update the item expiry timeout. |
| [`bool`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`expires`](#expires-1) `virtual` `inline` | Update the item expiry timeout. |
| [`void`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`clear`](#clear-6) `virtual` `inline` `override` | Removes all items and their associated timeouts. |

---

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

### TimedManager

`inline`

```cpp
inline TimedManager(uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/base/include/icy/timedmanager.h:37](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L37)

Constructs a [TimedManager](#timedmanager) and starts the internal expiry-check timer.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop used by the internal timer (default: process-wide default loop). |

---

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

### ~TimedManager

`virtual` `inline`

```cpp
virtual inline ~TimedManager()
```

[Defined in src/base/include/icy/timedmanager.h:43](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L43)

---

<a id="add-7"></a>

### add

`inline`

```cpp
inline void add(constTKey & key, std::unique_ptr< TValue > item, long timeout = 0)
```

[Defined in src/base/include/icy/timedmanager.h:51](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L51)

Add an item which will expire (and be deleted) after the specified timeout value. If the timeout is 0 the item will be stored indefinitely. The [TimedManager](#timedmanager) assumes ownership of the given pointer.

---

<a id="expires"></a>

### expires

`virtual` `inline`

```cpp
virtual inline bool expires(constTKey & key, long timeout)
```

[Defined in src/base/include/icy/timedmanager.h:60](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L60)

Update the item expiry timeout.

---

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

### expires

`virtual` `inline`

```cpp
virtual inline bool expires(TValue * item, long timeout)
```

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

Update the item expiry timeout.

---

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

### clear

`virtual` `inline` `override`

```cpp
virtual inline void clear() override
```

[Defined in src/base/include/icy/timedmanager.h:74](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L74)

Removes all items and their associated timeouts.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `std::mutex` | [`_tmutex`](#_tmutex)  |  |
| [`TimeoutMap`](#timeoutmap) | [`_timeouts`](#_timeouts)  |  |
| [`Timer`](https://auscaster.com/icey/docs/api-reference/icy-Timer.md#timer) | [`_timer`](#_timer-1)  |  |

---

<a id="_tmutex"></a>

### _tmutex

```cpp
std::mutex _tmutex
```

[Defined in src/base/include/icy/timedmanager.h:153](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L153)

---

<a id="_timeouts"></a>

### _timeouts

```cpp
TimeoutMap _timeouts
```

Type: [`TimeoutMap`](#timeoutmap)

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

---

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

### _timer

```cpp
Timer _timer
```

Type: [`Timer`](https://auscaster.com/icey/docs/api-reference/icy-Timer.md#timer)

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

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| [`bool`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`setTimeout`](#settimeout-1) `virtual` `inline` | Sets or removes the expiry timeout for a specific item pointer. If timeout > 0, starts a countdown; if timeout == 0, removes any existing timeout. |
| [`void`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`onRemove`](#onremove-3) `virtual` `inline` `override` | Called when an item is removed from the collection. Erases the item's timeout entry and calls the base implementation. |
| [`void`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`onTimeout`](#ontimeout-1) `virtual` `inline` | Called when an item's timeout expires. Default implementation removes and deletes the item. |
| [`void`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | [`onTimerUpdate`](#ontimerupdate) `inline` | Internal timer callback; iterates all tracked timeouts and calls [onTimeout()](#ontimeout-1) for any that have expired. |

---

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

### setTimeout

`virtual` `inline`

```cpp
virtual inline bool setTimeout(TValue * item, long timeout)
```

[Defined in src/base/include/icy/timedmanager.h:88](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L88)

Sets or removes the expiry timeout for a specific item pointer. If timeout > 0, starts a countdown; if timeout == 0, removes any existing timeout. 
#### Returns
true on success.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `item` | [`TValue`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) * | Pointer to the managed item. |
| `timeout` | [`long`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) | Delay in milliseconds, or 0 to clear the timeout. |

#### Exceptions

| Exception | Description |
|-----------|-------------|
| `std::logic_error` | if item is nullptr. |

---

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

### onRemove

`virtual` `inline` `override`

```cpp
virtual inline void onRemove(constTKey & key, TValue * item) override
```

[Defined in src/base/include/icy/timedmanager.h:113](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L113)

Called when an item is removed from the collection. Erases the item's timeout entry and calls the base implementation.

#### Reimplements

- [`KeyedStore::onRemove`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#onremove)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `key` | [`const`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map)[`TKey`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) & | Key of the removed item. |
| `item` | [`TValue`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) * | Pointer to the removed item. |

---

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

### onTimeout

`virtual` `inline`

```cpp
virtual inline void onTimeout(TValue * item)
```

[Defined in src/base/include/icy/timedmanager.h:126](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L126)

Called when an item's timeout expires. Default implementation removes and deletes the item.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `item` | [`TValue`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) * | Pointer to the expired item. |

---

<a id="ontimerupdate"></a>

### onTimerUpdate

`inline`

```cpp
inline void onTimerUpdate()
```

[Defined in src/base/include/icy/timedmanager.h:139](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L139)

Internal timer callback; iterates all tracked timeouts and calls [onTimeout()](#ontimeout-1) for any that have expired.

## Public Types

| Name | Description |
|------|-------------|
| [`Base`](#base)  |  |
| [`TimeoutMap`](#timeoutmap)  |  |

---

<a id="base"></a>

### Base

```cpp
using Base = KeyedStore< TKey, TValue >
```

Type: [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore)< [`TKey`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map), [`TValue`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) >

[Defined in src/base/include/icy/timedmanager.h:32](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L32)

---

<a id="timeoutmap"></a>

### TimeoutMap

```cpp
using TimeoutMap = std::map< TValue *, Timeout >
```

Type: std::map< [`TValue`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#map) *, [`Timeout`](https://auscaster.com/icey/docs/api-reference/icy-Timeout.md#timeout-1) >

[Defined in src/base/include/icy/timedmanager.h:33](https://github.com/auscaster/icey/blob/main/src/base/include/icy/timedmanager.h#L33)
