# PacketCreationStrategy

<a id="packetcreationstrategy"></a>

# PacketCreationStrategy

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

template<class PacketT>
struct PacketCreationStrategy
```

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

> **Inherits:** [`IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy)

This template class implements an adapter that sits between an SignalBase and an object receiving notifications from it.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`PacketCreationStrategy`](#packetcreationstrategy-1) | `function` | Declared here |
| [`create`](#create-1) | `function` | Declared here |
| [`priority`](#priority-1) | `function` | Declared here |
| [`_priority`](#_priority) | `variable` | Declared here |
| [`IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy-1) | `function` | Inherited from [`IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy) |
| [`~IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy-2) | `function` | Inherited from [`IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy) |
| [`create`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#create) | `function` | Inherited from [`IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy) |
| [`priority`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#priority) | `function` | Inherited from [`IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy) |

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

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy-1)  | Defaulted constructor. |
| `function` | [`~IPacketCreationStrategy`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#ipacketcreationstrategy-2) `virtual` | Defaulted destructor. |
| `function` | [`create`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#create) `virtual` `const` | Attempts to create a typed packet from the given buffer. |
| `function` | [`priority`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#priority) `virtual` `const` | Returns the dispatch priority of this strategy (0–100; higher runs first). |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`PacketCreationStrategy`](#packetcreationstrategy-1) `inline` |  |
| [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) * | [`create`](#create-1) `virtual` `const` `inline` `override` | Attempts to default-construct a `PacketT`, calling its `read()` method. |
| `int` | [`priority`](#priority-1) `virtual` `const` `inline` `override` |  |

---

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

### PacketCreationStrategy

`inline`

```cpp
inline PacketCreationStrategy(int priority = 0)
```

[Defined in src/base/include/icy/packetfactory.h:59](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetfactory.h#L59)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `priority` | `int` | Dispatch priority in the range 0–100. |

#### Exceptions

| Exception | Description |
|-----------|-------------|
| `std::logic_error` | if priority exceeds 100. |

---

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

### create

`virtual` `const` `inline` `override`

```cpp
virtual inline IPacket * create(const ConstBuffer & buffer, size_t & nread) const override
```

[Defined in src/base/include/icy/packetfactory.h:70](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetfactory.h#L70)

Attempts to default-construct a `PacketT`, calling its `read()` method. 
#### Returns
Newly allocated `PacketT` on success, nullptr if read() returns 0.

#### Reimplements

- [`IPacketCreationStrategy::create`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#create)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `buffer` | const [`ConstBuffer`](https://auscaster.com/icey/docs/api-reference/icy-ConstBuffer.md#constbuffer-6) & | Raw input data. |
| `nread` | `size_t &` | Set to the number of bytes consumed when read() succeeds. |

---

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

### priority

`virtual` `const` `inline` `override`

```cpp
virtual inline int priority() const override
```

[Defined in src/base/include/icy/packetfactory.h:79](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetfactory.h#L79)

#### Returns
The priority value assigned at construction.

#### Reimplements

- [`IPacketCreationStrategy::priority`](https://auscaster.com/icey/docs/api-reference/icy-IPacketCreationStrategy.md#priority)

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `int` | [`_priority`](#_priority)  |  |

---

<a id="_priority"></a>

### _priority

```cpp
int _priority
```

[Defined in src/base/include/icy/packetfactory.h:85](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetfactory.h#L85)
