# IRegistry

<a id="iregistry"></a>

# IRegistry

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

template<class ItemT>
class IRegistry
```

[Defined in src/base/include/icy/iregistry.h:25](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L25)

Abstract interface for object registries.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`Signal`](https://auscaster.com/icey/docs/api-reference/icy-Signal.md#signal)< void(const std::string &)> | [`TypeRegistered`](#typeregistered)  |  |
| [`Signal`](https://auscaster.com/icey/docs/api-reference/icy-Signal.md#signal)< void(const std::string &)> | [`TypeUnregistered`](#typeunregistered)  |  |

---

<a id="typeregistered"></a>

### TypeRegistered

```cpp
Signal< void(const std::string &)> TypeRegistered
```

Type: [`Signal`](https://auscaster.com/icey/docs/api-reference/icy-Signal.md#signal)< void(const std::string &)>

[Defined in src/base/include/icy/iregistry.h:77](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L77)

---

<a id="typeunregistered"></a>

### TypeUnregistered

```cpp
Signal< void(const std::string &)> TypeUnregistered
```

Type: [`Signal`](https://auscaster.com/icey/docs/api-reference/icy-Signal.md#signal)< void(const std::string &)>

[Defined in src/base/include/icy/iregistry.h:78](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L78)

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`IRegistry`](#iregistry-1)  | Defaulted constructor. |
|  | [`~IRegistry`](#iregistry-2) `virtual` | Defaulted destructor. |
| `ItemT *` | [`createInstance`](#createinstance) `virtual` `inline` | Creates and returns a new heap-allocated instance of the type registered under key s. |
| `void` | [`registerType`](#registertype) `inline` | Registers type T under the given key s. Emits TypeRegistered. Subsequent calls to createInstance(s) will return `new T()`. |
| `void` | [`unregisterType`](#unregistertype) `virtual` `inline` | Removes the type registered under key s. Emits TypeUnregistered. Does nothing if s is not registered. |
| [`TypeMap`](#typemap) | [`types`](#types) `const` `inline` | Returns a copy of the current type map. |

---

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

### IRegistry

```cpp
IRegistry() = default
```

[Defined in src/base/include/icy/iregistry.h:36](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L36)

Defaulted constructor.

---

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

### ~IRegistry

`virtual`

```cpp
virtual ~IRegistry() = default
```

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

Defaulted destructor.

---

<a id="createinstance"></a>

### createInstance

`virtual` `inline`

```cpp
virtual inline ItemT * createInstance(const std::string & s)
```

[Defined in src/base/include/icy/iregistry.h:42](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L42)

Creates and returns a new heap-allocated instance of the type registered under key s. 
#### Returns
Pointer to the new instance, or nullptr if s is not registered.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `s` | `const std::string &` | The registration key (type name). |

---

<a id="registertype"></a>

### registerType

`inline`

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

[Defined in src/base/include/icy/iregistry.h:55](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L55)

Registers type T under the given key s. Emits TypeRegistered. Subsequent calls to createInstance(s) will return `new T()`.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `s` | `const std::string &` | Registration key (type name). |

---

<a id="unregistertype"></a>

### unregisterType

`virtual` `inline`

```cpp
virtual inline void unregisterType(const std::string & s)
```

[Defined in src/base/include/icy/iregistry.h:64](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L64)

Removes the type registered under key s. Emits TypeUnregistered. Does nothing if s is not registered.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `s` | `const std::string &` | Registration key to remove. |

---

<a id="types"></a>

### types

`const` `inline`

```cpp
inline TypeMap types() const
```

[Defined in src/base/include/icy/iregistry.h:75](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L75)

Returns a copy of the current type map. 
#### Returns
Map of registration keys to factory function pointers.

## Public Types

| Name | Description |
|------|-------------|
| [`TypeMap`](#typemap)  |  |

---

<a id="typemap"></a>

### TypeMap

```cpp
using TypeMap = std::map< std::string, ItemT *(*)()>
```

[Defined in src/base/include/icy/iregistry.h:34](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L34)

## Private Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`TypeMap`](#typemap) | [`_types`](#_types)  |  |

---

<a id="_types"></a>

### _types

```cpp
TypeMap _types
```

Type: [`TypeMap`](#typemap)

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

## Private Static Methods

| Return | Name | Description |
|--------|------|-------------|
| `ItemT *` | [`createT`](#createt) `static` `inline` |  |

---

<a id="createt"></a>

### createT

`static` `inline`

```cpp
template<typename T> static inline ItemT * createT()
```

[Defined in src/base/include/icy/iregistry.h:28](https://github.com/auscaster/icey/blob/main/src/base/include/icy/iregistry.h#L28)
