# Application

<a id="application"></a>

# Application

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

class Application
```

[Defined in src/base/include/icy/application.h:39](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L39)

Main icey application class.

This class exposes basic features required by most applications:

* Running the event loop
* Command line option parsing **See also**: [OptionParser](https://auscaster.com/icey/docs/api-reference/icy-OptionParser.md#optionparser)

* Shutdown signal (Ctrl-C) handling
* Garbage collection

#### Example

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

int main()
{
    icy::Application app;
    app.waitForShutdown();
    return 0;
}
```

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | [`loop`](#loop)  | Active event loop. |

---

<a id="loop"></a>

### loop

```cpp
uv::Loop * loop
```

Type: [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) *

[Defined in src/base/include/icy/application.h:56](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L56)

Active event loop.

The event loop may be assigned on construction, otherwise the default event loop will be used.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Application`](#application-1)  | Constructor. |
|  | [`~Application`](#application-2)  | Destructor. |
| `void` | [`run`](#run)  | Run the application event loop. |
| `void` | [`stop`](#stop)  | Stop the application event loop. |
| `void` | [`finalize`](#finalize)  | Finalize and free any remaining pointers still held by the application event loop. |
| `void` | [`waitForShutdown`](#waitforshutdown-1)  | Bind the shutdown signal and run the main event loop. |
| `void` | [`bindShutdownSignal`](#bindshutdownsignal)  | Bind the shutdown signal. |

---

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

### Application

```cpp
Application(uv::Loop * loop = uv::defaultLoop())
```

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

Constructor.

---

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

### ~Application

```cpp
~Application()
```

[Defined in src/base/include/icy/application.h:46](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L46)

Destructor.

---

<a id="run"></a>

### run

```cpp
void run()
```

[Defined in src/base/include/icy/application.h:63](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L63)

Run the application event loop.

---

<a id="stop"></a>

### stop

```cpp
void stop()
```

[Defined in src/base/include/icy/application.h:66](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L66)

Stop the application event loop.

---

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

### finalize

```cpp
void finalize()
```

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

Finalize and free any remaining pointers still held by the application event loop.

---

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

### waitForShutdown

```cpp
void waitForShutdown(std::function< void(void *)> callback = nullptr, void * opaque = nullptr)
```

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

Bind the shutdown signal and run the main event loop.

---

<a id="bindshutdownsignal"></a>

### bindShutdownSignal

```cpp
void bindShutdownSignal(std::function< void(void *)> callback = nullptr, void * opaque = nullptr)
```

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

Bind the shutdown signal.

## Public Static Methods

| Return | Name | Description |
|--------|------|-------------|
| [`Application`](#application) & | [`getDefault`](#getdefault) `static` | Returns the default [Application](#application) singleton, although [Application](#application) instances may be initialized individually. |

---

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

### getDefault

`static`

```cpp
static Application & getDefault()
```

[Defined in src/base/include/icy/application.h:50](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L50)

Returns the default [Application](#application) singleton, although [Application](#application) instances may be initialized individually.

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Application`](#application-3)  | Deleted constructor. |
| [`Application`](#application) & | [`operator=`](#operator-3)  | Deleted assignment operator. |
|  | [`Application`](#application-4)  | Deleted constructor. |
| [`Application`](#application) & | [`operator=`](#operator-4)  | Deleted assignment operator. |

---

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

### Application

```cpp
Application(const Application &) = delete
```

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

Deleted constructor.

---

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

### operator=

```cpp
Application & operator=(const Application &) = delete
```

[Defined in src/base/include/icy/application.h:86](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L86)

Deleted assignment operator.

---

<a id="application-4"></a>

### Application

```cpp
Application(Application &&) = delete
```

[Defined in src/base/include/icy/application.h:87](https://github.com/auscaster/icey/blob/main/src/base/include/icy/application.h#L87)

Deleted constructor.

---

<a id="operator-4"></a>

### operator=

```cpp
Application & operator=(Application &&) = delete
```

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

Deleted assignment operator.
