# basic::Decoder

<a id="decoder-5"></a>

# Decoder

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

class Decoder
```

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

> **Subclassed by:** [`Decoder`](https://auscaster.com/icey/docs/api-reference/icy-base64-Decoder.md#decoder-3), [`Decoder`](https://auscaster.com/icey/docs/api-reference/icy-hex-Decoder.md#decoder)

Abstract interface for stream decoders.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Decoder`](#decoder-6)  | Defaulted constructor. |
|  | [`~Decoder`](#decoder-7) `virtual` | Defaulted destructor. |
| `ssize_t` | [`decode`](#decode-9) `virtual` | Decodes nread bytes from inbuf and writes decoded output to outbuf. |
| `ssize_t` | [`finalize`](#finalize-5) `virtual` `inline` | Flushes any buffered state and writes final output to outbuf. |

---

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

### Decoder

```cpp
Decoder() = default
```

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

Defaulted constructor.

---

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

### ~Decoder

`virtual`

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

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

#### Reimplemented by

- [`Decoder::~Decoder`](https://auscaster.com/icey/docs/api-reference/icy-hex-Decoder.md#decoder-2)

Defaulted destructor.

---

<a id="decode-9"></a>

### decode

`virtual`

```cpp
virtual ssize_t decode(const char * inbuf, size_t nread, char * outbuf)
```

[Defined in src/base/include/icy/interface.h:44](https://github.com/auscaster/icey/blob/main/src/base/include/icy/interface.h#L44)

Decodes nread bytes from inbuf and writes decoded output to outbuf. 
#### Returns
Number of bytes written to outbuf, or -1 on error.

#### Reimplemented by

- [`Decoder::decode`](https://auscaster.com/icey/docs/api-reference/icy-base64-Decoder.md#decode-7)
- [`Decoder::decode`](https://auscaster.com/icey/docs/api-reference/icy-hex-Decoder.md#decode-4)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `inbuf` | `const char *` | Encoded input buffer. |
| `nread` | `size_t` | Number of bytes to decode from inbuf. |
| `outbuf` | `char *` | Destination buffer for decoded output. |

---

<a id="finalize-5"></a>

### finalize

`virtual` `inline`

```cpp
virtual inline ssize_t finalize(char * outbuf)
```

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

Flushes any buffered state and writes final output to outbuf. 
#### Returns
Number of bytes written, or 0 if nothing to flush.

#### Reimplemented by

- [`Decoder::finalize`](https://auscaster.com/icey/docs/api-reference/icy-hex-Decoder.md#finalize-1)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `outbuf` | `char *` | Destination buffer for any remaining output. |
