mirror of
https://github.com/neovim/neovim.git
synced 2026-01-26 07:01:54 +10:00
marktree.c was originally constructed as a "generic" datatype, to make the prototyping of its internal logic as simple as possible and also as the usecases for various kinds of extmarks/decorations was not yet decided. As a consequence of this, various extra indirections and allocations was needed to use marktree to implement extmarks (ns/id pairs) and decorations of different kinds (some which is just a single highlight id, other an allocated list of virtual text/lines) This change removes a lot of indirection, by making Marktree specialized for the usecase. In particular, the namespace id and mark id is stored directly, instead of the 64-bit global id particular to the Marktree struct. This removes the two maps needed to convert between global and per-ns ids. Also, "small" decorations are stored inline, i.e. those who doesn't refer to external heap memory anyway. That is highlights (with priority+flags) are stored inline, while virtual text, which anyway occurs a lot of heap allocations, do not. (previously a hack was used to elide heap allocations for highlights with standard prio+flags) TODO(bfredl): the functionaltest-lua CI version of gcc is having severe issues with uint16_t bitfields, so splitting up compound assignments and redundant casts are needed. Clean this up once we switch to a working compiler version.
38 lines
862 B
C
38 lines
862 B
C
#ifndef NVIM_TYPES_H
|
|
#define NVIM_TYPES_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
// dummy to pass an ACL to a function
|
|
typedef void *vim_acl_T;
|
|
|
|
// Shorthand for unsigned variables. Many systems, but not all, have u_char
|
|
// already defined, so we use char_u to avoid trouble.
|
|
typedef unsigned char char_u;
|
|
|
|
// Can hold one decoded UTF-8 character.
|
|
typedef uint32_t u8char_T;
|
|
|
|
// Opaque handle used by API clients to refer to various objects in vim
|
|
typedef int handle_T;
|
|
|
|
// Opaque handle to a lua value. Must be free with `api_free_luaref` when
|
|
// not needed anymore! LUA_NOREF represents missing reference, i e to indicate
|
|
// absent callback etc.
|
|
typedef int LuaRef;
|
|
|
|
typedef handle_T NS;
|
|
|
|
typedef struct expand expand_T;
|
|
|
|
typedef enum {
|
|
kNone = -1,
|
|
kFalse = 0,
|
|
kTrue = 1,
|
|
} TriState;
|
|
|
|
typedef struct Decoration Decoration;
|
|
|
|
#endif // NVIM_TYPES_H
|