mirror of
https://github.com/neovim/neovim.git
synced 2026-02-10 06:21:49 +10:00
Allow Include What You Use to remove unnecessary includes and only include what is necessary. This helps with reducing compilation times and makes it easier to visualise which dependencies are actually required. Work on https://github.com/neovim/neovim/issues/549, but doesn't close it since this only works fully for .c files and not headers.
48 lines
1.4 KiB
C
48 lines
1.4 KiB
C
// Bridge for communication between a UI thread and nvim core.
|
|
// Used by the built-in TUI and libnvim-based UIs.
|
|
#ifndef NVIM_UI_BRIDGE_H
|
|
#define NVIM_UI_BRIDGE_H
|
|
|
|
#include <stdbool.h>
|
|
#include <uv.h>
|
|
|
|
#include "nvim/event/defs.h"
|
|
#include "nvim/ui.h"
|
|
|
|
struct ui_bridge_data;
|
|
|
|
typedef struct ui_bridge_data UIBridgeData;
|
|
typedef void (*ui_main_fn)(UIBridgeData *bridge, UI *ui);
|
|
struct ui_bridge_data {
|
|
UI bridge; // actual UI passed to ui_attach
|
|
UI *ui; // UI pointer that will have its callback called in
|
|
// another thread
|
|
event_scheduler scheduler;
|
|
uv_thread_t ui_thread;
|
|
ui_main_fn ui_main;
|
|
uv_mutex_t mutex;
|
|
uv_cond_t cond;
|
|
// When the UI thread is called, the main thread will suspend until
|
|
// the call returns. This flag is used as a condition for the main
|
|
// thread to continue.
|
|
bool ready;
|
|
// When a stop request is sent from the main thread, it must wait until the UI
|
|
// thread finishes handling all events. This flag is set by the UI thread as a
|
|
// signal that it will no longer send messages to the main thread.
|
|
bool stopped;
|
|
};
|
|
|
|
#define CONTINUE(b) \
|
|
do { \
|
|
UIBridgeData *d = (UIBridgeData *)b; \
|
|
uv_mutex_lock(&d->mutex); \
|
|
d->ready = true; \
|
|
uv_cond_signal(&d->cond); \
|
|
uv_mutex_unlock(&d->mutex); \
|
|
} while (0)
|
|
|
|
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
|
# include "ui_bridge.h.generated.h"
|
|
#endif
|
|
#endif // NVIM_UI_BRIDGE_H
|