2025-04-25 06:53:17 +02:00

27585 lines
1.2 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/// <reference path="./gobject-2.0.d.ts" />
/**
* Type Definitions for Gjs (https://gjs.guide/)
*
* These type definitions are automatically generated, do not edit them by hand.
* If you found a bug fix it in `ts-for-gir` or create a bug report on https://github.com/gjsify/ts-for-gir
*
* The based EJS template file is used for the generated .d.ts file of each GIR module like Gtk-4.0, GObject-2.0, ...
*/
declare module 'gi://GLib?version=2.0' {
// Module dependencies
import type GObject from 'gi://GObject?version=2.0';
export namespace GLib {
/**
* GLib-2.0
*/
/**
* Error codes returned by bookmark file parsing.
*/
class BookmarkFileError extends Error {
static $gtype: GObject.GType<BookmarkFileError>;
// Static fields
/**
* URI was ill-formed
*/
static INVALID_URI: number;
/**
* a requested field was not found
*/
static INVALID_VALUE: number;
/**
* a requested application did
* not register a bookmark
*/
static APP_NOT_REGISTERED: number;
/**
* a requested URI was not found
*/
static URI_NOT_FOUND: number;
/**
* document was ill formed
*/
static READ: number;
/**
* the text being parsed was
* in an unknown encoding
*/
static UNKNOWN_ENCODING: number;
/**
* an error occurred while writing
*/
static WRITE: number;
/**
* requested file was not found
*/
static FILE_NOT_FOUND: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* The hashing algorithm to be used by #GChecksum when performing the
* digest of some data.
*
* Note that the #GChecksumType enumeration may be extended at a later
* date to include new hashing algorithm types.
*/
/**
* The hashing algorithm to be used by #GChecksum when performing the
* digest of some data.
*
* Note that the #GChecksumType enumeration may be extended at a later
* date to include new hashing algorithm types.
*/
export namespace ChecksumType {
export const $gtype: GObject.GType<ChecksumType>;
}
enum ChecksumType {
/**
* Use the MD5 hashing algorithm
*/
MD5,
/**
* Use the SHA-1 hashing algorithm
*/
SHA1,
/**
* Use the SHA-256 hashing algorithm
*/
SHA256,
/**
* Use the SHA-512 hashing algorithm (Since: 2.36)
*/
SHA512,
/**
* Use the SHA-384 hashing algorithm (Since: 2.51)
*/
SHA384,
}
/**
* Error codes returned by character set conversion routines.
*/
class ConvertError extends Error {
static $gtype: GObject.GType<ConvertError>;
// Static fields
/**
* Conversion between the requested character
* sets is not supported.
*/
static NO_CONVERSION: number;
/**
* Invalid byte sequence in conversion input;
* or the character sequence could not be represented in the target
* character set.
*/
static ILLEGAL_SEQUENCE: number;
/**
* Conversion failed for some reason.
*/
static FAILED: number;
/**
* Partial character sequence at end of input.
*/
static PARTIAL_INPUT: number;
/**
* URI is invalid.
*/
static BAD_URI: number;
/**
* Pathname is not an absolute path.
*/
static NOT_ABSOLUTE_PATH: number;
/**
* No memory available. Since: 2.40
*/
static NO_MEMORY: number;
/**
* An embedded NUL character is present in
* conversion output where a NUL-terminated string is expected.
* Since: 2.56
*/
static EMBEDDED_NUL: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* This enumeration isn't used in the API, but may be useful if you need
* to mark a number as a day, month, or year.
*/
/**
* This enumeration isn't used in the API, but may be useful if you need
* to mark a number as a day, month, or year.
*/
export namespace DateDMY {
export const $gtype: GObject.GType<DateDMY>;
}
enum DateDMY {
/**
* a day
*/
DAY,
/**
* a month
*/
MONTH,
/**
* a year
*/
YEAR,
}
/**
* Enumeration representing a month; values are %G_DATE_JANUARY,
* %G_DATE_FEBRUARY, etc. %G_DATE_BAD_MONTH is the invalid value.
*/
/**
* Enumeration representing a month; values are %G_DATE_JANUARY,
* %G_DATE_FEBRUARY, etc. %G_DATE_BAD_MONTH is the invalid value.
*/
export namespace DateMonth {
export const $gtype: GObject.GType<DateMonth>;
}
enum DateMonth {
/**
* invalid value
*/
BAD_MONTH,
/**
* January
*/
JANUARY,
/**
* February
*/
FEBRUARY,
/**
* March
*/
MARCH,
/**
* April
*/
APRIL,
/**
* May
*/
MAY,
/**
* June
*/
JUNE,
/**
* July
*/
JULY,
/**
* August
*/
AUGUST,
/**
* September
*/
SEPTEMBER,
/**
* October
*/
OCTOBER,
/**
* November
*/
NOVEMBER,
/**
* December
*/
DECEMBER,
}
/**
* Enumeration representing a day of the week; %G_DATE_MONDAY,
* %G_DATE_TUESDAY, etc. %G_DATE_BAD_WEEKDAY is an invalid weekday.
*/
/**
* Enumeration representing a day of the week; %G_DATE_MONDAY,
* %G_DATE_TUESDAY, etc. %G_DATE_BAD_WEEKDAY is an invalid weekday.
*/
export namespace DateWeekday {
export const $gtype: GObject.GType<DateWeekday>;
}
enum DateWeekday {
/**
* invalid value
*/
BAD_WEEKDAY,
/**
* Monday
*/
MONDAY,
/**
* Tuesday
*/
TUESDAY,
/**
* Wednesday
*/
WEDNESDAY,
/**
* Thursday
*/
THURSDAY,
/**
* Friday
*/
FRIDAY,
/**
* Saturday
*/
SATURDAY,
/**
* Sunday
*/
SUNDAY,
}
/**
* The possible errors, used in the `v_error` field
* of #GTokenValue, when the token is a %G_TOKEN_ERROR.
*/
/**
* The possible errors, used in the `v_error` field
* of #GTokenValue, when the token is a %G_TOKEN_ERROR.
*/
export namespace ErrorType {
export const $gtype: GObject.GType<ErrorType>;
}
enum ErrorType {
/**
* unknown error
*/
UNKNOWN,
/**
* unexpected end of file
*/
UNEXP_EOF,
/**
* unterminated string constant
*/
UNEXP_EOF_IN_STRING,
/**
* unterminated comment
*/
UNEXP_EOF_IN_COMMENT,
/**
* non-digit character in a number
*/
NON_DIGIT_IN_CONST,
/**
* digit beyond radix in a number
*/
DIGIT_RADIX,
/**
* non-decimal floating point number
*/
FLOAT_RADIX,
/**
* malformed floating point number
*/
FLOAT_MALFORMED,
}
/**
* Values corresponding to `errno` codes returned from file operations
* on UNIX. Unlike `errno` codes, GFileError values are available on
* all systems, even Windows. The exact meaning of each code depends
* on what sort of file operation you were performing; the UNIX
* documentation gives more details. The following error code descriptions
* come from the GNU C Library manual, and are under the copyright
* of that manual.
*
* It's not very portable to make detailed assumptions about exactly
* which errors will be returned from a given operation. Some errors
* don't occur on some systems, etc., sometimes there are subtle
* differences in when a system will report a given error, etc.
*/
class FileError extends Error {
static $gtype: GObject.GType<FileError>;
// Static fields
/**
* Operation not permitted; only the owner of
* the file (or other resource) or processes with special privileges
* can perform the operation.
*/
static EXIST: number;
/**
* File is a directory; you cannot open a directory
* for writing, or create or remove hard links to it.
*/
static ISDIR: number;
/**
* Permission denied; the file permissions do not
* allow the attempted operation.
*/
static ACCES: number;
/**
* Filename too long.
*/
static NAMETOOLONG: number;
/**
* No such file or directory. This is a "file
* doesn't exist" error for ordinary files that are referenced in
* contexts where they are expected to already exist.
*/
static NOENT: number;
/**
* A file that isn't a directory was specified when
* a directory is required.
*/
static NOTDIR: number;
/**
* No such device or address. The system tried to
* use the device represented by a file you specified, and it
* couldn't find the device. This can mean that the device file was
* installed incorrectly, or that the physical device is missing or
* not correctly attached to the computer.
*/
static NXIO: number;
/**
* The underlying file system of the specified file
* does not support memory mapping.
*/
static NODEV: number;
/**
* The directory containing the new link can't be
* modified because it's on a read-only file system.
*/
static ROFS: number;
/**
* Text file busy.
*/
static TXTBSY: number;
/**
* You passed in a pointer to bad memory.
* (GLib won't reliably return this, don't pass in pointers to bad
* memory.)
*/
static FAULT: number;
/**
* Too many levels of symbolic links were encountered
* in looking up a file name. This often indicates a cycle of symbolic
* links.
*/
static LOOP: number;
/**
* No space left on device; write operation on a
* file failed because the disk is full.
*/
static NOSPC: number;
/**
* No memory available. The system cannot allocate
* more virtual memory because its capacity is full.
*/
static NOMEM: number;
/**
* The current process has too many files open and
* can't open any more. Duplicate descriptors do count toward this
* limit.
*/
static MFILE: number;
/**
* There are too many distinct file openings in the
* entire system.
*/
static NFILE: number;
/**
* Bad file descriptor; for example, I/O on a
* descriptor that has been closed or reading from a descriptor open
* only for writing (or vice versa).
*/
static BADF: number;
/**
* Invalid argument. This is used to indicate
* various kinds of problems with passing the wrong argument to a
* library function.
*/
static INVAL: number;
/**
* Broken pipe; there is no process reading from the
* other end of a pipe. Every library function that returns this
* error code also generates a 'SIGPIPE' signal; this signal
* terminates the program if not handled or blocked. Thus, your
* program will never actually see this code unless it has handled
* or blocked 'SIGPIPE'.
*/
static PIPE: number;
/**
* Resource temporarily unavailable; the call might
* work if you try again later.
*/
static AGAIN: number;
/**
* Interrupted function call; an asynchronous signal
* occurred and prevented completion of the call. When this
* happens, you should try the call again.
*/
static INTR: number;
/**
* Input/output error; usually used for physical read
* or write errors. i.e. the disk or other physical device hardware
* is returning errors.
*/
static IO: number;
/**
* Operation not permitted; only the owner of the
* file (or other resource) or processes with special privileges can
* perform the operation.
*/
static PERM: number;
/**
* Function not implemented; this indicates that
* the system is missing some functionality.
*/
static NOSYS: number;
/**
* Does not correspond to a UNIX error code; this
* is the standard "failed for unspecified reason" error code present
* in all #GError error code enumerations. Returned if no specific
* code applies.
*/
static FAILED: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* Error codes returned by #GIOChannel operations.
*/
class IOChannelError extends Error {
static $gtype: GObject.GType<IOChannelError>;
// Static fields
/**
* File too large.
*/
static FBIG: number;
/**
* Invalid argument.
*/
static INVAL: number;
/**
* IO error.
*/
static IO: number;
/**
* File is a directory.
*/
static ISDIR: number;
/**
* No space left on device.
*/
static NOSPC: number;
/**
* No such device or address.
*/
static NXIO: number;
/**
* Value too large for defined datatype.
*/
static OVERFLOW: number;
/**
* Broken pipe.
*/
static PIPE: number;
/**
* Some other error.
*/
static FAILED: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* #GIOError is only used by the deprecated functions
* g_io_channel_read(), g_io_channel_write(), and g_io_channel_seek().
*/
/**
* #GIOError is only used by the deprecated functions
* g_io_channel_read(), g_io_channel_write(), and g_io_channel_seek().
*/
export namespace IOError {
export const $gtype: GObject.GType<IOError>;
}
enum IOError {
/**
* no error
*/
NONE,
/**
* an EAGAIN error occurred
*/
AGAIN,
/**
* an EINVAL error occurred
*/
INVAL,
/**
* another error occurred
*/
UNKNOWN,
}
/**
* Statuses returned by most of the #GIOFuncs functions.
*/
/**
* Statuses returned by most of the #GIOFuncs functions.
*/
export namespace IOStatus {
export const $gtype: GObject.GType<IOStatus>;
}
enum IOStatus {
/**
* An error occurred.
*/
ERROR,
/**
* Success.
*/
NORMAL,
/**
* End of file.
*/
EOF,
/**
* Resource temporarily unavailable.
*/
AGAIN,
}
/**
* Error codes returned by key file parsing.
*/
class KeyFileError extends Error {
static $gtype: GObject.GType<KeyFileError>;
// Static fields
/**
* the text being parsed was in
* an unknown encoding
*/
static UNKNOWN_ENCODING: number;
/**
* document was ill-formed
*/
static PARSE: number;
/**
* the file was not found
*/
static NOT_FOUND: number;
/**
* a requested key was not found
*/
static KEY_NOT_FOUND: number;
/**
* a requested group was not found
*/
static GROUP_NOT_FOUND: number;
/**
* a value could not be parsed
*/
static INVALID_VALUE: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* Return values from #GLogWriterFuncs to indicate whether the given log entry
* was successfully handled by the writer, or whether there was an error in
* handling it (and hence a fallback writer should be used).
*
* If a #GLogWriterFunc ignores a log entry, it should return
* %G_LOG_WRITER_HANDLED.
*/
/**
* Return values from #GLogWriterFuncs to indicate whether the given log entry
* was successfully handled by the writer, or whether there was an error in
* handling it (and hence a fallback writer should be used).
*
* If a #GLogWriterFunc ignores a log entry, it should return
* %G_LOG_WRITER_HANDLED.
*/
export namespace LogWriterOutput {
export const $gtype: GObject.GType<LogWriterOutput>;
}
enum LogWriterOutput {
/**
* Log writer has handled the log entry.
*/
HANDLED,
/**
* Log writer could not handle the log entry.
*/
UNHANDLED,
}
/**
* Error codes returned by markup parsing.
*/
class MarkupError extends Error {
static $gtype: GObject.GType<MarkupError>;
// Static fields
/**
* text being parsed was not valid UTF-8
*/
static BAD_UTF8: number;
/**
* document contained nothing, or only whitespace
*/
static EMPTY: number;
/**
* document was ill-formed
*/
static PARSE: number;
/**
* error should be set by #GMarkupParser
* functions; element wasn't known
*/
static UNKNOWN_ELEMENT: number;
/**
* error should be set by #GMarkupParser
* functions; attribute wasn't known
*/
static UNKNOWN_ATTRIBUTE: number;
/**
* error should be set by #GMarkupParser
* functions; content was invalid
*/
static INVALID_CONTENT: number;
/**
* error should be set by #GMarkupParser
* functions; a required attribute was missing
*/
static MISSING_ATTRIBUTE: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* Defines how a Unicode string is transformed in a canonical
* form, standardizing such issues as whether a character with
* an accent is represented as a base character and combining
* accent or as a single precomposed character. Unicode strings
* should generally be normalized before comparing them.
*/
/**
* Defines how a Unicode string is transformed in a canonical
* form, standardizing such issues as whether a character with
* an accent is represented as a base character and combining
* accent or as a single precomposed character. Unicode strings
* should generally be normalized before comparing them.
*/
export namespace NormalizeMode {
export const $gtype: GObject.GType<NormalizeMode>;
}
enum NormalizeMode {
/**
* standardize differences that do not affect the
* text content, such as the above-mentioned accent representation
*/
DEFAULT,
/**
* another name for %G_NORMALIZE_DEFAULT
*/
NFD,
/**
* like %G_NORMALIZE_DEFAULT, but with
* composed forms rather than a maximally decomposed form
*/
DEFAULT_COMPOSE,
/**
* another name for %G_NORMALIZE_DEFAULT_COMPOSE
*/
NFC,
/**
* beyond %G_NORMALIZE_DEFAULT also standardize the
* "compatibility" characters in Unicode, such as SUPERSCRIPT THREE
* to the standard forms (in this case DIGIT THREE). Formatting
* information may be lost but for most text operations such
* characters should be considered the same
*/
ALL,
/**
* another name for %G_NORMALIZE_ALL
*/
NFKD,
/**
* like %G_NORMALIZE_ALL, but with composed
* forms rather than a maximally decomposed form
*/
ALL_COMPOSE,
/**
* another name for %G_NORMALIZE_ALL_COMPOSE
*/
NFKC,
}
/**
* Error codes returned by functions converting a string to a number.
*/
class NumberParserError extends Error {
static $gtype: GObject.GType<NumberParserError>;
// Static fields
/**
* string was not a valid number
*/
static INVALID: number;
/**
* string was a number, but out of bounds
*/
static OUT_OF_BOUNDS: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* The possible statuses of a one-time initialization function
* controlled by a #GOnce struct.
*/
/**
* The possible statuses of a one-time initialization function
* controlled by a #GOnce struct.
*/
export namespace OnceStatus {
export const $gtype: GObject.GType<OnceStatus>;
}
enum OnceStatus {
/**
* the function has not been called yet.
*/
NOTCALLED,
/**
* the function call is currently in progress.
*/
PROGRESS,
/**
* the function has been called.
*/
READY,
}
/**
* The #GOptionArg enum values determine which type of extra argument the
* options expect to find. If an option expects an extra argument, it can
* be specified in several ways; with a short option: `-x arg`, with a long
* option: `--name arg` or combined in a single argument: `--name=arg`.
*/
/**
* The #GOptionArg enum values determine which type of extra argument the
* options expect to find. If an option expects an extra argument, it can
* be specified in several ways; with a short option: `-x arg`, with a long
* option: `--name arg` or combined in a single argument: `--name=arg`.
*/
export namespace OptionArg {
export const $gtype: GObject.GType<OptionArg>;
}
enum OptionArg {
/**
* No extra argument. This is useful for simple flags or booleans.
*/
NONE,
/**
* The option takes a UTF-8 string argument.
*/
STRING,
/**
* The option takes an integer argument.
*/
INT,
/**
* The option provides a callback (of type #GOptionArgFunc)
* to parse the extra argument.
*/
CALLBACK,
/**
* The option takes a filename as argument, which will
* be in the GLib filename encoding rather than UTF-8.
*/
FILENAME,
/**
* The option takes a string argument, multiple
* uses of the option are collected into an array of strings.
*/
STRING_ARRAY,
/**
* The option takes a filename as argument,
* multiple uses of the option are collected into an array of strings.
*/
FILENAME_ARRAY,
/**
* The option takes a double argument. The argument
* can be formatted either for the user's locale or for the "C" locale.
* Since 2.12
*/
DOUBLE,
/**
* The option takes a 64-bit integer. Like
* %G_OPTION_ARG_INT but for larger numbers. The number can be in
* decimal base, or in hexadecimal (when prefixed with `0x`, for
* example, `0xffffffff`). Since 2.12
*/
INT64,
}
/**
* Error codes returned by option parsing.
*/
class OptionError extends Error {
static $gtype: GObject.GType<OptionError>;
// Static fields
/**
* An option was not known to the parser.
* This error will only be reported, if the parser hasn't been instructed
* to ignore unknown options, see g_option_context_set_ignore_unknown_options().
*/
static UNKNOWN_OPTION: number;
/**
* A value couldn't be parsed.
*/
static BAD_VALUE: number;
/**
* A #GOptionArgFunc callback failed.
*/
static FAILED: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* Error codes returned by regular expressions functions.
*/
class RegexError extends Error {
static $gtype: GObject.GType<RegexError>;
// Static fields
/**
* Compilation of the regular expression failed.
*/
static COMPILE: number;
/**
* Optimization of the regular expression failed.
*/
static OPTIMIZE: number;
/**
* Replacement failed due to an ill-formed replacement
* string.
*/
static REPLACE: number;
/**
* The match process failed.
*/
static MATCH: number;
/**
* Internal error of the regular expression engine.
* Since 2.16
*/
static INTERNAL: number;
/**
* "\\" at end of pattern. Since 2.16
*/
static STRAY_BACKSLASH: number;
/**
* "\\c" at end of pattern. Since 2.16
*/
static MISSING_CONTROL_CHAR: number;
/**
* Unrecognized character follows "\\".
* Since 2.16
*/
static UNRECOGNIZED_ESCAPE: number;
/**
* Numbers out of order in "{}"
* quantifier. Since 2.16
*/
static QUANTIFIERS_OUT_OF_ORDER: number;
/**
* Number too big in "{}" quantifier.
* Since 2.16
*/
static QUANTIFIER_TOO_BIG: number;
/**
* Missing terminating "]" for
* character class. Since 2.16
*/
static UNTERMINATED_CHARACTER_CLASS: number;
/**
* Invalid escape sequence
* in character class. Since 2.16
*/
static INVALID_ESCAPE_IN_CHARACTER_CLASS: number;
/**
* Range out of order in character class.
* Since 2.16
*/
static RANGE_OUT_OF_ORDER: number;
/**
* Nothing to repeat. Since 2.16
*/
static NOTHING_TO_REPEAT: number;
/**
* Unrecognized character after "(?",
* "(?<" or "(?P". Since 2.16
*/
static UNRECOGNIZED_CHARACTER: number;
/**
* POSIX named classes are
* supported only within a class. Since 2.16
*/
static POSIX_NAMED_CLASS_OUTSIDE_CLASS: number;
/**
* Missing terminating ")" or ")"
* without opening "(". Since 2.16
*/
static UNMATCHED_PARENTHESIS: number;
/**
* Reference to non-existent
* subpattern. Since 2.16
*/
static INEXISTENT_SUBPATTERN_REFERENCE: number;
/**
* Missing terminating ")" after comment.
* Since 2.16
*/
static UNTERMINATED_COMMENT: number;
/**
* Regular expression too large.
* Since 2.16
*/
static EXPRESSION_TOO_LARGE: number;
/**
* Failed to get memory. Since 2.16
*/
static MEMORY_ERROR: number;
/**
* Lookbehind assertion is not
* fixed length. Since 2.16
*/
static VARIABLE_LENGTH_LOOKBEHIND: number;
/**
* Malformed number or name after "(?(".
* Since 2.16
*/
static MALFORMED_CONDITION: number;
/**
* Conditional group contains
* more than two branches. Since 2.16
*/
static TOO_MANY_CONDITIONAL_BRANCHES: number;
/**
* Assertion expected after "(?(".
* Since 2.16
*/
static ASSERTION_EXPECTED: number;
/**
* Unknown POSIX class name.
* Since 2.16
*/
static UNKNOWN_POSIX_CLASS_NAME: number;
/**
* POSIX collating
* elements are not supported. Since 2.16
*/
static POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: number;
/**
* Character value in "\\x{...}" sequence
* is too large. Since 2.16
*/
static HEX_CODE_TOO_LARGE: number;
/**
* Invalid condition "(?(0)". Since 2.16
*/
static INVALID_CONDITION: number;
/**
* \\C not allowed in
* lookbehind assertion. Since 2.16
*/
static SINGLE_BYTE_MATCH_IN_LOOKBEHIND: number;
/**
* Recursive call could loop indefinitely.
* Since 2.16
*/
static INFINITE_LOOP: number;
/**
* Missing terminator
* in subpattern name. Since 2.16
*/
static MISSING_SUBPATTERN_NAME_TERMINATOR: number;
/**
* Two named subpatterns have
* the same name. Since 2.16
*/
static DUPLICATE_SUBPATTERN_NAME: number;
/**
* Malformed "\\P" or "\\p" sequence.
* Since 2.16
*/
static MALFORMED_PROPERTY: number;
/**
* Unknown property name after "\\P" or
* "\\p". Since 2.16
*/
static UNKNOWN_PROPERTY: number;
/**
* Subpattern name is too long
* (maximum 32 characters). Since 2.16
*/
static SUBPATTERN_NAME_TOO_LONG: number;
/**
* Too many named subpatterns (maximum
* 10,000). Since 2.16
*/
static TOO_MANY_SUBPATTERNS: number;
/**
* Octal value is greater than "\\377".
* Since 2.16
*/
static INVALID_OCTAL_VALUE: number;
/**
* "DEFINE" group contains more
* than one branch. Since 2.16
*/
static TOO_MANY_BRANCHES_IN_DEFINE: number;
/**
* Repeating a "DEFINE" group is not allowed.
* This error is never raised. Since: 2.16 Deprecated: 2.34
*/
static DEFINE_REPETION: number;
/**
* Inconsistent newline options.
* Since 2.16
*/
static INCONSISTENT_NEWLINE_OPTIONS: number;
/**
* "\\g" is not followed by a braced,
* angle-bracketed, or quoted name or number, or by a plain number. Since: 2.16
*/
static MISSING_BACK_REFERENCE: number;
/**
* relative reference must not be zero. Since: 2.34
*/
static INVALID_RELATIVE_REFERENCE: number;
/**
* the backtracing
* control verb used does not allow an argument. Since: 2.34
*/
static BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN: number;
/**
* unknown backtracing
* control verb. Since: 2.34
*/
static UNKNOWN_BACKTRACKING_CONTROL_VERB: number;
/**
* number is too big in escape sequence. Since: 2.34
*/
static NUMBER_TOO_BIG: number;
/**
* Missing subpattern name. Since: 2.34
*/
static MISSING_SUBPATTERN_NAME: number;
/**
* Missing digit. Since 2.34
*/
static MISSING_DIGIT: number;
/**
* In JavaScript compatibility mode,
* "[" is an invalid data character. Since: 2.34
*/
static INVALID_DATA_CHARACTER: number;
/**
* different names for subpatterns of the
* same number are not allowed. Since: 2.34
*/
static EXTRA_SUBPATTERN_NAME: number;
/**
* the backtracing control
* verb requires an argument. Since: 2.34
*/
static BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED: number;
/**
* "\\c" must be followed by an ASCII
* character. Since: 2.34
*/
static INVALID_CONTROL_CHAR: number;
/**
* "\\k" is not followed by a braced, angle-bracketed, or
* quoted name. Since: 2.34
*/
static MISSING_NAME: number;
/**
* "\\N" is not supported in a class. Since: 2.34
*/
static NOT_SUPPORTED_IN_CLASS: number;
/**
* too many forward references. Since: 2.34
*/
static TOO_MANY_FORWARD_REFERENCES: number;
/**
* the name is too long in "(*MARK)", "(*PRUNE)",
* "(*SKIP)", or "(*THEN)". Since: 2.34
*/
static NAME_TOO_LONG: number;
/**
* the character value in the \\u sequence is
* too large. Since: 2.34
*/
static CHARACTER_VALUE_TOO_LARGE: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* An enumeration specifying the base position for a
* g_io_channel_seek_position() operation.
*/
/**
* An enumeration specifying the base position for a
* g_io_channel_seek_position() operation.
*/
export namespace SeekType {
export const $gtype: GObject.GType<SeekType>;
}
enum SeekType {
/**
* the current position in the file.
*/
CUR,
/**
* the start of the file.
*/
SET,
/**
* the end of the file.
*/
END,
}
/**
* Error codes returned by shell functions.
*/
class ShellError extends Error {
static $gtype: GObject.GType<ShellError>;
// Static fields
/**
* Mismatched or otherwise mangled quoting.
*/
static BAD_QUOTING: number;
/**
* String to be parsed was empty.
*/
static EMPTY_STRING: number;
/**
* Some other error.
*/
static FAILED: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
export namespace SliceConfig {
export const $gtype: GObject.GType<SliceConfig>;
}
enum SliceConfig {
ALWAYS_MALLOC,
BYPASS_MAGAZINES,
WORKING_SET_MSECS,
COLOR_INCREMENT,
CHUNK_SIZES,
CONTENTION_COUNTER,
}
/**
* Error codes returned by spawning processes.
*/
class SpawnError extends Error {
static $gtype: GObject.GType<SpawnError>;
// Static fields
/**
* Fork failed due to lack of memory.
*/
static FORK: number;
/**
* Read or select on pipes failed.
*/
static READ: number;
/**
* Changing to working directory failed.
*/
static CHDIR: number;
/**
* execv() returned `EACCES`
*/
static ACCES: number;
/**
* execv() returned `EPERM`
*/
static PERM: number;
/**
* execv() returned `E2BIG`
*/
static TOO_BIG: number;
/**
* deprecated alias for %G_SPAWN_ERROR_TOO_BIG (deprecated since GLib 2.32)
*/
static '2BIG': number;
/**
* execv() returned `ENOEXEC`
*/
static NOEXEC: number;
/**
* execv() returned `ENAMETOOLONG`
*/
static NAMETOOLONG: number;
/**
* execv() returned `ENOENT`
*/
static NOENT: number;
/**
* execv() returned `ENOMEM`
*/
static NOMEM: number;
/**
* execv() returned `ENOTDIR`
*/
static NOTDIR: number;
/**
* execv() returned `ELOOP`
*/
static LOOP: number;
/**
* execv() returned `ETXTBUSY`
*/
static TXTBUSY: number;
/**
* execv() returned `EIO`
*/
static IO: number;
/**
* execv() returned `ENFILE`
*/
static NFILE: number;
/**
* execv() returned `EMFILE`
*/
static MFILE: number;
/**
* execv() returned `EINVAL`
*/
static INVAL: number;
/**
* execv() returned `EISDIR`
*/
static ISDIR: number;
/**
* execv() returned `ELIBBAD`
*/
static LIBBAD: number;
/**
* Some other fatal failure,
* `error->message` should explain.
*/
static FAILED: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* The type of file to return the filename for, when used with
* [func`GLib`.test_build_filename].
*
* These two options correspond rather directly to the 'dist' and
* 'built' terminology that automake uses and are explicitly used to
* distinguish between the 'srcdir' and 'builddir' being separate. All
* files in your project should either be dist (in the `EXTRA_DIST` or
* `dist_schema_DATA` sense, in which case they will always be in the
* srcdir) or built (in the `BUILT_SOURCES` sense, in which case they
* will always be in the builddir).
*
* Note: As a general rule of automake, files that are generated only as
* part of the build-from-git process (but then are distributed with the
* tarball) always go in srcdir (even if doing a srcdir != builddir
* build from git) and are considered as distributed files.
*
* The same principles apply for other build systems, such as meson.
*/
/**
* The type of file to return the filename for, when used with
* [func`GLib`.test_build_filename].
*
* These two options correspond rather directly to the 'dist' and
* 'built' terminology that automake uses and are explicitly used to
* distinguish between the 'srcdir' and 'builddir' being separate. All
* files in your project should either be dist (in the `EXTRA_DIST` or
* `dist_schema_DATA` sense, in which case they will always be in the
* srcdir) or built (in the `BUILT_SOURCES` sense, in which case they
* will always be in the builddir).
*
* Note: As a general rule of automake, files that are generated only as
* part of the build-from-git process (but then are distributed with the
* tarball) always go in srcdir (even if doing a srcdir != builddir
* build from git) and are considered as distributed files.
*
* The same principles apply for other build systems, such as meson.
*/
export namespace TestFileType {
export const $gtype: GObject.GType<TestFileType>;
}
enum TestFileType {
/**
* a file that was included in the distribution tarball
*/
DIST,
/**
* a file that was built on the compiling machine
*/
BUILT,
}
export namespace TestLogType {
export const $gtype: GObject.GType<TestLogType>;
}
enum TestLogType {
NONE,
ERROR,
START_BINARY,
LIST_CASE,
SKIP_CASE,
START_CASE,
STOP_CASE,
MIN_RESULT,
MAX_RESULT,
MESSAGE,
START_SUITE,
STOP_SUITE,
}
export namespace TestResult {
export const $gtype: GObject.GType<TestResult>;
}
enum TestResult {
SUCCESS,
SKIPPED,
FAILURE,
INCOMPLETE,
}
/**
* Possible errors of thread related functions.
*/
class ThreadError extends Error {
static $gtype: GObject.GType<ThreadError>;
// Static fields
/**
* a thread couldn't be created due to resource
* shortage. Try again later.
*/
static THREAD_ERROR_AGAIN: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* Thread priorities.
*/
/**
* Thread priorities.
*/
export namespace ThreadPriority {
export const $gtype: GObject.GType<ThreadPriority>;
}
enum ThreadPriority {
/**
* a priority lower than normal
*/
LOW,
/**
* the default priority
*/
NORMAL,
/**
* a priority higher than normal
*/
HIGH,
/**
* the highest priority
*/
URGENT,
}
/**
* Disambiguates a given time in two ways.
*
* First, specifies if the given time is in universal or local time.
*
* Second, if the time is in local time, specifies if it is local
* standard time or local daylight time. This is important for the case
* where the same local time occurs twice (during daylight savings time
* transitions, for example).
*/
/**
* Disambiguates a given time in two ways.
*
* First, specifies if the given time is in universal or local time.
*
* Second, if the time is in local time, specifies if it is local
* standard time or local daylight time. This is important for the case
* where the same local time occurs twice (during daylight savings time
* transitions, for example).
*/
export namespace TimeType {
export const $gtype: GObject.GType<TimeType>;
}
enum TimeType {
/**
* the time is in local standard time
*/
STANDARD,
/**
* the time is in local daylight time
*/
DAYLIGHT,
/**
* the time is in UTC
*/
UNIVERSAL,
}
/**
* The possible types of token returned from each
* g_scanner_get_next_token() call.
*/
/**
* The possible types of token returned from each
* g_scanner_get_next_token() call.
*/
export namespace TokenType {
export const $gtype: GObject.GType<TokenType>;
}
enum TokenType {
/**
* the end of the file
*/
EOF,
/**
* a '(' character
*/
LEFT_PAREN,
/**
* a ')' character
*/
RIGHT_PAREN,
/**
* a '{' character
*/
LEFT_CURLY,
/**
* a '}' character
*/
RIGHT_CURLY,
/**
* a '[' character
*/
LEFT_BRACE,
/**
* a ']' character
*/
RIGHT_BRACE,
/**
* a '=' character
*/
EQUAL_SIGN,
/**
* a ',' character
*/
COMMA,
/**
* not a token
*/
NONE,
/**
* an error occurred
*/
ERROR,
/**
* a character
*/
CHAR,
/**
* a binary integer
*/
BINARY,
/**
* an octal integer
*/
OCTAL,
/**
* an integer
*/
INT,
/**
* a hex integer
*/
HEX,
/**
* a floating point number
*/
FLOAT,
/**
* a string
*/
STRING,
/**
* a symbol
*/
SYMBOL,
/**
* an identifier
*/
IDENTIFIER,
/**
* a null identifier
*/
IDENTIFIER_NULL,
/**
* one line comment
*/
COMMENT_SINGLE,
/**
* multi line comment
*/
COMMENT_MULTI,
}
/**
* Specifies the type of traversal performed by g_tree_traverse(),
* g_node_traverse() and g_node_find().
*
* The different orders are illustrated here:
*
* - In order: A, B, C, D, E, F, G, H, I
* <picture>
* <source srcset="Sorted_binary_tree_inorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_inorder.svg"
* alt="Sorted binary tree, in-order traversal">
* </picture>
* - Pre order: F, B, A, D, C, E, G, I, H
* <picture>
* <source srcset="Sorted_binary_tree_preorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_preorder.svg"
* alt="Sorted binary tree, pre-order traversal">
* </picture>
* - Post order: A, C, E, D, B, H, I, G, F
* <picture>
* <source srcset="Sorted_binary_tree_postorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_postorder.svg"
* alt="Sorted binary tree, post-order traversal">
* </picture>
* - Level order: F, B, G, A, D, I, C, E, H
* <picture>
* <source srcset="Sorted_binary_tree_breadth-first_traversal-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_breadth-first_traversal.svg"
* alt="Sorted binary tree, breadth-first level order traversal">
* </picture>
*/
/**
* Specifies the type of traversal performed by g_tree_traverse(),
* g_node_traverse() and g_node_find().
*
* The different orders are illustrated here:
*
* - In order: A, B, C, D, E, F, G, H, I
* <picture>
* <source srcset="Sorted_binary_tree_inorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_inorder.svg"
* alt="Sorted binary tree, in-order traversal">
* </picture>
* - Pre order: F, B, A, D, C, E, G, I, H
* <picture>
* <source srcset="Sorted_binary_tree_preorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_preorder.svg"
* alt="Sorted binary tree, pre-order traversal">
* </picture>
* - Post order: A, C, E, D, B, H, I, G, F
* <picture>
* <source srcset="Sorted_binary_tree_postorder-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_postorder.svg"
* alt="Sorted binary tree, post-order traversal">
* </picture>
* - Level order: F, B, G, A, D, I, C, E, H
* <picture>
* <source srcset="Sorted_binary_tree_breadth-first_traversal-dark.svg"
* media="(prefers-color-scheme: dark)">
* <img src="Sorted_binary_tree_breadth-first_traversal.svg"
* alt="Sorted binary tree, breadth-first level order traversal">
* </picture>
*/
export namespace TraverseType {
export const $gtype: GObject.GType<TraverseType>;
}
enum TraverseType {
/**
* visits a node's left child first, then the node itself,
* then its right child. This is the one to use if you
* want the output sorted according to the compare
* function.
*/
IN_ORDER,
/**
* visits a node, then its children.
*/
PRE_ORDER,
/**
* visits the node's children, then the node itself.
*/
POST_ORDER,
/**
* is not implemented for
* [balanced binary trees](data-structures.html#binary-trees).
* For [n-ary trees](data-structures.html#n-ary-trees), it
* visits the root node first, then its children, then
* its grandchildren, and so on. Note that this is less
* efficient than the other orders.
*/
LEVEL_ORDER,
}
/**
* These are the possible line break classifications.
*
* Since new Unicode versions may add new types here, applications should be ready
* to handle unknown values. They may be regarded as %G_UNICODE_BREAK_UNKNOWN.
*
* See [Unicode Line Breaking Algorithm](https://www.unicode.org/reports/tr14/).
*/
/**
* These are the possible line break classifications.
*
* Since new Unicode versions may add new types here, applications should be ready
* to handle unknown values. They may be regarded as %G_UNICODE_BREAK_UNKNOWN.
*
* See [Unicode Line Breaking Algorithm](https://www.unicode.org/reports/tr14/).
*/
export namespace UnicodeBreakType {
export const $gtype: GObject.GType<UnicodeBreakType>;
}
enum UnicodeBreakType {
/**
* Mandatory Break (BK)
*/
MANDATORY,
/**
* Carriage Return (CR)
*/
CARRIAGE_RETURN,
/**
* Line Feed (LF)
*/
LINE_FEED,
/**
* Attached Characters and Combining Marks (CM)
*/
COMBINING_MARK,
/**
* Surrogates (SG)
*/
SURROGATE,
/**
* Zero Width Space (ZW)
*/
ZERO_WIDTH_SPACE,
/**
* Inseparable (IN)
*/
INSEPARABLE,
/**
* Non-breaking ("Glue") (GL)
*/
NON_BREAKING_GLUE,
/**
* Contingent Break Opportunity (CB)
*/
CONTINGENT,
/**
* Space (SP)
*/
SPACE,
/**
* Break Opportunity After (BA)
*/
AFTER,
/**
* Break Opportunity Before (BB)
*/
BEFORE,
/**
* Break Opportunity Before and After (B2)
*/
BEFORE_AND_AFTER,
/**
* Hyphen (HY)
*/
HYPHEN,
/**
* Nonstarter (NS)
*/
NON_STARTER,
/**
* Opening Punctuation (OP)
*/
OPEN_PUNCTUATION,
/**
* Closing Punctuation (CL)
*/
CLOSE_PUNCTUATION,
/**
* Ambiguous Quotation (QU)
*/
QUOTATION,
/**
* Exclamation/Interrogation (EX)
*/
EXCLAMATION,
/**
* Ideographic (ID)
*/
IDEOGRAPHIC,
/**
* Numeric (NU)
*/
NUMERIC,
/**
* Infix Separator (Numeric) (IS)
*/
INFIX_SEPARATOR,
/**
* Symbols Allowing Break After (SY)
*/
SYMBOL,
/**
* Ordinary Alphabetic and Symbol Characters (AL)
*/
ALPHABETIC,
/**
* Prefix (Numeric) (PR)
*/
PREFIX,
/**
* Postfix (Numeric) (PO)
*/
POSTFIX,
/**
* Complex Content Dependent (South East Asian) (SA)
*/
COMPLEX_CONTEXT,
/**
* Ambiguous (Alphabetic or Ideographic) (AI)
*/
AMBIGUOUS,
/**
* Unknown (XX)
*/
UNKNOWN,
/**
* Next Line (NL)
*/
NEXT_LINE,
/**
* Word Joiner (WJ)
*/
WORD_JOINER,
/**
* Hangul L Jamo (JL)
*/
HANGUL_L_JAMO,
/**
* Hangul V Jamo (JV)
*/
HANGUL_V_JAMO,
/**
* Hangul T Jamo (JT)
*/
HANGUL_T_JAMO,
/**
* Hangul LV Syllable (H2)
*/
HANGUL_LV_SYLLABLE,
/**
* Hangul LVT Syllable (H3)
*/
HANGUL_LVT_SYLLABLE,
/**
* Closing Parenthesis (CP). Since 2.28. Deprecated: 2.70: Use %G_UNICODE_BREAK_CLOSE_PARENTHESIS instead.
*/
CLOSE_PARANTHESIS,
/**
* Closing Parenthesis (CP). Since 2.70
*/
CLOSE_PARENTHESIS,
/**
* Conditional Japanese Starter (CJ). Since: 2.32
*/
CONDITIONAL_JAPANESE_STARTER,
/**
* Hebrew Letter (HL). Since: 2.32
*/
HEBREW_LETTER,
/**
* Regional Indicator (RI). Since: 2.36
*/
REGIONAL_INDICATOR,
/**
* Emoji Base (EB). Since: 2.50
*/
EMOJI_BASE,
/**
* Emoji Modifier (EM). Since: 2.50
*/
EMOJI_MODIFIER,
/**
* Zero Width Joiner (ZWJ). Since: 2.50
*/
ZERO_WIDTH_JOINER,
/**
* Aksara (AK). Since: 2.80
*/
AKSARA,
/**
* Aksara Pre-Base (AP). Since: 2.80
*/
AKSARA_PRE_BASE,
/**
* Aksara Start (AS). Since: 2.80
*/
AKSARA_START,
/**
* Virama Final (VF). Since: 2.80
*/
VIRAMA_FINAL,
/**
* Virama (VI). Since: 2.80
*/
VIRAMA,
}
/**
* The #GUnicodeScript enumeration identifies different writing
* systems. The values correspond to the names as defined in the
* Unicode standard. The enumeration has been added in GLib 2.14,
* and is interchangeable with #PangoScript.
*
* Note that new types may be added in the future. Applications
* should be ready to handle unknown values.
* See [Unicode Standard Annex #24: Script names](http://www.unicode.org/reports/tr24/).
*/
/**
* The #GUnicodeScript enumeration identifies different writing
* systems. The values correspond to the names as defined in the
* Unicode standard. The enumeration has been added in GLib 2.14,
* and is interchangeable with #PangoScript.
*
* Note that new types may be added in the future. Applications
* should be ready to handle unknown values.
* See [Unicode Standard Annex #24: Script names](http://www.unicode.org/reports/tr24/).
*/
export namespace UnicodeScript {
export const $gtype: GObject.GType<UnicodeScript>;
}
enum UnicodeScript {
/**
* a value never returned from g_unichar_get_script()
*/
INVALID_CODE,
/**
* a character used by multiple different scripts
*/
COMMON,
/**
* a mark glyph that takes its script from the
* base glyph to which it is attached
*/
INHERITED,
/**
* Arabic
*/
ARABIC,
/**
* Armenian
*/
ARMENIAN,
/**
* Bengali
*/
BENGALI,
/**
* Bopomofo
*/
BOPOMOFO,
/**
* Cherokee
*/
CHEROKEE,
/**
* Coptic
*/
COPTIC,
/**
* Cyrillic
*/
CYRILLIC,
/**
* Deseret
*/
DESERET,
/**
* Devanagari
*/
DEVANAGARI,
/**
* Ethiopic
*/
ETHIOPIC,
/**
* Georgian
*/
GEORGIAN,
/**
* Gothic
*/
GOTHIC,
/**
* Greek
*/
GREEK,
/**
* Gujarati
*/
GUJARATI,
/**
* Gurmukhi
*/
GURMUKHI,
/**
* Han
*/
HAN,
/**
* Hangul
*/
HANGUL,
/**
* Hebrew
*/
HEBREW,
/**
* Hiragana
*/
HIRAGANA,
/**
* Kannada
*/
KANNADA,
/**
* Katakana
*/
KATAKANA,
/**
* Khmer
*/
KHMER,
/**
* Lao
*/
LAO,
/**
* Latin
*/
LATIN,
/**
* Malayalam
*/
MALAYALAM,
/**
* Mongolian
*/
MONGOLIAN,
/**
* Myanmar
*/
MYANMAR,
/**
* Ogham
*/
OGHAM,
/**
* Old Italic
*/
OLD_ITALIC,
/**
* Oriya
*/
ORIYA,
/**
* Runic
*/
RUNIC,
/**
* Sinhala
*/
SINHALA,
/**
* Syriac
*/
SYRIAC,
/**
* Tamil
*/
TAMIL,
/**
* Telugu
*/
TELUGU,
/**
* Thaana
*/
THAANA,
/**
* Thai
*/
THAI,
/**
* Tibetan
*/
TIBETAN,
/**
* Canadian Aboriginal
*/
CANADIAN_ABORIGINAL,
/**
* Yi
*/
YI,
/**
* Tagalog
*/
TAGALOG,
/**
* Hanunoo
*/
HANUNOO,
/**
* Buhid
*/
BUHID,
/**
* Tagbanwa
*/
TAGBANWA,
/**
* Braille
*/
BRAILLE,
/**
* Cypriot
*/
CYPRIOT,
/**
* Limbu
*/
LIMBU,
/**
* Osmanya
*/
OSMANYA,
/**
* Shavian
*/
SHAVIAN,
/**
* Linear B
*/
LINEAR_B,
/**
* Tai Le
*/
TAI_LE,
/**
* Ugaritic
*/
UGARITIC,
/**
* New Tai Lue
*/
NEW_TAI_LUE,
/**
* Buginese
*/
BUGINESE,
/**
* Glagolitic
*/
GLAGOLITIC,
/**
* Tifinagh
*/
TIFINAGH,
/**
* Syloti Nagri
*/
SYLOTI_NAGRI,
/**
* Old Persian
*/
OLD_PERSIAN,
/**
* Kharoshthi
*/
KHAROSHTHI,
/**
* an unassigned code point
*/
UNKNOWN,
/**
* Balinese
*/
BALINESE,
/**
* Cuneiform
*/
CUNEIFORM,
/**
* Phoenician
*/
PHOENICIAN,
/**
* Phags-pa
*/
PHAGS_PA,
/**
* N'Ko
*/
NKO,
/**
* Kayah Li. Since 2.16.3
*/
KAYAH_LI,
/**
* Lepcha. Since 2.16.3
*/
LEPCHA,
/**
* Rejang. Since 2.16.3
*/
REJANG,
/**
* Sundanese. Since 2.16.3
*/
SUNDANESE,
/**
* Saurashtra. Since 2.16.3
*/
SAURASHTRA,
/**
* Cham. Since 2.16.3
*/
CHAM,
/**
* Ol Chiki. Since 2.16.3
*/
OL_CHIKI,
/**
* Vai. Since 2.16.3
*/
VAI,
/**
* Carian. Since 2.16.3
*/
CARIAN,
/**
* Lycian. Since 2.16.3
*/
LYCIAN,
/**
* Lydian. Since 2.16.3
*/
LYDIAN,
/**
* Avestan. Since 2.26
*/
AVESTAN,
/**
* Bamum. Since 2.26
*/
BAMUM,
/**
* Egyptian Hieroglpyhs. Since 2.26
*/
EGYPTIAN_HIEROGLYPHS,
/**
* Imperial Aramaic. Since 2.26
*/
IMPERIAL_ARAMAIC,
/**
* Inscriptional Pahlavi. Since 2.26
*/
INSCRIPTIONAL_PAHLAVI,
/**
* Inscriptional Parthian. Since 2.26
*/
INSCRIPTIONAL_PARTHIAN,
/**
* Javanese. Since 2.26
*/
JAVANESE,
/**
* Kaithi. Since 2.26
*/
KAITHI,
/**
* Lisu. Since 2.26
*/
LISU,
/**
* Meetei Mayek. Since 2.26
*/
MEETEI_MAYEK,
/**
* Old South Arabian. Since 2.26
*/
OLD_SOUTH_ARABIAN,
/**
* Old Turkic. Since 2.28
*/
OLD_TURKIC,
/**
* Samaritan. Since 2.26
*/
SAMARITAN,
/**
* Tai Tham. Since 2.26
*/
TAI_THAM,
/**
* Tai Viet. Since 2.26
*/
TAI_VIET,
/**
* Batak. Since 2.28
*/
BATAK,
/**
* Brahmi. Since 2.28
*/
BRAHMI,
/**
* Mandaic. Since 2.28
*/
MANDAIC,
/**
* Chakma. Since: 2.32
*/
CHAKMA,
/**
* Meroitic Cursive. Since: 2.32
*/
MEROITIC_CURSIVE,
/**
* Meroitic Hieroglyphs. Since: 2.32
*/
MEROITIC_HIEROGLYPHS,
/**
* Miao. Since: 2.32
*/
MIAO,
/**
* Sharada. Since: 2.32
*/
SHARADA,
/**
* Sora Sompeng. Since: 2.32
*/
SORA_SOMPENG,
/**
* Takri. Since: 2.32
*/
TAKRI,
/**
* Bassa. Since: 2.42
*/
BASSA_VAH,
/**
* Caucasian Albanian. Since: 2.42
*/
CAUCASIAN_ALBANIAN,
/**
* Duployan. Since: 2.42
*/
DUPLOYAN,
/**
* Elbasan. Since: 2.42
*/
ELBASAN,
/**
* Grantha. Since: 2.42
*/
GRANTHA,
/**
* Kjohki. Since: 2.42
*/
KHOJKI,
/**
* Khudawadi, Sindhi. Since: 2.42
*/
KHUDAWADI,
/**
* Linear A. Since: 2.42
*/
LINEAR_A,
/**
* Mahajani. Since: 2.42
*/
MAHAJANI,
/**
* Manichaean. Since: 2.42
*/
MANICHAEAN,
/**
* Mende Kikakui. Since: 2.42
*/
MENDE_KIKAKUI,
/**
* Modi. Since: 2.42
*/
MODI,
/**
* Mro. Since: 2.42
*/
MRO,
/**
* Nabataean. Since: 2.42
*/
NABATAEAN,
/**
* Old North Arabian. Since: 2.42
*/
OLD_NORTH_ARABIAN,
/**
* Old Permic. Since: 2.42
*/
OLD_PERMIC,
/**
* Pahawh Hmong. Since: 2.42
*/
PAHAWH_HMONG,
/**
* Palmyrene. Since: 2.42
*/
PALMYRENE,
/**
* Pau Cin Hau. Since: 2.42
*/
PAU_CIN_HAU,
/**
* Psalter Pahlavi. Since: 2.42
*/
PSALTER_PAHLAVI,
/**
* Siddham. Since: 2.42
*/
SIDDHAM,
/**
* Tirhuta. Since: 2.42
*/
TIRHUTA,
/**
* Warang Citi. Since: 2.42
*/
WARANG_CITI,
/**
* Ahom. Since: 2.48
*/
AHOM,
/**
* Anatolian Hieroglyphs. Since: 2.48
*/
ANATOLIAN_HIEROGLYPHS,
/**
* Hatran. Since: 2.48
*/
HATRAN,
/**
* Multani. Since: 2.48
*/
MULTANI,
/**
* Old Hungarian. Since: 2.48
*/
OLD_HUNGARIAN,
/**
* Signwriting. Since: 2.48
*/
SIGNWRITING,
/**
* Adlam. Since: 2.50
*/
ADLAM,
/**
* Bhaiksuki. Since: 2.50
*/
BHAIKSUKI,
/**
* Marchen. Since: 2.50
*/
MARCHEN,
/**
* Newa. Since: 2.50
*/
NEWA,
/**
* Osage. Since: 2.50
*/
OSAGE,
/**
* Tangut. Since: 2.50
*/
TANGUT,
/**
* Masaram Gondi. Since: 2.54
*/
MASARAM_GONDI,
/**
* Nushu. Since: 2.54
*/
NUSHU,
/**
* Soyombo. Since: 2.54
*/
SOYOMBO,
/**
* Zanabazar Square. Since: 2.54
*/
ZANABAZAR_SQUARE,
/**
* Dogra. Since: 2.58
*/
DOGRA,
/**
* Gunjala Gondi. Since: 2.58
*/
GUNJALA_GONDI,
/**
* Hanifi Rohingya. Since: 2.58
*/
HANIFI_ROHINGYA,
/**
* Makasar. Since: 2.58
*/
MAKASAR,
/**
* Medefaidrin. Since: 2.58
*/
MEDEFAIDRIN,
/**
* Old Sogdian. Since: 2.58
*/
OLD_SOGDIAN,
/**
* Sogdian. Since: 2.58
*/
SOGDIAN,
/**
* Elym. Since: 2.62
*/
ELYMAIC,
/**
* Nand. Since: 2.62
*/
NANDINAGARI,
/**
* Rohg. Since: 2.62
*/
NYIAKENG_PUACHUE_HMONG,
/**
* Wcho. Since: 2.62
*/
WANCHO,
/**
* Chorasmian. Since: 2.66
*/
CHORASMIAN,
/**
* Dives Akuru. Since: 2.66
*/
DIVES_AKURU,
/**
* Khitan small script. Since: 2.66
*/
KHITAN_SMALL_SCRIPT,
/**
* Yezidi. Since: 2.66
*/
YEZIDI,
/**
* Cypro-Minoan. Since: 2.72
*/
CYPRO_MINOAN,
/**
* Old Uyghur. Since: 2.72
*/
OLD_UYGHUR,
/**
* Tangsa. Since: 2.72
*/
TANGSA,
/**
* Toto. Since: 2.72
*/
TOTO,
/**
* Vithkuqi. Since: 2.72
*/
VITHKUQI,
/**
* Mathematical notation. Since: 2.72
*/
MATH,
/**
* Kawi. Since 2.74
*/
KAWI,
/**
* Nag Mundari. Since 2.74
*/
NAG_MUNDARI,
/**
* Todhri. Since: 2.84
*/
TODHRI,
/**
* Garay. Since: 2.84
*/
GARAY,
/**
* Tulu-Tigalari. Since: 2.84
*/
TULU_TIGALARI,
/**
* Sunuwar. Since: 2.84
*/
SUNUWAR,
/**
* Gurung Khema. Since: 2.84
*/
GURUNG_KHEMA,
/**
* Kirat Rai. Since: 2.84
*/
KIRAT_RAI,
/**
* Ol Onal. Since: 2.84
*/
OL_ONAL,
}
/**
* These are the possible character classifications from the
* Unicode specification.
* See [Unicode Character Database](http://www.unicode.org/reports/tr44/#General_Category_Values).
*/
/**
* These are the possible character classifications from the
* Unicode specification.
* See [Unicode Character Database](http://www.unicode.org/reports/tr44/#General_Category_Values).
*/
export namespace UnicodeType {
export const $gtype: GObject.GType<UnicodeType>;
}
enum UnicodeType {
/**
* General category "Other, Control" (Cc)
*/
CONTROL,
/**
* General category "Other, Format" (Cf)
*/
FORMAT,
/**
* General category "Other, Not Assigned" (Cn)
*/
UNASSIGNED,
/**
* General category "Other, Private Use" (Co)
*/
PRIVATE_USE,
/**
* General category "Other, Surrogate" (Cs)
*/
SURROGATE,
/**
* General category "Letter, Lowercase" (Ll)
*/
LOWERCASE_LETTER,
/**
* General category "Letter, Modifier" (Lm)
*/
MODIFIER_LETTER,
/**
* General category "Letter, Other" (Lo)
*/
OTHER_LETTER,
/**
* General category "Letter, Titlecase" (Lt)
*/
TITLECASE_LETTER,
/**
* General category "Letter, Uppercase" (Lu)
*/
UPPERCASE_LETTER,
/**
* General category "Mark, Spacing" (Mc)
*/
SPACING_MARK,
/**
* General category "Mark, Enclosing" (Me)
*/
ENCLOSING_MARK,
/**
* General category "Mark, Nonspacing" (Mn)
*/
NON_SPACING_MARK,
/**
* General category "Number, Decimal Digit" (Nd)
*/
DECIMAL_NUMBER,
/**
* General category "Number, Letter" (Nl)
*/
LETTER_NUMBER,
/**
* General category "Number, Other" (No)
*/
OTHER_NUMBER,
/**
* General category "Punctuation, Connector" (Pc)
*/
CONNECT_PUNCTUATION,
/**
* General category "Punctuation, Dash" (Pd)
*/
DASH_PUNCTUATION,
/**
* General category "Punctuation, Close" (Pe)
*/
CLOSE_PUNCTUATION,
/**
* General category "Punctuation, Final quote" (Pf)
*/
FINAL_PUNCTUATION,
/**
* General category "Punctuation, Initial quote" (Pi)
*/
INITIAL_PUNCTUATION,
/**
* General category "Punctuation, Other" (Po)
*/
OTHER_PUNCTUATION,
/**
* General category "Punctuation, Open" (Ps)
*/
OPEN_PUNCTUATION,
/**
* General category "Symbol, Currency" (Sc)
*/
CURRENCY_SYMBOL,
/**
* General category "Symbol, Modifier" (Sk)
*/
MODIFIER_SYMBOL,
/**
* General category "Symbol, Math" (Sm)
*/
MATH_SYMBOL,
/**
* General category "Symbol, Other" (So)
*/
OTHER_SYMBOL,
/**
* General category "Separator, Line" (Zl)
*/
LINE_SEPARATOR,
/**
* General category "Separator, Paragraph" (Zp)
*/
PARAGRAPH_SEPARATOR,
/**
* General category "Separator, Space" (Zs)
*/
SPACE_SEPARATOR,
}
/**
* Mnemonic constants for the ends of a Unix pipe.
*/
/**
* Mnemonic constants for the ends of a Unix pipe.
*/
export namespace UnixPipeEnd {
export const $gtype: GObject.GType<UnixPipeEnd>;
}
enum UnixPipeEnd {
/**
* The readable file descriptor 0
*/
READ,
/**
* The writable file descriptor 1
*/
WRITE,
}
/**
* Error codes returned by #GUri methods.
*/
class UriError extends Error {
static $gtype: GObject.GType<UriError>;
// Static fields
/**
* Generic error if no more specific error is available.
* See the error message for details.
*/
static FAILED: number;
/**
* The scheme of a URI could not be parsed.
*/
static BAD_SCHEME: number;
/**
* The user/userinfo of a URI could not be parsed.
*/
static BAD_USER: number;
/**
* The password of a URI could not be parsed.
*/
static BAD_PASSWORD: number;
/**
* The authentication parameters of a URI could not be parsed.
*/
static BAD_AUTH_PARAMS: number;
/**
* The host of a URI could not be parsed.
*/
static BAD_HOST: number;
/**
* The port of a URI could not be parsed.
*/
static BAD_PORT: number;
/**
* The path of a URI could not be parsed.
*/
static BAD_PATH: number;
/**
* The query of a URI could not be parsed.
*/
static BAD_QUERY: number;
/**
* The fragment of a URI could not be parsed.
*/
static BAD_FRAGMENT: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
/**
* These are logical ids for special directories which are defined
* depending on the platform used. You should use g_get_user_special_dir()
* to retrieve the full path associated to the logical id.
*
* The #GUserDirectory enumeration can be extended at later date. Not
* every platform has a directory for every logical id in this
* enumeration.
*/
/**
* These are logical ids for special directories which are defined
* depending on the platform used. You should use g_get_user_special_dir()
* to retrieve the full path associated to the logical id.
*
* The #GUserDirectory enumeration can be extended at later date. Not
* every platform has a directory for every logical id in this
* enumeration.
*/
export namespace UserDirectory {
export const $gtype: GObject.GType<UserDirectory>;
}
enum UserDirectory {
/**
* the user's Desktop directory
*/
DIRECTORY_DESKTOP,
/**
* the user's Documents directory
*/
DIRECTORY_DOCUMENTS,
/**
* the user's Downloads directory
*/
DIRECTORY_DOWNLOAD,
/**
* the user's Music directory
*/
DIRECTORY_MUSIC,
/**
* the user's Pictures directory
*/
DIRECTORY_PICTURES,
/**
* the user's shared directory
*/
DIRECTORY_PUBLIC_SHARE,
/**
* the user's Templates directory
*/
DIRECTORY_TEMPLATES,
/**
* the user's Movies directory
*/
DIRECTORY_VIDEOS,
/**
* the number of enum values
*/
N_DIRECTORIES,
}
/**
* The range of possible top-level types of #GVariant instances.
*/
/**
* The range of possible top-level types of #GVariant instances.
*/
export namespace VariantClass {
export const $gtype: GObject.GType<VariantClass>;
}
enum VariantClass {
/**
* The #GVariant is a boolean.
*/
BOOLEAN,
/**
* The #GVariant is a byte.
*/
BYTE,
/**
* The #GVariant is a signed 16 bit integer.
*/
INT16,
/**
* The #GVariant is an unsigned 16 bit integer.
*/
UINT16,
/**
* The #GVariant is a signed 32 bit integer.
*/
INT32,
/**
* The #GVariant is an unsigned 32 bit integer.
*/
UINT32,
/**
* The #GVariant is a signed 64 bit integer.
*/
INT64,
/**
* The #GVariant is an unsigned 64 bit integer.
*/
UINT64,
/**
* The #GVariant is a file handle index.
*/
HANDLE,
/**
* The #GVariant is a double precision floating
* point value.
*/
DOUBLE,
/**
* The #GVariant is a normal string.
*/
STRING,
/**
* The #GVariant is a D-Bus object path
* string.
*/
OBJECT_PATH,
/**
* The #GVariant is a D-Bus signature string.
*/
SIGNATURE,
/**
* The #GVariant is a variant.
*/
VARIANT,
/**
* The #GVariant is a maybe-typed value.
*/
MAYBE,
/**
* The #GVariant is an array.
*/
ARRAY,
/**
* The #GVariant is a tuple.
*/
TUPLE,
/**
* The #GVariant is a dictionary entry.
*/
DICT_ENTRY,
}
/**
* Error codes returned by parsing text-format GVariants.
*/
class VariantParseError extends Error {
static $gtype: GObject.GType<VariantParseError>;
// Static fields
/**
* generic error (unused)
*/
static FAILED: number;
/**
* a non-basic #GVariantType was given where a basic type was expected
*/
static BASIC_TYPE_EXPECTED: number;
/**
* cannot infer the #GVariantType
*/
static CANNOT_INFER_TYPE: number;
/**
* an indefinite #GVariantType was given where a definite type was expected
*/
static DEFINITE_TYPE_EXPECTED: number;
/**
* extra data after parsing finished
*/
static INPUT_NOT_AT_END: number;
/**
* invalid character in number or unicode escape
*/
static INVALID_CHARACTER: number;
/**
* not a valid #GVariant format string
*/
static INVALID_FORMAT_STRING: number;
/**
* not a valid object path
*/
static INVALID_OBJECT_PATH: number;
/**
* not a valid type signature
*/
static INVALID_SIGNATURE: number;
/**
* not a valid #GVariant type string
*/
static INVALID_TYPE_STRING: number;
/**
* could not find a common type for array entries
*/
static NO_COMMON_TYPE: number;
/**
* the numerical value is out of range of the given type
*/
static NUMBER_OUT_OF_RANGE: number;
/**
* the numerical value is out of range for any type
*/
static NUMBER_TOO_BIG: number;
/**
* cannot parse as variant of the specified type
*/
static TYPE_ERROR: number;
/**
* an unexpected token was encountered
*/
static UNEXPECTED_TOKEN: number;
/**
* an unknown keyword was encountered
*/
static UNKNOWN_KEYWORD: number;
/**
* unterminated string constant
*/
static UNTERMINATED_STRING_CONSTANT: number;
/**
* no value given
*/
static VALUE_EXPECTED: number;
/**
* variant was too deeply nested; #GVariant is only guaranteed to handle nesting up to 64 levels (Since: 2.64)
*/
static RECURSION: number;
// Constructors
constructor(options: { message: string; code: number });
_init(...args: any[]): void;
}
const ALLOCATOR_LIST: number;
const ALLOCATOR_NODE: number;
const ALLOCATOR_SLIST: number;
const ALLOC_AND_FREE: number;
const ALLOC_ONLY: number;
const ANALYZER_ANALYZING: number;
/**
* A good size for a buffer to be passed into [func`GLib`.ascii_dtostr].
* It is guaranteed to be enough for all output of that function
* on systems with 64bit IEEE-compatible doubles.
*
* The typical usage would be something like:
* ```C
* char buf[G_ASCII_DTOSTR_BUF_SIZE];
*
* fprintf (out, "value=%s\n", g_ascii_dtostr (buf, sizeof (buf), value));
* ```
*/
const ASCII_DTOSTR_BUF_SIZE: number;
/**
* Evaluates to the initial reference count for `gatomicrefcount`.
*
* This macro is useful for initializing `gatomicrefcount` fields inside
* structures, for instance:
*
*
* ```c
* typedef struct {
* gatomicrefcount ref_count;
* char *name;
* char *address;
* } Person;
*
* static const Person default_person = {
* .ref_count = G_ATOMIC_REF_COUNT_INIT,
* .name = "Default name",
* .address = "Default address",
* };
* ```
*
*/
const ATOMIC_REF_COUNT_INIT: number;
/**
* Specifies one of the possible types of byte order.
* See %G_BYTE_ORDER.
*/
const BIG_ENDIAN: number;
/**
* The set of uppercase ASCII alphabet characters.
* Used for specifying valid identifier characters
* in #GScannerConfig.
*/
const CSET_A_2_Z: string;
/**
* The set of ASCII digits.
* Used for specifying valid identifier characters
* in #GScannerConfig.
*/
const CSET_DIGITS: string;
/**
* The set of lowercase ASCII alphabet characters.
* Used for specifying valid identifier characters
* in #GScannerConfig.
*/
const CSET_a_2_z: string;
/**
* The C standard version the code is compiling against, it's normally
* defined with the same value of `__STDC_VERSION__` for C standard
* compatible compilers, while it uses the lowest standard version
* in pure MSVC, given that in such compiler the definition depends on
* a compilation flag.
*
* This is granted to be undefined when compiling with a C++ compiler.
*
* See also: %G_C_STD_CHECK_VERSION and %G_CXX_STD_VERSION
*/
const C_STD_VERSION: number;
/**
* A bitmask that restricts the possible flags passed to
* g_datalist_set_flags(). Passing a flags value where
* flags & ~G_DATALIST_FLAGS_MASK != 0 is an error.
*/
const DATALIST_FLAGS_MASK: number;
/**
* Represents an invalid #GDateDay.
*/
const DATE_BAD_DAY: number;
/**
* Represents an invalid Julian day number.
*/
const DATE_BAD_JULIAN: number;
/**
* Represents an invalid year.
*/
const DATE_BAD_YEAR: number;
/**
* The directory separator character.
*
* This is `'/'` on UNIX machines and `'\'` under Windows.
*/
const DIR_SEPARATOR: number;
/**
* The directory separator as a string.
*
* This is `"/"` on UNIX machines and `"\"` under Windows.
*/
const DIR_SEPARATOR_S: string;
/**
* The base of natural logarithms.
*/
const E: number;
const GINT16_FORMAT: string;
const GINT16_MODIFIER: string;
const GINT32_FORMAT: string;
const GINT32_MODIFIER: string;
const GINT64_FORMAT: string;
const GINT64_MODIFIER: string;
const GINTPTR_FORMAT: string;
const GINTPTR_MODIFIER: string;
/**
* Expands to "" on all modern compilers, and to __FUNCTION__ on gcc
* version 2.x. Don't use it.
*/
const GNUC_FUNCTION: string;
/**
* Expands to "" on all modern compilers, and to __PRETTY_FUNCTION__
* on gcc version 2.x. Don't use it.
*/
const GNUC_PRETTY_FUNCTION: string;
const GSIZE_FORMAT: string;
const GSIZE_MODIFIER: string;
const GSSIZE_FORMAT: string;
const GSSIZE_MODIFIER: string;
const GUINT16_FORMAT: string;
const GUINT32_FORMAT: string;
const GUINT64_FORMAT: string;
const GUINTPTR_FORMAT: string;
const HAVE_GINT64: number;
const HAVE_GNUC_VARARGS: number;
/**
* Defined to 1 if gcc-style visibility handling is supported.
*/
const HAVE_GNUC_VISIBILITY: number;
const HAVE_GROWING_STACK: number;
const HAVE_ISO_VARARGS: number;
/**
* The position of the first bit which is not reserved for internal
* use be the #GHook implementation, i.e.
* `1 << G_HOOK_FLAG_USER_SHIFT` is the first
* bit which can be used for application-defined flags.
*/
const HOOK_FLAG_USER_SHIFT: number;
/**
* The bias by which exponents in double-precision floats are offset.
*/
const IEEE754_DOUBLE_BIAS: number;
/**
* The bias by which exponents in single-precision floats are offset.
*/
const IEEE754_FLOAT_BIAS: number;
/**
* The name of the main group of a desktop entry file, as defined in the
* [Desktop Entry Specification](https://specifications.freedesktop.org/desktop-entry-spec/latest/).
*
* Consult the specification for more
* details about the meanings of the keys below.
*/
const KEY_FILE_DESKTOP_GROUP: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a string list
* giving the available application actions.
*/
const KEY_FILE_DESKTOP_KEY_ACTIONS: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a list
* of strings giving the categories in which the desktop entry
* should be shown in a menu.
*/
const KEY_FILE_DESKTOP_KEY_CATEGORIES: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a localized
* string giving the tooltip for the desktop entry.
*/
const KEY_FILE_DESKTOP_KEY_COMMENT: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a boolean
* set to true if the application is D-Bus activatable.
*/
const KEY_FILE_DESKTOP_KEY_DBUS_ACTIVATABLE: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a string
* giving the command line to execute.
*
* It is only valid for desktop entries with the `Application` type.
*/
const KEY_FILE_DESKTOP_KEY_EXEC: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a localized
* string giving the generic name of the desktop entry.
*/
const KEY_FILE_DESKTOP_KEY_GENERIC_NAME: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a boolean
* stating whether the desktop entry has been deleted by the user.
*/
const KEY_FILE_DESKTOP_KEY_HIDDEN: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a localized
* string giving the name of the icon to be displayed for the desktop
* entry.
*/
const KEY_FILE_DESKTOP_KEY_ICON: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a list
* of strings giving the MIME types supported by this desktop entry.
*/
const KEY_FILE_DESKTOP_KEY_MIME_TYPE: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a localized
* string giving the specific name of the desktop entry.
*/
const KEY_FILE_DESKTOP_KEY_NAME: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a list of
* strings identifying the environments that should not display the
* desktop entry.
*/
const KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a boolean
* stating whether the desktop entry should be shown in menus.
*/
const KEY_FILE_DESKTOP_KEY_NO_DISPLAY: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a list of
* strings identifying the environments that should display the
* desktop entry.
*/
const KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a string
* containing the working directory to run the program in.
*
* It is only valid for desktop entries with the `Application` type.
*/
const KEY_FILE_DESKTOP_KEY_PATH: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a boolean
* stating whether the application supports the
* [Startup Notification Protocol Specification](https://specifications.freedesktop.org/startup-notification-spec/latest/).
*/
const KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is string
* identifying the WM class or name hint of a window that the application
* will create, which can be used to emulate
* [Startup Notification](https://specifications.freedesktop.org/startup-notification-spec/latest/)
* with older applications.
*/
const KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a boolean
* stating whether the program should be run in a terminal window.
*
* It is only valid for desktop entries with the `Application` type.
*/
const KEY_FILE_DESKTOP_KEY_TERMINAL: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a string
* giving the file name of a binary on disk used to determine if the
* program is actually installed.
*
* It is only valid for desktop entries with the `Application` type.
*/
const KEY_FILE_DESKTOP_KEY_TRY_EXEC: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a string
* giving the type of the desktop entry.
*
* Usually [const`GLib`.KEY_FILE_DESKTOP_TYPE_APPLICATION],
* [const`GLib`.KEY_FILE_DESKTOP_TYPE_LINK], or
* [const`GLib`.KEY_FILE_DESKTOP_TYPE_DIRECTORY].
*/
const KEY_FILE_DESKTOP_KEY_TYPE: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a string
* giving the URL to access.
*
* It is only valid for desktop entries with the `Link` type.
*/
const KEY_FILE_DESKTOP_KEY_URL: string;
/**
* A key under [const`GLib`.KEY_FILE_DESKTOP_GROUP], whose value is a string
* giving the version of the Desktop Entry Specification used for
* the desktop entry file.
*/
const KEY_FILE_DESKTOP_KEY_VERSION: string;
/**
* The value of the [const`GLib`.KEY_FILE_DESKTOP_KEY_TYPE], key for desktop
* entries representing applications.
*/
const KEY_FILE_DESKTOP_TYPE_APPLICATION: string;
/**
* The value of the [const`GLib`.KEY_FILE_DESKTOP_KEY_TYPE], key for desktop
* entries representing directories.
*/
const KEY_FILE_DESKTOP_TYPE_DIRECTORY: string;
/**
* The value of the [const`GLib`.KEY_FILE_DESKTOP_KEY_TYPE], key for desktop
* entries representing links to documents.
*/
const KEY_FILE_DESKTOP_TYPE_LINK: string;
/**
* Specifies one of the possible types of byte order.
* See %G_BYTE_ORDER.
*/
const LITTLE_ENDIAN: number;
/**
* The natural logarithm of 10.
*/
const LN10: number;
/**
* The natural logarithm of 2.
*/
const LN2: number;
/**
* Multiplying the base 2 exponent by this number yields the base 10 exponent.
*/
const LOG_2_BASE_10: number;
/**
* Defines the log domain. See [Log Domains](#log-domains).
*
* Libraries should define this so that any messages
* which they log can be differentiated from messages from other
* libraries and application code. But be careful not to define
* it in any public header files.
*
* Log domains must be unique, and it is recommended that they are the
* application or library name, optionally followed by a hyphen and a sub-domain
* name. For example, `bloatpad` or `bloatpad-io`.
*
* If undefined, it defaults to the default %NULL (or `""`) log domain; this is
* not advisable, as it cannot be filtered against using the `G_MESSAGES_DEBUG`
* environment variable.
*
* For example, GTK uses this in its `Makefile.am`:
*
* ```
* AM_CPPFLAGS = -DG_LOG_DOMAIN=\"Gtk\"
* ```
*
*
* Applications can choose to leave it as the default %NULL (or `""`)
* domain. However, defining the domain offers the same advantages as
* above.
*/
const LOG_DOMAIN: number;
/**
* GLib log levels that are considered fatal by default.
*
* This is not used if structured logging is enabled; see
* [Using Structured Logging](logging.html#using-structured-logging).
*/
const LOG_FATAL_MASK: number;
/**
* Log levels below `1<<G_LOG_LEVEL_USER_SHIFT` are used by GLib.
* Higher bits can be used for user-defined log levels.
*/
const LOG_LEVEL_USER_SHIFT: number;
/**
* The major version number of the GLib library.
*
* Like #glib_major_version, but from the headers used at
* application compile time, rather than from the library
* linked against at application run time.
*/
const MAJOR_VERSION: number;
const MAXINT16: number;
const MAXINT32: number;
const MAXINT64: number;
const MAXINT8: number;
const MAXUINT16: number;
const MAXUINT32: number;
const MAXUINT64: number;
const MAXUINT8: number;
/**
* The micro version number of the GLib library.
*
* Like #gtk_micro_version, but from the headers used at
* application compile time, rather than from the library
* linked against at application run time.
*/
const MICRO_VERSION: number;
/**
* The minimum value which can be held in a #gint16.
*/
const MININT16: number;
/**
* The minimum value which can be held in a #gint32.
*/
const MININT32: number;
/**
* The minimum value which can be held in a #gint64.
*/
const MININT64: number;
/**
* The minimum value which can be held in a #gint8.
*/
const MININT8: number;
/**
* The minor version number of the GLib library.
*
* Like #gtk_minor_version, but from the headers used at
* application compile time, rather than from the library
* linked against at application run time.
*/
const MINOR_VERSION: number;
const MODULE_SUFFIX: string;
/**
* If a long option in the main group has this name, it is not treated as a
* regular option. Instead it collects all non-option arguments which would
* otherwise be left in `argv`. The option must be of type
* %G_OPTION_ARG_CALLBACK, %G_OPTION_ARG_STRING_ARRAY
* or %G_OPTION_ARG_FILENAME_ARRAY.
*
*
* Using %G_OPTION_REMAINING instead of simply scanning `argv`
* for leftover arguments has the advantage that GOption takes care of
* necessary encoding conversions for strings or filenames.
*/
const OPTION_REMAINING: string;
/**
* Specifies one of the possible types of byte order
* (currently unused). See %G_BYTE_ORDER.
*/
const PDP_ENDIAN: number;
/**
* The value of pi (ratio of circle's circumference to its diameter).
*/
const PI: number;
/**
* A format specifier that can be used in printf()-style format strings
* when printing a #GPid.
*/
const PID_FORMAT: string;
/**
* Pi divided by 2.
*/
const PI_2: number;
/**
* Pi divided by 4.
*/
const PI_4: number;
/**
* A format specifier that can be used in printf()-style format strings
* when printing the `fd` member of a #GPollFD.
*/
const POLLFD_FORMAT: string;
/**
* Use this for default priority event sources.
*
* In GLib this priority is used when adding timeout functions
* with [func`GLib`.timeout_add]. In GDK this priority is used for events
* from the X server.
*/
const PRIORITY_DEFAULT: number;
/**
* Use this for default priority idle functions.
*
* In GLib this priority is used when adding idle functions with
* [func`GLib`.idle_add].
*/
const PRIORITY_DEFAULT_IDLE: number;
/**
* Use this for high priority event sources.
*
* It is not used within GLib or GTK.
*/
const PRIORITY_HIGH: number;
/**
* Use this for high priority idle functions.
*
* GTK uses %G_PRIORITY_HIGH_IDLE + 10 for resizing operations,
* and %G_PRIORITY_HIGH_IDLE + 20 for redrawing operations. (This is
* done to ensure that any pending resizes are processed before any
* pending redraws, so that widgets are not redrawn twice unnecessarily.)
*/
const PRIORITY_HIGH_IDLE: number;
/**
* Use this for very low priority background tasks.
*
* It is not used within GLib or GTK.
*/
const PRIORITY_LOW: number;
/**
* Evaluates to the initial reference count for `grefcount`.
*
* This macro is useful for initializing `grefcount` fields inside
* structures, for instance:
*
*
* ```c
* typedef struct {
* grefcount ref_count;
* char *name;
* char *address;
* } Person;
*
* static const Person default_person = {
* .ref_count = G_REF_COUNT_INIT,
* .name = "Default name",
* .address = "Default address",
* };
* ```
*
*/
const REF_COUNT_INIT: number;
/**
* The search path separator character.
* This is ':' on UNIX machines and ';' under Windows.
*/
const SEARCHPATH_SEPARATOR: number;
/**
* The search path separator as a string.
* This is ":" on UNIX machines and ";" under Windows.
*/
const SEARCHPATH_SEPARATOR_S: string;
const SIZEOF_LONG: number;
const SIZEOF_SIZE_T: number;
const SIZEOF_SSIZE_T: number;
const SIZEOF_VOID_P: number;
/**
* Use this macro as the return value of a [callback`GLib`.SourceFunc] to leave
* the [struct`GLib`.Source] in the main loop.
*/
const SOURCE_CONTINUE: boolean;
/**
* Use this macro as the return value of a [callback`GLib`.SourceFunc] to remove
* the [struct`GLib`.Source] from the main loop.
*/
const SOURCE_REMOVE: boolean;
/**
* The square root of two.
*/
const SQRT2: number;
/**
* The standard delimiters, used in [func`GLib`.strdelimit].
*/
const STR_DELIMITERS: string;
const SYSDEF_AF_INET: number;
const SYSDEF_AF_INET6: number;
const SYSDEF_AF_UNIX: number;
const SYSDEF_MSG_DONTROUTE: number;
const SYSDEF_MSG_OOB: number;
const SYSDEF_MSG_PEEK: number;
/**
* A value that can be passed as an option to [func`GLib`.test_init].
*
* Creates a unique temporary directory for each unit test and uses sets
* XDG directories to point into subdirectories of it for the duration of
* the unit test. The directory tree is cleaned up after the test finishes
* successfully.
*
* Note that this doesnt take effect until [func`GLib`.test_run] is called,
* so calls to (for example) [func`GLib`.get_home_dir] will return the
* system-wide value when made in a test programs main() function.
*
* The following functions will return subdirectories of the temporary directory
* when this option is used. The specific subdirectory paths in use are not
* guaranteed to be stable API — always use a getter function to retrieve them.
*
* - [func`GLib`.get_home_dir]
* - [func`GLib`.get_user_cache_dir]
* - [func`GLib`.get_system_config_dirs]
* - [func`GLib`.get_user_config_dir]
* - [func`GLib`.get_system_data_dirs]
* - [func`GLib`.get_user_data_dir]
* - [func`GLib`.get_user_state_dir]
* - [func`GLib`.get_user_runtime_dir]
*
* The subdirectories may not be created by the test harness; as with normal
* calls to functions like [func`GLib`.get_user_cache_dir], the caller must
* be prepared to create the directory if it doesnt exist.
*/
const TEST_OPTION_ISOLATE_DIRS: string;
/**
* A value that can be passed as an option to [func`GLib`.test_init].
*
* If this option is given, assertions will not abort the process, but
* call [func`GLib`.test_fail]. Equivalent to [func`GLib`.test_set_nonfatal_assertions].
*/
const TEST_OPTION_NONFATAL_ASSERTIONS: string;
/**
* A value that can be passed as an option to [func`GLib`.test_init].
*
* If this option is given, [func`GLib`.test_init] will not call [func`GLib`.set_prgname].
*/
const TEST_OPTION_NO_PRGNAME: string;
/**
* Evaluates to a time span of one day.
*/
const TIME_SPAN_DAY: number;
/**
* Evaluates to a time span of one hour.
*/
const TIME_SPAN_HOUR: number;
/**
* Evaluates to a time span of one millisecond.
*/
const TIME_SPAN_MILLISECOND: number;
/**
* Evaluates to a time span of one minute.
*/
const TIME_SPAN_MINUTE: number;
/**
* Evaluates to a time span of one second.
*/
const TIME_SPAN_SECOND: number;
/**
* The maximum length (in codepoints) of a compatibility or canonical
* decomposition of a single Unicode character.
*
* This is as defined by Unicode 6.1.
*/
const UNICHAR_MAX_DECOMPOSITION_LENGTH: number;
/**
* Generic delimiters characters as defined in
* [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `:/?#[]```.
*/
const URI_RESERVED_CHARS_GENERIC_DELIMITERS: string;
/**
* Subcomponent delimiter characters as defined in
* [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `!$&'()*+,;=`.
*/
const URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS: string;
/**
* Number of microseconds in one second (1 million).
* This macro is provided for code readability.
*/
const USEC_PER_SEC: number;
const VA_COPY_AS_ARRAY: number;
/**
* A macro that should be defined by the user prior to including
* the glib.h header.
* The definition should be one of the predefined GLib version
* macros: %GLIB_VERSION_2_26, %GLIB_VERSION_2_28,...
*
* This macro defines the earliest version of GLib that the package is
* required to be able to compile against.
*
* If the compiler is configured to warn about the use of deprecated
* functions, then using functions that were deprecated in version
* %GLIB_VERSION_MIN_REQUIRED or earlier will cause warnings (but
* using functions deprecated in later releases will not).
*/
const VERSION_MIN_REQUIRED: number;
const WIN32_MSG_HANDLE: number;
const macro__has_attribute___noreturn__: number;
const macro__has_attribute_ifunc: number;
const macro__has_attribute_no_sanitize_address: number;
/**
* A wrapper for the POSIX access() function. This function is used to
* test a pathname for one or several of read, write or execute
* permissions, or just existence.
*
* On Windows, the file protection mechanism is not at all POSIX-like,
* and the underlying function in the C library only checks the
* FAT-style READONLY attribute, and does not look at the ACL of a
* file at all. This function is this in practise almost useless on
* Windows. Software that needs to handle file permissions on Windows
* more exactly should use the Win32 API.
*
* See your C library manual for more details about access().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param mode as in access()
* @returns zero if the pathname refers to an existing file system object that has all the tested permissions, or -1 otherwise or on error.
*/
function access(filename: string, mode: number): number;
/**
* This function is similar to g_malloc(), allocating (`n_blocks` * `n_block_bytes)`
* bytes, but care is taken to align the allocated memory to with the given
* alignment value. Additionally, it will detect possible overflow during
* multiplication.
*
* If the allocation fails (because the system is out of memory),
* the program is terminated.
*
* Aligned memory allocations returned by this function can only be
* freed using g_aligned_free_sized() or g_aligned_free().
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @param alignment the alignment to be enforced, which must be a positive power of 2 and a multiple of `sizeof(void*)`
* @returns the allocated memory
*/
function aligned_alloc(n_blocks: number, n_block_bytes: number, alignment: number): any | null;
/**
* This function is similar to g_aligned_alloc(), but it will
* also clear the allocated memory before returning it.
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @param alignment the alignment to be enforced, which must be a positive power of 2 and a multiple of `sizeof(void*)`
* @returns the allocated, cleared memory
*/
function aligned_alloc0(n_blocks: number, n_block_bytes: number, alignment: number): any | null;
/**
* Frees the memory allocated by g_aligned_alloc().
* @param mem the memory to deallocate
*/
function aligned_free(mem?: any | null): void;
/**
* Frees the memory pointed to by `mem,` assuming it is has the given `size` and
* `alignment`.
*
* If `mem` is %NULL this is a no-op (and `size` is ignored).
*
* It is an error if `size` doesnt match the size, or `alignment` doesnt match
* the alignment, passed when `mem` was allocated. `size` and `alignment` are
* passed to this function to allow optimizations in the allocator. If you
* dont know either of them, use g_aligned_free() instead.
* @param mem the memory to free
* @param alignment alignment of @mem
* @param size size of @mem, in bytes
*/
function aligned_free_sized(mem: any | null, alignment: number, size: number): void;
/**
* Determines the numeric value of a character as a decimal digit. If the
* character is not a decimal digit according to [func`GLib`.ascii_isdigit],
* `-1` is returned.
*
* Differs from [func`GLib`.unichar_digit_value] because it takes a char, so
* there's no worry about sign extension if characters are signed.
* @param c an ASCII character
* @returns the numerical value of @c if it is a decimal digit, `-1` otherwise
*/
function ascii_digit_value(c: number): number;
/**
* Converts a `gdouble` to a string, using the '.' as
* decimal point.
*
* This function generates enough precision that converting
* the string back using [func`GLib`.ascii_strtod] gives the same machine-number
* (on machines with IEEE compatible 64bit doubles). It is
* guaranteed that the size of the resulting string will never
* be larger than [const`GLib`.ASCII_DTOSTR_BUF_SIZE] bytes, including the terminating
* nul character, which is always added.
* @param buffer a buffer to place the resulting string in
* @param buf_len the length of the buffer
* @param d the value to convert
* @returns the pointer to the buffer with the converted string
*/
function ascii_dtostr(buffer: string, buf_len: number, d: number): string;
/**
* Converts a `gdouble` to a string, using the '.' as
* decimal point. To format the number you pass in
* a `printf()`-style format string. Allowed conversion
* specifiers are 'e', 'E', 'f', 'F', 'g' and 'G'.
*
* The `format` must just be a single format specifier
* starting with `%`, expecting a `gdouble` argument.
*
* The returned buffer is guaranteed to be nul-terminated.
*
* If you just want to want to serialize the value into a
* string, use [func`GLib`.ascii_dtostr].
* @param buffer a buffer to place the resulting string in
* @param buf_len the length of the buffer
* @param format the `printf()`-style format to use for the code to use for converting
* @param d the value to convert
* @returns the pointer to the buffer with the converted string
*/
function ascii_formatd(buffer: string, buf_len: number, format: string, d: number): string;
/**
* Compare two strings, ignoring the case of ASCII characters.
*
* Unlike the BSD `strcasecmp()` function, this only recognizes standard
* ASCII letters and ignores the locale, treating all non-ASCII
* bytes as if they are not letters.
*
* This function should be used only on strings that are known to be
* in encodings where the bytes corresponding to ASCII letters always
* represent themselves. This includes UTF-8 and the ISO-8859-*
* charsets, but not for instance double-byte encodings like the
* Windows Codepage 932, where the trailing bytes of double-byte
* characters include all ASCII letters. If you compare two CP932
* strings using this function, you will get false matches.
*
* Both `s1` and `s2` must be non-`NULL`.
* @param s1 string to compare with @s2
* @param s2 string to compare with @s1
* @returns 0 if the strings match, a negative value if @s1 < @s2, or a positive value if @s1 > @s2
*/
function ascii_strcasecmp(s1: string, s2: string): number;
/**
* Converts all upper case ASCII letters to lower case ASCII letters, with
* semantics that exactly match [func`GLib`.ascii_tolower].
* @param str a string
* @param len length of @str in bytes, or `-1` if @str is nul-terminated
* @returns a newly-allocated string, with all the upper case characters in @str converted to lower case. (Note that this is unlike the old [func@GLib.strdown], which modified the string in place.)
*/
function ascii_strdown(str: string, len: number): string;
/**
* A convenience function for converting a string to a signed number.
*
* This function assumes that `str` contains only a number of the given
* `base` that is within inclusive bounds limited by `min` and `max`. If
* this is true, then the converted number is stored in `out_num`. An
* empty string is not a valid input. A string with leading or
* trailing whitespace is also an invalid input.
*
* `base` can be between 2 and 36 inclusive. Hexadecimal numbers must
* not be prefixed with "0x" or "0X". Such a problem does not exist
* for octal numbers, since they were usually prefixed with a zero
* which does not change the value of the parsed number.
*
* Parsing failures result in an error with the `G_NUMBER_PARSER_ERROR`
* domain. If the input is invalid, the error code will be
* [error`GLib`.NumberParserError.INVALID]. If the parsed number is out of
* bounds - [error`GLib`.NumberParserError.OUT_OF_BOUNDS].
*
* See [func`GLib`.ascii_strtoll] if you have more complex needs such as
* parsing a string which starts with a number, but then has other
* characters.
* @param str a string to convert
* @param base base of a parsed number
* @param min a lower bound (inclusive)
* @param max an upper bound (inclusive)
* @returns true if @str was a number, false otherwise
*/
function ascii_string_to_signed(str: string, base: number, min: number, max: number): [boolean, number];
/**
* A convenience function for converting a string to an unsigned number.
*
* This function assumes that `str` contains only a number of the given
* `base` that is within inclusive bounds limited by `min` and `max`. If
* this is true, then the converted number is stored in `out_num`. An
* empty string is not a valid input. A string with leading or
* trailing whitespace is also an invalid input. A string with a leading sign
* (`-` or `+`) is not a valid input for the unsigned parser.
*
* `base` can be between 2 and 36 inclusive. Hexadecimal numbers must
* not be prefixed with "0x" or "0X". Such a problem does not exist
* for octal numbers, since they were usually prefixed with a zero
* which does not change the value of the parsed number.
*
* Parsing failures result in an error with the `G_NUMBER_PARSER_ERROR`
* domain. If the input is invalid, the error code will be
* [error`GLib`.NumberParserError.INVALID]. If the parsed number is out of
* bounds - [error`GLib`.NumberParserError.OUT_OF_BOUNDS].
*
* See [func`GLib`.ascii_strtoull] if you have more complex needs such as
* parsing a string which starts with a number, but then has other
* characters.
* @param str a string
* @param base base of a parsed number
* @param min a lower bound (inclusive)
* @param max an upper bound (inclusive)
* @returns true if @str was a number, false otherwise
*/
function ascii_string_to_unsigned(str: string, base: number, min: number, max: number): [boolean, number];
/**
* Compare `s1` and `s2`, ignoring the case of ASCII characters and any
* characters after the first `n` in each string. If either string is
* less than `n` bytes long, comparison will stop at the first nul byte
* encountered.
*
* Unlike the BSD `strncasecmp()` function, this only recognizes standard
* ASCII letters and ignores the locale, treating all non-ASCII
* characters as if they are not letters.
*
* The same warning as in [func`GLib`.ascii_strcasecmp] applies: Use this
* function only on strings known to be in encodings where bytes
* corresponding to ASCII letters always represent themselves.
* @param s1 string to compare with @s2
* @param s2 string to compare with @s1
* @param n number of characters to compare
* @returns 0 if the strings match, a negative value if @s1 < @s2, or a positive value if @s1 > @s2
*/
function ascii_strncasecmp(s1: string, s2: string, n: number): number;
/**
* Converts a string to a floating point value.
*
* This function behaves like the standard `strtod()` function
* does in the C locale. It does this without actually changing
* the current locale, since that would not be thread-safe.
* A limitation of the implementation is that this function
* will still accept localized versions of infinities and NANs.
*
* This function is typically used when reading configuration
* files or other non-user input that should be locale independent.
* To handle input from the user you should normally use the
* locale-sensitive system `strtod()` function.
*
* To convert from a gdouble to a string in a locale-insensitive
* way, use [func`GLib`.ascii_dtostr].
*
* If the correct value would cause overflow, plus or minus `HUGE_VAL`
* is returned (according to the sign of the value), and `ERANGE` is
* stored in `errno`. If the correct value would cause underflow,
* zero is returned and `ERANGE` is stored in `errno`.
*
* This function resets `errno` before calling `strtod()` so that
* you can reliably detect overflow and underflow.
* @param nptr the string to convert to a numeric value
* @returns the converted value
*/
function ascii_strtod(nptr: string): [number, string];
/**
* Converts a string to a `gint64` value.
*
* This function behaves like the standard `strtoll()` function
* does in the C locale. It does this without actually
* changing the current locale, since that would not be
* thread-safe.
*
* This function is typically used when reading configuration
* files or other non-user input that should be locale independent.
* To handle input from the user you should normally use the
* locale-sensitive system `strtoll()` function.
*
* If the correct value would cause overflow, [const`GLib`.MAXINT64] or
* [const`GLib`.MININT64] is returned, and `ERANGE` is stored in `errno`.
* If the base is outside the valid range, zero is returned, and
* `EINVAL` is stored in `errno`. If the
* string conversion fails, zero is returned, and `endptr` returns `nptr`
* (if `endptr` is non-`NULL`).
* @param nptr the string to convert to a numeric value
* @param base to be used for the conversion, 2..36 or 0
* @returns the converted value, or zero on error
*/
function ascii_strtoll(nptr: string, base: number): [number, string];
/**
* Converts a string to a `guint64` value.
*
* This function behaves like the standard `strtoull()` function
* does in the C locale. It does this without actually
* changing the current locale, since that would not be
* thread-safe.
*
* Note that input with a leading minus sign (`-`) is accepted, and will return
* the negation of the parsed number, unless that would overflow a `guint64`.
* Critically, this means you cannot assume that a short fixed length input will
* result in a low return value, as the input could have a leading `-`.
*
* This function is typically used when reading configuration
* files or other non-user input that should be locale independent.
* To handle input from the user you should normally use the
* locale-sensitive system `strtoull()` function.
*
* If the correct value would cause overflow, [const`GLib`.MAXUINT64]
* is returned, and `ERANGE` is stored in `errno`.
* If the base is outside the valid range, zero is returned, and
* `EINVAL` is stored in `errno`.
* If the string conversion fails, zero is returned, and `endptr` returns
* `nptr` (if `endptr` is non-`NULL`).
* @param nptr the string to convert to a numeric value
* @param base to be used for the conversion, 2..36 or 0
* @returns the converted value, or zero on error
*/
function ascii_strtoull(nptr: string, base: number): [number, string];
/**
* Converts all lower case ASCII letters to upper case ASCII letters, with
* semantics that exactly match [func`GLib`.ascii_toupper].
* @param str a string
* @param len length of @str in bytes, or `-1` if @str is nul-terminated
* @returns a newly-allocated string, with all the lower case characters in @str converted to upper case. (Note that this is unlike the old [func@GLib.strup], which modified the string in place.)
*/
function ascii_strup(str: string, len: number): string;
/**
* Convert a character to ASCII lower case. If the character is not an
* ASCII upper case letter, it is returned unchanged.
*
* Unlike the standard C library `tolower()` function, this only
* recognizes standard ASCII letters and ignores the locale, returning
* all non-ASCII characters unchanged, even if they are lower case
* letters in a particular character set. Also unlike the standard
* library function, this takes and returns a char, not an int, so
* don't call it on `EOF` but no need to worry about casting to `guchar`
* before passing a possibly non-ASCII character in.
* @param c any character
* @returns the result of the conversion
*/
function ascii_tolower(c: number): number;
/**
* Convert a character to ASCII upper case. If the character is not an
* ASCII lower case letter, it is returned unchanged.
*
* Unlike the standard C library `toupper()` function, this only
* recognizes standard ASCII letters and ignores the locale, returning
* all non-ASCII characters unchanged, even if they are upper case
* letters in a particular character set. Also unlike the standard
* library function, this takes and returns a char, not an int, so
* don't call it on `EOF` but no need to worry about casting to `guchar`
* before passing a possibly non-ASCII character in.
* @param c any character
* @returns the result of the conversion
*/
function ascii_toupper(c: number): number;
/**
* Determines the numeric value of a character as a hexadecimal digit. If the
* character is not a hex digit according to [func`GLib`.ascii_isxdigit],
* `-1` is returned.
*
* Differs from [func`GLib`.unichar_xdigit_value] because it takes a char, so
* there's no worry about sign extension if characters are signed.
*
* Differs from [func`GLib`.unichar_xdigit_value] because it takes a char, so
* there's no worry about sign extension if characters are signed.
* @param c an ASCII character
* @returns the numerical value of @c if it is a hex digit, `-1` otherwise
*/
function ascii_xdigit_value(c: number): number;
function assert_warning(
log_domain: string,
file: string,
line: number,
pretty_function: string,
expression: string,
): void;
function assertion_message(domain: string, file: string, line: number, func: string, message: string): void;
function assertion_message_cmpint(
domain: string,
file: string,
line: number,
func: string,
expr: string,
arg1: number,
cmp: string,
arg2: number,
numtype: number,
): void;
function assertion_message_cmpstr(
domain: string,
file: string,
line: number,
func: string,
expr: string,
arg1: string,
cmp: string,
arg2: string,
): void;
function assertion_message_cmpstrv(
domain: string,
file: string,
line: number,
func: string,
expr: string,
arg1: string,
arg2: string,
first_wrong_idx: number,
): void;
function assertion_message_error(
domain: string,
file: string,
line: number,
func: string,
expr: string,
error: Error,
error_domain: Quark,
error_code: number,
): void;
/**
* Creates a new asynchronous queue.
* @returns a new #GAsyncQueue. Free with g_async_queue_unref()
*/
function async_queue_new(): AsyncQueue;
/**
* Creates a new asynchronous queue and sets up a destroy notify
* function that is used to free any remaining queue items when
* the queue is destroyed after the final unref.
* @param item_free_func function to free queue elements
* @returns a new #GAsyncQueue. Free with g_async_queue_unref()
*/
function async_queue_new_full(item_free_func?: DestroyNotify | null): AsyncQueue;
/**
* Specifies a function to be called at normal program termination.
*
* Since GLib 2.8.2, on Windows g_atexit() actually is a preprocessor
* macro that maps to a call to the atexit() function in the C
* library. This means that in case the code that calls g_atexit(),
* i.e. atexit(), is in a DLL, the function will be called when the
* DLL is detached from the program. This typically makes more sense
* than that the function is called when the GLib DLL is detached,
* which happened earlier when g_atexit() was a function in the GLib
* DLL.
*
* The behaviour of atexit() in the context of dynamically loaded
* modules is not formally specified and varies wildly.
*
* On POSIX systems, calling g_atexit() (or atexit()) in a dynamically
* loaded module which is unloaded before the program terminates might
* well cause a crash at program exit.
*
* Some POSIX systems implement atexit() like Windows, and have each
* dynamically loaded module maintain an own atexit chain that is
* called when the module is unloaded.
*
* On other POSIX systems, before a dynamically loaded module is
* unloaded, the registered atexit functions (if any) residing in that
* module are called, regardless where the code that registered them
* resided. This is presumably the most robust approach.
*
* As can be seen from the above, for portability it's best to avoid
* calling g_atexit() (or atexit()) except in the main executable of a
* program.
* @param func the function to call on normal program termination.
*/
function atexit(func: VoidFunc): void;
/**
* Atomically adds `val` to the value of `atomic`.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic += val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* Before version 2.30, this function did not return a value
* (but g_atomic_int_exchange_and_add() did, and had the same meaning).
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @param val the value to add
* @returns the value of @atomic before the add, signed
*/
function atomic_int_add(atomic: number, val: number): number;
/**
* Performs an atomic bitwise 'and' of the value of `atomic` and `val,`
* storing the result back in `atomic`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic &= val; return tmp; }`.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @param val the value to 'and'
* @returns the value of @atomic before the operation, unsigned
*/
function atomic_int_and(atomic: number, val: number): number;
/**
* Compares `atomic` to `oldval` and, if equal, sets it to `newval`.
* If `atomic` was not equal to `oldval` then no change occurs.
*
* This compare and exchange is done atomically.
*
* Think of this operation as an atomic version of
* `{ if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @param oldval the value to compare with
* @param newval the value to conditionally replace with
* @returns %TRUE if the exchange took place
*/
function atomic_int_compare_and_exchange(atomic: number, oldval: number, newval: number): boolean;
/**
* Compares `atomic` to `oldval` and, if equal, sets it to `newval`.
* If `atomic` was not equal to `oldval` then no change occurs.
* In any case the value of `atomic` before this operation is stored in `preval`.
*
* This compare and exchange is done atomically.
*
* Think of this operation as an atomic version of
* `{ *preval = *atomic; if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* See also g_atomic_int_compare_and_exchange()
* @param atomic a pointer to a #gint or #guint
* @param oldval the value to compare with
* @param newval the value to conditionally replace with
* @returns %TRUE if the exchange took place
*/
function atomic_int_compare_and_exchange_full(
atomic: number,
oldval: number,
newval: number,
): [boolean, number];
/**
* Decrements the value of `atomic` by 1.
*
* Think of this operation as an atomic version of
* `{ *atomic -= 1; return (*atomic == 0); }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @returns %TRUE if the resultant value is zero
*/
function atomic_int_dec_and_test(atomic: number): boolean;
/**
* Sets the `atomic` to `newval` and returns the old value from `atomic`.
*
* This exchange is done atomically.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic = val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
* @param atomic a pointer to a #gint or #guint
* @param newval the value to replace with
* @returns the value of @atomic before the exchange, signed
*/
function atomic_int_exchange(atomic: number, newval: number): number;
/**
* This function existed before g_atomic_int_add() returned the prior
* value of the integer (which it now does). It is retained only for
* compatibility reasons. Don't use this function in new code.
* @param atomic a pointer to a #gint
* @param val the value to add
* @returns the value of @atomic before the add, signed
*/
function atomic_int_exchange_and_add(atomic: number, val: number): number;
/**
* Gets the current value of `atomic`.
*
* This call acts as a full compiler and hardware
* memory barrier (before the get).
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @returns the value of the integer
*/
function atomic_int_get(atomic: number): number;
/**
* Increments the value of `atomic` by 1.
*
* Think of this operation as an atomic version of `{ *atomic += 1; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
*/
function atomic_int_inc(atomic: number): void;
/**
* Performs an atomic bitwise 'or' of the value of `atomic` and `val,`
* storing the result back in `atomic`.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic |= val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @param val the value to 'or'
* @returns the value of @atomic before the operation, unsigned
*/
function atomic_int_or(atomic: number, val: number): number;
/**
* Sets the value of `atomic` to `newval`.
*
* This call acts as a full compiler and hardware
* memory barrier (after the set).
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @param newval a new value to store
*/
function atomic_int_set(atomic: number, newval: number): void;
/**
* Performs an atomic bitwise 'xor' of the value of `atomic` and `val,`
* storing the result back in `atomic`.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic ^= val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gint or #guint
* @param val the value to 'xor'
* @returns the value of @atomic before the operation, unsigned
*/
function atomic_int_xor(atomic: number, val: number): number;
/**
* Atomically adds `val` to the value of `atomic`.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic += val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
*
* In GLib 2.80, the return type was changed from #gssize to #gintptr to add
* support for platforms with 128-bit pointers. This should not affect existing
* code.
* @param atomic a pointer to a #gpointer-sized value
* @param val the value to add
* @returns the value of @atomic before the add, signed
*/
function atomic_pointer_add(atomic: any, val: number): never;
/**
* Performs an atomic bitwise 'and' of the value of `atomic` and `val,`
* storing the result back in `atomic`.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic &= val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
*
* In GLib 2.80, the return type was changed from #gsize to #guintptr to add
* support for platforms with 128-bit pointers. This should not affect existing
* code.
* @param atomic a pointer to a #gpointer-sized value
* @param val the value to 'and'
* @returns the value of @atomic before the operation, unsigned
*/
function atomic_pointer_and(atomic: any, val: number): never;
/**
* Compares `atomic` to `oldval` and, if equal, sets it to `newval`.
* If `atomic` was not equal to `oldval` then no change occurs.
*
* This compare and exchange is done atomically.
*
* Think of this operation as an atomic version of
* `{ if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gpointer-sized value
* @param oldval the value to compare with
* @param newval the value to conditionally replace with
* @returns %TRUE if the exchange took place
*/
function atomic_pointer_compare_and_exchange(atomic: any, oldval?: any | null, newval?: any | null): boolean;
/**
* Compares `atomic` to `oldval` and, if equal, sets it to `newval`.
* If `atomic` was not equal to `oldval` then no change occurs.
* In any case the value of `atomic` before this operation is stored in `preval`.
*
* This compare and exchange is done atomically.
*
* Think of this operation as an atomic version of
* `{ *preval = *atomic; if (*atomic == oldval) { *atomic = newval; return TRUE; } else return FALSE; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* See also g_atomic_pointer_compare_and_exchange()
* @param atomic a pointer to a #gpointer-sized value
* @param oldval the value to compare with
* @param newval the value to conditionally replace with
* @returns %TRUE if the exchange took place
*/
function atomic_pointer_compare_and_exchange_full(
atomic: any,
oldval: any | null,
newval: any | null,
): [boolean, any];
/**
* Sets the `atomic` to `newval` and returns the old value from `atomic`.
*
* This exchange is done atomically.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic = val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
* @param atomic a pointer to a #gpointer-sized value
* @param newval the value to replace with
* @returns the value of @atomic before the exchange
*/
function atomic_pointer_exchange(atomic?: any | null, newval?: any | null): any | null;
/**
* Gets the current value of `atomic`.
*
* This call acts as a full compiler and hardware
* memory barrier (before the get).
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gpointer-sized value
* @returns the value of the pointer
*/
function atomic_pointer_get(atomic: any): any | null;
/**
* Performs an atomic bitwise 'or' of the value of `atomic` and `val,`
* storing the result back in `atomic`.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic |= val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
*
* In GLib 2.80, the return type was changed from #gsize to #guintptr to add
* support for platforms with 128-bit pointers. This should not affect existing
* code.
* @param atomic a pointer to a #gpointer-sized value
* @param val the value to 'or'
* @returns the value of @atomic before the operation, unsigned
*/
function atomic_pointer_or(atomic: any, val: number): never;
/**
* Sets the value of `atomic` to `newval`.
*
* This call acts as a full compiler and hardware
* memory barrier (after the set).
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param atomic a pointer to a #gpointer-sized value
* @param newval a new value to store
*/
function atomic_pointer_set(atomic: any, newval?: any | null): void;
/**
* Performs an atomic bitwise 'xor' of the value of `atomic` and `val,`
* storing the result back in `atomic`.
*
* Think of this operation as an atomic version of
* `{ tmp = *atomic; *atomic ^= val; return tmp; }`.
*
* This call acts as a full compiler and hardware memory barrier.
*
* While `atomic` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
*
* In GLib 2.80, the return type was changed from #gsize to #guintptr to add
* support for platforms with 128-bit pointers. This should not affect existing
* code.
* @param atomic a pointer to a #gpointer-sized value
* @param val the value to 'xor'
* @returns the value of @atomic before the operation, unsigned
*/
function atomic_pointer_xor(atomic: any, val: number): never;
/**
* Atomically acquires a reference on the data pointed by `mem_block`.
* @param mem_block a pointer to reference counted data
* @returns a pointer to the data, with its reference count increased
*/
function atomic_rc_box_acquire(mem_block: any): any;
/**
* Allocates `block_size` bytes of memory, and adds atomic
* reference counting semantics to it.
*
* The data will be freed when its reference count drops to
* zero.
*
* The allocated data is guaranteed to be suitably aligned for any
* built-in type.
* @param block_size the size of the allocation, must be greater than 0
* @returns a pointer to the allocated memory
*/
function atomic_rc_box_alloc(block_size: number): any;
/**
* Allocates `block_size` bytes of memory, and adds atomic
* reference counting semantics to it.
*
* The contents of the returned data is set to zero.
*
* The data will be freed when its reference count drops to
* zero.
*
* The allocated data is guaranteed to be suitably aligned for any
* built-in type.
* @param block_size the size of the allocation, must be greater than 0
* @returns a pointer to the allocated memory
*/
function atomic_rc_box_alloc0(block_size: number): any;
/**
* Allocates a new block of data with atomic reference counting
* semantics, and copies `block_size` bytes of `mem_block`
* into it.
* @param block_size the number of bytes to copy, must be greater than 0
* @param mem_block the memory to copy
* @returns a pointer to the allocated memory
*/
function atomic_rc_box_dup(block_size: number, mem_block: any): any;
/**
* Retrieves the size of the reference counted data pointed by `mem_block`.
* @param mem_block a pointer to reference counted data
* @returns the size of the data, in bytes
*/
function atomic_rc_box_get_size(mem_block: any): number;
/**
* Atomically releases a reference on the data pointed by `mem_block`.
*
* If the reference was the last one, it will free the
* resources allocated for `mem_block`.
* @param mem_block a pointer to reference counted data
*/
function atomic_rc_box_release(mem_block: any): void;
/**
* Atomically releases a reference on the data pointed by `mem_block`.
*
* If the reference was the last one, it will call `clear_func`
* to clear the contents of `mem_block,` and then will free the
* resources allocated for `mem_block`.
*
* Note that implementing weak references via `clear_func` is not thread-safe:
* clearing a pointer to the memory from the callback can race with another
* thread trying to access it as `mem_block` already has a reference count of 0
* when the callback is called and will be freed.
* @param mem_block a pointer to reference counted data
*/
function atomic_rc_box_release_full(mem_block: any): void;
/**
* Atomically compares the current value of `arc` with `val`.
* @param arc the address of an atomic reference count variable
* @param val the value to compare
* @returns %TRUE if the reference count is the same as the given value
*/
function atomic_ref_count_compare(arc: number, val: number): boolean;
/**
* Atomically decreases the reference count.
*
* If %TRUE is returned, the reference count reached 0. After this point, `arc`
* is an undefined state and must be reinitialized with
* g_atomic_ref_count_init() to be used again.
* @param arc the address of an atomic reference count variable
* @returns %TRUE if the reference count reached 0, and %FALSE otherwise
*/
function atomic_ref_count_dec(arc: number): boolean;
/**
* Atomically increases the reference count.
* @param arc the address of an atomic reference count variable
*/
function atomic_ref_count_inc(arc: number): void;
/**
* Initializes a reference count variable to 1.
* @param arc the address of an atomic reference count variable
*/
function atomic_ref_count_init(arc: number): void;
/**
* Decode a sequence of Base-64 encoded text into binary data. Note
* that the returned binary data is not necessarily zero-terminated,
* so it should not be used as a character string.
* @param text zero-terminated string with base64 text to decode
* @returns newly allocated buffer containing the binary data that @text represents. The returned buffer must be freed with g_free().
*/
function base64_decode(text: string): Uint8Array;
/**
* Decode a sequence of Base-64 encoded text into binary data
* by overwriting the input data.
* @param text zero-terminated string with base64 text to decode
* @returns The binary data that @text responds. This pointer is the same as the input @text.
*/
function base64_decode_inplace(text: Uint8Array | string): [number, Uint8Array];
/**
* Encode a sequence of binary data into its Base-64 stringified
* representation.
* @param data the binary data to encode
* @returns a newly allocated, zero-terminated Base-64 encoded string representing @data. The returned string must be freed with g_free().
*/
function base64_encode(data?: Uint8Array | null): string;
/**
* Flush the status from a sequence of calls to g_base64_encode_step().
*
* The output buffer must be large enough to fit all the data that will
* be written to it. It will need up to 4 bytes, or up to 5 bytes if
* line-breaking is enabled.
*
* The `out` array will not be automatically nul-terminated.
* @param break_lines whether to break long lines
* @param state Saved state from g_base64_encode_step()
* @param save Saved state from g_base64_encode_step()
* @returns The number of bytes of output that was written
*/
function base64_encode_close(
break_lines: boolean,
state: number,
save: number,
): [number, Uint8Array, number, number];
/**
* Incrementally encode a sequence of binary data into its Base-64 stringified
* representation. By calling this function multiple times you can convert
* data in chunks to avoid having to have the full encoded data in memory.
*
* When all of the data has been converted you must call
* g_base64_encode_close() to flush the saved state.
*
* The output buffer must be large enough to fit all the data that will
* be written to it. Due to the way base64 encodes you will need
* at least: (`len` / 3 + 1) * 4 + 4 bytes (+ 4 may be needed in case of
* non-zero state). If you enable line-breaking you will need at least:
* ((`len` / 3 + 1) * 4 + 4) / 76 + 1 bytes of extra space.
*
* `break_lines` is typically used when putting base64-encoded data in emails.
* It breaks the lines at 76 columns instead of putting all of the text on
* the same line. This avoids problems with long lines in the email system.
* Note however that it breaks the lines with `LF` characters, not
* `CR LF` sequences, so the result cannot be passed directly to SMTP
* or certain other protocols.
* @param _in the binary data to encode
* @param break_lines whether to break long lines
* @param state Saved state between steps, initialize to 0
* @param save Saved state between steps, initialize to 0
* @returns The number of bytes of output that was written
*/
function base64_encode_step(
_in: Uint8Array | string,
break_lines: boolean,
state: number,
save: number,
): [number, Uint8Array, number, number];
/**
* Gets the name of the file without any leading directory
* components. It returns a pointer into the given file name
* string.
* @param file_name the name of the file
* @returns the name of the file without any leading directory components
*/
function basename(file_name: string): string;
/**
* Sets the indicated `lock_bit` in `address`. If the bit is already
* set, this call will block until g_bit_unlock() unsets the
* corresponding bit.
*
* Attempting to lock on two different bits within the same integer is
* not supported and will very probably cause deadlocks.
*
* The value of the bit that is set is (1u << `bit)`. If `bit` is not
* between 0 and 31 then the result is undefined.
*
* This function accesses `address` atomically. All other accesses to
* `address` must be atomic in order for this function to work
* reliably. While `address` has a `volatile` qualifier, this is a historical
* artifact and the argument passed to it should not be `volatile`.
* @param address a pointer to an integer
* @param lock_bit a bit value between 0 and 31
*/
function bit_lock(address: number, lock_bit: number): void;
/**
* Find the position of the first bit set in `mask,` searching
* from (but not including) `nth_bit` upwards. Bits are numbered
* from 0 (least significant) to sizeof(#gulong) * 8 - 1 (31 or 63,
* usually). To start searching from the 0th bit, set `nth_bit` to -1.
* @param mask a #gulong containing flags
* @param nth_bit the index of the bit to start the search from
* @returns the index of the first bit set which is higher than @nth_bit, or -1 if no higher bits are set
*/
function bit_nth_lsf(mask: number, nth_bit: number): number;
/**
* Find the position of the first bit set in `mask,` searching
* from (but not including) `nth_bit` downwards. Bits are numbered
* from 0 (least significant) to sizeof(#gulong) * 8 - 1 (31 or 63,
* usually). To start searching from the last bit, set `nth_bit` to
* -1 or GLIB_SIZEOF_LONG * 8.
* @param mask a #gulong containing flags
* @param nth_bit the index of the bit to start the search from
* @returns the index of the first bit set which is lower than @nth_bit, or -1 if no lower bits are set
*/
function bit_nth_msf(mask: number, nth_bit: number): number;
/**
* Gets the number of bits used to hold `number,`
* e.g. if `number` is 4, 3 bits are needed.
* @param number a #guint
* @returns the number of bits used to hold @number
*/
function bit_storage(number: number): number;
/**
* Sets the indicated `lock_bit` in `address,` returning %TRUE if
* successful. If the bit is already set, returns %FALSE immediately.
*
* Attempting to lock on two different bits within the same integer is
* not supported.
*
* The value of the bit that is set is (1u << `bit)`. If `bit` is not
* between 0 and 31 then the result is undefined.
*
* This function accesses `address` atomically. All other accesses to
* `address` must be atomic in order for this function to work
* reliably. While `address` has a `volatile` qualifier, this is a historical
* artifact and the argument passed to it should not be `volatile`.
* @param address a pointer to an integer
* @param lock_bit a bit value between 0 and 31
* @returns %TRUE if the lock was acquired
*/
function bit_trylock(address: number, lock_bit: number): boolean;
/**
* Clears the indicated `lock_bit` in `address`. If another thread is
* currently blocked in g_bit_lock() on this same bit then it will be
* woken up.
*
* This function accesses `address` atomically. All other accesses to
* `address` must be atomic in order for this function to work
* reliably. While `address` has a `volatile` qualifier, this is a historical
* artifact and the argument passed to it should not be `volatile`.
* @param address a pointer to an integer
* @param lock_bit a bit value between 0 and 31
*/
function bit_unlock(address: number, lock_bit: number): void;
function blow_chunks(): void;
function bookmark_file_error_quark(): Quark;
/**
* Creates a filename from a vector of elements using the correct
* separator for the current platform.
*
* This function behaves exactly like g_build_filename(), but takes the path
* elements as a string array, instead of varargs. This function is mainly
* meant for language bindings.
*
* If you are building a path programmatically you may want to use
* #GPathBuf instead.
* @param args %NULL-terminated array of strings containing the path elements.
* @returns the newly allocated path
*/
function build_filenamev(args: string[]): string;
/**
* Behaves exactly like g_build_path(), but takes the path elements
* as a string array, instead of variadic arguments.
*
* This function is mainly meant for language bindings.
* @param separator a string used to separator the elements of the path.
* @param args %NULL-terminated array of strings containing the path elements.
* @returns a newly-allocated string that must be freed with g_free().
*/
function build_pathv(separator: string, args: string[]): string;
/**
* Adds the given bytes to the end of the #GByteArray.
* The array will grow in size automatically if necessary.
* @param array a #GByteArray
* @param data the byte data to be added
* @param len the number of bytes to add
* @returns the #GByteArray
*/
function byte_array_append(array: Uint8Array | string, data: number, len: number): Uint8Array;
/**
* Frees the memory allocated by the #GByteArray. If `free_segment` is
* %TRUE it frees the actual byte data. If the reference count of
* `array` is greater than one, the #GByteArray wrapper is preserved but
* the size of `array` will be set to zero.
* @param array a #GByteArray
* @param free_segment if %TRUE the actual byte data is freed as well
* @returns the element data if @free_segment is %FALSE, otherwise %NULL. The element data should be freed using g_free().
*/
function byte_array_free(array: Uint8Array | string, free_segment: boolean): number;
/**
* Transfers the data from the #GByteArray into a new immutable #GBytes.
*
* The #GByteArray is freed unless the reference count of `array` is greater
* than one, the #GByteArray wrapper is preserved but the size of `array`
* will be set to zero.
*
* This is identical to using g_bytes_new_take() and g_byte_array_free()
* together.
* @param array a #GByteArray
* @returns a new immutable #GBytes representing same byte data that was in the array
*/
function byte_array_free_to_bytes(array: Uint8Array | string): Bytes;
/**
* Creates a new #GByteArray with a reference count of 1.
* @returns the new #GByteArray
*/
function byte_array_new(): Uint8Array;
/**
* Creates a byte array containing the `data`.
* After this call, `data` belongs to the #GByteArray and may no longer be
* modified by the caller. The memory of `data` has to be dynamically
* allocated and will eventually be freed with g_free().
*
* Do not use it if `len` is greater than %G_MAXUINT. #GByteArray
* stores the length of its data in #guint, which may be shorter than
* #gsize.
* @param data byte data for the array
* @returns a new #GByteArray
*/
function byte_array_new_take(data: Uint8Array | string): Uint8Array;
/**
* Adds the given data to the start of the #GByteArray.
* The array will grow in size automatically if necessary.
* @param array a #GByteArray
* @param data the byte data to be added
* @param len the number of bytes to add
* @returns the #GByteArray
*/
function byte_array_prepend(array: Uint8Array | string, data: number, len: number): Uint8Array;
/**
* Atomically increments the reference count of `array` by one.
* This function is thread-safe and may be called from any thread.
* @param array A #GByteArray
* @returns The passed in #GByteArray
*/
function byte_array_ref(array: Uint8Array | string): Uint8Array;
/**
* Removes the byte at the given index from a #GByteArray.
* The following bytes are moved down one place.
* @param array a #GByteArray
* @param index_ the index of the byte to remove
* @returns the #GByteArray
*/
function byte_array_remove_index(array: Uint8Array | string, index_: number): Uint8Array;
/**
* Removes the byte at the given index from a #GByteArray. The last
* element in the array is used to fill in the space, so this function
* does not preserve the order of the #GByteArray. But it is faster
* than g_byte_array_remove_index().
* @param array a #GByteArray
* @param index_ the index of the byte to remove
* @returns the #GByteArray
*/
function byte_array_remove_index_fast(array: Uint8Array | string, index_: number): Uint8Array;
/**
* Removes the given number of bytes starting at the given index from a
* #GByteArray. The following elements are moved to close the gap.
* @param array a @GByteArray
* @param index_ the index of the first byte to remove
* @param length the number of bytes to remove
* @returns the #GByteArray
*/
function byte_array_remove_range(array: Uint8Array | string, index_: number, length: number): Uint8Array;
/**
* Sets the size of the #GByteArray, expanding it if necessary.
* @param array a #GByteArray
* @param length the new size of the #GByteArray
* @returns the #GByteArray
*/
function byte_array_set_size(array: Uint8Array | string, length: number): Uint8Array;
/**
* Creates a new #GByteArray with `reserved_size` bytes preallocated.
* This avoids frequent reallocation, if you are going to add many
* bytes to the array. Note however that the size of the array is still
* 0.
* @param reserved_size number of bytes preallocated
* @returns the new #GByteArray
*/
function byte_array_sized_new(reserved_size: number): Uint8Array;
/**
* Sorts a byte array, using `compare_func` which should be a
* qsort()-style comparison function (returns less than zero for first
* arg is less than second arg, zero for equal, greater than zero if
* first arg is greater than second arg).
*
* If two array elements compare equal, their order in the sorted array
* is undefined. If you want equal elements to keep their order (i.e.
* you want a stable sort) you can write a comparison function that,
* if two elements would otherwise compare equal, compares them by
* their addresses.
* @param array a #GByteArray
* @param compare_func comparison function
*/
function byte_array_sort(array: Uint8Array | string, compare_func: CompareFunc): void;
/**
* Like g_byte_array_sort(), but the comparison function takes an extra
* user data argument.
* @param array a #GByteArray
* @param compare_func comparison function
*/
function byte_array_sort_with_data(array: Uint8Array | string, compare_func: CompareDataFunc): void;
/**
* Frees the data in the array and resets the size to zero, while
* the underlying array is preserved for use elsewhere and returned
* to the caller.
* @param array a #GByteArray.
* @returns the element data, which should be freed using g_free().
*/
function byte_array_steal(array: Uint8Array | string): [number, number];
/**
* Atomically decrements the reference count of `array` by one. If the
* reference count drops to 0, all memory allocated by the array is
* released. This function is thread-safe and may be called from any
* thread.
* @param array A #GByteArray
*/
function byte_array_unref(array: Uint8Array | string): void;
/**
* Gets the canonical file name from `filename`. All triple slashes are turned into
* single slashes, and all `..` and `.`s resolved against `relative_to`.
*
* Symlinks are not followed, and the returned path is guaranteed to be absolute.
*
* If `filename` is an absolute path, `relative_to` is ignored. Otherwise,
* `relative_to` will be prepended to `filename` to make it absolute. `relative_to`
* must be an absolute path, or %NULL. If `relative_to` is %NULL, it'll fallback
* to g_get_current_dir().
*
* This function never fails, and will canonicalize file paths even if they don't
* exist.
*
* No file system I/O is done.
* @param filename the name of the file
* @param relative_to the relative directory, or %NULL to use the current working directory
* @returns a newly allocated string with the canonical file path
*/
function canonicalize_filename(filename: string, relative_to?: string | null): string;
/**
* A wrapper for the POSIX chdir() function. The function changes the
* current directory of the process to `path`.
*
* See your C library manual for more details about chdir().
* @param path a pathname in the GLib file name encoding (UTF-8 on Windows)
* @returns 0 on success, -1 if an error occurred.
*/
function chdir(path: string): number;
/**
* Checks that the GLib library in use is compatible with the
* given version.
*
* Generally you would pass in the constants %GLIB_MAJOR_VERSION,
* %GLIB_MINOR_VERSION, %GLIB_MICRO_VERSION as the three arguments
* to this function; that produces a check that the library in use
* is compatible with the version of GLib the application or module
* was compiled against.
*
* Compatibility is defined by two things: first the version
* of the running library is newer than the version
* ``required_major`.required_minor.`required_micro``. Second
* the running library must be binary compatible with the
* version ``required_major`.`required_minor`.`required_micro``
* (same major version.)
* @param required_major the required major version
* @param required_minor the required minor version
* @param required_micro the required micro version
* @returns %NULL if the GLib library is compatible with the given version, or a string describing the version mismatch. The returned string is owned by GLib and must not be modified or freed.
*/
function check_version(required_major: number, required_minor: number, required_micro: number): string | null;
/**
* Gets the length in bytes of digests of type `checksum_type`
* @param checksum_type a #GChecksumType
* @returns the checksum length, or -1 if @checksum_type is not supported.
*/
function checksum_type_get_length(checksum_type: ChecksumType | null): number;
/**
* Sets a function to be called when the child indicated by `pid`
* exits, at the priority `priority`.
*
* If you obtain `pid` from [func`GLib`.spawn_async] or
* [func`GLib`.spawn_async_with_pipes] you will need to pass
* %G_SPAWN_DO_NOT_REAP_CHILD as flag to the spawn function for the child
* watching to work.
*
* In many programs, you will want to call [func`GLib`.spawn_check_wait_status]
* in the callback to determine whether or not the child exited
* successfully.
*
* Also, note that on platforms where #GPid must be explicitly closed
* (see [func`GLib`.spawn_close_pid]) `pid` must not be closed while the source
* is still active. Typically, you should invoke [func`GLib`.spawn_close_pid]
* in the callback function for the source.
*
* GLib supports only a single callback per process id.
* On POSIX platforms, the same restrictions mentioned for
* [func`GLib`.child_watch_source_new] apply to this function.
*
* This internally creates a main loop source using
* [func`GLib`.child_watch_source_new] and attaches it to the main loop context
* using [method`GLib`.Source.attach]. You can do these steps manually if you
* need greater control.
* @param priority the priority of the idle source. Typically this will be in the range between [const@GLib.PRIORITY_DEFAULT_IDLE] and [const@GLib.PRIORITY_HIGH_IDLE].
* @param pid process to watch. On POSIX the positive pid of a child process. On Windows a handle for a process (which doesn't have to be a child).
* @param _function function to call
* @param notify function to call when the idle is removed, or %NULL
* @returns the ID (greater than 0) of the event source.
*/
function child_watch_add(
priority: number,
pid: Pid,
_function: ChildWatchFunc,
notify?: DestroyNotify | null,
): number;
/**
* Creates a new child_watch source.
*
* The source will not initially be associated with any
* [struct`GLib`.MainContext] and must be added to one with
* [method`GLib`.Source.attach] before it will be executed.
*
* Note that child watch sources can only be used in conjunction with
* `g_spawn...` when the %G_SPAWN_DO_NOT_REAP_CHILD flag is used.
*
* Note that on platforms where #GPid must be explicitly closed
* (see [func`GLib`.spawn_close_pid]) `pid` must not be closed while the
* source is still active. Typically, you will want to call
* [func`GLib`.spawn_close_pid] in the callback function for the source.
*
* On POSIX platforms, the following restrictions apply to this API
* due to limitations in POSIX process interfaces:
*
* * `pid` must be a child of this process
* * `pid` must be positive
* * the application must not call `waitpid` with a non-positive
* first argument, for instance in another thread
* * the application must not wait for `pid` to exit by any other
* mechanism, including `waitpid(pid, ...)` or a second child-watch
* source for the same `pid`
* * the application must not ignore `SIGCHLD`
* * Before 2.78, the application could not send a signal (`kill()`) to the
* watched `pid` in a race free manner. Since 2.78, you can do that while the
* associated [struct`GLib`.MainContext] is acquired.
* * Before 2.78, even after destroying the [struct`GLib`.Source], you could not
* be sure that `pid` wasn't already reaped. Hence, it was also not
* safe to `kill()` or `waitpid()` on the process ID after the child watch
* source was gone. Destroying the source before it fired made it
* impossible to reliably reap the process.
*
* If any of those conditions are not met, this and related APIs will
* not work correctly. This can often be diagnosed via a GLib warning
* stating that `ECHILD` was received by `waitpid`.
*
* Calling `waitpid` for specific processes other than `pid` remains a
* valid thing to do.
* @param pid process to watch. On POSIX the positive pid of a child process. On Windows a handle for a process (which doesn't have to be a child).
* @returns the newly-created child watch source
*/
function child_watch_source_new(pid: Pid): Source;
/**
* A wrapper for the POSIX chmod() function. The chmod() function is
* used to set the permissions of a file system object.
*
* On Windows the file protection mechanism is not at all POSIX-like,
* and the underlying chmod() function in the C library just sets or
* clears the FAT-style READONLY attribute. It does not touch any
* ACL. Software that needs to manage file permissions on Windows
* exactly should use the Win32 API.
*
* See your C library manual for more details about chmod().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param mode as in chmod()
* @returns 0 if the operation succeeded, -1 on error
*/
function chmod(filename: string, mode: number): number;
/**
* If `err` or `*err` is %NULL, does nothing. Otherwise,
* calls g_error_free() on `*err` and sets `*err` to %NULL.
*/
function clear_error(): void;
/**
* This wraps the close() call. In case of error, %errno will be
* preserved, but the error will also be stored as a #GError in `error`.
* In case of success, %errno is undefined.
*
* Besides using #GError, there is another major reason to prefer this
* function over the call provided by the system; on Unix, it will
* attempt to correctly handle %EINTR, which has platform-specific
* semantics.
*
* It is a bug to call this function with an invalid file descriptor.
*
* On POSIX platforms since GLib 2.76, this function is async-signal safe
* if (and only if) `error` is %NULL and `fd` is a valid open file descriptor.
* This makes it safe to call from a signal handler or a #GSpawnChildSetupFunc
* under those conditions.
* See [`signal(7)`](man:signal(7)) and
* [`signal-safety(7)`](man:signal-safety(7)) for more details.
* @param fd A file descriptor
* @returns %TRUE on success, %FALSE if there was an error.
*/
function close(fd: number): boolean;
/**
* Close every file descriptor equal to or greater than `lowfd`.
*
* Typically `lowfd` will be 3, to leave standard input, standard output
* and standard error open.
*
* This is the same as Linux `close_range (lowfd, ~0U, 0)`,
* but portable to other OSs and to older versions of Linux.
* Equivalently, it is the same as BSD `closefrom (lowfd)`, but portable,
* and async-signal-safe on all OSs.
*
* This function is async-signal safe, making it safe to call from a
* signal handler or a [callback`GLib`.SpawnChildSetupFunc], as long as `lowfd` is
* non-negative.
* See [`signal(7)`](man:signal(7)) and
* [`signal-safety(7)`](man:signal-safety(7)) for more details.
* @param lowfd Minimum fd to close, which must be non-negative
* @returns 0 on success, -1 with errno set on error
*/
function closefrom(lowfd: number): number;
/**
* Computes the checksum for a binary `data`. This is a
* convenience wrapper for g_checksum_new(), g_checksum_get_string()
* and g_checksum_free().
*
* The hexadecimal string returned will be in lower case.
* @param checksum_type a #GChecksumType
* @param data binary blob to compute the digest of
* @returns the digest of the binary data as a string in hexadecimal, or %NULL if g_checksum_new() fails for @checksum_type. The returned string should be freed with g_free() when done using it.
*/
function compute_checksum_for_bytes(
checksum_type: ChecksumType | null,
data: Bytes | Uint8Array,
): string | null;
/**
* Computes the checksum for a binary `data` of `length`. This is a
* convenience wrapper for g_checksum_new(), g_checksum_get_string()
* and g_checksum_free().
*
* The hexadecimal string returned will be in lower case.
* @param checksum_type a #GChecksumType
* @param data binary blob to compute the digest of
* @returns the digest of the binary data as a string in hexadecimal, or %NULL if g_checksum_new() fails for @checksum_type. The returned string should be freed with g_free() when done using it.
*/
function compute_checksum_for_data(
checksum_type: ChecksumType | null,
data: Uint8Array | string,
): string | null;
/**
* Computes the checksum of a string.
*
* The hexadecimal string returned will be in lower case.
* @param checksum_type a #GChecksumType
* @param str the string to compute the checksum of
* @param length the length of the string, or -1 if the string is null-terminated.
* @returns the checksum as a hexadecimal string, or %NULL if g_checksum_new() fails for @checksum_type. The returned string should be freed with g_free() when done using it.
*/
function compute_checksum_for_string(
checksum_type: ChecksumType | null,
str: string,
length: number,
): string | null;
/**
* Computes the HMAC for a binary `data`. This is a
* convenience wrapper for g_hmac_new(), g_hmac_get_string()
* and g_hmac_unref().
*
* The hexadecimal string returned will be in lower case.
* @param digest_type a #GChecksumType to use for the HMAC
* @param key the key to use in the HMAC
* @param data binary blob to compute the HMAC of
* @returns the HMAC of the binary data as a string in hexadecimal. The returned string should be freed with g_free() when done using it.
*/
function compute_hmac_for_bytes(
digest_type: ChecksumType | null,
key: Bytes | Uint8Array,
data: Bytes | Uint8Array,
): string;
/**
* Computes the HMAC for a binary `data` of `length`. This is a
* convenience wrapper for g_hmac_new(), g_hmac_get_string()
* and g_hmac_unref().
*
* The hexadecimal string returned will be in lower case.
* @param digest_type a #GChecksumType to use for the HMAC
* @param key the key to use in the HMAC
* @param data binary blob to compute the HMAC of
* @returns the HMAC of the binary data as a string in hexadecimal. The returned string should be freed with g_free() when done using it.
*/
function compute_hmac_for_data(
digest_type: ChecksumType | null,
key: Uint8Array | string,
data: Uint8Array | string,
): string;
/**
* Computes the HMAC for a string.
*
* The hexadecimal string returned will be in lower case.
* @param digest_type a #GChecksumType to use for the HMAC
* @param key the key to use in the HMAC
* @param str the string to compute the HMAC for
* @param length the length of the string, or -1 if the string is nul-terminated
* @returns the HMAC as a hexadecimal string. The returned string should be freed with g_free() when done using it.
*/
function compute_hmac_for_string(
digest_type: ChecksumType | null,
key: Uint8Array | string,
str: string,
length: number,
): string;
/**
* Converts a string from one character set to another.
*
* Note that you should use g_iconv() for streaming conversions.
* Despite the fact that `bytes_read` can return information about partial
* characters, the g_convert_... functions are not generally suitable
* for streaming. If the underlying converter maintains internal state,
* then this won't be preserved across successive calls to g_convert(),
* g_convert_with_iconv() or g_convert_with_fallback(). (An example of
* this is the GNU C converter for CP1255 which does not emit a base
* character until it knows that the next character is not a mark that
* could combine with the base character.)
*
* Using extensions such as "//TRANSLIT" may not work (or may not work
* well) on many platforms. Consider using g_str_to_ascii() instead.
* @param str the string to convert.
* @param to_codeset name of character set into which to convert @str
* @param from_codeset character set of @str.
* @returns If the conversion was successful, a newly allocated buffer containing the converted string, which must be freed with g_free(). Otherwise %NULL and @error will be set.
*/
function convert(str: Uint8Array | string, to_codeset: string, from_codeset: string): [Uint8Array, number];
function convert_error_quark(): Quark;
/**
* Converts a string from one character set to another, possibly
* including fallback sequences for characters not representable
* in the output. Note that it is not guaranteed that the specification
* for the fallback sequences in `fallback` will be honored. Some
* systems may do an approximate conversion from `from_codeset`
* to `to_codeset` in their iconv() functions,
* in which case GLib will simply return that approximate conversion.
*
* Note that you should use g_iconv() for streaming conversions.
* Despite the fact that `bytes_read` can return information about partial
* characters, the g_convert_... functions are not generally suitable
* for streaming. If the underlying converter maintains internal state,
* then this won't be preserved across successive calls to g_convert(),
* g_convert_with_iconv() or g_convert_with_fallback(). (An example of
* this is the GNU C converter for CP1255 which does not emit a base
* character until it knows that the next character is not a mark that
* could combine with the base character.)
* @param str the string to convert.
* @param to_codeset name of character set into which to convert @str
* @param from_codeset character set of @str.
* @param fallback UTF-8 string to use in place of characters not present in the target encoding. (The string must be representable in the target encoding). If %NULL, characters not in the target encoding will be represented as Unicode escapes \uxxxx or \Uxxxxyyyy.
* @returns If the conversion was successful, a newly allocated buffer containing the converted string, which must be freed with g_free(). Otherwise %NULL and @error will be set.
*/
function convert_with_fallback(
str: Uint8Array | string,
to_codeset: string,
from_codeset: string,
fallback: string,
): [Uint8Array, number];
/**
* A wrapper for the POSIX creat() function. The creat() function is
* used to convert a pathname into a file descriptor, creating a file
* if necessary.
*
* On POSIX systems file descriptors are implemented by the operating
* system. On Windows, it's the C library that implements creat() and
* file descriptors. The actual Windows API for opening files is
* different, see MSDN documentation for CreateFile(). The Win32 API
* uses file handles, which are more randomish integers, not small
* integers like file descriptors.
*
* Because file descriptors are specific to the C library on Windows,
* the file descriptor returned by this function makes sense only to
* functions in the same C library. Thus if the GLib-using code uses a
* different C library than GLib does, the file descriptor returned by
* this function cannot be passed to C library functions like write()
* or read().
*
* See your C library manual for more details about creat().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param mode as in creat()
* @returns a new file descriptor, or -1 if an error occurred. The return value can be used exactly like the return value from creat().
*/
function creat(filename: string, mode: number): number;
/**
* Calls the given function for each data element of the datalist. The
* function is called with each data element's #GQuark id and data,
* together with the given `user_data` parameter. Note that this
* function is NOT thread-safe. So unless `datalist` can be protected
* from any modifications during invocation of this function, it should
* not be called.
*
* `func` can make changes to `datalist,` but the iteration will not
* reflect changes made during the g_datalist_foreach() call, other
* than skipping over elements that are removed.
* @param datalist a datalist.
* @param func the function to call for each data element.
*/
function datalist_foreach(datalist: Data, func: DataForeachFunc): void;
/**
* Gets a data element, using its string identifier. This is slower than
* g_datalist_id_get_data() because it compares strings.
* @param datalist a datalist.
* @param key the string identifying a data element.
* @returns the data element, or %NULL if it is not found.
*/
function datalist_get_data(datalist: Data, key: string): any | null;
/**
* Gets flags values packed in together with the datalist.
* See g_datalist_set_flags().
* @param datalist pointer to the location that holds a list
* @returns the flags of the datalist
*/
function datalist_get_flags(datalist: Data): number;
/**
* Retrieves the data element corresponding to `key_id`.
* @param datalist a datalist.
* @param key_id the #GQuark identifying a data element.
* @returns the data element, or %NULL if it is not found.
*/
function datalist_id_get_data(datalist: Data, key_id: Quark): any | null;
/**
* Removes multiple keys from a datalist.
*
* This is more efficient than calling g_datalist_id_remove_data()
* multiple times in a row.
*
* Before 2.80, `n_keys` had to be not larger than 16.
* Since 2.84, performance is improved for larger number of keys.
* @param datalist a datalist
* @param keys keys to remove
*/
function datalist_id_remove_multiple(datalist: Data, keys: Quark[]): void;
/**
* Turns on flag values for a data list. This function is used
* to keep a small number of boolean flags in an object with
* a data list without using any additional space. It is
* not generally useful except in circumstances where space
* is very tight. (It is used in the base #GObject type, for
* example.)
* @param datalist pointer to the location that holds a list
* @param flags the flags to turn on. The values of the flags are restricted by %G_DATALIST_FLAGS_MASK (currently 3; giving two possible boolean flags). A value for @flags that doesn't fit within the mask is an error.
*/
function datalist_set_flags(datalist: Data, flags: number): void;
/**
* Turns off flag values for a data list. See g_datalist_unset_flags()
* @param datalist pointer to the location that holds a list
* @param flags the flags to turn off. The values of the flags are restricted by %G_DATALIST_FLAGS_MASK (currently 3: giving two possible boolean flags). A value for @flags that doesn't fit within the mask is an error.
*/
function datalist_unset_flags(datalist: Data, flags: number): void;
/**
* Destroys the dataset, freeing all memory allocated, and calling any
* destroy functions set for data elements.
* @param dataset_location the location identifying the dataset.
*/
function dataset_destroy(dataset_location: any): void;
/**
* Calls the given function for each data element which is associated
* with the given location. Note that this function is NOT thread-safe.
* So unless `dataset_location` can be protected from any modifications
* during invocation of this function, it should not be called.
*
* `func` can make changes to the dataset, but the iteration will not
* reflect changes made during the g_dataset_foreach() call, other
* than skipping over elements that are removed.
* @param dataset_location the location identifying the dataset.
* @param func the function to call for each data element.
*/
function dataset_foreach(dataset_location: any, func: DataForeachFunc): void;
/**
* Gets the data element corresponding to a #GQuark.
* @param dataset_location the location identifying the dataset.
* @param key_id the #GQuark id to identify the data element.
* @returns the data element corresponding to the #GQuark, or %NULL if it is not found.
*/
function dataset_id_get_data(dataset_location: any, key_id: Quark): any | null;
/**
* Returns the number of days in a month, taking leap
* years into account.
* @param month month
* @param year year
* @returns number of days in @month during the @year
*/
function date_get_days_in_month(month: DateMonth | null, year: DateYear): number;
/**
* Returns the number of weeks in the year, where weeks
* are taken to start on Monday. Will be 52 or 53. The
* date must be valid. (Years always have 52 7-day periods,
* plus 1 or 2 extra days depending on whether it's a leap
* year. This function is basically telling you how many
* Mondays are in the year, i.e. there are 53 Mondays if
* one of the extra days happens to be a Monday.)
* @param year a year
* @returns number of Mondays in the year
*/
function date_get_monday_weeks_in_year(year: DateYear): number;
/**
* Returns the number of weeks in the year, where weeks
* are taken to start on Sunday. Will be 52 or 53. The
* date must be valid. (Years always have 52 7-day periods,
* plus 1 or 2 extra days depending on whether it's a leap
* year. This function is basically telling you how many
* Sundays are in the year, i.e. there are 53 Sundays if
* one of the extra days happens to be a Sunday.)
* @param year year to count weeks in
* @returns the number of weeks in @year
*/
function date_get_sunday_weeks_in_year(year: DateYear): number;
/**
* Returns %TRUE if the year is a leap year.
*
* For the purposes of this function, leap year is every year
* divisible by 4 unless that year is divisible by 100. If it
* is divisible by 100 it would be a leap year only if that year
* is also divisible by 400.
* @param year year to check
* @returns %TRUE if the year is a leap year
*/
function date_is_leap_year(year: DateYear): boolean;
/**
* Generates a printed representation of the date, in a
* [locale](running.html#locale)-specific way.
* Works just like the platform's C library strftime() function,
* but only accepts date-related formats; time-related formats
* give undefined results. Date must be valid. Unlike strftime()
* (which uses the locale encoding), works on a UTF-8 format
* string and stores a UTF-8 result.
*
* This function does not provide any conversion specifiers in
* addition to those implemented by the platform's C library.
* For example, don't expect that using g_date_strftime() would
* make the \%F provided by the C99 strftime() work on Windows
* where the C library only complies to C89.
* @param s destination buffer
* @param slen buffer size
* @param format format string
* @param date valid #GDate
* @returns number of characters written to the buffer, or `0` if the buffer was too small
*/
function date_strftime(s: string, slen: number, format: string, date: Date): number;
/**
* Returns %TRUE if the day of the month is valid (a day is valid if it's
* between 1 and 31 inclusive).
* @param day day to check
* @returns %TRUE if the day is valid
*/
function date_valid_day(day: DateDay): boolean;
/**
* Returns %TRUE if the day-month-year triplet forms a valid, existing day
* in the range of days #GDate understands (Year 1 or later, no more than
* a few thousand years in the future).
* @param day day
* @param month month
* @param year year
* @returns %TRUE if the date is a valid one
*/
function date_valid_dmy(day: DateDay, month: DateMonth | null, year: DateYear): boolean;
/**
* Returns %TRUE if the Julian day is valid. Anything greater than zero
* is basically a valid Julian, though there is a 32-bit limit.
* @param julian_date Julian day to check
* @returns %TRUE if the Julian day is valid
*/
function date_valid_julian(julian_date: number): boolean;
/**
* Returns %TRUE if the month value is valid. The 12 #GDateMonth
* enumeration values are the only valid months.
* @param month month
* @returns %TRUE if the month is valid
*/
function date_valid_month(month: DateMonth | null): boolean;
/**
* Returns %TRUE if the weekday is valid. The seven #GDateWeekday enumeration
* values are the only valid weekdays.
* @param weekday weekday
* @returns %TRUE if the weekday is valid
*/
function date_valid_weekday(weekday: DateWeekday | null): boolean;
/**
* Returns %TRUE if the year is valid. Any year greater than 0 is valid,
* though there is a 16-bit limit to what #GDate will understand.
* @param year year
* @returns %TRUE if the year is valid
*/
function date_valid_year(year: DateYear): boolean;
/**
* This is a variant of g_dgettext() that allows specifying a locale
* category instead of always using `LC_MESSAGES`. See g_dgettext() for
* more information about how this functions differs from calling
* dcgettext() directly.
* @param domain the translation domain to use, or %NULL to use the domain set with textdomain()
* @param msgid message to translate
* @param category a locale category
* @returns the translated string for the given locale category
*/
function dcgettext(domain: string | null, msgid: string, category: number): string;
/**
* This function is a wrapper of dgettext() which does not translate
* the message if the default domain as set with textdomain() has no
* translations for the current locale.
*
* The advantage of using this function over dgettext() proper is that
* libraries using this function (like GTK) will not use translations
* if the application using the library does not have translations for
* the current locale. This results in a consistent English-only
* interface instead of one having partial translations. For this
* feature to work, the call to textdomain() and setlocale() should
* precede any g_dgettext() invocations. For GTK, it means calling
* textdomain() before gtk_init or its variants.
*
* This function disables translations if and only if upon its first
* call all the following conditions hold:
*
* - `domain` is not %NULL
*
* - textdomain() has been called to set a default text domain
*
* - there is no translations available for the default text domain
* and the current locale
*
* - current locale is not "C" or any English locales (those
* starting with "en_")
*
* Note that this behavior may not be desired for example if an application
* has its untranslated messages in a language other than English. In those
* cases the application should call textdomain() after initializing GTK.
*
* Applications should normally not use this function directly,
* but use the _() macro for translations.
* @param domain the translation domain to use, or %NULL to use the domain set with textdomain()
* @param msgid message to translate
* @returns The translated string
*/
function dgettext(domain: string | null, msgid: string): string;
/**
* Creates a subdirectory in the preferred directory for temporary
* files (as returned by g_get_tmp_dir()).
*
* `tmpl` should be a string in the GLib file name encoding containing
* a sequence of six 'X' characters, as the parameter to g_mkstemp().
* However, unlike these functions, the template should only be a
* basename, no directory components are allowed. If template is
* %NULL, a default template is used.
*
* Note that in contrast to g_mkdtemp() (and mkdtemp()) `tmpl` is not
* modified, and might thus be a read-only literal string.
* @param tmpl Template for directory name, as in g_mkdtemp(), basename only, or %NULL for a default template
* @returns The actual name used. This string should be freed with g_free() when not needed any longer and is is in the GLib file name encoding. In case of errors, %NULL is returned and @error will be set.
*/
function dir_make_tmp(tmpl?: string | null): string;
/**
* Compares two #gpointer arguments and returns %TRUE if they are equal.
* It can be passed to g_hash_table_new() as the `key_equal_func`
* parameter, when using opaque pointers compared by pointer value as
* keys in a #GHashTable.
*
* This equality function is also appropriate for keys that are integers
* stored in pointers, such as `GINT_TO_POINTER (n)`.
* @param v1 a key
* @param v2 a key to compare with @v1
* @returns %TRUE if the two keys match.
*/
function direct_equal(v1?: any | null, v2?: any | null): boolean;
/**
* Converts a gpointer to a hash value.
* It can be passed to g_hash_table_new() as the `hash_func` parameter,
* when using opaque pointers compared by pointer value as keys in a
* #GHashTable.
*
* This hash function is also appropriate for keys that are integers
* stored in pointers, such as `GINT_TO_POINTER (n)`.
* @param v a #gpointer key
* @returns a hash value corresponding to the key.
*/
function direct_hash(v?: any | null): number;
/**
* This function is a wrapper of dngettext() which does not translate
* the message if the default domain as set with textdomain() has no
* translations for the current locale.
*
* See g_dgettext() for details of how this differs from dngettext()
* proper.
* @param domain the translation domain to use, or %NULL to use the domain set with textdomain()
* @param msgid message to translate
* @param msgid_plural plural form of the message
* @param n the quantity for which translation is needed
* @returns The translated string
*/
function dngettext(domain: string | null, msgid: string, msgid_plural: string, n: number): string;
/**
* Compares the two #gdouble values being pointed to and returns
* %TRUE if they are equal.
* It can be passed to g_hash_table_new() as the `key_equal_func`
* parameter, when using non-%NULL pointers to doubles as keys in a
* #GHashTable.
* @param v1 a pointer to a #gdouble key
* @param v2 a pointer to a #gdouble key to compare with @v1
* @returns %TRUE if the two keys match.
*/
function double_equal(v1: any, v2: any): boolean;
/**
* Converts a pointer to a #gdouble to a hash value.
* It can be passed to g_hash_table_new() as the `hash_func` parameter,
* It can be passed to g_hash_table_new() as the `hash_func` parameter,
* when using non-%NULL pointers to doubles as keys in a #GHashTable.
* @param v a pointer to a #gdouble key
* @returns a hash value corresponding to the key.
*/
function double_hash(v: any): number;
/**
* This function is a variant of g_dgettext() which supports
* a disambiguating message context. GNU gettext uses the
* '\004' character to separate the message context and
* message id in `msgctxtid`.
* If 0 is passed as `msgidoffset,` this function will fall back to
* trying to use the deprecated convention of using "|" as a separation
* character.
*
* This uses g_dgettext() internally. See that functions for differences
* with dgettext() proper.
*
* Applications should normally not use this function directly,
* but use the C_() macro for translations with context.
* @param domain the translation domain to use, or %NULL to use the domain set with textdomain()
* @param msgctxtid a combined message context and message id, separated by a \004 character
* @param msgidoffset the offset of the message id in @msgctxid
* @returns The translated string
*/
function dpgettext(domain: string | null, msgctxtid: string, msgidoffset: number): string;
/**
* This function is a variant of g_dgettext() which supports
* a disambiguating message context. GNU gettext uses the
* '\004' character to separate the message context and
* message id in `msgctxtid`.
*
* This uses g_dgettext() internally. See that functions for differences
* with dgettext() proper.
*
* This function differs from C_() in that it is not a macro and
* thus you may use non-string-literals as context and msgid arguments.
* @param domain the translation domain to use, or %NULL to use the domain set with textdomain()
* @param context the message context
* @param msgid the message
* @returns The translated string
*/
function dpgettext2(domain: string | null, context: string, msgid: string): string;
/**
* Returns the value of the environment variable `variable` in the
* provided list `envp`.
* @param envp an environment list (eg, as returned from g_get_environ()), or %NULL for an empty environment list
* @param variable the environment variable to get
* @returns the value of the environment variable, or %NULL if the environment variable is not set in @envp. The returned string is owned by @envp, and will be freed if @variable is set or unset again.
*/
function environ_getenv(envp: string[] | null, variable: string): string | null;
/**
* Sets the environment variable `variable` in the provided list
* `envp` to `value`.
* @param envp an environment list that can be freed using g_strfreev() (e.g., as returned from g_get_environ()), or %NULL for an empty environment list
* @param variable the environment variable to set, must not contain '='
* @param value the value for to set the variable to
* @param overwrite whether to change the variable if it already exists
* @returns the updated environment list. Free it using g_strfreev().
*/
function environ_setenv(envp: string[] | null, variable: string, value: string, overwrite: boolean): string[];
/**
* Removes the environment variable `variable` from the provided
* environment `envp`.
* @param envp an environment list that can be freed using g_strfreev() (e.g., as returned from g_get_environ()), or %NULL for an empty environment list
* @param variable the environment variable to remove, must not contain '='
* @returns the updated environment list. Free it using g_strfreev().
*/
function environ_unsetenv(envp: string[] | null, variable: string): string[];
/**
* This function registers an extended #GError domain.
* `error_type_name` will be duplicated. Otherwise does the same as
* g_error_domain_register_static().
* @param error_type_name string to create a #GQuark from
* @param error_type_private_size size of the private error data in bytes
* @param error_type_init function initializing fields of the private error data
* @param error_type_copy function copying fields of the private error data
* @param error_type_clear function freeing fields of the private error data
* @returns #GQuark representing the error domain
*/
function error_domain_register(
error_type_name: string,
error_type_private_size: number,
error_type_init: ErrorInitFunc,
error_type_copy: ErrorCopyFunc,
error_type_clear: ErrorClearFunc,
): Quark;
/**
* This function registers an extended #GError domain.
*
* `error_type_name` should not be freed. `error_type_private_size` must
* be greater than 0.
*
* `error_type_init` receives an initialized #GError and should then initialize
* the private data.
*
* `error_type_copy` is a function that receives both original and a copy
* #GError and should copy the fields of the private error data. The standard
* #GError fields are already handled.
*
* `error_type_clear` receives the pointer to the error, and it should free the
* fields of the private error data. It should not free the struct itself though.
*
* Normally, it is better to use G_DEFINE_EXTENDED_ERROR(), as it
* already takes care of passing valid information to this function.
* @param error_type_name static string to create a #GQuark from
* @param error_type_private_size size of the private error data in bytes
* @param error_type_init function initializing fields of the private error data
* @param error_type_copy function copying fields of the private error data
* @param error_type_clear function freeing fields of the private error data
* @returns #GQuark representing the error domain
*/
function error_domain_register_static(
error_type_name: string,
error_type_private_size: number,
error_type_init: ErrorInitFunc,
error_type_copy: ErrorCopyFunc,
error_type_clear: ErrorClearFunc,
): Quark;
/**
* Mark every file descriptor equal to or greater than `lowfd` to be closed
* at the next `execve()` or similar, as if via the `FD_CLOEXEC` flag.
*
* Typically `lowfd` will be 3, to leave standard input, standard output
* and standard error open after exec.
*
* This is the same as Linux `close_range (lowfd, ~0U, CLOSE_RANGE_CLOEXEC)`,
* but portable to other OSs and to older versions of Linux.
*
* This function is async-signal safe, making it safe to call from a
* signal handler or a [callback`GLib`.SpawnChildSetupFunc], as long as `lowfd` is
* non-negative.
* See [`signal(7)`](man:signal(7)) and
* [`signal-safety(7)`](man:signal-safety(7)) for more details.
* @param lowfd Minimum fd to act on, which must be non-negative
* @returns 0 on success, -1 with errno set on error
*/
function fdwalk_set_cloexec(lowfd: number): number;
/**
* Gets a #GFileError constant based on the passed-in `err_no`.
*
* For example, if you pass in `EEXIST` this function returns
* %G_FILE_ERROR_EXIST. Unlike `errno` values, you can portably
* assume that all #GFileError values will exist.
*
* Normally a #GFileError value goes into a #GError returned
* from a function that manipulates files. So you would use
* g_file_error_from_errno() when constructing a #GError.
* @param err_no an "errno" value
* @returns #GFileError corresponding to the given @err_no
*/
function file_error_from_errno(err_no: number): FileError;
function file_error_quark(): Quark;
/**
* Reads an entire file into allocated memory, with good error
* checking.
*
* If the call was successful, it returns %TRUE and sets `contents` to the file
* contents and `length` to the length of the file contents in bytes. The string
* stored in `contents` will be nul-terminated, so for text files you can pass
* %NULL for the `length` argument. If the call was not successful, it returns
* %FALSE and sets `error`. The error domain is %G_FILE_ERROR. Possible error
* codes are those in the #GFileError enumeration. In the error case,
* `contents` is set to %NULL and `length` is set to zero.
* @param filename name of a file to read contents from, in the GLib file name encoding
* @returns %TRUE on success, %FALSE if an error occurred
*/
function file_get_contents(filename: string): [boolean, Uint8Array];
/**
* Opens a file for writing in the preferred directory for temporary
* files (as returned by g_get_tmp_dir()).
*
* `tmpl` should be a string in the GLib file name encoding containing
* a sequence of six 'X' characters, as the parameter to g_mkstemp().
* However, unlike these functions, the template should only be a
* basename, no directory components are allowed. If template is
* %NULL, a default template is used.
*
* Note that in contrast to g_mkstemp() (and mkstemp()) `tmpl` is not
* modified, and might thus be a read-only literal string.
*
* Upon success, and if `name_used` is non-%NULL, the actual name used
* is returned in `name_used`. This string should be freed with g_free()
* when not needed any longer. The returned name is in the GLib file
* name encoding.
* @param tmpl Template for file name, as in g_mkstemp(), basename only, or %NULL for a default template
* @returns A file handle (as from open()) to the file opened for reading and writing. The file is opened in binary mode on platforms where there is a difference. The file handle should be closed with close(). In case of errors, -1 is returned and @error will be set.
*/
function file_open_tmp(tmpl: string | null): [number, string];
/**
* Reads the contents of the symbolic link `filename` like the POSIX
* `readlink()` function.
*
* The returned string is in the encoding used for filenames. Use
* g_filename_to_utf8() to convert it to UTF-8.
*
* The returned string may also be a relative path. Use g_build_filename()
* to convert it to an absolute path:
*
*
* ```c
* g_autoptr(GError) local_error = NULL;
* g_autofree gchar *link_target = g_file_read_link ("/etc/localtime", &local_error);
*
* if (local_error != NULL)
* g_error ("Error reading link: %s", local_error->message);
*
* if (!g_path_is_absolute (link_target))
* {
* g_autofree gchar *absolute_link_target = g_build_filename ("/etc", link_target, NULL);
* g_free (link_target);
* link_target = g_steal_pointer (&absolute_link_target);
* }
* ```
*
* @param filename the symbolic link
* @returns A newly-allocated string with the contents of the symbolic link, or %NULL if an error occurred.
*/
function file_read_link(filename: string): string;
/**
* Writes all of `contents` to a file named `filename`. This is a convenience
* wrapper around calling g_file_set_contents_full() with `flags` set to
* `G_FILE_SET_CONTENTS_CONSISTENT | G_FILE_SET_CONTENTS_ONLY_EXISTING` and
* `mode` set to `0666`.
* @param filename name of a file to write @contents to, in the GLib file name encoding
* @param contents string to write to the file
* @returns %TRUE on success, %FALSE if an error occurred
*/
function file_set_contents(filename: string, contents: Uint8Array | string): boolean;
/**
* Writes all of `contents` to a file named `filename,` with good error checking.
* If a file called `filename` already exists it will be overwritten.
*
* `flags` control the properties of the write operation: whether its atomic,
* and what the tradeoff is between returning quickly or being resilient to
* system crashes.
*
* As this function performs file I/O, it is recommended to not call it anywhere
* where blocking would cause problems, such as in the main loop of a graphical
* application. In particular, if `flags` has any value other than
* %G_FILE_SET_CONTENTS_NONE then this function may call `fsync()`.
*
* If %G_FILE_SET_CONTENTS_CONSISTENT is set in `flags,` the operation is atomic
* in the sense that it is first written to a temporary file which is then
* renamed to the final name.
*
* Notes:
*
* - On UNIX, if `filename` already exists hard links to `filename` will break.
* Also since the file is recreated, existing permissions, access control
* lists, metadata etc. may be lost. If `filename` is a symbolic link,
* the link itself will be replaced, not the linked file.
*
* - On UNIX, if `filename` already exists and is non-empty, and if the system
* supports it (via a journalling filesystem or equivalent), and if
* %G_FILE_SET_CONTENTS_CONSISTENT is set in `flags,` the `fsync()` call (or
* equivalent) will be used to ensure atomic replacement: `filename`
* will contain either its old contents or `contents,` even in the face of
* system power loss, the disk being unsafely removed, etc.
*
* - On UNIX, if `filename` does not already exist or is empty, there is a
* possibility that system power loss etc. after calling this function will
* leave `filename` empty or full of NUL bytes, depending on the underlying
* filesystem, unless %G_FILE_SET_CONTENTS_DURABLE and
* %G_FILE_SET_CONTENTS_CONSISTENT are set in `flags`.
*
* - On Windows renaming a file will not remove an existing file with the
* new name, so on Windows there is a race condition between the existing
* file being removed and the temporary file being renamed.
*
* - On Windows there is no way to remove a file that is open to some
* process, or mapped into memory. Thus, this function will fail if
* `filename` already exists and is open.
*
* If the call was successful, it returns %TRUE. If the call was not successful,
* it returns %FALSE and sets `error`. The error domain is %G_FILE_ERROR.
* Possible error codes are those in the #GFileError enumeration.
*
* Note that the name for the temporary file is constructed by appending up
* to 7 characters to `filename`.
*
* If the file didnt exist before and is created, it will be given the
* permissions from `mode`. Otherwise, the permissions of the existing file may
* be changed to `mode` depending on `flags,` or they may remain unchanged.
* @param filename name of a file to write @contents to, in the GLib file name encoding
* @param contents string to write to the file
* @param flags flags controlling the safety vs speed of the operation
* @param mode file mode, as passed to `open()`; typically this will be `0666`
* @returns %TRUE on success, %FALSE if an error occurred
*/
function file_set_contents_full(
filename: string,
contents: Uint8Array | string,
flags: FileSetContentsFlags | null,
mode: number,
): boolean;
/**
* Returns %TRUE if any of the tests in the bitfield `test` are
* %TRUE. For example, `(G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)`
* will return %TRUE if the file exists; the check whether it's a
* directory doesn't matter since the existence test is %TRUE. With
* the current set of available tests, there's no point passing in
* more than one test at a time.
*
* Apart from %G_FILE_TEST_IS_SYMLINK all tests follow symbolic links,
* so for a symbolic link to a regular file g_file_test() will return
* %TRUE for both %G_FILE_TEST_IS_SYMLINK and %G_FILE_TEST_IS_REGULAR.
*
* Note, that for a dangling symbolic link g_file_test() will return
* %TRUE for %G_FILE_TEST_IS_SYMLINK and %FALSE for all other flags.
*
* You should never use g_file_test() to test whether it is safe
* to perform an operation, because there is always the possibility
* of the condition changing before you actually perform the operation,
* see [TOCTOU](https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use).
*
* For example, you might think you could use %G_FILE_TEST_IS_SYMLINK
* to know whether it is safe to write to a file without being
* tricked into writing into a different location. It doesn't work!
*
*
* ```c
* // DON'T DO THIS
* if (!g_file_test (filename, G_FILE_TEST_IS_SYMLINK))
* {
* fd = g_open (filename, O_WRONLY);
* // write to fd
* }
*
* // DO THIS INSTEAD
* fd = g_open (filename, O_WRONLY | O_NOFOLLOW | O_CLOEXEC);
* if (fd == -1)
* {
* // check error
* if (errno == ELOOP)
* // file is a symlink and can be ignored
* else
* // handle errors as before
* }
* else
* {
* // write to fd
* }
* ```
*
*
* Another thing to note is that %G_FILE_TEST_EXISTS and
* %G_FILE_TEST_IS_EXECUTABLE are implemented using the access()
* system call. This usually doesn't matter, but if your program
* is setuid or setgid it means that these tests will give you
* the answer for the real user ID and group ID, rather than the
* effective user ID and group ID.
*
* On Windows, there are no symlinks, so testing for
* %G_FILE_TEST_IS_SYMLINK will always return %FALSE. Testing for
* %G_FILE_TEST_IS_EXECUTABLE will just check that the file exists and
* its name indicates that it is executable, checking for well-known
* extensions and those listed in the `PATHEXT` environment variable.
* @param filename a filename to test in the GLib file name encoding
* @param test bitfield of #GFileTest flags
* @returns whether a test was %TRUE
*/
function file_test(filename: string, test: FileTest | null): boolean;
/**
* Returns the display basename for the particular filename, guaranteed
* to be valid UTF-8. The display name might not be identical to the filename,
* for instance there might be problems converting it to UTF-8, and some files
* can be translated in the display.
*
* If GLib cannot make sense of the encoding of `filename,` as a last resort it
* replaces unknown characters with U+FFFD, the Unicode replacement character.
* You can search the result for the UTF-8 encoding of this character (which is
* "\357\277\275" in octal notation) to find out if `filename` was in an invalid
* encoding.
*
* You must pass the whole absolute pathname to this functions so that
* translation of well known locations can be done.
*
* This function is preferred over g_filename_display_name() if you know the
* whole path, as it allows translation.
* @param filename an absolute pathname in the GLib file name encoding
* @returns a newly allocated string containing a rendition of the basename of the filename in valid UTF-8
*/
function filename_display_basename(filename: string): string;
/**
* Converts a filename into a valid UTF-8 string. The conversion is
* not necessarily reversible, so you should keep the original around
* and use the return value of this function only for display purposes.
* Unlike g_filename_to_utf8(), the result is guaranteed to be non-%NULL
* even if the filename actually isn't in the GLib file name encoding.
*
* If GLib cannot make sense of the encoding of `filename,` as a last resort it
* replaces unknown characters with U+FFFD, the Unicode replacement character.
* You can search the result for the UTF-8 encoding of this character (which is
* "\357\277\275" in octal notation) to find out if `filename` was in an invalid
* encoding.
*
* If you know the whole pathname of the file you should use
* g_filename_display_basename(), since that allows location-based
* translation of filenames.
* @param filename a pathname hopefully in the GLib file name encoding
* @returns a newly allocated string containing a rendition of the filename in valid UTF-8
*/
function filename_display_name(filename: string): string;
/**
* Converts an escaped ASCII-encoded URI to a local filename in the
* encoding used for filenames.
*
* Since GLib 2.78, the query string and fragment can be present in the URI,
* but are not part of the resulting filename.
* We take inspiration from https://url.spec.whatwg.org/#file-state,
* but we don't support the entire standard.
* @param uri a uri describing a filename (escaped, encoded in ASCII).
* @returns a newly-allocated string holding the resulting filename, or %NULL on an error.
*/
function filename_from_uri(uri: string): [string, string];
/**
* Converts a string from UTF-8 to the encoding GLib uses for
* filenames. Note that on Windows GLib uses UTF-8 for filenames;
* on other platforms, this function indirectly depends on the
* [current locale](running.html#locale).
*
* The input string shall not contain nul characters even if the `len`
* argument is positive. A nul character found inside the string will result
* in error %G_CONVERT_ERROR_ILLEGAL_SEQUENCE. If the filename encoding is
* not UTF-8 and the conversion output contains a nul character, the error
* %G_CONVERT_ERROR_EMBEDDED_NUL is set and the function returns %NULL.
* @param utf8string a UTF-8 encoded string.
* @param len the length of the string, or -1 if the string is nul-terminated.
* @returns The converted string, or %NULL on an error.
*/
function filename_from_utf8(utf8string: string, len: number): [string, number, number];
/**
* Converts an absolute filename to an escaped ASCII-encoded URI, with the path
* component following Section 3.3. of RFC 2396.
* @param filename an absolute filename specified in the GLib file name encoding, which is the on-disk file name bytes on Unix, and UTF-8 on Windows
* @param hostname A UTF-8 encoded hostname, or %NULL for none.
* @returns a newly-allocated string holding the resulting URI, or %NULL on an error.
*/
function filename_to_uri(filename: string, hostname?: string | null): string;
/**
* Converts a string which is in the encoding used by GLib for
* filenames into a UTF-8 string. Note that on Windows GLib uses UTF-8
* for filenames; on other platforms, this function indirectly depends on
* the [current locale](running.html#locale).
*
* The input string shall not contain nul characters even if the `len`
* argument is positive. A nul character found inside the string will result
* in error %G_CONVERT_ERROR_ILLEGAL_SEQUENCE.
* If the source encoding is not UTF-8 and the conversion output contains a
* nul character, the error %G_CONVERT_ERROR_EMBEDDED_NUL is set and the
* function returns %NULL. Use g_convert() to produce output that
* may contain embedded nul characters.
* @param opsysstring a string in the encoding for filenames
* @param len the length of the string, or -1 if the string is nul-terminated (Note that some encodings may allow nul bytes to occur inside strings. In that case, using -1 for the @len parameter is unsafe)
* @returns The converted string, or %NULL on an error.
*/
function filename_to_utf8(opsysstring: string, len: number): [string, number, number];
/**
* Locates the first executable named `program` in the user's path, in the
* same way that execvp() would locate it. Returns an allocated string
* with the absolute path name, or %NULL if the program is not found in
* the path. If `program` is already an absolute path, returns a copy of
* `program` if `program` exists and is executable, and %NULL otherwise.
*
* On Windows, if `program` does not have a file type suffix, tries
* with the suffixes .exe, .cmd, .bat and .com, and the suffixes in
* the `PATHEXT` environment variable.
*
* On Windows, it looks for the file in the same way as CreateProcess()
* would. This means first in the directory where the executing
* program was loaded from, then in the current directory, then in the
* Windows 32-bit system directory, then in the Windows directory, and
* finally in the directories in the `PATH` environment variable. If
* the program is found, the return value contains the full name
* including the type suffix.
* @param program a program name in the GLib file name encoding
* @returns a newly-allocated string with the absolute path, or %NULL
*/
function find_program_in_path(program: string): string | null;
/**
* A wrapper for the stdio `fopen()` function. The `fopen()` function
* opens a file and associates a new stream with it.
*
* Because file descriptors are specific to the C library on Windows,
* and a file descriptor is part of the `FILE` struct, the `FILE*` returned
* by this function makes sense only to functions in the same C library.
* Thus if the GLib-using code uses a different C library than GLib does,
* the FILE* returned by this function cannot be passed to C library
* functions like `fprintf()` or `fread()`.
*
* See your C library manual for more details about `fopen()`.
*
* As `close()` and `fclose()` are part of the C library, this implies that it is
* currently impossible to close a file if the application C library and the C library
* used by GLib are different. Convenience functions like g_file_set_contents_full()
* avoid this problem.
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param mode a string describing the mode in which the file should be opened
* @returns A `FILE*` if the file was successfully opened, or %NULL if an error occurred
*/
function fopen(filename: string, mode: string): any | null;
/**
* Formats a size (for example the size of a file) into a human readable
* string. Sizes are rounded to the nearest size prefix (kB, MB, GB)
* and are displayed rounded to the nearest tenth. E.g. the file size
* 3292528 bytes will be converted into the string "3.2 MB". The returned string
* is UTF-8, and may use a non-breaking space to separate the number and units,
* to ensure they arent separated when line wrapped.
*
* The prefix units base is 1000 (i.e. 1 kB is 1000 bytes).
*
* This string should be freed with g_free() when not needed any longer.
*
* See g_format_size_full() for more options about how the size might be
* formatted.
* @param size a size in bytes
* @returns a newly-allocated formatted string containing a human readable file size
*/
function format_size(size: number): string;
/**
* Formats a size (for example the size of a file) into a human
* readable string. Sizes are rounded to the nearest size prefix
* (KB, MB, GB) and are displayed rounded to the nearest tenth.
* E.g. the file size 3292528 bytes will be converted into the
* string "3.1 MB".
*
* The prefix units base is 1024 (i.e. 1 KB is 1024 bytes).
*
* This string should be freed with g_free() when not needed any longer.
* @param size a size in bytes
* @returns a newly-allocated formatted string containing a human readable file size
*/
function format_size_for_display(size: number): string;
/**
* Formats a size.
*
* This function is similar to g_format_size() but allows for flags
* that modify the output. See #GFormatSizeFlags.
* @param size a size in bytes
* @param flags #GFormatSizeFlags to modify the output
* @returns a newly-allocated formatted string containing a human readable file size
*/
function format_size_full(size: number, flags: FormatSizeFlags | null): string;
/**
* Frees the memory pointed to by `mem`.
*
* If you know the allocated size of `mem,` calling g_free_sized() may be faster,
* depending on the libc implementation in use.
*
* Starting from GLib 2.78, this may happen automatically in case a GCC
* compatible compiler is used with some optimization level and the allocated
* size is known at compile time (see [documentation of
* `__builtin_object_size()`](https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html)
* to understand its caveats).
*
* If `mem` is %NULL it simply returns, so there is no need to check `mem`
* against %NULL before calling this function.
* @param mem the memory to free
*/
function free(mem?: any | null): void;
/**
* Frees the memory pointed to by `mem,` assuming it is has the given `size`.
*
* If `mem` is %NULL this is a no-op (and `size` is ignored).
*
* It is an error if `size` doesnt match the size passed when `mem` was
* allocated. `size` is passed to this function to allow optimizations in the
* allocator. If you dont know the allocation size, use g_free() instead.
*
* In case a GCC compatible compiler is used, this function may be used
* automatically via g_free() if the allocated size is known at compile time,
* since GLib 2.78.
* @param mem the memory to free
* @param size size of @mem, in bytes
*/
function free_sized(mem: any | null, size: number): void;
/**
* A wrapper for the POSIX freopen() function. The freopen() function
* opens a file and associates it with an existing stream.
*
* See your C library manual for more details about freopen().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param mode a string describing the mode in which the file should be opened
* @param stream an existing stream which will be reused, or %NULL
* @returns A FILE* if the file was successfully opened, or %NULL if an error occurred.
*/
function freopen(filename: string, mode: string, stream?: any | null): any | null;
/**
* A wrapper for the POSIX `fsync()` function. On Windows, `_commit()` will be
* used. On macOS, `fcntl(F_FULLFSYNC)` will be used.
* The `fsync()` function is used to synchronize a file's in-core
* state with that of the disk.
*
* This wrapper will handle retrying on `EINTR`.
*
* See the C library manual for more details about fsync().
* @param fd a file descriptor
* @returns 0 on success, or -1 if an error occurred. The return value can be used exactly like the return value from fsync().
*/
function fsync(fd: number): number;
/**
* Gets a human-readable name for the application, as set by
* g_set_application_name(). This name should be localized if
* possible, and is intended for display to the user. Contrast with
* g_get_prgname(), which gets a non-localized name. If
* g_set_application_name() has not been called, returns the result of
* g_get_prgname() (which may be %NULL if g_set_prgname() has also not
* been called).
* @returns human-readable application name. May return %NULL
*/
function get_application_name(): string | null;
/**
* Obtains the character set for the [current locale](running.html#locale);
* you might use this character set as an argument to g_convert(), to convert
* from the current locale's encoding to some other encoding. (Frequently
* g_locale_to_utf8() and g_locale_from_utf8() are nice shortcuts, though.)
*
* On Windows the character set returned by this function is the
* so-called system default ANSI code-page. That is the character set
* used by the "narrow" versions of C library and Win32 functions that
* handle file names. It might be different from the character set
* used by the C library's current locale.
*
* On Linux, the character set is found by consulting nl_langinfo() if
* available. If not, the environment variables `LC_ALL`, `LC_CTYPE`, `LANG`
* and `CHARSET` are queried in order. nl_langinfo() returns the C locale if
* no locale has been loaded by setlocale().
*
* The return value is %TRUE if the locale's encoding is UTF-8, in that
* case you can perhaps avoid calling g_convert().
*
* The string returned in `charset` is not allocated, and should not be
* freed.
* @returns %TRUE if the returned charset is UTF-8
*/
function get_charset(): [boolean, string];
/**
* Gets the character set for the current locale.
* @returns a newly allocated string containing the name of the character set. This string must be freed with g_free().
*/
function get_codeset(): string;
/**
* Obtains the character set used by the console attached to the process,
* which is suitable for printing output to the terminal.
*
* Usually this matches the result returned by g_get_charset(), but in
* environments where the locale's character set does not match the encoding
* of the console this function tries to guess a more suitable value instead.
*
* On Windows the character set returned by this function is the
* output code page used by the console associated with the calling process.
* If the codepage can't be determined (for example because there is no
* console attached) UTF-8 is assumed.
*
* The return value is %TRUE if the locale's encoding is UTF-8, in that
* case you can perhaps avoid calling g_convert().
*
* The string returned in `charset` is not allocated, and should not be
* freed.
* @returns %TRUE if the returned charset is UTF-8
*/
function get_console_charset(): [boolean, string];
/**
* Gets the current directory.
*
* The returned string should be freed when no longer needed.
* The encoding of the returned string is system defined.
* On Windows, it is always UTF-8.
*
* Since GLib 2.40, this function will return the value of the "PWD"
* environment variable if it is set and it happens to be the same as
* the current directory. This can make a difference in the case that
* the current directory is the target of a symbolic link.
* @returns the current directory
*/
function get_current_dir(): string;
/**
* Equivalent to the UNIX gettimeofday() function, but portable.
*
* You may find [func`GLib`.get_real_time] to be more convenient.
* @param result #GTimeVal structure in which to store current time.
*/
function get_current_time(result: TimeVal): void;
/**
* Gets the list of environment variables for the current process.
*
* The list is %NULL terminated and each item in the list is of the
* form 'NAME=VALUE'.
*
* This is equivalent to direct access to the 'environ' global variable,
* except portable.
*
* The return value is freshly allocated and it should be freed with
* g_strfreev() when it is no longer needed.
* @returns the list of environment variables
*/
function get_environ(): string[];
/**
* Determines the preferred character sets used for filenames.
* The first character set from the `charsets` is the filename encoding, the
* subsequent character sets are used when trying to generate a displayable
* representation of a filename, see g_filename_display_name().
*
* On Unix, the character sets are determined by consulting the
* environment variables `G_FILENAME_ENCODING` and `G_BROKEN_FILENAMES`.
* On Windows, the character set used in the GLib API is always UTF-8
* and said environment variables have no effect.
*
* `G_FILENAME_ENCODING` may be set to a comma-separated list of
* character set names. The special token ``locale`` is taken to mean the
* character set for the [current locale](running.html#locale).
* If `G_FILENAME_ENCODING` is not set, but `G_BROKEN_FILENAMES` is,
* the character set of the current locale is taken as the filename
* encoding. If neither environment variable is set, UTF-8 is taken
* as the filename encoding, but the character set of the current locale
* is also put in the list of encodings.
*
* The returned `charsets` belong to GLib and must not be freed.
*
* Note that on Unix, regardless of the locale character set or
* `G_FILENAME_ENCODING` value, the actual file names present
* on a system might be in any random encoding or just gibberish.
* @returns %TRUE if the filename encoding is UTF-8.
*/
function get_filename_charsets(): [boolean, string[]];
/**
* Gets the current user's home directory.
*
* As with most UNIX tools, this function will return the value of the
* `HOME` environment variable if it is set to an existing absolute path
* name, falling back to the `passwd` file in the case that it is unset.
*
* If the path given in `HOME` is non-absolute, does not exist, or is
* not a directory, the result is undefined.
*
* Before version 2.36 this function would ignore the `HOME` environment
* variable, taking the value from the `passwd` database instead. This was
* changed to increase the compatibility of GLib with other programs (and
* the XDG basedir specification) and to increase testability of programs
* based on GLib (by making it easier to run them from test frameworks).
*
* If your program has a strong requirement for either the new or the
* old behaviour (and if you don't wish to increase your GLib
* dependency to ensure that the new behaviour is in effect) then you
* should either directly check the `HOME` environment variable yourself
* or unset it before calling any functions in GLib.
* @returns the current user's home directory
*/
function get_home_dir(): string;
/**
* Return a name for the machine.
*
* The returned name is not necessarily a fully-qualified domain name,
* or even present in DNS or some other name service at all. It need
* not even be unique on your local network or site, but usually it
* is. Callers should not rely on the return value having any specific
* properties like uniqueness for security purposes. Even if the name
* of the machine is changed while an application is running, the
* return value from this function does not change. The returned
* string is owned by GLib and should not be modified or freed. If no
* name can be determined, a default fixed string "localhost" is
* returned.
*
* The encoding of the returned string is UTF-8.
* @returns the host name of the machine.
*/
function get_host_name(): string;
/**
* Computes a list of applicable locale names, which can be used to
* e.g. construct locale-dependent filenames or search paths. The returned
* list is sorted from most desirable to least desirable and always contains
* the default locale "C".
*
* For example, if LANGUAGE=de:en_US, then the returned list is
* "de", "en_US", "en", "C".
*
* This function consults the environment variables `LANGUAGE`, `LC_ALL`,
* `LC_MESSAGES` and `LANG` to find the list of locales specified by the
* user.
* @returns a %NULL-terminated array of strings owned by GLib that must not be modified or freed.
*/
function get_language_names(): string[];
/**
* Computes a list of applicable locale names with a locale category name,
* which can be used to construct the fallback locale-dependent filenames
* or search paths. The returned list is sorted from most desirable to
* least desirable and always contains the default locale "C".
*
* This function consults the environment variables `LANGUAGE`, `LC_ALL`,
* `category_name,` and `LANG` to find the list of locales specified by the
* user.
*
* g_get_language_names() returns g_get_language_names_with_category("LC_MESSAGES").
* @param category_name a locale category name
* @returns a %NULL-terminated array of strings owned by the thread g_get_language_names_with_category was called from. It must not be modified or freed. It must be copied if planned to be used in another thread.
*/
function get_language_names_with_category(category_name: string): string[];
/**
* Returns a list of derived variants of `locale,` which can be used to
* e.g. construct locale-dependent filenames or search paths. The returned
* list is sorted from most desirable to least desirable.
* This function handles territory, charset and extra locale modifiers. See
* [`setlocale(3)`](man:setlocale) for information about locales and their format.
*
* `locale` itself is guaranteed to be returned in the output.
*
* For example, if `locale` is `fr_BE`, then the returned list
* is `fr_BE`, `fr`. If `locale` is `en_GB.UTF-8`euro``, then the returned list
* is `en_GB.UTF-8`euro``, `en_GB.UTF-8`, `en_GB`euro``, `en_GB`, `en.UTF-8`euro``,
* `en.UTF-8`, `en`euro``, `en`.
*
* If you need the list of variants for the current locale,
* use g_get_language_names().
* @param locale a locale identifier
* @returns a newly allocated array of newly allocated strings with the locale variants. Free with g_strfreev().
*/
function get_locale_variants(locale: string): string[];
/**
* Queries the system monotonic time.
*
* The monotonic clock will always increase and doesn't suffer
* discontinuities when the user (or NTP) changes the system time. It
* may or may not continue to tick during times where the machine is
* suspended.
*
* We try to use the clock that corresponds as closely as possible to
* the passage of time as measured by system calls such as poll() but it
* may not always be possible to do this.
* @returns the monotonic time, in microseconds
*/
function get_monotonic_time(): number;
/**
* Determine the approximate number of threads that the system will
* schedule simultaneously for this process. This is intended to be
* used as a parameter to g_thread_pool_new() for CPU bound tasks and
* similar cases.
* @returns Number of schedulable threads, always greater than 0
*/
function get_num_processors(): number;
/**
* Get information about the operating system.
*
* On Linux this comes from the `/etc/os-release` file. On other systems, it may
* come from a variety of sources. You can either use the standard key names
* like %G_OS_INFO_KEY_NAME or pass any UTF-8 string key name. For example,
* `/etc/os-release` provides a number of other less commonly used values that may
* be useful. No key is guaranteed to be provided, so the caller should always
* check if the result is %NULL.
* @param key_name a key for the OS info being requested, for example %G_OS_INFO_KEY_NAME.
* @returns The associated value for the requested key or %NULL if this information is not provided.
*/
function get_os_info(key_name: string): string | null;
/**
* Gets the name of the program. This name should not be localized,
* in contrast to g_get_application_name().
*
* If you are using #GApplication the program name is set in
* g_application_run(). In case of GDK or GTK it is set in
* gdk_init(), which is called by gtk_init() and the
* #GtkApplication::startup handler. The program name is found by
* taking the last component of `argv[`0].
* @returns the name of the program, or %NULL if it has not been set yet. The returned string belongs to GLib and must not be modified or freed.
*/
function get_prgname(): string | null;
/**
* Gets the real name of the user. This usually comes from the user's
* entry in the `passwd` file. The encoding of the returned string is
* system-defined. (On Windows, it is, however, always UTF-8.) If the
* real user name cannot be determined, the string "Unknown" is
* returned.
* @returns the user's real name.
*/
function get_real_name(): string;
/**
* Queries the system wall-clock time.
*
* This call is functionally equivalent to [func`GLib`.get_current_time] except
* that the return value is often more convenient than dealing with a
* #GTimeVal.
*
* You should only use this call if you are actually interested in the real
* wall-clock time. [func`GLib`.get_monotonic_time] is probably more useful for
* measuring intervals.
* @returns the number of microseconds since January 1, 1970 UTC.
*/
function get_real_time(): number;
/**
* Returns an ordered list of base directories in which to access
* system-wide configuration information.
*
* On UNIX platforms this is determined using the mechanisms described
* in the
* [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
* In this case the list of directories retrieved will be `XDG_CONFIG_DIRS`.
*
* On Windows it follows XDG Base Directory Specification if `XDG_CONFIG_DIRS` is defined.
* If `XDG_CONFIG_DIRS` is undefined, the directory that contains application
* data for all users is used instead. A typical path is
* `C:\Documents and Settings\All Users\Application Data`.
* This folder is used for application data
* that is not user specific. For example, an application can store
* a spell-check dictionary, a database of clip art, or a log file in the
* FOLDERID_ProgramData folder. This information will not roam and is available
* to anyone using the computer.
*
* The return value is cached and modifying it at runtime is not supported, as
* its not thread-safe to modify environment variables at runtime.
* @returns a %NULL-terminated array of strings owned by GLib that must not be modified or freed.
*/
function get_system_config_dirs(): string[];
/**
* Returns an ordered list of base directories in which to access
* system-wide application data.
*
* On UNIX platforms this is determined using the mechanisms described
* in the
* [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec)
* In this case the list of directories retrieved will be `XDG_DATA_DIRS`.
*
* On Windows it follows XDG Base Directory Specification if `XDG_DATA_DIRS` is defined.
* If `XDG_DATA_DIRS` is undefined,
* the first elements in the list are the Application Data
* and Documents folders for All Users. (These can be determined only
* on Windows 2000 or later and are not present in the list on other
* Windows versions.) See documentation for FOLDERID_ProgramData and
* FOLDERID_PublicDocuments.
*
* Then follows the "share" subfolder in the installation folder for
* the package containing the DLL that calls this function, if it can
* be determined.
*
* Finally the list contains the "share" subfolder in the installation
* folder for GLib, and in the installation folder for the package the
* application's .exe file belongs to.
*
* The installation folders above are determined by looking up the
* folder where the module (DLL or EXE) in question is located. If the
* folder's name is "bin", its parent is used, otherwise the folder
* itself.
*
* Note that on Windows the returned list can vary depending on where
* this function is called.
*
* The return value is cached and modifying it at runtime is not supported, as
* its not thread-safe to modify environment variables at runtime.
* @returns a %NULL-terminated array of strings owned by GLib that must not be modified or freed.
*/
function get_system_data_dirs(): string[];
/**
* Gets the directory to use for temporary files.
*
* On UNIX, this is taken from the `TMPDIR` environment variable.
* If the variable is not set, `P_tmpdir` is
* used, as defined by the system C library. Failing that, a
* hard-coded default of "/tmp" is returned.
*
* On Windows, the `TEMP` environment variable is used, with the
* root directory of the Windows installation (eg: "C:\") used
* as a default.
*
* The encoding of the returned string is system-defined. On Windows,
* it is always UTF-8. The return value is never %NULL or the empty
* string.
* @returns the directory to use for temporary files.
*/
function get_tmp_dir(): string;
/**
* Returns a base directory in which to store non-essential, cached
* data specific to particular user.
*
* On UNIX platforms this is determined using the mechanisms described
* in the
* [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
* In this case the directory retrieved will be `XDG_CACHE_HOME`.
*
* On Windows it follows XDG Base Directory Specification if `XDG_CACHE_HOME` is defined.
* If `XDG_CACHE_HOME` is undefined, the directory that serves as a common
* repository for temporary Internet files is used instead. A typical path is
* `C:\Documents and Settings\username\Local Settings\Temporary Internet Files`.
* See the [documentation for `FOLDERID_InternetCache`](https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid).
*
* The return value is cached and modifying it at runtime is not supported, as
* its not thread-safe to modify environment variables at runtime.
* @returns a string owned by GLib that must not be modified or freed.
*/
function get_user_cache_dir(): string;
/**
* Returns a base directory in which to store user-specific application
* configuration information such as user preferences and settings.
*
* On UNIX platforms this is determined using the mechanisms described
* in the
* [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
* In this case the directory retrieved will be `XDG_CONFIG_HOME`.
*
* On Windows it follows XDG Base Directory Specification if `XDG_CONFIG_HOME` is defined.
* If `XDG_CONFIG_HOME` is undefined, the folder to use for local (as opposed
* to roaming) application data is used instead. See the
* [documentation for `FOLDERID_LocalAppData`](https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid).
* Note that in this case on Windows it will be the same
* as what g_get_user_data_dir() returns.
*
* The return value is cached and modifying it at runtime is not supported, as
* its not thread-safe to modify environment variables at runtime.
* @returns a string owned by GLib that must not be modified or freed.
*/
function get_user_config_dir(): string;
/**
* Returns a base directory in which to access application data such
* as icons that is customized for a particular user.
*
* On UNIX platforms this is determined using the mechanisms described
* in the
* [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
* In this case the directory retrieved will be `XDG_DATA_HOME`.
*
* On Windows it follows XDG Base Directory Specification if `XDG_DATA_HOME`
* is defined. If `XDG_DATA_HOME` is undefined, the folder to use for local (as
* opposed to roaming) application data is used instead. See the
* [documentation for `FOLDERID_LocalAppData`](https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid).
* Note that in this case on Windows it will be the same
* as what g_get_user_config_dir() returns.
*
* The return value is cached and modifying it at runtime is not supported, as
* its not thread-safe to modify environment variables at runtime.
* @returns a string owned by GLib that must not be modified or freed.
*/
function get_user_data_dir(): string;
/**
* Gets the user name of the current user. The encoding of the returned
* string is system-defined. On UNIX, it might be the preferred file name
* encoding, or something else, and there is no guarantee that it is even
* consistent on a machine. On Windows, it is always UTF-8.
* @returns the user name of the current user.
*/
function get_user_name(): string;
/**
* Returns a directory that is unique to the current user on the local
* system.
*
* This is determined using the mechanisms described
* in the
* [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
* This is the directory
* specified in the `XDG_RUNTIME_DIR` environment variable.
* In the case that this variable is not set, we return the value of
* g_get_user_cache_dir(), after verifying that it exists.
*
* The return value is cached and modifying it at runtime is not supported, as
* its not thread-safe to modify environment variables at runtime.
* @returns a string owned by GLib that must not be modified or freed.
*/
function get_user_runtime_dir(): string;
/**
* Returns the full path of a special directory using its logical id.
*
* On UNIX this is done using the XDG special user directories.
* For compatibility with existing practise, %G_USER_DIRECTORY_DESKTOP
* falls back to `$HOME/Desktop` when XDG special user directories have
* not been set up.
*
* Depending on the platform, the user might be able to change the path
* of the special directory without requiring the session to restart; GLib
* will not reflect any change once the special directories are loaded.
* @param directory the logical id of special directory
* @returns the path to the specified special directory, or %NULL if the logical id was not found. The returned string is owned by GLib and should not be modified or freed.
*/
function get_user_special_dir(directory: UserDirectory | null): string | null;
/**
* Returns a base directory in which to store state files specific to
* particular user.
*
* On UNIX platforms this is determined using the mechanisms described
* in the
* [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
* In this case the directory retrieved will be `XDG_STATE_HOME`.
*
* On Windows it follows XDG Base Directory Specification if `XDG_STATE_HOME` is defined.
* If `XDG_STATE_HOME` is undefined, the folder to use for local (as opposed
* to roaming) application data is used instead. See the
* [documentation for `FOLDERID_LocalAppData`](https://docs.microsoft.com/en-us/windows/win32/shell/knownfolderid).
* Note that in this case on Windows it will be the same
* as what g_get_user_data_dir() returns.
*
* The return value is cached and modifying it at runtime is not supported, as
* its not thread-safe to modify environment variables at runtime.
* @returns a string owned by GLib that must not be modified or freed.
*/
function get_user_state_dir(): string;
/**
* Returns the value of an environment variable.
*
* On UNIX, the name and value are byte strings which might or might not
* be in some consistent character set and encoding. On Windows, they are
* in UTF-8.
* On Windows, in case the environment variable's value contains
* references to other environment variables, they are expanded.
* @param variable the environment variable to get
* @returns the value of the environment variable, or %NULL if the environment variable is not found. The returned string may be overwritten by the next call to g_getenv(), g_setenv() or g_unsetenv().
*/
function getenv(variable: string): string | null;
/**
* This is a convenience function for using a #GHashTable as a set. It
* is equivalent to calling g_hash_table_replace() with `key` as both the
* key and the value.
*
* In particular, this means that if `key` already exists in the hash table, then
* the old copy of `key` in the hash table is freed and `key` replaces it in the
* table.
*
* When a hash table only ever contains keys that have themselves as the
* corresponding value it is able to be stored more efficiently. See
* the discussion in the section description.
*
* Starting from GLib 2.40, this function returns a boolean value to
* indicate whether the newly added value was already in the hash table
* or not.
* @param hash_table a #GHashTable
* @param key a key to insert
* @returns %TRUE if the key did not exist yet
*/
function hash_table_add(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): boolean;
/**
* Checks if `key` is in `hash_table`.
* @param hash_table a #GHashTable
* @param key a key to check
* @returns %TRUE if @key is in @hash_table, %FALSE otherwise.
*/
function hash_table_contains(
hash_table: { [key: string]: any } | HashTable<any, any>,
key?: any | null,
): boolean;
/**
* Destroys all keys and values in the #GHashTable and decrements its
* reference count by 1. If keys and/or values are dynamically allocated,
* you should either free them first or create the #GHashTable with destroy
* notifiers using g_hash_table_new_full(). In the latter case the destroy
* functions you supplied will be called on all keys and values during the
* destruction phase.
* @param hash_table a #GHashTable
*/
function hash_table_destroy(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Calls the given function for key/value pairs in the #GHashTable
* until `predicate` returns %TRUE. The function is passed the key
* and value of each pair, and the given `user_data` parameter. The
* hash table may not be modified while iterating over it (you can't
* add/remove items).
*
* Note, that hash tables are really only optimized for forward
* lookups, i.e. g_hash_table_lookup(). So code that frequently issues
* g_hash_table_find() or g_hash_table_foreach() (e.g. in the order of
* once per every entry in a hash table) should probably be reworked
* to use additional or different data structures for reverse lookups
* (keep in mind that an O(n) find/foreach operation issued for all n
* values in a hash table ends up needing O(n*n) operations).
* @param hash_table a #GHashTable
* @param predicate function to test the key/value pairs for a certain property
* @returns The value of the first key/value pair is returned, for which @predicate evaluates to %TRUE. If no pair with the requested property is found, %NULL is returned.
*/
function hash_table_find(
hash_table: { [key: string]: any } | HashTable<any, any>,
predicate: HRFunc,
): any | null;
/**
* Calls the given function for each of the key/value pairs in the
* #GHashTable. The function is passed the key and value of each
* pair, and the given `user_data` parameter. The hash table may not
* be modified while iterating over it (you can't add/remove
* items). To remove all items matching a predicate, use
* g_hash_table_foreach_remove().
*
* The order in which g_hash_table_foreach() iterates over the keys/values in
* the hash table is not defined.
*
* See g_hash_table_find() for performance caveats for linear
* order searches in contrast to g_hash_table_lookup().
* @param hash_table a #GHashTable
* @param func the function to call for each key/value pair
*/
function hash_table_foreach(hash_table: { [key: string]: any } | HashTable<any, any>, func: HFunc): void;
/**
* Calls the given function for each key/value pair in the
* #GHashTable. If the function returns %TRUE, then the key/value
* pair is removed from the #GHashTable. If you supplied key or
* value destroy functions when creating the #GHashTable, they are
* used to free the memory allocated for the removed keys and values.
*
* See #GHashTableIter for an alternative way to loop over the
* key/value pairs in the hash table.
* @param hash_table a #GHashTable
* @param func the function to call for each key/value pair
* @returns the number of key/value pairs removed
*/
function hash_table_foreach_remove(
hash_table: { [key: string]: any } | HashTable<any, any>,
func: HRFunc,
): number;
/**
* Calls the given function for each key/value pair in the
* #GHashTable. If the function returns %TRUE, then the key/value
* pair is removed from the #GHashTable, but no key or value
* destroy functions are called.
*
* See #GHashTableIter for an alternative way to loop over the
* key/value pairs in the hash table.
* @param hash_table a #GHashTable
* @param func the function to call for each key/value pair
* @returns the number of key/value pairs removed.
*/
function hash_table_foreach_steal(
hash_table: { [key: string]: any } | HashTable<any, any>,
func: HRFunc,
): number;
/**
* Inserts a new key and value into a #GHashTable.
*
* If the key already exists in the #GHashTable its current
* value is replaced with the new value. If you supplied a
* `value_destroy_func` when creating the #GHashTable, the old
* value is freed using that function. If you supplied a
* `key_destroy_func` when creating the #GHashTable, the passed
* key is freed using that function.
*
* Starting from GLib 2.40, this function returns a boolean value to
* indicate whether the newly added value was already in the hash table
* or not.
* @param hash_table a #GHashTable
* @param key a key to insert
* @param value the value to associate with the key
* @returns %TRUE if the key did not exist yet
*/
function hash_table_insert(
hash_table: { [key: string]: any } | HashTable<any, any>,
key?: any | null,
value?: any | null,
): boolean;
/**
* Looks up a key in a #GHashTable. Note that this function cannot
* distinguish between a key that is not present and one which is present
* and has the value %NULL. If you need this distinction, use
* g_hash_table_lookup_extended().
* @param hash_table a #GHashTable
* @param key the key to look up
* @returns the associated value, or %NULL if the key is not found
*/
function hash_table_lookup(
hash_table: { [key: string]: any } | HashTable<any, any>,
key?: any | null,
): any | null;
/**
* Looks up a key in the #GHashTable, returning the original key and the
* associated value and a #gboolean which is %TRUE if the key was found. This
* is useful if you need to free the memory allocated for the original key,
* for example before calling g_hash_table_remove().
*
* You can actually pass %NULL for `lookup_key` to test
* whether the %NULL key exists, provided the hash and equal functions
* of `hash_table` are %NULL-safe.
* @param hash_table a #GHashTable
* @param lookup_key the key to look up
* @returns %TRUE if the key was found in the #GHashTable
*/
function hash_table_lookup_extended(
hash_table: { [key: string]: any } | HashTable<any, any>,
lookup_key: any | null,
): [boolean, any, any];
/**
* Creates a new #GHashTable like g_hash_table_new_full() with a reference
* count of 1.
*
* It inherits the hash function, the key equal function, the key destroy function,
* as well as the value destroy function, from `other_hash_table`.
*
* The returned hash table will be empty; it will not contain the keys
* or values from `other_hash_table`.
* @param other_hash_table Another #GHashTable
* @returns a new #GHashTable
*/
function hash_table_new_similar(
other_hash_table: { [key: string]: any } | HashTable<any, any>,
): HashTable<any, any>;
/**
* Atomically increments the reference count of `hash_table` by one.
* This function is MT-safe and may be called from any thread.
* @param hash_table a valid #GHashTable
* @returns the passed in #GHashTable
*/
function hash_table_ref(hash_table: { [key: string]: any } | HashTable<any, any>): HashTable<any, any>;
/**
* Removes a key and its associated value from a #GHashTable.
*
* If the #GHashTable was created using g_hash_table_new_full(), the
* key and value are freed using the supplied destroy functions, otherwise
* you have to make sure that any dynamically allocated values are freed
* yourself.
* @param hash_table a #GHashTable
* @param key the key to remove
* @returns %TRUE if the key was found and removed from the #GHashTable
*/
function hash_table_remove(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): boolean;
/**
* Removes all keys and their associated values from a #GHashTable.
*
* If the #GHashTable was created using g_hash_table_new_full(),
* the keys and values are freed using the supplied destroy functions,
* otherwise you have to make sure that any dynamically allocated
* values are freed yourself.
* @param hash_table a #GHashTable
*/
function hash_table_remove_all(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Inserts a new key and value into a #GHashTable similar to
* g_hash_table_insert(). The difference is that if the key
* already exists in the #GHashTable, it gets replaced by the
* new key. If you supplied a `value_destroy_func` when creating
* the #GHashTable, the old value is freed using that function.
* If you supplied a `key_destroy_func` when creating the
* #GHashTable, the old key is freed using that function.
*
* Starting from GLib 2.40, this function returns a boolean value to
* indicate whether the newly added value was already in the hash table
* or not.
* @param hash_table a #GHashTable
* @param key a key to insert
* @param value the value to associate with the key
* @returns %TRUE if the key did not exist yet
*/
function hash_table_replace(
hash_table: { [key: string]: any } | HashTable<any, any>,
key?: any | null,
value?: any | null,
): boolean;
/**
* Returns the number of elements contained in the #GHashTable.
* @param hash_table a #GHashTable
* @returns the number of key/value pairs in the #GHashTable.
*/
function hash_table_size(hash_table: { [key: string]: any } | HashTable<any, any>): number;
/**
* Removes a key and its associated value from a #GHashTable without
* calling the key and value destroy functions.
* @param hash_table a #GHashTable
* @param key the key to remove
* @returns %TRUE if the key was found and removed from the #GHashTable
*/
function hash_table_steal(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): boolean;
/**
* Removes all keys and their associated values from a #GHashTable
* without calling the key and value destroy functions.
* @param hash_table a #GHashTable
*/
function hash_table_steal_all(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Looks up a key in the #GHashTable, stealing the original key and the
* associated value and returning %TRUE if the key was found. If the key was
* not found, %FALSE is returned.
*
* If found, the stolen key and value are removed from the hash table without
* calling the key and value destroy functions, and ownership is transferred to
* the caller of this method, as with g_hash_table_steal(). That is the case
* regardless whether `stolen_key` or `stolen_value` output parameters are
* requested.
*
* You can pass %NULL for `lookup_key,` provided the hash and equal functions
* of `hash_table` are %NULL-safe.
*
* The dictionary implementation optimizes for having all values identical to
* their keys, for example by using g_hash_table_add(). Before 2.82, when
* stealing both the key and the value from such a dictionary, the value was
* %NULL. Since 2.82, the returned value and key will be the same.
* @param hash_table a #GHashTable
* @param lookup_key the key to look up
* @returns %TRUE if the key was found in the #GHashTable
*/
function hash_table_steal_extended(
hash_table: { [key: string]: any } | HashTable<any, any>,
lookup_key: any | null,
): [boolean, any, any];
/**
* Atomically decrements the reference count of `hash_table` by one.
* If the reference count drops to 0, all keys and values will be
* destroyed, and all memory allocated by the hash table is released.
* This function is MT-safe and may be called from any thread.
* @param hash_table a valid #GHashTable
*/
function hash_table_unref(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Destroys a #GHook, given its ID.
* @param hook_list a #GHookList
* @param hook_id a hook ID
* @returns %TRUE if the #GHook was found in the #GHookList and destroyed
*/
function hook_destroy(hook_list: HookList, hook_id: number): boolean;
/**
* Removes one #GHook from a #GHookList, marking it
* inactive and calling g_hook_unref() on it.
* @param hook_list a #GHookList
* @param hook the #GHook to remove
*/
function hook_destroy_link(hook_list: HookList, hook: Hook): void;
/**
* Calls the #GHookList `finalize_hook` function if it exists,
* and frees the memory allocated for the #GHook.
* @param hook_list a #GHookList
* @param hook the #GHook to free
*/
function hook_free(hook_list: HookList, hook: Hook): void;
/**
* Inserts a #GHook into a #GHookList, before a given #GHook.
* @param hook_list a #GHookList
* @param sibling the #GHook to insert the new #GHook before
* @param hook the #GHook to insert
*/
function hook_insert_before(hook_list: HookList, sibling: Hook | null, hook: Hook): void;
/**
* Inserts a #GHook into a #GHookList, sorted by the given function.
* @param hook_list a #GHookList
* @param hook the #GHook to insert
* @param func the comparison function used to sort the #GHook elements
*/
function hook_insert_sorted(hook_list: HookList, hook: Hook, func: HookCompareFunc): void;
/**
* Prepends a #GHook on the start of a #GHookList.
* @param hook_list a #GHookList
* @param hook the #GHook to add to the start of @hook_list
*/
function hook_prepend(hook_list: HookList, hook: Hook): void;
/**
* Decrements the reference count of a #GHook.
* If the reference count falls to 0, the #GHook is removed
* from the #GHookList and g_hook_free() is called to free it.
* @param hook_list a #GHookList
* @param hook the #GHook to unref
*/
function hook_unref(hook_list: HookList, hook: Hook): void;
/**
* Tests if `hostname` contains segments with an ASCII-compatible
* encoding of an Internationalized Domain Name. If this returns
* %TRUE, you should decode the hostname with g_hostname_to_unicode()
* before displaying it to the user.
*
* Note that a hostname might contain a mix of encoded and unencoded
* segments, and so it is possible for g_hostname_is_non_ascii() and
* g_hostname_is_ascii_encoded() to both return %TRUE for a name.
* @param hostname a hostname
* @returns %TRUE if @hostname contains any ASCII-encoded segments.
*/
function hostname_is_ascii_encoded(hostname: string): boolean;
/**
* Tests if `hostname` is the string form of an IPv4 or IPv6 address.
* (Eg, "192.168.0.1".)
*
* Since 2.66, IPv6 addresses with a zone-id are accepted (RFC6874).
* @param hostname a hostname (or IP address in string form)
* @returns %TRUE if @hostname is an IP address
*/
function hostname_is_ip_address(hostname: string): boolean;
/**
* Tests if `hostname` contains Unicode characters. If this returns
* %TRUE, you need to encode the hostname with g_hostname_to_ascii()
* before using it in non-IDN-aware contexts.
*
* Note that a hostname might contain a mix of encoded and unencoded
* segments, and so it is possible for g_hostname_is_non_ascii() and
* g_hostname_is_ascii_encoded() to both return %TRUE for a name.
* @param hostname a hostname
* @returns %TRUE if @hostname contains any non-ASCII characters
*/
function hostname_is_non_ascii(hostname: string): boolean;
/**
* Converts `hostname` to its canonical ASCII form; an ASCII-only
* string containing no uppercase letters and not ending with a
* trailing dot.
* @param hostname a valid UTF-8 or ASCII hostname
* @returns an ASCII hostname, which must be freed, or %NULL if @hostname is in some way invalid.
*/
function hostname_to_ascii(hostname: string): string | null;
/**
* Converts `hostname` to its canonical presentation form; a UTF-8
* string in Unicode normalization form C, containing no uppercase
* letters, no forbidden characters, and no ASCII-encoded segments,
* and not ending with a trailing dot.
*
* Of course if `hostname` is not an internationalized hostname, then
* the canonical presentation form will be entirely ASCII.
* @param hostname a valid UTF-8 or ASCII hostname
* @returns a UTF-8 hostname, which must be freed, or %NULL if @hostname is in some way invalid.
*/
function hostname_to_unicode(hostname: string): string | null;
/**
* Adds a function to be called whenever there are no higher priority
* events pending.
*
* If the function returns [const`GLib`.SOURCE_REMOVE] or %FALSE it is automatically
* removed from the list of event sources and will not be called again.
*
* See [mainloop memory management](main-loop.html#memory-management-of-sources) for details
* on how to handle the return value and memory management of `data`.
*
* This internally creates a main loop source using [func`GLib`.idle_source_new]
* and attaches it to the global [struct`GLib`.MainContext] using
* [method`GLib`.Source.attach], so the callback will be invoked in whichever
* thread is running that main context. You can do these steps manually if you
* need greater control or to use a custom main context.
* @param priority the priority of the idle source. Typically this will be in the range between [const@GLib.PRIORITY_DEFAULT_IDLE] and [const@GLib.PRIORITY_HIGH_IDLE].
* @param _function function to call
* @param notify function to call when the idle is removed, or %NULL
* @returns the ID (greater than 0) of the event source.
*/
function idle_add(priority: number, _function: SourceFunc, notify?: DestroyNotify | null): number;
/**
* Removes the idle function with the given data.
* @param data the data for the idle source's callback.
* @returns %TRUE if an idle source was found and removed.
*/
function idle_remove_by_data(data?: any | null): boolean;
/**
* Creates a new idle source.
*
* The source will not initially be associated with any
* [struct`GLib`.MainContext] and must be added to one with
* [method`GLib`.Source.attach] before it will be executed. Note that the
* default priority for idle sources is [const`GLib`.PRIORITY_DEFAULT_IDLE], as
* compared to other sources which have a default priority of
* [const`GLib`.PRIORITY_DEFAULT].
* @returns the newly-created idle source
*/
function idle_source_new(): Source;
/**
* Compares the two #gint64 values being pointed to and returns
* %TRUE if they are equal.
* It can be passed to g_hash_table_new() as the `key_equal_func`
* parameter, when using non-%NULL pointers to 64-bit integers as keys in a
* #GHashTable.
* @param v1 a pointer to a #gint64 key
* @param v2 a pointer to a #gint64 key to compare with @v1
* @returns %TRUE if the two keys match.
*/
function int64_equal(v1: any, v2: any): boolean;
/**
* Converts a pointer to a #gint64 to a hash value.
*
* It can be passed to g_hash_table_new() as the `hash_func` parameter,
* when using non-%NULL pointers to 64-bit integer values as keys in a
* #GHashTable.
* @param v a pointer to a #gint64 key
* @returns a hash value corresponding to the key.
*/
function int64_hash(v: any): number;
/**
* Compares the two #gint values being pointed to and returns
* %TRUE if they are equal.
* It can be passed to g_hash_table_new() as the `key_equal_func`
* parameter, when using non-%NULL pointers to integers as keys in a
* #GHashTable.
*
* Note that this function acts on pointers to #gint, not on #gint
* directly: if your hash table's keys are of the form
* `GINT_TO_POINTER (n)`, use g_direct_equal() instead.
* @param v1 a pointer to a #gint key
* @param v2 a pointer to a #gint key to compare with @v1
* @returns %TRUE if the two keys match.
*/
function int_equal(v1: any, v2: any): boolean;
/**
* Converts a pointer to a #gint to a hash value.
* It can be passed to g_hash_table_new() as the `hash_func` parameter,
* when using non-%NULL pointers to integer values as keys in a #GHashTable.
*
* Note that this function acts on pointers to #gint, not on #gint
* directly: if your hash table's keys are of the form
* `GINT_TO_POINTER (n)`, use g_direct_hash() instead.
* @param v a pointer to a #gint key
* @returns a hash value corresponding to the key.
*/
function int_hash(v: any): number;
/**
* Returns a canonical representation for `string`. Interned strings
* can be compared for equality by comparing the pointers, instead of
* using strcmp(). g_intern_static_string() does not copy the string,
* therefore `string` must not be freed or modified.
*
* This function must not be used before library constructors have finished
* running. In particular, this means it cannot be used to initialize global
* variables in C++.
* @param string a static string
* @returns a canonical representation for the string
*/
function intern_static_string(string?: string | null): string;
/**
* Returns a canonical representation for `string`. Interned strings
* can be compared for equality by comparing the pointers, instead of
* using strcmp().
*
* This function must not be used before library constructors have finished
* running. In particular, this means it cannot be used to initialize global
* variables in C++.
* @param string a string
* @returns a canonical representation for the string
*/
function intern_string(string?: string | null): string;
/**
* Adds the #GIOChannel into the default main loop context
* with the given priority.
*
* This internally creates a main loop source using g_io_create_watch()
* and attaches it to the main loop context with g_source_attach().
* You can do these steps manually if you need greater control.
* @param channel a #GIOChannel
* @param priority the priority of the #GIOChannel source
* @param condition the condition to watch for
* @param func the function to call when the condition is satisfied
* @returns the event source id
*/
function io_add_watch(
channel: IOChannel,
priority: number,
condition: IOCondition | null,
func: IOFunc,
): number;
/**
* Converts an `errno` error number to a #GIOChannelError.
* @param en an `errno` error number, e.g. `EINVAL`
* @returns a #GIOChannelError error number, e.g. %G_IO_CHANNEL_ERROR_INVAL.
*/
function io_channel_error_from_errno(en: number): IOChannelError;
function io_channel_error_quark(): Quark;
/**
* Creates a #GSource that's dispatched when `condition` is met for the
* given `channel`. For example, if condition is %G_IO_IN, the source will
* be dispatched when there's data available for reading.
*
* The callback function invoked by the #GSource should be added with
* g_source_set_callback(), but it has type #GIOFunc (not #GSourceFunc).
*
* g_io_add_watch() is a simpler interface to this same functionality, for
* the case where you want to add the source to the default main loop context
* at the default priority.
*
* On Windows, polling a #GSource created to watch a channel for a socket
* puts the socket in non-blocking mode. This is a side-effect of the
* implementation and unavoidable.
* @param channel a #GIOChannel to watch
* @param condition conditions to watch for
* @returns a new #GSource
*/
function io_create_watch(channel: IOChannel, condition: IOCondition | null): Source;
function key_file_error_quark(): Quark;
function list_pop_allocator(): void;
function list_push_allocator(allocator: Allocator): void;
/**
* Gets the names of all variables set in the environment.
*
* Programs that want to be portable to Windows should typically use
* this function and g_getenv() instead of using the environ array
* from the C library directly. On Windows, the strings in the environ
* array are in system codepage encoding, while in most of the typical
* use cases for environment variables in GLib-using programs you want
* the UTF-8 encoding that this function and g_getenv() provide.
* @returns a %NULL-terminated list of strings which must be freed with g_strfreev().
*/
function listenv(): string[];
/**
* Converts a string from UTF-8 to the encoding used for strings by
* the C runtime (usually the same as that used by the operating
* system) in the [current locale](running.html#locale).
* On Windows this means the system codepage.
*
* The input string shall not contain nul characters even if the `len`
* argument is positive. A nul character found inside the string will result
* in error %G_CONVERT_ERROR_ILLEGAL_SEQUENCE. Use g_convert() to convert
* input that may contain embedded nul characters.
* @param utf8string a UTF-8 encoded string
* @param len the length of the string, or -1 if the string is nul-terminated.
* @returns A newly-allocated buffer containing the converted string, or %NULL on an error, and error will be set.
*/
function locale_from_utf8(utf8string: string, len: number): [Uint8Array, number];
/**
* Converts a string which is in the encoding used for strings by
* the C runtime (usually the same as that used by the operating
* system) in the [current locale](running.html#locale) into a UTF-8 string.
*
* If the source encoding is not UTF-8 and the conversion output contains a
* nul character, the error %G_CONVERT_ERROR_EMBEDDED_NUL is set and the
* function returns %NULL.
* If the source encoding is UTF-8, an embedded nul character is treated with
* the %G_CONVERT_ERROR_ILLEGAL_SEQUENCE error for backward compatibility with
* earlier versions of this library. Use g_convert() to produce output that
* may contain embedded nul characters.
* @param opsysstring a string in the encoding of the current locale. On Windows this means the system codepage.
* @returns The converted string, or %NULL on an error.
*/
function locale_to_utf8(opsysstring: Uint8Array | string): [string, number, number];
/**
* The default log handler set up by GLib; [func`GLib`.log_set_default_handler]
* allows to install an alternate default log handler.
*
* This is used if no log handler has been set for the particular log
* domain and log level combination. It outputs the message to `stderr`
* or `stdout` and if the log level is fatal it calls [func`GLib`.BREAKPOINT]. It automatically
* prints a new-line character after the message, so one does not need to be
* manually included in `message`.
*
* The behavior of this log handler can be influenced by a number of
* environment variables:
*
* - `G_MESSAGES_PREFIXED`: A `:`-separated list of log levels for which
* messages should be prefixed by the program name and PID of the
* application.
* - `G_MESSAGES_DEBUG`: A space-separated list of log domains for
* which debug and informational messages are printed. By default
* these messages are not printed. If you need to set the allowed
* domains at runtime, use [func`GLib`.log_writer_default_set_debug_domains].
* - `DEBUG_INVOCATION`: If set to `1`, this is equivalent to
* `G_MESSAGES_DEBUG=all`. `DEBUG_INVOCATION` is a standard environment
* variable set by systemd to prompt debug output. (Since: 2.84)
*
* `stderr` is used for levels [flags`GLib`.LogLevelFlags.LEVEL_ERROR],
* [flags`GLib`.LogLevelFlags.LEVEL_CRITICAL], [flags`GLib`.LogLevelFlags.LEVEL_WARNING] and
* [flags`GLib`.LogLevelFlags.LEVEL_MESSAGE]. `stdout` is used for
* the rest, unless `stderr` was requested by
* [func`GLib`.log_writer_default_set_use_stderr].
*
* This has no effect if structured logging is enabled; see
* [Using Structured Logging](logging.html#using-structured-logging).
* @param log_domain the log domain of the message, or `NULL` for the default `""` application domain
* @param log_level the level of the message
* @param message the message
* @param unused_data data passed from [func@GLib.log] which is unused
*/
function log_default_handler(
log_domain: string | null,
log_level: LogLevelFlags | null,
message?: string | null,
unused_data?: any | null,
): void;
/**
* Return whether debug output from the GLib logging system is enabled.
*
* Note that this should not be used to conditionalise calls to [func`GLib`.debug] or
* other logging functions; it should only be used from [type`GLib`.LogWriterFunc]
* implementations.
*
* Note also that the value of this does not depend on `G_MESSAGES_DEBUG`, nor
* `DEBUG_INVOCATION`, nor [func`GLib`.log_writer_default_set_debug_domains]; see
* the docs for [func`GLib`.log_set_debug_enabled].
* @returns `TRUE` if debug output is enabled, `FALSE` otherwise
*/
function log_get_debug_enabled(): boolean;
/**
* Removes the log handler.
*
* This has no effect if structured logging is enabled; see
* [Using Structured Logging](logging.html#using-structured-logging).
* @param log_domain the log domain
* @param handler_id the ID of the handler, which was returned in [func@GLib.log_set_handler]
*/
function log_remove_handler(log_domain: string, handler_id: number): void;
/**
* Sets the message levels which are always fatal, in any log domain.
*
* When a message with any of these levels is logged the program terminates.
* You can only set the levels defined by GLib to be fatal.
* [flags`GLib`.LogLevelFlags.LEVEL_ERROR] is always fatal.
*
* You can also make some message levels fatal at runtime by setting
* the `G_DEBUG` environment variable (see
* [Running GLib Applications](glib-running.html)).
*
* Libraries should not call this function, as it affects all messages logged
* by a process, including those from other libraries.
*
* Structured log messages (using [func`GLib`.log_structured] and
* [func`GLib`.log_structured_array]) are fatal only if the default log writer is used;
* otherwise it is up to the writer function to determine which log messages
* are fatal. See [Using Structured Logging](logging.html#using-structured-logging).
* @param fatal_mask the mask containing bits set for each level of error which is to be fatal
* @returns the old fatal mask
*/
function log_set_always_fatal(fatal_mask: LogLevelFlags | null): LogLevelFlags;
/**
* Enable or disable debug output from the GLib logging system for all domains.
*
* This value interacts disjunctively with `G_MESSAGES_DEBUG`, `DEBUG_INVOCATION` and
* [func`GLib`.log_writer_default_set_debug_domains] — if any of them would allow
* a debug message to be outputted, it will be.
*
* Note that this should not be used from within library code to enable debug
* output — it is intended for external use.
* @param enabled `TRUE` to enable debug output, `FALSE` otherwise
*/
function log_set_debug_enabled(enabled: boolean): void;
/**
* Sets the log levels which are fatal in the given domain.
*
* [flags`GLib`.LogLevelFlags.LEVEL_ERROR] is always fatal.
*
* This has no effect on structured log messages (using [func`GLib`.log_structured] or
* [func`GLib`.log_structured_array]). To change the fatal behaviour for specific log
* messages, programs must install a custom log writer function using
* [func`GLib`.log_set_writer_func]. See
* [Using Structured Logging](logging.html#using-structured-logging).
*
* This function is mostly intended to be used with
* [flags`GLib`.LogLevelFlags.LEVEL_CRITICAL]. You should typically not set
* [flags`GLib`.LogLevelFlags.LEVEL_WARNING], [flags`GLib`.LogLevelFlags.LEVEL_MESSAGE], [flags`GLib`.LogLevelFlags.LEVEL_INFO] or
* [flags`GLib`.LogLevelFlags.LEVEL_DEBUG] as fatal except inside of test programs.
* @param log_domain the log domain
* @param fatal_mask the new fatal mask
* @returns the old fatal mask for the log domain
*/
function log_set_fatal_mask(log_domain: string, fatal_mask: LogLevelFlags | null): LogLevelFlags;
/**
* Like [func`GLib`.log_set_handler], but takes a destroy notify for the `user_data`.
*
* This has no effect if structured logging is enabled; see
* [Using Structured Logging](logging.html#using-structured-logging).
*
* The `log_domain` parameter can be set to `NULL` or an empty string to use the default
* application domain.
* @param log_domain the log domain application domain
* @param log_levels the log levels to apply the log handler for. To handle fatal and recursive messages as well, combine the log levels with the [flags@GLib.LogLevelFlags.FLAG_FATAL] and [flags@GLib.LogLevelFlags.FLAG_RECURSION] bit flags.
* @param log_func the log handler function
* @returns the ID of the new handler
*/
function log_set_handler(
log_domain: string | null,
log_levels: LogLevelFlags | null,
log_func: LogFunc,
): number;
/**
* Set a writer function which will be called to format and write out each log
* message.
*
* Each program should set a writer function, or the default writer
* ([func`GLib`.log_writer_default]) will be used.
*
* Libraries **must not** call this function — only programs are allowed to
* install a writer function, as there must be a single, central point where
* log messages are formatted and outputted.
*
* There can only be one writer function. It is an error to set more than one.
* @param func log writer function, which must not be `NULL`
*/
function log_set_writer_func(func: LogWriterFunc): void;
/**
* Log a message with structured data.
*
* The message will be passed through to the log writer set by the application
* using [func`GLib`.log_set_writer_func]. If the
* message is fatal (i.e. its log level is [flags`GLib`.LogLevelFlags.LEVEL_ERROR]), the program will
* be aborted at the end of this function.
*
* See [func`GLib`.log_structured] for more documentation.
*
* This assumes that `log_level` is already present in `fields` (typically as the
* `PRIORITY` field).
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param fields keyvalue pairs of structured data to add to the log message
*/
function log_structured_array(log_level: LogLevelFlags | null, fields: LogField[]): void;
/**
* Log a message with structured data, accepting the data within a [type`GLib`.Variant].
*
* This version is especially useful for use in other languages, via introspection.
*
* The only mandatory item in the `fields` dictionary is the `"MESSAGE"` which must
* contain the text shown to the user.
*
* The values in the `fields` dictionary are likely to be of type `G_VARIANT_TYPE_STRING`.
* Array of bytes (`G_VARIANT_TYPE_BYTESTRING`) is also
* supported. In this case the message is handled as binary and will be forwarded
* to the log writer as such. The size of the array should not be higher than
* `G_MAXSSIZE`. Otherwise it will be truncated to this size. For other types
* [method`GLib`.Variant.print] will be used to convert the value into a string.
*
* For more details on its usage and about the parameters, see [func`GLib`.log_structured].
* @param log_domain log domain, usually `G_LOG_DOMAIN`
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param fields a dictionary ([type@GLib.Variant] of the type `G_VARIANT_TYPE_VARDICT`) containing the key-value pairs of message data.
*/
function log_variant(log_domain: string | null, log_level: LogLevelFlags | null, fields: Variant): void;
/**
* Format a structured log message and output it to the default log destination
* for the platform.
*
* On Linux, this is typically the systemd journal, falling
* back to `stdout` or `stderr` if running from the terminal or if output is
* being redirected to a file.
*
* Support for other platform-specific logging mechanisms may be added in
* future. Distributors of GLib may modify this function to impose their own
* (documented) platform-specific log writing policies.
*
* This is suitable for use as a [type`GLib`.LogWriterFunc], and is the default writer used
* if no other is set using [func`GLib`.log_set_writer_func].
*
* As with [func`GLib`.log_default_handler], this function drops debug and informational
* messages unless their log domain (or `all`) is listed in the space-separated
* `G_MESSAGES_DEBUG` environment variable, or `DEBUG_INVOCATION=1` is set in
* the environment, or set at runtime by [func`GLib`.log_writer_default_set_debug_domains].
*
* [func`GLib`.log_writer_default] uses the mask set by [func`GLib`.log_set_always_fatal] to
* determine which messages are fatal. When using a custom writer function instead it is
* up to the writer function to determine which log messages are fatal.
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param fields keyvalue pairs of structured data forming the log message
* @param user_data user data passed to [func@GLib.log_set_writer_func]
* @returns [enum@GLib.LogWriterOutput.HANDLED] on success, [enum@GLib.LogWriterOutput.UNHANDLED] otherwise
*/
function log_writer_default(
log_level: LogLevelFlags | null,
fields: LogField[],
user_data?: any | null,
): LogWriterOutput;
/**
* Reset the list of domains to be logged, that might be initially set by the
* `G_MESSAGES_DEBUG` or `DEBUG_INVOCATION` environment variables.
*
* This function is thread-safe.
* @param domains `NULL`-terminated array with domains to be printed. `NULL` or an array with no values means none. Array with a single value `"all"` means all.
*/
function log_writer_default_set_debug_domains(domains?: string | null): void;
/**
* Configure whether the built-in log functions will output all log messages to
* `stderr`.
*
* The built-in log functions are [func`GLib`.log_default_handler] for the
* old-style API, and both [func`GLib`.log_writer_default] and
* [func`GLib`.log_writer_standard_streams] for the structured API.
*
* By default, log messages of levels [flags`GLib`.LogLevelFlags.LEVEL_INFO] and
* [flags`GLib`.LogLevelFlags.LEVEL_DEBUG] are sent to `stdout`, and other log messages are
* sent to `stderr`. This is problematic for applications that intend
* to reserve `stdout` for structured output such as JSON or XML.
*
* This function sets global state. It is not thread-aware, and should be
* called at the very start of a program, before creating any other threads
* or creating objects that could create worker threads of their own.
* @param use_stderr If `TRUE`, use `stderr` for log messages that would normally have appeared on `stdout`
*/
function log_writer_default_set_use_stderr(use_stderr: boolean): void;
/**
* Check whether [func`GLib`.log_writer_default] and [func`GLib`.log_default_handler] would
* ignore a message with the given domain and level.
*
* As with [func`GLib`.log_default_handler], this function drops debug and informational
* messages unless their log domain (or `all`) is listed in the space-separated
* `G_MESSAGES_DEBUG` environment variable, or `DEBUG_INVOCATION=1` is set in
* the environment, or by [func`GLib`.log_writer_default_set_debug_domains].
*
* This can be used when implementing log writers with the same filtering
* behaviour as the default, but a different destination or output format:
*
* ```c
* if (g_log_writer_default_would_drop (log_level, log_domain))
* return G_LOG_WRITER_HANDLED;
* ```
*
*
* or to skip an expensive computation if it is only needed for a debugging
* message, and `G_MESSAGES_DEBUG` and `DEBUG_INVOCATION` are not set:
*
* ```c
* if (!g_log_writer_default_would_drop (G_LOG_LEVEL_DEBUG, G_LOG_DOMAIN))
* {
* g_autofree gchar *result = expensive_computation (my_object);
*
* g_debug ("my_object result: %s", result);
* }
* ```
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param log_domain log domain
* @returns `TRUE` if the log message would be dropped by GLibs default log handlers
*/
function log_writer_default_would_drop(log_level: LogLevelFlags | null, log_domain?: string | null): boolean;
/**
* Format a structured log message as a string suitable for outputting to the
* terminal (or elsewhere).
*
* This will include the values of all fields it knows
* how to interpret, which includes `MESSAGE` and `GLIB_DOMAIN` (see the
* documentation for [func`GLib`.log_structured]). It does not include values from
* unknown fields.
*
* The returned string does **not** have a trailing new-line character. It is
* encoded in the character set of the current locale, which is not necessarily
* UTF-8.
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param fields keyvalue pairs of structured data forming the log message
* @param use_color `TRUE` to use [ANSI color escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) when formatting the message, `FALSE` to not
* @returns string containing the formatted log message, in the character set of the current locale
*/
function log_writer_format_fields(
log_level: LogLevelFlags | null,
fields: LogField[],
use_color: boolean,
): string;
/**
* Check whether the given `output_fd` file descriptor is a connection to the
* systemd journal, or something else (like a log file or `stdout` or
* `stderr`).
*
* Invalid file descriptors are accepted and return `FALSE`, which allows for
* the following construct without needing any additional error handling:
* ```c
* is_journald = g_log_writer_is_journald (fileno (stderr));
* ```
* @param output_fd output file descriptor to check
* @returns `TRUE` if @output_fd points to the journal, `FALSE` otherwise
*/
function log_writer_is_journald(output_fd: number): boolean;
/**
* Format a structured log message and send it to the systemd journal as a set
* of keyvalue pairs.
*
* All fields are sent to the journal, but if a field has
* length zero (indicating program-specific data) then only its key will be
* sent.
*
* This is suitable for use as a [type`GLib`.LogWriterFunc].
*
* If GLib has been compiled without systemd support, this function is still
* defined, but will always return [enum`GLib`.LogWriterOutput.UNHANDLED].
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param fields keyvalue pairs of structured data forming the log message
* @param user_data user data passed to [func@GLib.log_set_writer_func]
* @returns [enum@GLib.LogWriterOutput.HANDLED] on success, [enum@GLib.LogWriterOutput.UNHANDLED] otherwise
*/
function log_writer_journald(
log_level: LogLevelFlags | null,
fields: LogField[],
user_data?: any | null,
): LogWriterOutput;
/**
* Format a structured log message and print it to either `stdout` or `stderr`,
* depending on its log level.
*
* [flags`GLib`.LogLevelFlags.LEVEL_INFO] and [flags`GLib`.LogLevelFlags.LEVEL_DEBUG] messages
* are sent to `stdout`, or to `stderr` if requested by
* [func`GLib`.log_writer_default_set_use_stderr];
* all other log levels are sent to `stderr`. Only fields
* which are understood by this function are included in the formatted string
* which is printed.
*
* If the output stream supports
* [ANSI color escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code),
* they will be used in the output.
*
* A trailing new-line character is added to the log message when it is printed.
*
* This is suitable for use as a [type`GLib`.LogWriterFunc].
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param fields keyvalue pairs of structured data forming the log message
* @param user_data user data passed to [func@GLib.log_set_writer_func]
* @returns [enum@GLib.LogWriterOutput.HANDLED] on success, [enum@GLib.LogWriterOutput.UNHANDLED] otherwise
*/
function log_writer_standard_streams(
log_level: LogLevelFlags | null,
fields: LogField[],
user_data?: any | null,
): LogWriterOutput;
/**
* Check whether the given `output_fd` file descriptor supports
* [ANSI color escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code).
*
* If so, they can safely be used when formatting log messages.
* @param output_fd output file descriptor to check
* @returns `TRUE` if ANSI color escapes are supported, `FALSE` otherwise
*/
function log_writer_supports_color(output_fd: number): boolean;
/**
* Format a structured log message and send it to the syslog daemon. Only fields
* which are understood by this function are included in the formatted string
* which is printed.
*
* Log facility will be defined via the SYSLOG_FACILITY field and accepts the following
* values: "auth", "daemon", and "user". If SYSLOG_FACILITY is not specified, LOG_USER
* facility will be used.
*
* This is suitable for use as a [type`GLib`.LogWriterFunc].
*
* If syslog is not supported, this function is still defined, but will always
* return [enum`GLib`.LogWriterOutput.UNHANDLED].
* @param log_level log level, either from [type@GLib.LogLevelFlags], or a user-defined level
* @param fields keyvalue pairs of structured data forming the log message
* @param user_data user data passed to [func@GLib.log_set_writer_func]
* @returns [enum@GLib.LogWriterOutput.HANDLED] on success, [enum@GLib.LogWriterOutput.UNHANDLED] otherwise
*/
function log_writer_syslog(
log_level: LogLevelFlags | null,
fields: LogField[],
user_data?: any | null,
): LogWriterOutput;
/**
* A wrapper for the POSIX lstat() function. The lstat() function is
* like stat() except that in the case of symbolic links, it returns
* information about the symbolic link itself and not the file that it
* refers to. If the system does not support symbolic links g_lstat()
* is identical to g_stat().
*
* See your C library manual for more details about lstat().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param buf a pointer to a stat struct, which will be filled with the file information
* @returns 0 if the information was successfully retrieved, -1 if an error occurred
*/
function lstat(filename: string, buf: StatBuf): number;
/**
* Returns the global-default main context. This is the main context
* used for main loop functions when a main loop is not explicitly
* specified, and corresponds to the "main" main loop. See also
* [func`GLib`.MainContext.get_thread_default].
* @returns the global-default main context.
*/
function main_context_default(): MainContext;
/**
* Gets the thread-default #GMainContext for this thread. Asynchronous
* operations that want to be able to be run in contexts other than
* the default one should call this method or
* [func`GLib`.MainContext.ref_thread_default] to get a
* [struct`GLib`.MainContext] to add their [struct`GLib`.Source]s to. (Note that
* even in single-threaded programs applications may sometimes want to
* temporarily push a non-default context, so it is not safe to assume that
* this will always return %NULL if you are running in the default thread.)
*
* If you need to hold a reference on the context, use
* [func`GLib`.MainContext.ref_thread_default] instead.
* @returns the thread-default #GMainContext, or %NULL if the thread-default context is the global-default main context.
*/
function main_context_get_thread_default(): MainContext | null;
/**
* Gets the thread-default [struct`GLib`.MainContext] for this thread, as with
* [func`GLib`.MainContext.get_thread_default], but also adds a reference to
* it with [method`GLib`.MainContext.ref]. In addition, unlike
* [func`GLib`.MainContext.get_thread_default], if the thread-default context
* is the global-default context, this will return that
* [struct`GLib`.MainContext] (with a ref added to it) rather than returning
* %NULL.
* @returns the thread-default #GMainContext. Unref with [method@GLib.MainContext.unref] when you are done with it.
*/
function main_context_ref_thread_default(): MainContext;
/**
* Returns the currently firing source for this thread.
* @returns The currently firing source or %NULL.
*/
function main_current_source(): Source | null;
/**
* Returns the depth of the stack of calls to
* [method`GLib`.MainContext.dispatch] on any #GMainContext in the current thread.
* That is, when called from the toplevel, it gives 0. When
* called from within a callback from [method`GLib`.MainContext.iteration]
* (or [method`GLib`.MainLoop.run], etc.) it returns 1. When called from within
* a callback to a recursive call to [method`GLib`.MainContext.iteration],
* it returns 2. And so forth.
*
* This function is useful in a situation like the following:
* Imagine an extremely simple "garbage collected" system.
*
*
* ```c
* static GList *free_list;
*
* gpointer
* allocate_memory (gsize size)
* {
* gpointer result = g_malloc (size);
* free_list = g_list_prepend (free_list, result);
* return result;
* }
*
* void
* free_allocated_memory (void)
* {
* GList *l;
* for (l = free_list; l; l = l->next);
* g_free (l->data);
* g_list_free (free_list);
* free_list = NULL;
* }
*
* [...]
*
* while (TRUE);
* {
* g_main_context_iteration (NULL, TRUE);
* free_allocated_memory();
* }
* ```
*
*
* This works from an application, however, if you want to do the same
* thing from a library, it gets more difficult, since you no longer
* control the main loop. You might think you can simply use an idle
* function to make the call to free_allocated_memory(), but that
* doesn't work, since the idle function could be called from a
* recursive callback. This can be fixed by using [func`GLib`.main_depth]
*
*
* ```c
* gpointer
* allocate_memory (gsize size)
* {
* FreeListBlock *block = g_new (FreeListBlock, 1);
* block->mem = g_malloc (size);
* block->depth = g_main_depth ();
* free_list = g_list_prepend (free_list, block);
* return block->mem;
* }
*
* void
* free_allocated_memory (void)
* {
* GList *l;
*
* int depth = g_main_depth ();
* for (l = free_list; l; );
* {
* GList *next = l->next;
* FreeListBlock *block = l->data;
* if (block->depth > depth)
* {
* g_free (block->mem);
* g_free (block);
* free_list = g_list_delete_link (free_list, l);
* }
*
* l = next;
* }
* }
* ```
*
*
* There is a temptation to use [func`GLib`.main_depth] to solve
* problems with reentrancy. For instance, while waiting for data
* to be received from the network in response to a menu item,
* the menu item might be selected again. It might seem that
* one could make the menu item's callback return immediately
* and do nothing if [func`GLib`.main_depth] returns a value greater than 1.
* However, this should be avoided since the user then sees selecting
* the menu item do nothing. Furthermore, you'll find yourself adding
* these checks all over your code, since there are doubtless many,
* many things that the user could do. Instead, you can use the
* following techniques:
*
* 1. Use gtk_widget_set_sensitive() or modal dialogs to prevent
* the user from interacting with elements while the main
* loop is recursing.
*
* 2. Avoid main loop recursion in situations where you can't handle
* arbitrary callbacks. Instead, structure your code so that you
* simply return to the main loop and then get called again when
* there is more work to do.
* @returns The main loop recursion level in the current thread
*/
function main_depth(): number;
/**
* Allocates `n_bytes` bytes of memory.
* If `n_bytes` is 0 it returns %NULL.
*
* If the allocation fails (because the system is out of memory),
* the program is terminated.
* @param n_bytes the number of bytes to allocate
* @returns a pointer to the allocated memory
*/
function malloc(n_bytes: number): any | null;
/**
* Allocates `n_bytes` bytes of memory, initialized to 0's.
* If `n_bytes` is 0 it returns %NULL.
*
* If the allocation fails (because the system is out of memory),
* the program is terminated.
* @param n_bytes the number of bytes to allocate
* @returns a pointer to the allocated memory
*/
function malloc0(n_bytes: number): any | null;
/**
* This function is similar to g_malloc0(), allocating (`n_blocks` * `n_block_bytes)` bytes,
* but care is taken to detect possible overflow during multiplication.
*
* If the allocation fails (because the system is out of memory),
* the program is terminated.
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @returns a pointer to the allocated memory
*/
function malloc0_n(n_blocks: number, n_block_bytes: number): any | null;
/**
* This function is similar to g_malloc(), allocating (`n_blocks` * `n_block_bytes)` bytes,
* but care is taken to detect possible overflow during multiplication.
*
* If the allocation fails (because the system is out of memory),
* the program is terminated.
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @returns a pointer to the allocated memory
*/
function malloc_n(n_blocks: number, n_block_bytes: number): any | null;
function markup_error_quark(): Quark;
/**
* Escapes text so that the markup parser will parse it verbatim.
* Less than, greater than, ampersand, etc. are replaced with the
* corresponding entities. This function would typically be used
* when writing out a file to be parsed with the markup parser.
*
* Note that this function doesn't protect whitespace and line endings
* from being processed according to the XML rules for normalization
* of line endings and attribute values.
*
* Note also that this function will produce character references in
* the range of &#x1; ... &#x1f; for all control sequences
* except for tabstop, newline and carriage return. The character
* references in this range are not valid XML 1.0, but they are
* valid XML 1.1 and will be accepted by the GMarkup parser.
* @param text some valid UTF-8 text
* @param length length of @text in bytes, or -1 if the text is nul-terminated
* @returns a newly allocated string with the escaped text
*/
function markup_escape_text(text: string, length: number): string;
function mem_chunk_info(): void;
/**
* Checks whether the allocator used by g_malloc() is the system's
* malloc implementation. If it returns %TRUE memory allocated with
* malloc() can be used interchangeably with memory allocated using g_malloc().
* This function is useful for avoiding an extra copy of allocated memory returned
* by a non-GLib-based API.
* @returns if %TRUE, malloc() and g_malloc() can be mixed.
*/
function mem_is_system_malloc(): boolean;
/**
* GLib used to support some tools for memory profiling, but this
* no longer works. There are many other useful tools for memory
* profiling these days which can be used instead.
*/
function mem_profile(): void;
/**
* This function used to let you override the memory allocation function.
* However, its use was incompatible with the use of global constructors
* in GLib and GIO, because those use the GLib allocators before main is
* reached. Therefore this function is now deprecated and is just a stub.
* @param vtable table of memory allocation routines.
*/
function mem_set_vtable(vtable: MemVTable): void;
/**
* Allocates `byte_size` bytes of memory, and copies `byte_size` bytes into it
* from `mem`. If `mem` is `NULL` it returns `NULL`.
* @param mem the memory to copy
* @param byte_size the number of bytes to copy
* @returns a pointer to the newly-allocated copy of the memory
*/
function memdup(mem: any | null, byte_size: number): any | null;
/**
* Allocates `byte_size` bytes of memory, and copies `byte_size` bytes into it
* from `mem`. If `mem` is `NULL` it returns `NULL`.
*
* This replaces [func`GLib`.memdup], which was prone to integer overflows when
* converting the argument from a `gsize` to a `guint`.
* @param mem the memory to copy
* @param byte_size the number of bytes to copy
* @returns a pointer to the newly-allocated copy of the memory
*/
function memdup2(mem: any | null, byte_size: number): any | null;
/**
* A wrapper for the POSIX mkdir() function. The mkdir() function
* attempts to create a directory with the given name and permissions.
* The mode argument is ignored on Windows.
*
* See your C library manual for more details about mkdir().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param mode permissions to use for the newly created directory
* @returns 0 if the directory was successfully created, -1 if an error occurred
*/
function mkdir(filename: string, mode: number): number;
/**
* Create a directory if it doesn't already exist. Create intermediate
* parent directories as needed, too.
* @param pathname a pathname in the GLib file name encoding
* @param mode permissions to use for newly created directories
* @returns 0 if the directory already exists, or was successfully created. Returns -1 if an error occurred, with errno set.
*/
function mkdir_with_parents(pathname: string, mode: number): number;
function node_pop_allocator(): void;
function node_push_allocator(allocator: Allocator): void;
/**
* Set the pointer at the specified location to %NULL.
* @param nullify_location the memory address of the pointer.
*/
function nullify_pointer(nullify_location: any): void;
function number_parser_error_quark(): Quark;
/**
* Prompts the user with
* `[E]xit, [H]alt, show [S]tack trace or [P]roceed`.
* This function is intended to be used for debugging use only.
* The following example shows how it can be used together with
* the g_log() functions.
*
*
* ```c
* #include <glib.h>
*
* static void
* log_handler (const gchar *log_domain,
* GLogLevelFlags log_level,
* const gchar *message,
* gpointer user_data)
* {
* g_log_default_handler (log_domain, log_level, message, user_data);
*
* g_on_error_query (MY_PROGRAM_NAME);
* }
*
* int
* main (int argc, char *argv[])
* {
* g_log_set_handler (MY_LOG_DOMAIN,
* G_LOG_LEVEL_WARNING |
* G_LOG_LEVEL_ERROR |
* G_LOG_LEVEL_CRITICAL,
* log_handler,
* NULL);
* ...
* ```
*
*
* If "[E]xit" is selected, the application terminates with a call
* to _exit(0).
*
* If "[S]tack" trace is selected, g_on_error_stack_trace() is called.
* This invokes gdb, which attaches to the current process and shows
* a stack trace. The prompt is then shown again.
*
* If "[P]roceed" is selected, the function returns.
*
* This function may cause different actions on non-UNIX platforms.
*
* On Windows consider using the `G_DEBUGGER` environment
* variable (see [Running GLib Applications](glib-running.html)) and
* calling g_on_error_stack_trace() instead.
* @param prg_name the program name, needed by gdb for the "[S]tack trace" option. If @prg_name is %NULL, g_get_prgname() is called to get the program name (which will work correctly if gdk_init() or gtk_init() has been called)
*/
function on_error_query(prg_name: string): void;
/**
* Invokes gdb, which attaches to the current process and shows a
* stack trace. Called by g_on_error_query() when the "[S]tack trace"
* option is selected. You can get the current process's program name
* with g_get_prgname(), assuming that you have called gtk_init() or
* gdk_init().
*
* This function may cause different actions on non-UNIX platforms.
*
* When running on Windows, this function is *not* called by
* g_on_error_query(). If called directly, it will raise an
* exception, which will crash the program. If the `G_DEBUGGER` environment
* variable is set, a debugger will be invoked to attach and
* handle that exception (see [Running GLib Applications](glib-running.html)).
* @param prg_name the program name, needed by gdb for the "[S]tack trace" option, or `NULL` to use a default string
*/
function on_error_stack_trace(prg_name?: string | null): void;
/**
* Function to be called when starting a critical initialization
* section. The argument `location` must point to a static
* 0-initialized variable that will be set to a value other than 0 at
* the end of the initialization section. In combination with
* g_once_init_leave() and the unique address `value_location,` it can
* be ensured that an initialization section will be executed only once
* during a program's life time, and that concurrent threads are
* blocked until initialization completed. To be used in constructs
* like this:
*
*
* ```c
* static gsize initialization_value = 0;
*
* if (g_once_init_enter (&initialization_value))
* {
* gsize setup_value = 42; // initialization code here
*
* g_once_init_leave (&initialization_value, setup_value);
* }
*
* // use initialization_value here
* ```
*
*
* While `location` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param location location of a static initializable variable containing 0
* @returns %TRUE if the initialization section should be entered, %FALSE and blocks otherwise
*/
function once_init_enter(location: any): [boolean, any];
function once_init_enter_impl(location: number): boolean;
/**
* This functions behaves in the same way as g_once_init_enter(), but can
* can be used to initialize pointers (or #guintptr) instead of #gsize.
*
*
* ```c
* static MyStruct *interesting_struct = NULL;
*
* if (g_once_init_enter_pointer (&interesting_struct))
* {
* MyStruct *setup_value = allocate_my_struct (); // initialization code here
*
* g_once_init_leave_pointer (&interesting_struct, g_steal_pointer (&setup_value));
* }
*
* // use interesting_struct here
* ```
*
* @param location location of a static initializable variable containing `NULL`
* @returns %TRUE if the initialization section should be entered, %FALSE and blocks otherwise
*/
function once_init_enter_pointer(location: any): boolean;
/**
* Counterpart to g_once_init_enter(). Expects a location of a static
* 0-initialized initialization variable, and an initialization value
* other than 0. Sets the variable to the initialization value, and
* releases concurrent threads blocking in g_once_init_enter() on this
* initialization variable.
*
* While `location` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param location location of a static initializable variable containing 0
* @param result new non-0 value for `*value_location`
*/
function once_init_leave(location: any, result: number): any;
/**
* Counterpart to g_once_init_enter_pointer(). Expects a location of a static
* `NULL`-initialized initialization variable, and an initialization value
* other than `NULL`. Sets the variable to the initialization value, and
* releases concurrent threads blocking in g_once_init_enter_pointer() on this
* initialization variable.
*
* This functions behaves in the same way as g_once_init_leave(), but
* can be used to initialize pointers (or #guintptr) instead of #gsize.
* @param location location of a static initializable variable containing `NULL`
* @param result new non-`NULL` value for `*location`
*/
function once_init_leave_pointer(location: any, result?: any | null): void;
/**
* A wrapper for the POSIX open() function. The open() function is
* used to convert a pathname into a file descriptor.
*
* On POSIX systems file descriptors are implemented by the operating
* system. On Windows, it's the C library that implements open() and
* file descriptors. The actual Win32 API for opening files is quite
* different, see MSDN documentation for CreateFile(). The Win32 API
* uses file handles, which are more randomish integers, not small
* integers like file descriptors.
*
* Because file descriptors are specific to the C library on Windows,
* the file descriptor returned by this function makes sense only to
* functions in the same C library. Thus if the GLib-using code uses a
* different C library than GLib does, the file descriptor returned by
* this function cannot be passed to C library functions like write()
* or read().
*
* See your C library manual for more details about open().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param flags as in open()
* @param mode as in open()
* @returns a new file descriptor, or -1 if an error occurred. The return value can be used exactly like the return value from open().
*/
function open(filename: string, flags: number, mode: number): number;
function option_error_quark(): Quark;
/**
* Parses a string containing debugging options
* into a %guint containing bit flags. This is used
* within GDK and GTK to parse the debug options passed on the
* command line or through environment variables.
*
* If `string` is equal to "all", all flags are set. Any flags
* specified along with "all" in `string` are inverted; thus,
* "all,foo,bar" or "foo,bar,all" sets all flags except those
* corresponding to "foo" and "bar".
*
* If `string` is equal to "help", all the available keys in `keys`
* are printed out to standard error.
* @param string a list of debug options separated by colons, spaces, or commas, or %NULL.
* @param keys pointer to an array of #GDebugKey which associate strings with bit flags.
* @returns the combined set of bit flags.
*/
function parse_debug_string(string: string | null, keys: DebugKey[]): number;
/**
* Compares two path buffers for equality and returns `TRUE`
* if they are equal.
*
* The path inside the paths buffers are not going to be normalized,
* so `X/Y/Z/A/..`, `X/./Y/Z` and `X/Y/Z` are not going to be considered
* equal.
*
* This function can be passed to g_hash_table_new() as the
* `key_equal_func` parameter.
* @param v1 a path buffer to compare
* @param v2 a path buffer to compare
* @returns `TRUE` if the two path buffers are equal, and `FALSE` otherwise
*/
function path_buf_equal(v1: any, v2: any): boolean;
/**
* Gets the last component of the filename.
*
* If `file_name` ends with a directory separator it gets the component
* before the last slash. If `file_name` consists only of directory
* separators (and on Windows, possibly a drive letter), a single
* separator is returned. If `file_name` is empty, it gets ".".
* @param file_name the name of the file
* @returns a newly allocated string containing the last component of the filename
*/
function path_get_basename(file_name: string): string;
/**
* Gets the directory components of a file name. For example, the directory
* component of `/usr/bin/test` is `/usr/bin`. The directory component of `/`
* is `/`.
*
* If the file name has no directory components "." is returned.
* The returned string should be freed when no longer needed.
* @param file_name the name of the file
* @returns the directory components of the file
*/
function path_get_dirname(file_name: string): string;
/**
* Returns %TRUE if the given `file_name` is an absolute file name.
* Note that this is a somewhat vague concept on Windows.
*
* On POSIX systems, an absolute file name is well-defined. It always
* starts from the single root directory. For example "/usr/local".
*
* On Windows, the concepts of current drive and drive-specific
* current directory introduce vagueness. This function interprets as
* an absolute file name one that either begins with a directory
* separator such as "\Users\tml" or begins with the root on a drive,
* for example "C:\Windows". The first case also includes UNC paths
* such as "\\\\myserver\docs\foo". In all cases, either slashes or
* backslashes are accepted.
*
* Note that a file name relative to the current drive root does not
* truly specify a file uniquely over time and across processes, as
* the current drive is a per-process value and can be changed.
*
* File names relative the current directory on some specific drive,
* such as "D:foo/bar", are not interpreted as absolute by this
* function, but they obviously are not relative to the normal current
* directory as returned by getcwd() or g_get_current_dir()
* either. Such paths should be avoided, or need to be handled using
* Windows-specific code.
* @param file_name a file name
* @returns %TRUE if @file_name is absolute
*/
function path_is_absolute(file_name: string): boolean;
/**
* Returns a pointer into `file_name` after the root component,
* i.e. after the "/" in UNIX or "C:\" under Windows. If `file_name`
* is not an absolute path it returns %NULL.
* @param file_name a file name
* @returns a pointer into @file_name after the root component
*/
function path_skip_root(file_name: string): string | null;
/**
* Matches a string against a pattern given as a string.
*
* If this
* function is to be called in a loop, its more efficient to compile
* the pattern once with [ctor`GLib`.PatternSpec.new] and call
* [method`GLib`.PatternSpec.match_string] repeatedly.
* @param pattern the UTF-8 encoded pattern
* @param string the UTF-8 encoded string to match
* @returns %TRUE if @string matches @pspec
*/
function pattern_match_simple(pattern: string, string: string): boolean;
/**
* This is equivalent to g_bit_lock, but working on pointers (or other
* pointer-sized values).
*
* For portability reasons, you may only lock on the bottom 32 bits of
* the pointer.
*
* While `address` has a `volatile` qualifier, this is a historical
* artifact and the argument passed to it should not be `volatile`.
* @param address a pointer to a #gpointer-sized value
* @param lock_bit a bit value between 0 and 31
*/
function pointer_bit_lock(address: any, lock_bit: number): void;
/**
* This is equivalent to g_bit_lock, but working on pointers (or other
* pointer-sized values).
*
* For portability reasons, you may only lock on the bottom 32 bits of
* the pointer.
* @param address a pointer to a #gpointer-sized value
* @param lock_bit a bit value between 0 and 31
*/
function pointer_bit_lock_and_get(address: any, lock_bit: number): never;
/**
* This mangles `ptr` as g_pointer_bit_lock() and g_pointer_bit_unlock()
* do.
* @param ptr the pointer to mask
* @param lock_bit the bit to set/clear. If set to `G_MAXUINT`, the lockbit is taken from @preserve_ptr or @ptr (depending on @preserve_mask).
* @param set whether to set (lock) the bit or unset (unlock). This has no effect, if @lock_bit is set to `G_MAXUINT`.
* @param preserve_mask if non-zero, a bit-mask for @preserve_ptr. The @preserve_mask bits from @preserve_ptr are set in the result. Note that the @lock_bit bit will be always set according to @set, regardless of @preserve_mask and @preserve_ptr (unless @lock_bit is `G_MAXUINT`).
* @param preserve_ptr if @preserve_mask is non-zero, the bits from this pointer are set in the result.
* @returns the mangled pointer.
*/
function pointer_bit_lock_mask_ptr(
ptr: any | null,
lock_bit: number,
set: boolean,
preserve_mask: never,
preserve_ptr?: any | null,
): any | null;
/**
* This is equivalent to g_bit_trylock(), but working on pointers (or
* other pointer-sized values).
*
* For portability reasons, you may only lock on the bottom 32 bits of
* the pointer.
*
* While `address` has a `volatile` qualifier, this is a historical
* artifact and the argument passed to it should not be `volatile`.
* @param address a pointer to a #gpointer-sized value
* @param lock_bit a bit value between 0 and 31
* @returns %TRUE if the lock was acquired
*/
function pointer_bit_trylock(address: any, lock_bit: number): boolean;
/**
* This is equivalent to g_bit_unlock, but working on pointers (or other
* pointer-sized values).
*
* For portability reasons, you may only lock on the bottom 32 bits of
* the pointer.
*
* While `address` has a `volatile` qualifier, this is a historical
* artifact and the argument passed to it should not be `volatile`.
* @param address a pointer to a #gpointer-sized value
* @param lock_bit a bit value between 0 and 31
*/
function pointer_bit_unlock(address: any, lock_bit: number): void;
/**
* This is equivalent to g_pointer_bit_unlock() and atomically setting
* the pointer value.
*
* Note that the lock bit will be cleared from the pointer. If the unlocked
* pointer that was set is not identical to `ptr,` an assertion fails. In other
* words, `ptr` must have `lock_bit` unset. This also means, you usually can
* only use this on the lowest bits.
* @param address a pointer to a #gpointer-sized value
* @param lock_bit a bit value between 0 and 31
* @param ptr the new pointer value to set
* @param preserve_mask if non-zero, those bits of the current pointer in @address are preserved. Note that the @lock_bit bit will be always set according to @set, regardless of @preserve_mask and the currently set value in @address.
*/
function pointer_bit_unlock_and_set(
address: any,
lock_bit: number,
ptr: any | null,
preserve_mask: never,
): void;
/**
* Polls `fds,` as with the poll() system call, but portably. (On
* systems that don't have poll(), it is emulated using select().)
* This is used internally by #GMainContext, but it can be called
* directly if you need to block until a file descriptor is ready, but
* don't want to run the full main loop.
*
* Each element of `fds` is a #GPollFD describing a single file
* descriptor to poll. The `fd` field indicates the file descriptor,
* and the `events` field indicates the events to poll for. On return,
* the `revents` fields will be filled with the events that actually
* occurred.
*
* On POSIX systems, the file descriptors in `fds` can be any sort of
* file descriptor, but the situation is much more complicated on
* Windows. If you need to use g_poll() in code that has to run on
* Windows, the easiest solution is to construct all of your
* #GPollFDs with g_io_channel_win32_make_pollfd().
* @param fds file descriptors to poll
* @param nfds the number of file descriptors in @fds
* @param timeout amount of time to wait, in milliseconds, or -1 to wait forever
* @returns the number of entries in @fds whose @revents fields were filled in, or 0 if the operation timed out, or -1 on error or if the call was interrupted.
*/
function poll(fds: PollFD, nfds: number, timeout: number): number;
/**
* Prefixes `prefix` to an existing error message. If `err` or `*err` is
* %NULL (i.e.: no error variable) then do nothing.
* @param err a return location for a #GError, or %NULL
* @param prefix string to prefix @err with
*/
function prefix_error_literal(err: (Error | null) | null, prefix: string): (Error | null) | null;
/**
* If `dest` is %NULL, free `src;` otherwise, moves `src` into `*dest`.
* The error variable `dest` points to must be %NULL.
*
* `src` must be non-%NULL.
*
* Note that `src` is no longer valid after this call. If you want
* to keep using the same GError*, you need to set it to %NULL
* after calling this function on it.
* @param src error to move into the return location
*/
function propagate_error(src: Error): Error | null;
/**
* This is just like the standard C [`qsort()`](man:qsort(3)) function, but
* the comparison routine accepts a user data argument
* (like [`qsort_r()`](man:qsort_r(3))).
*
* Unlike `qsort()`, this is guaranteed to be a stable sort (since GLib 2.32).
* @param pbase start of array to sort
* @param total_elems elements in the array
* @param size size of each element
* @param compare_func function to compare elements
*/
function qsort_with_data(pbase: any, total_elems: number, size: number, compare_func: CompareDataFunc): void;
/**
* Gets the #GQuark identifying the given (static) string. If the
* string does not currently have an associated #GQuark, a new #GQuark
* is created, linked to the given string.
*
* Note that this function is identical to g_quark_from_string() except
* that if a new #GQuark is created the string itself is used rather
* than a copy. This saves memory, but can only be used if the string
* will continue to exist until the program terminates. It can be used
* with statically allocated strings in the main program, but not with
* statically allocated memory in dynamically loaded modules, if you
* expect to ever unload the module again (e.g. do not use this
* function in GTK theme engines).
*
* This function must not be used before library constructors have finished
* running. In particular, this means it cannot be used to initialize global
* variables in C++.
* @param string a string
* @returns the #GQuark identifying the string, or 0 if @string is %NULL
*/
function quark_from_static_string(string?: string | null): Quark;
/**
* Gets the #GQuark identifying the given string. If the string does
* not currently have an associated #GQuark, a new #GQuark is created,
* using a copy of the string.
*
* This function must not be used before library constructors have finished
* running. In particular, this means it cannot be used to initialize global
* variables in C++.
* @param string a string
* @returns the #GQuark identifying the string, or 0 if @string is %NULL
*/
function quark_from_string(string?: string | null): Quark;
/**
* Gets the string associated with the given #GQuark.
* @param quark a #GQuark.
* @returns the string associated with the #GQuark
*/
function quark_to_string(quark: Quark): string;
/**
* Gets the #GQuark associated with the given string, or 0 if string is
* %NULL or it has no associated #GQuark.
*
* If you want the GQuark to be created if it doesn't already exist,
* use g_quark_from_string() or g_quark_from_static_string().
*
* This function must not be used before library constructors have finished
* running.
* @param string a string
* @returns the #GQuark associated with the string, or 0 if @string is %NULL or there is no #GQuark associated with it
*/
function quark_try_string(string?: string | null): Quark;
/**
* Returns a random #gdouble equally distributed over the range [0..1).
* @returns a random number
*/
function random_double(): number;
/**
* Returns a random #gdouble equally distributed over the range
* [`begin`..`end)`.
* @param begin lower closed bound of the interval
* @param end upper open bound of the interval
* @returns a random number
*/
function random_double_range(begin: number, end: number): number;
/**
* Return a random #guint32 equally distributed over the range
* [0..2^32-1].
* @returns a random number
*/
function random_int(): number;
/**
* Returns a random #gint32 equally distributed over the range
* [`begin`..`end-1`].
* @param begin lower closed bound of the interval
* @param end upper open bound of the interval
* @returns a random number
*/
function random_int_range(begin: number, end: number): number;
/**
* Sets the seed for the global random number generator, which is used
* by the g_random_* functions, to `seed`.
* @param seed a value to reinitialize the global random number generator
*/
function random_set_seed(seed: number): void;
/**
* Acquires a reference on the data pointed by `mem_block`.
* @param mem_block a pointer to reference counted data
* @returns a pointer to the data, with its reference count increased
*/
function rc_box_acquire(mem_block: any): any;
/**
* Allocates `block_size` bytes of memory, and adds reference
* counting semantics to it.
*
* The data will be freed when its reference count drops to
* zero.
*
* The allocated data is guaranteed to be suitably aligned for any
* built-in type.
* @param block_size the size of the allocation, must be greater than 0
* @returns a pointer to the allocated memory
*/
function rc_box_alloc(block_size: number): any;
/**
* Allocates `block_size` bytes of memory, and adds reference
* counting semantics to it.
*
* The contents of the returned data is set to zero.
*
* The data will be freed when its reference count drops to
* zero.
*
* The allocated data is guaranteed to be suitably aligned for any
* built-in type.
* @param block_size the size of the allocation, must be greater than 0
* @returns a pointer to the allocated memory
*/
function rc_box_alloc0(block_size: number): any;
/**
* Allocates a new block of data with reference counting
* semantics, and copies `block_size` bytes of `mem_block`
* into it.
* @param block_size the number of bytes to copy, must be greater than 0
* @param mem_block the memory to copy
* @returns a pointer to the allocated memory
*/
function rc_box_dup(block_size: number, mem_block: any): any;
/**
* Retrieves the size of the reference counted data pointed by `mem_block`.
* @param mem_block a pointer to reference counted data
* @returns the size of the data, in bytes
*/
function rc_box_get_size(mem_block: any): number;
/**
* Releases a reference on the data pointed by `mem_block`.
*
* If the reference was the last one, it will free the
* resources allocated for `mem_block`.
* @param mem_block a pointer to reference counted data
*/
function rc_box_release(mem_block: any): void;
/**
* Releases a reference on the data pointed by `mem_block`.
*
* If the reference was the last one, it will call `clear_func`
* to clear the contents of `mem_block,` and then will free the
* resources allocated for `mem_block`.
* @param mem_block a pointer to reference counted data
*/
function rc_box_release_full(mem_block: any): void;
/**
* Reallocates the memory pointed to by `mem,` so that it now has space for
* `n_bytes` bytes of memory. It returns the new address of the memory, which may
* have been moved. `mem` may be %NULL, in which case it's considered to
* have zero-length. `n_bytes` may be 0, in which case %NULL will be returned
* and `mem` will be freed unless it is %NULL.
*
* If the allocation fails (because the system is out of memory),
* the program is terminated.
* @param mem the memory to reallocate
* @param n_bytes new size of the memory in bytes
* @returns the new address of the allocated memory
*/
function realloc(mem: any | null, n_bytes: number): any | null;
/**
* This function is similar to g_realloc(), allocating (`n_blocks` * `n_block_bytes)` bytes,
* but care is taken to detect possible overflow during multiplication.
*
* If the allocation fails (because the system is out of memory),
* the program is terminated.
* @param mem the memory to reallocate
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @returns the new address of the allocated memory
*/
function realloc_n(mem: any | null, n_blocks: number, n_block_bytes: number): any | null;
/**
* Compares the current value of `rc` with `val`.
* @param rc the address of a reference count variable
* @param val the value to compare
* @returns %TRUE if the reference count is the same as the given value
*/
function ref_count_compare(rc: number, val: number): boolean;
/**
* Decreases the reference count.
*
* If %TRUE is returned, the reference count reached 0. After this point, `rc`
* is an undefined state and must be reinitialized with
* g_ref_count_init() to be used again.
* @param rc the address of a reference count variable
* @returns %TRUE if the reference count reached 0, and %FALSE otherwise
*/
function ref_count_dec(rc: number): boolean;
/**
* Increases the reference count.
* @param rc the address of a reference count variable
*/
function ref_count_inc(rc: number): void;
/**
* Initializes a reference count variable to 1.
* @param rc the address of a reference count variable
*/
function ref_count_init(rc: number): void;
/**
* Acquires a reference on a string.
* @param str a reference counted string
* @returns the given string, with its reference count increased
*/
function ref_string_acquire(str: string): string;
/**
* Compares two ref-counted strings for byte-by-byte equality.
*
* It can be passed to [func`GLib`.HashTable.new] as the key equality function,
* and behaves exactly the same as [func`GLib`.str_equal] (or `strcmp()`), but
* can return slightly faster as it can check the string lengths before checking
* all the bytes.
* @param str1 a reference counted string
* @param str2 a reference counted string
* @returns `TRUE` if the strings are equal, otherwise `FALSE`
*/
function ref_string_equal(str1: string, str2: string): boolean;
/**
* Retrieves the length of `str`.
* @param str a reference counted string
* @returns the length of the given string, in bytes
*/
function ref_string_length(str: string): number;
/**
* Creates a new reference counted string and copies the contents of `str`
* into it.
* @param str a NUL-terminated string
* @returns the newly created reference counted string
*/
function ref_string_new(str: string): string;
/**
* Creates a new reference counted string and copies the content of `str`
* into it.
*
* If you call this function multiple times with the same `str,` or with
* the same contents of `str,` it will return a new reference, instead of
* creating a new string.
* @param str a NUL-terminated string
* @returns the newly created reference counted string, or a new reference to an existing string
*/
function ref_string_new_intern(str: string): string;
/**
* Creates a new reference counted string and copies the contents of `str`
* into it, up to `len` bytes.
*
* Since this function does not stop at nul bytes, it is the caller's
* responsibility to ensure that `str` has at least `len` addressable bytes.
* @param str a string
* @param len length of @str to use, or -1 if @str is nul-terminated
* @returns the newly created reference counted string
*/
function ref_string_new_len(str: string, len: number): string;
/**
* Releases a reference on a string; if it was the last reference, the
* resources allocated by the string are freed as well.
* @param str a reference counted string
*/
function ref_string_release(str: string): void;
/**
* Checks whether `replacement` is a valid replacement string
* (see g_regex_replace()), i.e. that all escape sequences in
* it are valid.
*
* If `has_references` is not %NULL then `replacement` is checked
* for pattern references. For instance, replacement text 'foo\n'
* does not contain references and may be evaluated without information
* about actual match, but '\0\1' (whole match followed by first
* subpattern) requires valid #GMatchInfo object.
* @param replacement the replacement string
* @returns whether @replacement is a valid replacement string
*/
function regex_check_replacement(replacement: string): [boolean, boolean];
function regex_error_quark(): Quark;
/**
* Escapes the nul characters in `string` to "\x00". It can be used
* to compile a regex with embedded nul characters.
*
* For completeness, `length` can be -1 for a nul-terminated string.
* In this case the output string will be of course equal to `string`.
* @param string the string to escape
* @param length the length of @string
* @returns a newly-allocated escaped string
*/
function regex_escape_nul(string: string, length: number): string;
/**
* Escapes the special characters used for regular expressions
* in `string,` for instance "a.b*c" becomes "a\.b\*c". This
* function is useful to dynamically generate regular expressions.
*
* `string` can contain nul characters that are replaced with "\0",
* in this case remember to specify the correct length of `string`
* in `length`.
* @param string the string to escape
* @param length the length of @string, in bytes, or -1 if @string is nul-terminated
* @returns a newly-allocated escaped string
*/
function regex_escape_string(string: string, length: number): string;
/**
* Scans for a match in `string` for `pattern`.
*
* This function is equivalent to g_regex_match() but it does not
* require to compile the pattern with g_regex_new(), avoiding some
* lines of code when you need just to do a match without extracting
* substrings, capture counts, and so on.
*
* If this function is to be called on the same `pattern` more than
* once, it's more efficient to compile the pattern once with
* g_regex_new() and then use g_regex_match().
* @param pattern the regular expression
* @param string the string to scan for matches
* @param compile_options compile options for the regular expression, or 0
* @param match_options match options, or 0
* @returns %TRUE if the string matched, %FALSE otherwise
*/
function regex_match_simple(
pattern: string,
string: string,
compile_options: RegexCompileFlags | null,
match_options: RegexMatchFlags | null,
): boolean;
/**
* Breaks the string on the pattern, and returns an array of
* the tokens. If the pattern contains capturing parentheses,
* then the text for each of the substrings will also be returned.
* If the pattern does not match anywhere in the string, then the
* whole string is returned as the first token.
*
* This function is equivalent to g_regex_split() but it does
* not require to compile the pattern with g_regex_new(), avoiding
* some lines of code when you need just to do a split without
* extracting substrings, capture counts, and so on.
*
* If this function is to be called on the same `pattern` more than
* once, it's more efficient to compile the pattern once with
* g_regex_new() and then use g_regex_split().
*
* As a special case, the result of splitting the empty string ""
* is an empty vector, not a vector containing a single string.
* The reason for this special case is that being able to represent
* an empty vector is typically more useful than consistent handling
* of empty elements. If you do need to represent empty elements,
* you'll need to check for the empty string before calling this
* function.
*
* A pattern that can match empty strings splits `string` into
* separate characters wherever it matches the empty string between
* characters. For example splitting "ab c" using as a separator
* "\s*", you will get "a", "b" and "c".
* @param pattern the regular expression
* @param string the string to scan for matches
* @param compile_options compile options for the regular expression, or 0
* @param match_options match options, or 0
* @returns a %NULL-terminated array of strings. Free it using g_strfreev()
*/
function regex_split_simple(
pattern: string,
string: string,
compile_options: RegexCompileFlags | null,
match_options: RegexMatchFlags | null,
): string[];
/**
* Resets the cache used for g_get_user_special_dir(), so
* that the latest on-disk version is used. Call this only
* if you just changed the data on disk yourself.
*
* Due to thread safety issues this may cause leaking of strings
* that were previously returned from g_get_user_special_dir()
* that can't be freed. We ensure to only leak the data for
* the directories that actually changed value though.
*/
function reload_user_special_dirs_cache(): void;
/**
* A wrapper for the POSIX remove() function. The remove() function
* deletes a name from the filesystem.
*
* See your C library manual for more details about how remove() works
* on your system. On Unix, remove() removes also directories, as it
* calls unlink() for files and rmdir() for directories. On Windows,
* although remove() in the C library only works for files, this
* function tries first remove() and then if that fails rmdir(), and
* thus works for both files and directories. Note however, that on
* Windows, it is in general not possible to remove a file that is
* open to some process, or mapped into memory.
*
* If this function fails on Windows you can't infer too much from the
* errno value. rmdir() is tried regardless of what caused remove() to
* fail. Any errno value set by remove() will be overwritten by that
* set by rmdir().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @returns 0 if the file was successfully removed, -1 if an error occurred
*/
function remove(filename: string): number;
/**
* A wrapper for the POSIX rename() function. The rename() function
* renames a file, moving it between directories if required.
*
* See your C library manual for more details about how rename() works
* on your system. It is not possible in general on Windows to rename
* a file that is open to some process.
* @param oldfilename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param newfilename a pathname in the GLib file name encoding
* @returns 0 if the renaming succeeded, -1 if an error occurred
*/
function rename(oldfilename: string, newfilename: string): number;
/**
* A wrapper for the POSIX rmdir() function. The rmdir() function
* deletes a directory from the filesystem.
*
* See your C library manual for more details about how rmdir() works
* on your system.
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @returns 0 if the directory was successfully removed, -1 if an error occurred
*/
function rmdir(filename: string): number;
/**
* Calls `func` for each item in the range (`begin,` `end)` passing
* `user_data` to the function. `func` must not modify the sequence
* itself.
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
* @param func a #GFunc
*/
function sequence_foreach_range(begin: SequenceIter, end: SequenceIter, func: Func): void;
/**
* Returns the data that `iter` points to.
* @param iter a #GSequenceIter
* @returns the data that @iter points to
*/
function sequence_get(iter: SequenceIter): any | null;
/**
* Inserts a new item just before the item pointed to by `iter`.
* @param iter a #GSequenceIter
* @param data the data for the new item
* @returns an iterator pointing to the new item
*/
function sequence_insert_before(iter: SequenceIter, data?: any | null): SequenceIter;
/**
* Moves the item pointed to by `src` to the position indicated by `dest`.
* After calling this function `dest` will point to the position immediately
* after `src`. It is allowed for `src` and `dest` to point into different
* sequences.
* @param src a #GSequenceIter pointing to the item to move
* @param dest a #GSequenceIter pointing to the position to which the item is moved
*/
function sequence_move(src: SequenceIter, dest: SequenceIter): void;
/**
* Inserts the (`begin,` `end)` range at the destination pointed to by `dest`.
* The `begin` and `end` iters must point into the same sequence. It is
* allowed for `dest` to point to a different sequence than the one pointed
* into by `begin` and `end`.
*
* If `dest` is %NULL, the range indicated by `begin` and `end` is
* removed from the sequence. If `dest` points to a place within
* the (`begin,` `end)` range, the range does not move.
* @param dest a #GSequenceIter
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
*/
function sequence_move_range(dest: SequenceIter, begin: SequenceIter, end: SequenceIter): void;
/**
* Finds an iterator somewhere in the range (`begin,` `end)`. This
* iterator will be close to the middle of the range, but is not
* guaranteed to be exactly in the middle.
*
* The `begin` and `end` iterators must both point to the same sequence
* and `begin` must come before or be equal to `end` in the sequence.
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
* @returns a #GSequenceIter pointing somewhere in the (@begin, @end) range
*/
function sequence_range_get_midpoint(begin: SequenceIter, end: SequenceIter): SequenceIter;
/**
* Removes the item pointed to by `iter`. It is an error to pass the
* end iterator to this function.
*
* If the sequence has a data destroy function associated with it, this
* function is called on the data for the removed item.
* @param iter a #GSequenceIter
*/
function sequence_remove(iter: SequenceIter): void;
/**
* Removes all items in the (`begin,` `end)` range.
*
* If the sequence has a data destroy function associated with it, this
* function is called on the data for the removed items.
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
*/
function sequence_remove_range(begin: SequenceIter, end: SequenceIter): void;
/**
* Changes the data for the item pointed to by `iter` to be `data`. If
* the sequence has a data destroy function associated with it, that
* function is called on the existing data that `iter` pointed to.
* @param iter a #GSequenceIter
* @param data new data for the item
*/
function sequence_set(iter: SequenceIter, data?: any | null): void;
/**
* Moves the data pointed to by `iter` to a new position as indicated by
* `cmp_func`. This
* function should be called for items in a sequence already sorted according
* to `cmp_func` whenever some aspect of an item changes so that `cmp_func`
* may return different values for that item.
*
* `cmp_func` is called with two items of the `seq,` and `cmp_data`.
* It should return 0 if the items are equal, a negative value if
* the first item comes before the second, and a positive value if
* the second item comes before the first.
* @param iter A #GSequenceIter
* @param cmp_func the function used to compare items in the sequence
*/
function sequence_sort_changed(iter: SequenceIter, cmp_func: CompareDataFunc): void;
/**
* Like g_sequence_sort_changed(), but uses
* a #GSequenceIterCompareFunc instead of a #GCompareDataFunc as
* the compare function.
*
* `iter_cmp` is called with two iterators pointing into the #GSequence that
* `iter` points into. It should
* return 0 if the iterators are equal, a negative value if the first
* iterator comes before the second, and a positive value if the second
* iterator comes before the first.
* @param iter a #GSequenceIter
* @param iter_cmp the function used to compare iterators in the sequence
*/
function sequence_sort_changed_iter(iter: SequenceIter, iter_cmp: SequenceIterCompareFunc): void;
/**
* Swaps the items pointed to by `a` and `b`. It is allowed for `a` and `b`
* to point into difference sequences.
* @param a a #GSequenceIter
* @param b a #GSequenceIter
*/
function sequence_swap(a: SequenceIter, b: SequenceIter): void;
/**
* Sets a human-readable name for the application. This name should be
* localized if possible, and is intended for display to the user.
* Contrast with g_set_prgname(), which sets a non-localized name.
* g_set_prgname() will be called automatically by gtk_init(),
* but g_set_application_name() will not.
*
* Note that for thread safety reasons, this function can only
* be called once.
*
* The application name will be used in contexts such as error messages,
* or when displaying an application's name in the task list.
* @param application_name localized name of the application
*/
function set_application_name(application_name: string): void;
/**
* Does nothing if `err` is %NULL; if `err` is non-%NULL, then `*err`
* must be %NULL. A new #GError is created and assigned to `*err`.
* Unlike g_set_error(), `message` is not a printf()-style format string.
* Use this function if `message` contains text you don't have control over,
* that could include printf() escape sequences.
* @param domain error domain
* @param code error code
* @param message error message
*/
function set_error_literal(domain: Quark, code: number, message: string): Error | null;
/**
* Sets the name of the program. This name should not be localized,
* in contrast to g_set_application_name().
*
* If you are using #GApplication the program name is set in
* g_application_run(). In case of GDK or GTK it is set in
* gdk_init(), which is called by gtk_init() and the
* #GtkApplication::startup handler. The program name is found by
* taking the last component of `argv[`0].
*
* Since GLib 2.72, this function can be called multiple times
* and is fully thread safe. Prior to GLib 2.72, this function
* could only be called once per process.
* @param prgname the name of the program.
*/
function set_prgname(prgname: string): void;
/**
* Sets an environment variable. On UNIX, both the variable's name and
* value can be arbitrary byte strings, except that the variable's name
* cannot contain '='. On Windows, they should be in UTF-8.
*
* Note that on some systems, when variables are overwritten, the memory
* used for the previous variables and its value isn't reclaimed.
*
* You should be mindful of the fact that environment variable handling
* in UNIX is not thread-safe, and your program may crash if one thread
* calls g_setenv() while another thread is calling getenv(). (And note
* that many functions, such as gettext(), call getenv() internally.)
* This function is only safe to use at the very start of your program,
* before creating any other threads (or creating objects that create
* worker threads of their own).
*
* If you need to set up the environment for a child process, you can
* use g_get_environ() to get an environment array, modify that with
* g_environ_setenv() and g_environ_unsetenv(), and then pass that
* array directly to execvpe(), g_spawn_async(), or the like.
* @param variable the environment variable to set, must not contain '='.
* @param value the value for to set the variable to.
* @param overwrite whether to change the variable if it already exists.
* @returns %FALSE if the environment variable couldn't be set.
*/
function setenv(variable: string, value: string, overwrite: boolean): boolean;
function shell_error_quark(): Quark;
/**
* Parses a command line into an argument vector, in much the same way
* the shell would, but without many of the expansions the shell would
* perform (variable expansion, globs, operators, filename expansion,
* etc. are not supported).
*
* The results are defined to be the same as those you would get from
* a UNIX98 `/bin/sh`, as long as the input contains none of the
* unsupported shell expansions. If the input does contain such expansions,
* they are passed through literally.
*
* Possible errors are those from the %G_SHELL_ERROR domain.
*
* In particular, if `command_line` is an empty string (or a string containing
* only whitespace), %G_SHELL_ERROR_EMPTY_STRING will be returned. Its
* guaranteed that `argvp` will be a non-empty array if this function returns
* successfully.
*
* Free the returned vector with g_strfreev().
* @param command_line command line to parse
* @returns %TRUE on success, %FALSE if error set
*/
function shell_parse_argv(command_line: string): [boolean, string[] | null];
/**
* Quotes a string so that the shell (/bin/sh) will interpret the
* quoted string to mean `unquoted_string`.
*
* If you pass a filename to the shell, for example, you should first
* quote it with this function.
*
* The return value must be freed with g_free().
*
* The quoting style used is undefined (single or double quotes may be
* used).
* @param unquoted_string a literal string
* @returns quoted string
*/
function shell_quote(unquoted_string: string): string;
/**
* Unquotes a string as the shell (/bin/sh) would.
*
* This function only handles quotes; if a string contains file globs,
* arithmetic operators, variables, backticks, redirections, or other
* special-to-the-shell features, the result will be different from the
* result a real shell would produce (the variables, backticks, etc.
* will be passed through literally instead of being expanded).
*
* This function is guaranteed to succeed if applied to the result of
* g_shell_quote(). If it fails, it returns %NULL and sets the
* error.
*
* The `quoted_string` need not actually contain quoted or escaped text;
* g_shell_unquote() simply goes through the string and unquotes/unescapes
* anything that the shell would. Both single and double quotes are
* handled, as are escapes including escaped newlines.
*
* The return value must be freed with g_free().
*
* Possible errors are in the %G_SHELL_ERROR domain.
*
* Shell quoting rules are a bit strange. Single quotes preserve the
* literal string exactly. escape sequences are not allowed; not even
* `\'` - if you want a `'` in the quoted text, you have to do something
* like `'foo'\''bar'`. Double quotes allow `$`, ```, `"`, `\`, and
* newline to be escaped with backslash. Otherwise double quotes
* preserve things literally.
* @param quoted_string shell-quoted string
* @returns an unquoted string
*/
function shell_unquote(quoted_string: string): string;
/**
* Allocates a block of memory from the libc allocator.
*
* The block address handed out can be expected to be aligned
* to at least `1 * sizeof (void*)`.
*
* Since GLib 2.76 this always uses the system malloc() implementation
* internally.
* @param block_size the number of bytes to allocate
* @returns a pointer to the allocated memory block, which will be %NULL if and only if @mem_size is 0
*/
function slice_alloc(block_size: number): any | null;
/**
* Allocates a block of memory via g_slice_alloc() and initializes
* the returned memory to 0.
*
* Since GLib 2.76 this always uses the system malloc() implementation
* internally.
* @param block_size the number of bytes to allocate
* @returns a pointer to the allocated block, which will be %NULL if and only if @mem_size is 0
*/
function slice_alloc0(block_size: number): any | null;
/**
* Allocates a block of memory from the slice allocator
* and copies `block_size` bytes into it from `mem_block`.
*
* `mem_block` must be non-%NULL if `block_size` is non-zero.
*
* Since GLib 2.76 this always uses the system malloc() implementation
* internally.
* @param block_size the number of bytes to allocate
* @param mem_block the memory to copy
* @returns a pointer to the allocated memory block, which will be %NULL if and only if @mem_size is 0
*/
function slice_copy(block_size: number, mem_block?: any | null): any | null;
/**
* Frees a block of memory.
*
* The memory must have been allocated via g_slice_alloc() or
* g_slice_alloc0() and the `block_size` has to match the size
* specified upon allocation. Note that the exact release behaviour
* can be changed with the [`G_DEBUG=gc-friendly`](running.html#environment-variables) environment
* variable.
*
* If `mem_block` is %NULL, this function does nothing.
*
* Since GLib 2.76 this always uses the system free_sized() implementation
* internally.
* @param block_size the size of the block
* @param mem_block a pointer to the block to free
*/
function slice_free1(block_size: number, mem_block?: any | null): void;
/**
* Frees a linked list of memory blocks of structure type `type`.
*
* The memory blocks must be equal-sized, allocated via
* g_slice_alloc() or g_slice_alloc0() and linked together by a
* `next` pointer (similar to #GSList). The offset of the `next`
* field in each block is passed as third argument.
* Note that the exact release behaviour can be changed with the
* [`G_DEBUG=gc-friendly`](running.html#environment-variables) environment variable.
*
* If `mem_chain` is %NULL, this function does nothing.
*
* Since GLib 2.76 this always uses the system free_sized() implementation
* internally.
* @param block_size the size of the blocks
* @param mem_chain a pointer to the first block of the chain
* @param next_offset the offset of the @next field in the blocks
*/
function slice_free_chain_with_offset(block_size: number, mem_chain: any | null, next_offset: number): void;
function slice_get_config(ckey: SliceConfig | null): number;
function slice_get_config_state(ckey: SliceConfig | null, address: number, n_values: number): number;
function slice_set_config(ckey: SliceConfig | null, value: number): void;
function slist_pop_allocator(): void;
function slist_push_allocator(allocator: Allocator): void;
/**
* Removes the source with the given ID from the default main context. You must
* use [method`GLib`.Source.destroy] for sources added to a non-default main context.
*
* The ID of a #GSource is given by [method`GLib`.Source.get_id], or will be
* returned by the functions [method`GLib`.Source.attach], [func`GLib`.idle_add],
* [func`GLib`.idle_add_full], [func`GLib`.timeout_add],
* [func`GLib`.timeout_add_full], [func`GLib`.child_watch_add],
* [func`GLib`.child_watch_add_full], [func`GLib`.io_add_watch], and
* [func`GLib`.io_add_watch_full].
*
* It is a programmer error to attempt to remove a non-existent source.
*
* More specifically: source IDs can be reissued after a source has been
* destroyed and therefore it is never valid to use this function with a
* source ID which may have already been removed. An example is when
* scheduling an idle to run in another thread with [func`GLib`.idle_add]: the
* idle may already have run and been removed by the time this function
* is called on its (now invalid) source ID. This source ID may have
* been reissued, leading to the operation being performed against the
* wrong source.
* @param tag the ID of the source to remove.
* @returns %TRUE if the source was found and removed.
*/
function source_remove(tag: number): boolean;
/**
* Removes a source from the default main loop context given the
* source functions and user data. If multiple sources exist with the
* same source functions and user data, only one will be destroyed.
* @param funcs The @source_funcs passed to [ctor@GLib.Source.new]
* @param user_data the user data for the callback
* @returns %TRUE if a source was found and removed.
*/
function source_remove_by_funcs_user_data(funcs: SourceFuncs, user_data?: any | null): boolean;
/**
* Removes a source from the default main loop context given the user
* data for the callback. If multiple sources exist with the same user
* data, only one will be destroyed.
* @param user_data the user_data for the callback.
* @returns %TRUE if a source was found and removed.
*/
function source_remove_by_user_data(user_data?: any | null): boolean;
/**
* Sets the name of a source using its ID.
*
* This is a convenience utility to set source names from the return
* value of [func`GLib`.idle_add], [func`GLib`.timeout_add], etc.
*
* It is a programmer error to attempt to set the name of a non-existent
* source.
*
* More specifically: source IDs can be reissued after a source has been
* destroyed and therefore it is never valid to use this function with a
* source ID which may have already been removed. An example is when
* scheduling an idle to run in another thread with [func`GLib`.idle_add]: the
* idle may already have run and been removed by the time this function
* is called on its (now invalid) source ID. This source ID may have
* been reissued, leading to the operation being performed against the
* wrong source.
* @param tag a #GSource ID
* @param name debug name for the source
*/
function source_set_name_by_id(tag: number, name: string): void;
/**
* Gets the smallest prime number from a built-in array of primes which
* is larger than `num`. This is used within GLib to calculate the optimum
* size of a #GHashTable.
*
* The built-in array of primes ranges from 11 to 13845163 such that
* each prime is approximately 1.5-2 times the previous prime.
* @param num a #guint
* @returns the smallest prime number from a built-in array of primes which is larger than @num
*/
function spaced_primes_closest(num: number): number;
/**
* Executes a child program asynchronously.
*
* See g_spawn_async_with_pipes() for a full description; this function
* simply calls the g_spawn_async_with_pipes() without any pipes.
*
* You should call g_spawn_close_pid() on the returned child process
* reference when you don't need it any more.
*
* If you are writing a GTK application, and the program you are spawning is a
* graphical application too, then to ensure that the spawned program opens its
* windows on the right screen, you may want to use #GdkAppLaunchContext,
* #GAppLaunchContext, or set the %DISPLAY environment variable.
*
* Note that the returned `child_pid` on Windows is a handle to the child
* process and not its identifier. Process handles and process identifiers
* are different concepts on Windows.
* @param working_directory child's current working directory, or %NULL to inherit parent's
* @param argv child's argument vector
* @param envp child's environment, or %NULL to inherit parent's
* @param flags flags from #GSpawnFlags
* @param child_setup function to run in the child just before `exec()`
* @returns %TRUE on success, %FALSE if error is set
*/
function spawn_async(
working_directory: string | null,
argv: string[],
envp: string[] | null,
flags: SpawnFlags | null,
child_setup?: SpawnChildSetupFunc | null,
): [boolean, Pid | null];
/**
* Executes a child program asynchronously.
*
* Identical to g_spawn_async_with_pipes_and_fds() but with `n_fds` set to zero,
* so no FD assignments are used.
* @param working_directory child's current working directory, or %NULL to inherit parent's, in the GLib file name encoding
* @param argv child's argument vector, in the GLib file name encoding; it must be non-empty and %NULL-terminated
* @param envp child's environment, or %NULL to inherit parent's, in the GLib file name encoding
* @param flags flags from #GSpawnFlags
* @param child_setup function to run in the child just before `exec()`
* @param stdin_fd file descriptor to use for child's stdin, or `-1`
* @param stdout_fd file descriptor to use for child's stdout, or `-1`
* @param stderr_fd file descriptor to use for child's stderr, or `-1`
* @returns %TRUE on success, %FALSE if an error was set
*/
function spawn_async_with_fds(
working_directory: string | null,
argv: string[],
envp: string[] | null,
flags: SpawnFlags | null,
child_setup: SpawnChildSetupFunc | null,
stdin_fd: number,
stdout_fd: number,
stderr_fd: number,
): [boolean, Pid | null];
/**
* Identical to g_spawn_async_with_pipes_and_fds() but with `n_fds` set to zero,
* so no FD assignments are used.
* @param working_directory child's current working directory, or %NULL to inherit parent's, in the GLib file name encoding
* @param argv child's argument vector, in the GLib file name encoding; it must be non-empty and %NULL-terminated
* @param envp child's environment, or %NULL to inherit parent's, in the GLib file name encoding
* @param flags flags from #GSpawnFlags
* @param child_setup function to run in the child just before `exec()`
* @returns %TRUE on success, %FALSE if an error was set
*/
function spawn_async_with_pipes(
working_directory: string | null,
argv: string[],
envp: string[] | null,
flags: SpawnFlags | null,
child_setup: SpawnChildSetupFunc | null,
): [boolean, Pid | null, number, number, number];
/**
* Executes a child program asynchronously (your program will not
* block waiting for the child to exit).
*
* The child program is specified by the only argument that must be
* provided, `argv`. `argv` should be a %NULL-terminated array of strings,
* to be passed as the argument vector for the child. The first string
* in `argv` is of course the name of the program to execute. By default,
* the name of the program must be a full path. If `flags` contains the
* %G_SPAWN_SEARCH_PATH flag, the `PATH` environment variable is used to
* search for the executable. If `flags` contains the
* %G_SPAWN_SEARCH_PATH_FROM_ENVP flag, the `PATH` variable from `envp`
* is used to search for the executable. If both the
* %G_SPAWN_SEARCH_PATH and %G_SPAWN_SEARCH_PATH_FROM_ENVP flags are
* set, the `PATH` variable from `envp` takes precedence over the
* environment variable.
*
* If the program name is not a full path and %G_SPAWN_SEARCH_PATH flag
* is not used, then the program will be run from the current directory
* (or `working_directory,` if specified); this might be unexpected or even
* dangerous in some cases when the current directory is world-writable.
*
* On Windows, note that all the string or string vector arguments to
* this function and the other `g_spawn*()` functions are in UTF-8, the
* GLib file name encoding. Unicode characters that are not part of
* the system codepage passed in these arguments will be correctly
* available in the spawned program only if it uses wide character API
* to retrieve its command line. For C programs built with Microsoft's
* tools it is enough to make the program have a `wmain()` instead of
* `main()`. `wmain()` has a wide character argument vector as parameter.
*
* At least currently, mingw doesn't support `wmain()`, so if you use
* mingw to develop the spawned program, it should call
* g_win32_get_command_line() to get arguments in UTF-8.
*
* On Windows the low-level child process creation API `CreateProcess()`
* doesn't use argument vectors, but a command line. The C runtime
* library's `spawn*()` family of functions (which g_spawn_async_with_pipes()
* eventually calls) paste the argument vector elements together into
* a command line, and the C runtime startup code does a corresponding
* reconstruction of an argument vector from the command line, to be
* passed to `main()`. Complications arise when you have argument vector
* elements that contain spaces or double quotes. The `spawn*()` functions
* don't do any quoting or escaping, but on the other hand the startup
* code does do unquoting and unescaping in order to enable receiving
* arguments with embedded spaces or double quotes. To work around this
* asymmetry, g_spawn_async_with_pipes() will do quoting and escaping on
* argument vector elements that need it before calling the C runtime
* `spawn()` function.
*
* The returned `child_pid` on Windows is a handle to the child
* process, not its identifier. Process handles and process
* identifiers are different concepts on Windows.
*
* `envp` is a %NULL-terminated array of strings, where each string
* has the form `KEY=VALUE`. This will become the child's environment.
* If `envp` is %NULL, the child inherits its parent's environment.
*
* `flags` should be the bitwise OR of any flags you want to affect the
* function's behaviour. The %G_SPAWN_DO_NOT_REAP_CHILD means that the
* child will not automatically be reaped; you must use a child watch
* (g_child_watch_add()) to be notified about the death of the child process,
* otherwise it will stay around as a zombie process until this process exits.
* Eventually you must call g_spawn_close_pid() on the `child_pid,` in order to
* free resources which may be associated with the child process. (On Unix,
* using a child watch is equivalent to calling waitpid() or handling
* the `SIGCHLD` signal manually. On Windows, calling g_spawn_close_pid()
* is equivalent to calling `CloseHandle()` on the process handle returned
* in `child_pid)`. See g_child_watch_add().
*
* Open UNIX file descriptors marked as `FD_CLOEXEC` will be automatically
* closed in the child process. %G_SPAWN_LEAVE_DESCRIPTORS_OPEN means that
* other open file descriptors will be inherited by the child; otherwise all
* descriptors except stdin/stdout/stderr will be closed before calling `exec()`
* in the child. %G_SPAWN_SEARCH_PATH means that `argv[`0] need not be an
* absolute path, it will be looked for in the `PATH` environment
* variable. %G_SPAWN_SEARCH_PATH_FROM_ENVP means need not be an
* absolute path, it will be looked for in the `PATH` variable from
* `envp`. If both %G_SPAWN_SEARCH_PATH and %G_SPAWN_SEARCH_PATH_FROM_ENVP
* are used, the value from `envp` takes precedence over the environment.
*
* %G_SPAWN_CHILD_INHERITS_STDIN means that the child will inherit the parent's
* standard input (by default, the child's standard input is attached to
* `/dev/null`). %G_SPAWN_STDIN_FROM_DEV_NULL explicitly imposes the default
* behavior. Both flags cannot be enabled at the same time and, in both cases,
* the `stdin_pipe_out` argument is ignored.
*
* %G_SPAWN_STDOUT_TO_DEV_NULL means that the child's standard output
* will be discarded (by default, it goes to the same location as the parent's
* standard output). %G_SPAWN_CHILD_INHERITS_STDOUT explicitly imposes the
* default behavior. Both flags cannot be enabled at the same time and, in
* both cases, the `stdout_pipe_out` argument is ignored.
*
* %G_SPAWN_STDERR_TO_DEV_NULL means that the child's standard error
* will be discarded (by default, it goes to the same location as the parent's
* standard error). %G_SPAWN_CHILD_INHERITS_STDERR explicitly imposes the
* default behavior. Both flags cannot be enabled at the same time and, in
* both cases, the `stderr_pipe_out` argument is ignored.
*
* It is valid to pass the same FD in multiple parameters (e.g. you can pass
* a single FD for both `stdout_fd` and `stderr_fd,` and include it in
* `source_fds` too).
*
* `source_fds` and `target_fds` allow zero or more FDs from this process to be
* remapped to different FDs in the spawned process. If `n_fds` is greater than
* zero, `source_fds` and `target_fds` must both be non-%NULL and the same length.
* Each FD in `source_fds` is remapped to the FD number at the same index in
* `target_fds`. The source and target FD may be equal to simply propagate an FD
* to the spawned process. FD remappings are processed after standard FDs, so
* any target FDs which equal `stdin_fd,` `stdout_fd` or `stderr_fd` will overwrite
* them in the spawned process.
*
* `source_fds` is supported on Windows since 2.72.
*
* %G_SPAWN_FILE_AND_ARGV_ZERO means that the first element of `argv` is
* the file to execute, while the remaining elements are the actual
* argument vector to pass to the file. Normally g_spawn_async_with_pipes()
* uses `argv[`0] as the file to execute, and passes all of `argv` to the child.
*
* `child_setup` and `user_data` are a function and user data. On POSIX
* platforms, the function is called in the child after GLib has
* performed all the setup it plans to perform (including creating
* pipes, closing file descriptors, etc.) but before calling `exec()`.
* That is, `child_setup` is called just before calling `exec()` in the
* child. Obviously actions taken in this function will only affect
* the child, not the parent.
*
* On Windows, there is no separate `fork()` and `exec()` functionality.
* Child processes are created and run with a single API call,
* `CreateProcess()`. There is no sensible thing `child_setup`
* could be used for on Windows so it is ignored and not called.
*
* If non-%NULL, `child_pid` will on Unix be filled with the child's
* process ID. You can use the process ID to send signals to the child,
* or to use g_child_watch_add() (or `waitpid()`) if you specified the
* %G_SPAWN_DO_NOT_REAP_CHILD flag. On Windows, `child_pid` will be
* filled with a handle to the child process only if you specified the
* %G_SPAWN_DO_NOT_REAP_CHILD flag. You can then access the child
* process using the Win32 API, for example wait for its termination
* with the `WaitFor*()` functions, or examine its exit code with
* `GetExitCodeProcess()`. You should close the handle with `CloseHandle()`
* or g_spawn_close_pid() when you no longer need it.
*
* If non-%NULL, the `stdin_pipe_out,` `stdout_pipe_out,` `stderr_pipe_out`
* locations will be filled with file descriptors for writing to the child's
* standard input or reading from its standard output or standard error.
* The caller of g_spawn_async_with_pipes() must close these file descriptors
* when they are no longer in use. If these parameters are %NULL, the
* corresponding pipe won't be created.
*
* If `stdin_pipe_out` is %NULL, the child's standard input is attached to
* `/dev/null` unless %G_SPAWN_CHILD_INHERITS_STDIN is set.
*
* If `stderr_pipe_out` is NULL, the child's standard error goes to the same
* location as the parent's standard error unless %G_SPAWN_STDERR_TO_DEV_NULL
* is set.
*
* If `stdout_pipe_out` is NULL, the child's standard output goes to the same
* location as the parent's standard output unless %G_SPAWN_STDOUT_TO_DEV_NULL
* is set.
*
* `error` can be %NULL to ignore errors, or non-%NULL to report errors.
* If an error is set, the function returns %FALSE. Errors are reported
* even if they occur in the child (for example if the executable in
* ``argv[`0]` is not found). Typically the `message` field of returned
* errors should be displayed to users. Possible errors are those from
* the %G_SPAWN_ERROR domain.
*
* If an error occurs, `child_pid,` `stdin_pipe_out,` `stdout_pipe_out,`
* and `stderr_pipe_out` will not be filled with valid values.
*
* If `child_pid` is not %NULL and an error does not occur then the returned
* process reference must be closed using g_spawn_close_pid().
*
* On modern UNIX platforms, GLib can use an efficient process launching
* codepath driven internally by `posix_spawn()`. This has the advantage of
* avoiding the fork-time performance costs of cloning the parent process
* address space, and avoiding associated memory overcommit checks that are
* not relevant in the context of immediately executing a distinct process.
* This optimized codepath will be used provided that the following conditions
* are met:
*
* 1. %G_SPAWN_DO_NOT_REAP_CHILD is set
* 2. %G_SPAWN_LEAVE_DESCRIPTORS_OPEN is set
* 3. %G_SPAWN_SEARCH_PATH_FROM_ENVP is not set
* 4. `working_directory` is %NULL
* 5. `child_setup` is %NULL
* 6. The program is of a recognised binary format, or has a shebang.
* Otherwise, GLib will have to execute the program through the
* shell, which is not done using the optimized codepath.
*
* If you are writing a GTK application, and the program you are spawning is a
* graphical application too, then to ensure that the spawned program opens its
* windows on the right screen, you may want to use #GdkAppLaunchContext,
* #GAppLaunchContext, or set the `DISPLAY` environment variable.
* @param working_directory child's current working directory, or %NULL to inherit parent's, in the GLib file name encoding
* @param argv child's argument vector, in the GLib file name encoding; it must be non-empty and %NULL-terminated
* @param envp child's environment, or %NULL to inherit parent's, in the GLib file name encoding
* @param flags flags from #GSpawnFlags
* @param child_setup function to run in the child just before `exec()`
* @param stdin_fd file descriptor to use for child's stdin, or `-1`
* @param stdout_fd file descriptor to use for child's stdout, or `-1`
* @param stderr_fd file descriptor to use for child's stderr, or `-1`
* @param source_fds array of FDs from the parent process to make available in the child process
* @param target_fds array of FDs to remap @source_fds to in the child process
* @returns %TRUE on success, %FALSE if an error was set
*/
function spawn_async_with_pipes_and_fds(
working_directory: string | null,
argv: string[],
envp: string[] | null,
flags: SpawnFlags | null,
child_setup: SpawnChildSetupFunc | null,
stdin_fd: number,
stdout_fd: number,
stderr_fd: number,
source_fds: number[] | null,
target_fds: number[] | null,
): [boolean, Pid | null, number, number, number];
/**
* An old name for g_spawn_check_wait_status(), deprecated because its
* name is misleading.
*
* Despite the name of the function, `wait_status` must be the wait status
* as returned by g_spawn_sync(), g_subprocess_get_status(), `waitpid()`,
* etc. On Unix platforms, it is incorrect for it to be the exit status
* as passed to `exit()` or returned by g_subprocess_get_exit_status() or
* `WEXITSTATUS()`.
* @param wait_status A status as returned from g_spawn_sync()
* @returns %TRUE if child exited successfully, %FALSE otherwise (and @error will be set)
*/
function spawn_check_exit_status(wait_status: number): boolean;
/**
* Set `error` if `wait_status` indicates the child exited abnormally
* (e.g. with a nonzero exit code, or via a fatal signal).
*
* The g_spawn_sync() and g_child_watch_add() family of APIs return the
* status of subprocesses encoded in a platform-specific way.
* On Unix, this is guaranteed to be in the same format waitpid() returns,
* and on Windows it is guaranteed to be the result of GetExitCodeProcess().
*
* Prior to the introduction of this function in GLib 2.34, interpreting
* `wait_status` required use of platform-specific APIs, which is problematic
* for software using GLib as a cross-platform layer.
*
* Additionally, many programs simply want to determine whether or not
* the child exited successfully, and either propagate a #GError or
* print a message to standard error. In that common case, this function
* can be used. Note that the error message in `error` will contain
* human-readable information about the wait status.
*
* The `domain` and `code` of `error` have special semantics in the case
* where the process has an "exit code", as opposed to being killed by
* a signal. On Unix, this happens if WIFEXITED() would be true of
* `wait_status`. On Windows, it is always the case.
*
* The special semantics are that the actual exit code will be the
* code set in `error,` and the domain will be %G_SPAWN_EXIT_ERROR.
* This allows you to differentiate between different exit codes.
*
* If the process was terminated by some means other than an exit
* status (for example if it was killed by a signal), the domain will be
* %G_SPAWN_ERROR and the code will be %G_SPAWN_ERROR_FAILED.
*
* This function just offers convenience; you can of course also check
* the available platform via a macro such as %G_OS_UNIX, and use
* WIFEXITED() and WEXITSTATUS() on `wait_status` directly. Do not attempt
* to scan or parse the error message string; it may be translated and/or
* change in future versions of GLib.
*
* Prior to version 2.70, g_spawn_check_exit_status() provides the same
* functionality, although under a misleading name.
* @param wait_status A platform-specific wait status as returned from g_spawn_sync()
* @returns %TRUE if child exited successfully, %FALSE otherwise (and @error will be set)
*/
function spawn_check_wait_status(wait_status: number): boolean;
/**
* On some platforms, notably Windows, the #GPid type represents a resource
* which must be closed to prevent resource leaking. g_spawn_close_pid()
* is provided for this purpose. It should be used on all platforms, even
* though it doesn't do anything under UNIX.
* @param pid The process reference to close
*/
function spawn_close_pid(pid: Pid): void;
/**
* A simple version of g_spawn_async() that parses a command line with
* g_shell_parse_argv() and passes it to g_spawn_async().
*
* Runs a command line in the background. Unlike g_spawn_async(), the
* %G_SPAWN_SEARCH_PATH flag is enabled, other flags are not. Note
* that %G_SPAWN_SEARCH_PATH can have security implications, so
* consider using g_spawn_async() directly if appropriate. Possible
* errors are those from g_shell_parse_argv() and g_spawn_async().
*
* The same concerns on Windows apply as for g_spawn_command_line_sync().
* @param command_line a command line
* @returns %TRUE on success, %FALSE if error is set
*/
function spawn_command_line_async(command_line: string): boolean;
/**
* A simple version of g_spawn_sync() with little-used parameters
* removed, taking a command line instead of an argument vector.
*
* See g_spawn_sync() for full details.
*
* The `command_line` argument will be parsed by g_shell_parse_argv().
*
* Unlike g_spawn_sync(), the %G_SPAWN_SEARCH_PATH flag is enabled.
* Note that %G_SPAWN_SEARCH_PATH can have security implications, so
* consider using g_spawn_sync() directly if appropriate.
*
* Possible errors are those from g_spawn_sync() and those
* from g_shell_parse_argv().
*
* If `wait_status` is non-%NULL, the platform-specific status of
* the child is stored there; see the documentation of
* g_spawn_check_wait_status() for how to use and interpret this.
* On Unix platforms, note that it is usually not equal
* to the integer passed to `exit()` or returned from `main()`.
*
* On Windows, please note the implications of g_shell_parse_argv()
* parsing `command_line`. Parsing is done according to Unix shell rules, not
* Windows command interpreter rules.
* Space is a separator, and backslashes are
* special. Thus you cannot simply pass a `command_line` containing
* canonical Windows paths, like "c:\\program files\\app\\app.exe", as
* the backslashes will be eaten, and the space will act as a
* separator. You need to enclose such paths with single quotes, like
* "'c:\\program files\\app\\app.exe' 'e:\\folder\\argument.txt'".
* @param command_line a command line
* @returns %TRUE on success, %FALSE if an error was set
*/
function spawn_command_line_sync(command_line: string): [boolean, Uint8Array | null, Uint8Array | null, number];
function spawn_error_quark(): Quark;
function spawn_exit_error_quark(): Quark;
/**
* Executes a child synchronously (waits for the child to exit before returning).
*
* All output from the child is stored in `standard_output` and `standard_error,`
* if those parameters are non-%NULL. Note that you must set the
* %G_SPAWN_STDOUT_TO_DEV_NULL and %G_SPAWN_STDERR_TO_DEV_NULL flags when
* passing %NULL for `standard_output` and `standard_error`.
*
* If `wait_status` is non-%NULL, the platform-specific status of
* the child is stored there; see the documentation of
* g_spawn_check_wait_status() for how to use and interpret this.
* On Unix platforms, note that it is usually not equal
* to the integer passed to `exit()` or returned from `main()`.
*
* Note that it is invalid to pass %G_SPAWN_DO_NOT_REAP_CHILD in
* `flags,` and on POSIX platforms, the same restrictions as for
* g_child_watch_source_new() apply.
*
* If an error occurs, no data is returned in `standard_output,`
* `standard_error,` or `wait_status`.
*
* This function calls g_spawn_async_with_pipes() internally; see that
* function for full details on the other parameters and details on
* how these functions work on Windows.
* @param working_directory child's current working directory, or %NULL to inherit parent's
* @param argv child's argument vector, which must be non-empty and %NULL-terminated
* @param envp child's environment, or %NULL to inherit parent's
* @param flags flags from #GSpawnFlags
* @param child_setup function to run in the child just before `exec()`
* @returns %TRUE on success, %FALSE if an error was set
*/
function spawn_sync(
working_directory: string | null,
argv: string[],
envp: string[] | null,
flags: SpawnFlags | null,
child_setup: SpawnChildSetupFunc | null,
): [boolean, Uint8Array | null, Uint8Array | null, number];
/**
* A wrapper for the POSIX stat() function. The stat() function
* returns information about a file. On Windows the stat() function in
* the C library checks only the FAT-style READONLY attribute and does
* not look at the ACL at all. Thus on Windows the protection bits in
* the `st_mode` field are a fabrication of little use.
*
* On Windows the Microsoft C libraries have several variants of the
* stat struct and stat() function with names like _stat(), _stat32(),
* _stat32i64() and _stat64i32(). The one used here is for 32-bit code
* the one with 32-bit size and time fields, specifically called _stat32().
*
* In Microsoft's compiler, by default struct stat means one with
* 64-bit time fields while in MinGW struct stat is the legacy one
* with 32-bit fields. To hopefully clear up this messs, the gstdio.h
* header defines a type #GStatBuf which is the appropriate struct type
* depending on the platform and/or compiler being used. On POSIX it
* is just struct stat, but note that even on POSIX platforms, stat()
* might be a macro.
*
* See your C library manual for more details about stat().
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param buf a pointer to a stat struct, which will be filled with the file information
* @returns 0 if the information was successfully retrieved, -1 if an error occurred
*/
function stat(filename: string, buf: StatBuf): number;
/**
* Copies a nul-terminated string into the destination buffer, including
* the trailing nul byte, and returns a pointer to the trailing nul byte
* in `dest`. The return value is useful for concatenating multiple
* strings without having to repeatedly scan for the end.
* @param dest destination buffer
* @param src source string
* @returns a pointer to the trailing nul byte in `dest`
*/
function stpcpy(dest: string, src: string): string;
/**
* Compares two strings for byte-by-byte equality and returns %TRUE
* if they are equal. It can be passed to g_hash_table_new() as the
* `key_equal_func` parameter, when using non-%NULL strings as keys in a
* #GHashTable.
*
* This function is typically used for hash table comparisons, but can be used
* for general purpose comparisons of non-%NULL strings. For a %NULL-safe string
* comparison function, see g_strcmp0().
* @param v1 a key
* @param v2 a key to compare with @v1
* @returns %TRUE if the two keys match
*/
function str_equal(v1: any, v2: any): boolean;
/**
* Looks whether the string `str` begins with `prefix`.
* @param str a string to look in
* @param prefix the prefix to look for
* @returns true if @str begins with @prefix, false otherwise
*/
function str_has_prefix(str: string, prefix: string): boolean;
/**
* Looks whether a string ends with `suffix`.
* @param str a string to look in
* @param suffix the suffix to look for
* @returns true if @str ends with @suffix, false otherwise
*/
function str_has_suffix(str: string, suffix: string): boolean;
/**
* Converts a string to a hash value.
*
* This function implements the widely used "djb" hash apparently
* posted by Daniel Bernstein to comp.lang.c some time ago. The 32
* bit unsigned hash value starts at 5381 and for each byte 'c' in
* the string, is updated: `hash = hash * 33 + c`. This function
* uses the signed value of each byte.
*
* It can be passed to g_hash_table_new() as the `hash_func` parameter,
* when using non-%NULL strings as keys in a #GHashTable.
*
* Note that this function may not be a perfect fit for all use cases.
* For example, it produces some hash collisions with strings as short
* as 2.
* @param v a string key
* @returns a hash value corresponding to the key
*/
function str_hash(v: any): number;
/**
* Determines if a string is pure ASCII. A string is pure ASCII if it
* contains no bytes with the high bit set.
* @param str a string
* @returns true if @str is ASCII
*/
function str_is_ascii(str: string): boolean;
/**
* Checks if a search conducted for `search_term` should match
* `potential_hit`.
*
* This function calls [func`GLib`.str_tokenize_and_fold] on both
* `search_term` and `potential_hit`. ASCII alternates are never taken
* for `search_term` but will be taken for `potential_hit` according to
* the value of `accept_alternates`.
*
* A hit occurs when each folded token in `search_term` is a prefix of a
* folded token from `potential_hit`.
*
* Depending on how you're performing the search, it will typically be
* faster to call `g_str_tokenize_and_fold()` on each string in
* your corpus and build an index on the returned folded tokens, then
* call `g_str_tokenize_and_fold()` on the search term and
* perform lookups into that index.
*
* As some examples, searching for fred would match the potential hit
* Smith, Fred and also Frédéric. Searching for Fréd would match
* Frédéric but not Frederic (due to the one-directional nature of
* accent matching). Searching fo would match Foo and Bar Foo
* Baz, but not SFO (because no word has fo as a prefix).
* @param search_term the search term from the user
* @param potential_hit the text that may be a hit
* @param accept_alternates if true, ASCII alternates are accepted
* @returns true if @potential_hit is a hit
*/
function str_match_string(search_term: string, potential_hit: string, accept_alternates: boolean): boolean;
/**
* Transliterate `str` to plain ASCII.
*
* For best results, `str` should be in composed normalised form.
*
* This function performs a reasonably good set of character
* replacements. The particular set of replacements that is done may
* change by version or even by runtime environment.
*
* If the source language of `str` is known, it can used to improve the
* accuracy of the translation by passing it as `from_locale`. It should
* be a valid POSIX locale string (of the form
* `language[_territory][.codeset][`modifier]``).
*
* If `from_locale` is %NULL then the current locale is used.
*
* If you want to do translation for no specific locale, and you want it
* to be done independently of the currently locale, specify `"C"` for
* `from_locale`.
* @param str a string, in UTF-8
* @param from_locale the source locale, if known
* @returns a string in plain ASCII
*/
function str_to_ascii(str: string, from_locale?: string | null): string;
/**
* Tokenizes `string` and performs folding on each token.
*
* A token is a non-empty sequence of alphanumeric characters in the
* source string, separated by non-alphanumeric characters. An
* "alphanumeric" character for this purpose is one that matches
* [func`GLib`.unichar_isalnum] or [func`GLib`.unichar_ismark].
*
* Each token is then (Unicode) normalised and case-folded. If
* `ascii_alternates` is non-`NULL` and some of the returned tokens
* contain non-ASCII characters, ASCII alternatives will be generated.
*
* The number of ASCII alternatives that are generated and the method
* for doing so is unspecified, but `translit_locale` (if specified) may
* improve the transliteration if the language of the source string is
* known.
* @param string a string to tokenize
* @param translit_locale the language code (like 'de' or 'en_GB') from which @string originates
* @returns the folded tokens
*/
function str_tokenize_and_fold(string: string, translit_locale?: string | null): [string[], string[] | null];
/**
* For each character in `string,` if the character is not in `valid_chars,`
* replaces the character with `substitutor`.
*
* Modifies `string` in place, and return `string` itself, not a copy. The
* return value is to allow nesting such as:
* ```C
* g_ascii_strup (g_strcanon (str, "abc", '?'))
* ```
*
* In order to modify a copy, you may use [func`GLib`.strdup]:
* ```C
* reformatted = g_strcanon (g_strdup (const_str), "abc", '?');
* …
* g_free (reformatted);
* ```
* @param string a nul-terminated array of bytes
* @param valid_chars bytes permitted in @string
* @param substitutor replacement character for disallowed bytes
* @returns the modified @string
*/
function strcanon(string: string, valid_chars: string, substitutor: number): string;
/**
* A case-insensitive string comparison, corresponding to the standard
* `strcasecmp()` function on platforms which support it.
* @param s1 string to compare with @s2
* @param s2 string to compare with @s1
* @returns 0 if the strings match, a negative value if @s1 < @s2, or a positive value if @s1 > @s2
*/
function strcasecmp(s1: string, s2: string): number;
/**
* Removes trailing whitespace from a string.
*
* This function doesn't allocate or reallocate any memory;
* it modifies `string` in place. Therefore, it cannot be used
* on statically allocated strings.
*
* The pointer to `string` is returned to allow the nesting of functions.
*
* Also see [func`GLib`.strchug] and [func`GLib`.strstrip].
* @param string a string to remove the trailing whitespace from
* @returns the modified @string
*/
function strchomp(string: string): string;
/**
* Removes leading whitespace from a string, by moving the rest
* of the characters forward.
*
* This function doesn't allocate or reallocate any memory;
* it modifies `string` in place. Therefore, it cannot be used on
* statically allocated strings.
*
* The pointer to `string` is returned to allow the nesting of functions.
*
* Also see [func`GLib`.strchomp] and [func`GLib`.strstrip].
* @param string a string to remove the leading whitespace from
* @returns the modified @string
*/
function strchug(string: string): string;
/**
* Compares `str1` and `str2` like `strcmp()`.
*
* Handles `NULL` gracefully by sorting it before non-`NULL` strings.
* Comparing two `NULL` pointers returns 0.
* @param str1 a string
* @param str2 another string
* @returns an integer less than, equal to, or greater than zero, if @str1 is <, == or > than @str2
*/
function strcmp0(str1?: string | null, str2?: string | null): number;
/**
* Makes a copy of a string replacing C string-style escape
* sequences with their one byte equivalent:
*
* - `\b` → [U+0008 Backspace](https://en.wikipedia.org/wiki/Backspace)
* - `\f` → [U+000C Form Feed](https://en.wikipedia.org/wiki/Form_feed)
* - `\n` → [U+000A Line Feed](https://en.wikipedia.org/wiki/Newline)
* - `\r` → [U+000D Carriage Return](https://en.wikipedia.org/wiki/Carriage_return)
* - `\t` → [U+0009 Horizontal Tabulation](https://en.wikipedia.org/wiki/Tab_character)
* - `\v` → [U+000B Vertical Tabulation](https://en.wikipedia.org/wiki/Vertical_Tab)
* - `\` followed by one to three octal digits → the numeric value (mod 255)
* - `\` followed by any other character → the character as is.
* For example, `\\` will turn into a backslash (`\`) and `\"` into a double quote (`"`).
*
* [func`GLib`.strescape] does the reverse conversion.
* @param source a string to compress
* @returns a newly-allocated copy of @source with all escaped character compressed
*/
function strcompress(source: string): string;
/**
* Converts any delimiter characters in `string` to `new_delimiter`.
*
* Any characters in `string` which are found in `delimiters` are
* changed to the `new_delimiter` character. Modifies `string` in place,
* and returns `string` itself, not a copy.
*
* The return value is to allow nesting such as:
* ```C
* g_ascii_strup (g_strdelimit (str, "abc", '?'))
* ```
*
* In order to modify a copy, you may use [func`GLib`.strdup]:
* ```C
* reformatted = g_strdelimit (g_strdup (const_str), "abc", '?');
* …
* g_free (reformatted);
* ```
* @param string the string to convert
* @param delimiters a string containing the current delimiters, or `NULL` to use the standard delimiters defined in [const@GLib.STR_DELIMITERS]
* @param new_delimiter the new delimiter character
* @returns the modified @string
*/
function strdelimit(string: string, delimiters: string | null, new_delimiter: number): string;
/**
* Converts a string to lower case.
* @param string the string to convert
* @returns the string
*/
function strdown(string: string): string;
/**
* Duplicates a string. If `str` is `NULL` it returns `NULL`.
* @param str the string to duplicate
* @returns a newly-allocated copy of @str
*/
function strdup(str?: string | null): string;
/**
* Copies an array of strings. The copy is a deep copy; each string is also
* copied.
*
* If called on a `NULL` value, `g_strdupv()` simply returns `NULL`.
* @param str_array an array of strings to copy
* @returns a newly-allocated array of strings. Use [func@GLib.strfreev] to free it.
*/
function strdupv(str_array?: string[] | null): string[] | null;
/**
* Returns a string corresponding to the given error code, e.g. "no
* such process".
*
* Unlike `strerror()`, this always returns a string in
* UTF-8 encoding, and the pointer is guaranteed to remain valid for
* the lifetime of the process. If the error code is unknown, it returns a
* string like “Unknown error <code\>”.
*
* Note that the string may be translated according to the current locale.
*
* The value of `errno` will not be changed by this function. However, it may
* be changed by intermediate function calls, so you should save its value
* as soon as the call returns:
* ```C
* int saved_errno;
*
* ret = read (blah);
* saved_errno = errno;
*
* g_strerror (saved_errno);
* ```
* @param errnum the system error number. See the standard C `errno` documentation
* @returns the string describing the error code
*/
function strerror(errnum: number): string;
/**
* It replaces the following special characters in the string `source`
* with their corresponding C escape sequence:
*
* | Symbol | Escape |
* |-----------------------------------------------------------------------------|--------|
* | [U+0008 Backspace](https://en.wikipedia.org/wiki/Backspace) | `\b` |
* | [U+000C Form Feed](https://en.wikipedia.org/wiki/Form_feed) | `\f` |
* | [U+000A Line Feed](https://en.wikipedia.org/wiki/Newline) | `\n` |
* | [U+000D Carriage Return](https://en.wikipedia.org/wiki/Carriage_return) | `\r` |
* | [U+0009 Horizontal Tabulation](https://en.wikipedia.org/wiki/Tab_character) | `\t` |
* | [U+000B Vertical Tabulation](https://en.wikipedia.org/wiki/Vertical_Tab) | `\v` |
*
* It also inserts a backslash (`\`) before any backslash or a double quote (`"`).
* Additionally all characters in the range 0x01-0x1F (everything
* below SPACE) and in the range 0x7F-0xFF (all non-ASCII chars) are
* replaced with a backslash followed by their octal representation.
* Characters supplied in `exceptions` are not escaped.
*
* [func`GLib`.strcompress] does the reverse conversion.
* @param source a string to escape
* @param exceptions a string of characters not to escape in @source
* @returns a newly-allocated copy of @source with special characters escaped
*/
function strescape(source: string, exceptions?: string | null): string;
/**
* Frees an array of strings, as well as each string it contains.
*
* If `str_array` is `NULL`, this function simply returns.
* @param str_array an array of strings to free
*/
function strfreev(str_array?: string[] | null): void;
/**
* An auxiliary function for gettext() support (see Q_()).
* @param msgid a string
* @param msgval another string
* @returns @msgval, unless @msgval is identical to @msgid and contains a '|' character, in which case a pointer to the substring of msgid after the first '|' character is returned.
*/
function strip_context(msgid: string, msgval: string): string;
/**
* Joins an array of strings together to form one long string, with the
* optional `separator` inserted between each of them.
*
* If `str_array` has no items, the return value will be an
* empty string. If `str_array` contains a single item, `separator` will not
* appear in the resulting string.
* @param separator a string to insert between each of the strings
* @param str_array an array of strings to join
* @returns a newly-allocated string containing all of the strings joined together, with @separator between them
*/
function strjoinv(separator: string | null, str_array: string[]): string;
/**
* Portability wrapper that calls `strlcat()` on systems which have it,
* and emulates it otherwise. Appends nul-terminated `src` string to `dest,`
* guaranteeing nul-termination for `dest`. The total size of `dest` won't
* exceed `dest_size`.
*
* At most `dest_size` - 1 characters will be copied. Unlike `strncat()`,
* `dest_size` is the full size of dest, not the space left over. This
* function does not allocate memory. It always nul-terminates (unless
* `dest_size` == 0 or there were no nul characters in the `dest_size`
* characters of dest to start with).
*
* Caveat: this is supposedly a more secure alternative to `strcat()` or
* `strncat()`, but for real security [func`GLib`.strconcat] is harder to mess up.
* @param dest destination buffer, already containing one nul-terminated string
* @param src source buffer
* @param dest_size length of @dest buffer in bytes (not length of existing string inside @dest)
* @returns size of attempted result, which is `MIN (dest_size, strlen (original dest)) + strlen (src)`, so if @retval >= @dest_size, truncation occurred
*/
function strlcat(dest: string, src: string, dest_size: number): number;
/**
* Portability wrapper that calls `strlcpy()` on systems which have it,
* and emulates `strlcpy()` otherwise. Copies `src` to `dest;` `dest` is
* guaranteed to be nul-terminated; `src` must be nul-terminated;
* `dest_size` is the buffer size, not the number of bytes to copy.
*
* At most `dest_size` - 1 characters will be copied. Always nul-terminates
* (unless `dest_size` is 0). This function does not allocate memory. Unlike
* `strncpy()`, this function doesn't pad `dest` (so it's often faster). It
* returns the size of the attempted result, `strlen (src)`, so if
* `retval` >= `dest_size,` truncation occurred.
*
* Caveat: `strlcpy()` is supposedly more secure than `strcpy()` or `strncpy()`,
* but if you really want to avoid screwups, [func`GLib`.strdup] is an even better
* idea.
* @param dest destination buffer
* @param src source buffer
* @param dest_size length of @dest in bytes
* @returns length of @src
*/
function strlcpy(dest: string, src: string, dest_size: number): number;
/**
* A case-insensitive string comparison, corresponding to the standard
* `strncasecmp()` function on platforms which support it. It is similar
* to [func`GLib`.strcasecmp] except it only compares the first `n` characters of
* the strings.
* @param s1 string to compare with @s2
* @param s2 string to compare with @s1
* @param n the maximum number of characters to compare
* @returns 0 if the strings match, a negative value if @s1 < @s2, or a positive value if @s1 > @s2
*/
function strncasecmp(s1: string, s2: string, n: number): number;
/**
* Duplicates the first `n` bytes of a string, returning a newly-allocated
* buffer `n` + 1 bytes long which will always be nul-terminated. If `str`
* is less than `n` bytes long the buffer is padded with nuls. If `str` is
* `NULL` it returns `NULL`.
*
* To copy a number of characters from a UTF-8 encoded string,
* use [func`GLib`.utf8_strncpy] instead.
* @param str the string to duplicate
* @param n the maximum number of bytes to copy from @str
* @returns a newly-allocated buffer containing the first @n bytes of @str
*/
function strndup(str: string | null, n: number): string | null;
/**
* Creates a new string `length` bytes long filled with `fill_char`.
* @param length the length of the new string
* @param fill_char the byte to fill the string with
* @returns a newly-allocated string filled with @fill_char
*/
function strnfill(length: number, fill_char: number): string;
/**
* Reverses all of the bytes in a string. For example,
* `g_strreverse ("abcdef")` will result in "fedcba".
*
* Note that `g_strreverse()` doesn't work on UTF-8 strings
* containing multibyte characters. For that purpose, use
* [func`GLib`.utf8_strreverse].
* @param string the string to reverse
* @returns the @string, reversed in place
*/
function strreverse(string: string): string;
/**
* Searches the string `haystack` for the last occurrence
* of the string `needle`.
*
* The fact that this function returns `gchar *` rather than `const gchar *` is
* a historical artifact.
* @param haystack a string to search in
* @param needle the string to search for
* @returns a pointer to the found occurrence, or `NULL` if not found
*/
function strrstr(haystack: string, needle: string): string | null;
/**
* Searches the string `haystack` for the last occurrence
* of the string `needle,` limiting the length of the search
* to `haystack_len`.
*
* The fact that this function returns `gchar *` rather than `const gchar *` is
* a historical artifact.
* @param haystack a string to search in
* @param haystack_len the maximum length of @haystack in bytes. A length of `-1` can be used to mean "search the entire string", like [func@GLib.strrstr]
* @param needle the string to search for
* @returns a pointer to the found occurrence, or `NULL` if not found
*/
function strrstr_len(haystack: string, haystack_len: number, needle: string): string | null;
/**
* Returns a string describing the given signal, e.g. "Segmentation fault".
* If the signal is unknown, it returns “unknown signal (<signum\>)”.
*
* You should use this function in preference to `strsignal()`, because it
* returns a string in UTF-8 encoding, and since not all platforms support
* the `strsignal()` function.
* @param signum the signal number. See the `signal` documentation
* @returns the string describing the signal
*/
function strsignal(signum: number): string;
/**
* Splits a string into a maximum of `max_tokens` pieces, using the given
* `delimiter`. If `max_tokens` is reached, the remainder of `string` is
* appended to the last token.
*
* As an example, the result of `g_strsplit (":a:bc::d:", ":", -1)` is an array
* containing the six strings "", "a", "bc", "", "d" and "".
*
* As a special case, the result of splitting the empty string "" is an empty
* array, not an array containing a single string. The reason for this
* special case is that being able to represent an empty array is typically
* more useful than consistent handling of empty elements. If you do need
* to represent empty elements, you'll need to check for the empty string
* before calling `g_strsplit()`.
* @param string a string to split
* @param delimiter a string which specifies the places at which to split the string. The delimiter is not included in any of the resulting strings, unless @max_tokens is reached.
* @param max_tokens the maximum number of pieces to split @string into If this is less than 1, the string is split completely
* @returns a newly-allocated array of strings, freed with [func@GLib.strfreev]
*/
function strsplit(string: string, delimiter: string, max_tokens: number): string[];
/**
* Splits `string` into a number of tokens not containing any of the characters
* in `delimiters`. A token is the (possibly empty) longest string that does not
* contain any of the characters in `delimiters`. If `max_tokens` is reached, the
* remainder is appended to the last token.
*
* For example, the result of g_strsplit_set ("abc:def/ghi", ":/", -1) is an
* array containing the three strings "abc", "def", and "ghi".
*
* The result of g_strsplit_set (":def/ghi:", ":/", -1) is an array containing
* the four strings "", "def", "ghi", and "".
*
* As a special case, the result of splitting the empty string "" is an empty
* array, not an array containing a single string. The reason for this
* special case is that being able to represent an empty array is typically
* more useful than consistent handling of empty elements. If you do need
* to represent empty elements, you'll need to check for the empty string
* before calling `g_strsplit_set()`.
*
* Note that this function works on bytes not characters, so it can't be used
* to delimit UTF-8 strings for anything but ASCII characters.
* @param string a string to split
* @param delimiters a string containing characters that are used to split the string. Can be empty, which will result in no string splitting
* @param max_tokens the maximum number of tokens to split @string into. If this is less than 1, the string is split completely
* @returns a newly-allocated array of strings. Use [func@GLib.strfreev] to free it.
*/
function strsplit_set(string: string, delimiters: string, max_tokens: number): string[];
/**
* Searches the string `haystack` for the first occurrence
* of the string `needle,` limiting the length of the search
* to `haystack_len` or a nul terminator byte (whichever is reached first).
*
* A length of `-1` can be used to mean “search the entire string”, like
* `strstr()`.
*
* The fact that this function returns `gchar *` rather than `const gchar *` is
* a historical artifact.
* @param haystack a string to search in
* @param haystack_len the maximum length of @haystack in bytes, or `-1` to search it entirely
* @param needle the string to search for
* @returns a pointer to the found occurrence, or `NULL` if not found
*/
function strstr_len(haystack: string, haystack_len: number, needle: string): string | null;
/**
* Converts a string to a floating point value.
*
* It calls the standard `strtod()` function to handle the conversion, but
* if the string is not completely converted it attempts the conversion
* again with [func`GLib`.ascii_strtod], and returns the best match.
*
* This function should seldom be used. The normal situation when reading
* numbers not for human consumption is to use [func`GLib`.ascii_strtod]. Only when
* you know that you must expect both locale formatted and C formatted numbers
* should you use this. Make sure that you don't pass strings such as comma
* separated lists of values, since the commas may be interpreted as a decimal
* point in some locales, causing unexpected results.
* @param nptr the string to convert to a numeric value
* @returns the converted value
*/
function strtod(nptr: string): [number, string];
/**
* Converts a string to upper case.
* @param string the string to convert
* @returns the string
*/
function strup(string: string): string;
/**
* Checks if an array of strings contains the string `str` according to
* [func`GLib`.str_equal]. `strv` must not be `NULL`.
* @param strv an array of strings to search in
* @param str the string to search for
* @returns true if @str is an element of @strv
*/
function strv_contains(strv: string[], str: string): boolean;
/**
* Checks if two arrays of strings contain exactly the same elements in
* exactly the same order.
*
* Elements are compared using [func`GLib`.str_equal]. To match independently
* of order, sort the arrays first (using [func`GLib`.qsort_with_data]
* or similar).
*
* Two empty arrays are considered equal. Neither `strv1` nor `strv2` may be
* `NULL`.
* @param strv1 an array of strings to compare to @strv2
* @param strv2 an array of strings to compare to @strv1
* @returns true if @strv1 and @strv2 are equal
*/
function strv_equal(strv1: string[], strv2: string[]): boolean;
function strv_get_type(): GObject.GType;
/**
* Returns the length of an array of strings. `str_array` must not be `NULL`.
* @param str_array an array of strings
* @returns length of @str_array
*/
function strv_length(str_array: string[]): number;
/**
* Creates a new test case.
*
* This function is similar to [func`GLib`.test_create_case].
* However the test is assumed to use no fixture, and test suites are
* automatically created on the fly and added to the root fixture,
* based on the /-separated portions of `testpath`. The `test_data`
* argument will be passed as first argument to `test_func`.
*
* If `testpath` includes the component "subprocess" anywhere in it,
* the test will be skipped by default, and only run if explicitly
* required via the `-p` command-line option or [func`GLib`.test_trap_subprocess].
*
* No component of `testpath` may start with a dot (`.`) if the
* [const`GLib`.TEST_OPTION_ISOLATE_DIRS] option is being used;
* and it is recommended to do so even if it isnt.
* @param testpath a /-separated name for the test
* @param test_data data for the @test_func
* @param test_func the test function to invoke for this test
*/
function test_add_data_func(testpath: string, test_data: any | null, test_func: TestDataFunc): void;
/**
* Creates a new test case.
*
* In constract to [func`GLib`.test_add_data_func], this function
* is freeing `test_data` after the test run is complete.
* @param testpath a /-separated name for the test
* @param test_data data for @test_func
* @param test_func the test function to invoke for this test
*/
function test_add_data_func_full(testpath: string, test_data: any | null, test_func: TestDataFunc): void;
/**
* Creates a new test case.
*
* This function is similar to [func`GLib`.test_create_case].
* However the test is assumed to use no fixture, and test suites are
* automatically created on the fly and added to the root fixture,
* based on the /-separated portions of `testpath`.
*
* If `testpath` includes the component "subprocess" anywhere in it,
* the test will be skipped by default, and only run if explicitly
* required via the `-p` command-line option or [func`GLib`.test_trap_subprocess].
*
* No component of `testpath` may start with a dot (`.`) if the
* [const`GLib`.TEST_OPTION_ISOLATE_DIRS] option is being used; and
* it is recommended to do so even if it isnt.
* @param testpath a /-separated name for the test
* @param test_func the test function to invoke for this test
*/
function test_add_func(testpath: string, test_func: TestFunc): void;
function test_assert_expected_messages_internal(domain: string, file: string, line: number, func: string): void;
/**
* Adds a message to test reports that associates a bug URI with a test case.
*
* Bug URIs are constructed from a base URI set with [func`GLib`.test_bug_base]
* and `bug_uri_snippet`. If [func`GLib`.test_bug_base] has not been called, it is
* assumed to be the empty string, so a full URI can be provided to
* [func`GLib`.test_bug] instead.
*
* See also [func`GLib`.test_summary].
*
* Since GLib 2.70, the base URI is not prepended to `bug_uri_snippet`
* if it is already a valid URI.
* @param bug_uri_snippet Bug specific bug tracker URI or URI portion.
*/
function test_bug(bug_uri_snippet: string): void;
/**
* Specifies the base URI for bug reports.
*
* The base URI is used to construct bug report messages for
* [func`GLib`.test_message] when [func`GLib`.test_bug] is called.
* Calling this function outside of a test case sets the
* default base URI for all test cases. Calling it from within
* a test case changes the base URI for the scope of the test
* case only.
* Bug URIs are constructed by appending a bug specific URI
* portion to `uri_pattern,` or by replacing the special string
* `%s` within `uri_pattern` if that is present.
*
* If [func`GLib`.test_bug_base] is not called, bug URIs are formed
* solely from the value provided by [func`GLib`.test_bug].
* @param uri_pattern the base pattern for bug URIs
*/
function test_bug_base(uri_pattern: string): void;
/**
* Attempts to disable system crash reporting infrastructure.
*
* This function should be called before exercising code paths that are
* expected or intended to crash, to avoid wasting resources in system-wide
* crash collection infrastructure such as systemd-coredump or abrt.
*/
function test_disable_crash_reporting(): void;
/**
* Indicates that a message with the given `log_domain` and `log_level,`
* with text matching `pattern,` is expected to be logged.
*
* When this message is logged, it will not be printed, and the test case will
* not abort.
*
* This API may only be used with the old logging API ([func`GLib`.log] without
* `G_LOG_USE_STRUCTURED` defined). It will not work with the structured logging
* API. See [Testing for Messages](logging.html#testing-for-messages).
*
* Use [func`GLib`.test_assert_expected_messages] to assert that all
* previously-expected messages have been seen and suppressed.
*
* You can call this multiple times in a row, if multiple messages are
* expected as a result of a single call. (The messages must appear in
* the same order as the calls to [func`GLib`.test_expect_message].)
*
* For example:
*
* ```c
* // g_main_context_push_thread_default() should fail if the
* // context is already owned by another thread.
* g_test_expect_message (G_LOG_DOMAIN,
* G_LOG_LEVEL_CRITICAL,
* "assertion*acquired_context*failed");
* g_main_context_push_thread_default (bad_context);
* g_test_assert_expected_messages ();
* ```
*
* Note that you cannot use this to test [func`GLib`.error] messages, since
* [func`GLib`.error] intentionally never returns even if the program doesnt
* abort; use [func`GLib`.test_trap_subprocess] in this case.
*
* If messages at [flags`GLib`.LogLevelFlags.LEVEL_DEBUG] are emitted, but not explicitly
* expected via [func`GLib`.test_expect_message] then they will be ignored.
* @param log_domain the log domain of the message
* @param log_level the log level of the message
* @param pattern a glob-style pattern (see [type@GLib.PatternSpec])
*/
function test_expect_message(log_domain: string | null, log_level: LogLevelFlags | null, pattern: string): void;
/**
* Indicates that a test failed.
*
* This function can be called multiple times from the same test.
* You can use this function if your test failed in a recoverable way.
*
* Do not use this function if the failure of a test could cause
* other tests to malfunction.
*
* Calling this function will not stop the test from running, you
* need to return from the test function yourself. So you can
* produce additional diagnostic messages or even continue running
* the test.
*
* If not called from inside a test, this function does nothing.
*
* Note that unlike [func`GLib`.test_skip] and [func`GLib`.test_incomplete],
* this function does not log a message alongside the test failure.
* If details of the test failure are available, either log them with
* [func`GLib`.test_message] before [func`GLib`.test_fail], or use
* [func`GLib`.test_fail_printf] instead.
*/
function test_fail(): void;
/**
* Returns whether a test has already failed.
*
* This will be the case when [func`GLib`.test_fail],
* [func`GLib`.test_incomplete] or [func`GLib`.test_skip] have
* been called, but also if an assertion has failed.
*
* This can be useful to return early from a test if
* continuing after a failed assertion might be harmful.
*
* The return value of this function is only meaningful
* if it is called from inside a test function.
* @returns true if the test has failed
*/
function test_failed(): boolean;
/**
* Gets the pathname of the directory containing test files of the type
* specified by `file_type`.
*
* This is approximately the same as calling `g_test_build_filename(".")`,
* but you don't need to free the return value.
* @param file_type the type of file (built vs. distributed)
* @returns the path of the directory, owned by GLib
*/
function test_get_dir(file_type: TestFileType | null): string;
/**
* Gets the test path for the test currently being run.
*
* In essence, it will be the same string passed as the first argument
* to e.g. [func`GLib`.test_add] when the test was added.
*
* This function returns a valid string only within a test function.
*
* Note that this is a test path, not a file system path.
* @returns the test path for the test currently being run
*/
function test_get_path(): string;
/**
* Indicates that a test failed because of some incomplete
* functionality.
*
* This function can be called multiple times from the same test.
*
* Calling this function will not stop the test from running, you
* need to return from the test function yourself. So you can
* produce additional diagnostic messages or even continue running
* the test.
*
* If not called from inside a test, this function does nothing.
* @param msg explanation
*/
function test_incomplete(msg?: string | null): void;
function test_log_type_name(log_type: TestLogType | null): string;
/**
* Enqueues a callback `destroy_func` to be executed during the next test case
* teardown phase.
*
* This is most useful to auto destroy allocated test resources at the end
* of a test run. Resources are released in reverse queue order, that means
* enqueueing callback `A` before callback `B` will cause `B()` to be called
* before `A()` during teardown.
* @param destroy_data destroy callback data
*/
function test_queue_destroy(destroy_data?: any | null): void;
/**
* Enqueues a pointer to be released with [func`GLib`.free]
* during the next teardown phase.
*
* This is equivalent to calling [func`GLib`.test_queue_destroy]
* with a destroy callback of [func`GLib`.free].
* @param gfree_pointer the pointer to be stored
*/
function test_queue_free(gfree_pointer?: any | null): void;
/**
* Gets a reproducible random floating point number.
*
* See [func`GLib`.test_rand_int] for details on test case random numbers.
* @returns a random number from the seeded random number generator
*/
function test_rand_double(): number;
/**
* Gets a reproducible random floating point number out of a specified range.
*
* See [func`GLib`.test_rand_int] for details on test case random numbers.
* @param range_start the minimum value returned by this function
* @param range_end the minimum value not returned by this function
* @returns a number with @range_start <= number < @range_end
*/
function test_rand_double_range(range_start: number, range_end: number): number;
/**
* Gets a reproducible random integer number.
*
* The random numbers generated by the g_test_rand_*() family of functions
* change with every new test program start, unless the --seed option is
* given when starting test programs.
*
* For individual test cases however, the random number generator is
* reseeded, to avoid dependencies between tests and to make --seed
* effective for all test cases.
* @returns a random number from the seeded random number generator
*/
function test_rand_int(): number;
/**
* Gets a reproducible random integer number out of a specified range.
*
* See [func`GLib`.test_rand_int] for details on test case random numbers.
* @param begin the minimum value returned by this function
* @param end the smallest value not to be returned by this function
* @returns a number with @begin <= number < @end
*/
function test_rand_int_range(begin: number, end: number): number;
/**
* Runs all tests under the toplevel suite.
*
* The toplevel suite can be retrieved with [func`GLib`.test_get_root].
*
* Similar to [func`GLib`.test_run_suite], the test cases to be run are
* filtered according to test path arguments (`-p testpath` and `-s testpath`)
* as parsed by [func`GLib`.test_init]. [func`GLib`.test_run_suite] or
* [func`GLib`.test_run] may only be called once in a program.
*
* In general, the tests and sub-suites within each suite are run in
* the order in which they are defined. However, note that prior to
* GLib 2.36, there was a bug in the `g_test_add_*`
* functions which caused them to create multiple suites with the same
* name, meaning that if you created tests "/foo/simple",
* "/bar/simple", and "/foo/using-bar" in that order, they would get
* run in that order (since [func`GLib`.test_run] would run the first "/foo"
* suite, then the "/bar" suite, then the second "/foo" suite). As of
* 2.36, this bug is fixed, and adding the tests in that order would
* result in a running order of "/foo/simple", "/foo/using-bar",
* "/bar/simple". If this new ordering is sub-optimal (because it puts
* more-complicated tests before simpler ones, making it harder to
* figure out exactly what has failed), you can fix it by changing the
* test paths to group tests by suite in a way that will result in the
* desired running order. Eg, "/simple/foo", "/simple/bar",
* "/complex/foo-using-bar".
*
* However, you should never make the actual result of a test depend
* on the order that tests are run in. If you need to ensure that some
* particular code runs before or after a given test case, use
* [func`GLib`.test_add], which lets you specify setup and teardown functions.
*
* If all tests are skipped or marked as incomplete (expected failures),
* this function will return 0 if producing TAP output, or 77 (treated
* as "skip test" by Automake) otherwise.
* @returns 0 on success, 1 on failure (assuming it returns at all), 0 or 77 if all tests were skipped or marked as incomplete
*/
function test_run(): number;
/**
* Executes the tests within `suite` and all nested test suites.
*
* The test suites to be executed are filtered according to
* test path arguments (`-p testpath` and `-s testpath`) as parsed by
* [func`GLib`.test_init]. See the [func`GLib`.test_run] documentation
* for more information on the order that tests are run in.
*
* [func`GLib`.test_run_suite] or [func`GLib`.test_run] may only be
* called once in a program.
* @param suite a test suite
* @returns 0 on success
*/
function test_run_suite(suite: TestSuite): number;
/**
* Changes the behaviour of the various assertion macros.
*
* The `g_assert_*()` macros, `g_test_assert_expected_messages()`
* and the various `g_test_trap_assert_*()` macros are changed
* to not abort to program.
*
* Instead, they will call [func`GLib`.test_fail] and continue.
* (This also changes the behavior of [func`GLib`.test_fail] so that
* it will not cause the test program to abort after completing
* the failed test.)
*
* Note that the [func`GLib`.assert_not_reached] and [func`GLib`.assert]
* macros are not affected by this.
*
* This function can only be called after [func`GLib`.test_init].
*/
function test_set_nonfatal_assertions(): void;
/**
* Indicates that a test was skipped.
*
* Calling this function will not stop the test from running, you
* need to return from the test function yourself. So you can
* produce additional diagnostic messages or even continue running
* the test.
*
* If not called from inside a test, this function does nothing.
* @param msg explanation
*/
function test_skip(msg?: string | null): void;
/**
* Returns true if the test program is running under [func`GLib`.test_trap_subprocess].
* @returns true if the test program is running under [func@GLib.test_trap_subprocess]
*/
function test_subprocess(): boolean;
/**
* Sets the summary for a test.
*
* This may be included in test report output, and is useful documentation for
* anyone reading the source code or modifying a test in future. It must be a
* single line, and it should summarise what the test checks, and how.
*
* This should be called at the top of a test function.
*
* For example:
*
* ```c
* static void
* test_array_sort (void)
* {
* g_test_summary ("Test my_array_sort() sorts the array correctly and stably, "
* "including testing zero length and one-element arrays.");
*
* // ...
* }
* ```
*
* See also [func`GLib`.test_bug].
* @param summary summary of the test purpose
*/
function test_summary(summary: string): void;
/**
* Gets the number of seconds since the last start of the timer with
* [func`GLib`.test_timer_start].
* @returns the time since the last start of the timer in seconds
*/
function test_timer_elapsed(): number;
/**
* Reports the last result of [func`GLib`.test_timer_elapsed].
* @returns the last result of [func@GLib.test_timer_elapsed]
*/
function test_timer_last(): number;
/**
* Starts a timing test.
*
* Call [func`GLib`.test_timer_elapsed] when the task is supposed
* to be done. Call this function again to restart the timer.
*/
function test_timer_start(): void;
function test_trap_assertions(
domain: string,
file: string,
line: number,
func: string,
assertion_flags: number,
pattern: string,
): void;
/**
* Forks the current test program to execute a test case that might
* not return or that might abort.
*
* If `usec_timeout` is non-0, the forked test case is aborted and
* considered failing if its run time exceeds it.
*
* The forking behavior can be configured with [flags`GLib`.TestTrapFlags]
* flags.
*
* In the following example, the test code forks, the forked child
* process produces some sample output and exits successfully.
* The forking parent process then asserts successful child program
* termination and validates child program outputs.
*
* ```c
* static void
* test_fork_patterns (void)
* {
* if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR))
* {
* g_print ("some stdout text: somagic17
* ");
* g_printerr ("some stderr text: semagic43
* ");
* exit (0); // successful test run
* }
* g_test_trap_assert_passed ();
* g_test_trap_assert_stdout ("*somagic17*");
* g_test_trap_assert_stderr ("*semagic43*");
* }
* ```
* @param usec_timeout timeout for the forked test in microseconds
* @param test_trap_flags flags to modify forking behaviour
* @returns true for the forked child and false for the executing parent process.
*/
function test_trap_fork(usec_timeout: number, test_trap_flags: TestTrapFlags | null): boolean;
/**
* Checks the result of the last [func`GLib`.test_trap_subprocess] call.
* @returns true if the last test subprocess terminated successfully
*/
function test_trap_has_passed(): boolean;
/**
* Checks the result of the last [func`GLib`.test_trap_subprocess] call.
* @returns true if the last test subprocess got killed due to a timeout
*/
function test_trap_reached_timeout(): boolean;
/**
* Respawns the test program to run only `test_path` in a subprocess.
*
* This is equivalent to calling [func`GLib`.test_trap_subprocess_with_envp]
* with `envp` set to `NULL`. See the documentation for that function
* for full details.
* @param test_path test to run in a subprocess
* @param usec_timeout timeout for the subprocess test in microseconds.
* @param test_flags flags to modify subprocess behaviour
*/
function test_trap_subprocess(
test_path: string | null,
usec_timeout: number,
test_flags: TestSubprocessFlags | null,
): void;
/**
* Respawns the test program to run only `test_path` in a subprocess with
* a given environment.
*
* This can be used for a test case that might not return, or that
* might abort.
*
* If `test_path` is `NULL` then the same test is re-run in a subprocess.
* You can use [func`GLib`.test_subprocess] to determine whether the test
* is in a subprocess or not.
*
* `test_path` can also be the name of the parent test, followed by
* "`/subprocess/`" and then a name for the specific subtest (or just
* ending with "`/subprocess`" if the test only has one child test);
* tests with names of this form will automatically be skipped in the
* parent process.
*
* If `envp` is `NULL`, the parent process environment will be inherited.
*
* If `usec_timeout` is non-0, the test subprocess is aborted and
* considered failing if its run time exceeds it.
*
* The subprocess behavior can be configured with [flags`GLib`.TestSubprocessFlags]
* flags.
*
* You can use methods such as [func`GLib`.test_trap_assert_passed],
* [func`GLib`.test_trap_assert_failed], and [func`GLib`.test_trap_assert_stderr] to
* check the results of the subprocess. (But note that
* [func`GLib`.test_trap_assert_stdout] and [func`GLib`.test_trap_assert_stderr]
* cannot be used if `test_flags` specifies that the child should
* inherit the parent stdout/stderr.)
*
* If your `main ()` needs to behave differently in the subprocess, you can
* call [func`GLib`.test_subprocess] (after calling [func`GLib`.test_init])
* to see whether you are in a subprocess.
*
* Internally, this function tracks the child process using
* [func`GLib`.child_watch_source_new], so your process must not ignore
* `SIGCHLD`, and must not attempt to watch or wait for the child process
* via another mechanism.
*
* The following example tests that calling `my_object_new(1000000)` will
* abort with an error message.
*
* ```c
* static void
* test_create_large_object (void)
* {
* if (g_test_subprocess ())
* {
* my_object_new (1000000);
* return;
* }
*
* // Reruns this same test in a subprocess
* g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
* g_test_trap_assert_failed ();
* g_test_trap_assert_stderr ("*ERROR*too large*");
* }
*
* static void
* test_different_username (void)
* {
* if (g_test_subprocess ())
* {
* // Code under test goes here
* g_message ("Username is now simulated as %s", g_getenv ("USER"));
* return;
* }
*
* // Reruns this same test in a subprocess
* g_autoptr(GStrv) envp = g_get_environ ();
* envp = g_environ_setenv (g_steal_pointer (&envp), "USER", "charlie", TRUE);
* g_test_trap_subprocess_with_envp (NULL, envp, 0, G_TEST_SUBPROCESS_DEFAULT);
* g_test_trap_assert_passed ();
* g_test_trap_assert_stdout ("Username is now simulated as charlie");
* }
*
* int
* main (int argc, char **argv)
* {
* g_test_init (&argc, &argv, NULL);
*
* g_test_add_func ("/myobject/create-large-object",
* test_create_large_object);
* g_test_add_func ("/myobject/different-username",
* test_different_username);
* return g_test_run ();
* }
* ```
* @param test_path test to run in a subprocess
* @param envp environment to run the test in
* @param usec_timeout timeout for the subprocess test in microseconds
* @param test_flags flags to modify subprocess behaviour
*/
function test_trap_subprocess_with_envp(
test_path: string | null,
envp: string[] | null,
usec_timeout: number,
test_flags: TestSubprocessFlags | null,
): void;
function thread_error_quark(): Quark;
/**
* Terminates the current thread.
*
* If another thread is waiting for us using g_thread_join() then the
* waiting thread will be woken up and get `retval` as the return value
* of g_thread_join().
*
* Calling g_thread_exit() with a parameter `retval` is equivalent to
* returning `retval` from the function `func,` as given to g_thread_new().
*
* You must only call g_thread_exit() from a thread that you created
* yourself with g_thread_new() or related APIs. You must not call
* this function from a thread created with another threading library
* or or from within a #GThreadPool.
* @param retval the return value of this thread
*/
function thread_exit(retval?: any | null): void;
/**
* This function will return the maximum `interval` that a
* thread will wait in the thread pool for new tasks before
* being stopped.
*
* If this function returns 0, threads waiting in the thread
* pool for new work are not stopped.
* @returns the maximum @interval (milliseconds) to wait for new tasks in the thread pool before stopping the thread
*/
function thread_pool_get_max_idle_time(): number;
/**
* Returns the maximal allowed number of unused threads.
* @returns the maximal number of unused threads
*/
function thread_pool_get_max_unused_threads(): number;
/**
* Returns the number of currently unused threads.
* @returns the number of currently unused threads
*/
function thread_pool_get_num_unused_threads(): number;
/**
* This function will set the maximum `interval` that a thread
* waiting in the pool for new tasks can be idle for before
* being stopped. This function is similar to calling
* g_thread_pool_stop_unused_threads() on a regular timeout,
* except this is done on a per thread basis.
*
* By setting `interval` to 0, idle threads will not be stopped.
*
* The default value is 15000 (15 seconds).
* @param interval the maximum @interval (in milliseconds) a thread can be idle
*/
function thread_pool_set_max_idle_time(interval: number): void;
/**
* Sets the maximal number of unused threads to `max_threads`.
* If `max_threads` is -1, no limit is imposed on the number
* of unused threads.
*
* The default value is 8 since GLib 2.84. Previously the default value was 2.
* @param max_threads maximal number of unused threads
*/
function thread_pool_set_max_unused_threads(max_threads: number): void;
/**
* Stops all currently unused threads. This does not change the
* maximal number of unused threads. This function can be used to
* regularly stop all unused threads e.g. from g_timeout_add().
*/
function thread_pool_stop_unused_threads(): void;
/**
* This function returns the #GThread corresponding to the
* current thread. Note that this function does not increase
* the reference count of the returned struct.
*
* This function will return a #GThread even for threads that
* were not created by GLib (i.e. those created by other threading
* APIs). This may be useful for thread identification purposes
* (i.e. comparisons) but you must not use GLib functions (such
* as g_thread_join()) on these threads.
* @returns the #GThread representing the current thread
*/
function thread_self(): Thread;
/**
* Causes the calling thread to voluntarily relinquish the CPU, so
* that other threads can run.
*
* This function is often used as a method to make busy wait less evil.
*/
function thread_yield(): void;
/**
* Converts a string containing an ISO 8601 encoded date and time
* to a #GTimeVal and puts it into `time_`.
*
* `iso_date` must include year, month, day, hours, minutes, and
* seconds. It can optionally include fractions of a second and a time
* zone indicator. (In the absence of any time zone indication, the
* timestamp is assumed to be in local time.)
*
* Any leading or trailing space in `iso_date` is ignored.
*
* This function was deprecated, along with #GTimeVal itself, in GLib 2.62.
* Equivalent functionality is available using code like:
*
* ```
* GDateTime *dt = g_date_time_new_from_iso8601 (iso8601_string, NULL);
* gint64 time_val = g_date_time_to_unix (dt);
* g_date_time_unref (dt);
* ```
*
* @param iso_date an ISO 8601 encoded date string
* @returns %TRUE if the conversion was successful.
*/
function time_val_from_iso8601(iso_date: string): [boolean, TimeVal];
/**
* Sets a function to be called at regular intervals, with the given
* priority. The function is called repeatedly until it returns
* %FALSE, at which point the timeout is automatically destroyed and
* the function will not be called again. The `notify` function is
* called when the timeout is destroyed. The first call to the
* function will be at the end of the first `interval`.
*
* Note that timeout functions may be delayed, due to the processing of other
* event sources. Thus they should not be relied on for precise timing.
* After each call to the timeout function, the time of the next
* timeout is recalculated based on the current time and the given interval
* (it does not try to 'catch up' time lost in delays).
*
* See [mainloop memory management](main-loop.html#memory-management-of-sources) for details
* on how to handle the return value and memory management of `data`.
*
* This internally creates a main loop source using
* [func`GLib`.timeout_source_new] and attaches it to the global
* [struct`GLib`.MainContext] using [method`GLib`.Source.attach], so the callback
* will be invoked in whichever thread is running that main context. You can do
* these steps manually if you need greater control or to use a custom main
* context.
*
* The interval given is in terms of monotonic time, not wall clock time.
* See [func`GLib`.get_monotonic_time].
* @param priority the priority of the timeout source. Typically this will be in the range between [const@GLib.PRIORITY_DEFAULT] and [const@GLib.PRIORITY_HIGH].
* @param interval the time between calls to the function, in milliseconds (1/1000ths of a second)
* @param _function function to call
* @param notify function to call when the timeout is removed, or %NULL
* @returns the ID (greater than 0) of the event source.
*/
function timeout_add(
priority: number,
interval: number,
_function: SourceFunc,
notify?: DestroyNotify | null,
): number;
/**
* Sets a function to be called at regular intervals, with `priority`.
*
* The function is called repeatedly until it returns [const`GLib`.SOURCE_REMOVE]
* or %FALSE, at which point the timeout is automatically destroyed and
* the function will not be called again.
*
* Unlike [func`GLib`.timeout_add], this function operates at whole second
* granularity. The initial starting point of the timer is determined by the
* implementation and the implementation is expected to group multiple timers
* together so that they fire all at the same time. To allow this grouping, the
* `interval` to the first timer is rounded and can deviate up to one second
* from the specified interval. Subsequent timer iterations will generally run
* at the specified interval.
*
* Note that timeout functions may be delayed, due to the processing of other
* event sources. Thus they should not be relied on for precise timing.
* After each call to the timeout function, the time of the next
* timeout is recalculated based on the current time and the given `interval`
*
* See [mainloop memory management](main-loop.html#memory-management-of-sources) for details
* on how to handle the return value and memory management of `data`.
*
* If you want timing more precise than whole seconds, use
* [func`GLib`.timeout_add] instead.
*
* The grouping of timers to fire at the same time results in a more power
* and CPU efficient behavior so if your timer is in multiples of seconds
* and you don't require the first timer exactly one second from now, the
* use of [func`GLib`.timeout_add_seconds] is preferred over
* [func`GLib`.timeout_add].
*
* This internally creates a main loop source using
* [func`GLib`.timeout_source_new_seconds] and attaches it to the main loop
* context using [method`GLib`.Source.attach]. You can do these steps manually
* if you need greater control.
*
* It is safe to call this function from any thread.
*
* The interval given is in terms of monotonic time, not wall clock
* time. See [func`GLib`.get_monotonic_time].
* @param priority the priority of the timeout source. Typically this will be in the range between [const@GLib.PRIORITY_DEFAULT] and [const@GLib.PRIORITY_HIGH].
* @param interval the time between calls to the function, in seconds
* @param _function function to call
* @param notify function to call when the timeout is removed, or %NULL
* @returns the ID (greater than 0) of the event source.
*/
function timeout_add_seconds(
priority: number,
interval: number,
_function: SourceFunc,
notify?: DestroyNotify | null,
): number;
/**
* Creates a new timeout source.
*
* The source will not initially be associated with any [struct`GLib`.MainContext]
* and must be added to one with [method`GLib`.Source.attach] before it will be
* executed.
*
* The interval given is in terms of monotonic time, not wall clock
* time. See [func`GLib`.get_monotonic_time].
* @param interval the timeout interval in milliseconds.
* @returns the newly-created timeout source
*/
function timeout_source_new(interval: number): Source;
/**
* Creates a new timeout source.
*
* The source will not initially be associated with any
* [struct`GLib`.MainContext] and must be added to one with
* [method`GLib`.Source.attach] before it will be executed.
*
* The scheduling granularity/accuracy of this timeout source will be
* in seconds.
*
* The interval given is in terms of monotonic time, not wall clock time.
* See [func`GLib`.get_monotonic_time].
* @param interval the timeout interval in seconds
* @returns the newly-created timeout source
*/
function timeout_source_new_seconds(interval: number): Source;
/**
* Returns the height of a #GTrashStack.
*
* Note that execution of this function is of O(N) complexity
* where N denotes the number of items on the stack.
* @param stack_p a #GTrashStack
* @returns the height of the stack
*/
function trash_stack_height(stack_p: TrashStack): number;
/**
* Returns the element at the top of a #GTrashStack
* which may be %NULL.
* @param stack_p a #GTrashStack
* @returns the element at the top of the stack
*/
function trash_stack_peek(stack_p: TrashStack): any | null;
/**
* Pops a piece of memory off a #GTrashStack.
* @param stack_p a #GTrashStack
* @returns the element at the top of the stack
*/
function trash_stack_pop(stack_p: TrashStack): any | null;
/**
* Pushes a piece of memory onto a #GTrashStack.
* @param stack_p a #GTrashStack
* @param data_p the piece of memory to push on the stack
*/
function trash_stack_push(stack_p: TrashStack, data_p: any): void;
/**
* Attempts to allocate `n_bytes,` and returns %NULL on failure.
* Contrast with g_malloc(), which aborts the program on failure.
* @param n_bytes number of bytes to allocate.
* @returns the allocated memory, or %NULL.
*/
function try_malloc(n_bytes: number): any | null;
/**
* Attempts to allocate `n_bytes,` initialized to 0's, and returns %NULL on
* failure. Contrast with g_malloc0(), which aborts the program on failure.
* @param n_bytes number of bytes to allocate
* @returns the allocated memory, or %NULL
*/
function try_malloc0(n_bytes: number): any | null;
/**
* This function is similar to g_try_malloc0(), allocating (`n_blocks` * `n_block_bytes)` bytes,
* but care is taken to detect possible overflow during multiplication.
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @returns the allocated memory, or %NULL
*/
function try_malloc0_n(n_blocks: number, n_block_bytes: number): any | null;
/**
* This function is similar to g_try_malloc(), allocating (`n_blocks` * `n_block_bytes)` bytes,
* but care is taken to detect possible overflow during multiplication.
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @returns the allocated memory, or %NULL.
*/
function try_malloc_n(n_blocks: number, n_block_bytes: number): any | null;
/**
* Attempts to realloc `mem` to a new size, `n_bytes,` and returns %NULL
* on failure. Contrast with g_realloc(), which aborts the program
* on failure.
*
* If `mem` is %NULL, behaves the same as g_try_malloc().
* @param mem previously-allocated memory, or %NULL.
* @param n_bytes number of bytes to allocate.
* @returns the allocated memory, or %NULL.
*/
function try_realloc(mem: any | null, n_bytes: number): any | null;
/**
* This function is similar to g_try_realloc(), allocating (`n_blocks` * `n_block_bytes)` bytes,
* but care is taken to detect possible overflow during multiplication.
* @param mem previously-allocated memory, or %NULL.
* @param n_blocks the number of blocks to allocate
* @param n_block_bytes the size of each block in bytes
* @returns the allocated memory, or %NULL.
*/
function try_realloc_n(mem: any | null, n_blocks: number, n_block_bytes: number): any | null;
/**
* Convert a string from UCS-4 to UTF-16.
*
* A nul character (U+0000) will be added to the result after the converted text.
* @param str a UCS-4 encoded string
* @returns a pointer to a newly allocated UTF-16 string. This value must be freed with [func@GLib.free].
*/
function ucs4_to_utf16(str: number[]): [number, number, number];
/**
* Convert a string from a 32-bit fixed width representation as UCS-4.
* to UTF-8.
*
* The result will be terminated with a nul byte.
* @param str a UCS-4 encoded string
* @returns a pointer to a newly allocated UTF-8 string. This value must be freed with [func@GLib.free]. If an error occurs, @items_read will be set to the position of the first invalid input character.
*/
function ucs4_to_utf8(str: number[]): [string, number, number];
/**
* Determines the break type of `c`. `c` should be a Unicode character
* (to derive a character from UTF-8 encoded text, use
* g_utf8_get_char()). The break type is used to find word and line
* breaks ("text boundaries"), Pango implements the Unicode boundary
* resolution algorithms and normally you would use a function such
* as pango_break() instead of caring about break types yourself.
* @param c a Unicode character
* @returns the break type of @c
*/
function unichar_break_type(c: number): UnicodeBreakType;
/**
* Determines the canonical combining class of a Unicode character.
* @param uc a Unicode character
* @returns the combining class of the character
*/
function unichar_combining_class(uc: number): number;
/**
* Performs a single composition step of the
* Unicode canonical composition algorithm.
*
* This function includes algorithmic Hangul Jamo composition,
* but it is not exactly the inverse of g_unichar_decompose().
* No composition can have either of `a` or `b` equal to zero.
* To be precise, this function composes if and only if
* there exists a Primary Composite P which is canonically
* equivalent to the sequence <`a,``b>`. See the Unicode
* Standard for the definition of Primary Composite.
*
* If `a` and `b` do not compose a new character, `ch` is set to zero.
*
* See
* [UAX#15](http://unicode.org/reports/tr15/)
* for details.
* @param a a Unicode character
* @param b a Unicode character
* @returns %TRUE if the characters could be composed
*/
function unichar_compose(a: number, b: number): [boolean, number];
/**
* Performs a single decomposition step of the
* Unicode canonical decomposition algorithm.
*
* This function does not include compatibility
* decompositions. It does, however, include algorithmic
* Hangul Jamo decomposition, as well as 'singleton'
* decompositions which replace a character by a single
* other character. In the case of singletons `*b` will
* be set to zero.
*
* If `ch` is not decomposable, `*a` is set to `ch` and `*b`
* is set to zero.
*
* Note that the way Unicode decomposition pairs are
* defined, it is guaranteed that `b` would not decompose
* further, but `a` may itself decompose. To get the full
* canonical decomposition for `ch,` one would need to
* recursively call this function on `a`. Or use
* g_unichar_fully_decompose().
*
* See
* [UAX#15](http://unicode.org/reports/tr15/)
* for details.
* @param ch a Unicode character
* @returns %TRUE if the character could be decomposed
*/
function unichar_decompose(ch: number): [boolean, number, number];
/**
* Determines the numeric value of a character as a decimal
* digit.
* @param c a Unicode character
* @returns If @c is a decimal digit (according to g_unichar_isdigit()), its numeric value. Otherwise, -1.
*/
function unichar_digit_value(c: number): number;
/**
* Computes the canonical or compatibility decomposition of a
* Unicode character. For compatibility decomposition,
* pass %TRUE for `compat;` for canonical decomposition
* pass %FALSE for `compat`.
*
* The decomposed sequence is placed in `result`. Only up to
* `result_len` characters are written into `result`. The length
* of the full decomposition (irrespective of `result_len)` is
* returned by the function. For canonical decomposition,
* currently all decompositions are of length at most 4, but
* this may change in the future (very unlikely though).
* At any rate, Unicode does guarantee that a buffer of length
* 18 is always enough for both compatibility and canonical
* decompositions, so that is the size recommended. This is provided
* as %G_UNICHAR_MAX_DECOMPOSITION_LENGTH.
*
* See
* [UAX#15](http://unicode.org/reports/tr15/)
* for details.
* @param ch a Unicode character.
* @param compat whether perform canonical or compatibility decomposition
* @param result_len length of @result
* @returns the length of the full decomposition.
*/
function unichar_fully_decompose(ch: number, compat: boolean, result_len: number): [number, number];
/**
* In Unicode, some characters are "mirrored". This means that their
* images are mirrored horizontally in text that is laid out from right
* to left. For instance, "(" would become its mirror image, ")", in
* right-to-left text.
*
* If `ch` has the Unicode mirrored property and there is another unicode
* character that typically has a glyph that is the mirror image of `ch'`s
* glyph and `mirrored_ch` is set, it puts that character in the address
* pointed to by `mirrored_ch`. Otherwise the original character is put.
* @param ch a Unicode character
* @returns %TRUE if @ch has a mirrored character, %FALSE otherwise
*/
function unichar_get_mirror_char(ch: number): [boolean, number];
/**
* Looks up the #GUnicodeScript for a particular character (as defined
* by Unicode Standard Annex \#24). No check is made for `ch` being a
* valid Unicode character; if you pass in invalid character, the
* result is undefined.
*
* This function is equivalent to pango_script_for_unichar() and the
* two are interchangeable.
* @param ch a Unicode character
* @returns the #GUnicodeScript for the character.
*/
function unichar_get_script(ch: number): UnicodeScript;
/**
* Determines whether a character is alphanumeric.
* Given some UTF-8 text, obtain a character value
* with g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is an alphanumeric character
*/
function unichar_isalnum(c: number): boolean;
/**
* Determines whether a character is alphabetic (i.e. a letter).
* Given some UTF-8 text, obtain a character value with
* g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is an alphabetic character
*/
function unichar_isalpha(c: number): boolean;
/**
* Determines whether a character is a control character.
* Given some UTF-8 text, obtain a character value with
* g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is a control character
*/
function unichar_iscntrl(c: number): boolean;
/**
* Determines if a given character is assigned in the Unicode
* standard.
* @param c a Unicode character
* @returns %TRUE if the character has an assigned value
*/
function unichar_isdefined(c: number): boolean;
/**
* Determines whether a character is numeric (i.e. a digit). This
* covers ASCII 0-9 and also digits in other languages/scripts. Given
* some UTF-8 text, obtain a character value with g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is a digit
*/
function unichar_isdigit(c: number): boolean;
/**
* Determines whether a character is printable and not a space
* (returns %FALSE for control characters, format characters, and
* spaces). g_unichar_isprint() is similar, but returns %TRUE for
* spaces. Given some UTF-8 text, obtain a character value with
* g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is printable unless it's a space
*/
function unichar_isgraph(c: number): boolean;
/**
* Determines whether a character is a lowercase letter.
* Given some UTF-8 text, obtain a character value with
* g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is a lowercase letter
*/
function unichar_islower(c: number): boolean;
/**
* Determines whether a character is a mark (non-spacing mark,
* combining mark, or enclosing mark in Unicode speak).
* Given some UTF-8 text, obtain a character value
* with g_utf8_get_char().
*
* Note: in most cases where isalpha characters are allowed,
* ismark characters should be allowed to as they are essential
* for writing most European languages as well as many non-Latin
* scripts.
* @param c a Unicode character
* @returns %TRUE if @c is a mark character
*/
function unichar_ismark(c: number): boolean;
/**
* Determines whether a character is printable.
* Unlike g_unichar_isgraph(), returns %TRUE for spaces.
* Given some UTF-8 text, obtain a character value with
* g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is printable
*/
function unichar_isprint(c: number): boolean;
/**
* Determines whether a character is punctuation or a symbol.
* Given some UTF-8 text, obtain a character value with
* g_utf8_get_char().
* @param c a Unicode character
* @returns %TRUE if @c is a punctuation or symbol character
*/
function unichar_ispunct(c: number): boolean;
/**
* Determines whether a character is a space, tab, or line separator
* (newline, carriage return, etc.). Given some UTF-8 text, obtain a
* character value with g_utf8_get_char().
*
* (Note: don't use this to do word breaking; you have to use
* Pango or equivalent to get word breaking right, the algorithm
* is fairly complex.)
* @param c a Unicode character
* @returns %TRUE if @c is a space character
*/
function unichar_isspace(c: number): boolean;
/**
* Determines if a character is titlecase. Some characters in
* Unicode which are composites, such as the DZ digraph
* have three case variants instead of just two. The titlecase
* form is used at the beginning of a word where only the
* first letter is capitalized. The titlecase form of the DZ
* digraph is U+01F2 LATIN CAPITAL LETTTER D WITH SMALL LETTER Z.
* @param c a Unicode character
* @returns %TRUE if the character is titlecase
*/
function unichar_istitle(c: number): boolean;
/**
* Determines if a character is uppercase.
* @param c a Unicode character
* @returns %TRUE if @c is an uppercase character
*/
function unichar_isupper(c: number): boolean;
/**
* Determines if a character is typically rendered in a double-width
* cell.
* @param c a Unicode character
* @returns %TRUE if the character is wide
*/
function unichar_iswide(c: number): boolean;
/**
* Determines if a character is typically rendered in a double-width
* cell under legacy East Asian locales. If a character is wide according to
* g_unichar_iswide(), then it is also reported wide with this function, but
* the converse is not necessarily true. See the
* [Unicode Standard Annex #11](http://www.unicode.org/reports/tr11/)
* for details.
*
* If a character passes the g_unichar_iswide() test then it will also pass
* this test, but not the other way around. Note that some characters may
* pass both this test and g_unichar_iszerowidth().
* @param c a Unicode character
* @returns %TRUE if the character is wide in legacy East Asian locales
*/
function unichar_iswide_cjk(c: number): boolean;
/**
* Determines if a character is a hexadecimal digit.
* @param c a Unicode character.
* @returns %TRUE if the character is a hexadecimal digit
*/
function unichar_isxdigit(c: number): boolean;
/**
* Determines if a given character typically takes zero width when rendered.
* The return value is %TRUE for all non-spacing and enclosing marks
* (e.g., combining accents), format characters, zero-width
* space, but not U+00AD SOFT HYPHEN.
*
* A typical use of this function is with one of g_unichar_iswide() or
* g_unichar_iswide_cjk() to determine the number of cells a string occupies
* when displayed on a grid display (terminals). However, note that not all
* terminals support zero-width rendering of zero-width marks.
* @param c a Unicode character
* @returns %TRUE if the character has zero width
*/
function unichar_iszerowidth(c: number): boolean;
/**
* Converts a single character to UTF-8.
* @param c a Unicode character code
* @returns number of bytes written
*/
function unichar_to_utf8(c: number): [number, string];
/**
* Converts a character to lower case.
* @param c a Unicode character.
* @returns the result of converting @c to lower case. If @c is not an upperlower or titlecase character, or has no lowercase equivalent @c is returned unchanged.
*/
function unichar_tolower(c: number): number;
/**
* Converts a character to the titlecase.
* @param c a Unicode character
* @returns the result of converting @c to titlecase. If @c is not an uppercase or lowercase character, @c is returned unchanged.
*/
function unichar_totitle(c: number): number;
/**
* Converts a character to uppercase.
* @param c a Unicode character
* @returns the result of converting @c to uppercase. If @c is not a lowercase or titlecase character, or has no upper case equivalent @c is returned unchanged.
*/
function unichar_toupper(c: number): number;
/**
* Classifies a Unicode character by type.
* @param c a Unicode character
* @returns the type of the character.
*/
function unichar_type(c: number): UnicodeType;
/**
* Checks whether `ch` is a valid Unicode character.
*
* Some possible integer values of `ch` will not be valid. U+0000 is considered a
* valid character, though its normally a string terminator.
* @param ch a Unicode character
* @returns `TRUE` if @ch is a valid Unicode character
*/
function unichar_validate(ch: number): boolean;
/**
* Determines the numeric value of a character as a hexadecimal
* digit.
* @param c a Unicode character
* @returns If @c is a hex digit (according to g_unichar_isxdigit()), its numeric value. Otherwise, -1.
*/
function unichar_xdigit_value(c: number): number;
/**
* Computes the canonical decomposition of a Unicode character.
* @param ch a Unicode character.
* @param result_len location to store the length of the return value.
* @returns a newly allocated string of Unicode characters. @result_len is set to the resulting length of the string.
*/
function unicode_canonical_decomposition(ch: number, result_len: number): number;
/**
* Computes the canonical ordering of a string in-place.
* This rearranges decomposed characters in the string
* according to their combining classes. See the Unicode
* manual for more information.
* @param string a UCS-4 encoded string.
*/
function unicode_canonical_ordering(string: number[]): void;
/**
* Looks up the Unicode script for `iso1`5924. ISO 15924 assigns four-letter
* codes to scripts. For example, the code for Arabic is 'Arab'.
* This function accepts four letter codes encoded as a `guint3`2 in a
* big-endian fashion. That is, the code expected for Arabic is
* 0x41726162 (0x41 is ASCII code for 'A', 0x72 is ASCII code for 'r', etc).
*
* See
* [Codes for the representation of names of scripts](http://unicode.org/iso15924/codelists.html)
* for details.
* @param iso15924 a Unicode script
* @returns the Unicode script for @iso15924, or of %G_UNICODE_SCRIPT_INVALID_CODE if @iso15924 is zero and %G_UNICODE_SCRIPT_UNKNOWN if @iso15924 is unknown.
*/
function unicode_script_from_iso15924(iso15924: number): UnicodeScript;
/**
* Looks up the ISO 15924 code for `script`. ISO 15924 assigns four-letter
* codes to scripts. For example, the code for Arabic is 'Arab'. The
* four letter codes are encoded as a `guint3`2 by this function in a
* big-endian fashion. That is, the code returned for Arabic is
* 0x41726162 (0x41 is ASCII code for 'A', 0x72 is ASCII code for 'r', etc).
*
* See
* [Codes for the representation of names of scripts](http://unicode.org/iso15924/codelists.html)
* for details.
* @param script a Unicode script
* @returns the ISO 15924 code for @script, encoded as an integer, of zero if @script is %G_UNICODE_SCRIPT_INVALID_CODE or ISO 15924 code 'Zzzz' (script code for UNKNOWN) if @script is not understood.
*/
function unicode_script_to_iso15924(script: UnicodeScript | null): number;
function unix_error_quark(): Quark;
/**
* Sets a function to be called when the IO condition, as specified by
* `condition` becomes true for `fd`.
*
* This is the same as g_unix_fd_add(), except that it allows you to
* specify a non-default priority and a provide a #GDestroyNotify for
* `user_data`.
* @param priority the priority of the source
* @param fd a file descriptor
* @param condition IO conditions to watch for on @fd
* @param _function a #GUnixFDSourceFunc
* @returns the ID (greater than 0) of the event source
*/
function unix_fd_add_full(
priority: number,
fd: number,
condition: IOCondition | null,
_function: UnixFDSourceFunc,
): number;
/**
* Creates a #GSource to watch for a particular I/O condition on a file
* descriptor.
*
* The source will never close the `fd` — you must do it yourself.
*
* Any callback attached to the returned #GSource must have type
* #GUnixFDSourceFunc.
* @param fd a file descriptor
* @param condition I/O conditions to watch for on @fd
* @returns the newly created #GSource
*/
function unix_fd_source_new(fd: number, condition: IOCondition | null): Source;
/**
* Get the `passwd` file entry for the given `user_name` using `getpwnam_r()`.
* This can fail if the given `user_name` doesnt exist.
*
* The returned `struct passwd` has been allocated using g_malloc() and should
* be freed using g_free(). The strings referenced by the returned struct are
* included in the same allocation, so are valid until the `struct passwd` is
* freed.
*
* This function is safe to call from multiple threads concurrently.
*
* You will need to include `pwd.h` to get the definition of `struct passwd`.
* @param user_name the username to get the passwd file entry for
* @returns passwd entry, or %NULL on error; free the returned value with g_free()
*/
function unix_get_passwd_entry(user_name: string): any | null;
/**
* Similar to the UNIX pipe() call, but on modern systems like Linux
* uses the pipe2() system call, which atomically creates a pipe with
* the configured flags.
*
* As of GLib 2.78, the supported flags are `O_CLOEXEC`/`FD_CLOEXEC` (see below)
* and `O_NONBLOCK`. Prior to GLib 2.78, only `FD_CLOEXEC` was supported — if
* you wanted to configure `O_NONBLOCK` then that had to be done separately with
* `fcntl()`.
*
* Since GLib 2.80, the constants %G_UNIX_PIPE_END_READ and
* %G_UNIX_PIPE_END_WRITE can be used as mnemonic indexes in `fds`.
*
* It is a programmer error to call this function with unsupported flags, and a
* critical warning will be raised.
*
* As of GLib 2.78, it is preferred to pass `O_CLOEXEC` in, rather than
* `FD_CLOEXEC`, as that matches the underlying `pipe()` API more closely. Prior
* to 2.78, only `FD_CLOEXEC` was supported. Support for `FD_CLOEXEC` may be
* deprecated and removed in future.
* @param fds Array of two integers
* @param flags Bitfield of file descriptor flags, as for fcntl()
* @returns %TRUE on success, %FALSE if not (and errno will be set).
*/
function unix_open_pipe(fds: number[], flags: number): boolean;
/**
* Control the non-blocking state of the given file descriptor,
* according to `nonblock`. On most systems this uses %O_NONBLOCK, but
* on some older ones may use %O_NDELAY.
* @param fd A file descriptor
* @param nonblock If %TRUE, set the descriptor to be non-blocking
* @returns %TRUE if successful
*/
function unix_set_fd_nonblocking(fd: number, nonblock: boolean): boolean;
/**
* A convenience function for g_unix_signal_source_new(), which
* attaches to the default #GMainContext. You can remove the watch
* using g_source_remove().
* @param priority the priority of the signal source. Typically this will be in the range between %G_PRIORITY_DEFAULT and %G_PRIORITY_HIGH.
* @param signum Signal number
* @param handler Callback
* @returns An ID (greater than 0) for the event source
*/
function unix_signal_add(priority: number, signum: number, handler: SourceFunc): number;
/**
* Create a #GSource that will be dispatched upon delivery of the UNIX
* signal `signum`. In GLib versions before 2.36, only `SIGHUP`, `SIGINT`,
* `SIGTERM` can be monitored. In GLib 2.36, `SIGUSR1` and `SIGUSR2`
* were added. In GLib 2.54, `SIGWINCH` was added.
*
* Note that unlike the UNIX default, all sources which have created a
* watch will be dispatched, regardless of which underlying thread
* invoked g_unix_signal_source_new().
*
* For example, an effective use of this function is to handle `SIGTERM`
* cleanly; flushing any outstanding files, and then calling
* g_main_loop_quit(). It is not safe to do any of this from a regular
* UNIX signal handler; such a handler may be invoked while malloc() or
* another library function is running, causing reentrancy issues if the
* handler attempts to use those functions. None of the GLib/GObject
* API is safe against this kind of reentrancy.
*
* The interaction of this source when combined with native UNIX
* functions like sigprocmask() is not defined.
*
* The source will not initially be associated with any #GMainContext
* and must be added to one with g_source_attach() before it will be
* executed.
* @param signum A signal number
* @returns A newly created #GSource
*/
function unix_signal_source_new(signum: number): Source;
/**
* A wrapper for the POSIX unlink() function. The unlink() function
* deletes a name from the filesystem. If this was the last link to the
* file and no processes have it opened, the diskspace occupied by the
* file is freed.
*
* See your C library manual for more details about unlink(). Note
* that on Windows, it is in general not possible to delete files that
* are open to some process, or mapped into memory.
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @returns 0 if the name was successfully deleted, -1 if an error occurred
*/
function unlink(filename: string): number;
/**
* Removes an environment variable from the environment.
*
* Note that on some systems, when variables are overwritten, the
* memory used for the previous variables and its value isn't reclaimed.
*
* You should be mindful of the fact that environment variable handling
* in UNIX is not thread-safe, and your program may crash if one thread
* calls g_unsetenv() while another thread is calling getenv(). (And note
* that many functions, such as gettext(), call getenv() internally.) This
* function is only safe to use at the very start of your program, before
* creating any other threads (or creating objects that create worker
* threads of their own).
*
* If you need to set up the environment for a child process, you can
* use g_get_environ() to get an environment array, modify that with
* g_environ_setenv() and g_environ_unsetenv(), and then pass that
* array directly to execvpe(), g_spawn_async(), or the like.
* @param variable the environment variable to remove, must not contain '='
*/
function unsetenv(variable: string): void;
/**
* Creates a new #GUri from the given components according to `flags`.
*
* See also g_uri_build_with_user(), which allows specifying the
* components of the "userinfo" separately.
* @param flags flags describing how to build the #GUri
* @param scheme the URI scheme
* @param userinfo the userinfo component, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
* @returns a new #GUri
*/
function uri_build(
flags: UriFlags | null,
scheme: string,
userinfo: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): Uri;
/**
* Creates a new #GUri from the given components according to `flags`
* (%G_URI_FLAGS_HAS_PASSWORD is added unconditionally). The `flags` must be
* coherent with the passed values, in particular use `%`-encoded values with
* %G_URI_FLAGS_ENCODED.
*
* In contrast to g_uri_build(), this allows specifying the components
* of the userinfo field separately. Note that `user` must be non-%NULL
* if either `password` or `auth_params` is non-%NULL.
* @param flags flags describing how to build the #GUri
* @param scheme the URI scheme
* @param user the user component of the userinfo, or %NULL
* @param password the password component of the userinfo, or %NULL
* @param auth_params the auth params of the userinfo, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
* @returns a new #GUri
*/
function uri_build_with_user(
flags: UriFlags | null,
scheme: string,
user: string | null,
password: string | null,
auth_params: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): Uri;
function uri_error_quark(): Quark;
/**
* Escapes arbitrary data for use in a URI.
*
* Normally all characters that are not unreserved (i.e. ASCII
* alphanumerical characters plus dash, dot, underscore and tilde) are
* escaped. But if you specify characters in `reserved_chars_allowed`
* they are not escaped. This is useful for the reserved characters
* in the URI specification, since those are allowed unescaped in some
* portions of a URI.
*
* Though technically incorrect, this will also allow escaping nul
* bytes as `%``00`.
* @param unescaped the unescaped input data.
* @param reserved_chars_allowed a string of reserved characters that are allowed to be used, or %NULL.
* @returns an escaped version of @unescaped. The returned string should be freed when no longer needed.
*/
function uri_escape_bytes(unescaped: Uint8Array | string, reserved_chars_allowed?: string | null): string;
/**
* Escapes a string for use in a URI.
*
* Normally all characters that are not "unreserved" (i.e. ASCII
* alphanumerical characters plus dash, dot, underscore and tilde) are
* escaped. But if you specify characters in `reserved_chars_allowed`
* they are not escaped. This is useful for the "reserved" characters
* in the URI specification, since those are allowed unescaped in some
* portions of a URI.
* @param unescaped the unescaped input string.
* @param reserved_chars_allowed a string of reserved characters that are allowed to be used, or %NULL.
* @param allow_utf8 %TRUE if the result can include UTF-8 characters.
* @returns an escaped version of @unescaped. The returned string should be freed when no longer needed.
*/
function uri_escape_string(
unescaped: string,
reserved_chars_allowed: string | null,
allow_utf8: boolean,
): string;
/**
* Parses `uri_string` according to `flags,` to determine whether it is a valid
* [absolute URI](#relative-and-absolute-uris), i.e. it does not need to be resolved
* relative to another URI using g_uri_parse_relative().
*
* If its not a valid URI, an error is returned explaining how its invalid.
*
* See g_uri_split(), and the definition of #GUriFlags, for more
* information on the effect of `flags`.
* @param uri_string a string containing an absolute URI
* @param flags flags for parsing @uri_string
* @returns %TRUE if @uri_string is a valid absolute URI, %FALSE on error.
*/
function uri_is_valid(uri_string: string, flags: UriFlags | null): boolean;
/**
* Joins the given components together according to `flags` to create
* an absolute URI string. `path` may not be %NULL (though it may be the empty
* string).
*
* When `host` is present, `path` must either be empty or begin with a slash (`/`)
* character. When `host` is not present, `path` cannot begin with two slash
* characters (`//`). See
* [RFC 3986, section 3](https://tools.ietf.org/html/rfc3986#section-3).
*
* See also g_uri_join_with_user(), which allows specifying the
* components of the userinfo separately.
*
* %G_URI_FLAGS_HAS_PASSWORD and %G_URI_FLAGS_HAS_AUTH_PARAMS are ignored if set
* in `flags`.
* @param flags flags describing how to build the URI string
* @param scheme the URI scheme, or %NULL
* @param userinfo the userinfo component, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
* @returns an absolute URI string
*/
function uri_join(
flags: UriFlags | null,
scheme: string | null,
userinfo: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): string;
/**
* Joins the given components together according to `flags` to create
* an absolute URI string. `path` may not be %NULL (though it may be the empty
* string).
*
* In contrast to g_uri_join(), this allows specifying the components
* of the userinfo separately. It otherwise behaves the same.
*
* %G_URI_FLAGS_HAS_PASSWORD and %G_URI_FLAGS_HAS_AUTH_PARAMS are ignored if set
* in `flags`.
* @param flags flags describing how to build the URI string
* @param scheme the URI scheme, or %NULL
* @param user the user component of the userinfo, or %NULL
* @param password the password component of the userinfo, or %NULL
* @param auth_params the auth params of the userinfo, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
* @returns an absolute URI string
*/
function uri_join_with_user(
flags: UriFlags | null,
scheme: string | null,
user: string | null,
password: string | null,
auth_params: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): string;
/**
* Splits an URI list conforming to the text/uri-list
* mime type defined in RFC 2483 into individual URIs,
* discarding any comments. The URIs are not validated.
* @param uri_list an URI list
* @returns a newly allocated %NULL-terminated list of strings holding the individual URIs. The array should be freed with g_strfreev().
*/
function uri_list_extract_uris(uri_list: string): string[];
/**
* Parses `uri_string` according to `flags`. If the result is not a
* valid [absolute URI](#relative-and-absolute-uris), it will be discarded, and an
* error returned.
* @param uri_string a string representing an absolute URI
* @param flags flags describing how to parse @uri_string
* @returns a new #GUri, or NULL on error.
*/
function uri_parse(uri_string: string, flags: UriFlags | null): Uri;
/**
* Many URI schemes include one or more attribute/value pairs as part of the URI
* value. This method can be used to parse them into a hash table. When an
* attribute has multiple occurrences, the last value is the final returned
* value. If you need to handle repeated attributes differently, use
* #GUriParamsIter.
*
* The `params` string is assumed to still be `%`-encoded, but the returned
* values will be fully decoded. (Thus it is possible that the returned values
* may contain `=` or `separators,` if the value was encoded in the input.)
* Invalid `%`-encoding is treated as with the %G_URI_FLAGS_PARSE_RELAXED
* rules for g_uri_parse(). (However, if `params` is the path or query string
* from a #GUri that was parsed without %G_URI_FLAGS_PARSE_RELAXED and
* %G_URI_FLAGS_ENCODED, then you already know that it does not contain any
* invalid encoding.)
*
* %G_URI_PARAMS_WWW_FORM is handled as documented for g_uri_params_iter_init().
*
* If %G_URI_PARAMS_CASE_INSENSITIVE is passed to `flags,` attributes will be
* compared case-insensitively, so a params string `attr=123&Attr=456` will only
* return a single attributevalue pair, `Attr=456`. Case will be preserved in
* the returned attributes.
*
* If `params` cannot be parsed (for example, it contains two `separators`
* characters in a row), then `error` is set and %NULL is returned.
* @param params a `%`-encoded string containing `attribute=value` parameters
* @param length the length of @params, or `-1` if it is nul-terminated
* @param separators the separator byte character set between parameters. (usually `&`, but sometimes `;` or both `&;`). Note that this function works on bytes not characters, so it can't be used to delimit UTF-8 strings for anything but ASCII characters. You may pass an empty set, in which case no splitting will occur.
* @param flags flags to modify the way the parameters are handled.
* @returns A hash table of attribute/value pairs, with both names and values fully-decoded; or %NULL on error.
*/
function uri_parse_params(
params: string,
length: number,
separators: string,
flags: UriParamsFlags | null,
): HashTable<string, string>;
/**
* Gets the scheme portion of a URI string.
* [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) decodes the scheme
* as:
*
* ```
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
* ```
*
* Common schemes include `file`, `https`, `svn+ssh`, etc.
* @param uri a valid URI.
* @returns The scheme component of the URI, or %NULL on error. The returned string should be freed when no longer needed.
*/
function uri_parse_scheme(uri: string): string | null;
/**
* Gets the scheme portion of a URI string.
* [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) decodes the scheme
* as:
*
* ```
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
* ```
*
* Common schemes include `file`, `https`, `svn+ssh`, etc.
*
* Unlike g_uri_parse_scheme(), the returned scheme is normalized to
* all-lowercase and does not need to be freed.
* @param uri a valid URI.
* @returns The scheme component of the URI, or %NULL on error. The returned string is normalized to all-lowercase, and interned via g_intern_string(), so it does not need to be freed.
*/
function uri_peek_scheme(uri: string): string | null;
/**
* Parses `uri_ref` according to `flags` and, if it is a
* [relative URI](#relative-and-absolute-uris), resolves it relative to
* `base_uri_string`. If the result is not a valid absolute URI, it will be
* discarded, and an error returned.
*
* (If `base_uri_string` is %NULL, this just returns `uri_ref,` or
* %NULL if `uri_ref` is invalid or not absolute.)
* @param base_uri_string a string representing a base URI
* @param uri_ref a string representing a relative or absolute URI
* @param flags flags describing how to parse @uri_ref
* @returns the resolved URI string, or NULL on error.
*/
function uri_resolve_relative(base_uri_string: string | null, uri_ref: string, flags: UriFlags | null): string;
/**
* Parses `uri_ref` (which can be an
* [absolute or relative URI](#relative-and-absolute-uris)) according to `flags,` and
* returns the pieces. Any component that doesn't appear in `uri_ref` will be
* returned as %NULL (but note that all URIs always have a path component,
* though it may be the empty string).
*
* If `flags` contains %G_URI_FLAGS_ENCODED, then `%`-encoded characters in
* `uri_ref` will remain encoded in the output strings. (If not,
* then all such characters will be decoded.) Note that decoding will
* only work if the URI components are ASCII or UTF-8, so you will
* need to use %G_URI_FLAGS_ENCODED if they are not.
*
* Note that the %G_URI_FLAGS_HAS_PASSWORD and
* %G_URI_FLAGS_HAS_AUTH_PARAMS `flags` are ignored by g_uri_split(),
* since it always returns only the full userinfo; use
* g_uri_split_with_user() if you want it split up.
* @param uri_ref a string containing a relative or absolute URI
* @param flags flags for parsing @uri_ref
* @returns %TRUE if @uri_ref parsed successfully, %FALSE on error.
*/
function uri_split(
uri_ref: string,
flags: UriFlags | null,
): [boolean, string, string, string, number, string, string, string];
/**
* Parses `uri_string` (which must be an [absolute URI](#relative-and-absolute-uris))
* according to `flags,` and returns the pieces relevant to connecting to a host.
* See the documentation for g_uri_split() for more details; this is
* mostly a wrapper around that function with simpler arguments.
* However, it will return an error if `uri_string` is a relative URI,
* or does not contain a hostname component.
* @param uri_string a string containing an absolute URI
* @param flags flags for parsing @uri_string
* @returns %TRUE if @uri_string parsed successfully, %FALSE on error.
*/
function uri_split_network(uri_string: string, flags: UriFlags | null): [boolean, string, string, number];
/**
* Parses `uri_ref` (which can be an
* [absolute or relative URI](#relative-and-absolute-uris)) according to `flags,` and
* returns the pieces. Any component that doesn't appear in `uri_ref` will be
* returned as %NULL (but note that all URIs always have a path component,
* though it may be the empty string).
*
* See g_uri_split(), and the definition of #GUriFlags, for more
* information on the effect of `flags`. Note that `password` will only
* be parsed out if `flags` contains %G_URI_FLAGS_HAS_PASSWORD, and
* `auth_params` will only be parsed out if `flags` contains
* %G_URI_FLAGS_HAS_AUTH_PARAMS.
* @param uri_ref a string containing a relative or absolute URI
* @param flags flags for parsing @uri_ref
* @returns %TRUE if @uri_ref parsed successfully, %FALSE on error.
*/
function uri_split_with_user(
uri_ref: string,
flags: UriFlags | null,
): [boolean, string, string, string, string, string, number, string, string, string];
/**
* Unescapes a segment of an escaped string as binary data.
*
* Note that in contrast to g_uri_unescape_string(), this does allow
* nul bytes to appear in the output.
*
* If any of the characters in `illegal_characters` appears as an escaped
* character in `escaped_string,` then that is an error and %NULL will be
* returned. This is useful if you want to avoid for instance having a slash
* being expanded in an escaped path element, which might confuse pathname
* handling.
* @param escaped_string A URI-escaped string
* @param length the length (in bytes) of @escaped_string to escape, or `-1` if it is nul-terminated.
* @param illegal_characters a string of illegal characters not to be allowed, or %NULL.
* @returns an unescaped version of @escaped_string or %NULL on error (if decoding failed, using %G_URI_ERROR_FAILED error code). The returned #GBytes should be unreffed when no longer needed.
*/
function uri_unescape_bytes(escaped_string: string, length: number, illegal_characters?: string | null): Bytes;
/**
* Unescapes a segment of an escaped string.
*
* If any of the characters in `illegal_characters` or the NUL
* character appears as an escaped character in `escaped_string,` then
* that is an error and %NULL will be returned. This is useful if you
* want to avoid for instance having a slash being expanded in an
* escaped path element, which might confuse pathname handling.
*
* Note: `NUL` byte is not accepted in the output, in contrast to
* g_uri_unescape_bytes().
* @param escaped_string A string, may be %NULL
* @param escaped_string_end Pointer to end of @escaped_string, may be %NULL
* @param illegal_characters An optional string of illegal characters not to be allowed, may be %NULL
* @returns an unescaped version of @escaped_string, or %NULL on error. The returned string should be freed when no longer needed. As a special case if %NULL is given for @escaped_string, this function will return %NULL.
*/
function uri_unescape_segment(
escaped_string?: string | null,
escaped_string_end?: string | null,
illegal_characters?: string | null,
): string | null;
/**
* Unescapes a whole escaped string.
*
* If any of the characters in `illegal_characters` or the NUL
* character appears as an escaped character in `escaped_string,` then
* that is an error and %NULL will be returned. This is useful if you
* want to avoid for instance having a slash being expanded in an
* escaped path element, which might confuse pathname handling.
* @param escaped_string an escaped string to be unescaped.
* @param illegal_characters a string of illegal characters not to be allowed, or %NULL.
* @returns an unescaped version of @escaped_string. The returned string should be freed when no longer needed.
*/
function uri_unescape_string(escaped_string: string, illegal_characters?: string | null): string | null;
/**
* Pauses the current thread for the given number of microseconds.
*
* There are 1 million microseconds per second (represented by the
* %G_USEC_PER_SEC macro). g_usleep() may have limited precision,
* depending on hardware and operating system; don't rely on the exact
* length of the sleep.
* @param microseconds number of microseconds to pause
*/
function usleep(microseconds: number): void;
/**
* Convert a string from UTF-16 to UCS-4.
*
* The result will be nul-terminated.
* @param str a UTF-16 encoded string
* @returns a pointer to a newly allocated UCS-4 string. This value must be freed with [func@GLib.free].
*/
function utf16_to_ucs4(str: number[]): [number, number, number];
/**
* Convert a string from UTF-16 to UTF-8.
*
* The result will be terminated with a nul byte.
*
* Note that the input is expected to be already in native endianness,
* an initial byte-order-mark character is not handled specially.
* [func`GLib`.convert] can be used to convert a byte buffer of UTF-16 data of
* ambiguous endianness.
*
* Further note that this function does not validate the result
* string; it may (for example) include embedded nul characters. The only
* validation done by this function is to ensure that the input can
* be correctly interpreted as UTF-16, i.e. it doesnt contain
* unpaired surrogates or partial character sequences.
* @param str a UTF-16 encoded string
* @returns a pointer to a newly allocated UTF-8 string. This value must be freed with [func@GLib.free].
*/
function utf16_to_utf8(str: number[]): [string, number, number];
/**
* Converts a string into a form that is independent of case. The
* result will not correspond to any particular case, but can be
* compared for equality or ordered with the results of calling
* g_utf8_casefold() on other strings.
*
* Note that calling g_utf8_casefold() followed by g_utf8_collate() is
* only an approximation to the correct linguistic case insensitive
* ordering, though it is a fairly good one. Getting this exactly
* right would require a more sophisticated collation function that
* takes case sensitivity into account. GLib does not currently
* provide such a function.
* @param str a UTF-8 encoded string
* @param len length of @str, in bytes, or -1 if @str is nul-terminated.
* @returns a newly allocated string, that is a case independent form of @str.
*/
function utf8_casefold(str: string, len: number): string;
/**
* Compares two strings for ordering using the linguistically
* correct rules for the [current locale](running.html#locale).
* When sorting a large number of strings, it will be significantly
* faster to obtain collation keys with g_utf8_collate_key() and
* compare the keys with strcmp() when sorting instead of sorting
* the original strings.
*
* If the two strings are not comparable due to being in different collation
* sequences, the result is undefined. This can happen if the strings are in
* different language scripts, for example.
* @param str1 a UTF-8 encoded string
* @param str2 a UTF-8 encoded string
* @returns < 0 if @str1 compares before @str2, 0 if they compare equal, > 0 if @str1 compares after @str2.
*/
function utf8_collate(str1: string, str2: string): number;
/**
* Converts a string into a collation key that can be compared
* with other collation keys produced by the same function using
* strcmp().
*
* The results of comparing the collation keys of two strings
* with strcmp() will always be the same as comparing the two
* original keys with g_utf8_collate().
*
* Note that this function depends on the [current locale](running.html#locale).
*
* Note that the returned string is not guaranteed to be in any
* encoding, especially UTF-8. The returned value is meant to be
* used only for comparisons.
* @param str a UTF-8 encoded string.
* @param len length of @str, in bytes, or -1 if @str is nul-terminated.
* @returns a newly allocated string. The contents of the string are only meant to be used when sorting. This string should be freed with g_free() when you are done with it.
*/
function utf8_collate_key(str: string, len: number): string;
/**
* Converts a string into a collation key that can be compared
* with other collation keys produced by the same function using strcmp().
*
* In order to sort filenames correctly, this function treats the dot '.'
* as a special case. Most dictionary orderings seem to consider it
* insignificant, thus producing the ordering "event.c" "eventgenerator.c"
* "event.h" instead of "event.c" "event.h" "eventgenerator.c". Also, we
* would like to treat numbers intelligently so that "file1" "file10" "file5"
* is sorted as "file1" "file5" "file10".
*
* Note that this function depends on the [current locale](running.html#locale).
*
* Note that the returned string is not guaranteed to be in any
* encoding, especially UTF-8. The returned value is meant to be
* used only for comparisons.
* @param str a UTF-8 encoded string.
* @param len length of @str, in bytes, or -1 if @str is nul-terminated.
* @returns a newly allocated string. The contents of the string are only meant to be used when sorting. This string should be freed with g_free() when you are done with it.
*/
function utf8_collate_key_for_filename(str: string, len: number): string;
/**
* Finds the start of the next UTF-8 character in the string after `p`.
*
* `p` does not have to be at the beginning of a UTF-8 character. No check
* is made to see if the character found is actually valid other than
* it starts with an appropriate byte.
*
* If `end` is `NULL`, the return value will never be `NULL`: if the end of the
* string is reached, a pointer to the terminating nul byte is returned. If
* `end` is non-`NULL`, the return value will be `NULL` if the end of the string
* is reached.
* @param p a pointer to a position within a UTF-8 encoded string
* @param end a pointer to the byte following the end of the string, or `NULL` to indicate that the string is nul-terminated
* @returns a pointer to the found character or `NULL` if @end is set and is reached
*/
function utf8_find_next_char(p: string, end?: string | null): string | null;
/**
* Given a position `p` with a UTF-8 encoded string `str,` find the start
* of the previous UTF-8 character starting before `p`. Returns `NULL` if no
* UTF-8 characters are present in `str` before `p`.
*
* `p` does not have to be at the beginning of a UTF-8 character. No check
* is made to see if the character found is actually valid other than
* it starts with an appropriate byte.
* @param str pointer to the beginning of a UTF-8 encoded string
* @param p pointer to some position within @str
* @returns a pointer to the found character
*/
function utf8_find_prev_char(str: string, p: string): string | null;
/**
* Converts a sequence of bytes encoded as UTF-8 to a Unicode character.
*
* If `p` does not point to a valid UTF-8 encoded character, results
* are undefined. If you are not sure that the bytes are complete
* valid Unicode characters, you should use [func`GLib`.utf8_get_char_validated]
* instead.
* @param p a pointer to Unicode character encoded as UTF-8
* @returns the resulting character
*/
function utf8_get_char(p: string): number;
/**
* Convert a sequence of bytes encoded as UTF-8 to a Unicode character.
*
* This function checks for incomplete characters, for invalid characters
* such as characters that are out of the range of Unicode, and for
* overlong encodings of valid characters.
*
* Note that [func`GLib`.utf8_get_char_validated] returns `(gunichar)-2` if
* `max_len` is positive and any of the bytes in the first UTF-8 character
* sequence are nul.
* @param p a pointer to Unicode character encoded as UTF-8
* @param max_len the maximum number of bytes to read, or `-1` if @p is nul-terminated
* @returns the resulting character. If @p points to a partial sequence at the end of a string that could begin a valid character (or if @max_len is zero), returns `(gunichar)-2`; otherwise, if @p does not point to a valid UTF-8 encoded Unicode character, returns `(gunichar)-1`.
*/
function utf8_get_char_validated(p: string, max_len: number): number;
/**
* If the provided string is valid UTF-8, return a copy of it. If not,
* return a copy in which bytes that could not be interpreted as valid Unicode
* are replaced with the Unicode replacement character (U+FFFD).
*
* For example, this is an appropriate function to use if you have received
* a string that was incorrectly declared to be UTF-8, and you need a valid
* UTF-8 version of it that can be logged or displayed to the user, with the
* assumption that it is close enough to ASCII or UTF-8 to be mostly
* readable as-is.
* @param str string to coerce into UTF-8
* @param len the maximum length of @str to use, in bytes. If @len is negative, then the string is nul-terminated.
* @returns a valid UTF-8 string whose content resembles @str
*/
function utf8_make_valid(str: string, len: number): string;
/**
* Converts a string into canonical form, standardizing
* such issues as whether a character with an accent
* is represented as a base character and combining
* accent or as a single precomposed character. The
* string has to be valid UTF-8, otherwise %NULL is
* returned. You should generally call g_utf8_normalize()
* before comparing two Unicode strings.
*
* The normalization mode %G_NORMALIZE_DEFAULT only
* standardizes differences that do not affect the
* text content, such as the above-mentioned accent
* representation. %G_NORMALIZE_ALL also standardizes
* the "compatibility" characters in Unicode, such
* as SUPERSCRIPT THREE to the standard forms
* (in this case DIGIT THREE). Formatting information
* may be lost but for most text operations such
* characters should be considered the same.
*
* %G_NORMALIZE_DEFAULT_COMPOSE and %G_NORMALIZE_ALL_COMPOSE
* are like %G_NORMALIZE_DEFAULT and %G_NORMALIZE_ALL,
* but returned a result with composed forms rather
* than a maximally decomposed form. This is often
* useful if you intend to convert the string to
* a legacy encoding or pass it to a system with
* less capable Unicode handling.
* @param str a UTF-8 encoded string.
* @param len length of @str, in bytes, or -1 if @str is nul-terminated.
* @param mode the type of normalization to perform.
* @returns a newly allocated string, that is the normalized form of @str, or %NULL if @str is not valid UTF-8.
*/
function utf8_normalize(str: string, len: number, mode: NormalizeMode | null): string | null;
/**
* Converts from an integer character offset to a pointer to a position
* within the string.
*
* Since 2.10, this function allows to pass a negative `offset` to
* step backwards. It is usually worth stepping backwards from the end
* instead of forwards if `offset` is in the last fourth of the string,
* since moving forward is about 3 times faster than moving backward.
*
* Note that this function doesnt abort when reaching the end of `str`.
* Therefore you should be sure that `offset` is within string boundaries
* before calling that function. Call [func`GLib`.utf8_strlen] when unsure.
* This limitation exists as this function is called frequently during
* text rendering and therefore has to be as fast as possible.
* @param str a UTF-8 encoded string
* @param offset a character offset within @str
* @returns the resulting pointer
*/
function utf8_offset_to_pointer(str: string, offset: number): string;
/**
* Converts from a pointer to position within a string to an integer
* character offset.
*
* Since 2.10, this function allows `pos` to be before `str,` and returns
* a negative offset in this case.
* @param str a UTF-8 encoded string
* @param pos a pointer to a position within @str
* @returns the resulting character offset
*/
function utf8_pointer_to_offset(str: string, pos: string): number;
/**
* Finds the previous UTF-8 character in the string before `p`.
*
* `p` does not have to be at the beginning of a UTF-8 character. No check
* is made to see if the character found is actually valid other than
* it starts with an appropriate byte. If `p` might be the first
* character of the string, you must use [func`GLib`.utf8_find_prev_char]
* instead.
* @param p a pointer to a position within a UTF-8 encoded string
* @returns a pointer to the found character
*/
function utf8_prev_char(p: string): string;
/**
* Finds the leftmost occurrence of the given Unicode character
* in a UTF-8 encoded string, while limiting the search to `len` bytes.
*
* If `len` is `-1`, allow unbounded search.
* @param p a nul-terminated UTF-8 encoded string
* @param len the maximum length of @p
* @param c a Unicode character
* @returns `NULL` if the string does not contain the character, otherwise, a pointer to the start of the leftmost occurrence of the character in the string.
*/
function utf8_strchr(p: string, len: number, c: number): string | null;
/**
* Converts all Unicode characters in the string that have a case
* to lowercase. The exact manner that this is done depends
* on the current locale, and may result in the number of
* characters in the string changing.
* @param str a UTF-8 encoded string
* @param len length of @str, in bytes, or -1 if @str is nul-terminated.
* @returns a newly allocated string, with all characters converted to lowercase.
*/
function utf8_strdown(str: string, len: number): string;
/**
* Computes the length of the string in characters, not including
* the terminating nul character. If the `max`th byte falls in the
* middle of a character, the last (partial) character is not counted.
* @param p pointer to the start of a UTF-8 encoded string
* @param max the maximum number of bytes to examine. If @max is less than 0, then the string is assumed to be nul-terminated. If @max is 0, @p will not be examined and may be `NULL`. If @max is greater than 0, up to @max bytes are examined
* @returns the length of the string in characters
*/
function utf8_strlen(p: string, max: number): number;
/**
* Like the standard C [`strncpy()`](man:strncpy) function, but copies a given
* number of characters instead of a given number of bytes.
*
* The `src` string must be valid UTF-8 encoded text. (Use
* [func`GLib`.utf8_validate] on all text before trying to use UTF-8 utility
* functions with it.)
*
* Note you must ensure `dest` is at least 4 * `n` + 1 to fit the
* largest possible UTF-8 characters
* @param dest buffer to fill with characters from @src
* @param src UTF-8 encoded string
* @param n character count
* @returns @dest
*/
function utf8_strncpy(dest: string, src: string, n: number): string;
/**
* Find the rightmost occurrence of the given Unicode character
* in a UTF-8 encoded string, while limiting the search to `len` bytes.
*
* If `len` is `-1`, allow unbounded search.
* @param p a nul-terminated UTF-8 encoded string
* @param len the maximum length of @p
* @param c a Unicode character
* @returns `NULL` if the string does not contain the character, otherwise, a pointer to the start of the rightmost occurrence of the character in the string.
*/
function utf8_strrchr(p: string, len: number, c: number): string | null;
/**
* Reverses a UTF-8 string.
*
* `str` must be valid UTF-8 encoded text. (Use [func`GLib`.utf8_validate] on all
* text before trying to use UTF-8 utility functions with it.)
*
* This function is intended for programmatic uses of reversed strings.
* It pays no attention to decomposed characters, combining marks, byte
* order marks, directional indicators (LRM, LRO, etc) and similar
* characters which might need special handling when reversing a string
* for display purposes.
*
* Note that unlike [func`GLib`.strreverse], this function returns
* newly-allocated memory, which should be freed with [func`GLib`.free] when
* no longer needed.
* @param str a UTF-8 encoded string
* @param len the maximum length of @str to use, in bytes. If @len is negative, then the string is nul-terminated.
* @returns a newly-allocated string which is the reverse of @str
*/
function utf8_strreverse(str: string, len: number): string;
/**
* Converts all Unicode characters in the string that have a case
* to uppercase. The exact manner that this is done depends
* on the current locale, and may result in the number of
* characters in the string increasing. (For instance, the
* German ess-zet will be changed to SS.)
* @param str a UTF-8 encoded string
* @param len length of @str, in bytes, or -1 if @str is nul-terminated.
* @returns a newly allocated string, with all characters converted to uppercase.
*/
function utf8_strup(str: string, len: number): string;
/**
* Copies a substring out of a UTF-8 encoded string.
* The substring will contain `end_pos` - `start_pos` characters.
*
* Since GLib 2.72, `-1` can be passed to `end_pos` to indicate the
* end of the string.
* @param str a UTF-8 encoded string
* @param start_pos a character offset within @str
* @param end_pos another character offset within @str, or `-1` to indicate the end of the string
* @returns a newly allocated copy of the requested substring. Free with [func@GLib.free] when no longer needed.
*/
function utf8_substring(str: string, start_pos: number, end_pos: number): string;
/**
* Convert a string from UTF-8 to a 32-bit fixed width representation as UCS-4.
*
* A trailing nul character (U+0000) will be added to the string after the
* converted text.
* @param str a UTF-8 encoded string
* @param len the maximum length of @str to use, in bytes. If @len is negative, then the string is nul-terminated.
* @returns a pointer to a newly allocated UCS-4 string. This value must be freed with [func@GLib.free].
*/
function utf8_to_ucs4(str: string, len: number): [number, number, number];
/**
* Convert a string from UTF-8 to a 32-bit fixed width
* representation as UCS-4, assuming valid UTF-8 input.
*
* This function is roughly twice as fast as [func`GLib`.utf8_to_ucs4]
* but does no error checking on the input. A trailing nul character (U+0000)
* will be added to the string after the converted text.
* @param str a UTF-8 encoded string
* @param len the maximum length of @str to use, in bytes. If @len is negative, then the string is nul-terminated.
* @returns a pointer to a newly allocated UCS-4 string. This value must be freed with [func@GLib.free].
*/
function utf8_to_ucs4_fast(str: string, len: number): [number, number];
/**
* Convert a string from UTF-8 to UTF-16.
*
* A nul character (U+0000) will be added to the result after the converted text.
* @param str a UTF-8 encoded string
* @param len the maximum length (number of bytes) of @str to use. If @len is negative, then the string is nul-terminated.
* @returns a pointer to a newly allocated UTF-16 string. This value must be freed with [func@GLib.free].
*/
function utf8_to_utf16(str: string, len: number): [number, number, number];
/**
* Cuts off the middle of the string, preserving half of `truncate_length`
* characters at the beginning and half at the end.
*
* If `string` is already short enough, this returns a copy of `string`.
* If `truncate_length` is `0`, an empty string is returned.
* @param string a nul-terminated UTF-8 encoded string
* @param truncate_length the new size of @string, in characters, including the ellipsis character
* @returns a newly-allocated copy of @string ellipsized in the middle
*/
function utf8_truncate_middle(string: string, truncate_length: number): string;
/**
* Validates UTF-8 encoded text.
*
* `str` is the text to validate; if `str` is nul-terminated, then `max_len` can be
* `-1`, otherwise `max_len` should be the number of bytes to validate.
*
* If `end` is non-`NULL`, then the end of the valid range will be stored there.
* This is the first byte of the first invalid character if some bytes were
* invalid, or the end of the text being validated otherwise — either the
* trailing nul byte, or the first byte beyond `max_len` (if its positive).
*
* Note that `g_utf8_validate()` returns `FALSE` if `max_len` is positive and
* any of the `max_len` bytes are nul.
*
* Returns `TRUE` if all of `str` was valid. Many GLib and GTK
* routines require valid UTF-8 as input; so data read from a file
* or the network should be checked with `g_utf8_validate()` before
* doing anything else with it.
* @param str a pointer to character data
* @returns `TRUE` if the text was valid UTF-8
*/
function utf8_validate(str: Uint8Array | string): [boolean, string];
/**
* Validates UTF-8 encoded text.
*
* As with [func`GLib`.utf8_validate], but `max_len` must be set, and hence this
* function will always return `FALSE` if any of the bytes of `str` are nul.
* @param str a pointer to character data
* @returns `TRUE` if the text was valid UTF-8
*/
function utf8_validate_len(str: Uint8Array | string): [boolean, string];
/**
* A wrapper for the POSIX utime() function. The utime() function
* sets the access and modification timestamps of a file.
*
* See your C library manual for more details about how utime() works
* on your system.
* @param filename a pathname in the GLib file name encoding (UTF-8 on Windows)
* @param utb a pointer to a struct utimbuf.
* @returns 0 if the operation was successful, -1 if an error occurred
*/
function utime(filename: string, utb?: any | null): number;
/**
* Parses the string `str` and verify if it is a UUID.
*
* The function accepts the following syntax:
*
* - simple forms (e.g. `f81d4fae-7dec-11d0-a765-00a0c91e6bf6`)
*
* Note that hyphens are required within the UUID string itself,
* as per the aforementioned RFC.
* @param str a string representing a UUID
* @returns %TRUE if @str is a valid UUID, %FALSE otherwise.
*/
function uuid_string_is_valid(str: string): boolean;
/**
* Generates a random UUID (RFC 4122 version 4) as a string. It has the same
* randomness guarantees as #GRand, so must not be used for cryptographic
* purposes such as key generation, nonces, salts or one-time pads.
* @returns A string that should be freed with g_free().
*/
function uuid_string_random(): string;
function variant_get_gtype(): GObject.GType;
/**
* Determines if a given string is a valid D-Bus object path. You
* should ensure that a string is a valid D-Bus object path before
* passing it to g_variant_new_object_path().
*
* A valid object path starts with `/` followed by zero or more
* sequences of characters separated by `/` characters. Each sequence
* must contain only the characters `[A-Z][a-z][0-9]_`. No sequence
* (including the one following the final `/` character) may be empty.
* @param string a normal C nul-terminated string
* @returns %TRUE if @string is a D-Bus object path
*/
function variant_is_object_path(string: string): boolean;
/**
* Determines if a given string is a valid D-Bus type signature. You
* should ensure that a string is a valid D-Bus type signature before
* passing it to g_variant_new_signature().
*
* D-Bus type signatures consist of zero or more definite #GVariantType
* strings in sequence.
* @param string a normal C nul-terminated string
* @returns %TRUE if @string is a D-Bus type signature
*/
function variant_is_signature(string: string): boolean;
/**
* Parses a #GVariant from a text representation.
*
* A single #GVariant is parsed from the content of `text`.
*
* The format is described [here](gvariant-text-format.html).
*
* The memory at `limit` will never be accessed and the parser behaves as
* if the character at `limit` is the nul terminator. This has the
* effect of bounding `text`.
*
* If `endptr` is non-%NULL then `text` is permitted to contain data
* following the value that this function parses and `endptr` will be
* updated to point to the first character past the end of the text
* parsed by this function. If `endptr` is %NULL and there is extra data
* then an error is returned.
*
* If `type` is non-%NULL then the value will be parsed to have that
* type. This may result in additional parse errors (in the case that
* the parsed value doesn't fit the type) but may also result in fewer
* errors (in the case that the type would have been ambiguous, such as
* with empty arrays).
*
* In the event that the parsing is successful, the resulting #GVariant
* is returned. It is never floating, and must be freed with
* [method`GLib`.Variant.unref].
*
* In case of any error, %NULL will be returned. If `error` is non-%NULL
* then it will be set to reflect the error that occurred.
*
* Officially, the language understood by the parser is “any string
* produced by [method`GLib`.Variant.print]”. This explicitly includes
* `g_variant_print()`s annotated types like `int64 -1000`.
*
* There may be implementation specific restrictions on deeply nested values,
* which would result in a %G_VARIANT_PARSE_ERROR_RECURSION error. #GVariant is
* guaranteed to handle nesting up to at least 64 levels.
* @param type a #GVariantType, or %NULL
* @param text a string containing a GVariant in text form
* @param limit a pointer to the end of @text, or %NULL
* @param endptr a location to store the end pointer, or %NULL
* @returns a non-floating reference to a #GVariant, or %NULL
*/
function variant_parse(
type: VariantType | null,
text: string,
limit?: string | null,
endptr?: string | null,
): Variant;
/**
* Pretty-prints a message showing the context of a #GVariant parse
* error within the string for which parsing was attempted.
*
* The resulting string is suitable for output to the console or other
* monospace media where newlines are treated in the usual way.
*
* The message will typically look something like one of the following:
*
*
* ```
* unterminated string constant:
* (1, 2, 3, 'abc
* ^^^^
* ```
*
*
* or
*
*
* ```
* unable to find a common type:
* [1, 2, 3, 'str']
* ^ ^^^^^
* ```
*
*
* The format of the message may change in a future version.
*
* `error` must have come from a failed attempt to g_variant_parse() and
* `source_str` must be exactly the same string that caused the error.
* If `source_str` was not nul-terminated when you passed it to
* g_variant_parse() then you must add nul termination before using this
* function.
* @param error a #GError from the #GVariantParseError domain
* @param source_str the string that was given to the parser
* @returns the printed message
*/
function variant_parse_error_print_context(error: Error, source_str: string): string;
function variant_parse_error_quark(): Quark;
/**
* Same as g_variant_error_quark().
*/
function variant_parser_get_error_quark(): Quark;
function variant_type_checked_(type_string: string): VariantType;
function variant_type_string_get_depth_(type_string: string): number;
/**
* Checks if `type_string` is a valid
* [GVariant type string](./struct.VariantType.html#gvariant-type-strings).
*
* This call is equivalent to calling [func`GLib`.VariantType.string_scan] and
* confirming that the following character is a nul terminator.
* @param type_string a pointer to any string
* @returns true if @type_string is exactly one valid type string Since 2.24
*/
function variant_type_string_is_valid(type_string: string): boolean;
/**
* Scan for a single complete and valid GVariant type string in `string`.
*
* The memory pointed to by `limit` (or bytes beyond it) is never
* accessed.
*
* If a valid type string is found, `endptr` is updated to point to the
* first character past the end of the string that was found and %TRUE
* is returned.
*
* If there is no valid type string starting at `string,` or if the type
* string does not end before `limit` then %FALSE is returned.
*
* For the simple case of checking if a string is a valid type string,
* see [func`GLib`.VariantType.string_is_valid].
* @param string a pointer to any string
* @param limit the end of @string
* @returns true if a valid type string was found
*/
function variant_type_string_scan(string: string, limit: string | null): [boolean, string];
interface CacheDestroyFunc {
(value?: any | null): void;
}
interface CacheDupFunc {
(value?: any | null): any | null;
}
interface CacheNewFunc {
(key?: any | null): any | null;
}
interface ChildWatchFunc {
(pid: Pid, wait_status: number): void;
}
interface ClearHandleFunc {
(handle_id: number): void;
}
interface CompareDataFunc {
(a?: any | null, b?: any | null): number;
}
interface CompareFunc {
(a?: any | null, b?: any | null): number;
}
interface CompletionFunc {
(item?: any | null): string;
}
interface CompletionStrncmpFunc {
(s1: string, s2: string, n: number): number;
}
interface CopyFunc {
(src: any, data?: any | null): any;
}
interface DataForeachFunc {
(key_id: Quark, data?: any | null): void;
}
interface DestroyNotify {
(data?: any | null): void;
}
interface DuplicateFunc {
(data?: any | null): any | null;
}
interface EqualFunc {
(a?: any | null, b?: any | null): boolean;
}
interface EqualFuncFull {
(a?: any | null, b?: any | null): boolean;
}
interface ErrorClearFunc {
(error: Error): void;
}
interface ErrorCopyFunc {
(src_error: Error, dest_error: Error): void;
}
interface ErrorInitFunc {
(error: Error): void;
}
interface FreeFunc {
(data?: any | null): void;
}
interface Func {
(data?: any | null): void;
}
interface HFunc {
(key?: any | null, value?: any | null): void;
}
interface HRFunc {
(key?: any | null, value?: any | null): boolean;
}
interface HashFunc {
(key?: any | null): number;
}
interface HookCheckFunc {
(data?: any | null): boolean;
}
interface HookCheckMarshaller {
(hook: Hook, marshal_data?: any | null): boolean;
}
interface HookCompareFunc {
(new_hook: Hook, sibling: Hook): number;
}
interface HookFinalizeFunc {
(hook_list: HookList, hook: Hook): void;
}
interface HookFindFunc {
(hook: Hook, data?: any | null): boolean;
}
interface HookFunc {
(data?: any | null): void;
}
interface HookMarshaller {
(hook: Hook, marshal_data?: any | null): void;
}
interface IOFunc {
(source: IOChannel, condition: IOCondition, data?: any | null): boolean;
}
interface LogFunc {
(log_domain: string | null, log_level: LogLevelFlags, message: string): void;
}
interface LogWriterFunc {
(log_level: LogLevelFlags, fields: LogField[]): LogWriterOutput;
}
interface NodeForeachFunc {
(node: Node, data?: any | null): void;
}
interface NodeTraverseFunc {
(node: Node, data?: any | null): boolean;
}
interface OptionArgFunc {
(option_name: string, value: string, data?: any | null): boolean;
}
interface OptionErrorFunc {
(context: OptionContext, group: OptionGroup, data?: any | null): void;
}
interface OptionParseFunc {
(context: OptionContext, group: OptionGroup, data?: any | null): boolean;
}
interface PollFunc {
(ufds: PollFD, nfsd: number, timeout_: number): number;
}
interface PrintFunc {
(string: string): void;
}
interface RegexEvalCallback {
(match_info: MatchInfo, result: String): boolean;
}
interface ScannerMsgFunc {
(scanner: Scanner, message: string, error: boolean): void;
}
interface SequenceIterCompareFunc {
(a: SequenceIter, b: SequenceIter, data?: any | null): number;
}
interface SourceDisposeFunc {
(source: Source): void;
}
interface SourceDummyMarshal {
(): void;
}
interface SourceFunc {
(): boolean;
}
interface SourceFuncsCheckFunc {
(source: Source): boolean;
}
interface SourceFuncsFinalizeFunc {
(source: Source): void;
}
interface SourceFuncsPrepareFunc {
(source: Source): boolean;
}
interface SourceOnceFunc {
(): void;
}
interface SpawnChildSetupFunc {
(data?: any | null): void;
}
interface TestDataFunc {
(): void;
}
interface TestFixtureFunc {
(fixture: any): void;
}
interface TestFunc {
(): void;
}
interface TestLogFatalFunc {
(log_domain: string, log_level: LogLevelFlags, message: string): boolean;
}
interface ThreadFunc {
(data?: any | null): any | null;
}
interface TranslateFunc {
(str: string, data?: any | null): string;
}
interface TraverseFunc {
(key?: any | null, value?: any | null, data?: any | null): boolean;
}
interface TraverseNodeFunc {
(node: TreeNode, data?: any | null): boolean;
}
interface UnixFDSourceFunc {
(fd: number, condition: IOCondition): boolean;
}
interface VoidFunc {
(): void;
}
export namespace AsciiType {
export const $gtype: GObject.GType<AsciiType>;
}
enum AsciiType {
ALNUM,
ALPHA,
CNTRL,
DIGIT,
GRAPH,
LOWER,
PRINT,
PUNCT,
SPACE,
UPPER,
XDIGIT,
}
/**
* Flags to pass to g_file_set_contents_full() to affect its safety and
* performance.
*/
/**
* Flags to pass to g_file_set_contents_full() to affect its safety and
* performance.
*/
export namespace FileSetContentsFlags {
export const $gtype: GObject.GType<FileSetContentsFlags>;
}
enum FileSetContentsFlags {
/**
* No guarantees about file consistency or durability.
* The most dangerous setting, which is slightly faster than other settings.
*/
NONE,
/**
* Guarantee file consistency: after a crash,
* either the old version of the file or the new version of the file will be
* available, but not a mixture. On Unix systems this equates to an `fsync()`
* on the file and use of an atomic `rename()` of the new version of the file
* over the old.
*/
CONSISTENT,
/**
* Guarantee file durability: after a crash, the
* new version of the file will be available. On Unix systems this equates to
* an `fsync()` on the file (if %G_FILE_SET_CONTENTS_CONSISTENT is unset), or
* the effects of %G_FILE_SET_CONTENTS_CONSISTENT plus an `fsync()` on the
* directory containing the file after calling `rename()`.
*/
DURABLE,
/**
* Only apply consistency and durability
* guarantees if the file already exists. This may speed up file operations
* if the file doesnt currently exist, but may result in a corrupted version
* of the new file if the system crashes while writing it.
*/
ONLY_EXISTING,
}
/**
* A test to perform on a file using g_file_test().
*/
/**
* A test to perform on a file using g_file_test().
*/
export namespace FileTest {
export const $gtype: GObject.GType<FileTest>;
}
enum FileTest {
/**
* %TRUE if the file is a regular file
* (not a directory). Note that this test will also return %TRUE
* if the tested file is a symlink to a regular file.
*/
IS_REGULAR,
/**
* %TRUE if the file is a symlink.
*/
IS_SYMLINK,
/**
* %TRUE if the file is a directory.
*/
IS_DIR,
/**
* %TRUE if the file is executable.
*/
IS_EXECUTABLE,
/**
* %TRUE if the file exists. It may or may not
* be a regular file.
*/
EXISTS,
}
/**
* Flags to modify the format of the string returned by g_format_size_full().
*/
/**
* Flags to modify the format of the string returned by g_format_size_full().
*/
export namespace FormatSizeFlags {
export const $gtype: GObject.GType<FormatSizeFlags>;
}
enum FormatSizeFlags {
/**
* behave the same as g_format_size()
*/
DEFAULT,
/**
* include the exact number of bytes as part
* of the returned string. For example, "45.6 kB (45,612 bytes)".
*/
LONG_FORMAT,
/**
* use IEC (base 1024) units with "KiB"-style
* suffixes. IEC units should only be used for reporting things with
* a strong "power of 2" basis, like RAM sizes or RAID stripe sizes.
* Network and storage sizes should be reported in the normal SI units.
*/
IEC_UNITS,
/**
* set the size as a quantity in bits, rather than
* bytes, and return units in bits. For example, Mbit rather than MB.
*/
BITS,
/**
* return only value, without unit; this should
* not be used together with `G_FORMAT_SIZE_LONG_FORMAT`
* nor `G_FORMAT_SIZE_ONLY_UNIT`. Since: 2.74
*/
ONLY_VALUE,
/**
* return only unit, without value; this should
* not be used together with `G_FORMAT_SIZE_LONG_FORMAT`
* nor `G_FORMAT_SIZE_ONLY_VALUE`. Since: 2.74
*/
ONLY_UNIT,
}
/**
* Flags used internally in the #GHook implementation.
*/
/**
* Flags used internally in the #GHook implementation.
*/
export namespace HookFlagMask {
export const $gtype: GObject.GType<HookFlagMask>;
}
enum HookFlagMask {
/**
* set if the hook has not been destroyed
*/
ACTIVE,
/**
* set if the hook is currently being run
*/
IN_CALL,
/**
* A mask covering all bits reserved for
* hook flags; see %G_HOOK_FLAG_USER_SHIFT
*/
MASK,
}
/**
* A bitwise combination representing a condition to watch for on an
* event source.
*/
/**
* A bitwise combination representing a condition to watch for on an
* event source.
*/
export namespace IOCondition {
export const $gtype: GObject.GType<IOCondition>;
}
enum IOCondition {
/**
* There is data to read.
*/
IN,
/**
* Data can be written (without blocking).
*/
OUT,
/**
* There is urgent data to read.
*/
PRI,
/**
* Error condition.
*/
ERR,
/**
* Hung up (the connection has been broken, usually for
* pipes and sockets).
*/
HUP,
/**
* Invalid request. The file descriptor is not open.
*/
NVAL,
}
/**
* Specifies properties of a #GIOChannel. Some of the flags can only be
* read with g_io_channel_get_flags(), but not changed with
* g_io_channel_set_flags().
*/
/**
* Specifies properties of a #GIOChannel. Some of the flags can only be
* read with g_io_channel_get_flags(), but not changed with
* g_io_channel_set_flags().
*/
export namespace IOFlags {
export const $gtype: GObject.GType<IOFlags>;
}
enum IOFlags {
/**
* no special flags set. Since: 2.74
*/
NONE,
/**
* turns on append mode, corresponds to %O_APPEND
* (see the documentation of the UNIX open() syscall)
*/
APPEND,
/**
* turns on nonblocking mode, corresponds to
* %O_NONBLOCK/%O_NDELAY (see the documentation of the UNIX open()
* syscall)
*/
NONBLOCK,
/**
* indicates that the io channel is readable.
* This flag cannot be changed.
*/
IS_READABLE,
/**
* indicates that the io channel is writable.
* This flag cannot be changed.
*/
IS_WRITABLE,
/**
* a misspelled version of `G_IO_FLAG_IS_WRITABLE`
* that existed before the spelling was fixed in GLib 2.30. It is kept
* here for compatibility reasons. Deprecated since 2.30
*/
IS_WRITEABLE,
/**
* indicates that the io channel is seekable,
* i.e. that g_io_channel_seek_position() can be used on it.
* This flag cannot be changed.
*/
IS_SEEKABLE,
/**
* the mask that specifies all the valid flags.
*/
MASK,
/**
* the mask of the flags that are returned from
* g_io_channel_get_flags()
*/
GET_MASK,
/**
* the mask of the flags that the user can modify
* with g_io_channel_set_flags()
*/
SET_MASK,
}
/**
* Flags which influence the parsing.
*/
/**
* Flags which influence the parsing.
*/
export namespace KeyFileFlags {
export const $gtype: GObject.GType<KeyFileFlags>;
}
enum KeyFileFlags {
/**
* No flags, default behaviour
*/
NONE,
/**
* Use this flag if you plan to write the
* (possibly modified) contents of the key file back to a file;
* otherwise all comments will be lost when the key file is
* written back.
*/
KEEP_COMMENTS,
/**
* Use this flag if you plan to write the
* (possibly modified) contents of the key file back to a file;
* otherwise only the translations for the current language will be
* written back.
*/
KEEP_TRANSLATIONS,
}
/**
* Flags specifying the level of log messages.
*
* It is possible to change how GLib treats messages of the various
* levels using [func`GLib`.log_set_handler] and [func`GLib`.log_set_fatal_mask].
*/
/**
* Flags specifying the level of log messages.
*
* It is possible to change how GLib treats messages of the various
* levels using [func`GLib`.log_set_handler] and [func`GLib`.log_set_fatal_mask].
*/
export namespace LogLevelFlags {
export const $gtype: GObject.GType<LogLevelFlags>;
}
enum LogLevelFlags {
/**
* internal flag
*/
FLAG_RECURSION,
/**
* internal flag
*/
FLAG_FATAL,
/**
* log level for errors, see [func`GLib`.error].
* This level is also used for messages produced by [func`GLib`.assert].
*/
LEVEL_ERROR,
/**
* log level for critical warning messages, see
* [func`GLib`.critical]. This level is also used for messages produced by
* [func`GLib`.return_if_fail] and [func`GLib`.return_val_if_fail].
*/
LEVEL_CRITICAL,
/**
* log level for warnings, see [func`GLib`.warning]
*/
LEVEL_WARNING,
/**
* log level for messages, see [func`GLib`.message]
*/
LEVEL_MESSAGE,
/**
* log level for informational messages, see [func`GLib`.info]
*/
LEVEL_INFO,
/**
* log level for debug messages, see [func`GLib`.debug]
*/
LEVEL_DEBUG,
/**
* a mask including all log levels
*/
LEVEL_MASK,
}
/**
* Flags to pass to [ctor`GLib`.MainContext.new_with_flags] which affect the
* behaviour of a [struct`GLib`.MainContext].
*/
/**
* Flags to pass to [ctor`GLib`.MainContext.new_with_flags] which affect the
* behaviour of a [struct`GLib`.MainContext].
*/
export namespace MainContextFlags {
export const $gtype: GObject.GType<MainContextFlags>;
}
enum MainContextFlags {
/**
* Default behaviour.
*/
NONE,
/**
* Assume that polling for events will
* free the thread to process other jobs. That's useful if you're using
* `g_main_context_{prepare,query,check,dispatch}` to integrate GMainContext in
* other event loops.
*/
OWNERLESS_POLLING,
}
/**
* A mixed enumerated type and flags field. You must specify one type
* (string, strdup, boolean, tristate). Additionally, you may optionally
* bitwise OR the type with the flag %G_MARKUP_COLLECT_OPTIONAL.
*
* It is likely that this enum will be extended in the future to
* support other types.
*/
/**
* A mixed enumerated type and flags field. You must specify one type
* (string, strdup, boolean, tristate). Additionally, you may optionally
* bitwise OR the type with the flag %G_MARKUP_COLLECT_OPTIONAL.
*
* It is likely that this enum will be extended in the future to
* support other types.
*/
export namespace MarkupCollectType {
export const $gtype: GObject.GType<MarkupCollectType>;
}
enum MarkupCollectType {
/**
* used to terminate the list of attributes
* to collect
*/
INVALID,
/**
* collect the string pointer directly from
* the attribute_values[] array. Expects a parameter of type (const
* char **). If %G_MARKUP_COLLECT_OPTIONAL is specified and the
* attribute isn't present then the pointer will be set to %NULL
*/
STRING,
/**
* as with %G_MARKUP_COLLECT_STRING, but
* expects a parameter of type (char **) and g_strdup()s the
* returned pointer. The pointer must be freed with g_free()
*/
STRDUP,
/**
* expects a parameter of type (`gboolean *`)
* and parses the attribute value as a boolean. Sets %FALSE if the
* attribute isn't present. Valid boolean values consist of
* (case-insensitive) "false", "f", "no", "n", "0" and "true", "t",
* "yes", "y", "1"
*/
BOOLEAN,
/**
* as with %G_MARKUP_COLLECT_BOOLEAN, but
* in the case of a missing attribute a value is set that compares
* equal to neither %FALSE nor %TRUE %G_MARKUP_COLLECT_OPTIONAL is
* implied
*/
TRISTATE,
/**
* can be bitwise ORed with the other fields.
* If present, allows the attribute not to appear. A default value
* is set depending on what value type is used
*/
OPTIONAL,
}
/**
* Flags that affect the behaviour of the parser.
*/
/**
* Flags that affect the behaviour of the parser.
*/
export namespace MarkupParseFlags {
export const $gtype: GObject.GType<MarkupParseFlags>;
}
enum MarkupParseFlags {
/**
* No special behaviour. Since: 2.74
*/
DEFAULT_FLAGS,
/**
* flag you should not use
*/
DO_NOT_USE_THIS_UNSUPPORTED_FLAG,
/**
* When this flag is set, CDATA marked
* sections are not passed literally to the `passthrough` function of
* the parser. Instead, the content of the section (without the
* `<![CDATA[` and `]]>`) is
* passed to the `text` function. This flag was added in GLib 2.12
*/
TREAT_CDATA_AS_TEXT,
/**
* Normally errors caught by GMarkup
* itself have line/column information prefixed to them to let the
* caller know the location of the error. When this flag is set the
* location information is also prefixed to errors generated by the
* #GMarkupParser implementation functions
*/
PREFIX_ERROR_POSITION,
/**
* Ignore (don't report) qualified
* attributes and tags, along with their contents. A qualified
* attribute or tag is one that contains ':' in its name (ie: is in
* another namespace). Since: 2.40.
*/
IGNORE_QUALIFIED,
}
/**
* Flags which modify individual options.
*/
/**
* Flags which modify individual options.
*/
export namespace OptionFlags {
export const $gtype: GObject.GType<OptionFlags>;
}
enum OptionFlags {
/**
* No flags.
*/
NONE,
/**
* The option doesn't appear in `--help` output.
*/
HIDDEN,
/**
* The option appears in the main section of the
* `--help` output, even if it is defined in a group.
*/
IN_MAIN,
/**
* For options of the %G_OPTION_ARG_NONE kind, this
* flag indicates that the sense of the option is reversed. i.e. %FALSE will
* be stored into the argument rather than %TRUE.
*/
REVERSE,
/**
* For options of the %G_OPTION_ARG_CALLBACK kind,
* this flag indicates that the callback does not take any argument
* (like a %G_OPTION_ARG_NONE option). Since 2.8
*/
NO_ARG,
/**
* For options of the %G_OPTION_ARG_CALLBACK
* kind, this flag indicates that the argument should be passed to the
* callback in the GLib filename encoding rather than UTF-8. Since 2.8
*/
FILENAME,
/**
* For options of the %G_OPTION_ARG_CALLBACK
* kind, this flag indicates that the argument supply is optional.
* If no argument is given then data of %GOptionParseFunc will be
* set to NULL. Since 2.8
*/
OPTIONAL_ARG,
/**
* This flag turns off the automatic conflict
* resolution which prefixes long option names with `groupname-` if
* there is a conflict. This option should only be used in situations
* where aliasing is necessary to model some legacy commandline interface.
* It is not safe to use this option, unless all option groups are under
* your direct control. Since 2.8.
*/
NOALIAS,
/**
* This flag marks the option as deprecated in the `--help`.
*
* You should update the description of the option to describe what
* the user should do in response to the deprecation, for instance:
* remove the option, or replace it with another one.
*/
DEPRECATED,
}
/**
* Flags specifying compile-time options.
*/
/**
* Flags specifying compile-time options.
*/
export namespace RegexCompileFlags {
export const $gtype: GObject.GType<RegexCompileFlags>;
}
enum RegexCompileFlags {
/**
* No special options set. Since: 2.74
*/
DEFAULT,
/**
* Letters in the pattern match both upper- and
* lowercase letters. This option can be changed within a pattern
* by a "(?i)" option setting.
*/
CASELESS,
/**
* By default, GRegex treats the strings as consisting
* of a single line of characters (even if it actually contains
* newlines). The "start of line" metacharacter ("^") matches only
* at the start of the string, while the "end of line" metacharacter
* ("$") matches only at the end of the string, or before a terminating
* newline (unless %G_REGEX_DOLLAR_ENDONLY is set). When
* %G_REGEX_MULTILINE is set, the "start of line" and "end of line"
* constructs match immediately following or immediately before any
* newline in the string, respectively, as well as at the very start
* and end. This can be changed within a pattern by a "(?m)" option
* setting.
*/
MULTILINE,
/**
* A dot metacharacter (".") in the pattern matches all
* characters, including newlines. Without it, newlines are excluded.
* This option can be changed within a pattern by a ("?s") option setting.
*/
DOTALL,
/**
* Whitespace data characters in the pattern are
* totally ignored except when escaped or inside a character class.
* Whitespace does not include the VT character (code 11). In addition,
* characters between an unescaped "#" outside a character class and
* the next newline character, inclusive, are also ignored. This can
* be changed within a pattern by a "(?x)" option setting.
*/
EXTENDED,
/**
* The pattern is forced to be "anchored", that is,
* it is constrained to match only at the first matching point in the
* string that is being searched. This effect can also be achieved by
* appropriate constructs in the pattern itself such as the "^"
* metacharacter.
*/
ANCHORED,
/**
* A dollar metacharacter ("$") in the pattern
* matches only at the end of the string. Without this option, a
* dollar also matches immediately before the final character if
* it is a newline (but not before any other newlines). This option
* is ignored if %G_REGEX_MULTILINE is set.
*/
DOLLAR_ENDONLY,
/**
* Inverts the "greediness" of the quantifiers so that
* they are not greedy by default, but become greedy if followed by "?".
* It can also be set by a "(?U)" option setting within the pattern.
*/
UNGREEDY,
/**
* Usually strings must be valid UTF-8 strings, using this
* flag they are considered as a raw sequence of bytes.
*/
RAW,
/**
* Disables the use of numbered capturing
* parentheses in the pattern. Any opening parenthesis that is not
* followed by "?" behaves as if it were followed by "?:" but named
* parentheses can still be used for capturing (and they acquire numbers
* in the usual way).
*/
NO_AUTO_CAPTURE,
/**
* Since 2.74 and the port to pcre2, requests JIT
* compilation, which, if the just-in-time compiler is available, further
* processes a compiled pattern into machine code that executes much
* faster. However, it comes at the cost of extra processing before the
* match is performed, so it is most beneficial to use this when the same
* compiled pattern is used for matching many times. Before 2.74 this
* option used the built-in non-JIT optimizations in pcre1.
*/
OPTIMIZE,
/**
* Limits an unanchored pattern to match before (or at) the
* first newline. Since: 2.34
*/
FIRSTLINE,
/**
* Names used to identify capturing subpatterns need not
* be unique. This can be helpful for certain types of pattern when it
* is known that only one instance of the named subpattern can ever be
* matched.
*/
DUPNAMES,
/**
* Usually any newline character or character sequence is
* recognized. If this option is set, the only recognized newline character
* is '\r'.
*/
NEWLINE_CR,
/**
* Usually any newline character or character sequence is
* recognized. If this option is set, the only recognized newline character
* is '\n'.
*/
NEWLINE_LF,
/**
* Usually any newline character or character sequence is
* recognized. If this option is set, the only recognized newline character
* sequence is '\r\n'.
*/
NEWLINE_CRLF,
/**
* Usually any newline character or character sequence
* is recognized. If this option is set, the only recognized newline character
* sequences are '\r', '\n', and '\r\n'. Since: 2.34
*/
NEWLINE_ANYCRLF,
/**
* Usually any newline character or character sequence
* is recognised. If this option is set, then "\R" only recognizes the newline
* characters '\r', '\n' and '\r\n'. Since: 2.34
*/
BSR_ANYCRLF,
/**
* Changes behaviour so that it is compatible with
* JavaScript rather than PCRE. Since GLib 2.74 this is no longer supported,
* as libpcre2 does not support it. Since: 2.34 Deprecated: 2.74
*/
JAVASCRIPT_COMPAT,
}
/**
* Flags specifying match-time options.
*/
/**
* Flags specifying match-time options.
*/
export namespace RegexMatchFlags {
export const $gtype: GObject.GType<RegexMatchFlags>;
}
enum RegexMatchFlags {
/**
* No special options set. Since: 2.74
*/
DEFAULT,
/**
* The pattern is forced to be "anchored", that is,
* it is constrained to match only at the first matching point in the
* string that is being searched. This effect can also be achieved by
* appropriate constructs in the pattern itself such as the "^"
* metacharacter.
*/
ANCHORED,
/**
* Specifies that first character of the string is
* not the beginning of a line, so the circumflex metacharacter should
* not match before it. Setting this without %G_REGEX_MULTILINE (at
* compile time) causes circumflex never to match. This option affects
* only the behaviour of the circumflex metacharacter, it does not
* affect "\A".
*/
NOTBOL,
/**
* Specifies that the end of the subject string is
* not the end of a line, so the dollar metacharacter should not match
* it nor (except in multiline mode) a newline immediately before it.
* Setting this without %G_REGEX_MULTILINE (at compile time) causes
* dollar never to match. This option affects only the behaviour of
* the dollar metacharacter, it does not affect "\Z" or "\z".
*/
NOTEOL,
/**
* An empty string is not considered to be a valid
* match if this option is set. If there are alternatives in the pattern,
* they are tried. If all the alternatives match the empty string, the
* entire match fails. For example, if the pattern "a?b?" is applied to
* a string not beginning with "a" or "b", it matches the empty string
* at the start of the string. With this flag set, this match is not
* valid, so GRegex searches further into the string for occurrences
* of "a" or "b".
*/
NOTEMPTY,
/**
* Turns on the partial matching feature, for more
* documentation on partial matching see g_match_info_is_partial_match().
*/
PARTIAL,
/**
* Overrides the newline definition set when
* creating a new #GRegex, setting the '\r' character as line terminator.
*/
NEWLINE_CR,
/**
* Overrides the newline definition set when
* creating a new #GRegex, setting the '\n' character as line terminator.
*/
NEWLINE_LF,
/**
* Overrides the newline definition set when
* creating a new #GRegex, setting the '\r\n' characters sequence as line terminator.
*/
NEWLINE_CRLF,
/**
* Overrides the newline definition set when
* creating a new #GRegex, any Unicode newline sequence
* is recognised as a newline. These are '\r', '\n' and '\rn', and the
* single characters U+000B LINE TABULATION, U+000C FORM FEED (FF),
* U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and
* U+2029 PARAGRAPH SEPARATOR.
*/
NEWLINE_ANY,
/**
* Overrides the newline definition set when
* creating a new #GRegex; any '\r', '\n', or '\r\n' character sequence
* is recognized as a newline. Since: 2.34
*/
NEWLINE_ANYCRLF,
/**
* Overrides the newline definition for "\R" set when
* creating a new #GRegex; only '\r', '\n', or '\r\n' character sequences
* are recognized as a newline by "\R". Since: 2.34
*/
BSR_ANYCRLF,
/**
* Overrides the newline definition for "\R" set when
* creating a new #GRegex; any Unicode newline character or character sequence
* are recognized as a newline by "\R". These are '\r', '\n' and '\rn', and the
* single characters U+000B LINE TABULATION, U+000C FORM FEED (FF),
* U+0085 NEXT LINE (NEL), U+2028 LINE SEPARATOR and
* U+2029 PARAGRAPH SEPARATOR. Since: 2.34
*/
BSR_ANY,
/**
* An alias for %G_REGEX_MATCH_PARTIAL. Since: 2.34
*/
PARTIAL_SOFT,
/**
* Turns on the partial matching feature. In contrast to
* to %G_REGEX_MATCH_PARTIAL_SOFT, this stops matching as soon as a partial match
* is found, without continuing to search for a possible complete match. See
* g_match_info_is_partial_match() for more information. Since: 2.34
*/
PARTIAL_HARD,
/**
* Like %G_REGEX_MATCH_NOTEMPTY, but only applied to
* the start of the matched string. For anchored
* patterns this can only happen for pattern containing "\K". Since: 2.34
*/
NOTEMPTY_ATSTART,
}
/**
* Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes().
*/
/**
* Flags passed to g_spawn_sync(), g_spawn_async() and g_spawn_async_with_pipes().
*/
export namespace SpawnFlags {
export const $gtype: GObject.GType<SpawnFlags>;
}
enum SpawnFlags {
/**
* no flags, default behaviour
*/
DEFAULT,
/**
* the parent's open file descriptors will
* be inherited by the child; otherwise all descriptors except stdin,
* stdout and stderr will be closed before calling exec() in the child.
*/
LEAVE_DESCRIPTORS_OPEN,
/**
* the child will not be automatically reaped;
* you must use g_child_watch_add() yourself (or call waitpid() or handle
* `SIGCHLD` yourself), or the child will become a zombie.
*/
DO_NOT_REAP_CHILD,
/**
* `argv[0]` need not be an absolute path, it will be
* looked for in the user's `PATH`.
*/
SEARCH_PATH,
/**
* the child's standard output will be discarded,
* instead of going to the same location as the parent's standard output.
*/
STDOUT_TO_DEV_NULL,
/**
* the child's standard error will be discarded.
*/
STDERR_TO_DEV_NULL,
/**
* the child will inherit the parent's standard
* input (by default, the child's standard input is attached to `/dev/null`).
*/
CHILD_INHERITS_STDIN,
/**
* the first element of `argv` is the file to
* execute, while the remaining elements are the actual argument vector
* to pass to the file. Normally g_spawn_async_with_pipes() uses `argv[0]`
* as the file to execute, and passes all of `argv` to the child.
*/
FILE_AND_ARGV_ZERO,
/**
* if `argv[0]` is not an absolute path,
* it will be looked for in the `PATH` from the passed child environment.
* Since: 2.34
*/
SEARCH_PATH_FROM_ENVP,
/**
* create all pipes with the `O_CLOEXEC` flag set.
* Since: 2.40
*/
CLOEXEC_PIPES,
/**
* The child will inherit the parent's standard output.
*/
CHILD_INHERITS_STDOUT,
/**
* The child will inherit the parent's standard error.
*/
CHILD_INHERITS_STDERR,
/**
* The child's standard input is attached to `/dev/null`.
*/
STDIN_FROM_DEV_NULL,
}
/**
* Flags to pass to [func`GLib`.test_trap_subprocess] to control input and output.
*
* Note that in contrast with [func`GLib`.test_trap_fork], the default
* behavior of [func`GLib`.test_trap_subprocess] is to not show stdout
* and stderr.
*/
/**
* Flags to pass to [func`GLib`.test_trap_subprocess] to control input and output.
*
* Note that in contrast with [func`GLib`.test_trap_fork], the default
* behavior of [func`GLib`.test_trap_subprocess] is to not show stdout
* and stderr.
*/
export namespace TestSubprocessFlags {
export const $gtype: GObject.GType<TestSubprocessFlags>;
}
enum TestSubprocessFlags {
/**
* Default behaviour. Since: 2.74
*/
DEFAULT,
/**
* If this flag is given, the child
* process will inherit the parent's stdin. Otherwise, the child's
* stdin is redirected to `/dev/null`.
*/
INHERIT_STDIN,
/**
* If this flag is given, the child
* process will inherit the parent's stdout. Otherwise, the child's
* stdout will not be visible, but it will be captured to allow
* later tests with [func`GLib`.test_trap_assert_stdout].
*/
INHERIT_STDOUT,
/**
* If this flag is given, the child
* process will inherit the parent's stderr. Otherwise, the child's
* stderr will not be visible, but it will be captured to allow
* later tests with [func`GLib`.test_trap_assert_stderr].
*/
INHERIT_STDERR,
}
/**
* Flags to pass to [func`GLib`.test_trap_fork] to control input and output.
*
* Test traps are guards around forked tests. These flags determine what traps to set.
*/
/**
* Flags to pass to [func`GLib`.test_trap_fork] to control input and output.
*
* Test traps are guards around forked tests. These flags determine what traps to set.
*/
export namespace TestTrapFlags {
export const $gtype: GObject.GType<TestTrapFlags>;
}
enum TestTrapFlags {
/**
* Default behaviour. Since: 2.74
*/
DEFAULT,
/**
* Redirect stdout of the test child to
* `/dev/null` so it cannot be observed on the console during test
* runs. The actual output is still captured though to allow later
* tests with g_test_trap_assert_stdout().
*/
SILENCE_STDOUT,
/**
* Redirect stderr of the test child to
* `/dev/null` so it cannot be observed on the console during test
* runs. The actual output is still captured though to allow later
* tests with g_test_trap_assert_stderr().
*/
SILENCE_STDERR,
/**
* If this flag is given, stdin of the
* child process is shared with stdin of its parent process.
* It is redirected to `/dev/null` otherwise.
*/
INHERIT_STDIN,
}
/**
* Specifies which nodes are visited during several of the tree
* functions, including g_node_traverse() and g_node_find().
*/
/**
* Specifies which nodes are visited during several of the tree
* functions, including g_node_traverse() and g_node_find().
*/
export namespace TraverseFlags {
export const $gtype: GObject.GType<TraverseFlags>;
}
enum TraverseFlags {
/**
* only leaf nodes should be visited. This name has
* been introduced in 2.6, for older version use
* %G_TRAVERSE_LEAFS.
*/
LEAVES,
/**
* only non-leaf nodes should be visited. This
* name has been introduced in 2.6, for older
* version use %G_TRAVERSE_NON_LEAFS.
*/
NON_LEAVES,
/**
* all nodes should be visited.
*/
ALL,
/**
* a mask of all traverse flags.
*/
MASK,
/**
* identical to %G_TRAVERSE_LEAVES.
*/
LEAFS,
/**
* identical to %G_TRAVERSE_NON_LEAVES.
*/
NON_LEAFS,
}
/**
* Flags that describe a URI.
*
* When parsing a URI, if you need to choose different flags based on
* the type of URI, you can use g_uri_peek_scheme() on the URI string
* to check the scheme first, and use that to decide what flags to
* parse it with.
*/
/**
* Flags that describe a URI.
*
* When parsing a URI, if you need to choose different flags based on
* the type of URI, you can use g_uri_peek_scheme() on the URI string
* to check the scheme first, and use that to decide what flags to
* parse it with.
*/
export namespace UriFlags {
export const $gtype: GObject.GType<UriFlags>;
}
enum UriFlags {
/**
* No flags set.
*/
NONE,
/**
* Parse the URI more relaxedly than the
* [RFC 3986](https://tools.ietf.org/html/rfc3986) grammar specifies,
* fixing up or ignoring common mistakes in URIs coming from external
* sources. This is also needed for some obscure URI schemes where `;`
* separates the host from the path. Dont use this flag unless you need to.
*/
PARSE_RELAXED,
/**
* The userinfo field may contain a password,
* which will be separated from the username by `:`.
*/
HAS_PASSWORD,
/**
* The userinfo may contain additional
* authentication-related parameters, which will be separated from
* the username and/or password by `;`.
*/
HAS_AUTH_PARAMS,
/**
* When parsing a URI, this indicates that `%`-encoded
* characters in the userinfo, path, query, and fragment fields
* should not be decoded. (And likewise the host field if
* %G_URI_FLAGS_NON_DNS is also set.) When building a URI, it indicates
* that you have already `%`-encoded the components, and so #GUri
* should not do any encoding itself.
*/
ENCODED,
/**
* The host component should not be assumed to be a
* DNS hostname or IP address (for example, for `smb` URIs with NetBIOS
* hostnames).
*/
NON_DNS,
/**
* Same as %G_URI_FLAGS_ENCODED, for the query
* field only.
*/
ENCODED_QUERY,
/**
* Same as %G_URI_FLAGS_ENCODED, for the path only.
*/
ENCODED_PATH,
/**
* Same as %G_URI_FLAGS_ENCODED, for the
* fragment only.
*/
ENCODED_FRAGMENT,
/**
* A scheme-based normalization will be applied.
* For example, when parsing an HTTP URI changing omitted path to `/` and
* omitted port to `80`; and when building a URI, changing empty path to `/`
* and default port `80`). This only supports a subset of known schemes. (Since: 2.68)
*/
SCHEME_NORMALIZE,
}
/**
* Flags describing what parts of the URI to hide in
* g_uri_to_string_partial(). Note that %G_URI_HIDE_PASSWORD and
* %G_URI_HIDE_AUTH_PARAMS will only work if the #GUri was parsed with
* the corresponding flags.
*/
/**
* Flags describing what parts of the URI to hide in
* g_uri_to_string_partial(). Note that %G_URI_HIDE_PASSWORD and
* %G_URI_HIDE_AUTH_PARAMS will only work if the #GUri was parsed with
* the corresponding flags.
*/
export namespace UriHideFlags {
export const $gtype: GObject.GType<UriHideFlags>;
}
enum UriHideFlags {
/**
* No flags set.
*/
NONE,
/**
* Hide the userinfo.
*/
USERINFO,
/**
* Hide the password.
*/
PASSWORD,
/**
* Hide the auth_params.
*/
AUTH_PARAMS,
/**
* Hide the query.
*/
QUERY,
/**
* Hide the fragment.
*/
FRAGMENT,
}
/**
* Flags modifying the way parameters are handled by g_uri_parse_params() and
* #GUriParamsIter.
*/
/**
* Flags modifying the way parameters are handled by g_uri_parse_params() and
* #GUriParamsIter.
*/
export namespace UriParamsFlags {
export const $gtype: GObject.GType<UriParamsFlags>;
}
enum UriParamsFlags {
/**
* No flags set.
*/
NONE,
/**
* Parameter names are case insensitive.
*/
CASE_INSENSITIVE,
/**
* Replace `+` with space character. Only useful for
* URLs on the web, using the `https` or `http` schemas.
*/
WWW_FORM,
/**
* See %G_URI_FLAGS_PARSE_RELAXED.
*/
PARSE_RELAXED,
}
abstract class Allocator {
static $gtype: GObject.GType<Allocator>;
// Constructors
_init(...args: any[]): void;
// Methods
free(): void;
}
/**
* Contains the public fields of a GArray.
*/
class Array {
static $gtype: GObject.GType<Array>;
// Fields
data: string;
len: number;
// Constructors
constructor(
properties?: Partial<{
data: string;
len: number;
}>,
);
_init(...args: any[]): void;
}
/**
* An opaque data structure which represents an asynchronous queue.
*
* It should only be accessed through the `g_async_queue_*` functions.
*/
abstract class AsyncQueue {
static $gtype: GObject.GType<AsyncQueue>;
// Constructors
_init(...args: any[]): void;
// Static methods
/**
* Creates a new asynchronous queue.
*/
static ['new'](): AsyncQueue;
/**
* Creates a new asynchronous queue and sets up a destroy notify
* function that is used to free any remaining queue items when
* the queue is destroyed after the final unref.
* @param item_free_func function to free queue elements
*/
static new_full(item_free_func?: DestroyNotify | null): AsyncQueue;
// Methods
/**
* Returns the length of the queue.
*
* Actually this function returns the number of data items in
* the queue minus the number of waiting threads, so a negative
* value means waiting threads, and a positive value means available
* entries in the `queue`. A return value of 0 could mean n entries
* in the queue and n threads waiting. This can happen due to locking
* of the queue or due to scheduling.
* @returns the length of the @queue
*/
length(): number;
/**
* Returns the length of the queue.
*
* Actually this function returns the number of data items in
* the queue minus the number of waiting threads, so a negative
* value means waiting threads, and a positive value means available
* entries in the `queue`. A return value of 0 could mean n entries
* in the queue and n threads waiting. This can happen due to locking
* of the queue or due to scheduling.
*
* This function must be called while holding the `queue'`s lock.
* @returns the length of the @queue.
*/
length_unlocked(): number;
/**
* Acquires the `queue'`s lock. If another thread is already
* holding the lock, this call will block until the lock
* becomes available.
*
* Call g_async_queue_unlock() to drop the lock again.
*
* While holding the lock, you can only call the
* g_async_queue_*_unlocked() functions on `queue`. Otherwise,
* deadlock may occur.
*/
lock(): void;
/**
* Pops data from the `queue`. If `queue` is empty, this function
* blocks until data becomes available.
* @returns data from the queue
*/
pop(): any | null;
/**
* Pops data from the `queue`. If `queue` is empty, this function
* blocks until data becomes available.
*
* This function must be called while holding the `queue'`s lock.
* @returns data from the queue.
*/
pop_unlocked(): any | null;
/**
* Pushes the `data` into the `queue`.
*
* The `data` parameter must not be %NULL.
* @param data data to push onto the @queue
*/
push(data: any): void;
/**
* Pushes the `item` into the `queue`. `item` must not be %NULL.
* In contrast to g_async_queue_push(), this function
* pushes the new item ahead of the items already in the queue,
* so that it will be the next one to be popped off the queue.
* @param item data to push into the @queue
*/
push_front(item: any): void;
/**
* Pushes the `item` into the `queue`. `item` must not be %NULL.
* In contrast to g_async_queue_push_unlocked(), this function
* pushes the new item ahead of the items already in the queue,
* so that it will be the next one to be popped off the queue.
*
* This function must be called while holding the `queue'`s lock.
* @param item data to push into the @queue
*/
push_front_unlocked(item: any): void;
/**
* Inserts `data` into `queue` using `func` to determine the new
* position.
*
* This function requires that the `queue` is sorted before pushing on
* new elements, see g_async_queue_sort().
*
* This function will lock `queue` before it sorts the queue and unlock
* it when it is finished.
*
* For an example of `func` see g_async_queue_sort().
* @param data the @data to push into the @queue
* @param func the #GCompareDataFunc is used to sort @queue
*/
push_sorted(data: any, func: CompareDataFunc): void;
/**
* Inserts `data` into `queue` using `func` to determine the new
* position.
*
* The sort function `func` is passed two elements of the `queue`.
* It should return 0 if they are equal, a negative value if the
* first element should be higher in the `queue` or a positive value
* if the first element should be lower in the `queue` than the second
* element.
*
* This function requires that the `queue` is sorted before pushing on
* new elements, see g_async_queue_sort().
*
* This function must be called while holding the `queue'`s lock.
*
* For an example of `func` see g_async_queue_sort().
* @param data the data to push into the @queue
* @param func the #GCompareDataFunc is used to sort @queue
*/
push_sorted_unlocked(data: any | null, func: CompareDataFunc): void;
/**
* Pushes the `data` into the `queue`.
*
* The `data` parameter must not be %NULL.
*
* This function must be called while holding the `queue'`s lock.
* @param data data to push onto the @queue
*/
push_unlocked(data: any): void;
/**
* Increases the reference count of the asynchronous `queue` by 1.
* You do not need to hold the lock to call this function.
* @returns the @queue that was passed in (since 2.6)
*/
ref(): AsyncQueue;
/**
* Increases the reference count of the asynchronous `queue` by 1.
*/
ref_unlocked(): void;
/**
* Remove an item from the queue.
* @param item the data to remove from the @queue
* @returns %TRUE if the item was removed
*/
remove(item: any): boolean;
/**
* Remove an item from the queue.
*
* This function must be called while holding the `queue'`s lock.
* @param item the data to remove from the @queue
* @returns %TRUE if the item was removed
*/
remove_unlocked(item?: any | null): boolean;
/**
* Sorts `queue` using `func`.
*
* The sort function `func` is passed two elements of the `queue`.
* It should return 0 if they are equal, a negative value if the
* first element should be higher in the `queue` or a positive value
* if the first element should be lower in the `queue` than the second
* element.
*
* This function will lock `queue` before it sorts the queue and unlock
* it when it is finished.
*
* If you were sorting a list of priority numbers to make sure the
* lowest priority would be at the top of the queue, you could use:
*
* ```c
* gint32 id1;
* gint32 id2;
*
* id1 = GPOINTER_TO_INT (element1);
* id2 = GPOINTER_TO_INT (element2);
*
* return (id1 > id2 ? +1 : id1 == id2 ? 0 : -1);
* ```
*
* @param func the #GCompareDataFunc is used to sort @queue
*/
sort(func: CompareDataFunc): void;
/**
* Sorts `queue` using `func`.
*
* The sort function `func` is passed two elements of the `queue`.
* It should return 0 if they are equal, a negative value if the
* first element should be higher in the `queue` or a positive value
* if the first element should be lower in the `queue` than the second
* element.
*
* This function must be called while holding the `queue'`s lock.
* @param func the #GCompareDataFunc is used to sort @queue
*/
sort_unlocked(func: CompareDataFunc): void;
/**
* Pops data from the `queue`. If the queue is empty, blocks until
* `end_time` or until data becomes available.
*
* If no data is received before `end_time,` %NULL is returned.
*
* To easily calculate `end_time,` a combination of g_get_real_time()
* and g_time_val_add() can be used.
* @param end_time a #GTimeVal, determining the final time
* @returns data from the queue or %NULL, when no data is received before @end_time.
*/
timed_pop(end_time: TimeVal): any | null;
/**
* Pops data from the `queue`. If the queue is empty, blocks until
* `end_time` or until data becomes available.
*
* If no data is received before `end_time,` %NULL is returned.
*
* To easily calculate `end_time,` a combination of g_get_real_time()
* and g_time_val_add() can be used.
*
* This function must be called while holding the `queue'`s lock.
* @param end_time a #GTimeVal, determining the final time
* @returns data from the queue or %NULL, when no data is received before @end_time.
*/
timed_pop_unlocked(end_time: TimeVal): any | null;
/**
* Pops data from the `queue`. If the queue is empty, blocks for
* `timeout` microseconds, or until data becomes available.
*
* If no data is received before the timeout, %NULL is returned.
* @param timeout the number of microseconds to wait
* @returns data from the queue or %NULL, when no data is received before the timeout.
*/
timeout_pop(timeout: number): any | null;
/**
* Pops data from the `queue`. If the queue is empty, blocks for
* `timeout` microseconds, or until data becomes available.
*
* If no data is received before the timeout, %NULL is returned.
*
* This function must be called while holding the `queue'`s lock.
* @param timeout the number of microseconds to wait
* @returns data from the queue or %NULL, when no data is received before the timeout.
*/
timeout_pop_unlocked(timeout: number): any | null;
/**
* Tries to pop data from the `queue`. If no data is available,
* %NULL is returned.
* @returns data from the queue or %NULL, when no data is available immediately.
*/
try_pop(): any | null;
/**
* Tries to pop data from the `queue`. If no data is available,
* %NULL is returned.
*
* This function must be called while holding the `queue'`s lock.
* @returns data from the queue or %NULL, when no data is available immediately.
*/
try_pop_unlocked(): any | null;
/**
* Releases the queue's lock.
*
* Calling this function when you have not acquired
* the with g_async_queue_lock() leads to undefined
* behaviour.
*/
unlock(): void;
/**
* Decreases the reference count of the asynchronous `queue` by 1.
*
* If the reference count went to 0, the `queue` will be destroyed
* and the memory allocated will be freed. So you are not allowed
* to use the `queue` afterwards, as it might have disappeared.
* You do not need to hold the lock to call this function.
*/
unref(): void;
/**
* Decreases the reference count of the asynchronous `queue` by 1
* and releases the lock. This function must be called while holding
* the `queue'`s lock. If the reference count went to 0, the `queue`
* will be destroyed and the memory allocated will be freed.
*/
unref_and_unlock(): void;
}
/**
* `GBookmarkFile` lets you parse, edit or create files containing bookmarks.
*
* Bookmarks refer to a URI, along with some meta-data about the resource
* pointed by the URI like its MIME type, the application that is registering
* the bookmark and the icon that should be used to represent the bookmark.
* The data is stored using the
* [Desktop Bookmark Specification](https://www.freedesktop.org/wiki/Specifications/desktop-bookmark-spec/).
*
* The syntax of the bookmark files is described in detail inside the
* Desktop Bookmark Specification, here is a quick summary: bookmark
* files use a sub-class of the XML Bookmark Exchange Language
* specification, consisting of valid UTF-8 encoded XML, under the
* `<xbel>` root element; each bookmark is stored inside a
* `<bookmark>` element, using its URI: no relative paths can
* be used inside a bookmark file. The bookmark may have a user defined
* title and description, to be used instead of the URI. Under the
* `<metadata>` element, with its owner attribute set to
* `http://freedesktop.org`, is stored the meta-data about a resource
* pointed by its URI. The meta-data consists of the resource's MIME
* type; the applications that have registered a bookmark; the groups
* to which a bookmark belongs to; a visibility flag, used to set the
* bookmark as "private" to the applications and groups that has it
* registered; the URI and MIME type of an icon, to be used when
* displaying the bookmark inside a GUI.
*
* Here is an example of a bookmark file:
* [bookmarks.xbel](https://gitlab.gnome.org/GNOME/glib/-/blob/HEAD/glib/tests/bookmarks.xbel)
*
* A bookmark file might contain more than one bookmark; each bookmark
* is accessed through its URI.
*
* The important caveat of bookmark files is that when you add a new
* bookmark you must also add the application that is registering it, using
* [method`GLib`.BookmarkFile.add_application] or [method`GLib`.BookmarkFile.set_application_info].
* If a bookmark has no applications then it won't be dumped when creating
* the on disk representation, using [method`GLib`.BookmarkFile.to_data] or
* [method`GLib`.BookmarkFile.to_file].
*/
class BookmarkFile {
static $gtype: GObject.GType<BookmarkFile>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
static ['new'](): BookmarkFile;
// Static methods
static error_quark(): Quark;
// Methods
/**
* Adds the application with `name` and `exec` to the list of
* applications that have registered a bookmark for `uri` into
* `bookmark`.
*
* Every bookmark inside a #GBookmarkFile must have at least an
* application registered. Each application must provide a name, a
* command line useful for launching the bookmark, the number of times
* the bookmark has been registered by the application and the last
* time the application registered this bookmark.
*
* If `name` is %NULL, the name of the application will be the
* same returned by g_get_application_name(); if `exec` is %NULL, the
* command line will be a composition of the program name as
* returned by g_get_prgname() and the "\%u" modifier, which will be
* expanded to the bookmark's URI.
*
* This function will automatically take care of updating the
* registrations count and timestamping in case an application
* with the same `name` had already registered a bookmark for
* `uri` inside `bookmark`.
*
* If no bookmark for `uri` is found, one is created.
* @param uri a valid URI
* @param name the name of the application registering the bookmark or %NULL
* @param exec command line to be used to launch the bookmark or %NULL
*/
add_application(uri: string, name?: string | null, exec?: string | null): void;
/**
* Adds `group` to the list of groups to which the bookmark for `uri`
* belongs to.
*
* If no bookmark for `uri` is found then it is created.
* @param uri a valid URI
* @param group the group name to be added
*/
add_group(uri: string, group: string): void;
/**
* Deeply copies a `bookmark` #GBookmarkFile object to a new one.
* @returns the copy of @bookmark. Use g_bookmark_free() when finished using it.
*/
copy(): BookmarkFile;
/**
* Frees a #GBookmarkFile.
*/
free(): void;
/**
* Gets the time the bookmark for `uri` was added to `bookmark`
*
* In the event the URI cannot be found, -1 is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a timestamp
*/
get_added(uri: string): never;
/**
* Gets the time the bookmark for `uri` was added to `bookmark`
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a #GDateTime
*/
get_added_date_time(uri: string): DateTime;
/**
* Gets the registration information of `app_name` for the bookmark for
* `uri`. See g_bookmark_file_set_application_info() for more information about
* the returned data.
*
* The string returned in `app_exec` must be freed.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND. In the
* event that no application with name `app_name` has registered a bookmark
* for `uri,` %FALSE is returned and error is set to
* %G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED. In the event that unquoting
* the command line fails, an error of the %G_SHELL_ERROR domain is
* set and %FALSE is returned.
* @param uri a valid URI
* @param name an application's name
* @returns %TRUE on success.
*/
get_app_info(uri: string, name: string): [boolean, string, number, never | null];
/**
* Gets the registration information of `app_name` for the bookmark for
* `uri`. See g_bookmark_file_set_application_info() for more information about
* the returned data.
*
* The string returned in `app_exec` must be freed.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND. In the
* event that no application with name `app_name` has registered a bookmark
* for `uri,` %FALSE is returned and error is set to
* %G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED. In the event that unquoting
* the command line fails, an error of the %G_SHELL_ERROR domain is
* set and %FALSE is returned.
* @param uri a valid URI
* @param name an application's name
* @returns %TRUE on success.
*/
get_application_info(uri: string, name: string): [boolean, string, number, DateTime | null];
/**
* Retrieves the names of the applications that have registered the
* bookmark for `uri`.
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a newly allocated %NULL-terminated array of strings. Use g_strfreev() to free it.
*/
get_applications(uri: string): string[];
/**
* Retrieves the description of the bookmark for `uri`.
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a newly allocated string or %NULL if the specified URI cannot be found.
*/
get_description(uri: string): string;
/**
* Retrieves the list of group names of the bookmark for `uri`.
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
*
* The returned array is %NULL terminated, so `length` may optionally
* be %NULL.
* @param uri a valid URI
* @returns a newly allocated %NULL-terminated array of group names. Use g_strfreev() to free it.
*/
get_groups(uri: string): string[];
/**
* Gets the icon of the bookmark for `uri`.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns %TRUE if the icon for the bookmark for the URI was found. You should free the returned strings.
*/
get_icon(uri: string): [boolean, string, string];
/**
* Gets whether the private flag of the bookmark for `uri` is set.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND. In the
* event that the private flag cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_INVALID_VALUE.
* @param uri a valid URI
* @returns %TRUE if the private flag is set, %FALSE otherwise.
*/
get_is_private(uri: string): boolean;
/**
* Retrieves the MIME type of the resource pointed by `uri`.
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND. In the
* event that the MIME type cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_INVALID_VALUE.
* @param uri a valid URI
* @returns a newly allocated string or %NULL if the specified URI cannot be found.
*/
get_mime_type(uri: string): string;
/**
* Gets the time when the bookmark for `uri` was last modified.
*
* In the event the URI cannot be found, -1 is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a timestamp
*/
get_modified(uri: string): never;
/**
* Gets the time when the bookmark for `uri` was last modified.
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a #GDateTime
*/
get_modified_date_time(uri: string): DateTime;
/**
* Gets the number of bookmarks inside `bookmark`.
* @returns the number of bookmarks
*/
get_size(): number;
/**
* Returns the title of the bookmark for `uri`.
*
* If `uri` is %NULL, the title of `bookmark` is returned.
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI or %NULL
* @returns a newly allocated string or %NULL if the specified URI cannot be found.
*/
get_title(uri?: string | null): string;
/**
* Returns all URIs of the bookmarks in the bookmark file `bookmark`.
* The array of returned URIs will be %NULL-terminated, so `length` may
* optionally be %NULL.
* @returns a newly allocated %NULL-terminated array of strings. Use g_strfreev() to free it.
*/
get_uris(): string[];
/**
* Gets the time the bookmark for `uri` was last visited.
*
* In the event the URI cannot be found, -1 is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a timestamp.
*/
get_visited(uri: string): never;
/**
* Gets the time the bookmark for `uri` was last visited.
*
* In the event the URI cannot be found, %NULL is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @returns a #GDateTime
*/
get_visited_date_time(uri: string): DateTime;
/**
* Checks whether the bookmark for `uri` inside `bookmark` has been
* registered by application `name`.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @param name the name of the application
* @returns %TRUE if the application @name was found
*/
has_application(uri: string, name: string): boolean;
/**
* Checks whether `group` appears in the list of groups to which
* the bookmark for `uri` belongs to.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param uri a valid URI
* @param group the group name to be searched
* @returns %TRUE if @group was found.
*/
has_group(uri: string, group: string): boolean;
/**
* Looks whether the desktop bookmark has an item with its URI set to `uri`.
* @param uri a valid URI
* @returns %TRUE if @uri is inside @bookmark, %FALSE otherwise
*/
has_item(uri: string): boolean;
/**
* Loads a bookmark file from memory into an empty #GBookmarkFile
* structure. If the object cannot be created then `error` is set to a
* #GBookmarkFileError.
* @param data desktop bookmarks loaded in memory
* @returns %TRUE if a desktop bookmark could be loaded.
*/
load_from_data(data: Uint8Array | string): boolean;
/**
* This function looks for a desktop bookmark file named `file` in the
* paths returned from g_get_user_data_dir() and g_get_system_data_dirs(),
* loads the file into `bookmark` and returns the file's full path in
* `full_path`. If the file could not be loaded then `error` is
* set to either a #GFileError or #GBookmarkFileError.
* @param file a relative path to a filename to open and parse
* @returns %TRUE if a key file could be loaded, %FALSE otherwise
*/
load_from_data_dirs(file: string): [boolean, string];
/**
* Loads a desktop bookmark file into an empty #GBookmarkFile structure.
* If the file could not be loaded then `error` is set to either a #GFileError
* or #GBookmarkFileError.
* @param filename the path of a filename to load, in the GLib file name encoding
* @returns %TRUE if a desktop bookmark file could be loaded
*/
load_from_file(filename: string): boolean;
/**
* Changes the URI of a bookmark item from `old_uri` to `new_uri`. Any
* existing bookmark for `new_uri` will be overwritten. If `new_uri` is
* %NULL, then the bookmark is removed.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* @param old_uri a valid URI
* @param new_uri a valid URI, or %NULL
* @returns %TRUE if the URI was successfully changed
*/
move_item(old_uri: string, new_uri?: string | null): boolean;
/**
* Removes application registered with `name` from the list of applications
* that have registered a bookmark for `uri` inside `bookmark`.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* In the event that no application with name `app_name` has registered
* a bookmark for `uri,` %FALSE is returned and error is set to
* %G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED.
* @param uri a valid URI
* @param name the name of the application
* @returns %TRUE if the application was successfully removed.
*/
remove_application(uri: string, name: string): boolean;
/**
* Removes `group` from the list of groups to which the bookmark
* for `uri` belongs to.
*
* In the event the URI cannot be found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND.
* In the event no group was defined, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_INVALID_VALUE.
* @param uri a valid URI
* @param group the group name to be removed
* @returns %TRUE if @group was successfully removed.
*/
remove_group(uri: string, group: string): boolean;
/**
* Removes the bookmark for `uri` from the bookmark file `bookmark`.
* @param uri a valid URI
* @returns %TRUE if the bookmark was removed successfully.
*/
remove_item(uri: string): boolean;
/**
* Sets the time the bookmark for `uri` was added into `bookmark`.
*
* If no bookmark for `uri` is found then it is created.
* @param uri a valid URI
* @param added a timestamp or -1 to use the current time
*/
set_added(uri: string, added: never): void;
/**
* Sets the time the bookmark for `uri` was added into `bookmark`.
*
* If no bookmark for `uri` is found then it is created.
* @param uri a valid URI
* @param added a #GDateTime
*/
set_added_date_time(uri: string, added: DateTime): void;
/**
* Sets the meta-data of application `name` inside the list of
* applications that have registered a bookmark for `uri` inside
* `bookmark`.
*
* You should rarely use this function; use g_bookmark_file_add_application()
* and g_bookmark_file_remove_application() instead.
*
* `name` can be any UTF-8 encoded string used to identify an
* application.
* `exec` can have one of these two modifiers: "\%f", which will
* be expanded as the local file name retrieved from the bookmark's
* URI; "\%u", which will be expanded as the bookmark's URI.
* The expansion is done automatically when retrieving the stored
* command line using the g_bookmark_file_get_application_info() function.
* `count` is the number of times the application has registered the
* bookmark; if is < 0, the current registration count will be increased
* by one, if is 0, the application with `name` will be removed from
* the list of registered applications.
* `stamp` is the Unix time of the last registration; if it is -1, the
* current time will be used.
*
* If you try to remove an application by setting its registration count to
* zero, and no bookmark for `uri` is found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND; similarly,
* in the event that no application `name` has registered a bookmark
* for `uri,` %FALSE is returned and error is set to
* %G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED. Otherwise, if no bookmark
* for `uri` is found, one is created.
* @param uri a valid URI
* @param name an application's name
* @param exec an application's command line
* @param count the number of registrations done for this application
* @param stamp the time of the last registration for this application
* @returns %TRUE if the application's meta-data was successfully changed.
*/
set_app_info(uri: string, name: string, exec: string, count: number, stamp: never): boolean;
/**
* Sets the meta-data of application `name` inside the list of
* applications that have registered a bookmark for `uri` inside
* `bookmark`.
*
* You should rarely use this function; use g_bookmark_file_add_application()
* and g_bookmark_file_remove_application() instead.
*
* `name` can be any UTF-8 encoded string used to identify an
* application.
* `exec` can have one of these two modifiers: "\%f", which will
* be expanded as the local file name retrieved from the bookmark's
* URI; "\%u", which will be expanded as the bookmark's URI.
* The expansion is done automatically when retrieving the stored
* command line using the g_bookmark_file_get_application_info() function.
* `count` is the number of times the application has registered the
* bookmark; if is < 0, the current registration count will be increased
* by one, if is 0, the application with `name` will be removed from
* the list of registered applications.
* `stamp` is the Unix time of the last registration.
*
* If you try to remove an application by setting its registration count to
* zero, and no bookmark for `uri` is found, %FALSE is returned and
* `error` is set to %G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND; similarly,
* in the event that no application `name` has registered a bookmark
* for `uri,` %FALSE is returned and error is set to
* %G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED. Otherwise, if no bookmark
* for `uri` is found, one is created.
* @param uri a valid URI
* @param name an application's name
* @param exec an application's command line
* @param count the number of registrations done for this application
* @param stamp the time of the last registration for this application, which may be %NULL if @count is 0
* @returns %TRUE if the application's meta-data was successfully changed.
*/
set_application_info(
uri: string,
name: string,
exec: string,
count: number,
stamp?: DateTime | null,
): boolean;
/**
* Sets `description` as the description of the bookmark for `uri`.
*
* If `uri` is %NULL, the description of `bookmark` is set.
*
* If a bookmark for `uri` cannot be found then it is created.
* @param uri a valid URI or %NULL
* @param description a string
*/
set_description(uri: string | null, description: string): void;
/**
* Sets a list of group names for the item with URI `uri`. Each previously
* set group name list is removed.
*
* If `uri` cannot be found then an item for it is created.
* @param uri an item's URI
* @param groups an array of group names, or %NULL to remove all groups
*/
set_groups(uri: string, groups?: string[] | null): void;
/**
* Sets the icon for the bookmark for `uri`. If `href` is %NULL, unsets
* the currently set icon. `href` can either be a full URL for the icon
* file or the icon name following the Icon Naming specification.
*
* If no bookmark for `uri` is found one is created.
* @param uri a valid URI
* @param href the URI of the icon for the bookmark, or %NULL
* @param mime_type the MIME type of the icon for the bookmark
*/
set_icon(uri: string, href: string | null, mime_type: string): void;
/**
* Sets the private flag of the bookmark for `uri`.
*
* If a bookmark for `uri` cannot be found then it is created.
* @param uri a valid URI
* @param is_private %TRUE if the bookmark should be marked as private
*/
set_is_private(uri: string, is_private: boolean): void;
/**
* Sets `mime_type` as the MIME type of the bookmark for `uri`.
*
* If a bookmark for `uri` cannot be found then it is created.
* @param uri a valid URI
* @param mime_type a MIME type
*/
set_mime_type(uri: string, mime_type: string): void;
/**
* Sets the last time the bookmark for `uri` was last modified.
*
* If no bookmark for `uri` is found then it is created.
*
* The "modified" time should only be set when the bookmark's meta-data
* was actually changed. Every function of #GBookmarkFile that
* modifies a bookmark also changes the modification time, except for
* g_bookmark_file_set_visited_date_time().
* @param uri a valid URI
* @param modified a timestamp or -1 to use the current time
*/
set_modified(uri: string, modified: never): void;
/**
* Sets the last time the bookmark for `uri` was last modified.
*
* If no bookmark for `uri` is found then it is created.
*
* The "modified" time should only be set when the bookmark's meta-data
* was actually changed. Every function of #GBookmarkFile that
* modifies a bookmark also changes the modification time, except for
* g_bookmark_file_set_visited_date_time().
* @param uri a valid URI
* @param modified a #GDateTime
*/
set_modified_date_time(uri: string, modified: DateTime): void;
/**
* Sets `title` as the title of the bookmark for `uri` inside the
* bookmark file `bookmark`.
*
* If `uri` is %NULL, the title of `bookmark` is set.
*
* If a bookmark for `uri` cannot be found then it is created.
* @param uri a valid URI or %NULL
* @param title a UTF-8 encoded string
*/
set_title(uri: string | null, title: string): void;
/**
* Sets the time the bookmark for `uri` was last visited.
*
* If no bookmark for `uri` is found then it is created.
*
* The "visited" time should only be set if the bookmark was launched,
* either using the command line retrieved by g_bookmark_file_get_application_info()
* or by the default application for the bookmark's MIME type, retrieved
* using g_bookmark_file_get_mime_type(). Changing the "visited" time
* does not affect the "modified" time.
* @param uri a valid URI
* @param visited a timestamp or -1 to use the current time
*/
set_visited(uri: string, visited: never): void;
/**
* Sets the time the bookmark for `uri` was last visited.
*
* If no bookmark for `uri` is found then it is created.
*
* The "visited" time should only be set if the bookmark was launched,
* either using the command line retrieved by g_bookmark_file_get_application_info()
* or by the default application for the bookmark's MIME type, retrieved
* using g_bookmark_file_get_mime_type(). Changing the "visited" time
* does not affect the "modified" time.
* @param uri a valid URI
* @param visited a #GDateTime
*/
set_visited_date_time(uri: string, visited: DateTime): void;
/**
* This function outputs `bookmark` as a string.
* @returns a newly allocated string holding the contents of the #GBookmarkFile
*/
to_data(): Uint8Array;
/**
* This function outputs `bookmark` into a file. The write process is
* guaranteed to be atomic by using g_file_set_contents() internally.
* @param filename path of the output file
* @returns %TRUE if the file was successfully written.
*/
to_file(filename: string): boolean;
}
/**
* Contains the public fields of a GByteArray.
*/
class ByteArray {
static $gtype: GObject.GType<ByteArray>;
// Fields
data: number;
len: number;
// Constructors
constructor(
properties?: Partial<{
data: number;
len: number;
}>,
);
_init(...args: any[]): void;
// Static methods
/**
* Adds the given bytes to the end of the #GByteArray.
* The array will grow in size automatically if necessary.
* @param array a #GByteArray
* @param data the byte data to be added
* @param len the number of bytes to add
*/
static append(array: Uint8Array | string, data: number, len: number): Uint8Array;
/**
* Frees the memory allocated by the #GByteArray. If `free_segment` is
* %TRUE it frees the actual byte data. If the reference count of
* `array` is greater than one, the #GByteArray wrapper is preserved but
* the size of `array` will be set to zero.
* @param array a #GByteArray
* @param free_segment if %TRUE the actual byte data is freed as well
*/
static free(array: Uint8Array | string, free_segment: boolean): number;
/**
* Transfers the data from the #GByteArray into a new immutable #GBytes.
*
* The #GByteArray is freed unless the reference count of `array` is greater
* than one, the #GByteArray wrapper is preserved but the size of `array`
* will be set to zero.
*
* This is identical to using g_bytes_new_take() and g_byte_array_free()
* together.
* @param array a #GByteArray
*/
static free_to_bytes(array: Uint8Array | string): Bytes;
/**
* Creates a new #GByteArray with a reference count of 1.
*/
static ['new'](): Uint8Array;
/**
* Creates a byte array containing the `data`.
* After this call, `data` belongs to the #GByteArray and may no longer be
* modified by the caller. The memory of `data` has to be dynamically
* allocated and will eventually be freed with g_free().
*
* Do not use it if `len` is greater than %G_MAXUINT. #GByteArray
* stores the length of its data in #guint, which may be shorter than
* #gsize.
* @param data byte data for the array
*/
static new_take(data: Uint8Array | string): Uint8Array;
/**
* Adds the given data to the start of the #GByteArray.
* The array will grow in size automatically if necessary.
* @param array a #GByteArray
* @param data the byte data to be added
* @param len the number of bytes to add
*/
static prepend(array: Uint8Array | string, data: number, len: number): Uint8Array;
/**
* Atomically increments the reference count of `array` by one.
* This function is thread-safe and may be called from any thread.
* @param array A #GByteArray
*/
static ref(array: Uint8Array | string): Uint8Array;
/**
* Removes the byte at the given index from a #GByteArray.
* The following bytes are moved down one place.
* @param array a #GByteArray
* @param index_ the index of the byte to remove
*/
static remove_index(array: Uint8Array | string, index_: number): Uint8Array;
/**
* Removes the byte at the given index from a #GByteArray. The last
* element in the array is used to fill in the space, so this function
* does not preserve the order of the #GByteArray. But it is faster
* than g_byte_array_remove_index().
* @param array a #GByteArray
* @param index_ the index of the byte to remove
*/
static remove_index_fast(array: Uint8Array | string, index_: number): Uint8Array;
/**
* Removes the given number of bytes starting at the given index from a
* #GByteArray. The following elements are moved to close the gap.
* @param array a @GByteArray
* @param index_ the index of the first byte to remove
* @param length the number of bytes to remove
*/
static remove_range(array: Uint8Array | string, index_: number, length: number): Uint8Array;
/**
* Sets the size of the #GByteArray, expanding it if necessary.
* @param array a #GByteArray
* @param length the new size of the #GByteArray
*/
static set_size(array: Uint8Array | string, length: number): Uint8Array;
/**
* Creates a new #GByteArray with `reserved_size` bytes preallocated.
* This avoids frequent reallocation, if you are going to add many
* bytes to the array. Note however that the size of the array is still
* 0.
* @param reserved_size number of bytes preallocated
*/
static sized_new(reserved_size: number): Uint8Array;
/**
* Sorts a byte array, using `compare_func` which should be a
* qsort()-style comparison function (returns less than zero for first
* arg is less than second arg, zero for equal, greater than zero if
* first arg is greater than second arg).
*
* If two array elements compare equal, their order in the sorted array
* is undefined. If you want equal elements to keep their order (i.e.
* you want a stable sort) you can write a comparison function that,
* if two elements would otherwise compare equal, compares them by
* their addresses.
* @param array a #GByteArray
* @param compare_func comparison function
*/
static sort(array: Uint8Array | string, compare_func: CompareFunc): void;
/**
* Like g_byte_array_sort(), but the comparison function takes an extra
* user data argument.
* @param array a #GByteArray
* @param compare_func comparison function
*/
static sort_with_data(array: Uint8Array | string, compare_func: CompareDataFunc): void;
/**
* Frees the data in the array and resets the size to zero, while
* the underlying array is preserved for use elsewhere and returned
* to the caller.
* @param array a #GByteArray.
*/
static steal(array: Uint8Array | string): [number, number];
/**
* Atomically decrements the reference count of `array` by one. If the
* reference count drops to 0, all memory allocated by the array is
* released. This function is thread-safe and may be called from any
* thread.
* @param array A #GByteArray
*/
static unref(array: Uint8Array | string): void;
}
/**
* A simple reference counted data type representing an immutable sequence of
* zero or more bytes from an unspecified origin.
*
* The purpose of a `GBytes` is to keep the memory region that it holds
* alive for as long as anyone holds a reference to the bytes. When
* the last reference count is dropped, the memory is released. Multiple
* unrelated callers can use byte data in the `GBytes` without coordinating
* their activities, resting assured that the byte data will not change or
* move while they hold a reference.
*
* A `GBytes` can come from many different origins that may have
* different procedures for freeing the memory region. Examples are
* memory from [func`GLib`.malloc], from memory slices, from a
* [struct`GLib`.MappedFile] or memory from other allocators.
*
* `GBytes` work well as keys in [struct`GLib`.HashTable]. Use
* [method`GLib`.Bytes.equal] and [method`GLib`.Bytes.hash] as parameters to
* [func`GLib`.HashTable.new] or [func`GLib`.HashTable.new_full].
* `GBytes` can also be used as keys in a [struct`GLib`.Tree] by passing the
* [method`GLib`.Bytes.compare] function to [ctor`GLib`.Tree.new].
*
* The data pointed to by this bytes must not be modified. For a mutable
* array of bytes see [struct`GLib`.ByteArray]. Use
* [method`GLib`.Bytes.unref_to_array] to create a mutable array for a `GBytes`
* sequence. To create an immutable `GBytes` from a mutable
* [struct`GLib`.ByteArray], use the [func`GLib`.ByteArray.free_to_bytes]
* function.
*/
class Bytes {
static $gtype: GObject.GType<Bytes>;
// Constructors
constructor(data?: Uint8Array | null);
_init(...args: any[]): void;
static ['new'](data?: Uint8Array | null): Bytes;
static new_take(data?: Uint8Array | null): Bytes;
// Methods
/**
* Compares the two [struct`GLib`.Bytes] values.
*
* This function can be used to sort `GBytes` instances in lexicographical
* order.
*
* If `bytes1` and `bytes2` have different length but the shorter one is a
* prefix of the longer one then the shorter one is considered to be less than
* the longer one. Otherwise the first byte where both differ is used for
* comparison. If `bytes1` has a smaller value at that position it is
* considered less, otherwise greater than `bytes2`.
* @param bytes2 a pointer to a [struct@GLib.Bytes] to compare with @bytes1
* @returns a negative value if @bytes1 is less than @bytes2, a positive value if @bytes1 is greater than @bytes2, and zero if @bytes1 is equal to @bytes2
*/
compare(bytes2: Bytes | Uint8Array): number;
/**
* Compares the two [struct`GLib`.Bytes] values being pointed to and returns
* `TRUE` if they are equal.
*
* This function can be passed to [func`GLib`.HashTable.new] as the
* `key_equal_func` parameter, when using non-`NULL` `GBytes` pointers as keys in
* a [struct`GLib`.HashTable].
* @param bytes2 a pointer to a [struct@GLib.Bytes] to compare with @bytes1
* @returns `TRUE` if the two keys match.
*/
equal(bytes2: Bytes | Uint8Array): boolean;
/**
* Get the byte data in the [struct`GLib`.Bytes].
*
* This data should not be modified.
*
* This function will always return the same pointer for a given `GBytes`.
*
* `NULL` may be returned if `size` is 0. This is not guaranteed, as the `GBytes`
* may represent an empty string with `data` non-`NULL` and `size` as 0. `NULL`
* will not be returned if `size` is non-zero.
* @returns a pointer to the byte data
*/
get_data(): Uint8Array | null;
/**
* Gets a pointer to a region in `bytes`.
*
* The region starts at `offset` many bytes from the start of the data
* and contains `n_elements` many elements of `element_size` size.
*
* `n_elements` may be zero, but `element_size` must always be non-zero.
* Ideally, `element_size` is a static constant (eg: `sizeof` a struct).
*
* This function does careful bounds checking (including checking for
* arithmetic overflows) and returns a non-`NULL` pointer if the
* specified region lies entirely within the `bytes`. If the region is
* in some way out of range, or if an overflow has occurred, then `NULL`
* is returned.
*
* Note: it is possible to have a valid zero-size region. In this case,
* the returned pointer will be equal to the base pointer of the data of
* `bytes,` plus `offset`. This will be non-`NULL` except for the case
* where `bytes` itself was a zero-sized region. Since it is unlikely
* that you will be using this function to check for a zero-sized region
* in a zero-sized `bytes,` `NULL` effectively always means error.
* @param element_size a non-zero element size
* @param offset an offset to the start of the region within the @bytes
* @param n_elements the number of elements in the region
* @returns the requested region, or `NULL` in case of an error
*/
get_region(element_size: number, offset: number, n_elements: number): any | null;
/**
* Get the size of the byte data in the [struct`GLib`.Bytes].
*
* This function will always return the same value for a given `GBytes`.
* @returns the size
*/
get_size(): number;
/**
* Creates an integer hash code for the byte data in the [struct`GLib`.Bytes].
*
* This function can be passed to [func`GLib`.HashTable.new] as the
* `key_hash_func` parameter, when using non-`NULL` `GBytes` pointers as keys in
* a [struct`GLib`.HashTable].
* @returns a hash value corresponding to the key.
*/
hash(): number;
/**
* Creates a [struct`GLib`.Bytes] which is a subsection of another `GBytes`.
*
* The `offset` + `length` may not be longer than the size of `bytes`.
*
* A reference to `bytes` will be held by the newly created `GBytes` until
* the byte data is no longer needed.
*
* Since 2.56, if `offset` is 0 and `length` matches the size of `bytes,` then
* `bytes` will be returned with the reference count incremented by 1. If `bytes`
* is a slice of another `GBytes`, then the resulting `GBytes` will reference
* the same `GBytes` instead of `bytes`. This allows consumers to simplify the
* usage of `GBytes` when asynchronously writing to streams.
* @param offset offset which subsection starts at
* @param length length of subsection
* @returns a new [struct@GLib.Bytes]
*/
new_from_bytes(offset: number, length: number): Bytes;
/**
* Increase the reference count on `bytes`.
* @returns the [struct@GLib.Bytes]
*/
ref(): Bytes;
/**
* Releases a reference on `bytes`.
*
* This may result in the bytes being freed. If `bytes` is `NULL`, it will
* return immediately.
*/
unref(): void;
/**
* Unreferences the bytes, and returns a new mutable [struct`GLib`.ByteArray]
* containing the same byte data.
*
* As an optimization, the byte data is transferred to the array without copying
* if this was the last reference to `bytes` and `bytes` was created with
* [ctor`GLib`.Bytes.new], [ctor`GLib`.Bytes.new_take] or
* [func`GLib`.ByteArray.free_to_bytes] and the buffer was larger than the size
* [struct`GLib`.Bytes] may internalize within its allocation. In all other cases
* the data is copied.
*
* Do not use it if `bytes` contains more than %G_MAXUINT
* bytes. [struct`GLib`.ByteArray] stores the length of its data in `guint`,
* which may be shorter than `gsize`, that `bytes` is using.
* @returns a new mutable [struct@GLib.ByteArray] containing the same byte data
*/
unref_to_array(): Uint8Array;
/**
* Unreferences the bytes, and returns a pointer the same byte data
* contents.
*
* As an optimization, the byte data is returned without copying if this was
* the last reference to `bytes` and `bytes` was created with
* [ctor`GLib`.Bytes.new], [ctor`GLib`.Bytes.new_take] or
* [func`GLib`.ByteArray.free_to_bytes] and the buffer was larger than the size
* [struct`GLib`.Bytes] may internalize within its allocation. In all other cases
* the data is copied.
* @returns a pointer to the same byte data, which should be freed with [func@GLib.free]
*/
unref_to_data(): Uint8Array;
toArray(): Uint8Array;
}
/**
* A `GCache` allows sharing of complex data structures, in order to
* save system resources.
*
* `GCache` uses keys and values. A `GCache` key describes the properties
* of a particular resource. A `GCache` value is the actual resource.
*
* `GCache` has been marked as deprecated, since this API is rarely
* used and not very actively maintained.
*/
abstract class Cache {
static $gtype: GObject.GType<Cache>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Frees the memory allocated for the #GCache.
*
* Note that it does not destroy the keys and values which were
* contained in the #GCache.
*/
destroy(): void;
/**
* Gets the value corresponding to the given key, creating it if
* necessary. It first checks if the value already exists in the
* #GCache, by using the `key_equal_func` function passed to
* g_cache_new(). If it does already exist it is returned, and its
* reference count is increased by one. If the value does not currently
* exist, if is created by calling the `value_new_func`. The key is
* duplicated by calling `key_dup_func` and the duplicated key and value
* are inserted into the #GCache.
* @param key a key describing a #GCache object
* @returns a pointer to a #GCache value
*/
insert(key?: any | null): any | null;
/**
* Calls the given function for each of the keys in the #GCache.
*
* NOTE `func` is passed three parameters, the value and key of a cache
* entry and the `user_data`. The order of value and key is different
* from the order in which g_hash_table_foreach() passes key-value
* pairs to its callback function !
* @param func the function to call with each #GCache key
*/
key_foreach(func: HFunc): void;
/**
* Decreases the reference count of the given value. If it drops to 0
* then the value and its corresponding key are destroyed, using the
* `value_destroy_func` and `key_destroy_func` passed to g_cache_new().
* @param value the value to remove
*/
remove(value?: any | null): void;
/**
* Calls the given function for each of the values in the #GCache.
* @param func the function to call with each #GCache value
*/
value_foreach(func: HFunc): void;
}
/**
* GLib provides a generic API for computing checksums (or digests)
* for a sequence of arbitrary bytes, using various hashing algorithms
* like MD5, SHA-1 and SHA-256. Checksums are commonly used in various
* environments and specifications.
*
* To create a new `GChecksum`, use [ctor`GLib`.Checksum.new]. To free
* a `GChecksum`, use [method`GLib`.Checksum.free].
*
* GLib supports incremental checksums using the `GChecksum` data
* structure, by calling [method`GLib`.Checksum.update] as long as theres data
* available and then using [method`GLib`.Checksum.get_string] or
* [method`GLib`.Checksum.get_digest] to compute the checksum and return it
* either as a string in hexadecimal form, or as a raw sequence of bytes. To
* compute the checksum for binary blobs and nul-terminated strings in
* one go, use the convenience functions [func`GLib`.compute_checksum_for_data]
* and [func`GLib`.compute_checksum_for_string], respectively.
*/
class Checksum {
static $gtype: GObject.GType<Checksum>;
// Constructors
constructor(checksum_type: ChecksumType);
_init(...args: any[]): void;
static ['new'](checksum_type: ChecksumType): Checksum;
// Static methods
/**
* Gets the length in bytes of digests of type `checksum_type`
* @param checksum_type a #GChecksumType
*/
static type_get_length(checksum_type: ChecksumType): number;
// Methods
/**
* Copies a #GChecksum. If `checksum` has been closed, by calling
* g_checksum_get_string() or g_checksum_get_digest(), the copied
* checksum will be closed as well.
* @returns the copy of the passed #GChecksum. Use g_checksum_free() when finished using it.
*/
copy(): Checksum;
/**
* Frees the memory allocated for `checksum`.
*/
free(): void;
/**
* Gets the digest as a hexadecimal string.
*
* Once this function has been called the #GChecksum can no longer be
* updated with g_checksum_update().
*
* The hexadecimal characters will be lower case.
* @returns the hexadecimal representation of the checksum. The returned string is owned by the checksum and should not be modified or freed.
*/
get_string(): string;
/**
* Resets the state of the `checksum` back to its initial state.
*/
reset(): void;
/**
* Feeds `data` into an existing #GChecksum. The checksum must still be
* open, that is g_checksum_get_string() or g_checksum_get_digest() must
* not have been called on `checksum`.
* @param data buffer used to compute the checksum
*/
update(data: Uint8Array | string): void;
}
/**
* `GCompletion` provides support for automatic completion of a string
* using any group of target strings. It is typically used for file
* name completion as is common in many UNIX shells.
*
* A `GCompletion` is created using [func`GLib`.Completion.new]. Target items are
* added and removed with [method`GLib`.Completion.add_items],
* [method`GLib`.Completion.remove_items] and
* [method`GLib`.Completion.clear_items]. A completion attempt is requested with
* [method`GLib`.Completion.complete] or [method`GLib`.Completion.complete_utf8].
* When no longer needed, the `GCompletion` is freed with
* [method`GLib`.Completion.free].
*
* Items in the completion can be simple strings (e.g. filenames), or
* pointers to arbitrary data structures. If data structures are used
* you must provide a [type`GLib`.CompletionFunc] in [func`GLib`.Completion.new],
* which retrieves the items string from the data structure. You can change
* the way in which strings are compared by setting a different
* [type`GLib`.CompletionStrncmpFunc] in [method`GLib`.Completion.set_compare].
*
* `GCompletion` has been marked as deprecated, since this API is rarely
* used and not very actively maintained.
*/
class Completion {
static $gtype: GObject.GType<Completion>;
// Fields
items: any[];
func: CompletionFunc;
prefix: string;
cache: any[];
strncmp_func: CompletionStrncmpFunc;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Removes all items from the #GCompletion. The items are not freed, so if the
* memory was dynamically allocated, it should be freed after calling this
* function.
*/
clear_items(): void;
/**
* Attempts to complete the string `prefix` using the #GCompletion target items.
* In contrast to g_completion_complete(), this function returns the largest common
* prefix that is a valid UTF-8 string, omitting a possible common partial
* character.
*
* You should use this function instead of g_completion_complete() if your
* items are UTF-8 strings.
* @param prefix the prefix string, typically used by the user, which is compared with each of the items
* @param new_prefix if non-%NULL, returns the longest prefix which is common to all items that matched @prefix, or %NULL if no items matched @prefix. This string should be freed when no longer needed.
* @returns the list of items whose strings begin with @prefix. This should not be changed.
*/
complete_utf8(prefix: string, new_prefix: string): string[];
/**
* Frees all memory used by the #GCompletion. The items are not freed, so if
* the memory was dynamically allocated, it should be freed after calling this
* function.
*/
free(): void;
}
/**
* The #GCond struct is an opaque data structure that represents a
* condition. Threads can block on a #GCond if they find a certain
* condition to be false. If other threads change the state of this
* condition they signal the #GCond, and that causes the waiting
* threads to be woken up.
*
* Consider the following example of a shared variable. One or more
* threads can wait for data to be published to the variable and when
* another thread publishes the data, it can signal one of the waiting
* threads to wake up to collect the data.
*
* Here is an example for using GCond to block a thread until a condition
* is satisfied:
*
* ```c
* gpointer current_data = NULL;
* GMutex data_mutex;
* GCond data_cond;
*
* void
* push_data (gpointer data)
* {
* g_mutex_lock (&data_mutex);
* current_data = data;
* g_cond_signal (&data_cond);
* g_mutex_unlock (&data_mutex);
* }
*
* gpointer
* pop_data (void)
* {
* gpointer data;
*
* g_mutex_lock (&data_mutex);
* while (!current_data)
* g_cond_wait (&data_cond, &data_mutex);
* data = current_data;
* current_data = NULL;
* g_mutex_unlock (&data_mutex);
*
* return data;
* }
* ```
*
* Whenever a thread calls pop_data() now, it will wait until
* current_data is non-%NULL, i.e. until some other thread
* has called push_data().
*
* The example shows that use of a condition variable must always be
* paired with a mutex. Without the use of a mutex, there would be a
* race between the check of `current_data` by the while loop in
* pop_data() and waiting. Specifically, another thread could set
* `current_data` after the check, and signal the cond (with nobody
* waiting on it) before the first thread goes to sleep. #GCond is
* specifically useful for its ability to release the mutex and go
* to sleep atomically.
*
* It is also important to use the g_cond_wait() and g_cond_wait_until()
* functions only inside a loop which checks for the condition to be
* true. See g_cond_wait() for an explanation of why the condition may
* not be true even after it returns.
*
* If a #GCond is allocated in static storage then it can be used
* without initialisation. Otherwise, you should call g_cond_init()
* on it and g_cond_clear() when done.
*
* A #GCond should only be accessed via the g_cond_ functions.
*/
class Cond {
static $gtype: GObject.GType<Cond>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Methods
/**
* If threads are waiting for `cond,` all of them are unblocked.
* If no threads are waiting for `cond,` this function has no effect.
* It is good practice to lock the same mutex as the waiting threads
* while calling this function, though not required.
*/
broadcast(): void;
/**
* Frees the resources allocated to a #GCond with g_cond_init().
*
* This function should not be used with a #GCond that has been
* statically allocated.
*
* Calling g_cond_clear() for a #GCond on which threads are
* blocking leads to undefined behaviour.
*/
clear(): void;
/**
* Initialises a #GCond so that it can be used.
*
* This function is useful to initialise a #GCond that has been
* allocated as part of a larger structure. It is not necessary to
* initialise a #GCond that has been statically allocated.
*
* To undo the effect of g_cond_init() when a #GCond is no longer
* needed, use g_cond_clear().
*
* Calling g_cond_init() on an already-initialised #GCond leads
* to undefined behaviour.
*/
init(): void;
/**
* If threads are waiting for `cond,` at least one of them is unblocked.
* If no threads are waiting for `cond,` this function has no effect.
* It is good practice to hold the same lock as the waiting thread
* while calling this function, though not required.
*/
signal(): void;
/**
* Atomically releases `mutex` and waits until `cond` is signalled.
* When this function returns, `mutex` is locked again and owned by the
* calling thread.
*
* When using condition variables, it is possible that a spurious wakeup
* may occur (ie: g_cond_wait() returns even though g_cond_signal() was
* not called). It's also possible that a stolen wakeup may occur.
* This is when g_cond_signal() is called, but another thread acquires
* `mutex` before this thread and modifies the state of the program in
* such a way that when g_cond_wait() is able to return, the expected
* condition is no longer met.
*
* For this reason, g_cond_wait() must always be used in a loop. See
* the documentation for #GCond for a complete example.
* @param mutex a #GMutex that is currently locked
*/
wait(mutex: Mutex): void;
/**
* Waits until either `cond` is signalled or `end_time` has passed.
*
* As with g_cond_wait() it is possible that a spurious or stolen wakeup
* could occur. For that reason, waiting on a condition variable should
* always be in a loop, based on an explicitly-checked predicate.
*
* %TRUE is returned if the condition variable was signalled (or in the
* case of a spurious wakeup). %FALSE is returned if `end_time` has
* passed.
*
* The following code shows how to correctly perform a timed wait on a
* condition variable (extending the example presented in the
* documentation for #GCond):
*
*
* ```c
* gpointer
* pop_data_timed (void)
* {
* gint64 end_time;
* gpointer data;
*
* g_mutex_lock (&data_mutex);
*
* end_time = g_get_monotonic_time () + 5 * G_TIME_SPAN_SECOND;
* while (!current_data)
* if (!g_cond_wait_until (&data_cond, &data_mutex, end_time))
* {
* // timeout has passed.
* g_mutex_unlock (&data_mutex);
* return NULL;
* }
*
* // there is data for us
* data = current_data;
* current_data = NULL;
*
* g_mutex_unlock (&data_mutex);
*
* return data;
* }
* ```
*
*
* Notice that the end time is calculated once, before entering the
* loop and reused. This is the motivation behind the use of absolute
* time on this API -- if a relative time of 5 seconds were passed
* directly to the call and a spurious wakeup occurred, the program would
* have to start over waiting again (which would lead to a total wait
* time of more than 5 seconds).
* @param mutex a #GMutex that is currently locked
* @param end_time the monotonic time to wait until
* @returns %TRUE on a signal, %FALSE on a timeout
*/
wait_until(mutex: Mutex, end_time: number): boolean;
}
/**
* An opaque data structure that represents a keyed data list.
*
* See also: [Keyed data lists](datalist-and-dataset.html).
*/
abstract class Data {
static $gtype: GObject.GType<Data>;
// Constructors
_init(...args: any[]): void;
}
/**
* `GDate` is a struct for calendrical calculations.
*
* The `GDate` data structure represents a day between January 1, Year 1,
* and sometime a few thousand years in the future (right now it will go
* to the year 65535 or so, but [method`GLib`.Date.set_parse] only parses up to the
* year 8000 or so - just count on "a few thousand"). `GDate` is meant to
* represent everyday dates, not astronomical dates or historical dates
* or ISO timestamps or the like. It extrapolates the current Gregorian
* calendar forward and backward in time; there is no attempt to change
* the calendar to match time periods or locations. `GDate` does not store
* time information; it represents a day.
*
* The `GDate` implementation has several nice features; it is only a
* 64-bit struct, so storing large numbers of dates is very efficient. It
* can keep both a Julian and day-month-year representation of the date,
* since some calculations are much easier with one representation or the
* other. A Julian representation is simply a count of days since some
* fixed day in the past; for #GDate the fixed day is January 1, 1 AD.
* ("Julian" dates in the #GDate API aren't really Julian dates in the
* technical sense; technically, Julian dates count from the start of the
* Julian period, Jan 1, 4713 BC).
*
* `GDate` is simple to use. First you need a "blank" date; you can get a
* dynamically allocated date from [ctor`GLib`.Date.new], or you can declare an
* automatic variable or array and initialize it by calling [method`GLib`.Date.clear].
* A cleared date is safe; it's safe to call [method`GLib`.Date.set_dmy] and the other
* mutator functions to initialize the value of a cleared date. However, a cleared date
* is initially invalid, meaning that it doesn't represent a day that exists.
* It is undefined to call any of the date calculation routines on an invalid date.
* If you obtain a date from a user or other unpredictable source, you should check
* its validity with the [method`GLib`.Date.valid] predicate. [method`GLib`.Date.valid]
* is also used to check for errors with [method`GLib`.Date.set_parse] and other functions
* that can fail. Dates can be invalidated by calling [method`GLib`.Date.clear] again.
*
* It is very important to use the API to access the `GDate` struct. Often only the
* day-month-year or only the Julian representation is valid. Sometimes neither is valid.
* Use the API.
*
* GLib also features `GDateTime` which represents a precise time.
*/
class Date {
static $gtype: GObject.GType<Date>;
// Fields
julian_days: number;
julian: number;
dmy: number;
day: number;
month: number;
year: number;
// Constructors
constructor(
properties?: Partial<{
julian_days: number;
julian: number;
dmy: number;
day: number;
month: number;
year: number;
}>,
);
_init(...args: any[]): void;
static ['new'](): Date;
static new_dmy(day: DateDay, month: DateMonth, year: DateYear): Date;
static new_julian(julian_day: number): Date;
// Static methods
/**
* Returns the number of days in a month, taking leap
* years into account.
* @param month month
* @param year year
*/
static get_days_in_month(month: DateMonth, year: DateYear): number;
/**
* Returns the number of weeks in the year, where weeks
* are taken to start on Monday. Will be 52 or 53. The
* date must be valid. (Years always have 52 7-day periods,
* plus 1 or 2 extra days depending on whether it's a leap
* year. This function is basically telling you how many
* Mondays are in the year, i.e. there are 53 Mondays if
* one of the extra days happens to be a Monday.)
* @param year a year
*/
static get_monday_weeks_in_year(year: DateYear): number;
/**
* Returns the number of weeks in the year, where weeks
* are taken to start on Sunday. Will be 52 or 53. The
* date must be valid. (Years always have 52 7-day periods,
* plus 1 or 2 extra days depending on whether it's a leap
* year. This function is basically telling you how many
* Sundays are in the year, i.e. there are 53 Sundays if
* one of the extra days happens to be a Sunday.)
* @param year year to count weeks in
*/
static get_sunday_weeks_in_year(year: DateYear): number;
/**
* Returns %TRUE if the year is a leap year.
*
* For the purposes of this function, leap year is every year
* divisible by 4 unless that year is divisible by 100. If it
* is divisible by 100 it would be a leap year only if that year
* is also divisible by 400.
* @param year year to check
*/
static is_leap_year(year: DateYear): boolean;
/**
* Generates a printed representation of the date, in a
* [locale](running.html#locale)-specific way.
* Works just like the platform's C library strftime() function,
* but only accepts date-related formats; time-related formats
* give undefined results. Date must be valid. Unlike strftime()
* (which uses the locale encoding), works on a UTF-8 format
* string and stores a UTF-8 result.
*
* This function does not provide any conversion specifiers in
* addition to those implemented by the platform's C library.
* For example, don't expect that using g_date_strftime() would
* make the \%F provided by the C99 strftime() work on Windows
* where the C library only complies to C89.
* @param s destination buffer
* @param slen buffer size
* @param format format string
* @param date valid #GDate
*/
static strftime(s: string, slen: number, format: string, date: Date): number;
/**
* Returns %TRUE if the day of the month is valid (a day is valid if it's
* between 1 and 31 inclusive).
* @param day day to check
*/
static valid_day(day: DateDay): boolean;
/**
* Returns %TRUE if the day-month-year triplet forms a valid, existing day
* in the range of days #GDate understands (Year 1 or later, no more than
* a few thousand years in the future).
* @param day day
* @param month month
* @param year year
*/
static valid_dmy(day: DateDay, month: DateMonth, year: DateYear): boolean;
/**
* Returns %TRUE if the Julian day is valid. Anything greater than zero
* is basically a valid Julian, though there is a 32-bit limit.
* @param julian_date Julian day to check
*/
static valid_julian(julian_date: number): boolean;
/**
* Returns %TRUE if the month value is valid. The 12 #GDateMonth
* enumeration values are the only valid months.
* @param month month
*/
static valid_month(month: DateMonth): boolean;
/**
* Returns %TRUE if the weekday is valid. The seven #GDateWeekday enumeration
* values are the only valid weekdays.
* @param weekday weekday
*/
static valid_weekday(weekday: DateWeekday): boolean;
/**
* Returns %TRUE if the year is valid. Any year greater than 0 is valid,
* though there is a 16-bit limit to what #GDate will understand.
* @param year year
*/
static valid_year(year: DateYear): boolean;
// Methods
/**
* Increments a date some number of days.
* To move forward by weeks, add weeks*7 days.
* The date must be valid.
* @param n_days number of days to move the date forward
*/
add_days(n_days: number): void;
/**
* Increments a date by some number of months.
* If the day of the month is greater than 28,
* this routine may change the day of the month
* (because the destination month may not have
* the current day in it). The date must be valid.
* @param n_months number of months to move forward
*/
add_months(n_months: number): void;
/**
* Increments a date by some number of years.
* If the date is February 29, and the destination
* year is not a leap year, the date will be changed
* to February 28. The date must be valid.
* @param n_years number of years to move forward
*/
add_years(n_years: number): void;
/**
* If `date` is prior to `min_date,` sets `date` equal to `min_date`.
* If `date` falls after `max_date,` sets `date` equal to `max_date`.
* Otherwise, `date` is unchanged.
* Either of `min_date` and `max_date` may be %NULL.
* All non-%NULL dates must be valid.
* @param min_date minimum accepted value for @date
* @param max_date maximum accepted value for @date
*/
clamp(min_date: Date, max_date: Date): void;
/**
* Initializes one or more #GDate structs to a safe but invalid
* state. The cleared dates will not represent an existing date, but will
* not contain garbage. Useful to init a date declared on the stack.
* Validity can be tested with g_date_valid().
* @param n_dates number of dates to clear
*/
clear(n_dates: number): void;
/**
* qsort()-style comparison function for dates.
* Both dates must be valid.
* @param rhs second date to compare
* @returns 0 for equal, less than zero if @lhs is less than @rhs, greater than zero if @lhs is greater than @rhs
*/
compare(rhs: Date): number;
/**
* Copies a GDate to a newly-allocated GDate. If the input was invalid
* (as determined by g_date_valid()), the invalid state will be copied
* as is into the new object.
* @returns a newly-allocated #GDate initialized from @date
*/
copy(): Date;
/**
* Computes the number of days between two dates.
* If `date2` is prior to `date1`, the returned value is negative.
* Both dates must be valid.
* @param date2 the second date
* @returns the number of days between @date1 and @date2
*/
days_between(date2: Date): number;
/**
* Frees a #GDate returned from g_date_new().
*/
free(): void;
/**
* Returns the day of the month. The date must be valid.
* @returns day of the month
*/
get_day(): DateDay;
/**
* Returns the day of the year, where Jan 1 is the first day of the
* year. The date must be valid.
* @returns day of the year
*/
get_day_of_year(): number;
/**
* Returns the week of the year, where weeks are interpreted according
* to ISO 8601.
* @returns ISO 8601 week number of the year.
*/
get_iso8601_week_of_year(): number;
/**
* Returns the Julian day or "serial number" of the #GDate. The
* Julian day is simply the number of days since January 1, Year 1; i.e.,
* January 1, Year 1 is Julian day 1; January 2, Year 1 is Julian day 2,
* etc. The date must be valid.
* @returns Julian day
*/
get_julian(): number;
/**
* Returns the week of the year, where weeks are understood to start on
* Monday. If the date is before the first Monday of the year, return 0.
* The date must be valid.
* @returns week of the year
*/
get_monday_week_of_year(): number;
/**
* Returns the month of the year. The date must be valid.
* @returns month of the year as a #GDateMonth
*/
get_month(): DateMonth;
/**
* Returns the week of the year during which this date falls, if
* weeks are understood to begin on Sunday. The date must be valid.
* Can return 0 if the day is before the first Sunday of the year.
* @returns week number
*/
get_sunday_week_of_year(): number;
/**
* Returns the day of the week for a #GDate. The date must be valid.
* @returns day of the week as a #GDateWeekday.
*/
get_weekday(): DateWeekday;
/**
* Returns the year of a #GDate. The date must be valid.
* @returns year in which the date falls
*/
get_year(): DateYear;
/**
* Returns %TRUE if the date is on the first of a month.
* The date must be valid.
* @returns %TRUE if the date is the first of the month
*/
is_first_of_month(): boolean;
/**
* Returns %TRUE if the date is the last day of the month.
* The date must be valid.
* @returns %TRUE if the date is the last day of the month
*/
is_last_of_month(): boolean;
/**
* Checks if `date1` is less than or equal to `date2`,
* and swap the values if this is not the case.
* @param date2 the second date
*/
order(date2: Date): void;
/**
* Sets the day of the month for a #GDate. If the resulting
* day-month-year triplet is invalid, the date will be invalid.
* @param day day to set
*/
set_day(day: DateDay): void;
/**
* Sets the value of a #GDate from a day, month, and year.
* The day-month-year triplet must be valid; if you aren't
* sure it is, call g_date_valid_dmy() to check before you
* set it.
* @param day day
* @param month month
* @param y year
*/
set_dmy(day: DateDay, month: DateMonth | null, y: DateYear): void;
/**
* Sets the value of a #GDate from a Julian day number.
* @param julian_date Julian day number (days since January 1, Year 1)
*/
set_julian(julian_date: number): void;
/**
* Sets the month of the year for a #GDate. If the resulting
* day-month-year triplet is invalid, the date will be invalid.
* @param month month to set
*/
set_month(month: DateMonth | null): void;
/**
* Parses a user-inputted string `str,` and try to figure out what date it
* represents, taking the [current locale](running.html#locale)
* into account. If the string is successfully parsed, the date will be
* valid after the call. Otherwise, it will be invalid. You should check
* using g_date_valid() to see whether the parsing succeeded.
*
* This function is not appropriate for file formats and the like; it
* isn't very precise, and its exact behavior varies with the locale.
* It's intended to be a heuristic routine that guesses what the user
* means by a given string (and it does work pretty well in that
* capacity).
* @param str string to parse
*/
set_parse(str: string): void;
/**
* Sets the value of a date from a #GTime value.
* The time to date conversion is done using the user's current timezone.
* @param time_ #GTime value to set.
*/
set_time(time_: Time): void;
/**
* Sets the value of a date to the date corresponding to a time
* specified as a time_t. The time to date conversion is done using
* the user's current timezone.
*
* To set the value of a date to the current day, you could write:
*
* ```c
* time_t now = time (NULL);
* if (now == (time_t) -1)
* // handle the error
* g_date_set_time_t (date, now);
* ```
*
* @param timet time_t value to set
*/
set_time_t(timet: never): void;
/**
* Sets the value of a date from a #GTimeVal value. Note that the
* `tv_usec` member is ignored, because #GDate can't make use of the
* additional precision.
*
* The time to date conversion is done using the user's current timezone.
* @param timeval #GTimeVal value to set
*/
set_time_val(timeval: TimeVal): void;
/**
* Sets the year for a #GDate. If the resulting day-month-year
* triplet is invalid, the date will be invalid.
* @param year year to set
*/
set_year(year: DateYear): void;
/**
* Moves a date some number of days into the past.
* To move by weeks, just move by weeks*7 days.
* The date must be valid.
* @param n_days number of days to move
*/
subtract_days(n_days: number): void;
/**
* Moves a date some number of months into the past.
* If the current day of the month doesn't exist in
* the destination month, the day of the month
* may change. The date must be valid.
* @param n_months number of months to move
*/
subtract_months(n_months: number): void;
/**
* Moves a date some number of years into the past.
* If the current day doesn't exist in the destination
* year (i.e. it's February 29 and you move to a non-leap-year)
* then the day is changed to February 29. The date
* must be valid.
* @param n_years number of years to move
*/
subtract_years(n_years: number): void;
/**
* Fills in the date-related bits of a struct tm using the `date` value.
* Initializes the non-date parts with something safe but meaningless.
* @param tm struct tm to fill
*/
to_struct_tm(tm: any): void;
/**
* Returns %TRUE if the #GDate represents an existing day. The date must not
* contain garbage; it should have been initialized with g_date_clear()
* if it wasn't allocated by one of the g_date_new() variants.
* @returns Whether the date is valid
*/
valid(): boolean;
}
/**
* `GDateTime` is a structure that combines a Gregorian date and time
* into a single structure.
*
* `GDateTime` provides many conversion and methods to manipulate dates and times.
* Time precision is provided down to microseconds and the time can range
* (proleptically) from 0001-01-01 00:00:00 to 9999-12-31 23:59:59.999999.
* `GDateTime` follows POSIX time in the sense that it is oblivious to leap
* seconds.
*
* `GDateTime` is an immutable object; once it has been created it cannot
* be modified further. All modifiers will create a new `GDateTime`.
* Nearly all such functions can fail due to the date or time going out
* of range, in which case %NULL will be returned.
*
* `GDateTime` is reference counted: the reference count is increased by calling
* [method`GLib`.DateTime.ref] and decreased by calling [method`GLib`.DateTime.unref].
* When the reference count drops to 0, the resources allocated by the `GDateTime`
* structure are released.
*
* Many parts of the API may produce non-obvious results. As an
* example, adding two months to January 31st will yield March 31st
* whereas adding one month and then one month again will yield either
* March 28th or March 29th. Also note that adding 24 hours is not
* always the same as adding one day (since days containing daylight
* savings time transitions are either 23 or 25 hours in length).
*/
class DateTime {
static $gtype: GObject.GType<DateTime>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
static ['new'](
tz: TimeZone,
year: number,
month: number,
day: number,
hour: number,
minute: number,
seconds: number,
): DateTime;
static new_from_iso8601(text: string, default_tz?: TimeZone | null): DateTime;
static new_from_timeval_local(tv: TimeVal): DateTime;
static new_from_timeval_utc(tv: TimeVal): DateTime;
static new_from_unix_local(t: number): DateTime;
static new_from_unix_local_usec(usecs: number): DateTime;
static new_from_unix_utc(t: number): DateTime;
static new_from_unix_utc_usec(usecs: number): DateTime;
static new_local(
year: number,
month: number,
day: number,
hour: number,
minute: number,
seconds: number,
): DateTime;
static new_now(tz: TimeZone): DateTime;
static new_now_local(): DateTime;
static new_now_utc(): DateTime;
static new_utc(
year: number,
month: number,
day: number,
hour: number,
minute: number,
seconds: number,
): DateTime;
// Methods
/**
* Creates a copy of `datetime` and adds the specified timespan to the copy.
* @param timespan a #GTimeSpan
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add(timespan: TimeSpan): DateTime | null;
/**
* Creates a copy of `datetime` and adds the specified number of days to the
* copy. Add negative values to subtract days.
* @param days the number of days
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_days(days: number): DateTime | null;
/**
* Creates a new #GDateTime adding the specified values to the current date and
* time in `datetime`. Add negative values to subtract.
* @param years the number of years to add
* @param months the number of months to add
* @param days the number of days to add
* @param hours the number of hours to add
* @param minutes the number of minutes to add
* @param seconds the number of seconds to add
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_full(
years: number,
months: number,
days: number,
hours: number,
minutes: number,
seconds: number,
): DateTime | null;
/**
* Creates a copy of `datetime` and adds the specified number of hours.
* Add negative values to subtract hours.
* @param hours the number of hours to add
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_hours(hours: number): DateTime | null;
/**
* Creates a copy of `datetime` adding the specified number of minutes.
* Add negative values to subtract minutes.
* @param minutes the number of minutes to add
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_minutes(minutes: number): DateTime | null;
/**
* Creates a copy of `datetime` and adds the specified number of months to the
* copy. Add negative values to subtract months.
*
* The day of the month of the resulting #GDateTime is clamped to the number
* of days in the updated calendar month. For example, if adding 1 month to
* 31st January 2018, the result would be 28th February 2018. In 2020 (a leap
* year), the result would be 29th February.
* @param months the number of months
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_months(months: number): DateTime | null;
/**
* Creates a copy of `datetime` and adds the specified number of seconds.
* Add negative values to subtract seconds.
* @param seconds the number of seconds to add
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_seconds(seconds: number): DateTime | null;
/**
* Creates a copy of `datetime` and adds the specified number of weeks to the
* copy. Add negative values to subtract weeks.
* @param weeks the number of weeks
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_weeks(weeks: number): DateTime | null;
/**
* Creates a copy of `datetime` and adds the specified number of years to the
* copy. Add negative values to subtract years.
*
* As with g_date_time_add_months(), if the resulting date would be 29th
* February on a non-leap year, the day will be clamped to 28th February.
* @param years the number of years
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
add_years(years: number): DateTime | null;
/**
* A comparison function for #GDateTimes that is suitable
* as a #GCompareFunc. Both #GDateTimes must be non-%NULL.
* @param dt2 second #GDateTime to compare
* @returns -1, 0 or 1 if @dt1 is less than, equal to or greater than @dt2.
*/
compare(dt2: DateTime): number;
/**
* Calculates the difference in time between `end` and `begin`. The
* #GTimeSpan that is returned is effectively `end` - `begin` (ie:
* positive if the first parameter is larger).
* @param begin a #GDateTime
* @returns the difference between the two #GDateTime, as a time span expressed in microseconds.
*/
difference(begin: DateTime): TimeSpan;
/**
* Checks to see if `dt1` and `dt2` are equal.
*
* Equal here means that they represent the same moment after converting
* them to the same time zone.
* @param dt2 a #GDateTime
* @returns %TRUE if @dt1 and @dt2 are equal
*/
equal(dt2: DateTime): boolean;
/**
* Creates a newly allocated string representing the requested `format`.
*
* The format strings understood by this function are a subset of the
* `strftime()` format language as specified by C99. The `%D`, `%U` and `%W`
* conversions are not supported, nor is the `E` modifier. The GNU
* extensions `%k`, `%l`, `%s` and `%P` are supported, however, as are the
* `0`, `_` and `-` modifiers. The Python extension `%f` is also supported.
*
* In contrast to `strftime()`, this function always produces a UTF-8
* string, regardless of the current locale. Note that the rendering of
* many formats is locale-dependent and may not match the `strftime()`
* output exactly.
*
* The following format specifiers are supported:
*
* - `%a`: the abbreviated weekday name according to the current locale
* - `%A`: the full weekday name according to the current locale
* - `%b`: the abbreviated month name according to the current locale
* - `%B`: the full month name according to the current locale
* - `%c`: the preferred date and time representation for the current locale
* - `%C`: the century number (year/100) as a 2-digit integer (00-99)
* - `%d`: the day of the month as a decimal number (range 01 to 31)
* - `%e`: the day of the month as a decimal number (range 1 to 31);
* single digits are preceded by a figure space (U+2007)
* - `%F`: equivalent to `%Y-%m-%d` (the ISO 8601 date format)
* - `%g`: the last two digits of the ISO 8601 week-based year as a
* decimal number (00-99). This works well with `%V` and `%u`.
* - `%G`: the ISO 8601 week-based year as a decimal number. This works
* well with `%V` and `%u`.
* - `%h`: equivalent to `%b`
* - `%H`: the hour as a decimal number using a 24-hour clock (range 00 to 23)
* - `%I`: the hour as a decimal number using a 12-hour clock (range 01 to 12)
* - `%j`: the day of the year as a decimal number (range 001 to 366)
* - `%k`: the hour (24-hour clock) as a decimal number (range 0 to 23);
* single digits are preceded by a figure space (U+2007)
* - `%l`: the hour (12-hour clock) as a decimal number (range 1 to 12);
* single digits are preceded by a figure space (U+2007)
* - `%m`: the month as a decimal number (range 01 to 12)
* - `%M`: the minute as a decimal number (range 00 to 59)
* - `%f`: the microsecond as a decimal number (range 000000 to 999999)
* - `%p`: either AM or PM according to the given time value, or the
* corresponding strings for the current locale. Noon is treated as
* PM and midnight as AM. Use of this format specifier is discouraged, as
* many locales have no concept of AM/PM formatting. Use `%c` or `%X` instead.
* - `%P`: like `%p` but lowercase: am or pm or a corresponding string for
* the current locale. Use of this format specifier is discouraged, as
* many locales have no concept of AM/PM formatting. Use `%c` or `%X` instead.
* - `%r`: the time in a.m. or p.m. notation. Use of this format specifier is
* discouraged, as many locales have no concept of AM/PM formatting. Use `%c`
* or `%X` instead.
* - `%R`: the time in 24-hour notation (`%H:%M`)
* - `%s`: the number of seconds since the Epoch, that is, since 1970-01-01
* 00:00:00 UTC
* - `%S`: the second as a decimal number (range 00 to 60)
* - `%t`: a tab character
* - `%T`: the time in 24-hour notation with seconds (`%H:%M:%S`)
* - `%u`: the ISO 8601 standard day of the week as a decimal, range 1 to 7,
* Monday being 1. This works well with `%G` and `%V`.
* - `%V`: the ISO 8601 standard week number of the current year as a decimal
* number, range 01 to 53, where week 1 is the first week that has at
* least 4 days in the new year. See g_date_time_get_week_of_year().
* This works well with `%G` and `%u`.
* - `%w`: the day of the week as a decimal, range 0 to 6, Sunday being 0.
* This is not the ISO 8601 standard format — use `%u` instead.
* - `%x`: the preferred date representation for the current locale without
* the time
* - `%X`: the preferred time representation for the current locale without
* the date
* - `%y`: the year as a decimal number without the century
* - `%Y`: the year as a decimal number including the century
* - `%z`: the time zone as an offset from UTC (`+hhmm`)
* - `%:z`: the time zone as an offset from UTC (`+hh:mm`).
* This is a gnulib `strftime()` extension. Since: 2.38
* - `%::z`: the time zone as an offset from UTC (`+hh:mm:ss`). This is a
* gnulib `strftime()` extension. Since: 2.38
* - `%:::z`: the time zone as an offset from UTC, with `:` to necessary
* precision (e.g., `-04`, `+05:30`). This is a gnulib `strftime()` extension. Since: 2.38
* - `%Z`: the time zone or name or abbreviation
* - `%%`: a literal `%` character
*
* Some conversion specifications can be modified by preceding the
* conversion specifier by one or more modifier characters.
*
* The following modifiers are supported for many of the numeric
* conversions:
*
* - `O`: Use alternative numeric symbols, if the current locale supports those.
* - `_`: Pad a numeric result with spaces. This overrides the default padding
* for the specifier.
* - `-`: Do not pad a numeric result. This overrides the default padding
* for the specifier.
* - `0`: Pad a numeric result with zeros. This overrides the default padding
* for the specifier.
*
* The following modifiers are supported for many of the alphabetic conversions:
*
* - `^`: Use upper case if possible. This is a gnulib `strftime()` extension.
* Since: 2.80
* - `#`: Use opposite case if possible. This is a gnulib `strftime()`
* extension. Since: 2.80
*
* Additionally, when `O` is used with `B`, `b`, or `h`, it produces the alternative
* form of a month name. The alternative form should be used when the month
* name is used without a day number (e.g., standalone). It is required in
* some languages (Baltic, Slavic, Greek, and more) due to their grammatical
* rules. For other languages there is no difference. `%OB` is a GNU and BSD
* `strftime()` extension expected to be added to the future POSIX specification,
* `%Ob` and `%Oh` are GNU `strftime()` extensions. Since: 2.56
*
* Since GLib 2.80, when `E` is used with `%c`, `%C`, `%x`, `%X`, `%y` or `%Y`,
* the date is formatted using an alternate era representation specific to the
* locale. This is typically used for the Thai solar calendar or Japanese era
* names, for example.
*
* - `%Ec`: the preferred date and time representation for the current locale,
* using the alternate era representation
* - `%EC`: the name of the era
* - `%Ex`: the preferred date representation for the current locale without
* the time, using the alternate era representation
* - `%EX`: the preferred time representation for the current locale without
* the date, using the alternate era representation
* - `%Ey`: the year since the beginning of the era denoted by the `%EC`
* specifier
* - `%EY`: the full alternative year representation
* @param format a valid UTF-8 string, containing the format for the #GDateTime
* @returns a newly allocated string formatted to the requested format or %NULL in the case that there was an error (such as a format specifier not being supported in the current locale). The string should be freed with g_free().
*/
format(format: string): string | null;
/**
* Format `datetime` in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601),
* including the date, time and time zone, and return that as a UTF-8 encoded
* string.
*
* Since GLib 2.66, this will output to sub-second precision if needed.
* @returns a newly allocated string formatted in ISO 8601 format or %NULL in the case that there was an error. The string should be freed with g_free().
*/
format_iso8601(): string | null;
/**
* Retrieves the day of the month represented by `datetime` in the gregorian
* calendar.
* @returns the day of the month
*/
get_day_of_month(): number;
/**
* Retrieves the ISO 8601 day of the week on which `datetime` falls (1 is
* Monday, 2 is Tuesday... 7 is Sunday).
* @returns the day of the week
*/
get_day_of_week(): number;
/**
* Retrieves the day of the year represented by `datetime` in the Gregorian
* calendar.
* @returns the day of the year
*/
get_day_of_year(): number;
/**
* Retrieves the hour of the day represented by `datetime`
* @returns the hour of the day
*/
get_hour(): number;
/**
* Retrieves the microsecond of the date represented by `datetime`
* @returns the microsecond of the second
*/
get_microsecond(): number;
/**
* Retrieves the minute of the hour represented by `datetime`
* @returns the minute of the hour
*/
get_minute(): number;
/**
* Retrieves the month of the year represented by `datetime` in the Gregorian
* calendar.
* @returns the month represented by @datetime
*/
get_month(): number;
/**
* Retrieves the second of the minute represented by `datetime`
* @returns the second represented by @datetime
*/
get_second(): number;
/**
* Retrieves the number of seconds since the start of the last minute,
* including the fractional part.
* @returns the number of seconds
*/
get_seconds(): number;
/**
* Get the time zone for this `datetime`.
* @returns the time zone
*/
get_timezone(): TimeZone;
/**
* Determines the time zone abbreviation to be used at the time and in
* the time zone of `datetime`.
*
* For example, in Toronto this is currently "EST" during the winter
* months and "EDT" during the summer months when daylight savings
* time is in effect.
* @returns the time zone abbreviation. The returned string is owned by the #GDateTime and it should not be modified or freed
*/
get_timezone_abbreviation(): string;
/**
* Determines the offset to UTC in effect at the time and in the time
* zone of `datetime`.
*
* The offset is the number of microseconds that you add to UTC time to
* arrive at local time for the time zone (ie: negative numbers for time
* zones west of GMT, positive numbers for east).
*
* If `datetime` represents UTC time, then the offset is always zero.
* @returns the number of microseconds that should be added to UTC to get the local time
*/
get_utc_offset(): TimeSpan;
/**
* Returns the ISO 8601 week-numbering year in which the week containing
* `datetime` falls.
*
* This function, taken together with g_date_time_get_week_of_year() and
* g_date_time_get_day_of_week() can be used to determine the full ISO
* week date on which `datetime` falls.
*
* This is usually equal to the normal Gregorian year (as returned by
* g_date_time_get_year()), except as detailed below:
*
* For Thursday, the week-numbering year is always equal to the usual
* calendar year. For other days, the number is such that every day
* within a complete week (Monday to Sunday) is contained within the
* same week-numbering year.
*
* For Monday, Tuesday and Wednesday occurring near the end of the year,
* this may mean that the week-numbering year is one greater than the
* calendar year (so that these days have the same week-numbering year
* as the Thursday occurring early in the next year).
*
* For Friday, Saturday and Sunday occurring near the start of the year,
* this may mean that the week-numbering year is one less than the
* calendar year (so that these days have the same week-numbering year
* as the Thursday occurring late in the previous year).
*
* An equivalent description is that the week-numbering year is equal to
* the calendar year containing the majority of the days in the current
* week (Monday to Sunday).
*
* Note that January 1 0001 in the proleptic Gregorian calendar is a
* Monday, so this function never returns 0.
* @returns the ISO 8601 week-numbering year for @datetime
*/
get_week_numbering_year(): number;
/**
* Returns the ISO 8601 week number for the week containing `datetime`.
* The ISO 8601 week number is the same for every day of the week (from
* Moday through Sunday). That can produce some unusual results
* (described below).
*
* The first week of the year is week 1. This is the week that contains
* the first Thursday of the year. Equivalently, this is the first week
* that has more than 4 of its days falling within the calendar year.
*
* The value 0 is never returned by this function. Days contained
* within a year but occurring before the first ISO 8601 week of that
* year are considered as being contained in the last week of the
* previous year. Similarly, the final days of a calendar year may be
* considered as being part of the first ISO 8601 week of the next year
* if 4 or more days of that week are contained within the new year.
* @returns the ISO 8601 week number for @datetime.
*/
get_week_of_year(): number;
/**
* Retrieves the year represented by `datetime` in the Gregorian calendar.
* @returns the year represented by @datetime
*/
get_year(): number;
/**
* Retrieves the Gregorian day, month, and year of a given #GDateTime.
*/
get_ymd(): [number, number, number];
/**
* Hashes `datetime` into a #guint, suitable for use within #GHashTable.
* @returns a #guint containing the hash
*/
hash(): number;
/**
* Determines if daylight savings time is in effect at the time and in
* the time zone of `datetime`.
* @returns %TRUE if daylight savings time is in effect
*/
is_daylight_savings(): boolean;
/**
* Atomically increments the reference count of `datetime` by one.
* @returns the #GDateTime with the reference count increased
*/
ref(): DateTime;
/**
* Creates a new #GDateTime corresponding to the same instant in time as
* `datetime,` but in the local time zone.
*
* This call is equivalent to calling g_date_time_to_timezone() with the
* time zone returned by g_time_zone_new_local().
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
to_local(): DateTime | null;
/**
* Stores the instant in time that `datetime` represents into `tv`.
*
* The time contained in a #GTimeVal is always stored in the form of
* seconds elapsed since 1970-01-01 00:00:00 UTC, regardless of the time
* zone associated with `datetime`.
*
* On systems where 'long' is 32bit (ie: all 32bit systems and all
* Windows systems), a #GTimeVal is incapable of storing the entire
* range of values that #GDateTime is capable of expressing. On those
* systems, this function returns %FALSE to indicate that the time is
* out of range.
*
* On systems where 'long' is 64bit, this function never fails.
* @param tv a #GTimeVal to modify
* @returns %TRUE if successful, else %FALSE
*/
to_timeval(tv: TimeVal): boolean;
/**
* Create a new #GDateTime corresponding to the same instant in time as
* `datetime,` but in the time zone `tz`.
*
* This call can fail in the case that the time goes out of bounds. For
* example, converting 0001-01-01 00:00:00 UTC to a time zone west of
* Greenwich will fail (due to the year 0 being out of range).
* @param tz the new #GTimeZone
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
to_timezone(tz: TimeZone): DateTime | null;
/**
* Gives the Unix time corresponding to `datetime,` rounding down to the
* nearest second.
*
* Unix time is the number of seconds that have elapsed since 1970-01-01
* 00:00:00 UTC, regardless of the time zone associated with `datetime`.
* @returns the Unix time corresponding to @datetime
*/
to_unix(): number;
/**
* Gives the Unix time corresponding to `datetime,` in microseconds.
*
* Unix time is the number of microseconds that have elapsed since 1970-01-01
* 00:00:00 UTC, regardless of the time zone associated with `datetime`.
* @returns the Unix time corresponding to @datetime
*/
to_unix_usec(): number;
/**
* Creates a new #GDateTime corresponding to the same instant in time as
* `datetime,` but in UTC.
*
* This call is equivalent to calling g_date_time_to_timezone() with the
* time zone returned by g_time_zone_new_utc().
* @returns the newly created #GDateTime which should be freed with g_date_time_unref(), or %NULL
*/
to_utc(): DateTime | null;
/**
* Atomically decrements the reference count of `datetime` by one.
*
* When the reference count reaches zero, the resources allocated by
* `datetime` are freed
*/
unref(): void;
}
/**
* Associates a string with a bit flag.
* Used in g_parse_debug_string().
*/
class DebugKey {
static $gtype: GObject.GType<DebugKey>;
// Fields
key: string;
value: number;
// Constructors
constructor(
properties?: Partial<{
key: string;
value: number;
}>,
);
_init(...args: any[]): void;
}
/**
* An opaque structure representing an opened directory.
*/
class Dir {
static $gtype: GObject.GType<Dir>;
// Constructors
constructor(path: string, flags: number);
_init(...args: any[]): void;
static open(path: string, flags: number): Dir;
// Static methods
/**
* Creates a subdirectory in the preferred directory for temporary
* files (as returned by g_get_tmp_dir()).
*
* `tmpl` should be a string in the GLib file name encoding containing
* a sequence of six 'X' characters, as the parameter to g_mkstemp().
* However, unlike these functions, the template should only be a
* basename, no directory components are allowed. If template is
* %NULL, a default template is used.
*
* Note that in contrast to g_mkdtemp() (and mkdtemp()) `tmpl` is not
* modified, and might thus be a read-only literal string.
* @param tmpl Template for directory name, as in g_mkdtemp(), basename only, or %NULL for a default template
*/
static make_tmp(tmpl?: string | null): string;
// Methods
/**
* Closes the directory immediately and decrements the reference count.
*
* Once the reference count reaches zero, the `GDir` structure itself will be
* freed. Prior to GLib 2.80, `GDir` was not reference counted.
*
* It is an error to call any of the `GDir` methods other than
* [method`GLib`.Dir.ref] and [method`GLib`.Dir.unref] on a `GDir` after calling
* [method`GLib`.Dir.close] on it.
*/
close(): void;
/**
* Retrieves the name of another entry in the directory, or %NULL.
* The order of entries returned from this function is not defined,
* and may vary by file system or other operating-system dependent
* factors.
*
* %NULL may also be returned in case of errors. On Unix, you can
* check `errno` to find out if %NULL was returned because of an error.
*
* On Unix, the '.' and '..' entries are omitted, and the returned
* name is in the on-disk encoding.
*
* On Windows, as is true of all GLib functions which operate on
* filenames, the returned name is in UTF-8.
* @returns The entry's name or %NULL if there are no more entries. The return value is owned by GLib and must not be modified or freed.
*/
read_name(): string;
/**
* Increment the reference count of `dir`.
* @returns the same pointer as `dir`
*/
ref(): Dir;
/**
* Resets the given directory. The next call to g_dir_read_name()
* will return the first entry again.
*/
rewind(): void;
/**
* Decrements the reference count of `dir`.
*
* Once the reference count reaches zero, the directory will be closed and all
* resources associated with it will be freed. If [method`GLib`.Dir.close] is
* called when the reference count is greater than zero, the directory is closed
* but the `GDir` structure will not be freed until its reference count reaches
* zero.
*
* It is an error to call any of the `GDir` methods other than
* [method`GLib`.Dir.ref] and [method`GLib`.Dir.unref] on a `GDir` after calling
* [method`GLib`.Dir.close] on it.
*/
unref(): void;
}
/**
* The `GError` structure contains information about
* an error that has occurred.
*/
class Error {
static $gtype: GObject.GType<Error>;
// Fields
domain: Quark;
code: number;
message: string;
stack: string;
// Constructors
constructor(
properties?: Partial<{
domain: Quark;
code: number;
message: string;
}>,
);
_init(...args: any[]): void;
static new_literal(domain: { new (...args: any[]): Error } | Quark, code: number, message: string): Error;
// Static methods
/**
* This function registers an extended #GError domain.
* `error_type_name` will be duplicated. Otherwise does the same as
* g_error_domain_register_static().
* @param error_type_name string to create a #GQuark from
* @param error_type_private_size size of the private error data in bytes
* @param error_type_init function initializing fields of the private error data
* @param error_type_copy function copying fields of the private error data
* @param error_type_clear function freeing fields of the private error data
*/
static domain_register(
error_type_name: string,
error_type_private_size: number,
error_type_init: ErrorInitFunc,
error_type_copy: ErrorCopyFunc,
error_type_clear: ErrorClearFunc,
): Quark;
/**
* This function registers an extended #GError domain.
*
* `error_type_name` should not be freed. `error_type_private_size` must
* be greater than 0.
*
* `error_type_init` receives an initialized #GError and should then initialize
* the private data.
*
* `error_type_copy` is a function that receives both original and a copy
* #GError and should copy the fields of the private error data. The standard
* #GError fields are already handled.
*
* `error_type_clear` receives the pointer to the error, and it should free the
* fields of the private error data. It should not free the struct itself though.
*
* Normally, it is better to use G_DEFINE_EXTENDED_ERROR(), as it
* already takes care of passing valid information to this function.
* @param error_type_name static string to create a #GQuark from
* @param error_type_private_size size of the private error data in bytes
* @param error_type_init function initializing fields of the private error data
* @param error_type_copy function copying fields of the private error data
* @param error_type_clear function freeing fields of the private error data
*/
static domain_register_static(
error_type_name: string,
error_type_private_size: number,
error_type_init: ErrorInitFunc,
error_type_copy: ErrorCopyFunc,
error_type_clear: ErrorClearFunc,
): Quark;
// Methods
/**
* Makes a copy of `error`.
* @returns a new #GError
*/
copy(): Error;
/**
* Frees a #GError and associated resources.
*/
free(): void;
/**
* Returns %TRUE if `error` matches `domain` and `code,` %FALSE
* otherwise. In particular, when `error` is %NULL, %FALSE will
* be returned.
*
* If `domain` contains a `FAILED` (or otherwise generic) error code,
* you should generally not check for it explicitly, but should
* instead treat any not-explicitly-recognized error code as being
* equivalent to the `FAILED` code. This way, if the domain is
* extended in the future to provide a more specific error code for
* a certain case, your code will still work.
* @param domain an error domain
* @param code an error code
* @returns whether @error has @domain and @code
*/
matches(domain: { new (...args: any[]): Error } | Quark, code: number): boolean;
}
/**
* The #GHashTable struct is an opaque data structure to represent a
* [Hash Table](data-structures.html#hash-tables). It should only be accessed via the
* following functions.
*/
abstract class HashTable<A = string, B = any> {
static $gtype: GObject.GType<HashTable>;
[key: string]: B;
// Static methods
/**
* This is a convenience function for using a #GHashTable as a set. It
* is equivalent to calling g_hash_table_replace() with `key` as both the
* key and the value.
*
* In particular, this means that if `key` already exists in the hash table, then
* the old copy of `key` in the hash table is freed and `key` replaces it in the
* table.
*
* When a hash table only ever contains keys that have themselves as the
* corresponding value it is able to be stored more efficiently. See
* the discussion in the section description.
*
* Starting from GLib 2.40, this function returns a boolean value to
* indicate whether the newly added value was already in the hash table
* or not.
* @param hash_table a #GHashTable
* @param key a key to insert
*/
static add(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): boolean;
/**
* Checks if `key` is in `hash_table`.
* @param hash_table a #GHashTable
* @param key a key to check
*/
static contains(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): boolean;
/**
* Destroys all keys and values in the #GHashTable and decrements its
* reference count by 1. If keys and/or values are dynamically allocated,
* you should either free them first or create the #GHashTable with destroy
* notifiers using g_hash_table_new_full(). In the latter case the destroy
* functions you supplied will be called on all keys and values during the
* destruction phase.
* @param hash_table a #GHashTable
*/
static destroy(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Calls the given function for key/value pairs in the #GHashTable
* until `predicate` returns %TRUE. The function is passed the key
* and value of each pair, and the given `user_data` parameter. The
* hash table may not be modified while iterating over it (you can't
* add/remove items).
*
* Note, that hash tables are really only optimized for forward
* lookups, i.e. g_hash_table_lookup(). So code that frequently issues
* g_hash_table_find() or g_hash_table_foreach() (e.g. in the order of
* once per every entry in a hash table) should probably be reworked
* to use additional or different data structures for reverse lookups
* (keep in mind that an O(n) find/foreach operation issued for all n
* values in a hash table ends up needing O(n*n) operations).
* @param hash_table a #GHashTable
* @param predicate function to test the key/value pairs for a certain property
*/
static find(hash_table: { [key: string]: any } | HashTable<any, any>, predicate: HRFunc): any | null;
/**
* Calls the given function for each of the key/value pairs in the
* #GHashTable. The function is passed the key and value of each
* pair, and the given `user_data` parameter. The hash table may not
* be modified while iterating over it (you can't add/remove
* items). To remove all items matching a predicate, use
* g_hash_table_foreach_remove().
*
* The order in which g_hash_table_foreach() iterates over the keys/values in
* the hash table is not defined.
*
* See g_hash_table_find() for performance caveats for linear
* order searches in contrast to g_hash_table_lookup().
* @param hash_table a #GHashTable
* @param func the function to call for each key/value pair
*/
static foreach(hash_table: { [key: string]: any } | HashTable<any, any>, func: HFunc): void;
/**
* Calls the given function for each key/value pair in the
* #GHashTable. If the function returns %TRUE, then the key/value
* pair is removed from the #GHashTable. If you supplied key or
* value destroy functions when creating the #GHashTable, they are
* used to free the memory allocated for the removed keys and values.
*
* See #GHashTableIter for an alternative way to loop over the
* key/value pairs in the hash table.
* @param hash_table a #GHashTable
* @param func the function to call for each key/value pair
*/
static foreach_remove(hash_table: { [key: string]: any } | HashTable<any, any>, func: HRFunc): number;
/**
* Calls the given function for each key/value pair in the
* #GHashTable. If the function returns %TRUE, then the key/value
* pair is removed from the #GHashTable, but no key or value
* destroy functions are called.
*
* See #GHashTableIter for an alternative way to loop over the
* key/value pairs in the hash table.
* @param hash_table a #GHashTable
* @param func the function to call for each key/value pair
*/
static foreach_steal(hash_table: { [key: string]: any } | HashTable<any, any>, func: HRFunc): number;
/**
* Inserts a new key and value into a #GHashTable.
*
* If the key already exists in the #GHashTable its current
* value is replaced with the new value. If you supplied a
* `value_destroy_func` when creating the #GHashTable, the old
* value is freed using that function. If you supplied a
* `key_destroy_func` when creating the #GHashTable, the passed
* key is freed using that function.
*
* Starting from GLib 2.40, this function returns a boolean value to
* indicate whether the newly added value was already in the hash table
* or not.
* @param hash_table a #GHashTable
* @param key a key to insert
* @param value the value to associate with the key
*/
static insert(
hash_table: { [key: string]: any } | HashTable<any, any>,
key?: any | null,
value?: any | null,
): boolean;
/**
* Looks up a key in a #GHashTable. Note that this function cannot
* distinguish between a key that is not present and one which is present
* and has the value %NULL. If you need this distinction, use
* g_hash_table_lookup_extended().
* @param hash_table a #GHashTable
* @param key the key to look up
*/
static lookup(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): any | null;
/**
* Looks up a key in the #GHashTable, returning the original key and the
* associated value and a #gboolean which is %TRUE if the key was found. This
* is useful if you need to free the memory allocated for the original key,
* for example before calling g_hash_table_remove().
*
* You can actually pass %NULL for `lookup_key` to test
* whether the %NULL key exists, provided the hash and equal functions
* of `hash_table` are %NULL-safe.
* @param hash_table a #GHashTable
* @param lookup_key the key to look up
*/
static lookup_extended(
hash_table: { [key: string]: any } | HashTable<any, any>,
lookup_key: any | null,
): [boolean, any, any];
/**
* Creates a new #GHashTable like g_hash_table_new_full() with a reference
* count of 1.
*
* It inherits the hash function, the key equal function, the key destroy function,
* as well as the value destroy function, from `other_hash_table`.
*
* The returned hash table will be empty; it will not contain the keys
* or values from `other_hash_table`.
* @param other_hash_table Another #GHashTable
*/
static new_similar(other_hash_table: { [key: string]: any } | HashTable<any, any>): HashTable<any, any>;
/**
* Atomically increments the reference count of `hash_table` by one.
* This function is MT-safe and may be called from any thread.
* @param hash_table a valid #GHashTable
*/
static ref(hash_table: { [key: string]: any } | HashTable<any, any>): HashTable<any, any>;
/**
* Removes a key and its associated value from a #GHashTable.
*
* If the #GHashTable was created using g_hash_table_new_full(), the
* key and value are freed using the supplied destroy functions, otherwise
* you have to make sure that any dynamically allocated values are freed
* yourself.
* @param hash_table a #GHashTable
* @param key the key to remove
*/
static remove(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): boolean;
/**
* Removes all keys and their associated values from a #GHashTable.
*
* If the #GHashTable was created using g_hash_table_new_full(),
* the keys and values are freed using the supplied destroy functions,
* otherwise you have to make sure that any dynamically allocated
* values are freed yourself.
* @param hash_table a #GHashTable
*/
static remove_all(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Inserts a new key and value into a #GHashTable similar to
* g_hash_table_insert(). The difference is that if the key
* already exists in the #GHashTable, it gets replaced by the
* new key. If you supplied a `value_destroy_func` when creating
* the #GHashTable, the old value is freed using that function.
* If you supplied a `key_destroy_func` when creating the
* #GHashTable, the old key is freed using that function.
*
* Starting from GLib 2.40, this function returns a boolean value to
* indicate whether the newly added value was already in the hash table
* or not.
* @param hash_table a #GHashTable
* @param key a key to insert
* @param value the value to associate with the key
*/
static replace(
hash_table: { [key: string]: any } | HashTable<any, any>,
key?: any | null,
value?: any | null,
): boolean;
/**
* Returns the number of elements contained in the #GHashTable.
* @param hash_table a #GHashTable
*/
static size(hash_table: { [key: string]: any } | HashTable<any, any>): number;
/**
* Removes a key and its associated value from a #GHashTable without
* calling the key and value destroy functions.
* @param hash_table a #GHashTable
* @param key the key to remove
*/
static steal(hash_table: { [key: string]: any } | HashTable<any, any>, key?: any | null): boolean;
/**
* Removes all keys and their associated values from a #GHashTable
* without calling the key and value destroy functions.
* @param hash_table a #GHashTable
*/
static steal_all(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Looks up a key in the #GHashTable, stealing the original key and the
* associated value and returning %TRUE if the key was found. If the key was
* not found, %FALSE is returned.
*
* If found, the stolen key and value are removed from the hash table without
* calling the key and value destroy functions, and ownership is transferred to
* the caller of this method, as with g_hash_table_steal(). That is the case
* regardless whether `stolen_key` or `stolen_value` output parameters are
* requested.
*
* You can pass %NULL for `lookup_key,` provided the hash and equal functions
* of `hash_table` are %NULL-safe.
*
* The dictionary implementation optimizes for having all values identical to
* their keys, for example by using g_hash_table_add(). Before 2.82, when
* stealing both the key and the value from such a dictionary, the value was
* %NULL. Since 2.82, the returned value and key will be the same.
* @param hash_table a #GHashTable
* @param lookup_key the key to look up
*/
static steal_extended(
hash_table: { [key: string]: any } | HashTable<any, any>,
lookup_key: any | null,
): [boolean, any, any];
/**
* Atomically decrements the reference count of `hash_table` by one.
* If the reference count drops to 0, all keys and values will be
* destroyed, and all memory allocated by the hash table is released.
* This function is MT-safe and may be called from any thread.
* @param hash_table a valid #GHashTable
*/
static unref(hash_table: { [key: string]: any } | HashTable<any, any>): void;
}
/**
* A GHashTableIter structure represents an iterator that can be used
* to iterate over the elements of a #GHashTable. GHashTableIter
* structures are typically allocated on the stack and then initialized
* with g_hash_table_iter_init().
*
* The iteration order of a #GHashTableIter over the keys/values in a hash
* table is not defined.
*/
class HashTableIter {
static $gtype: GObject.GType<HashTableIter>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Methods
/**
* Returns the #GHashTable associated with `iter`.
* @returns the #GHashTable associated with @iter.
*/
get_hash_table(): HashTable<any, any>;
/**
* Initializes a key/value pair iterator and associates it with
* `hash_table`. Modifying the hash table after calling this function
* invalidates the returned iterator.
*
* The iteration order of a #GHashTableIter over the keys/values in a hash
* table is not defined.
*
*
* ```c
* GHashTableIter iter;
* gpointer key, value;
*
* g_hash_table_iter_init (&iter, hash_table);
* while (g_hash_table_iter_next (&iter, &key, &value))
* {
* // do something with key and value
* }
* ```
*
* @param hash_table a #GHashTable
*/
init(hash_table: { [key: string]: any } | HashTable<any, any>): void;
/**
* Advances `iter` and retrieves the key and/or value that are now
* pointed to as a result of this advancement. If %FALSE is returned,
* `key` and `value` are not set, and the iterator becomes invalid.
* @returns %FALSE if the end of the #GHashTable has been reached.
*/
next(): [boolean, any, any];
/**
* Removes the key/value pair currently pointed to by the iterator
* from its associated #GHashTable. Can only be called after
* g_hash_table_iter_next() returned %TRUE, and cannot be called
* more than once for the same key/value pair.
*
* If the #GHashTable was created using g_hash_table_new_full(),
* the key and value are freed using the supplied destroy functions,
* otherwise you have to make sure that any dynamically allocated
* values are freed yourself.
*
* It is safe to continue iterating the #GHashTable afterward:
*
* ```c
* while (g_hash_table_iter_next (&iter, &key, &value))
* {
* if (condition)
* g_hash_table_iter_remove (&iter);
* }
* ```
*
*/
remove(): void;
/**
* Replaces the value currently pointed to by the iterator
* from its associated #GHashTable. Can only be called after
* g_hash_table_iter_next() returned %TRUE.
*
* If you supplied a `value_destroy_func` when creating the
* #GHashTable, the old value is freed using that function.
* @param value the value to replace with
*/
replace(value?: any | null): void;
/**
* Removes the key/value pair currently pointed to by the
* iterator from its associated #GHashTable, without calling
* the key and value destroy functions. Can only be called
* after g_hash_table_iter_next() returned %TRUE, and cannot
* be called more than once for the same key/value pair.
*/
steal(): void;
}
/**
* HMACs should be used when producing a cookie or hash based on data
* and a key. Simple mechanisms for using SHA1 and other algorithms to
* digest a key and data together are vulnerable to various security
* issues.
* [HMAC](http://en.wikipedia.org/wiki/HMAC)
* uses algorithms like SHA1 in a secure way to produce a digest of a
* key and data.
*
* Both the key and data are arbitrary byte arrays of bytes or characters.
*
* Support for HMAC Digests has been added in GLib 2.30, and support for SHA-512
* in GLib 2.42. Support for SHA-384 was added in GLib 2.52.
*
* To create a new `GHmac`, use [ctor`GLib`.Hmac.new]. To free a `GHmac`, use
* [method`GLib`.Hmac.unref].
*/
class Hmac {
static $gtype: GObject.GType<Hmac>;
// Constructors
constructor(digest_type: ChecksumType, key: Uint8Array | string);
_init(...args: any[]): void;
static ['new'](digest_type: ChecksumType, key: Uint8Array | string): Hmac;
// Methods
/**
* Copies a #GHmac. If `hmac` has been closed, by calling
* g_hmac_get_string() or g_hmac_get_digest(), the copied
* HMAC will be closed as well.
* @returns the copy of the passed #GHmac. Use g_hmac_unref() when finished using it.
*/
copy(): Hmac;
/**
* Gets the digest from `checksum` as a raw binary array and places it
* into `buffer`. The size of the digest depends on the type of checksum.
*
* Once this function has been called, the #GHmac is closed and can
* no longer be updated with g_checksum_update().
* @param buffer output buffer
*/
get_digest(buffer: Uint8Array | string): void;
/**
* Gets the HMAC as a hexadecimal string.
*
* Once this function has been called the #GHmac can no longer be
* updated with g_hmac_update().
*
* The hexadecimal characters will be lower case.
* @returns the hexadecimal representation of the HMAC. The returned string is owned by the HMAC and should not be modified or freed.
*/
get_string(): string;
/**
* Atomically increments the reference count of `hmac` by one.
*
* This function is MT-safe and may be called from any thread.
* @returns the passed in #GHmac.
*/
ref(): Hmac;
/**
* Atomically decrements the reference count of `hmac` by one.
*
* If the reference count drops to 0, all keys and values will be
* destroyed, and all memory allocated by the hash table is released.
* This function is MT-safe and may be called from any thread.
* Frees the memory allocated for `hmac`.
*/
unref(): void;
/**
* Feeds `data` into an existing #GHmac.
*
* The HMAC must still be open, that is g_hmac_get_string() or
* g_hmac_get_digest() must not have been called on `hmac`.
* @param data buffer used to compute the checksum
*/
update(data: Uint8Array | string): void;
}
/**
* The #GHook struct represents a single hook function in a #GHookList.
*/
class Hook {
static $gtype: GObject.GType<Hook>;
// Fields
data: any;
ref_count: number;
hook_id: number;
flags: number;
func: any;
destroy: DestroyNotify;
// Constructors
_init(...args: any[]): void;
// Static methods
/**
* Removes one #GHook from a #GHookList, marking it
* inactive and calling g_hook_unref() on it.
* @param hook_list a #GHookList
* @param hook the #GHook to remove
*/
static destroy_link(hook_list: HookList, hook: Hook): void;
/**
* Calls the #GHookList `finalize_hook` function if it exists,
* and frees the memory allocated for the #GHook.
* @param hook_list a #GHookList
* @param hook the #GHook to free
*/
static free(hook_list: HookList, hook: Hook): void;
/**
* Inserts a #GHook into a #GHookList, before a given #GHook.
* @param hook_list a #GHookList
* @param sibling the #GHook to insert the new #GHook before
* @param hook the #GHook to insert
*/
static insert_before(hook_list: HookList, sibling: Hook | null, hook: Hook): void;
/**
* Inserts a #GHook into a #GHookList, sorted by the given function.
* @param hook_list a #GHookList
* @param hook the #GHook to insert
* @param func the comparison function used to sort the #GHook elements
*/
static insert_sorted(hook_list: HookList, hook: Hook, func: HookCompareFunc): void;
/**
* Prepends a #GHook on the start of a #GHookList.
* @param hook_list a #GHookList
* @param hook the #GHook to add to the start of @hook_list
*/
static prepend(hook_list: HookList, hook: Hook): void;
/**
* Decrements the reference count of a #GHook.
* If the reference count falls to 0, the #GHook is removed
* from the #GHookList and g_hook_free() is called to free it.
* @param hook_list a #GHookList
* @param hook the #GHook to unref
*/
static unref(hook_list: HookList, hook: Hook): void;
// Methods
/**
* Compares the ids of two #GHook elements, returning a negative value
* if the second id is greater than the first.
* @param sibling a #GHook to compare with @new_hook
* @returns a value <= 0 if the id of @sibling is >= the id of @new_hook
*/
compare_ids(sibling: Hook): number;
}
/**
* The #GHookList struct represents a list of hook functions.
*/
class HookList {
static $gtype: GObject.GType<HookList>;
// Fields
seq_id: number;
hook_size: number;
is_setup: number;
dummy3: any;
finalize_hook: HookFinalizeFunc;
dummy: any[];
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Removes all the #GHook elements from a #GHookList.
*/
clear(): void;
/**
* Initializes a #GHookList.
* This must be called before the #GHookList is used.
* @param hook_size the size of each element in the #GHookList, typically `sizeof (GHook)`.
*/
init(hook_size: number): void;
/**
* Calls all of the #GHook functions in a #GHookList.
* @param may_recurse %TRUE if functions which are already running (e.g. in another thread) can be called. If set to %FALSE, these are skipped
*/
invoke(may_recurse: boolean): void;
/**
* Calls all of the #GHook functions in a #GHookList.
* Any function which returns %FALSE is removed from the #GHookList.
* @param may_recurse %TRUE if functions which are already running (e.g. in another thread) can be called. If set to %FALSE, these are skipped
*/
invoke_check(may_recurse: boolean): void;
/**
* Calls a function on each valid #GHook.
* @param may_recurse %TRUE if hooks which are currently running (e.g. in another thread) are considered valid. If set to %FALSE, these are skipped
* @param marshaller the function to call for each #GHook
*/
marshal(may_recurse: boolean, marshaller: HookMarshaller): void;
/**
* Calls a function on each valid #GHook and destroys it if the
* function returns %FALSE.
* @param may_recurse %TRUE if hooks which are currently running (e.g. in another thread) are considered valid. If set to %FALSE, these are skipped
* @param marshaller the function to call for each #GHook
*/
marshal_check(may_recurse: boolean, marshaller: HookCheckMarshaller): void;
}
/**
* The `GIOChannel` data type aims to provide a portable method for
* using file descriptors, pipes, and sockets, and integrating them
* into the main event loop (see [struct`GLib`.MainContext]). Currently,
* full support is available on UNIX platforms; support for Windows
* is only partially complete.
*
* To create a new `GIOChannel` on UNIX systems use
* [ctor`GLib`.IOChannel.unix_new]. This works for plain file descriptors,
* pipes and sockets. Alternatively, a channel can be created for a
* file in a system independent manner using [ctor`GLib`.IOChannel.new_file].
*
* Once a `GIOChannel` has been created, it can be used in a generic
* manner with the functions [method`GLib`.IOChannel.read_chars],
* [method`GLib`.IOChannel.write_chars], [method`GLib`.IOChannel.seek_position],
* and [method`GLib`.IOChannel.shutdown].
*
* To add a `GIOChannel` to the main event loop, use [func`GLib`.io_add_watch] or
* [func`GLib`.io_add_watch_full]. Here you specify which events you are
* interested in on the `GIOChannel`, and provide a function to be called
* whenever these events occur.
*
* `GIOChannel` instances are created with an initial reference count of 1.
* [method`GLib`.IOChannel.ref] and [method`GLib`.IOChannel.unref] can be used to
* increment or decrement the reference count respectively. When the
* reference count falls to 0, the `GIOChannel` is freed. (Though it
* isnt closed automatically, unless it was created using
* [ctor`GLib`.IOChannel.new_file].) Using [func`GLib`.io_add_watch] or
* [func`GLib`.io_add_watch_full] increments a channels reference count.
*
* The new functions [method`GLib`.IOChannel.read_chars],
* [method`GLib`.IOChannel.read_line], [method`GLib`.IOChannel.read_line_string],
* [method`GLib`.IOChannel.read_to_end], [method`GLib`.IOChannel.write_chars],
* [method`GLib`.IOChannel.seek_position], and [method`GLib`.IOChannel.flush]
* should not be mixed with the deprecated functions
* [method`GLib`.IOChannel.read], [method`GLib`.IOChannel.write], and
* [method`GLib`.IOChannel.seek] on the same channel.
*/
class IOChannel {
static $gtype: GObject.GType<IOChannel>;
// Constructors
constructor(filename: string, mode: string);
_init(...args: any[]): void;
static new_file(filename: string, mode: string): IOChannel;
static unix_new(fd: number): IOChannel;
// Static methods
/**
* Converts an `errno` error number to a #GIOChannelError.
* @param en an `errno` error number, e.g. `EINVAL`
*/
static error_from_errno(en: number): IOChannelError;
static error_quark(): Quark;
// Methods
/**
* Close an IO channel. Any pending data to be written will be
* flushed, ignoring errors. The channel will not be freed until the
* last reference is dropped using g_io_channel_unref().
*/
close(): void;
/**
* Flushes the write buffer for the GIOChannel.
* @returns the status of the operation: One of %G_IO_STATUS_NORMAL, %G_IO_STATUS_AGAIN, or %G_IO_STATUS_ERROR.
*/
flush(): IOStatus;
/**
* This function returns a #GIOCondition depending on whether there
* is data to be read/space to write data in the internal buffers in
* the #GIOChannel. Only the flags %G_IO_IN and %G_IO_OUT may be set.
* @returns A #GIOCondition
*/
get_buffer_condition(): IOCondition;
/**
* Gets the buffer size.
* @returns the size of the buffer.
*/
get_buffer_size(): number;
/**
* Returns whether `channel` is buffered.
* @returns %TRUE if the @channel is buffered.
*/
get_buffered(): boolean;
/**
* Returns whether the file/socket/whatever associated with `channel`
* will be closed when `channel` receives its final unref and is
* destroyed. The default value of this is %TRUE for channels created
* by g_io_channel_new_file (), and %FALSE for all other channels.
* @returns %TRUE if the channel will be closed, %FALSE otherwise.
*/
get_close_on_unref(): boolean;
/**
* Gets the encoding for the input/output of the channel.
* The internal encoding is always UTF-8. The encoding %NULL
* makes the channel safe for binary data.
* @returns A string containing the encoding, this string is owned by GLib and must not be freed.
*/
get_encoding(): string;
/**
* Gets the current flags for a #GIOChannel, including read-only
* flags such as %G_IO_FLAG_IS_READABLE.
*
* The values of the flags %G_IO_FLAG_IS_READABLE and %G_IO_FLAG_IS_WRITABLE
* are cached for internal use by the channel when it is created.
* If they should change at some later point (e.g. partial shutdown
* of a socket with the UNIX shutdown() function), the user
* should immediately call g_io_channel_get_flags() to update
* the internal values of these flags.
* @returns the flags which are set on the channel
*/
get_flags(): IOFlags;
/**
* This returns the string that #GIOChannel uses to determine
* where in the file a line break occurs. A value of %NULL
* indicates autodetection. Since 2.84, the return value is always
* nul-terminated.
* @returns The line termination string. This value is owned by GLib and must not be freed.
*/
get_line_term(): [string, number];
/**
* Initializes a #GIOChannel struct.
*
* This is called by each of the above functions when creating a
* #GIOChannel, and so is not often needed by the application
* programmer (unless you are creating a new type of #GIOChannel).
*/
init(): void;
/**
* Reads data from a #GIOChannel.
* @param buf a buffer to read the data into (which should be at least count bytes long)
* @param count the number of bytes to read from the #GIOChannel
* @param bytes_read returns the number of bytes actually read
* @returns %G_IO_ERROR_NONE if the operation was successful.
*/
read(buf: string, count: number, bytes_read: number): IOError;
/**
* Replacement for g_io_channel_read() with the new API.
* @returns the status of the operation.
*/
read_chars(): [IOStatus, Uint8Array, number];
/**
* Reads a line, including the terminating character(s),
* from a #GIOChannel into a newly-allocated string.
* `str_return` will contain allocated memory if the return
* is %G_IO_STATUS_NORMAL.
* @returns the status of the operation.
*/
read_line(): [IOStatus, string, number, number];
/**
* Reads a line from a #GIOChannel, using a #GString as a buffer.
* @param buffer a #GString into which the line will be written. If @buffer already contains data, the old data will be overwritten.
* @param terminator_pos location to store position of line terminator, or %NULL
* @returns the status of the operation.
*/
read_line_string(buffer: String, terminator_pos?: number | null): IOStatus;
/**
* Reads all the remaining data from the file.
* @returns %G_IO_STATUS_NORMAL on success. This function never returns %G_IO_STATUS_EOF.
*/
read_to_end(): [IOStatus, Uint8Array];
/**
* Reads a Unicode character from `channel`.
* This function cannot be called on a channel with %NULL encoding.
* @returns a #GIOStatus
*/
read_unichar(): [IOStatus, number];
/**
* Increments the reference count of a #GIOChannel.
* @returns the @channel that was passed in (since 2.6)
*/
ref(): IOChannel;
/**
* Sets the current position in the #GIOChannel, similar to the standard
* library function fseek().
* @param offset an offset, in bytes, which is added to the position specified by @type
* @param type the position in the file, which can be %G_SEEK_CUR (the current position), %G_SEEK_SET (the start of the file), or %G_SEEK_END (the end of the file)
* @returns %G_IO_ERROR_NONE if the operation was successful.
*/
seek(offset: number, type: SeekType | null): IOError;
/**
* Replacement for g_io_channel_seek() with the new API.
* @param offset The offset in bytes from the position specified by @type
* @param type a #GSeekType. The type %G_SEEK_CUR is only allowed in those cases where a call to g_io_channel_set_encoding () is allowed. See the documentation for g_io_channel_set_encoding () for details.
* @returns the status of the operation.
*/
seek_position(offset: number, type: SeekType | null): IOStatus;
/**
* Sets the buffer size.
* @param size the size of the buffer, or 0 to let GLib pick a good size
*/
set_buffer_size(size: number): void;
/**
* The buffering state can only be set if the channel's encoding
* is %NULL. For any other encoding, the channel must be buffered.
*
* A buffered channel can only be set unbuffered if the channel's
* internal buffers have been flushed. Newly created channels or
* channels which have returned %G_IO_STATUS_EOF
* not require such a flush. For write-only channels, a call to
* g_io_channel_flush () is sufficient. For all other channels,
* the buffers may be flushed by a call to g_io_channel_seek_position ().
* This includes the possibility of seeking with seek type %G_SEEK_CUR
* and an offset of zero. Note that this means that socket-based
* channels cannot be set unbuffered once they have had data
* read from them.
*
* On unbuffered channels, it is safe to mix read and write
* calls from the new and old APIs, if this is necessary for
* maintaining old code.
*
* The default state of the channel is buffered.
* @param buffered whether to set the channel buffered or unbuffered
*/
set_buffered(buffered: boolean): void;
/**
* Whether to close the channel on the final unref of the #GIOChannel
* data structure. The default value of this is %TRUE for channels
* created by g_io_channel_new_file (), and %FALSE for all other channels.
*
* Setting this flag to %TRUE for a channel you have already closed
* can cause problems when the final reference to the #GIOChannel is dropped.
* @param do_close Whether to close the channel on the final unref of the GIOChannel data structure.
*/
set_close_on_unref(do_close: boolean): void;
/**
* Sets the encoding for the input/output of the channel.
* The internal encoding is always UTF-8. The default encoding
* for the external file is UTF-8.
*
* The encoding %NULL is safe to use with binary data.
*
* The encoding can only be set if one of the following conditions
* is true:
*
* - The channel was just created, and has not been written to or read from yet.
*
* - The channel is write-only.
*
* - The channel is a file, and the file pointer was just repositioned
* by a call to g_io_channel_seek_position(). (This flushes all the
* internal buffers.)
*
* - The current encoding is %NULL or UTF-8.
*
* - One of the (new API) read functions has just returned %G_IO_STATUS_EOF
* (or, in the case of g_io_channel_read_to_end(), %G_IO_STATUS_NORMAL).
*
* - One of the functions g_io_channel_read_chars() or
* g_io_channel_read_unichar() has returned %G_IO_STATUS_AGAIN or
* %G_IO_STATUS_ERROR. This may be useful in the case of
* %G_CONVERT_ERROR_ILLEGAL_SEQUENCE.
* Returning one of these statuses from g_io_channel_read_line(),
* g_io_channel_read_line_string(), or g_io_channel_read_to_end()
* does not guarantee that the encoding can be changed.
*
* Channels which do not meet one of the above conditions cannot call
* g_io_channel_seek_position() with an offset of %G_SEEK_CUR, and, if
* they are "seekable", cannot call g_io_channel_write_chars() after
* calling one of the API "read" functions.
* @param encoding the encoding type
* @returns %G_IO_STATUS_NORMAL if the encoding was successfully set
*/
set_encoding(encoding?: string | null): IOStatus;
/**
* Sets the (writeable) flags in `channel` to (`flags` & %G_IO_FLAG_SET_MASK).
* @param flags the flags to set on the IO channel
* @returns the status of the operation.
*/
set_flags(flags: IOFlags | null): IOStatus;
/**
* This sets the string that #GIOChannel uses to determine
* where in the file a line break occurs.
* @param line_term The line termination string. Use %NULL for autodetect. Autodetection breaks on "\n", "\r\n", "\r", "\0", and the Unicode paragraph separator. Autodetection should not be used for anything other than file-based channels.
* @param length The length of the termination string. If -1 is passed, the string is assumed to be nul-terminated. This option allows termination strings with embedded nuls.
*/
set_line_term(line_term: string | null, length: number): void;
/**
* Close an IO channel. Any pending data to be written will be
* flushed if `flush` is %TRUE. The channel will not be freed until the
* last reference is dropped using g_io_channel_unref().
* @param flush if %TRUE, flush pending
* @returns the status of the operation.
*/
shutdown(flush: boolean): IOStatus;
/**
* Returns the file descriptor of the #GIOChannel.
*
* On Windows this function returns the file descriptor or socket of
* the #GIOChannel.
* @returns the file descriptor of the #GIOChannel.
*/
unix_get_fd(): number;
/**
* Decrements the reference count of a #GIOChannel.
*/
unref(): void;
/**
* Writes data to a #GIOChannel.
* @param buf the buffer containing the data to write
* @param count the number of bytes to write
* @param bytes_written the number of bytes actually written
* @returns %G_IO_ERROR_NONE if the operation was successful.
*/
write(buf: string, count: number, bytes_written: number): IOError;
/**
* Replacement for g_io_channel_write() with the new API.
*
* On seekable channels with encodings other than %NULL or UTF-8, generic
* mixing of reading and writing is not allowed. A call to g_io_channel_write_chars ()
* may only be made on a channel from which data has been read in the
* cases described in the documentation for g_io_channel_set_encoding ().
* @param buf a buffer to write data from
* @param count the size of the buffer. If -1, the buffer is taken to be a nul-terminated string.
* @returns the status of the operation.
*/
write_chars(buf: Uint8Array | string, count: number): [IOStatus, number];
/**
* Writes a Unicode character to `channel`.
* This function cannot be called on a channel with %NULL encoding.
* @param thechar a character
* @returns a #GIOStatus
*/
write_unichar(thechar: number): IOStatus;
}
/**
* A table of functions used to handle different types of #GIOChannel
* in a generic way.
*/
class IOFuncs {
static $gtype: GObject.GType<IOFuncs>;
// Constructors
_init(...args: any[]): void;
}
/**
* `GKeyFile` parses .ini-like config files.
*
* `GKeyFile` lets you parse, edit or create files containing groups of
* key-value pairs, which we call key files for lack of a better name.
* Several freedesktop.org specifications use key files. For example, the
* [Desktop Entry Specification](https://specifications.freedesktop.org/desktop-entry-spec/latest/)
* and the [Icon Theme Specification](https://specifications.freedesktop.org/icon-theme-spec/latest/).
*
* The syntax of key files is described in detail in the
* [Desktop Entry Specification](https://specifications.freedesktop.org/desktop-entry-spec/latest/),
* here is a quick summary: Key files consists of groups of key-value pairs, interspersed
* with comments.
*
* ```txt
* # this is just an example
* # there can be comments before the first group
*
* [First Group]
*
* Name=Key File Example\tthis value shows\nescaping
*
* # localized strings are stored in multiple key-value pairs
* Welcome=Hello
* Welcome[de]=Hallo
* Welcome[fr_FR]=Bonjour
* Welcome[it]=Ciao
*
* [Another Group]
*
* Numbers=2;20;-200;0
*
* Booleans=true;false;true;true
* ```
*
* Lines beginning with a `#` and blank lines are considered comments.
*
* Groups are started by a header line containing the group name enclosed
* in `[` and `]`, and ended implicitly by the start of the next group or
* the end of the file. Each key-value pair must be contained in a group.
*
* Key-value pairs generally have the form `key=value`, with the exception
* of localized strings, which have the form `key[locale]=value`, with a
* locale identifier of the form `lang_COUNTRY`MODIFIER`` where `COUNTRY`
* and `MODIFIER` are optional. As a special case, the locale `C` is associated
* with the untranslated pair `key=value` (since GLib 2.84). Space before and
* after the `=` character is ignored. Newline, tab, carriage return and
* backslash characters in value are escaped as `\n`, `\t`, `\r`, and `\\\\`,
* respectively. To preserve leading spaces in values, these can also be escaped
* as `\s`.
*
* Key files can store strings (possibly with localized variants), integers,
* booleans and lists of these. Lists are separated by a separator character,
* typically `;` or `,`. To use the list separator character in a value in
* a list, it has to be escaped by prefixing it with a backslash.
*
* This syntax is obviously inspired by the .ini files commonly met
* on Windows, but there are some important differences:
*
* - .ini files use the `;` character to begin comments,
* key files use the `#` character.
*
* - Key files do not allow for ungrouped keys meaning only
* comments can precede the first group.
*
* - Key files are always encoded in UTF-8.
*
* - Key and Group names are case-sensitive. For example, a group called
* `[GROUP]` is a different from `[group]`.
*
* - .ini files dont have a strongly typed boolean entry type,
* they only have `GetProfileInt()`. In key files, only
* `true` and `false` (in lower case) are allowed.
*
* Note that in contrast to the
* [Desktop Entry Specification](https://specifications.freedesktop.org/desktop-entry-spec/latest/),
* groups in key files may contain the same key multiple times; the last entry wins.
* Key files may also contain multiple groups with the same name; they are merged
* together. Another difference is that keys and group names in key files are not
* restricted to ASCII characters.
*
* Here is an example of loading a key file and reading a value:
*
* ```c
* g_autoptr(GError) error = NULL;
* g_autoptr(GKeyFile) key_file = g_key_file_new ();
*
* if (!g_key_file_load_from_file (key_file, "key-file.ini", flags, &error))
* {
* if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
* g_warning ("Error loading key file: %s", error->message);
* return;
* }
*
* g_autofree gchar *val = g_key_file_get_string (key_file, "Group Name", "SomeKey", &error);
* if (val == NULL &&
* !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
* {
* g_warning ("Error finding key in key file: %s", error->message);
* return;
* }
* else if (val == NULL)
* {
* // Fall back to a default value.
* val = g_strdup ("default-value");
* }
* ```
*
* Here is an example of creating and saving a key file:
*
* ```c
* g_autoptr(GKeyFile) key_file = g_key_file_new ();
* const gchar *val = …;
* g_autoptr(GError) error = NULL;
*
* g_key_file_set_string (key_file, "Group Name", "SomeKey", val);
*
* // Save as a file.
* if (!g_key_file_save_to_file (key_file, "key-file.ini", &error))
* {
* g_warning ("Error saving key file: %s", error->message);
* return;
* }
*
* // Or store to a GBytes for use elsewhere.
* gsize data_len;
* g_autofree guint8 *data = (guint8 *) g_key_file_to_data (key_file, &data_len, &error);
* if (data == NULL)
* {
* g_warning ("Error saving key file: %s", error->message);
* return;
* }
* g_autoptr(GBytes) bytes = g_bytes_new_take (g_steal_pointer (&data), data_len);
* ```
*/
class KeyFile {
static $gtype: GObject.GType<KeyFile>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
static ['new'](): KeyFile;
// Static methods
static error_quark(): Quark;
// Methods
/**
* Returns the value associated with `key` under `group_name` as a
* boolean.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. Likewise, if the value associated with `key` cannot be interpreted
* as a boolean then [error`GLib`.KeyFileError.INVALID_VALUE] is returned.
* @param group_name a group name
* @param key a key
* @returns the value associated with the key as a boolean, or false if the key was not found or could not be parsed.
*/
get_boolean(group_name: string, key: string): boolean;
/**
* Returns the values associated with `key` under `group_name` as
* booleans.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. Likewise, if the values associated with `key` cannot be interpreted
* as booleans then [error`GLib`.KeyFileError.INVALID_VALUE] is returned.
* @param group_name a group name
* @param key a key
* @returns the values associated with the key as a list of booleans, or `NULL` if the key was not found or could not be parsed. The returned list of booleans should be freed with [func@GLib.free] when no longer needed.
*/
get_boolean_list(group_name: string, key: string): boolean[];
/**
* Retrieves a comment above `key` from `group_name`.
*
* If `key` is `NULL` then `comment` will be read from above
* `group_name`. If both `key` and `group_name` are `NULL`, then
* `comment` will be read from above the first group in the file.
*
* Note that the returned string does not include the `#` comment markers,
* but does include any whitespace after them (on each line). It includes
* the line breaks between lines, but does not include the final line break.
* @param group_name a group name, or `NULL` to get a top-level comment
* @param key a key, or `NULL` to get a group comment
* @returns a comment that should be freed with [func@GLib.free]
*/
get_comment(group_name?: string | null, key?: string | null): string;
/**
* Returns the value associated with `key` under `group_name` as a double.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. Likewise, if the value associated with `key` cannot be interpreted
* as a double then [error`GLib`.KeyFileError.INVALID_VALUE] is returned.
* @param group_name a group name
* @param key a key
* @returns the value associated with the key as a double, or `0.0` if the key was not found or could not be parsed.
*/
get_double(group_name: string, key: string): number;
/**
* Returns the values associated with `key` under `group_name` as
* doubles.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. Likewise, if the values associated with `key` cannot be interpreted
* as doubles then [error`GLib`.KeyFileError.INVALID_VALUE] is returned.
* @param group_name a group name
* @param key a key
* @returns the values associated with the key as a list of doubles, or `NULL` if the key was not found or could not be parsed. The returned list of doubles should be freed with [func@GLib.free] when no longer needed.
*/
get_double_list(group_name: string, key: string): number[];
/**
* Returns all groups in the key file loaded with `key_file`.
*
* The array of returned groups will be `NULL`-terminated, so
* `length` may optionally be `NULL`.
* @returns a newly-allocated `NULL`-terminated array of strings. Use [func@GLib.strfreev] to free it.
*/
get_groups(): [string[], number];
/**
* Returns the value associated with `key` under `group_name` as a signed
* 64-bit integer.
*
* This is similar to [method`GLib`.KeyFile.get_integer] but can return
* 64-bit results without truncation.
* @param group_name a group name
* @param key a key
* @returns the value associated with the key as a signed 64-bit integer, or `0` if the key was not found or could not be parsed.
*/
get_int64(group_name: string, key: string): number;
/**
* Returns the value associated with `key` under `group_name` as an
* integer.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. Likewise, if the value associated with `key` cannot be interpreted
* as an integer, or is out of range for a `gint`, then
* [error`GLib`.KeyFileError.INVALID_VALUE] is returned.
* @param group_name a group name
* @param key a key
* @returns the value associated with the key as an integer, or `0` if the key was not found or could not be parsed.
*/
get_integer(group_name: string, key: string): number;
/**
* Returns the values associated with `key` under `group_name` as
* integers.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. Likewise, if the values associated with `key` cannot be interpreted
* as integers, or are out of range for `gint`, then
* [error`GLib`.KeyFileError.INVALID_VALUE] is returned.
* @param group_name a group name
* @param key a key
* @returns the values associated with the key as a list of integers, or `NULL` if the key was not found or could not be parsed. The returned list of integers should be freed with [func@GLib.free] when no longer needed.
*/
get_integer_list(group_name: string, key: string): number[];
/**
* Returns all keys for the group name `group_name`.
*
* The array of returned keys will be `NULL`-terminated, so `length` may
* optionally be `NULL`. If the `group_name` cannot be found,
* [error`GLib`.KeyFileError.GROUP_NOT_FOUND] is returned.
* @param group_name a group name
* @returns a newly-allocated `NULL`-terminated array of strings. Use [func@GLib.strfreev] to free it.
*/
get_keys(group_name: string): [string[], number];
/**
* Returns the actual locale which the result of
* [method`GLib`.KeyFile.get_locale_string] or
* [method`GLib`.KeyFile.get_locale_string_list] came from.
*
* If calling [method`GLib`.KeyFile.get_locale_string] or
* [method`GLib`.KeyFile.get_locale_string_list] with exactly the same `key_file,`
* `group_name,` `key` and `locale,` the result of those functions will
* have originally been tagged with the locale that is the result of
* this function.
* @param group_name a group name
* @param key a key
* @param locale a locale identifier or `NULL` to use the current locale
* @returns the locale from the file, or `NULL` if the key was not found or the entry in the file was was untranslated
*/
get_locale_for_key(group_name: string, key: string, locale?: string | null): string | null;
/**
* Returns the value associated with `key` under `group_name`
* translated in the given `locale` if available.
*
* If `locale` is `C` then the untranslated value is returned (since GLib 2.84).
*
* If `locale` is `NULL` then the current locale is assumed.
*
* If `locale` is to be non-`NULL`, or if the current locale will change over
* the lifetime of the [struct`GLib`.KeyFile], it must be loaded with
* [flags`GLib`.KeyFileFlags.KEEP_TRANSLATIONS] in order to load strings for all
* locales.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. If the value associated
* with `key` cannot be interpreted or no suitable translation can
* be found then the untranslated value is returned.
* @param group_name a group name
* @param key a key
* @param locale a locale identifier or `NULL` to use the current locale
* @returns a newly allocated string or `NULL` if the specified key cannot be found.
*/
get_locale_string(group_name: string, key: string, locale?: string | null): string;
/**
* Returns the values associated with `key` under `group_name`
* translated in the given `locale` if available.
*
* If `locale` is `C` then the untranslated value is returned (since GLib 2.84).
*
* If `locale` is `NULL` then the current locale is assumed.
*
* If `locale` is to be non-`NULL`, or if the current locale will change over
* the lifetime of the [struct`GLib`.KeyFile], it must be loaded with
* [flags`GLib`.KeyFileFlags.KEEP_TRANSLATIONS] in order to load strings for all
* locales.
*
* If `key` cannot be found then [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. If the values associated
* with `key` cannot be interpreted or no suitable translations
* can be found then the untranslated values are returned. The
* returned array is `NULL`-terminated, so `length` may optionally
* be `NULL`.
* @param group_name a group name
* @param key a key
* @param locale a locale identifier or `NULL` to use the current locale
* @returns a newly allocated `NULL`-terminated string array or `NULL` if the key isnt found. The string array should be freed with [func@GLib.strfreev].
*/
get_locale_string_list(group_name: string, key: string, locale?: string | null): string[];
/**
* Returns the name of the start group of the file.
* @returns The start group of the key file.
*/
get_start_group(): string | null;
/**
* Returns the string value associated with `key` under `group_name`.
*
* Unlike [method`GLib`.KeyFile.get_value], this function handles escape
* sequences like `\s`.
*
* If the key cannot be found, [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. If the `group_name` cannot be found,
* [error`GLib`.KeyFileError.GROUP_NOT_FOUND] is returned.
* @param group_name a group name
* @param key a key
* @returns a newly allocated string or `NULL` if the specified key cannot be found.
*/
get_string(group_name: string, key: string): string;
/**
* Returns the values associated with `key` under `group_name`.
*
* If the key cannot be found, [error`GLib`.KeyFileError.KEY_NOT_FOUND] is
* returned. If the `group_name` cannot be found,
* [error`GLib`.KeyFileError.GROUP_NOT_FOUND] is returned.
* @param group_name a group name
* @param key a key
* @returns a `NULL`-terminated string array or `NULL` if the specified key cannot be found. The array should be freed with [func@GLib.strfreev].
*/
get_string_list(group_name: string, key: string): string[];
/**
* Returns the value associated with `key` under `group_name` as an unsigned
* 64-bit integer.
*
* This is similar to [method`GLib`.KeyFile.get_integer] but can return
* large positive results without truncation.
* @param group_name a group name
* @param key a key
* @returns the value associated with the key as an unsigned 64-bit integer, or `0` if the key was not found or could not be parsed.
*/
get_uint64(group_name: string, key: string): number;
/**
* Returns the raw value associated with `key` under `group_name`.
*
* Use [method`GLib`.KeyFile.get_string] to retrieve an unescaped UTF-8 string.
*
* If the key cannot be found, [error`GLib`.KeyFileError.KEY_NOT_FOUND]
* is returned. If the `group_name` cannot be found,
* [error`GLib`.KeyFileError.GROUP_NOT_FOUND] is returned.
* @param group_name a group name
* @param key a key
* @returns a newly allocated string or `NULL` if the specified key cannot be found.
*/
get_value(group_name: string, key: string): string;
/**
* Looks whether the key file has the group `group_name`.
* @param group_name a group name
* @returns true if @group_name is a part of @key_file, false otherwise.
*/
has_group(group_name: string): boolean;
/**
* Loads a key file from the data in `bytes` into an empty [struct`GLib`.KeyFile]
* structure.
*
* If the object cannot be created then a [error`GLib`.KeyFileError] is returned.
* @param bytes a [struct@GLib.Bytes]
* @param flags flags from [flags@GLib.KeyFileFlags]
* @returns true if a key file could be loaded, false otherwise
*/
load_from_bytes(bytes: Bytes | Uint8Array, flags: KeyFileFlags | null): boolean;
/**
* Loads a key file from memory into an empty [struct`GLib`.KeyFile] structure.
*
* If the object cannot be created then a [error`GLib`.KeyFileError is returned.
* @param data key file loaded in memory
* @param length the length of @data in bytes (or `(gsize)-1` if data is nul-terminated)
* @param flags flags from [flags@GLib.KeyFileFlags]
* @returns true if a key file could be loaded, false otherwise
*/
load_from_data(data: string, length: number, flags: KeyFileFlags | null): boolean;
/**
* Looks for a key file named `file` in the paths returned from
* [func`GLib`.get_user_data_dir] and [func`GLib`.get_system_data_dirs],
* loads the file into `key_file` and returns the files full path in
* `full_path`.
*
* If the file could not be loaded then either a [error`GLib`.FileError] or
* [error`GLib`.KeyFileError] is returned.
* @param file a relative path to a filename to open and parse
* @param flags flags from [flags@GLib.KeyFileFlags]
* @returns true if a key file could be loaded, false otherwise
*/
load_from_data_dirs(file: string, flags: KeyFileFlags | null): [boolean, string];
/**
* Looks for a key file named `file` in the paths specified in `search_dirs,`
* loads the file into `key_file` and returns the files full path in `full_path`.
*
* If the file could not be found in any of the `search_dirs,`
* [error`GLib`.KeyFileError.NOT_FOUND] is returned. If
* the file is found but the OS returns an error when opening or reading the
* file, a [error`GLib`.FileError] is returned. If there is a problem parsing the
* file, a [error`GLib`.KeyFileError] is returned.
* @param file a relative path to a filename to open and parse
* @param search_dirs `NULL`-terminated array of directories to search
* @param flags flags from [flags@GLib.KeyFileFlags]
* @returns true if a key file could be loaded, false otherwise
*/
load_from_dirs(file: string, search_dirs: string[], flags: KeyFileFlags | null): [boolean, string];
/**
* Loads a key file into an empty [struct`GLib`.KeyFile] structure.
*
* If the OS returns an error when opening or reading the file, a
* [error`GLib`.FileError] is returned. If there is a problem parsing the file,
* a [error`GLib`.KeyFileError] is returned.
*
* This function will never return a [error`GLib`.KeyFileError.NOT_FOUND]
* error. If the `file` is not found, [error`GLib`.FileError.NOENT] is returned.
* @param file the path of a filename to load, in the GLib filename encoding
* @param flags flags from [flags@GLib.KeyFileFlags]
* @returns true if a key file could be loaded, false otherwise
*/
load_from_file(file: string, flags: KeyFileFlags | null): boolean;
/**
* Removes a comment above `key` from `group_name`.
*
* If `key` is `NULL` then `comment` will be removed above `group_name`.
* If both `key` and `group_name` are `NULL`, then `comment` will
* be removed above the first group in the file.
* @param group_name a group name, or `NULL` to get a top-level comment
* @param key a key, or `NULL` to get a group comment
* @returns true if the comment was removed, false otherwise
*/
remove_comment(group_name?: string | null, key?: string | null): boolean;
/**
* Removes the specified group, `group_name,`
* from the key file.
* @param group_name a group name
* @returns true if the group was removed, false otherwise
*/
remove_group(group_name: string): boolean;
/**
* Removes `key` in `group_name` from the key file.
* @param group_name a group name
* @param key a key name to remove
* @returns true if the key was removed, false otherwise
*/
remove_key(group_name: string, key: string): boolean;
/**
* Writes the contents of `key_file` to `filename` using
* [func`GLib`.file_set_contents].
*
* If you need stricter guarantees about durability of
* the written file than are provided by [func`GLib`.file_set_contents], use
* [func`GLib`.file_set_contents_full] with the return value of
* [method`GLib`.KeyFile.to_data].
*
* This function can fail for any of the reasons that
* [func`GLib`.file_set_contents] may fail.
* @param filename the name of the file to write to
* @returns true if successful, false otherwise
*/
save_to_file(filename: string): boolean;
/**
* Associates a new boolean value with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param value true or false
*/
set_boolean(group_name: string, key: string, value: boolean): void;
/**
* Associates a list of boolean values with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param list an array of boolean values
*/
set_boolean_list(group_name: string, key: string, list: boolean[]): void;
/**
* Places a comment above `key` from `group_name`.
*
* If `key` is `NULL` then `comment` will be written above `group_name`.
* If both `key` and `group_name` are `NULL`, then `comment` will be
* written above the first group in the file.
*
* Note that this function prepends a `#` comment marker to
* each line of `comment`.
* @param group_name a group name, or `NULL` to write a top-level comment
* @param key a key, or `NULL` to write a group comment
* @param comment a comment
* @returns true if the comment was written, false otherwise
*/
set_comment(group_name: string | null, key: string | null, comment: string): boolean;
/**
* Associates a new double value with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param value a double value
*/
set_double(group_name: string, key: string, value: number): void;
/**
* Associates a list of double values with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param list an array of double values
*/
set_double_list(group_name: string, key: string, list: number[]): void;
/**
* Associates a new integer value with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param value an integer value
*/
set_int64(group_name: string, key: string, value: number): void;
/**
* Associates a new integer value with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param value an integer value
*/
set_integer(group_name: string, key: string, value: number): void;
/**
* Associates a list of integer values with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param list an array of integer values
*/
set_integer_list(group_name: string, key: string, list: number[]): void;
/**
* Sets the character which is used to separate values in lists.
*
* Typically `;` or `,` are used as separators. The default list separator
* is `;`.
* @param separator the separator
*/
set_list_separator(separator: number): void;
/**
* Associates a string value for `key` and `locale` under `group_name`.
*
* If the translation for `key` cannot be found then it is created.
*
* If `locale` is `C` then the untranslated value is set (since GLib 2.84).
* @param group_name a group name
* @param key a key
* @param locale a locale identifier
* @param string a string
*/
set_locale_string(group_name: string, key: string, locale: string, string: string): void;
/**
* Associates a list of string values for `key` and `locale` under
* `group_name`.
*
* If `locale` is `C` then the untranslated value is set (since GLib 2.84).
*
* If the translation for `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param locale a locale identifier
* @param list a `NULL`-terminated array of locale string values
*/
set_locale_string_list(group_name: string, key: string, locale: string, list: string[]): void;
/**
* Associates a new string value with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* If `group_name` cannot be found then it is created.
* Unlike [method`GLib`.KeyFile.set_value], this function handles characters
* that need escaping, such as newlines.
* @param group_name a group name
* @param key a key
* @param string a string
*/
set_string(group_name: string, key: string, string: string): void;
/**
* Associates a list of string values for `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* If `group_name` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param list an array of string values
*/
set_string_list(group_name: string, key: string, list: string[]): void;
/**
* Associates a new integer value with `key` under `group_name`.
*
* If `key` cannot be found then it is created.
* @param group_name a group name
* @param key a key
* @param value an integer value
*/
set_uint64(group_name: string, key: string, value: number): void;
/**
* Associates a new value with `key` under `group_name`.
*
* If `key` cannot be found then it is created. If `group_name` cannot
* be found then it is created. To set an UTF-8 string which may contain
* characters that need escaping (such as newlines or spaces), use
* [method`GLib`.KeyFile.set_string].
* @param group_name a group name
* @param key a key
* @param value a string
*/
set_value(group_name: string, key: string, value: string): void;
/**
* Outputs `key_file` as a string.
*
* Note that this function never reports an error.
* @returns a newly allocated string holding the contents of the key file
*/
to_data(): [string, number];
/**
* Decreases the reference count of `key_file` by 1.
*
* If the reference count reaches zero, frees the key file and all its allocated
* memory.
*/
unref(): void;
}
/**
* The #GList struct is used for each element in a doubly-linked list.
*/
class List {
static $gtype: GObject.GType<List>;
// Fields
data: any;
next: any[];
prev: any[];
// Constructors
constructor(
properties?: Partial<{
data: any;
}>,
);
_init(...args: any[]): void;
// Static methods
static pop_allocator(): void;
static push_allocator(allocator: Allocator): void;
}
/**
* Structure representing a single field in a structured log entry. See
* g_log_structured() for details.
*
* Log fields may contain arbitrary values, including binary with embedded nul
* bytes. If the field contains a string, the string must be UTF-8 encoded and
* have a trailing nul byte. Otherwise, `length` must be set to a non-negative
* value.
*/
class LogField {
static $gtype: GObject.GType<LogField>;
// Fields
key: string;
value: any;
length: number;
// Constructors
constructor(
properties?: Partial<{
key: string;
value: any;
length: number;
}>,
);
_init(...args: any[]): void;
}
/**
* The `GMainContext` struct is an opaque data
* type representing a set of sources to be handled in a main loop.
*/
class MainContext {
static $gtype: GObject.GType<MainContext>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
static ['new'](): MainContext;
static new_with_flags(flags: MainContextFlags): MainContext;
// Static methods
/**
* Returns the global-default main context. This is the main context
* used for main loop functions when a main loop is not explicitly
* specified, and corresponds to the "main" main loop. See also
* [func`GLib`.MainContext.get_thread_default].
*/
static ['default'](): MainContext;
/**
* Gets the thread-default #GMainContext for this thread. Asynchronous
* operations that want to be able to be run in contexts other than
* the default one should call this method or
* [func`GLib`.MainContext.ref_thread_default] to get a
* [struct`GLib`.MainContext] to add their [struct`GLib`.Source]s to. (Note that
* even in single-threaded programs applications may sometimes want to
* temporarily push a non-default context, so it is not safe to assume that
* this will always return %NULL if you are running in the default thread.)
*
* If you need to hold a reference on the context, use
* [func`GLib`.MainContext.ref_thread_default] instead.
*/
static get_thread_default(): MainContext | null;
/**
* Gets the thread-default [struct`GLib`.MainContext] for this thread, as with
* [func`GLib`.MainContext.get_thread_default], but also adds a reference to
* it with [method`GLib`.MainContext.ref]. In addition, unlike
* [func`GLib`.MainContext.get_thread_default], if the thread-default context
* is the global-default context, this will return that
* [struct`GLib`.MainContext] (with a ref added to it) rather than returning
* %NULL.
*/
static ref_thread_default(): MainContext;
// Methods
/**
* Tries to become the owner of the specified context.
* If some other thread is the owner of the context,
* returns %FALSE immediately. Ownership is properly
* recursive: the owner can require ownership again
* and will release ownership when [method`GLib`.MainContext.release]
* is called as many times as [method`GLib`.MainContext.acquire].
*
* You must be the owner of a context before you
* can call [method`GLib`.MainContext.prepare], [method`GLib`.MainContext.query],
* [method`GLib`.MainContext.check], [method`GLib`.MainContext.dispatch],
* [method`GLib`.MainContext.release].
*
* Since 2.76 `context` can be %NULL to use the global-default
* main context.
* @returns %TRUE if the operation succeeded, and this thread is now the owner of @context.
*/
acquire(): boolean;
/**
* Adds a file descriptor to the set of file descriptors polled for
* this context. This will very seldom be used directly. Instead
* a typical event source will use `g_source_add_unix_fd` instead.
* @param fd a #GPollFD structure holding information about a file descriptor to watch.
* @param priority the priority for this file descriptor which should be the same as the priority used for [method@GLib.Source.attach] to ensure that the file descriptor is polled whenever the results may be needed.
*/
add_poll(fd: PollFD, priority: number): void;
/**
* Passes the results of polling back to the main loop. You should be
* careful to pass `fds` and its length `n_fds` as received from
* [method`GLib`.MainContext.query], as this functions relies on assumptions
* on how `fds` is filled.
*
* You must have successfully acquired the context with
* [method`GLib`.MainContext.acquire] before you may call this function.
*
* Since 2.76 `context` can be %NULL to use the global-default
* main context.
* @param max_priority the maximum numerical priority of sources to check
* @param fds array of #GPollFD's that was passed to the last call to [method@GLib.MainContext.query]
* @returns %TRUE if some sources are ready to be dispatched.
*/
check(max_priority: number, fds: PollFD[]): boolean;
/**
* Dispatches all pending sources.
*
* You must have successfully acquired the context with
* [method`GLib`.MainContext.acquire] before you may call this function.
*
* Since 2.76 `context` can be %NULL to use the global-default
* main context.
*/
dispatch(): void;
/**
* Finds a source with the given source functions and user data. If
* multiple sources exist with the same source function and user data,
* the first one found will be returned.
* @param funcs the @source_funcs passed to [ctor@GLib.Source.new].
* @param user_data the user data from the callback.
* @returns the source, if one was found, otherwise %NULL
*/
find_source_by_funcs_user_data(funcs: SourceFuncs, user_data?: any | null): Source;
/**
* Finds a #GSource given a pair of context and ID.
*
* It is a programmer error to attempt to look up a non-existent source.
*
* More specifically: source IDs can be reissued after a source has been
* destroyed and therefore it is never valid to use this function with a
* source ID which may have already been removed. An example is when
* scheduling an idle to run in another thread with [func`GLib`.idle_add]: the
* idle may already have run and been removed by the time this function
* is called on its (now invalid) source ID. This source ID may have
* been reissued, leading to the operation being performed against the
* wrong source.
* @param source_id the source ID, as returned by [method@GLib.Source.get_id].
* @returns the #GSource
*/
find_source_by_id(source_id: number): Source;
/**
* Finds a source with the given user data for the callback. If
* multiple sources exist with the same user data, the first
* one found will be returned.
* @param user_data the user_data for the callback.
* @returns the source, if one was found, otherwise %NULL
*/
find_source_by_user_data(user_data?: any | null): Source;
/**
* Invokes a function in such a way that `context` is owned during the
* invocation of `function`.
*
* This function is the same as [method`GLib`.MainContext.invoke] except that it
* lets you specify the priority in case `function` ends up being
* scheduled as an idle and also lets you give a #GDestroyNotify for `data`.
*
* `notify` should not assume that it is called from any particular
* thread or with any particular context acquired.
* @param priority the priority at which to run @function
* @param _function function to call
* @param notify a function to call when @data is no longer in use, or %NULL.
*/
invoke_full(priority: number, _function: SourceFunc, notify?: DestroyNotify | null): void;
/**
* Determines whether this thread holds the (recursive)
* ownership of this [struct`GLib`.MainContext]. This is useful to
* know before waiting on another thread that may be
* blocking to get ownership of `context`.
* @returns %TRUE if current thread is owner of @context.
*/
is_owner(): boolean;
/**
* Runs a single iteration for the given main loop. This involves
* checking to see if any event sources are ready to be processed,
* then if no events sources are ready and `may_block` is %TRUE, waiting
* for a source to become ready, then dispatching the highest priority
* events sources that are ready. Otherwise, if `may_block` is %FALSE
* sources are not waited to become ready, only those highest priority
* events sources will be dispatched (if any), that are ready at this
* given moment without further waiting.
*
* Note that even when `may_block` is %TRUE, it is still possible for
* [method`GLib`.MainContext.iteration] to return %FALSE, since the wait may
* be interrupted for other reasons than an event source becoming ready.
* @param may_block whether the call may block.
* @returns %TRUE if events were dispatched.
*/
iteration(may_block: boolean): boolean;
/**
* Checks if any sources have pending events for the given context.
* @returns %TRUE if events are pending.
*/
pending(): boolean;
/**
* Pops `context` off the thread-default context stack (verifying that
* it was on the top of the stack).
*/
pop_thread_default(): void;
/**
* Prepares to poll sources within a main loop. The resulting information
* for polling is determined by calling [method`GLib`.MainContext.query].
*
* You must have successfully acquired the context with
* [method`GLib`.MainContext.acquire] before you may call this function.
* @returns %TRUE if some source is ready to be dispatched prior to polling.
*/
prepare(): [boolean, number];
/**
* Acquires `context` and sets it as the thread-default context for the
* current thread. This will cause certain asynchronous operations
* (such as most [Gio](../gio/index.html)-based I/O) which are
* started in this thread to run under `context` and deliver their
* results to its main loop, rather than running under the global
* default main context in the main thread. Note that calling this function
* changes the context returned by [func`GLib`.MainContext.get_thread_default],
* not the one returned by [func`GLib`.MainContext.default], so it does not
* affect the context used by functions like [func`GLib`.idle_add].
*
* Normally you would call this function shortly after creating a new
* thread, passing it a [struct`GLib`.MainContext] which will be run by a
* [struct`GLib`.MainLoop] in that thread, to set a new default context for all
* async operations in that thread. In this case you may not need to
* ever call [method`GLib`.MainContext.pop_thread_default], assuming you want
* the new [struct`GLib`.MainContext] to be the default for the whole lifecycle
* of the thread.
*
* If you don't have control over how the new thread was created (e.g.
* in the new thread isn't newly created, or if the thread life
* cycle is managed by a #GThreadPool), it is always suggested to wrap
* the logic that needs to use the new [struct`GLib`.MainContext] inside a
* [method`GLib`.MainContext.push_thread_default] /
* [method`GLib`.MainContext.pop_thread_default] pair, otherwise threads that
* are re-used will end up never explicitly releasing the
* [struct`GLib`.MainContext] reference they hold.
*
* In some cases you may want to schedule a single operation in a
* non-default context, or temporarily use a non-default context in
* the main thread. In that case, you can wrap the call to the
* asynchronous operation inside a
* [method`GLib`.MainContext.push_thread_default] /
* [method`GLib`.MainContext.pop_thread_default] pair, but it is up to you to
* ensure that no other asynchronous operations accidentally get
* started while the non-default context is active.
*
* Beware that libraries that predate this function may not correctly
* handle being used from a thread with a thread-default context. Eg,
* see g_file_supports_thread_contexts().
*/
push_thread_default(): void;
/**
* Push `main_context` as the new thread-default main context for the current
* thread, using [method`GLib`.MainContext.push_thread_default], and return a
* new [alias`GLib`.MainContextPusher]. Pop with g_main_context_pusher_free().
* Using [method`GLib`.MainContext.pop_thread_default] on `main_context` while a
* [alias`GLib`.MainContextPusher] exists for it can lead to undefined behaviour.
*
* Using two [alias`GLib`.MainContextPusher]s in the same scope is not allowed,
* as it leads to an undefined pop order.
*
* This is intended to be used with g_autoptr(). Note that g_autoptr()
* is only available when using GCC or clang, so the following example
* will only work with those compilers:
*
* ```
* typedef struct
* {
* ...
* GMainContext *context;
* ...
* } MyObject;
*
* static void
* my_object_do_stuff (MyObject *self)
* {
* g_autoptr(GMainContextPusher) pusher = g_main_context_pusher_new (self->context);
*
* // Code with main context as the thread default here
*
* if (cond)
* // No need to pop
* return;
*
* // Optionally early pop
* g_clear_pointer (&pusher, g_main_context_pusher_free);
*
* // Code with main context no longer the thread default here
* }
* ```
*
* @returns a #GMainContextPusher
*/
pusher_new(): MainContextPusher;
/**
* Determines information necessary to poll this main loop. You should
* be careful to pass the resulting `fds` array and its length `n_fds`
* as is when calling [method`GLib`.MainContext.check], as this function relies
* on assumptions made when the array is filled.
*
* You must have successfully acquired the context with
* [method`GLib`.MainContext.acquire] before you may call this function.
* @param max_priority maximum priority source to check
* @returns the number of records actually stored in @fds, or, if more than @n_fds records need to be stored, the number of records that need to be stored.
*/
query(max_priority: number): [number, number, PollFD[]];
/**
* Increases the reference count on a [struct`GLib`.MainContext] object by one.
* @returns the @context that was passed in (since 2.6)
*/
ref(): MainContext;
/**
* Releases ownership of a context previously acquired by this thread
* with [method`GLib`.MainContext.acquire]. If the context was acquired multiple
* times, the ownership will be released only when [method`GLib`.MainContext.release]
* is called as many times as it was acquired.
*
* You must have successfully acquired the context with
* [method`GLib`.MainContext.acquire] before you may call this function.
*/
release(): void;
/**
* Removes file descriptor from the set of file descriptors to be
* polled for a particular context.
* @param fd a #GPollFD descriptor previously added with [method@GLib.MainContext.add_poll]
*/
remove_poll(fd: PollFD): void;
/**
* Decreases the reference count on a [struct`GLib`.MainContext] object by one.
* If
* the result is zero, free the context and free all associated memory.
*/
unref(): void;
/**
* Tries to become the owner of the specified context,
* as with [method`GLib`.MainContext.acquire]. But if another thread
* is the owner, atomically drop `mutex` and wait on `cond` until
* that owner releases ownership or until `cond` is signaled, then
* try again (once) to become the owner.
* @param cond a condition variable
* @param mutex a mutex, currently held
* @returns %TRUE if the operation succeeded, and this thread is now the owner of @context.
*/
wait(cond: Cond, mutex: Mutex): boolean;
/**
* If `context` is currently blocking in [method`GLib`.MainContext.iteration]
* waiting for a source to become ready, cause it to stop blocking
* and return. Otherwise, cause the next invocation of
* [method`GLib`.MainContext.iteration] to return without blocking.
*
* This API is useful for low-level control over [struct`GLib`.MainContext]; for
* example, integrating it with main loop implementations such as
* [struct`GLib`.MainLoop].
*
* Another related use for this function is when implementing a main
* loop with a termination condition, computed from multiple threads:
*
*
* ```c
* #define NUM_TASKS 10
* static gint tasks_remaining = NUM_TASKS; // (atomic)
* ...
*
* while (g_atomic_int_get (&tasks_remaining) != 0)
* g_main_context_iteration (NULL, TRUE);
* ```
*
*
* Then in a thread:
*
* ```c
* perform_work();
*
* if (g_atomic_int_dec_and_test (&tasks_remaining))
* g_main_context_wakeup (NULL);
* ```
*
*/
wakeup(): void;
}
/**
* The `GMainLoop` struct is an opaque data type
* representing the main event loop of a GLib or GTK application.
*/
class MainLoop {
static $gtype: GObject.GType<MainLoop>;
// Constructors
constructor(context: MainContext | null, is_running: boolean);
_init(...args: any[]): void;
static ['new'](context: MainContext | null, is_running: boolean): MainLoop;
// Methods
/**
* Returns the [struct`GLib`.MainContext] of `loop`.
* @returns the [struct@GLib.MainContext] of @loop
*/
get_context(): MainContext;
/**
* Checks to see if the main loop is currently being run via
* [method`GLib`.MainLoop.run].
* @returns %TRUE if the mainloop is currently being run.
*/
is_running(): boolean;
/**
* Stops a [struct`GLib`.MainLoop] from running. Any calls to
* [method`GLib`.MainLoop.run] for the loop will return.
*
* Note that sources that have already been dispatched when
* [method`GLib`.MainLoop.quit] is called will still be executed.
*/
quit(): void;
/**
* Increases the reference count on a [struct`GLib`.MainLoop] object by one.
* @returns @loop
*/
ref(): MainLoop;
/**
* Runs a main loop until [method`GLib`.MainLoop.quit] is called on the loop.
* If this is called for the thread of the loop's #GMainContext,
* it will process events from the loop, otherwise it will
* simply wait.
*/
run(): void;
/**
* Decreases the reference count on a [struct`GLib`.MainLoop] object by one. If
* the result is zero, free the loop and free all associated memory.
*/
unref(): void;
/**
* Similar to `GLib.MainLoop.run` but return a Promise which resolves when the main loop ends, instead of blocking while the main loop runs.
* This helps avoid the situation where Promises never resolved if you didn't run the main loop inside a callback.
*/
runAsync(): Promise<void>;
}
/**
* The #GMappedFile represents a file mapping created with
* g_mapped_file_new(). It has only private members and should
* not be accessed directly.
*/
class MappedFile {
static $gtype: GObject.GType<MappedFile>;
// Constructors
constructor(filename: string, writable: boolean);
_init(...args: any[]): void;
static ['new'](filename: string, writable: boolean): MappedFile;
static new_from_fd(fd: number, writable: boolean): MappedFile;
// Methods
/**
* This call existed before #GMappedFile had refcounting and is currently
* exactly the same as g_mapped_file_unref().
*/
free(): void;
/**
* Creates a new #GBytes which references the data mapped from `file`.
* The mapped contents of the file must not be modified after creating this
* bytes object, because a #GBytes should be immutable.
* @returns A newly allocated #GBytes referencing data from @file
*/
get_bytes(): Bytes;
/**
* Returns the contents of a #GMappedFile.
*
* Note that the contents may not be zero-terminated,
* even if the #GMappedFile is backed by a text file.
*
* If the file is empty then %NULL is returned.
* @returns the contents of @file, or %NULL.
*/
get_contents(): string | null;
/**
* Returns the length of the contents of a #GMappedFile.
* @returns the length of the contents of @file.
*/
get_length(): number;
/**
* Increments the reference count of `file` by one. It is safe to call
* this function from any thread.
* @returns the passed in #GMappedFile.
*/
ref(): MappedFile;
/**
* Decrements the reference count of `file` by one. If the reference count
* drops to 0, unmaps the buffer of `file` and frees it.
*
* It is safe to call this function from any thread.
*
* Since 2.22
*/
unref(): void;
}
/**
* A parse context is used to parse a stream of bytes that
* you expect to contain marked-up text.
*
* See g_markup_parse_context_new(), #GMarkupParser, and so
* on for more details.
*/
class MarkupParseContext {
static $gtype: GObject.GType<MarkupParseContext>;
// Constructors
constructor(parser: MarkupParser, flags: MarkupParseFlags, user_data?: any | null);
_init(...args: any[]): void;
static ['new'](parser: MarkupParser, flags: MarkupParseFlags, user_data?: any | null): MarkupParseContext;
// Methods
/**
* Signals to the #GMarkupParseContext that all data has been
* fed into the parse context with g_markup_parse_context_parse().
*
* This function reports an error if the document isn't complete,
* for example if elements are still open.
* @returns %TRUE on success, %FALSE if an error was set
*/
end_parse(): boolean;
/**
* Frees a #GMarkupParseContext.
*
* This function can't be called from inside one of the
* #GMarkupParser functions or while a subparser is pushed.
*/
free(): void;
/**
* Retrieves the name of the currently open element.
*
* If called from the start_element or end_element handlers this will
* give the element_name as passed to those functions. For the parent
* elements, see g_markup_parse_context_get_element_stack().
* @returns the name of the currently open element, or %NULL
*/
get_element(): string;
/**
* Retrieves the element stack from the internal state of the parser.
*
* The returned #GSList is a list of strings where the first item is
* the currently open tag (as would be returned by
* g_markup_parse_context_get_element()) and the next item is its
* immediate parent.
*
* This function is intended to be used in the start_element and
* end_element handlers where g_markup_parse_context_get_element()
* would merely return the name of the element that is being
* processed.
* @returns the element stack, which must not be modified
*/
get_element_stack(): string[];
/**
* Retrieves the current line number and the number of the character on
* that line. Intended for use in error messages; there are no strict
* semantics for what constitutes the "current" line number other than
* "the best number we could come up with for error messages."
*/
get_position(): [number, number];
/**
* Returns the user_data associated with `context`.
*
* This will either be the user_data that was provided to
* g_markup_parse_context_new() or to the most recent call
* of g_markup_parse_context_push().
* @returns the provided user_data. The returned data belongs to the markup context and will be freed when g_markup_parse_context_free() is called.
*/
get_user_data(): any | null;
/**
* Feed some data to the #GMarkupParseContext.
*
* The data need not be valid UTF-8; an error will be signaled if
* it's invalid. The data need not be an entire document; you can
* feed a document into the parser incrementally, via multiple calls
* to this function. Typically, as you receive data from a network
* connection or file, you feed each received chunk of data into this
* function, aborting the process if an error occurs. Once an error
* is reported, no further data may be fed to the #GMarkupParseContext;
* all errors are fatal.
* @param text chunk of text to parse
* @param text_len length of @text in bytes
* @returns %FALSE if an error occurred, %TRUE on success
*/
parse(text: string, text_len: number): boolean;
/**
* Completes the process of a temporary sub-parser redirection.
*
* This function exists to collect the user_data allocated by a
* matching call to g_markup_parse_context_push(). It must be called
* in the end_element handler corresponding to the start_element
* handler during which g_markup_parse_context_push() was called.
* You must not call this function from the error callback -- the
* `user_data` is provided directly to the callback in that case.
*
* This function is not intended to be directly called by users
* interested in invoking subparsers. Instead, it is intended to
* be used by the subparsers themselves to implement a higher-level
* interface.
* @returns the user data passed to g_markup_parse_context_push()
*/
pop(): any | null;
/**
* Temporarily redirects markup data to a sub-parser.
*
* This function may only be called from the start_element handler of
* a #GMarkupParser. It must be matched with a corresponding call to
* g_markup_parse_context_pop() in the matching end_element handler
* (except in the case that the parser aborts due to an error).
*
* All tags, text and other data between the matching tags is
* redirected to the subparser given by `parser`. `user_data` is used
* as the user_data for that parser. `user_data` is also passed to the
* error callback in the event that an error occurs. This includes
* errors that occur in subparsers of the subparser.
*
* The end tag matching the start tag for which this call was made is
* handled by the previous parser (which is given its own user_data)
* which is why g_markup_parse_context_pop() is provided to allow "one
* last access" to the `user_data` provided to this function. In the
* case of error, the `user_data` provided here is passed directly to
* the error callback of the subparser and g_markup_parse_context_pop()
* should not be called. In either case, if `user_data` was allocated
* then it ought to be freed from both of these locations.
*
* This function is not intended to be directly called by users
* interested in invoking subparsers. Instead, it is intended to be
* used by the subparsers themselves to implement a higher-level
* interface.
*
* As an example, see the following implementation of a simple
* parser that counts the number of tags encountered.
*
*
* ```c
* typedef struct
* {
* gint tag_count;
* } CounterData;
*
* static void
* counter_start_element (GMarkupParseContext *context,
* const gchar *element_name,
* const gchar **attribute_names,
* const gchar **attribute_values,
* gpointer user_data,
* GError **error)
* {
* CounterData *data = user_data;
*
* data->tag_count++;
* }
*
* static void
* counter_error (GMarkupParseContext *context,
* GError *error,
* gpointer user_data)
* {
* CounterData *data = user_data;
*
* g_slice_free (CounterData, data);
* }
*
* static GMarkupParser counter_subparser =
* {
* counter_start_element,
* NULL,
* NULL,
* NULL,
* counter_error
* };
* ```
*
*
* In order to allow this parser to be easily used as a subparser, the
* following interface is provided:
*
*
* ```c
* void
* start_counting (GMarkupParseContext *context)
* {
* CounterData *data = g_slice_new (CounterData);
*
* data->tag_count = 0;
* g_markup_parse_context_push (context, &counter_subparser, data);
* }
*
* gint
* end_counting (GMarkupParseContext *context)
* {
* CounterData *data = g_markup_parse_context_pop (context);
* int result;
*
* result = data->tag_count;
* g_slice_free (CounterData, data);
*
* return result;
* }
* ```
*
*
* The subparser would then be used as follows:
*
*
* ```c
* static void start_element (context, element_name, ...)
* {
* if (strcmp (element_name, "count-these") == 0)
* start_counting (context);
*
* // else, handle other tags...
* }
*
* static void end_element (context, element_name, ...)
* {
* if (strcmp (element_name, "count-these") == 0)
* g_print ("Counted %d tags\n", end_counting (context));
*
* // else, handle other tags...
* }
* ```
*
* @param parser a #GMarkupParser
* @param user_data user data to pass to #GMarkupParser functions
*/
push(parser: MarkupParser, user_data?: any | null): void;
/**
* Increases the reference count of `context`.
* @returns the same @context
*/
ref(): MarkupParseContext;
/**
* Decreases the reference count of `context`. When its reference count
* drops to 0, it is freed.
*/
unref(): void;
}
/**
* Any of the fields in #GMarkupParser can be %NULL, in which case they
* will be ignored. Except for the `error` function, any of these callbacks
* can set an error; in particular the %G_MARKUP_ERROR_UNKNOWN_ELEMENT,
* %G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, and %G_MARKUP_ERROR_INVALID_CONTENT
* errors are intended to be set from these callbacks. If you set an error
* from a callback, g_markup_parse_context_parse() will report that error
* back to its caller.
*/
class MarkupParser {
static $gtype: GObject.GType<MarkupParser>;
// Constructors
_init(...args: any[]): void;
}
/**
* A GMatchInfo is an opaque struct used to return information about
* matches.
*/
abstract class MatchInfo {
static $gtype: GObject.GType<MatchInfo>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Returns a new string containing the text in `string_to_expand` with
* references and escape sequences expanded. References refer to the last
* match done with `string` against `regex` and have the same syntax used by
* g_regex_replace().
*
* The `string_to_expand` must be UTF-8 encoded even if %G_REGEX_RAW was
* passed to g_regex_new().
*
* The backreferences are extracted from the string passed to the match
* function, so you cannot call this function after freeing the string.
*
* `match_info` may be %NULL in which case `string_to_expand` must not
* contain references. For instance "foo\n" does not refer to an actual
* pattern and '\n' merely will be replaced with \n character,
* while to expand "\0" (whole match) one needs the result of a match.
* Use g_regex_check_replacement() to find out whether `string_to_expand`
* contains references.
* @param string_to_expand the string to expand
* @returns the expanded string, or %NULL if an error occurred
*/
expand_references(string_to_expand: string): string | null;
/**
* Retrieves the text matching the `match_num'`th capturing
* parentheses. 0 is the full text of the match, 1 is the first paren
* set, 2 the second, and so on.
*
* If `match_num` is a valid sub pattern but it didn't match anything
* (e.g. sub pattern 1, matching "b" against "(a)?b") then an empty
* string is returned.
*
* If the match was obtained using the DFA algorithm, that is using
* g_regex_match_all() or g_regex_match_all_full(), the retrieved
* string is not that of a set of parentheses but that of a matched
* substring. Substrings are matched in reverse order of length, so
* 0 is the longest match.
*
* The string is fetched from the string passed to the match function,
* so you cannot call this function after freeing the string.
* @param match_num number of the sub expression
* @returns The matched substring, or %NULL if an error occurred. You have to free the string yourself
*/
fetch(match_num: number): string | null;
/**
* Bundles up pointers to each of the matching substrings from a match
* and stores them in an array of gchar pointers. The first element in
* the returned array is the match number 0, i.e. the entire matched
* text.
*
* If a sub pattern didn't match anything (e.g. sub pattern 1, matching
* "b" against "(a)?b") then an empty string is inserted.
*
* If the last match was obtained using the DFA algorithm, that is using
* g_regex_match_all() or g_regex_match_all_full(), the retrieved
* strings are not that matched by sets of parentheses but that of the
* matched substring. Substrings are matched in reverse order of length,
* so the first one is the longest match.
*
* The strings are fetched from the string passed to the match function,
* so you cannot call this function after freeing the string.
* @returns a %NULL-terminated array of gchar * pointers. It must be freed using g_strfreev(). If the previous match failed %NULL is returned
*/
fetch_all(): string[];
/**
* Retrieves the text matching the capturing parentheses named `name`.
*
* If `name` is a valid sub pattern name but it didn't match anything
* (e.g. sub pattern `"X"`, matching `"b"` against `"(?P<X>a)?b"`)
* then an empty string is returned.
*
* The string is fetched from the string passed to the match function,
* so you cannot call this function after freeing the string.
* @param name name of the subexpression
* @returns The matched substring, or %NULL if an error occurred. You have to free the string yourself
*/
fetch_named(name: string): string | null;
/**
* Retrieves the position in bytes of the capturing parentheses named `name`.
*
* If `name` is a valid sub pattern name but it didn't match anything
* (e.g. sub pattern `"X"`, matching `"b"` against `"(?P<X>a)?b"`)
* then `start_pos` and `end_pos` are set to -1 and %TRUE is returned.
* @param name name of the subexpression
* @returns %TRUE if the position was fetched, %FALSE otherwise. If the position cannot be fetched, @start_pos and @end_pos are left unchanged.
*/
fetch_named_pos(name: string): [boolean, number, number];
/**
* Retrieves the position in bytes of the `match_num'`th capturing
* parentheses. 0 is the full text of the match, 1 is the first
* paren set, 2 the second, and so on.
*
* If `match_num` is a valid sub pattern but it didn't match anything
* (e.g. sub pattern 1, matching "b" against "(a)?b") then `start_pos`
* and `end_pos` are set to -1 and %TRUE is returned.
*
* If the match was obtained using the DFA algorithm, that is using
* g_regex_match_all() or g_regex_match_all_full(), the retrieved
* position is not that of a set of parentheses but that of a matched
* substring. Substrings are matched in reverse order of length, so
* 0 is the longest match.
* @param match_num number of the sub expression
* @returns %TRUE if the position was fetched, %FALSE otherwise. If the position cannot be fetched, @start_pos and @end_pos are left unchanged
*/
fetch_pos(match_num: number): [boolean, number, number];
/**
* If `match_info` is not %NULL, calls g_match_info_unref(); otherwise does
* nothing.
*/
free(): void;
/**
* Retrieves the number of matched substrings (including substring 0,
* that is the whole matched text), so 1 is returned if the pattern
* has no substrings in it and 0 is returned if the match failed.
*
* If the last match was obtained using the DFA algorithm, that is
* using g_regex_match_all() or g_regex_match_all_full(), the retrieved
* count is not that of the number of capturing parentheses but that of
* the number of matched substrings.
* @returns Number of matched substrings, or -1 if an error occurred
*/
get_match_count(): number;
/**
* Returns #GRegex object used in `match_info`. It belongs to Glib
* and must not be freed. Use g_regex_ref() if you need to keep it
* after you free `match_info` object.
* @returns #GRegex object used in @match_info
*/
get_regex(): Regex;
/**
* Returns the string searched with `match_info`. This is the
* string passed to g_regex_match() or g_regex_replace() so
* you may not free it before calling this function.
* @returns the string searched with @match_info
*/
get_string(): string;
/**
* Usually if the string passed to g_regex_match*() matches as far as
* it goes, but is too short to match the entire pattern, %FALSE is
* returned. There are circumstances where it might be helpful to
* distinguish this case from other cases in which there is no match.
*
* Consider, for example, an application where a human is required to
* type in data for a field with specific formatting requirements. An
* example might be a date in the form ddmmmyy, defined by the pattern
* "^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$".
* If the application sees the users keystrokes one by one, and can
* check that what has been typed so far is potentially valid, it is
* able to raise an error as soon as a mistake is made.
*
* GRegex supports the concept of partial matching by means of the
* %G_REGEX_MATCH_PARTIAL_SOFT and %G_REGEX_MATCH_PARTIAL_HARD flags.
* When they are used, the return code for
* g_regex_match() or g_regex_match_full() is, as usual, %TRUE
* for a complete match, %FALSE otherwise. But, when these functions
* return %FALSE, you can check if the match was partial calling
* g_match_info_is_partial_match().
*
* The difference between %G_REGEX_MATCH_PARTIAL_SOFT and
* %G_REGEX_MATCH_PARTIAL_HARD is that when a partial match is encountered
* with %G_REGEX_MATCH_PARTIAL_SOFT, matching continues to search for a
* possible complete match, while with %G_REGEX_MATCH_PARTIAL_HARD matching
* stops at the partial match.
* When both %G_REGEX_MATCH_PARTIAL_SOFT and %G_REGEX_MATCH_PARTIAL_HARD
* are set, the latter takes precedence.
*
* There were formerly some restrictions on the pattern for partial matching.
* The restrictions no longer apply.
*
* See pcrepartial(3) for more information on partial matching.
* @returns %TRUE if the match was partial, %FALSE otherwise
*/
is_partial_match(): boolean;
/**
* Returns whether the previous match operation succeeded.
* @returns %TRUE if the previous match operation succeeded, %FALSE otherwise
*/
matches(): boolean;
/**
* Scans for the next match using the same parameters of the previous
* call to g_regex_match_full() or g_regex_match() that returned
* `match_info`.
*
* The match is done on the string passed to the match function, so you
* cannot free it before calling this function.
* @returns %TRUE is the string matched, %FALSE otherwise
*/
next(): boolean;
/**
* Increases reference count of `match_info` by 1.
* @returns @match_info
*/
ref(): MatchInfo;
/**
* Decreases reference count of `match_info` by 1. When reference count drops
* to zero, it frees all the memory associated with the match_info structure.
*/
unref(): void;
}
abstract class MemChunk {
static $gtype: GObject.GType<MemChunk>;
// Constructors
_init(...args: any[]): void;
// Static methods
static info(): void;
// Methods
alloc(): any | null;
alloc0(): any | null;
clean(): void;
destroy(): void;
free(mem?: any | null): void;
print(): void;
reset(): void;
}
/**
* A set of functions used to perform memory allocation. The same #GMemVTable must
* be used for all allocations in the same program; a call to g_mem_set_vtable(),
* if it exists, should be prior to any use of GLib.
*
* This functions related to this has been deprecated in 2.46, and no longer work.
*/
class MemVTable {
static $gtype: GObject.GType<MemVTable>;
// Constructors
_init(...args: any[]): void;
}
/**
* The #GNode struct represents one node in a [n-ary tree](data-structures.html#n-ary-trees).
*/
class Node {
static $gtype: GObject.GType<Node>;
// Fields
data: any;
// Constructors
_init(...args: any[]): void;
// Static methods
static pop_allocator(): void;
static push_allocator(allocator: Allocator): void;
// Methods
/**
* Gets the position of the first child of a #GNode
* which contains the given data.
* @param data the data to find
* @returns the index of the child of @node which contains @data, or -1 if the data is not found
*/
child_index(data?: any | null): number;
/**
* Gets the position of a #GNode with respect to its siblings.
* `child` must be a child of `node`. The first child is numbered 0,
* the second 1, and so on.
* @param child a child of @node
* @returns the position of @child with respect to its siblings
*/
child_position(child: Node): number;
/**
* Calls a function for each of the children of a #GNode. Note that it
* doesn't descend beneath the child nodes. `func` must not do anything
* that would modify the structure of the tree.
* @param flags which types of children are to be visited, one of %G_TRAVERSE_ALL, %G_TRAVERSE_LEAVES and %G_TRAVERSE_NON_LEAVES
* @param func the function to call for each visited node
*/
children_foreach(flags: TraverseFlags | null, func: NodeForeachFunc): void;
/**
* Gets the depth of a #GNode.
*
* If `node` is %NULL the depth is 0. The root node has a depth of 1.
* For the children of the root node the depth is 2. And so on.
* @returns the depth of the #GNode
*/
depth(): number;
/**
* Removes `root` and its children from the tree, freeing any memory
* allocated.
*/
destroy(): void;
/**
* Returns %TRUE if `node` is an ancestor of `descendant`.
* This is true if node is the parent of `descendant,`
* or if node is the grandparent of `descendant` etc.
* @param descendant a #GNode
* @returns %TRUE if @node is an ancestor of @descendant
*/
is_ancestor(descendant: Node): boolean;
/**
* Gets the maximum height of all branches beneath a #GNode.
* This is the maximum distance from the #GNode to all leaf nodes.
*
* If `root` is %NULL, 0 is returned. If `root` has no children,
* 1 is returned. If `root` has children, 2 is returned. And so on.
* @returns the maximum height of the tree beneath @root
*/
max_height(): number;
/**
* Gets the number of children of a #GNode.
* @returns the number of children of @node
*/
n_children(): number;
/**
* Gets the number of nodes in a tree.
* @param flags which types of children are to be counted, one of %G_TRAVERSE_ALL, %G_TRAVERSE_LEAVES and %G_TRAVERSE_NON_LEAVES
* @returns the number of nodes in the tree
*/
n_nodes(flags: TraverseFlags | null): number;
/**
* Reverses the order of the children of a #GNode.
* (It doesn't change the order of the grandchildren.)
*/
reverse_children(): void;
/**
* Traverses a tree starting at the given root #GNode.
* It calls the given function for each node visited.
* The traversal can be halted at any point by returning %TRUE from `func`.
* `func` must not do anything that would modify the structure of the tree.
* @param order the order in which nodes are visited - %G_IN_ORDER, %G_PRE_ORDER, %G_POST_ORDER, or %G_LEVEL_ORDER.
* @param flags which types of children are to be visited, one of %G_TRAVERSE_ALL, %G_TRAVERSE_LEAVES and %G_TRAVERSE_NON_LEAVES
* @param max_depth the maximum depth of the traversal. Nodes below this depth will not be visited. If max_depth is -1 all nodes in the tree are visited. If depth is 1, only the root is visited. If depth is 2, the root and its children are visited. And so on.
* @param func the function to call for each visited #GNode
*/
traverse(
order: TraverseType | null,
flags: TraverseFlags | null,
max_depth: number,
func: NodeTraverseFunc,
): void;
/**
* Unlinks a #GNode from a tree, resulting in two separate trees.
*/
unlink(): void;
}
/**
* A #GOnce struct controls a one-time initialization function. Any
* one-time initialization function must have its own unique #GOnce
* struct.
*/
class Once {
static $gtype: GObject.GType<Once>;
// Fields
status: OnceStatus;
retval: any;
// Constructors
_init(...args: any[]): void;
// Static methods
/**
* Function to be called when starting a critical initialization
* section. The argument `location` must point to a static
* 0-initialized variable that will be set to a value other than 0 at
* the end of the initialization section. In combination with
* g_once_init_leave() and the unique address `value_location,` it can
* be ensured that an initialization section will be executed only once
* during a program's life time, and that concurrent threads are
* blocked until initialization completed. To be used in constructs
* like this:
*
*
* ```c
* static gsize initialization_value = 0;
*
* if (g_once_init_enter (&initialization_value))
* {
* gsize setup_value = 42; // initialization code here
*
* g_once_init_leave (&initialization_value, setup_value);
* }
*
* // use initialization_value here
* ```
*
*
* While `location` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param location location of a static initializable variable containing 0
*/
static init_enter(location: any): [boolean, any];
static init_enter_impl(location: number): boolean;
/**
* This functions behaves in the same way as g_once_init_enter(), but can
* can be used to initialize pointers (or #guintptr) instead of #gsize.
*
*
* ```c
* static MyStruct *interesting_struct = NULL;
*
* if (g_once_init_enter_pointer (&interesting_struct))
* {
* MyStruct *setup_value = allocate_my_struct (); // initialization code here
*
* g_once_init_leave_pointer (&interesting_struct, g_steal_pointer (&setup_value));
* }
*
* // use interesting_struct here
* ```
*
* @param location location of a static initializable variable containing `NULL`
*/
static init_enter_pointer(location: any): boolean;
/**
* Counterpart to g_once_init_enter(). Expects a location of a static
* 0-initialized initialization variable, and an initialization value
* other than 0. Sets the variable to the initialization value, and
* releases concurrent threads blocking in g_once_init_enter() on this
* initialization variable.
*
* While `location` has a `volatile` qualifier, this is a historical artifact and
* the pointer passed to it should not be `volatile`.
* @param location location of a static initializable variable containing 0
* @param result new non-0 value for `*value_location`
*/
static init_leave(location: any, result: number): any;
/**
* Counterpart to g_once_init_enter_pointer(). Expects a location of a static
* `NULL`-initialized initialization variable, and an initialization value
* other than `NULL`. Sets the variable to the initialization value, and
* releases concurrent threads blocking in g_once_init_enter_pointer() on this
* initialization variable.
*
* This functions behaves in the same way as g_once_init_leave(), but
* can be used to initialize pointers (or #guintptr) instead of #gsize.
* @param location location of a static initializable variable containing `NULL`
* @param result new non-`NULL` value for `*location`
*/
static init_leave_pointer(location: any, result?: any | null): void;
}
/**
* A `GOptionContext` struct defines which options
* are accepted by the commandline option parser. The struct has only private
* fields and should not be directly accessed.
*/
abstract class OptionContext {
static $gtype: GObject.GType<OptionContext>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Adds a #GOptionGroup to the `context,` so that parsing with `context`
* will recognize the options in the group. Note that this will take
* ownership of the `group` and thus the `group` should not be freed.
* @param group the group to add
*/
add_group(group: OptionGroup): void;
/**
* A convenience function which creates a main group if it doesn't
* exist, adds the `entries` to it and sets the translation domain.
* @param entries a %NULL-terminated array of #GOptionEntrys
* @param translation_domain a translation domain to use for translating the `--help` output for the options in @entries with gettext(), or %NULL
*/
add_main_entries(entries: OptionEntry[], translation_domain?: string | null): void;
/**
* Frees context and all the groups which have been
* added to it.
*
* Please note that parsed arguments need to be freed separately (see
* #GOptionEntry).
*/
free(): void;
/**
* Returns the description. See g_option_context_set_description().
* @returns the description
*/
get_description(): string;
/**
* Returns a formatted, translated help text for the given context.
* To obtain the text produced by `--help`, call
* `g_option_context_get_help (context, TRUE, NULL)`.
* To obtain the text produced by `--help-all`, call
* `g_option_context_get_help (context, FALSE, NULL)`.
* To obtain the help text for an option group, call
* `g_option_context_get_help (context, FALSE, group)`.
* @param main_help if %TRUE, only include the main group
* @param group the #GOptionGroup to create help for, or %NULL
* @returns A newly allocated string containing the help text
*/
get_help(main_help: boolean, group?: OptionGroup | null): string;
/**
* Returns whether automatic `--help` generation
* is turned on for `context`. See g_option_context_set_help_enabled().
* @returns %TRUE if automatic help generation is turned on.
*/
get_help_enabled(): boolean;
/**
* Returns whether unknown options are ignored or not. See
* g_option_context_set_ignore_unknown_options().
* @returns %TRUE if unknown options are ignored.
*/
get_ignore_unknown_options(): boolean;
/**
* Returns a pointer to the main group of `context`.
* @returns the main group of @context, or %NULL if @context doesn't have a main group. Note that group belongs to @context and should not be modified or freed.
*/
get_main_group(): OptionGroup;
/**
* Returns whether strict POSIX code is enabled.
*
* See g_option_context_set_strict_posix() for more information.
* @returns %TRUE if strict POSIX is enabled, %FALSE otherwise.
*/
get_strict_posix(): boolean;
/**
* Returns the summary. See g_option_context_set_summary().
* @returns the summary
*/
get_summary(): string;
/**
* Parses the command line arguments, recognizing options
* which have been added to `context`. A side-effect of
* calling this function is that g_set_prgname() will be
* called.
*
* If the parsing is successful, any parsed arguments are
* removed from the array and `argc` and `argv` are updated
* accordingly. A '--' option is stripped from `argv`
* unless there are unparsed options before and after it,
* or some of the options after it start with '-'. In case
* of an error, `argc` and `argv` are left unmodified.
*
* If automatic `--help` support is enabled
* (see g_option_context_set_help_enabled()), and the
* `argv` array contains one of the recognized help options,
* this function will produce help output to stdout and
* call `exit (0)`.
*
* Note that function depends on the
* [current locale](running.html#locale) for automatic
* character set conversion of string and filename arguments.
* @param argv a pointer to the array of command line arguments
* @returns %TRUE if the parsing was successful, %FALSE if an error occurred
*/
parse(argv?: string[]): [boolean, string[]];
/**
* Parses the command line arguments.
*
* This function is similar to g_option_context_parse() except that it
* respects the normal memory rules when dealing with a strv instead of
* assuming that the passed-in array is the argv of the main function.
*
* In particular, strings that are removed from the arguments list will
* be freed using g_free().
*
* On Windows, the strings are expected to be in UTF-8. This is in
* contrast to g_option_context_parse() which expects them to be in the
* system codepage, which is how they are passed as `argv` to main().
* See g_win32_get_command_line() for a solution.
*
* This function is useful if you are trying to use #GOptionContext with
* #GApplication.
* @param _arguments a pointer to the command line arguments (which must be in UTF-8 on Windows). Starting with GLib 2.62, @arguments can be %NULL, which matches g_option_context_parse().
* @returns %TRUE if the parsing was successful, %FALSE if an error occurred
*/
parse_strv(_arguments?: string[]): [boolean, string[]];
/**
* Adds a string to be displayed in `--help` output after the list
* of options. This text often includes a bug reporting address.
*
* Note that the summary is translated (see
* g_option_context_set_translate_func()).
* @param description a string to be shown in `--help` output after the list of options, or %NULL
*/
set_description(description?: string | null): void;
/**
* Enables or disables automatic generation of `--help` output.
* By default, g_option_context_parse() recognizes `--help`, `-h`,
* `-?`, `--help-all` and `--help-groupname` and creates suitable
* output to stdout.
* @param help_enabled %TRUE to enable `--help`, %FALSE to disable it
*/
set_help_enabled(help_enabled: boolean): void;
/**
* Sets whether to ignore unknown options or not. If an argument is
* ignored, it is left in the `argv` array after parsing. By default,
* g_option_context_parse() treats unknown options as error.
*
* This setting does not affect non-option arguments (i.e. arguments
* which don't start with a dash). But note that GOption cannot reliably
* determine whether a non-option belongs to a preceding unknown option.
* @param ignore_unknown %TRUE to ignore unknown options, %FALSE to produce an error when unknown options are met
*/
set_ignore_unknown_options(ignore_unknown: boolean): void;
/**
* Sets a #GOptionGroup as main group of the `context`.
* This has the same effect as calling g_option_context_add_group(),
* the only difference is that the options in the main group are
* treated differently when generating `--help` output.
* @param group the group to set as main group
*/
set_main_group(group: OptionGroup): void;
/**
* Sets strict POSIX mode.
*
* By default, this mode is disabled.
*
* In strict POSIX mode, the first non-argument parameter encountered
* (eg: filename) terminates argument processing. Remaining arguments
* are treated as non-options and are not attempted to be parsed.
*
* If strict POSIX mode is disabled then parsing is done in the GNU way
* where option arguments can be freely mixed with non-options.
*
* As an example, consider "ls foo -l". With GNU style parsing, this
* will list "foo" in long mode. In strict POSIX style, this will list
* the files named "foo" and "-l".
*
* It may be useful to force strict POSIX mode when creating "verb
* style" command line tools. For example, the "gsettings" command line
* tool supports the global option "--schemadir" as well as many
* subcommands ("get", "set", etc.) which each have their own set of
* arguments. Using strict POSIX mode will allow parsing the global
* options up to the verb name while leaving the remaining options to be
* parsed by the relevant subcommand (which can be determined by
* examining the verb name, which should be present in argv[1] after
* parsing).
* @param strict_posix the new value
*/
set_strict_posix(strict_posix: boolean): void;
/**
* Adds a string to be displayed in `--help` output before the list
* of options. This is typically a summary of the program functionality.
*
* Note that the summary is translated (see
* g_option_context_set_translate_func() and
* g_option_context_set_translation_domain()).
* @param summary a string to be shown in `--help` output before the list of options, or %NULL
*/
set_summary(summary?: string | null): void;
/**
* Sets the function which is used to translate the contexts
* user-visible strings, for `--help` output. If `func` is %NULL,
* strings are not translated.
*
* Note that option groups have their own translation functions,
* this function only affects the `parameter_string` (see g_option_context_new()),
* the summary (see g_option_context_set_summary()) and the description
* (see g_option_context_set_description()).
*
* If you are using gettext(), you only need to set the translation
* domain, see g_option_context_set_translation_domain().
* @param func the #GTranslateFunc, or %NULL
* @param destroy_notify a function which gets called to free @data, or %NULL
*/
set_translate_func(func?: TranslateFunc | null, destroy_notify?: DestroyNotify | null): void;
/**
* A convenience function to use gettext() for translating
* user-visible strings.
* @param domain the domain to use
*/
set_translation_domain(domain: string): void;
}
/**
* - %G_OPTION_ARG_NONE: %gboolean
* - %G_OPTION_ARG_STRING: %gchar*
* - %G_OPTION_ARG_INT: %gint
* - %G_OPTION_ARG_FILENAME: %gchar*
* - %G_OPTION_ARG_STRING_ARRAY: %gchar**
* - %G_OPTION_ARG_FILENAME_ARRAY: %gchar**
* - %G_OPTION_ARG_DOUBLE: %gdouble
*
* If `arg` type is %G_OPTION_ARG_STRING or %G_OPTION_ARG_FILENAME,
* the location will contain a newly allocated string if the option
* was given. That string needs to be freed by the callee using g_free().
* Likewise if `arg` type is %G_OPTION_ARG_STRING_ARRAY or
* %G_OPTION_ARG_FILENAME_ARRAY, the data should be freed using g_strfreev().
* A GOptionEntry struct defines a single option. To have an effect, they
* must be added to a #GOptionGroup with g_option_context_add_main_entries()
* or g_option_group_add_entries().
*/
class OptionEntry {
static $gtype: GObject.GType<OptionEntry>;
// Fields
long_name: string;
short_name: number;
flags: number;
arg: OptionArg;
arg_data: any;
description: string;
arg_description: string;
// Constructors
_init(...args: any[]): void;
}
/**
* A `GOptionGroup` struct defines the options in a single
* group. The struct has only private fields and should not be directly accessed.
*
* All options in a group share the same translation function. Libraries which
* need to parse commandline options are expected to provide a function for
* getting a `GOptionGroup` holding their options, which
* the application can then add to its #GOptionContext.
*/
class OptionGroup {
static $gtype: GObject.GType<OptionGroup>;
// Constructors
constructor(
name: string,
description: string,
help_description: string,
user_data?: any | null,
destroy?: DestroyNotify | null,
);
_init(...args: any[]): void;
static ['new'](
name: string,
description: string,
help_description: string,
user_data?: any | null,
destroy?: DestroyNotify | null,
): OptionGroup;
// Methods
/**
* Adds the options specified in `entries` to `group`.
* @param entries a %NULL-terminated array of #GOptionEntrys
*/
add_entries(entries: OptionEntry[]): void;
/**
* Frees a #GOptionGroup. Note that you must not free groups
* which have been added to a #GOptionContext.
*/
free(): void;
/**
* Increments the reference count of `group` by one.
* @returns a #GOptionGroup
*/
ref(): OptionGroup;
/**
* Sets the function which is used to translate user-visible strings,
* for `--help` output. Different groups can use different
* #GTranslateFuncs. If `func` is %NULL, strings are not translated.
*
* If you are using gettext(), you only need to set the translation
* domain, see g_option_group_set_translation_domain().
* @param func the #GTranslateFunc, or %NULL
* @param destroy_notify a function which gets called to free @data, or %NULL
*/
set_translate_func(func?: TranslateFunc | null, destroy_notify?: DestroyNotify | null): void;
/**
* A convenience function to use gettext() for translating
* user-visible strings.
* @param domain the domain to use
*/
set_translation_domain(domain: string): void;
/**
* Decrements the reference count of `group` by one.
* If the reference count drops to 0, the `group` will be freed.
* and all memory allocated by the `group` is released.
*/
unref(): void;
}
/**
* `GPathBuf` is a helper type that allows you to easily build paths from
* individual elements, using the platform specific conventions for path
* separators.
*
* ```c
* g_auto (GPathBuf) path;
*
* g_path_buf_init (&path);
*
* g_path_buf_push (&path, "usr");
* g_path_buf_push (&path, "bin");
* g_path_buf_push (&path, "echo");
*
* g_autofree char *echo = g_path_buf_to_path (&path);
* g_assert_cmpstr (echo, ==, "/usr/bin/echo");
* ```
*
* You can also load a full path and then operate on its components:
*
* ```c
* g_auto (GPathBuf) path;
*
* g_path_buf_init_from_path (&path, "/usr/bin/echo");
*
* g_path_buf_pop (&path);
* g_path_buf_push (&path, "sh");
*
* g_autofree char *sh = g_path_buf_to_path (&path);
* g_assert_cmpstr (sh, ==, "/usr/bin/sh");
* ```
*/
class PathBuf {
static $gtype: GObject.GType<PathBuf>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Static methods
/**
* Compares two path buffers for equality and returns `TRUE`
* if they are equal.
*
* The path inside the paths buffers are not going to be normalized,
* so `X/Y/Z/A/..`, `X/./Y/Z` and `X/Y/Z` are not going to be considered
* equal.
*
* This function can be passed to g_hash_table_new() as the
* `key_equal_func` parameter.
* @param v1 a path buffer to compare
* @param v2 a path buffer to compare
*/
static equal(v1: any, v2: any): boolean;
// Methods
/**
* Clears the contents of the path buffer.
*
* This function should be use to free the resources in a stack-allocated
* `GPathBuf` initialized using g_path_buf_init() or
* g_path_buf_init_from_path().
*/
clear(): void;
/**
* Clears the contents of the path buffer and returns the built path.
*
* This function returns `NULL` if the `GPathBuf` is empty.
*
* See also: g_path_buf_to_path()
* @returns the built path
*/
clear_to_path(): string | null;
/**
* Frees a `GPathBuf` allocated by g_path_buf_new().
*/
free(): void;
/**
* Frees a `GPathBuf` allocated by g_path_buf_new(), and
* returns the path inside the buffer.
*
* This function returns `NULL` if the `GPathBuf` is empty.
*
* See also: g_path_buf_to_path()
* @returns the path
*/
free_to_path(): string | null;
/**
* Initializes a `GPathBuf` instance.
* @returns the initialized path builder
*/
init(): PathBuf;
/**
* Initializes a `GPathBuf` instance with the given path.
* @param path a file system path
* @returns the initialized path builder
*/
init_from_path(path?: string | null): PathBuf;
/**
* Removes the last element of the path buffer.
*
* If there is only one element in the path buffer (for example, `/` on
* Unix-like operating systems or the drive on Windows systems), it will
* not be removed and %FALSE will be returned instead.
*
*
* ```c
* GPathBuf buf, cmp;
*
* g_path_buf_init_from_path (&buf, "/bin/sh");
*
* g_path_buf_pop (&buf);
* g_path_buf_init_from_path (&cmp, "/bin");
* g_assert_true (g_path_buf_equal (&buf, &cmp));
* g_path_buf_clear (&cmp);
*
* g_path_buf_pop (&buf);
* g_path_buf_init_from_path (&cmp, "/");
* g_assert_true (g_path_buf_equal (&buf, &cmp));
* g_path_buf_clear (&cmp);
*
* g_path_buf_clear (&buf);
* ```
*
* @returns `TRUE` if the buffer was modified and `FALSE` otherwise
*/
pop(): boolean;
/**
* Extends the given path buffer with `path`.
*
* If `path` is absolute, it replaces the current path.
*
* If `path` contains a directory separator, the buffer is extended by
* as many elements the path provides.
*
* On Windows, both forward slashes and backslashes are treated as
* directory separators. On other platforms, %G_DIR_SEPARATOR_S is the
* only directory separator.
*
*
* ```c
* GPathBuf buf, cmp;
*
* g_path_buf_init_from_path (&buf, "/tmp");
* g_path_buf_push (&buf, ".X11-unix/X0");
* g_path_buf_init_from_path (&cmp, "/tmp/.X11-unix/X0");
* g_assert_true (g_path_buf_equal (&buf, &cmp));
* g_path_buf_clear (&cmp);
*
* g_path_buf_push (&buf, "/etc/locale.conf");
* g_path_buf_init_from_path (&cmp, "/etc/locale.conf");
* g_assert_true (g_path_buf_equal (&buf, &cmp));
* g_path_buf_clear (&cmp);
*
* g_path_buf_clear (&buf);
* ```
*
* @param path a path
* @returns the same pointer to @buf, for convenience
*/
push(path: string): PathBuf;
/**
* Adds an extension to the file name in the path buffer.
*
* If `extension` is `NULL`, the extension will be unset.
*
* If the path buffer does not have a file name set, this function returns
* `FALSE` and leaves the path buffer unmodified.
* @param extension the file extension
* @returns `TRUE` if the extension was replaced, and `FALSE` otherwise
*/
set_extension(extension?: string | null): boolean;
/**
* Sets the file name of the path.
*
* If the path buffer is empty, the filename is left unset and this
* function returns `FALSE`.
*
* If the path buffer only contains the root element (on Unix-like operating
* systems) or the drive (on Windows), this is the equivalent of pushing
* the new `file_name`.
*
* If the path buffer contains a path, this is the equivalent of
* popping the path buffer and pushing `file_name,` creating a
* sibling of the original path.
*
*
* ```c
* GPathBuf buf, cmp;
*
* g_path_buf_init_from_path (&buf, "/");
*
* g_path_buf_set_filename (&buf, "bar");
* g_path_buf_init_from_path (&cmp, "/bar");
* g_assert_true (g_path_buf_equal (&buf, &cmp));
* g_path_buf_clear (&cmp);
*
* g_path_buf_set_filename (&buf, "baz.txt");
* g_path_buf_init_from_path (&cmp, "/baz.txt");
* g_assert_true (g_path_buf_equal (&buf, &cmp);
* g_path_buf_clear (&cmp);
*
* g_path_buf_clear (&buf);
* ```
*
* @param file_name the file name in the path
* @returns `TRUE` if the file name was replaced, and `FALSE` otherwise
*/
set_filename(file_name: string): boolean;
/**
* Retrieves the built path from the path buffer.
*
* On Windows, the result contains backslashes as directory separators,
* even if forward slashes were used in input.
*
* If the path buffer is empty, this function returns `NULL`.
* @returns the path
*/
to_path(): string | null;
}
/**
* A `GPatternSpec` struct is the compiled form of a glob-style pattern.
*
* The [func`GLib`.pattern_match_simple] and [method`GLib`.PatternSpec.match] functions
* match a string against a pattern containing `*` and `?` wildcards with similar
* semantics as the standard `glob()` function: `*` matches an arbitrary,
* possibly empty, string, `?` matches an arbitrary character.
*
* Note that in contrast to [`glob()`](man:glob(3)), the `/` character can be
* matched by the wildcards, there are no `[…]` character ranges and `*` and `?`
* can not be escaped to include them literally in a pattern.
*
* When multiple strings must be matched against the same pattern, it is better
* to compile the pattern to a [struct`GLib`.PatternSpec] using
* [ctor`GLib`.PatternSpec.new] and use [method`GLib`.PatternSpec.match_string]
* instead of [func`GLib`.pattern_match_simple]. This avoids the overhead of repeated
* pattern compilation.
*/
class PatternSpec {
static $gtype: GObject.GType<PatternSpec>;
// Constructors
constructor(pattern: string);
_init(...args: any[]): void;
static ['new'](pattern: string): PatternSpec;
// Methods
/**
* Copies `pspec` in a new [type`GLib`.PatternSpec].
* @returns a copy of @pspec.
*/
copy(): PatternSpec;
/**
* Compares two compiled pattern specs and returns whether they will
* match the same set of strings.
* @param pspec2 another #GPatternSpec
* @returns Whether the compiled patterns are equal
*/
equal(pspec2: PatternSpec): boolean;
/**
* Frees the memory allocated for the [type`GLib`.PatternSpec].
*/
free(): void;
/**
* Matches a string against a compiled pattern.
*
* Passing the correct
* length of the string given is mandatory. The reversed string can be
* omitted by passing `NULL`, this is more efficient if the reversed
* version of the string to be matched is not at hand, as
* [method`GLib`.PatternSpec.match] will only construct it if the compiled pattern
* requires reverse matches.
*
* Note that, if the user code will (possibly) match a string against a
* multitude of patterns containing wildcards, chances are high that
* some patterns will require a reversed string. In this case, its
* more efficient to provide the reversed string to avoid multiple
* constructions thereof in the various calls to [method`GLib`.PatternSpec.match].
*
* Note also that the reverse of a UTF-8 encoded string can in general
* not be obtained by [func`GLib`.strreverse]. This works only if the string
* does not contain any multibyte characters. GLib offers the
* [func`GLib`.utf8_strreverse] function to reverse UTF-8 encoded strings.
* @param string_length the length of @string (in bytes, i.e. `strlen()`, not [func@GLib.utf8_strlen])
* @param string the UTF-8 encoded string to match
* @param string_reversed the reverse of @string
* @returns %TRUE if @string matches @pspec
*/
match(string_length: number, string: string, string_reversed?: string | null): boolean;
/**
* Matches a string against a compiled pattern.
*
* If the string is to be
* matched against more than one pattern, consider using
* [method`GLib`.PatternSpec.match] instead while supplying the reversed string.
* @param string the UTF-8 encoded string to match
* @returns %TRUE if @string matches @pspec
*/
match_string(string: string): boolean;
}
/**
* Represents a file descriptor, which events to poll for, and which events
* occurred.
*/
class PollFD {
static $gtype: GObject.GType<PollFD>;
// Fields
fd: number;
events: number;
revents: number;
// Constructors
constructor(
properties?: Partial<{
fd: number;
events: number;
revents: number;
}>,
);
_init(...args: any[]): void;
}
/**
* The #GPrivate struct is an opaque data structure to represent a
* thread-local data key. It is approximately equivalent to the
* pthread_setspecific()/pthread_getspecific() APIs on POSIX and to
* TlsSetValue()/TlsGetValue() on Windows.
*
* If you don't already know why you might want this functionality,
* then you probably don't need it.
*
* #GPrivate is a very limited resource (as far as 128 per program,
* shared between all libraries). It is also not possible to destroy a
* #GPrivate after it has been used. As such, it is only ever acceptable
* to use #GPrivate in static scope, and even then sparingly so.
*
* See G_PRIVATE_INIT() for a couple of examples.
*
* The #GPrivate structure should be considered opaque. It should only
* be accessed via the g_private_ functions.
*/
class Private {
static $gtype: GObject.GType<Private>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Returns the current value of the thread local variable `key`.
*
* If the value has not yet been set in this thread, %NULL is returned.
* Values are never copied between threads (when a new thread is
* created, for example).
* @returns the thread-local value
*/
get(): any | null;
/**
* Sets the thread local variable `key` to have the value `value` in the
* current thread.
*
* This function differs from g_private_set() in the following way: if
* the previous value was non-%NULL then the #GDestroyNotify handler for
* `key` is run on it.
* @param value the new value
*/
replace(value?: any | null): void;
/**
* Sets the thread local variable `key` to have the value `value` in the
* current thread.
*
* This function differs from g_private_replace() in the following way:
* the #GDestroyNotify for `key` is not called on the old value.
* @param value the new value
*/
set(value?: any | null): void;
}
/**
* Contains the public fields of a pointer array.
*/
class PtrArray {
static $gtype: GObject.GType<PtrArray>;
// Fields
pdata: any;
len: number;
// Constructors
constructor(
properties?: Partial<{
pdata: any;
len: number;
}>,
);
_init(...args: any[]): void;
}
/**
* Contains the public fields of a
* [Queue](data-structures.html#double-ended-queues).
*/
class Queue {
static $gtype: GObject.GType<Queue>;
// Fields
head: any[];
tail: any[];
length: number;
// Constructors
constructor(
properties?: Partial<{
length: number;
}>,
);
_init(...args: any[]): void;
// Methods
/**
* Removes all the elements in `queue`. If queue elements contain
* dynamically-allocated memory, they should be freed first.
*/
clear(): void;
/**
* Convenience method, which frees all the memory used by a #GQueue,
* and calls the provided `free_func` on each item in the #GQueue.
* @param free_func the function to be called to free memory allocated
*/
clear_full(free_func?: DestroyNotify | null): void;
/**
* Calls `func` for each element in the queue passing `user_data` to the
* function.
*
* It is safe for `func` to remove the element from `queue,` but it must
* not modify any part of the queue after that element.
* @param func the function to call for each element's data
*/
foreach(func: Func): void;
/**
* Frees the memory allocated for the #GQueue. Only call this function
* if `queue` was created with g_queue_new(). If queue elements contain
* dynamically-allocated memory, they should be freed first.
*
* If queue elements contain dynamically-allocated memory, you should
* either use g_queue_free_full() or free them manually first.
*/
free(): void;
/**
* Convenience method, which frees all the memory used by a #GQueue,
* and calls the specified destroy function on every element's data.
*
* `free_func` should not modify the queue (eg, by removing the freed
* element from it).
*/
free_full(): void;
/**
* Returns the number of items in `queue`.
* @returns the number of items in @queue
*/
get_length(): number;
/**
* Returns the position of the first element in `queue` which contains `data`.
* @param data the data to find
* @returns the position of the first element in @queue which contains @data, or -1 if no element in @queue contains @data
*/
index(data?: any | null): number;
/**
* A statically-allocated #GQueue must be initialized with this function
* before it can be used. Alternatively you can initialize it with
* %G_QUEUE_INIT. It is not necessary to initialize queues created with
* g_queue_new().
*/
init(): void;
/**
* Inserts `data` into `queue` using `func` to determine the new position.
* @param data the data to insert
* @param func the #GCompareDataFunc used to compare elements in the queue. It is called with two elements of the @queue and @user_data. It should return 0 if the elements are equal, a negative value if the first element comes before the second, and a positive value if the second element comes before the first.
*/
insert_sorted(data: any | null, func: CompareDataFunc): void;
/**
* Returns %TRUE if the queue is empty.
* @returns %TRUE if the queue is empty
*/
is_empty(): boolean;
/**
* Returns the first element of the queue.
* @returns the data of the first element in the queue, or %NULL if the queue is empty
*/
peek_head(): any | null;
/**
* Returns the `n'`th element of `queue`.
* @param n the position of the element
* @returns the data for the @n'th element of @queue, or %NULL if @n is off the end of @queue
*/
peek_nth(n: number): any | null;
/**
* Returns the last element of the queue.
* @returns the data of the last element in the queue, or %NULL if the queue is empty
*/
peek_tail(): any | null;
/**
* Removes the first element of the queue and returns its data.
* @returns the data of the first element in the queue, or %NULL if the queue is empty
*/
pop_head(): any | null;
/**
* Removes the `n'`th element of `queue` and returns its data.
* @param n the position of the element
* @returns the element's data, or %NULL if @n is off the end of @queue
*/
pop_nth(n: number): any | null;
/**
* Removes the last element of the queue and returns its data.
* @returns the data of the last element in the queue, or %NULL if the queue is empty
*/
pop_tail(): any | null;
/**
* Adds a new element at the head of the queue.
* @param data the data for the new element.
*/
push_head(data?: any | null): void;
/**
* Inserts a new element into `queue` at the given position.
* @param data the data for the new element
* @param n the position to insert the new element. If @n is negative or larger than the number of elements in the @queue, the element is added to the end of the queue.
*/
push_nth(data: any | null, n: number): void;
/**
* Adds a new element at the tail of the queue.
* @param data the data for the new element
*/
push_tail(data?: any | null): void;
/**
* Removes the first element in `queue` that contains `data`.
* @param data the data to remove
* @returns %TRUE if @data was found and removed from @queue
*/
remove(data?: any | null): boolean;
/**
* Remove all elements whose data equals `data` from `queue`.
* @param data the data to remove
* @returns the number of elements removed from @queue
*/
remove_all(data?: any | null): number;
/**
* Reverses the order of the items in `queue`.
*/
reverse(): void;
/**
* Sorts `queue` using `compare_func`.
* @param compare_func the #GCompareDataFunc used to sort @queue. This function is passed two elements of the queue and should return 0 if they are equal, a negative value if the first comes before the second, and a positive value if the second comes before the first.
*/
sort(compare_func: CompareDataFunc): void;
}
/**
* The GRWLock struct is an opaque data structure to represent a
* reader-writer lock. It is similar to a #GMutex in that it allows
* multiple threads to coordinate access to a shared resource.
*
* The difference to a mutex is that a reader-writer lock discriminates
* between read-only ('reader') and full ('writer') access. While only
* one thread at a time is allowed write access (by holding the 'writer'
* lock via g_rw_lock_writer_lock()), multiple threads can gain
* simultaneous read-only access (by holding the 'reader' lock via
* g_rw_lock_reader_lock()).
*
* It is unspecified whether readers or writers have priority in acquiring the
* lock when a reader already holds the lock and a writer is queued to acquire
* it.
*
* Here is an example for an array with access functions:
*
* ```c
* GRWLock lock;
* GPtrArray *array;
*
* gpointer
* my_array_get (guint index)
* {
* gpointer retval = NULL;
*
* if (!array)
* return NULL;
*
* g_rw_lock_reader_lock (&lock);
* if (index < array->len)
* retval = g_ptr_array_index (array, index);
* g_rw_lock_reader_unlock (&lock);
*
* return retval;
* }
*
* void
* my_array_set (guint index, gpointer data)
* {
* g_rw_lock_writer_lock (&lock);
*
* if (!array)
* array = g_ptr_array_new ();
*
* if (index >= array->len)
* g_ptr_array_set_size (array, index+1);
* g_ptr_array_index (array, index) = data;
*
* g_rw_lock_writer_unlock (&lock);
* }
* ```
*
* This example shows an array which can be accessed by many readers
* (the my_array_get() function) simultaneously, whereas the writers
* (the my_array_set() function) will only be allowed one at a time
* and only if no readers currently access the array. This is because
* of the potentially dangerous resizing of the array. Using these
* functions is fully multi-thread safe now.
*
* If a #GRWLock is allocated in static storage then it can be used
* without initialisation. Otherwise, you should call
* g_rw_lock_init() on it and g_rw_lock_clear() when done.
*
* A GRWLock should only be accessed with the g_rw_lock_ functions.
*/
class RWLock {
static $gtype: GObject.GType<RWLock>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Methods
/**
* Frees the resources allocated to a lock with g_rw_lock_init().
*
* This function should not be used with a #GRWLock that has been
* statically allocated.
*
* Calling g_rw_lock_clear() when any thread holds the lock
* leads to undefined behaviour.
*/
clear(): void;
/**
* Initializes a #GRWLock so that it can be used.
*
* This function is useful to initialize a lock that has been
* allocated on the stack, or as part of a larger structure. It is not
* necessary to initialise a reader-writer lock that has been statically
* allocated.
*
*
* ```c
* typedef struct {
* GRWLock l;
* ...
* } Blob;
*
* Blob *b;
*
* b = g_new (Blob, 1);
* g_rw_lock_init (&b->l);
* ```
*
*
* To undo the effect of g_rw_lock_init() when a lock is no longer
* needed, use g_rw_lock_clear().
*
* Calling g_rw_lock_init() on an already initialized #GRWLock leads
* to undefined behaviour.
*/
init(): void;
/**
* Obtain a read lock on `rw_lock`. If another thread currently holds
* the write lock on `rw_lock,` the current thread will block until the
* write lock was (held and) released. If another thread does not hold
* the write lock, but is waiting for it, it is implementation defined
* whether the reader or writer will block. Read locks can be taken
* recursively.
*
* Calling g_rw_lock_reader_lock() while the current thread already
* owns a write lock leads to undefined behaviour. Read locks however
* can be taken recursively, in which case you need to make sure to
* call g_rw_lock_reader_unlock() the same amount of times.
*
* It is implementation-defined how many read locks are allowed to be
* held on the same lock simultaneously. If the limit is hit,
* or if a deadlock is detected, a critical warning will be emitted.
*/
reader_lock(): void;
/**
* Tries to obtain a read lock on `rw_lock` and returns %TRUE if
* the read lock was successfully obtained. Otherwise it
* returns %FALSE.
* @returns %TRUE if @rw_lock could be locked
*/
reader_trylock(): boolean;
/**
* Release a read lock on `rw_lock`.
*
* Calling g_rw_lock_reader_unlock() on a lock that is not held
* by the current thread leads to undefined behaviour.
*/
reader_unlock(): void;
/**
* Obtain a write lock on `rw_lock`. If another thread currently holds
* a read or write lock on `rw_lock,` the current thread will block
* until all other threads have dropped their locks on `rw_lock`.
*
* Calling g_rw_lock_writer_lock() while the current thread already
* owns a read or write lock on `rw_lock` leads to undefined behaviour.
*/
writer_lock(): void;
/**
* Tries to obtain a write lock on `rw_lock`. If another thread
* currently holds a read or write lock on `rw_lock,` it immediately
* returns %FALSE.
* Otherwise it locks `rw_lock` and returns %TRUE.
* @returns %TRUE if @rw_lock could be locked
*/
writer_trylock(): boolean;
/**
* Release a write lock on `rw_lock`.
*
* Calling g_rw_lock_writer_unlock() on a lock that is not held
* by the current thread leads to undefined behaviour.
*/
writer_unlock(): void;
}
/**
* The GRand struct is an opaque data structure. It should only be
* accessed through the g_rand_* functions.
*/
class Rand {
static $gtype: GObject.GType<Rand>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
static ['new'](): Rand;
static new_with_seed(seed: number): Rand;
static new_with_seed_array(seed: number, seed_length: number): Rand;
// Methods
/**
* Copies a #GRand into a new one with the same exact state as before.
* This way you can take a snapshot of the random number generator for
* replaying later.
* @returns the new #GRand
*/
copy(): Rand;
/**
* Returns the next random #gdouble from `rand_` equally distributed over
* the range [0..1).
* @returns a random number
*/
double(): number;
/**
* Returns the next random #gdouble from `rand_` equally distributed over
* the range [`begin`..`end)`.
* @param begin lower closed bound of the interval
* @param end upper open bound of the interval
* @returns a random number
*/
double_range(begin: number, end: number): number;
/**
* Frees the memory allocated for the #GRand.
*/
free(): void;
/**
* Returns the next random #guint32 from `rand_` equally distributed over
* the range [0..2^32-1].
* @returns a random number
*/
int(): number;
/**
* Returns the next random #gint32 from `rand_` equally distributed over
* the range [`begin`..`end-1`].
* @param begin lower closed bound of the interval
* @param end upper open bound of the interval
* @returns a random number
*/
int_range(begin: number, end: number): number;
/**
* Sets the seed for the random number generator #GRand to `seed`.
* @param seed a value to reinitialize the random number generator
*/
set_seed(seed: number): void;
/**
* Initializes the random number generator by an array of longs.
* Array can be of arbitrary size, though only the first 624 values
* are taken. This function is useful if you have many low entropy
* seeds, or if you require more then 32 bits of actual entropy for
* your application.
* @param seed array to initialize with
* @param seed_length length of array
*/
set_seed_array(seed: number, seed_length: number): void;
}
/**
* The GRecMutex struct is an opaque data structure to represent a
* recursive mutex. It is similar to a #GMutex with the difference
* that it is possible to lock a GRecMutex multiple times in the same
* thread without deadlock. When doing so, care has to be taken to
* unlock the recursive mutex as often as it has been locked.
*
* If a #GRecMutex is allocated in static storage then it can be used
* without initialisation. Otherwise, you should call
* g_rec_mutex_init() on it and g_rec_mutex_clear() when done.
*
* A GRecMutex should only be accessed with the
* g_rec_mutex_ functions.
*/
class RecMutex {
static $gtype: GObject.GType<RecMutex>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Methods
/**
* Frees the resources allocated to a recursive mutex with
* g_rec_mutex_init().
*
* This function should not be used with a #GRecMutex that has been
* statically allocated.
*
* Calling g_rec_mutex_clear() on a locked recursive mutex leads
* to undefined behaviour.
*/
clear(): void;
/**
* Initializes a #GRecMutex so that it can be used.
*
* This function is useful to initialize a recursive mutex
* that has been allocated on the stack, or as part of a larger
* structure.
*
* It is not necessary to initialise a recursive mutex that has been
* statically allocated.
*
*
* ```c
* typedef struct {
* GRecMutex m;
* ...
* } Blob;
*
* Blob *b;
*
* b = g_new (Blob, 1);
* g_rec_mutex_init (&b->m);
* ```
*
*
* Calling g_rec_mutex_init() on an already initialized #GRecMutex
* leads to undefined behaviour.
*
* To undo the effect of g_rec_mutex_init() when a recursive mutex
* is no longer needed, use g_rec_mutex_clear().
*/
init(): void;
/**
* Locks `rec_mutex`. If `rec_mutex` is already locked by another
* thread, the current thread will block until `rec_mutex` is
* unlocked by the other thread. If `rec_mutex` is already locked
* by the current thread, the 'lock count' of `rec_mutex` is increased.
* The mutex will only become available again when it is unlocked
* as many times as it has been locked.
*/
lock(): void;
/**
* Tries to lock `rec_mutex`. If `rec_mutex` is already locked
* by another thread, it immediately returns %FALSE. Otherwise
* it locks `rec_mutex` and returns %TRUE.
* @returns %TRUE if @rec_mutex could be locked
*/
trylock(): boolean;
/**
* Unlocks `rec_mutex`. If another thread is blocked in a
* g_rec_mutex_lock() call for `rec_mutex,` it will become unblocked
* and can lock `rec_mutex` itself.
*
* Calling g_rec_mutex_unlock() on a recursive mutex that is not
* locked by the current thread leads to undefined behaviour.
*/
unlock(): void;
}
/**
* A `GRegex` is the "compiled" form of a regular expression pattern.
*
* `GRegex` implements regular expression pattern matching using syntax and
* semantics similar to Perl regular expression. See the
* [PCRE documentation](man:pcrepattern(3)) for the syntax definition.
*
* Some functions accept a `start_position` argument, setting it differs
* from just passing over a shortened string and setting %G_REGEX_MATCH_NOTBOL
* in the case of a pattern that begins with any kind of lookbehind assertion.
* For example, consider the pattern "\Biss\B" which finds occurrences of "iss"
* in the middle of words. ("\B" matches only if the current position in the
* subject is not a word boundary.) When applied to the string "Mississipi"
* from the fourth byte, namely "issipi", it does not match, because "\B" is
* always false at the start of the subject, which is deemed to be a word
* boundary. However, if the entire string is passed , but with
* `start_position` set to 4, it finds the second occurrence of "iss" because
* it is able to look behind the starting point to discover that it is
* preceded by a letter.
*
* Note that, unless you set the %G_REGEX_RAW flag, all the strings passed
* to these functions must be encoded in UTF-8. The lengths and the positions
* inside the strings are in bytes and not in characters, so, for instance,
* "\xc3\xa0" (i.e. "à") is two bytes long but it is treated as a
* single character. If you set %G_REGEX_RAW the strings can be non-valid
* UTF-8 strings and a byte is treated as a character, so "\xc3\xa0" is two
* bytes and two characters long.
*
* When matching a pattern, "\n" matches only against a "\n" character in
* the string, and "\r" matches only a "\r" character. To match any newline
* sequence use "\R". This particular group matches either the two-character
* sequence CR + LF ("\r\n"), or one of the single characters LF (linefeed,
* U+000A, "\n"), VT vertical tab, U+000B, "\v"), FF (formfeed, U+000C, "\f"),
* CR (carriage return, U+000D, "\r"), NEL (next line, U+0085), LS (line
* separator, U+2028), or PS (paragraph separator, U+2029).
*
* The behaviour of the dot, circumflex, and dollar metacharacters are
* affected by newline characters, the default is to recognize any newline
* character (the same characters recognized by "\R"). This can be changed
* with `G_REGEX_NEWLINE_CR`, `G_REGEX_NEWLINE_LF` and `G_REGEX_NEWLINE_CRLF`
* compile options, and with `G_REGEX_MATCH_NEWLINE_ANY`,
* `G_REGEX_MATCH_NEWLINE_CR`, `G_REGEX_MATCH_NEWLINE_LF` and
* `G_REGEX_MATCH_NEWLINE_CRLF` match options. These settings are also
* relevant when compiling a pattern if `G_REGEX_EXTENDED` is set, and an
* unescaped "#" outside a character class is encountered. This indicates
* a comment that lasts until after the next newline.
*
* Creating and manipulating the same `GRegex` structure from different
* threads is not a problem as `GRegex` does not modify its internal
* state between creation and destruction, on the other hand `GMatchInfo`
* is not threadsafe.
*
* The regular expressions low-level functionalities are obtained through
* the excellent [PCRE](http://www.pcre.org/) library written by Philip Hazel.
*/
class Regex {
static $gtype: GObject.GType<Regex>;
// Constructors
constructor(pattern: string, compile_options: RegexCompileFlags, match_options: RegexMatchFlags);
_init(...args: any[]): void;
static ['new'](pattern: string, compile_options: RegexCompileFlags, match_options: RegexMatchFlags): Regex;
// Static methods
/**
* Checks whether `replacement` is a valid replacement string
* (see g_regex_replace()), i.e. that all escape sequences in
* it are valid.
*
* If `has_references` is not %NULL then `replacement` is checked
* for pattern references. For instance, replacement text 'foo\n'
* does not contain references and may be evaluated without information
* about actual match, but '\0\1' (whole match followed by first
* subpattern) requires valid #GMatchInfo object.
* @param replacement the replacement string
*/
static check_replacement(replacement: string): [boolean, boolean];
static error_quark(): Quark;
/**
* Escapes the nul characters in `string` to "\x00". It can be used
* to compile a regex with embedded nul characters.
*
* For completeness, `length` can be -1 for a nul-terminated string.
* In this case the output string will be of course equal to `string`.
* @param string the string to escape
* @param length the length of @string
*/
static escape_nul(string: string, length: number): string;
/**
* Escapes the special characters used for regular expressions
* in `string,` for instance "a.b*c" becomes "a\.b\*c". This
* function is useful to dynamically generate regular expressions.
*
* `string` can contain nul characters that are replaced with "\0",
* in this case remember to specify the correct length of `string`
* in `length`.
* @param string the string to escape
* @param length the length of @string, in bytes, or -1 if @string is nul-terminated
*/
static escape_string(string: string, length: number): string;
/**
* Scans for a match in `string` for `pattern`.
*
* This function is equivalent to g_regex_match() but it does not
* require to compile the pattern with g_regex_new(), avoiding some
* lines of code when you need just to do a match without extracting
* substrings, capture counts, and so on.
*
* If this function is to be called on the same `pattern` more than
* once, it's more efficient to compile the pattern once with
* g_regex_new() and then use g_regex_match().
* @param pattern the regular expression
* @param string the string to scan for matches
* @param compile_options compile options for the regular expression, or 0
* @param match_options match options, or 0
*/
static match_simple(
pattern: string,
string: string,
compile_options: RegexCompileFlags,
match_options: RegexMatchFlags,
): boolean;
/**
* Breaks the string on the pattern, and returns an array of
* the tokens. If the pattern contains capturing parentheses,
* then the text for each of the substrings will also be returned.
* If the pattern does not match anywhere in the string, then the
* whole string is returned as the first token.
*
* This function is equivalent to g_regex_split() but it does
* not require to compile the pattern with g_regex_new(), avoiding
* some lines of code when you need just to do a split without
* extracting substrings, capture counts, and so on.
*
* If this function is to be called on the same `pattern` more than
* once, it's more efficient to compile the pattern once with
* g_regex_new() and then use g_regex_split().
*
* As a special case, the result of splitting the empty string ""
* is an empty vector, not a vector containing a single string.
* The reason for this special case is that being able to represent
* an empty vector is typically more useful than consistent handling
* of empty elements. If you do need to represent empty elements,
* you'll need to check for the empty string before calling this
* function.
*
* A pattern that can match empty strings splits `string` into
* separate characters wherever it matches the empty string between
* characters. For example splitting "ab c" using as a separator
* "\s*", you will get "a", "b" and "c".
* @param pattern the regular expression
* @param string the string to scan for matches
* @param compile_options compile options for the regular expression, or 0
* @param match_options match options, or 0
*/
static split_simple(
pattern: string,
string: string,
compile_options: RegexCompileFlags,
match_options: RegexMatchFlags,
): string[];
// Methods
/**
* Returns the number of capturing subpatterns in the pattern.
* @returns the number of capturing subpatterns
*/
get_capture_count(): number;
/**
* Returns the compile options that `regex` was created with.
*
* Depending on the version of PCRE that is used, this may or may not
* include flags set by option expressions such as `(?i)` found at the
* top-level within the compiled pattern.
* @returns flags from #GRegexCompileFlags
*/
get_compile_flags(): RegexCompileFlags;
/**
* Checks whether the pattern contains explicit CR or LF references.
* @returns %TRUE if the pattern contains explicit CR or LF references
*/
get_has_cr_or_lf(): boolean;
/**
* Returns the match options that `regex` was created with.
* @returns flags from #GRegexMatchFlags
*/
get_match_flags(): RegexMatchFlags;
/**
* Returns the number of the highest back reference
* in the pattern, or 0 if the pattern does not contain
* back references.
* @returns the number of the highest back reference
*/
get_max_backref(): number;
/**
* Gets the number of characters in the longest lookbehind assertion in the
* pattern. This information is useful when doing multi-segment matching using
* the partial matching facilities.
* @returns the number of characters in the longest lookbehind assertion.
*/
get_max_lookbehind(): number;
/**
* Gets the pattern string associated with `regex,` i.e. a copy of
* the string passed to g_regex_new().
* @returns the pattern of @regex
*/
get_pattern(): string;
/**
* Retrieves the number of the subexpression named `name`.
* @param name name of the subexpression
* @returns The number of the subexpression or -1 if @name does not exists
*/
get_string_number(name: string): number;
/**
* Scans for a match in `string` for the pattern in `regex`.
* The `match_options` are combined with the match options specified
* when the `regex` structure was created, letting you have more
* flexibility in reusing #GRegex structures.
*
* Unless %G_REGEX_RAW is specified in the options, `string` must be valid UTF-8.
*
* A #GMatchInfo structure, used to get information on the match,
* is stored in `match_info` if not %NULL. Note that if `match_info`
* is not %NULL then it is created even if the function returns %FALSE,
* i.e. you must free it regardless if regular expression actually matched.
*
* To retrieve all the non-overlapping matches of the pattern in
* string you can use g_match_info_next().
*
*
* ```c
* static void
* print_uppercase_words (const gchar *string)
* {
* // Print all uppercase-only words.
* GRegex *regex;
* GMatchInfo *match_info;
*
* regex = g_regex_new ("[A-Z]+", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
* g_regex_match (regex, string, 0, &match_info);
* while (g_match_info_matches (match_info))
* {
* gchar *word = g_match_info_fetch (match_info, 0);
* g_print ("Found: %s\n", word);
* g_free (word);
* g_match_info_next (match_info, NULL);
* }
* g_match_info_free (match_info);
* g_regex_unref (regex);
* }
* ```
*
*
* `string` is not copied and is used in #GMatchInfo internally. If
* you use any #GMatchInfo method (except g_match_info_free()) after
* freeing or modifying `string` then the behaviour is undefined.
* @param string the string to scan for matches
* @param match_options match options
* @returns %TRUE is the string matched, %FALSE otherwise
*/
match(string: string, match_options: RegexMatchFlags | null): [boolean, MatchInfo | null];
/**
* Using the standard algorithm for regular expression matching only
* the longest match in the string is retrieved. This function uses
* a different algorithm so it can retrieve all the possible matches.
* For more documentation see g_regex_match_all_full().
*
* A #GMatchInfo structure, used to get information on the match, is
* stored in `match_info` if not %NULL. Note that if `match_info` is
* not %NULL then it is created even if the function returns %FALSE,
* i.e. you must free it regardless if regular expression actually
* matched.
*
* `string` is not copied and is used in #GMatchInfo internally. If
* you use any #GMatchInfo method (except g_match_info_free()) after
* freeing or modifying `string` then the behaviour is undefined.
* @param string the string to scan for matches
* @param match_options match options
* @returns %TRUE is the string matched, %FALSE otherwise
*/
match_all(string: string, match_options: RegexMatchFlags | null): [boolean, MatchInfo | null];
/**
* Using the standard algorithm for regular expression matching only
* the longest match in the `string` is retrieved, it is not possible
* to obtain all the available matches. For instance matching
* `"<a> <b> <c>"` against the pattern `"<.*>"`
* you get `"<a> <b> <c>"`.
*
* This function uses a different algorithm (called DFA, i.e. deterministic
* finite automaton), so it can retrieve all the possible matches, all
* starting at the same point in the string. For instance matching
* `"<a> <b> <c>"` against the pattern `"<.*>"`
* you would obtain three matches: `"<a> <b> <c>"`,
* `"<a> <b>"` and `"<a>"`.
*
* The number of matched strings is retrieved using
* g_match_info_get_match_count(). To obtain the matched strings and
* their position you can use, respectively, g_match_info_fetch() and
* g_match_info_fetch_pos(). Note that the strings are returned in
* reverse order of length; that is, the longest matching string is
* given first.
*
* Note that the DFA algorithm is slower than the standard one and it
* is not able to capture substrings, so backreferences do not work.
*
* Setting `start_position` differs from just passing over a shortened
* string and setting %G_REGEX_MATCH_NOTBOL in the case of a pattern
* that begins with any kind of lookbehind assertion, such as "\b".
*
* Unless %G_REGEX_RAW is specified in the options, `string` must be valid UTF-8.
*
* A #GMatchInfo structure, used to get information on the match, is
* stored in `match_info` if not %NULL. Note that if `match_info` is
* not %NULL then it is created even if the function returns %FALSE,
* i.e. you must free it regardless if regular expression actually
* matched.
*
* `string` is not copied and is used in #GMatchInfo internally. If
* you use any #GMatchInfo method (except g_match_info_free()) after
* freeing or modifying `string` then the behaviour is undefined.
* @param string the string to scan for matches
* @param start_position starting index of the string to match, in bytes
* @param match_options match options
* @returns %TRUE is the string matched, %FALSE otherwise
*/
match_all_full(
string: string[],
start_position: number,
match_options: RegexMatchFlags | null,
): [boolean, MatchInfo | null];
/**
* Scans for a match in `string` for the pattern in `regex`.
* The `match_options` are combined with the match options specified
* when the `regex` structure was created, letting you have more
* flexibility in reusing #GRegex structures.
*
* Setting `start_position` differs from just passing over a shortened
* string and setting %G_REGEX_MATCH_NOTBOL in the case of a pattern
* that begins with any kind of lookbehind assertion, such as "\b".
*
* Unless %G_REGEX_RAW is specified in the options, `string` must be valid UTF-8.
*
* A #GMatchInfo structure, used to get information on the match, is
* stored in `match_info` if not %NULL. Note that if `match_info` is
* not %NULL then it is created even if the function returns %FALSE,
* i.e. you must free it regardless if regular expression actually
* matched.
*
* `string` is not copied and is used in #GMatchInfo internally. If
* you use any #GMatchInfo method (except g_match_info_free()) after
* freeing or modifying `string` then the behaviour is undefined.
*
* To retrieve all the non-overlapping matches of the pattern in
* string you can use g_match_info_next().
*
*
* ```c
* static void
* print_uppercase_words (const gchar *string)
* {
* // Print all uppercase-only words.
* GRegex *regex;
* GMatchInfo *match_info;
* GError *error = NULL;
*
* regex = g_regex_new ("[A-Z]+", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
* g_regex_match_full (regex, string, -1, 0, 0, &match_info, &error);
* while (g_match_info_matches (match_info))
* {
* gchar *word = g_match_info_fetch (match_info, 0);
* g_print ("Found: %s\n", word);
* g_free (word);
* g_match_info_next (match_info, &error);
* }
* g_match_info_free (match_info);
* g_regex_unref (regex);
* if (error != NULL)
* {
* g_printerr ("Error while matching: %s\n", error->message);
* g_error_free (error);
* }
* }
* ```
*
* @param string the string to scan for matches
* @param start_position starting index of the string to match, in bytes
* @param match_options match options
* @returns %TRUE is the string matched, %FALSE otherwise
*/
match_full(
string: string[],
start_position: number,
match_options: RegexMatchFlags | null,
): [boolean, MatchInfo | null];
/**
* Increases reference count of `regex` by 1.
* @returns @regex
*/
ref(): Regex;
/**
* Replaces all occurrences of the pattern in `regex` with the
* replacement text. Backreferences of the form `\number` or
* `\g<number>` in the replacement text are interpolated by the
* number-th captured subexpression of the match, `\g<name>` refers
* to the captured subexpression with the given name. `\0` refers
* to the complete match, but `\0` followed by a number is the octal
* representation of a character. To include a literal `\` in the
* replacement, write `\\\\`.
*
* There are also escapes that changes the case of the following text:
*
* - \l: Convert to lower case the next character
* - \u: Convert to upper case the next character
* - \L: Convert to lower case till \E
* - \U: Convert to upper case till \E
* - \E: End case modification
*
* If you do not need to use backreferences use g_regex_replace_literal().
*
* The `replacement` string must be UTF-8 encoded even if %G_REGEX_RAW was
* passed to g_regex_new(). If you want to use not UTF-8 encoded strings
* you can use g_regex_replace_literal().
*
* Setting `start_position` differs from just passing over a shortened
* string and setting %G_REGEX_MATCH_NOTBOL in the case of a pattern that
* begins with any kind of lookbehind assertion, such as "\b".
* @param string the string to perform matches against
* @param start_position starting index of the string to match, in bytes
* @param replacement text to replace each match with
* @param match_options options for the match
* @returns a newly allocated string containing the replacements
*/
replace(
string: string[],
start_position: number,
replacement: string,
match_options: RegexMatchFlags | null,
): string;
/**
* Replaces occurrences of the pattern in regex with the output of
* `eval` for that occurrence.
*
* Setting `start_position` differs from just passing over a shortened
* string and setting %G_REGEX_MATCH_NOTBOL in the case of a pattern
* that begins with any kind of lookbehind assertion, such as "\b".
*
* The following example uses g_regex_replace_eval() to replace multiple
* strings at once:
*
* ```c
* static gboolean
* eval_cb (const GMatchInfo *info,
* GString *res,
* gpointer data)
* {
* gchar *match;
* gchar *r;
*
* match = g_match_info_fetch (info, 0);
* r = g_hash_table_lookup ((GHashTable *)data, match);
* g_string_append (res, r);
* g_free (match);
*
* return FALSE;
* }
*
* ...
*
* GRegex *reg;
* GHashTable *h;
* gchar *res;
*
* h = g_hash_table_new (g_str_hash, g_str_equal);
*
* g_hash_table_insert (h, "1", "ONE");
* g_hash_table_insert (h, "2", "TWO");
* g_hash_table_insert (h, "3", "THREE");
* g_hash_table_insert (h, "4", "FOUR");
*
* reg = g_regex_new ("1|2|3|4", G_REGEX_DEFAULT, G_REGEX_MATCH_DEFAULT, NULL);
* res = g_regex_replace_eval (reg, text, -1, 0, 0, eval_cb, h, NULL);
* g_hash_table_destroy (h);
*
* ...
* ```
*
* @param string string to perform matches against
* @param start_position starting index of the string to match, in bytes
* @param match_options options for the match
* @param _eval a function to call for each match
* @returns a newly allocated string containing the replacements
*/
replace_eval(
string: string[],
start_position: number,
match_options: RegexMatchFlags | null,
_eval: RegexEvalCallback,
): string;
/**
* Replaces all occurrences of the pattern in `regex` with the
* replacement text. `replacement` is replaced literally, to
* include backreferences use g_regex_replace().
*
* Setting `start_position` differs from just passing over a
* shortened string and setting %G_REGEX_MATCH_NOTBOL in the
* case of a pattern that begins with any kind of lookbehind
* assertion, such as "\b".
* @param string the string to perform matches against
* @param start_position starting index of the string to match, in bytes
* @param replacement text to replace each match with
* @param match_options options for the match
* @returns a newly allocated string containing the replacements
*/
replace_literal(
string: string[],
start_position: number,
replacement: string,
match_options: RegexMatchFlags | null,
): string;
/**
* Breaks the string on the pattern, and returns an array of the tokens.
* If the pattern contains capturing parentheses, then the text for each
* of the substrings will also be returned. If the pattern does not match
* anywhere in the string, then the whole string is returned as the first
* token.
*
* As a special case, the result of splitting the empty string "" is an
* empty vector, not a vector containing a single string. The reason for
* this special case is that being able to represent an empty vector is
* typically more useful than consistent handling of empty elements. If
* you do need to represent empty elements, you'll need to check for the
* empty string before calling this function.
*
* A pattern that can match empty strings splits `string` into separate
* characters wherever it matches the empty string between characters.
* For example splitting "ab c" using as a separator "\s*", you will get
* "a", "b" and "c".
* @param string the string to split with the pattern
* @param match_options match time option flags
* @returns a %NULL-terminated gchar ** array. Free it using g_strfreev()
*/
split(string: string, match_options: RegexMatchFlags | null): string[];
/**
* Breaks the string on the pattern, and returns an array of the tokens.
* If the pattern contains capturing parentheses, then the text for each
* of the substrings will also be returned. If the pattern does not match
* anywhere in the string, then the whole string is returned as the first
* token.
*
* As a special case, the result of splitting the empty string "" is an
* empty vector, not a vector containing a single string. The reason for
* this special case is that being able to represent an empty vector is
* typically more useful than consistent handling of empty elements. If
* you do need to represent empty elements, you'll need to check for the
* empty string before calling this function.
*
* A pattern that can match empty strings splits `string` into separate
* characters wherever it matches the empty string between characters.
* For example splitting "ab c" using as a separator "\s*", you will get
* "a", "b" and "c".
*
* Setting `start_position` differs from just passing over a shortened
* string and setting %G_REGEX_MATCH_NOTBOL in the case of a pattern
* that begins with any kind of lookbehind assertion, such as "\b".
* @param string the string to split with the pattern
* @param start_position starting index of the string to match, in bytes
* @param match_options match time option flags
* @param max_tokens the maximum number of tokens to split @string into. If this is less than 1, the string is split completely
* @returns a %NULL-terminated gchar ** array. Free it using g_strfreev()
*/
split_full(
string: string[],
start_position: number,
match_options: RegexMatchFlags | null,
max_tokens: number,
): string[];
/**
* Decreases reference count of `regex` by 1. When reference count drops
* to zero, it frees all the memory associated with the regex structure.
*/
unref(): void;
}
/**
* A `GRelation` is a table of data which can be indexed on any number
* of fields, rather like simple database tables. A `GRelation` contains
* a number of records, called tuples. Each record contains a number of
* fields. Records are not ordered, so it is not possible to find the
* record at a particular index.
*
* Note that `GRelation` tables are currently limited to 2 fields.
*
* To create a `GRelation`, use [func`GLib`.Relation.new].
*
* To specify which fields should be indexed, use [method`GLib`.Relation.index].
* Note that this must be called before any tuples are added to the
* `GRelation`.
*
* To add records to a `GRelation` use [method`GLib`.Relation.insert].
*
* To determine if a given record appears in a `GRelation`, use
* [method`GLib`.Relation.exists]. Note that fields are compared directly, so
* pointers must point to the exact same position (i.e. different
* copies of the same string will not match.)
*
* To count the number of records which have a particular value in a
* given field, use [method`GLib`.Relation.count].
*
* To get all the records which have a particular value in a given
* field, use [method`GLib`.Relation.select]. To access fields of the resulting
* records, use [method`GLib`.Tuples.index]. To free the resulting records use
* [method`GLib`.Tuples.destroy].
*
* To delete all records which have a particular value in a given
* field, use [method`GLib`.Relation.delete].
*
* To destroy the `GRelation`, use [method`GLib`.Relation.destroy].
*
* To help debug `GRelation` objects, use [method`GLib`.Relation.print].
*
* `GRelation` has been marked as deprecated, since this API has never
* been fully implemented, is not very actively maintained and rarely
* used.
*/
abstract class Relation {
static $gtype: GObject.GType<Relation>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Returns the number of tuples in a #GRelation that have the given
* value in the given field.
* @param key the value to compare with.
* @param field the field of each record to match.
* @returns the number of matches.
*/
count(key: any | null, field: number): number;
/**
* Deletes any records from a #GRelation that have the given key value
* in the given field.
* @param key the value to compare with.
* @param field the field of each record to match.
* @returns the number of records deleted.
*/
['delete'](key: any | null, field: number): number;
/**
* Destroys the #GRelation, freeing all memory allocated. However, it
* does not free memory allocated for the tuple data, so you should
* free that first if appropriate.
*/
destroy(): void;
/**
* Outputs information about all records in a #GRelation, as well as
* the indexes. It is for debugging.
*/
print(): void;
}
/**
* The #GSList struct is used for each element in the singly-linked
* list.
*/
class SList {
static $gtype: GObject.GType<SList>;
// Fields
data: any;
next: any[];
// Constructors
constructor(
properties?: Partial<{
data: any;
}>,
);
_init(...args: any[]): void;
// Static methods
static pop_allocator(): void;
static push_allocator(allocator: Allocator): void;
}
/**
* `GScanner` provides a general-purpose lexical scanner.
*
* You should set `input_name` after creating the scanner, since
* it is used by the default message handler when displaying
* warnings and errors. If you are scanning a file, the filename
* would be a good choice.
*
* The `user_data` and `max_parse_errors` fields are not used.
* If you need to associate extra data with the scanner you
* can place them here.
*
* If you want to use your own message handler you can set the
* `msg_handler` field. The type of the message handler function
* is declared by #GScannerMsgFunc.
*/
class Scanner {
static $gtype: GObject.GType<Scanner>;
// Fields
user_data: any;
max_parse_errors: number;
parse_errors: number;
input_name: string;
config: ScannerConfig;
token: TokenType;
value: TokenValue;
line: number;
position: number;
next_token: TokenType;
next_value: TokenValue;
next_line: number;
next_position: number;
msg_handler: ScannerMsgFunc;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Returns the current line in the input stream (counting
* from 1). This is the line of the last token parsed via
* g_scanner_get_next_token().
* @returns the current line
*/
cur_line(): number;
/**
* Returns the current position in the current line (counting
* from 0). This is the position of the last token parsed via
* g_scanner_get_next_token().
* @returns the current position on the line
*/
cur_position(): number;
/**
* Gets the current token type. This is simply the `token`
* field in the #GScanner structure.
* @returns the current token type
*/
cur_token(): TokenType;
/**
* Frees all memory used by the #GScanner.
*/
destroy(): void;
/**
* Returns %TRUE if the scanner has reached the end of
* the file or text buffer.
* @returns %TRUE if the scanner has reached the end of the file or text buffer
*/
eof(): boolean;
/**
* Parses the next token just like g_scanner_peek_next_token()
* and also removes it from the input stream. The token data is
* placed in the `token,` `value,` `line,` and `position` fields of
* the #GScanner structure.
* @returns the type of the token
*/
get_next_token(): TokenType;
/**
* Prepares to scan a file.
* @param input_fd a file descriptor
*/
input_file(input_fd: number): void;
/**
* Prepares to scan a text buffer.
* @param text the text buffer to scan
* @param text_len the length of the text buffer
*/
input_text(text: string, text_len: number): void;
/**
* Looks up a symbol in the current scope and return its value.
* If the symbol is not bound in the current scope, %NULL is
* returned.
* @param symbol the symbol to look up
* @returns the value of @symbol in the current scope, or %NULL if @symbol is not bound in the current scope
*/
lookup_symbol(symbol: string): any | null;
/**
* Parses the next token, without removing it from the input stream.
* The token data is placed in the `next_token,` `next_value,` `next_line,`
* and `next_position` fields of the #GScanner structure.
*
* Note that, while the token is not removed from the input stream
* (i.e. the next call to g_scanner_get_next_token() will return the
* same token), it will not be reevaluated. This can lead to surprising
* results when changing scope or the scanner configuration after peeking
* the next token. Getting the next token after switching the scope or
* configuration will return whatever was peeked before, regardless of
* any symbols that may have been added or removed in the new scope.
* @returns the type of the token
*/
peek_next_token(): TokenType;
/**
* Adds a symbol to the given scope.
* @param scope_id the scope id
* @param symbol the symbol to add
* @param value the value of the symbol
*/
scope_add_symbol(scope_id: number, symbol: string, value?: any | null): void;
/**
* Calls the given function for each of the symbol/value pairs
* in the given scope of the #GScanner. The function is passed
* the symbol and value of each pair, and the given `user_data`
* parameter.
* @param scope_id the scope id
* @param func the function to call for each symbol/value pair
*/
scope_foreach_symbol(scope_id: number, func: HFunc): void;
/**
* Looks up a symbol in a scope and return its value. If the
* symbol is not bound in the scope, %NULL is returned.
* @param scope_id the scope id
* @param symbol the symbol to look up
* @returns the value of @symbol in the given scope, or %NULL if @symbol is not bound in the given scope.
*/
scope_lookup_symbol(scope_id: number, symbol: string): any | null;
/**
* Removes a symbol from a scope.
* @param scope_id the scope id
* @param symbol the symbol to remove
*/
scope_remove_symbol(scope_id: number, symbol: string): void;
/**
* Sets the current scope.
* @param scope_id the new scope id
* @returns the old scope id
*/
set_scope(scope_id: number): number;
/**
* Rewinds the filedescriptor to the current buffer position
* and blows the file read ahead buffer. This is useful for
* third party uses of the scanners filedescriptor, which hooks
* onto the current scanning position.
*/
sync_file_offset(): void;
/**
* Outputs a message through the scanner's msg_handler,
* resulting from an unexpected token in the input stream.
* Note that you should not call g_scanner_peek_next_token()
* followed by g_scanner_unexp_token() without an intermediate
* call to g_scanner_get_next_token(), as g_scanner_unexp_token()
* evaluates the scanner's current token (not the peeked token)
* to construct part of the message.
* @param expected_token the expected token
* @param identifier_spec a string describing how the scanner's user refers to identifiers (%NULL defaults to "identifier"). This is used if @expected_token is %G_TOKEN_IDENTIFIER or %G_TOKEN_IDENTIFIER_NULL.
* @param symbol_spec a string describing how the scanner's user refers to symbols (%NULL defaults to "symbol"). This is used if @expected_token is %G_TOKEN_SYMBOL or any token value greater than %G_TOKEN_LAST.
* @param symbol_name the name of the symbol, if the scanner's current token is a symbol.
* @param message a message string to output at the end of the warning/error, or %NULL.
* @param is_error if %TRUE it is output as an error. If %FALSE it is output as a warning.
*/
unexp_token(
expected_token: TokenType | null,
identifier_spec: string,
symbol_spec: string,
symbol_name: string,
message: string,
is_error: number,
): void;
}
/**
* Specifies the #GScanner parser configuration. Most settings can
* be changed during the parsing phase and will affect the lexical
* parsing of the next unpeeked token.
*/
class ScannerConfig {
static $gtype: GObject.GType<ScannerConfig>;
// Fields
cset_skip_characters: string;
cset_identifier_first: string;
cset_identifier_nth: string;
cpair_comment_single: string;
case_sensitive: number;
skip_comment_multi: number;
skip_comment_single: number;
scan_comment_multi: number;
scan_identifier: number;
scan_identifier_1char: number;
scan_identifier_NULL: number;
scan_symbols: number;
scan_binary: number;
scan_octal: number;
scan_float: number;
scan_hex: number;
scan_hex_dollar: number;
scan_string_sq: number;
scan_string_dq: number;
numbers_2_int: number;
int_2_float: number;
identifier_2_string: number;
char_2_token: number;
symbol_2_token: number;
scope_0_fallback: number;
store_int64: number;
// Constructors
constructor(
properties?: Partial<{
cset_skip_characters: string;
cset_identifier_first: string;
cset_identifier_nth: string;
cpair_comment_single: string;
case_sensitive: number;
skip_comment_multi: number;
skip_comment_single: number;
scan_comment_multi: number;
scan_identifier: number;
scan_identifier_1char: number;
scan_identifier_NULL: number;
scan_symbols: number;
scan_binary: number;
scan_octal: number;
scan_float: number;
scan_hex: number;
scan_hex_dollar: number;
scan_string_sq: number;
scan_string_dq: number;
numbers_2_int: number;
int_2_float: number;
identifier_2_string: number;
char_2_token: number;
symbol_2_token: number;
scope_0_fallback: number;
store_int64: number;
}>,
);
_init(...args: any[]): void;
}
/**
* The #GSequence struct is an opaque data type representing a
* [sequence](data-structures.html#scalable-lists) data type.
*/
abstract class Sequence {
static $gtype: GObject.GType<Sequence>;
// Constructors
_init(...args: any[]): void;
// Static methods
/**
* Calls `func` for each item in the range (`begin,` `end)` passing
* `user_data` to the function. `func` must not modify the sequence
* itself.
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
* @param func a #GFunc
*/
static foreach_range(begin: SequenceIter, end: SequenceIter, func: Func): void;
/**
* Returns the data that `iter` points to.
* @param iter a #GSequenceIter
*/
static get(iter: SequenceIter): any | null;
/**
* Inserts a new item just before the item pointed to by `iter`.
* @param iter a #GSequenceIter
* @param data the data for the new item
*/
static insert_before(iter: SequenceIter, data?: any | null): SequenceIter;
/**
* Moves the item pointed to by `src` to the position indicated by `dest`.
* After calling this function `dest` will point to the position immediately
* after `src`. It is allowed for `src` and `dest` to point into different
* sequences.
* @param src a #GSequenceIter pointing to the item to move
* @param dest a #GSequenceIter pointing to the position to which the item is moved
*/
static move(src: SequenceIter, dest: SequenceIter): void;
/**
* Inserts the (`begin,` `end)` range at the destination pointed to by `dest`.
* The `begin` and `end` iters must point into the same sequence. It is
* allowed for `dest` to point to a different sequence than the one pointed
* into by `begin` and `end`.
*
* If `dest` is %NULL, the range indicated by `begin` and `end` is
* removed from the sequence. If `dest` points to a place within
* the (`begin,` `end)` range, the range does not move.
* @param dest a #GSequenceIter
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
*/
static move_range(dest: SequenceIter, begin: SequenceIter, end: SequenceIter): void;
/**
* Finds an iterator somewhere in the range (`begin,` `end)`. This
* iterator will be close to the middle of the range, but is not
* guaranteed to be exactly in the middle.
*
* The `begin` and `end` iterators must both point to the same sequence
* and `begin` must come before or be equal to `end` in the sequence.
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
*/
static range_get_midpoint(begin: SequenceIter, end: SequenceIter): SequenceIter;
/**
* Removes the item pointed to by `iter`. It is an error to pass the
* end iterator to this function.
*
* If the sequence has a data destroy function associated with it, this
* function is called on the data for the removed item.
* @param iter a #GSequenceIter
*/
static remove(iter: SequenceIter): void;
/**
* Removes all items in the (`begin,` `end)` range.
*
* If the sequence has a data destroy function associated with it, this
* function is called on the data for the removed items.
* @param begin a #GSequenceIter
* @param end a #GSequenceIter
*/
static remove_range(begin: SequenceIter, end: SequenceIter): void;
/**
* Changes the data for the item pointed to by `iter` to be `data`. If
* the sequence has a data destroy function associated with it, that
* function is called on the existing data that `iter` pointed to.
* @param iter a #GSequenceIter
* @param data new data for the item
*/
static set(iter: SequenceIter, data?: any | null): void;
/**
* Moves the data pointed to by `iter` to a new position as indicated by
* `cmp_func`. This
* function should be called for items in a sequence already sorted according
* to `cmp_func` whenever some aspect of an item changes so that `cmp_func`
* may return different values for that item.
*
* `cmp_func` is called with two items of the `seq,` and `cmp_data`.
* It should return 0 if the items are equal, a negative value if
* the first item comes before the second, and a positive value if
* the second item comes before the first.
* @param iter A #GSequenceIter
* @param cmp_func the function used to compare items in the sequence
*/
static sort_changed(iter: SequenceIter, cmp_func: CompareDataFunc): void;
/**
* Like g_sequence_sort_changed(), but uses
* a #GSequenceIterCompareFunc instead of a #GCompareDataFunc as
* the compare function.
*
* `iter_cmp` is called with two iterators pointing into the #GSequence that
* `iter` points into. It should
* return 0 if the iterators are equal, a negative value if the first
* iterator comes before the second, and a positive value if the second
* iterator comes before the first.
* @param iter a #GSequenceIter
* @param iter_cmp the function used to compare iterators in the sequence
*/
static sort_changed_iter(iter: SequenceIter, iter_cmp: SequenceIterCompareFunc): void;
/**
* Swaps the items pointed to by `a` and `b`. It is allowed for `a` and `b`
* to point into difference sequences.
* @param a a #GSequenceIter
* @param b a #GSequenceIter
*/
static swap(a: SequenceIter, b: SequenceIter): void;
// Methods
/**
* Adds a new item to the end of `seq`.
* @param data the data for the new item
* @returns an iterator pointing to the new item
*/
append(data?: any | null): SequenceIter;
/**
* Calls `func` for each item in the sequence passing `user_data`
* to the function. `func` must not modify the sequence itself.
* @param func the function to call for each item in @seq
*/
foreach(func: Func): void;
/**
* Frees the memory allocated for `seq`. If `seq` has a data destroy
* function associated with it, that function is called on all items
* in `seq`.
*/
free(): void;
/**
* Returns the begin iterator for `seq`.
* @returns the begin iterator for @seq.
*/
get_begin_iter(): SequenceIter;
/**
* Returns the end iterator for `seg`
* @returns the end iterator for @seq
*/
get_end_iter(): SequenceIter;
/**
* Returns the iterator at position `pos`. If `pos` is negative or larger
* than the number of items in `seq,` the end iterator is returned.
* @param pos a position in @seq, or -1 for the end
* @returns The #GSequenceIter at position @pos
*/
get_iter_at_pos(pos: number): SequenceIter;
/**
* Returns the positive length (>= 0) of `seq`. Note that this method is
* O(h) where `h' is the height of the tree. It is thus more efficient
* to use g_sequence_is_empty() when comparing the length to zero.
* @returns the length of @seq
*/
get_length(): number;
/**
* Inserts `data` into `seq` using `cmp_func` to determine the new
* position. The sequence must already be sorted according to `cmp_func;`
* otherwise the new position of `data` is undefined.
*
* `cmp_func` is called with two items of the `seq,` and `cmp_data`.
* It should return 0 if the items are equal, a negative value
* if the first item comes before the second, and a positive value
* if the second item comes before the first.
*
* Note that when adding a large amount of data to a #GSequence,
* it is more efficient to do unsorted insertions and then call
* g_sequence_sort() or g_sequence_sort_iter().
* @param data the data to insert
* @param cmp_func the function used to compare items in the sequence
* @returns a #GSequenceIter pointing to the new item.
*/
insert_sorted(data: any | null, cmp_func: CompareDataFunc): SequenceIter;
/**
* Like g_sequence_insert_sorted(), but uses
* a #GSequenceIterCompareFunc instead of a #GCompareDataFunc as
* the compare function.
*
* `iter_cmp` is called with two iterators pointing into `seq`.
* It should return 0 if the iterators are equal, a negative
* value if the first iterator comes before the second, and a
* positive value if the second iterator comes before the first.
*
* Note that when adding a large amount of data to a #GSequence,
* it is more efficient to do unsorted insertions and then call
* g_sequence_sort() or g_sequence_sort_iter().
* @param data data for the new item
* @param iter_cmp the function used to compare iterators in the sequence
* @returns a #GSequenceIter pointing to the new item
*/
insert_sorted_iter(data: any | null, iter_cmp: SequenceIterCompareFunc): SequenceIter;
/**
* Returns %TRUE if the sequence contains zero items.
*
* This function is functionally identical to checking the result of
* g_sequence_get_length() being equal to zero. However this function is
* implemented in O(1) running time.
* @returns %TRUE if the sequence is empty, otherwise %FALSE.
*/
is_empty(): boolean;
/**
* Returns an iterator pointing to the position of the first item found
* equal to `data` according to `cmp_func` and `cmp_data`. If more than one
* item is equal, it is not guaranteed that it is the first which is
* returned. In that case, you can use g_sequence_iter_next() and
* g_sequence_iter_prev() to get others.
*
* `cmp_func` is called with two items of the `seq,` and `cmp_data`.
* It should return 0 if the items are equal, a negative value if
* the first item comes before the second, and a positive value if
* the second item comes before the first.
*
* This function will fail if the data contained in the sequence is
* unsorted.
* @param data data to look up
* @param cmp_func the function used to compare items in the sequence
* @returns an #GSequenceIter pointing to the position of the first item found equal to @data according to @cmp_func and @cmp_data, or %NULL if no such item exists
*/
lookup(data: any | null, cmp_func: CompareDataFunc): SequenceIter | null;
/**
* Like g_sequence_lookup(), but uses a #GSequenceIterCompareFunc
* instead of a #GCompareDataFunc as the compare function.
*
* `iter_cmp` is called with two iterators pointing into `seq`.
* It should return 0 if the iterators are equal, a negative value
* if the first iterator comes before the second, and a positive
* value if the second iterator comes before the first.
*
* This function will fail if the data contained in the sequence is
* unsorted.
* @param data data to look up
* @param iter_cmp the function used to compare iterators in the sequence
* @returns an #GSequenceIter pointing to the position of the first item found equal to @data according to @iter_cmp and @cmp_data, or %NULL if no such item exists
*/
lookup_iter(data: any | null, iter_cmp: SequenceIterCompareFunc): SequenceIter | null;
/**
* Adds a new item to the front of `seq`
* @param data the data for the new item
* @returns an iterator pointing to the new item
*/
prepend(data?: any | null): SequenceIter;
/**
* Returns an iterator pointing to the position where `data` would
* be inserted according to `cmp_func` and `cmp_data`.
*
* `cmp_func` is called with two items of the `seq,` and `cmp_data`.
* It should return 0 if the items are equal, a negative value if
* the first item comes before the second, and a positive value if
* the second item comes before the first.
*
* If you are simply searching for an existing element of the sequence,
* consider using g_sequence_lookup().
*
* This function will fail if the data contained in the sequence is
* unsorted.
* @param data data for the new item
* @param cmp_func the function used to compare items in the sequence
* @returns an #GSequenceIter pointing to the position where @data would have been inserted according to @cmp_func and @cmp_data
*/
search(data: any | null, cmp_func: CompareDataFunc): SequenceIter;
/**
* Like g_sequence_search(), but uses a #GSequenceIterCompareFunc
* instead of a #GCompareDataFunc as the compare function.
*
* `iter_cmp` is called with two iterators pointing into `seq`.
* It should return 0 if the iterators are equal, a negative value
* if the first iterator comes before the second, and a positive
* value if the second iterator comes before the first.
*
* If you are simply searching for an existing element of the sequence,
* consider using g_sequence_lookup_iter().
*
* This function will fail if the data contained in the sequence is
* unsorted.
* @param data data for the new item
* @param iter_cmp the function used to compare iterators in the sequence
* @returns a #GSequenceIter pointing to the position in @seq where @data would have been inserted according to @iter_cmp and @cmp_data
*/
search_iter(data: any | null, iter_cmp: SequenceIterCompareFunc): SequenceIter;
/**
* Sorts `seq` using `cmp_func`.
*
* `cmp_func` is passed two items of `seq` and should
* return 0 if they are equal, a negative value if the
* first comes before the second, and a positive value
* if the second comes before the first.
* @param cmp_func the function used to sort the sequence
*/
sort(cmp_func: CompareDataFunc): void;
/**
* Like g_sequence_sort(), but uses a #GSequenceIterCompareFunc instead
* of a #GCompareDataFunc as the compare function
*
* `cmp_func` is called with two iterators pointing into `seq`. It should
* return 0 if the iterators are equal, a negative value if the first
* iterator comes before the second, and a positive value if the second
* iterator comes before the first.
* @param cmp_func the function used to compare iterators in the sequence
*/
sort_iter(cmp_func: SequenceIterCompareFunc): void;
}
/**
* The #GSequenceIter struct is an opaque data type representing an
* iterator pointing into a #GSequence.
*/
abstract class SequenceIter {
static $gtype: GObject.GType<SequenceIter>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Returns a negative number if `a` comes before `b,` 0 if they are equal,
* and a positive number if `a` comes after `b`.
*
* The `a` and `b` iterators must point into the same sequence.
* @param b a #GSequenceIter
* @returns a negative number if @a comes before @b, 0 if they are equal, and a positive number if @a comes after @b
*/
compare(b: SequenceIter): number;
/**
* Returns the position of `iter`
* @returns the position of @iter
*/
get_position(): number;
/**
* Returns the #GSequence that `iter` points into.
* @returns the #GSequence that @iter points into
*/
get_sequence(): Sequence;
/**
* Returns whether `iter` is the begin iterator
* @returns whether @iter is the begin iterator
*/
is_begin(): boolean;
/**
* Returns whether `iter` is the end iterator
* @returns Whether @iter is the end iterator
*/
is_end(): boolean;
/**
* Returns the #GSequenceIter which is `delta` positions away from `iter`.
* If `iter` is closer than -`delta` positions to the beginning of the sequence,
* the begin iterator is returned. If `iter` is closer than `delta` positions
* to the end of the sequence, the end iterator is returned.
* @param delta A positive or negative number indicating how many positions away from @iter the returned #GSequenceIter will be
* @returns a #GSequenceIter which is @delta positions away from @iter
*/
move(delta: number): SequenceIter;
/**
* Returns an iterator pointing to the next position after `iter`.
* If `iter` is the end iterator, the end iterator is returned.
* @returns a #GSequenceIter pointing to the next position after @iter
*/
next(): SequenceIter;
/**
* Returns an iterator pointing to the previous position before `iter`.
* If `iter` is the begin iterator, the begin iterator is returned.
* @returns a #GSequenceIter pointing to the previous position before @iter
*/
prev(): SequenceIter;
}
/**
* The `GSource` struct is an opaque data type
* representing an event source.
*/
class Source {
static $gtype: GObject.GType<Source>;
// Constructors
constructor(source_funcs: SourceFuncs, struct_size: number);
_init(...args: any[]): void;
static ['new'](source_funcs: SourceFuncs, struct_size: number): Source;
// Static methods
/**
* Removes the source with the given ID from the default main context. You must
* use [method`GLib`.Source.destroy] for sources added to a non-default main context.
*
* The ID of a #GSource is given by [method`GLib`.Source.get_id], or will be
* returned by the functions [method`GLib`.Source.attach], [func`GLib`.idle_add],
* [func`GLib`.idle_add_full], [func`GLib`.timeout_add],
* [func`GLib`.timeout_add_full], [func`GLib`.child_watch_add],
* [func`GLib`.child_watch_add_full], [func`GLib`.io_add_watch], and
* [func`GLib`.io_add_watch_full].
*
* It is a programmer error to attempt to remove a non-existent source.
*
* More specifically: source IDs can be reissued after a source has been
* destroyed and therefore it is never valid to use this function with a
* source ID which may have already been removed. An example is when
* scheduling an idle to run in another thread with [func`GLib`.idle_add]: the
* idle may already have run and been removed by the time this function
* is called on its (now invalid) source ID. This source ID may have
* been reissued, leading to the operation being performed against the
* wrong source.
* @param tag the ID of the source to remove.
*/
static remove(tag: number): boolean;
/**
* Removes a source from the default main loop context given the
* source functions and user data. If multiple sources exist with the
* same source functions and user data, only one will be destroyed.
* @param funcs The @source_funcs passed to [ctor@GLib.Source.new]
* @param user_data the user data for the callback
*/
static remove_by_funcs_user_data(funcs: SourceFuncs, user_data?: any | null): boolean;
/**
* Removes a source from the default main loop context given the user
* data for the callback. If multiple sources exist with the same user
* data, only one will be destroyed.
* @param user_data the user_data for the callback.
*/
static remove_by_user_data(user_data?: any | null): boolean;
/**
* Sets the name of a source using its ID.
*
* This is a convenience utility to set source names from the return
* value of [func`GLib`.idle_add], [func`GLib`.timeout_add], etc.
*
* It is a programmer error to attempt to set the name of a non-existent
* source.
*
* More specifically: source IDs can be reissued after a source has been
* destroyed and therefore it is never valid to use this function with a
* source ID which may have already been removed. An example is when
* scheduling an idle to run in another thread with [func`GLib`.idle_add]: the
* idle may already have run and been removed by the time this function
* is called on its (now invalid) source ID. This source ID may have
* been reissued, leading to the operation being performed against the
* wrong source.
* @param tag a #GSource ID
* @param name debug name for the source
*/
static set_name_by_id(tag: number, name: string): void;
// Methods
/**
* Adds `child_source` to `source` as a "polled" source; when `source` is
* added to a [struct`GLib`.MainContext], `child_source` will be automatically
* added with the same priority, when `child_source` is triggered, it will
* cause `source` to dispatch (in addition to calling its own
* callback), and when `source` is destroyed, it will destroy
* `child_source` as well. (`source` will also still be dispatched if
* its own prepare/check functions indicate that it is ready.)
*
* If you don't need `child_source` to do anything on its own when it
* triggers, you can call g_source_set_dummy_callback() on it to set a
* callback that does nothing (except return %TRUE if appropriate).
*
* `source` will hold a reference on `child_source` while `child_source`
* is attached to it.
*
* This API is only intended to be used by implementations of
* [struct`GLib`.Source]. Do not call this API on a [struct`GLib`.Source] that
* you did not create.
* @param child_source a second #GSource that @source should "poll"
*/
add_child_source(child_source: Source): void;
/**
* Adds a file descriptor to the set of file descriptors polled for
* this source. This is usually combined with [ctor`GLib`.Source.new] to add an
* event source. The event source's check function will typically test
* the `revents` field in the #GPollFD struct and return %TRUE if events need
* to be processed.
*
* This API is only intended to be used by implementations of [struct`GLib`.Source].
* Do not call this API on a [struct`GLib`.Source] that you did not create.
*
* Using this API forces the linear scanning of event sources on each
* main loop iteration. Newly-written event sources should try to use
* `g_source_add_unix_fd` instead of this API.
* @param fd a #GPollFD structure holding information about a file descriptor to watch.
*/
add_poll(fd: PollFD): void;
/**
* Monitors `fd` for the IO events in `events`.
*
* The tag returned by this function can be used to remove or modify the
* monitoring of the fd using [method`GLib`.Source.remove_unix_fd] or
* [method`GLib`.Source.modify_unix_fd].
*
* It is not necessary to remove the fd before destroying the source; it
* will be cleaned up automatically.
*
* This API is only intended to be used by implementations of #GSource.
* Do not call this API on a #GSource that you did not create.
*
* As the name suggests, this function is not available on Windows.
* @param fd the fd to monitor
* @param events an event mask
* @returns an opaque tag
*/
add_unix_fd(fd: number, events: IOCondition | null): any;
/**
* Adds a [struct`GLib`.Source] to a `context` so that it will be executed within
* that context. Remove it by calling [method`GLib`.Source.destroy].
*
* This function is safe to call from any thread, regardless of which thread
* the `context` is running in.
* @param context a #GMainContext (if %NULL, the global-default main context will be used)
* @returns the ID (greater than 0) for the source within the #GMainContext.
*/
attach(context?: MainContext | null): number;
/**
* Removes a source from its [struct`GLib`.MainContext], if any, and mark it as
* destroyed. The source cannot be subsequently added to another
* context. It is safe to call this on sources which have already been
* removed from their context.
*
* This does not unref the [struct`GLib`.Source]: if you still hold a reference,
* use [method`GLib`.Source.unref] to drop it.
*
* This function is safe to call from any thread, regardless of which thread
* the [struct`GLib`.MainContext] is running in.
*
* If the source is currently attached to a [struct`GLib`.MainContext],
* destroying it will effectively unset the callback similar to calling
* [method`GLib`.Source.set_callback]. This can mean, that the data's
* #GDestroyNotify gets called right away.
*/
destroy(): void;
/**
* Checks whether a source is allowed to be called recursively.
* see [method`GLib`.Source.set_can_recurse].
* @returns whether recursion is allowed.
*/
get_can_recurse(): boolean;
/**
* Gets the [struct`GLib`.MainContext] with which the source is associated.
*
* You can call this on a source that has been destroyed, provided
* that the [struct`GLib`.MainContext] it was attached to still exists (in which
* case it will return that [struct`GLib`.MainContext]). In particular, you can
* always call this function on the source returned from
* [func`GLib`.main_current_source]. But calling this function on a source
* whose [struct`GLib`.MainContext] has been destroyed is an error.
* @returns the #GMainContext with which the source is associated, or %NULL if the context has not yet been added to a source.
*/
get_context(): MainContext | null;
/**
* This function ignores `source` and is otherwise the same as
* [func`GLib`.get_current_time].
* @param timeval #GTimeVal structure in which to store current time.
*/
get_current_time(timeval: TimeVal): void;
/**
* Returns the numeric ID for a particular source. The ID of a source
* is a positive integer which is unique within a particular main loop
* context. The reverse mapping from ID to source is done by
* [method`GLib`.MainContext.find_source_by_id].
*
* You can only call this function while the source is associated to a
* [struct`GLib`.MainContext] instance; calling this function before
* [method`GLib`.Source.attach] or after [method`GLib`.Source.destroy] yields
* undefined behavior. The ID returned is unique within the
* [struct`GLib`.MainContext] instance passed to [method`GLib`.Source.attach].
* @returns the ID (greater than 0) for the source
*/
get_id(): number;
/**
* Gets a name for the source, used in debugging and profiling. The
* name may be #NULL if it has never been set with [method`GLib`.Source.set_name].
* @returns the name of the source
*/
get_name(): string | null;
/**
* Gets the priority of a source.
* @returns the priority of the source
*/
get_priority(): number;
/**
* Gets the "ready time" of `source,` as set by
* [method`GLib`.Source.set_ready_time].
*
* Any time before or equal to the current monotonic time (including 0)
* is an indication that the source will fire immediately.
* @returns the monotonic ready time, -1 for "never"
*/
get_ready_time(): number;
/**
* Gets the time to be used when checking this source. The advantage of
* calling this function over calling [func`GLib`.get_monotonic_time] directly is
* that when checking multiple sources, GLib can cache a single value
* instead of having to repeatedly get the system monotonic time.
*
* The time here is the system monotonic time, if available, or some
* other reasonable alternative otherwise. See [func`GLib`.get_monotonic_time].
* @returns the monotonic time in microseconds
*/
get_time(): number;
/**
* Returns whether `source` has been destroyed.
*
* This is important when you operate upon your objects
* from within idle handlers, but may have freed the object
* before the dispatch of your idle handler.
*
*
* ```c
* static gboolean
* idle_callback (gpointer data)
* {
* SomeWidget *self = data;
*
* g_mutex_lock (&self->idle_id_mutex);
* // do stuff with self
* self->idle_id = 0;
* g_mutex_unlock (&self->idle_id_mutex);
*
* return G_SOURCE_REMOVE;
* }
*
* static void
* some_widget_do_stuff_later (SomeWidget *self)
* {
* g_mutex_lock (&self->idle_id_mutex);
* self->idle_id = g_idle_add (idle_callback, self);
* g_mutex_unlock (&self->idle_id_mutex);
* }
*
* static void
* some_widget_init (SomeWidget *self)
* {
* g_mutex_init (&self->idle_id_mutex);
*
* // ...
* }
*
* static void
* some_widget_finalize (GObject *object)
* {
* SomeWidget *self = SOME_WIDGET (object);
*
* if (self->idle_id)
* g_source_remove (self->idle_id);
*
* g_mutex_clear (&self->idle_id_mutex);
*
* G_OBJECT_CLASS (parent_class)->finalize (object);
* }
* ```
*
*
* This will fail in a multi-threaded application if the
* widget is destroyed before the idle handler fires due
* to the use after free in the callback. A solution, to
* this particular problem, is to check to if the source
* has already been destroy within the callback.
*
*
* ```c
* static gboolean
* idle_callback (gpointer data)
* {
* SomeWidget *self = data;
*
* g_mutex_lock (&self->idle_id_mutex);
* if (!g_source_is_destroyed (g_main_current_source ()))
* {
* // do stuff with self
* }
* g_mutex_unlock (&self->idle_id_mutex);
*
* return FALSE;
* }
* ```
*
*
* Calls to this function from a thread other than the one acquired by the
* [struct`GLib`.MainContext] the #GSource is attached to are typically
* redundant, as the source could be destroyed immediately after this function
* returns. However, once a source is destroyed it cannot be un-destroyed, so
* this function can be used for opportunistic checks from any thread.
* @returns %TRUE if the source has been destroyed
*/
is_destroyed(): boolean;
/**
* Updates the event mask to watch for the fd identified by `tag`.
*
* `tag` is the tag returned from [method`GLib`.Source.add_unix_fd].
*
* If you want to remove a fd, don't set its event mask to zero.
* Instead, call [method`GLib`.Source.remove_unix_fd].
*
* This API is only intended to be used by implementations of #GSource.
* Do not call this API on a #GSource that you did not create.
*
* As the name suggests, this function is not available on Windows.
* @param tag the tag from [method@GLib.Source.add_unix_fd]
* @param new_events the new event mask to watch
*/
modify_unix_fd(tag: any, new_events: IOCondition | null): void;
/**
* Queries the events reported for the fd corresponding to `tag` on
* `source` during the last poll.
*
* The return value of this function is only defined when the function
* is called from the check or dispatch functions for `source`.
*
* This API is only intended to be used by implementations of #GSource.
* Do not call this API on a #GSource that you did not create.
*
* As the name suggests, this function is not available on Windows.
* @param tag the tag from [method@GLib.Source.add_unix_fd]
* @returns the conditions reported on the fd
*/
query_unix_fd(tag: any): IOCondition;
/**
* Increases the reference count on a source by one.
* @returns @source
*/
ref(): Source;
/**
* Detaches `child_source` from `source` and destroys it.
*
* This API is only intended to be used by implementations of #GSource.
* Do not call this API on a #GSource that you did not create.
* @param child_source a #GSource previously passed to [method@GLib.Source.add_child_source].
*/
remove_child_source(child_source: Source): void;
/**
* Removes a file descriptor from the set of file descriptors polled for
* this source.
*
* This API is only intended to be used by implementations of [struct`GLib`.Source].
* Do not call this API on a [struct`GLib`.Source] that you did not create.
* @param fd a #GPollFD structure previously passed to [method@GLib.Source.add_poll].
*/
remove_poll(fd: PollFD): void;
/**
* Reverses the effect of a previous call to [method`GLib`.Source.add_unix_fd].
*
* You only need to call this if you want to remove an fd from being
* watched while keeping the same source around. In the normal case you
* will just want to destroy the source.
*
* This API is only intended to be used by implementations of #GSource.
* Do not call this API on a #GSource that you did not create.
*
* As the name suggests, this function is not available on Windows.
* @param tag the tag from [method@GLib.Source.add_unix_fd]
*/
remove_unix_fd(tag: any): void;
/**
* Sets the callback function for a source. The callback for a source is
* called from the source's dispatch function.
*
* The exact type of `func` depends on the type of source; ie. you
* should not count on `func` being called with `data` as its first
* parameter. Cast `func` with [func`GLib`.SOURCE_FUNC] to avoid warnings about
* incompatible function types.
*
* See [mainloop memory management](main-loop.html#memory-management-of-sources) for details
* on how to handle memory management of `data`.
*
* Typically, you won't use this function. Instead use functions specific
* to the type of source you are using, such as [func`GLib`.idle_add] or
* [func`GLib`.timeout_add].
*
* It is safe to call this function multiple times on a source which has already
* been attached to a context. The changes will take effect for the next time
* the source is dispatched after this call returns.
*
* Note that [method`GLib`.Source.destroy] for a currently attached source has the effect
* of also unsetting the callback.
* @param func a callback function
* @param notify a function to call when @data is no longer in use, or %NULL.
*/
set_callback(func: SourceFunc, notify?: DestroyNotify | null): void;
/**
* Sets the callback function storing the data as a refcounted callback
* "object". This is used internally. Note that calling
* [method`GLib`.Source.set_callback_indirect] assumes
* an initial reference count on `callback_data,` and thus
* `callback_funcs->`unref will eventually be called once more
* than `callback_funcs->`ref.
*
* It is safe to call this function multiple times on a source which has already
* been attached to a context. The changes will take effect for the next time
* the source is dispatched after this call returns.
* @param callback_data pointer to callback data "object"
* @param callback_funcs functions for reference counting @callback_data and getting the callback and data
*/
set_callback_indirect(callback_data: any | null, callback_funcs: SourceCallbackFuncs): void;
/**
* Sets whether a source can be called recursively. If `can_recurse` is
* %TRUE, then while the source is being dispatched then this source
* will be processed normally. Otherwise, all processing of this
* source is blocked until the dispatch function returns.
* @param can_recurse whether recursion is allowed for this source
*/
set_can_recurse(can_recurse: boolean): void;
/**
* Sets the source functions (can be used to override
* default implementations) of an unattached source.
* @param funcs the new #GSourceFuncs
*/
set_funcs(funcs: SourceFuncs): void;
/**
* Sets a name for the source, used in debugging and profiling.
* The name defaults to #NULL.
*
* The source name should describe in a human-readable way
* what the source does. For example, "X11 event queue"
* or "GTK repaint idle handler" or whatever it is.
*
* It is permitted to call this function multiple times, but is not
* recommended due to the potential performance impact. For example,
* one could change the name in the "check" function of a #GSourceFuncs
* to include details like the event type in the source name.
*
* Use caution if changing the name while another thread may be
* accessing it with [method`GLib`.Source.get_name]; that function does not copy
* the value, and changing the value will free it while the other thread
* may be attempting to use it.
*
* Also see [method`GLib`.Source.set_static_name].
* @param name debug name for the source
*/
set_name(name: string): void;
/**
* Sets the priority of a source. While the main loop is being run, a
* source will be dispatched if it is ready to be dispatched and no
* sources at a higher (numerically smaller) priority are ready to be
* dispatched.
*
* A child source always has the same priority as its parent. It is not
* permitted to change the priority of a source once it has been added
* as a child of another source.
* @param priority the new priority.
*/
set_priority(priority: number): void;
/**
* Sets a #GSource to be dispatched when the given monotonic time is
* reached (or passed). If the monotonic time is in the past (as it
* always will be if `ready_time` is 0) then the source will be
* dispatched immediately.
*
* If `ready_time` is -1 then the source is never woken up on the basis
* of the passage of time.
*
* Dispatching the source does not reset the ready time. You should do
* so yourself, from the source dispatch function.
*
* Note that if you have a pair of sources where the ready time of one
* suggests that it will be delivered first but the priority for the
* other suggests that it would be delivered first, and the ready time
* for both sources is reached during the same main context iteration,
* then the order of dispatch is undefined.
*
* It is a no-op to call this function on a #GSource which has already been
* destroyed with [method`GLib`.Source.destroy].
*
* This API is only intended to be used by implementations of #GSource.
* Do not call this API on a #GSource that you did not create.
* @param ready_time the monotonic time at which the source will be ready, 0 for "immediately", -1 for "never"
*/
set_ready_time(ready_time: number): void;
/**
* A variant of [method`GLib`.Source.set_name] that does not
* duplicate the `name,` and can only be used with
* string literals.
* @param name debug name for the source
*/
set_static_name(name: string): void;
/**
* Decreases the reference count of a source by one. If the
* resulting reference count is zero the source and associated
* memory will be destroyed.
*/
unref(): void;
}
/**
* The `GSourceCallbackFuncs` struct contains
* functions for managing callback objects.
*/
class SourceCallbackFuncs {
static $gtype: GObject.GType<SourceCallbackFuncs>;
// Constructors
_init(...args: any[]): void;
}
/**
* The `GSourceFuncs` struct contains a table of
* functions used to handle event sources in a generic manner.
*
* For idle sources, the prepare and check functions always return %TRUE
* to indicate that the source is always ready to be processed. The prepare
* function also returns a timeout value of 0 to ensure that the poll() call
* doesn't block (since that would be time wasted which could have been spent
* running the idle function).
*
* For timeout sources, the prepare and check functions both return %TRUE
* if the timeout interval has expired. The prepare function also returns
* a timeout value to ensure that the poll() call doesn't block too long
* and miss the next timeout.
*
* For file descriptor sources, the prepare function typically returns %FALSE,
* since it must wait until poll() has been called before it knows whether
* any events need to be processed. It sets the returned timeout to -1 to
* indicate that it doesn't mind how long the poll() call blocks. In the
* check function, it tests the results of the poll() call to see if the
* required condition has been met, and returns %TRUE if so.
*/
class SourceFuncs {
static $gtype: GObject.GType<SourceFuncs>;
// Fields
prepare: SourceFuncsPrepareFunc;
check: SourceFuncsCheckFunc;
finalize: SourceFuncsFinalizeFunc;
// Constructors
_init(...args: any[]): void;
}
abstract class SourcePrivate {
static $gtype: GObject.GType<SourcePrivate>;
// Constructors
_init(...args: any[]): void;
}
/**
* A type corresponding to the appropriate struct type for the stat()
* system call, depending on the platform and/or compiler being used.
*
* See g_stat() for more information.
*/
abstract class StatBuf {
static $gtype: GObject.GType<StatBuf>;
// Constructors
_init(...args: any[]): void;
}
/**
* A `GString` is an object that handles the memory management of a C string.
*
* The emphasis of `GString` is on text, typically UTF-8. Crucially, the "str" member
* of a `GString` is guaranteed to have a trailing nul character, and it is therefore
* always safe to call functions such as `strchr()` or `strdup()` on it.
*
* However, a `GString` can also hold arbitrary binary data, because it has a "len" member,
* which includes any possible embedded nul characters in the data. Conceptually then,
* `GString` is like a `GByteArray` with the addition of many convenience methods for
* text, and a guaranteed nul terminator.
*/
class String {
static $gtype: GObject.GType<String>;
// Fields
str: string;
len: number;
allocated_len: number;
// Constructors
constructor(
properties?: Partial<{
str: string;
len: number;
allocated_len: number;
}>,
);
_init(...args: any[]): void;
static ['new'](init?: string | null): String;
static new_len(init: string, len: number): String;
static new_take(init?: string | null): String;
static sized_new(dfl_size: number): String;
// Methods
/**
* Adds a string onto the end of a #GString, expanding
* it if necessary.
* @param val the string to append onto the end of @string
* @returns @string
*/
append(val: string): String;
/**
* Adds a byte onto the end of a #GString, expanding
* it if necessary.
* @param c the byte to append onto the end of @string
* @returns @string
*/
append_c(c: number): String;
/**
* Appends `len` bytes of `val` to `string`.
*
* If `len` is positive, `val` may contain embedded nuls and need
* not be nul-terminated. It is the caller's responsibility to
* ensure that `val` has at least `len` addressable bytes.
*
* If `len` is negative, `val` must be nul-terminated and `len`
* is considered to request the entire string length. This
* makes g_string_append_len() equivalent to g_string_append().
* @param val bytes to append
* @param len number of bytes of @val to use, or -1 for all of @val
* @returns @string
*/
append_len(val: string, len: number): String;
/**
* Converts a Unicode character into UTF-8, and appends it
* to the string.
* @param wc a Unicode character
* @returns @string
*/
append_unichar(wc: number): String;
/**
* Appends `unescaped` to `string,` escaping any characters that
* are reserved in URIs using URI-style escape sequences.
* @param unescaped a string
* @param reserved_chars_allowed a string of reserved characters allowed to be used, or %NULL
* @param allow_utf8 set %TRUE if the escaped string may include UTF8 characters
* @returns @string
*/
append_uri_escaped(unescaped: string, reserved_chars_allowed: string, allow_utf8: boolean): String;
/**
* Converts all uppercase ASCII letters to lowercase ASCII letters.
* @returns passed-in @string pointer, with all the uppercase characters converted to lowercase in place, with semantics that exactly match g_ascii_tolower().
*/
ascii_down(): String;
/**
* Converts all lowercase ASCII letters to uppercase ASCII letters.
* @returns passed-in @string pointer, with all the lowercase characters converted to uppercase in place, with semantics that exactly match g_ascii_toupper().
*/
ascii_up(): String;
/**
* Copies the bytes from a string into a #GString,
* destroying any previous contents. It is rather like
* the standard strcpy() function, except that you do not
* have to worry about having enough space to copy the string.
* @param rval the string to copy into @string
* @returns @string
*/
assign(rval: string): String;
/**
* Converts a #GString to lowercase.
* @returns the #GString
*/
down(): String;
/**
* Compares two strings for equality, returning %TRUE if they are equal.
* For use with #GHashTable.
* @param v2 another #GString
* @returns %TRUE if the strings are the same length and contain the same bytes
*/
equal(v2: String): boolean;
/**
* Removes `len` bytes from a #GString, starting at position `pos`.
* The rest of the #GString is shifted down to fill the gap.
* @param pos the position of the content to remove
* @param len the number of bytes to remove, or -1 to remove all following bytes
* @returns @string
*/
erase(pos: number, len: number): String;
/**
* Frees the memory allocated for the #GString.
* If `free_segment` is %TRUE it also frees the character data. If
* it's %FALSE, the caller gains ownership of the buffer and must
* free it after use with g_free().
*
* Instead of passing %FALSE to this function, consider using
* g_string_free_and_steal().
* @param free_segment if %TRUE, the actual character data is freed as well
* @returns the character data of @string (i.e. %NULL if @free_segment is %TRUE)
*/
free(free_segment: boolean): string | null;
/**
* Frees the memory allocated for the #GString.
*
* The caller gains ownership of the buffer and
* must free it after use with g_free().
* @returns the character data of @string
*/
free_and_steal(): string;
/**
* Transfers ownership of the contents of `string` to a newly allocated
* #GBytes. The #GString structure itself is deallocated, and it is
* therefore invalid to use `string` after invoking this function.
*
* Note that while #GString ensures that its buffer always has a
* trailing nul character (not reflected in its "len"), the returned
* #GBytes does not include this extra nul; i.e. it has length exactly
* equal to the "len" member.
* @returns A newly allocated #GBytes containing contents of @string; @string itself is freed
*/
free_to_bytes(): Bytes;
/**
* Creates a hash code for `str;` for use with #GHashTable.
* @returns hash code for @str
*/
hash(): number;
/**
* Inserts a copy of a string into a #GString,
* expanding it if necessary.
* @param pos the position to insert the copy of the string
* @param val the string to insert
* @returns @string
*/
insert(pos: number, val: string): String;
/**
* Inserts a byte into a #GString, expanding it if necessary.
* @param pos the position to insert the byte
* @param c the byte to insert
* @returns @string
*/
insert_c(pos: number, c: number): String;
/**
* Inserts `len` bytes of `val` into `string` at `pos`.
*
* If `len` is positive, `val` may contain embedded nuls and need
* not be nul-terminated. It is the caller's responsibility to
* ensure that `val` has at least `len` addressable bytes.
*
* If `len` is negative, `val` must be nul-terminated and `len`
* is considered to request the entire string length.
*
* If `pos` is -1, bytes are inserted at the end of the string.
* @param pos position in @string where insertion should happen, or -1 for at the end
* @param val bytes to insert
* @param len number of bytes of @val to insert, or -1 for all of @val
* @returns @string
*/
insert_len(pos: number, val: string, len: number): String;
/**
* Converts a Unicode character into UTF-8, and insert it
* into the string at the given position.
* @param pos the position at which to insert character, or -1 to append at the end of the string
* @param wc a Unicode character
* @returns @string
*/
insert_unichar(pos: number, wc: number): String;
/**
* Overwrites part of a string, lengthening it if necessary.
* @param pos the position at which to start overwriting
* @param val the string that will overwrite the @string starting at @pos
* @returns @string
*/
overwrite(pos: number, val: string): String;
/**
* Overwrites part of a string, lengthening it if necessary.
* This function will work with embedded nuls.
* @param pos the position at which to start overwriting
* @param val the string that will overwrite the @string starting at @pos
* @param len the number of bytes to write from @val
* @returns @string
*/
overwrite_len(pos: number, val: string, len: number): String;
/**
* Adds a string on to the start of a #GString,
* expanding it if necessary.
* @param val the string to prepend on the start of @string
* @returns @string
*/
prepend(val: string): String;
/**
* Adds a byte onto the start of a #GString,
* expanding it if necessary.
* @param c the byte to prepend on the start of the #GString
* @returns @string
*/
prepend_c(c: number): String;
/**
* Prepends `len` bytes of `val` to `string`.
*
* If `len` is positive, `val` may contain embedded nuls and need
* not be nul-terminated. It is the caller's responsibility to
* ensure that `val` has at least `len` addressable bytes.
*
* If `len` is negative, `val` must be nul-terminated and `len`
* is considered to request the entire string length. This
* makes g_string_prepend_len() equivalent to g_string_prepend().
* @param val bytes to prepend
* @param len number of bytes in @val to prepend, or -1 for all of @val
* @returns @string
*/
prepend_len(val: string, len: number): String;
/**
* Converts a Unicode character into UTF-8, and prepends it
* to the string.
* @param wc a Unicode character
* @returns @string
*/
prepend_unichar(wc: number): String;
/**
* Replaces the string `find` with the string `replace` in a #GString up to
* `limit` times. If the number of instances of `find` in the #GString is
* less than `limit,` all instances are replaced. If `limit` is `0`,
* all instances of `find` are replaced.
*
* If `find` is the empty string, since versions 2.69.1 and 2.68.4 the
* replacement will be inserted no more than once per possible position
* (beginning of string, end of string and between characters). This did
* not work correctly in earlier versions.
* @param find the string to find in @string
* @param replace the string to insert in place of @find
* @param limit the maximum instances of @find to replace with @replace, or `0` for no limit
* @returns the number of find and replace operations performed.
*/
replace(find: string, replace: string, limit: number): number;
/**
* Sets the length of a #GString. If the length is less than
* the current length, the string will be truncated. If the
* length is greater than the current length, the contents
* of the newly added area are undefined. (However, as
* always, string->str[string->len] will be a nul byte.)
* @param len the new length
* @returns @string
*/
set_size(len: number): String;
/**
* Cuts off the end of the GString, leaving the first `len` bytes.
* @param len the new size of @string
* @returns @string
*/
truncate(len: number): String;
/**
* Converts a #GString to uppercase.
* @returns @string
*/
up(): String;
}
/**
* `GStringChunk` provides efficient storage of groups of strings
*
* String chunks are used to store groups of strings. Memory is
* allocated in blocks, and as strings are added to the `GStringChunk`
* they are copied into the next free position in a block. When a block
* is full a new block is allocated.
*
* When storing a large number of strings, string chunks are more
* efficient than using [func`GLib`.strdup] since fewer calls to `malloc()`
* are needed, and less memory is wasted in memory allocation overheads.
*
* By adding strings with [method`GLib`.StringChunk.insert_const] it is also
* possible to remove duplicates.
*
* To create a new `GStringChunk` use [func`GLib`.StringChunk.new].
*
* To add strings to a `GStringChunk` use [method`GLib`.StringChunk.insert].
*
* To add strings to a `GStringChunk`, but without duplicating strings
* which are already in the `GStringChunk`, use [method`GLib`.StringChunk.insert_const].
*
* To free the entire `GStringChunk` use [method`GLib`.StringChunk.free].
* It is not possible to free individual strings.
*/
abstract class StringChunk {
static $gtype: GObject.GType<StringChunk>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Frees all strings contained within the #GStringChunk.
* After calling g_string_chunk_clear() it is not safe to
* access any of the strings which were contained within it.
*/
clear(): void;
/**
* Frees all memory allocated by the #GStringChunk.
* After calling g_string_chunk_free() it is not safe to
* access any of the strings which were contained within it.
*/
free(): void;
/**
* Adds a copy of `string` to the #GStringChunk.
* It returns a pointer to the new copy of the string
* in the #GStringChunk. The characters in the string
* can be changed, if necessary, though you should not
* change anything after the end of the string.
*
* Unlike g_string_chunk_insert_const(), this function
* does not check for duplicates. Also strings added
* with g_string_chunk_insert() will not be searched
* by g_string_chunk_insert_const() when looking for
* duplicates.
* @param string the string to add
* @returns a pointer to the copy of @string within the #GStringChunk
*/
insert(string: string): string;
/**
* Adds a copy of `string` to the #GStringChunk, unless the same
* string has already been added to the #GStringChunk with
* g_string_chunk_insert_const().
*
* This function is useful if you need to copy a large number
* of strings but do not want to waste space storing duplicates.
* But you must remember that there may be several pointers to
* the same string, and so any changes made to the strings
* should be done very carefully.
*
* Note that g_string_chunk_insert_const() will not return a
* pointer to a string added with g_string_chunk_insert(), even
* if they do match.
* @param string the string to add
* @returns a pointer to the new or existing copy of @string within the #GStringChunk
*/
insert_const(string: string): string;
/**
* Adds a copy of the first `len` bytes of `string` to the #GStringChunk.
* The copy is nul-terminated.
*
* Since this function does not stop at nul bytes, it is the caller's
* responsibility to ensure that `string` has at least `len` addressable
* bytes.
*
* The characters in the returned string can be changed, if necessary,
* though you should not change anything after the end of the string.
* @param string bytes to insert
* @param len number of bytes of @string to insert, or -1 to insert a nul-terminated string
* @returns a pointer to the copy of @string within the #GStringChunk
*/
insert_len(string: string, len: number): string;
}
/**
* `GStrvBuilder` is a helper object to build a %NULL-terminated string arrays.
*
* The following example shows how to build a two element array:
*
* ```c
* g_autoptr(GStrvBuilder) builder = g_strv_builder_new ();
* g_strv_builder_add (builder, "hello");
* g_strv_builder_add (builder, "world");
*
* g_auto(GStrv) array = g_strv_builder_end (builder);
*
* g_assert_true (g_strv_equal (array, (const char *[]) { "hello", "world", NULL }));
* ```
*/
class StrvBuilder {
static $gtype: GObject.GType<StrvBuilder>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
static ['new'](): StrvBuilder;
// Methods
/**
* Add a string to the end of the array.
*
* Since 2.68
* @param value a string.
*/
add(value: string): void;
/**
* Appends all the strings in the given vector to the builder.
*
* Since 2.70
* @param value the vector of strings to add
*/
addv(value: string[]): void;
/**
* Ends the builder process and returns the constructed NULL-terminated string
* array. The returned value should be freed with g_strfreev() when no longer
* needed.
* @returns the constructed string array. Since 2.68
*/
end(): string[];
/**
* Atomically increments the reference count of `builder` by one.
* This function is thread-safe and may be called from any thread.
* @returns The passed in #GStrvBuilder
*/
ref(): StrvBuilder;
/**
* Add a string to the end of the array. After `value` belongs to the
* #GStrvBuilder and may no longer be modified by the caller.
*
* Since 2.80
* @param value a string. Ownership of the string is transferred to the #GStrvBuilder
*/
take(value: string): void;
/**
* Decreases the reference count on `builder`.
*
* In the event that there are no more references, releases all memory
* associated with the #GStrvBuilder.
*/
unref(): void;
/**
* Decreases the reference count on the string vector builder, and returns
* its contents as a `NULL`-terminated string array.
*
* This function is especially useful for cases where it's not possible
* to use `g_autoptr()`.
*
* ```c
* GStrvBuilder *builder = g_strv_builder_new ();
* g_strv_builder_add (builder, "hello");
* g_strv_builder_add (builder, "world");
*
* GStrv array = g_strv_builder_unref_to_strv (builder);
*
* g_assert_true (g_strv_equal (array, (const char *[]) { "hello", "world", NULL }));
*
* g_strfreev (array);
* ```
* @returns the constructed string array
*/
unref_to_strv(): string[];
}
/**
* An opaque structure representing a test case.
*/
abstract class TestCase {
static $gtype: GObject.GType<TestCase>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Free the `test_case`.
*/
free(): void;
}
class TestConfig {
static $gtype: GObject.GType<TestConfig>;
// Fields
test_initialized: boolean;
test_quick: boolean;
test_perf: boolean;
test_verbose: boolean;
test_quiet: boolean;
test_undefined: boolean;
// Constructors
constructor(
properties?: Partial<{
test_initialized: boolean;
test_quick: boolean;
test_perf: boolean;
test_verbose: boolean;
test_quiet: boolean;
test_undefined: boolean;
}>,
);
_init(...args: any[]): void;
}
class TestLogBuffer {
static $gtype: GObject.GType<TestLogBuffer>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Methods
/**
* Internal function for gtester to free test log messages, no ABI guarantees provided.
*/
free(): void;
/**
* Internal function for gtester to decode test log messages, no ABI guarantees provided.
* @param n_bytes
* @param bytes
*/
push(n_bytes: number, bytes: number): void;
}
class TestLogMsg {
static $gtype: GObject.GType<TestLogMsg>;
// Fields
log_type: TestLogType;
n_strings: number;
strings: string;
n_nums: number;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Internal function for gtester to free test log messages, no ABI guarantees provided.
*/
free(): void;
}
/**
* An opaque structure representing a test suite.
*/
abstract class TestSuite {
static $gtype: GObject.GType<TestSuite>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Adds `test_case` to `suite`.
* @param test_case a test case
*/
add(test_case: TestCase): void;
/**
* Adds `nestedsuite` to `suite`.
* @param nestedsuite another test suite
*/
add_suite(nestedsuite: TestSuite): void;
/**
* Frees the `suite` and all nested suites.
*/
free(): void;
}
/**
* The #GThread struct represents a running thread. This struct
* is returned by g_thread_new() or g_thread_try_new(). You can
* obtain the #GThread struct representing the current thread by
* calling g_thread_self().
*
* GThread is refcounted, see g_thread_ref() and g_thread_unref().
* The thread represented by it holds a reference while it is running,
* and g_thread_join() consumes the reference that it is given, so
* it is normally not necessary to manage GThread references
* explicitly.
*
* The structure is opaque -- none of its fields may be directly
* accessed.
*/
class Thread {
static $gtype: GObject.GType<Thread>;
// Constructors
constructor(name: string | null, func: ThreadFunc);
_init(...args: any[]): void;
static ['new'](name: string | null, func: ThreadFunc): Thread;
static try_new(name: string | null, func: ThreadFunc): Thread;
// Static methods
static error_quark(): Quark;
/**
* Terminates the current thread.
*
* If another thread is waiting for us using g_thread_join() then the
* waiting thread will be woken up and get `retval` as the return value
* of g_thread_join().
*
* Calling g_thread_exit() with a parameter `retval` is equivalent to
* returning `retval` from the function `func,` as given to g_thread_new().
*
* You must only call g_thread_exit() from a thread that you created
* yourself with g_thread_new() or related APIs. You must not call
* this function from a thread created with another threading library
* or or from within a #GThreadPool.
* @param retval the return value of this thread
*/
static exit(retval?: any | null): void;
/**
* This function returns the #GThread corresponding to the
* current thread. Note that this function does not increase
* the reference count of the returned struct.
*
* This function will return a #GThread even for threads that
* were not created by GLib (i.e. those created by other threading
* APIs). This may be useful for thread identification purposes
* (i.e. comparisons) but you must not use GLib functions (such
* as g_thread_join()) on these threads.
*/
static self(): Thread;
/**
* Causes the calling thread to voluntarily relinquish the CPU, so
* that other threads can run.
*
* This function is often used as a method to make busy wait less evil.
*/
static ['yield'](): void;
// Methods
/**
* Gets the name of the thread.
*
* This function is intended for debugging purposes.
* @returns the name of the thread
*/
get_name(): string;
/**
* Waits until `thread` finishes, i.e. the function `func,` as
* given to g_thread_new(), returns or g_thread_exit() is called.
* If `thread` has already terminated, then g_thread_join()
* returns immediately.
*
* Any thread can wait for any other thread by calling g_thread_join(),
* not just its 'creator'. Calling g_thread_join() from multiple threads
* for the same `thread` leads to undefined behaviour.
*
* The value returned by `func` or given to g_thread_exit() is
* returned by this function.
*
* g_thread_join() consumes the reference to the passed-in `thread`.
* This will usually cause the #GThread struct and associated resources
* to be freed. Use g_thread_ref() to obtain an extra reference if you
* want to keep the GThread alive beyond the g_thread_join() call.
* @returns the return value of the thread
*/
join(): any | null;
/**
* Increase the reference count on `thread`.
* @returns a new reference to @thread
*/
ref(): Thread;
/**
* Decrease the reference count on `thread,` possibly freeing all
* resources associated with it.
*
* Note that each thread holds a reference to its #GThread while
* it is running, so it is safe to drop your own reference to it
* if you don't need it anymore.
*/
unref(): void;
}
/**
* The `GThreadPool` struct represents a thread pool.
*
* A thread pool is useful when you wish to asynchronously fork out the execution of work
* and continue working in your own thread. If that will happen often, the overhead of starting
* and destroying a thread each time might be too high. In such cases reusing already started
* threads seems like a good idea. And it indeed is, but implementing this can be tedious
* and error-prone.
*
* Therefore GLib provides thread pools for your convenience. An added advantage is, that the
* threads can be shared between the different subsystems of your program, when they are using GLib.
*
* To create a new thread pool, you use [func`GLib`.ThreadPool.new].
* It is destroyed by [method`GLib`.ThreadPool.free].
*
* If you want to execute a certain task within a thread pool, use [method`GLib`.ThreadPool.push].
*
* To get the current number of running threads you call [method`GLib`.ThreadPool.get_num_threads].
* To get the number of still unprocessed tasks you call [method`GLib`.ThreadPool.unprocessed].
* To control the maximum number of threads for a thread pool, you use
* [method`GLib`.ThreadPool.get_max_threads]. and [method`GLib`.ThreadPool.set_max_threads].
*
* Finally you can control the number of unused threads, that are kept alive by GLib for future use.
* The current number can be fetched with [func`GLib`.ThreadPool.get_num_unused_threads].
* The maximum number can be controlled by [func`GLib`.ThreadPool.get_max_unused_threads] and
* [func`GLib`.ThreadPool.set_max_unused_threads]. All currently unused threads
* can be stopped by calling [func`GLib`.ThreadPool.stop_unused_threads].
*/
class ThreadPool {
static $gtype: GObject.GType<ThreadPool>;
// Fields
func: Func;
user_data: any;
exclusive: boolean;
// Constructors
_init(...args: any[]): void;
// Static methods
/**
* This function will return the maximum `interval` that a
* thread will wait in the thread pool for new tasks before
* being stopped.
*
* If this function returns 0, threads waiting in the thread
* pool for new work are not stopped.
*/
static get_max_idle_time(): number;
/**
* Returns the maximal allowed number of unused threads.
*/
static get_max_unused_threads(): number;
/**
* Returns the number of currently unused threads.
*/
static get_num_unused_threads(): number;
/**
* This function will set the maximum `interval` that a thread
* waiting in the pool for new tasks can be idle for before
* being stopped. This function is similar to calling
* g_thread_pool_stop_unused_threads() on a regular timeout,
* except this is done on a per thread basis.
*
* By setting `interval` to 0, idle threads will not be stopped.
*
* The default value is 15000 (15 seconds).
* @param interval the maximum @interval (in milliseconds) a thread can be idle
*/
static set_max_idle_time(interval: number): void;
/**
* Sets the maximal number of unused threads to `max_threads`.
* If `max_threads` is -1, no limit is imposed on the number
* of unused threads.
*
* The default value is 8 since GLib 2.84. Previously the default value was 2.
* @param max_threads maximal number of unused threads
*/
static set_max_unused_threads(max_threads: number): void;
/**
* Stops all currently unused threads. This does not change the
* maximal number of unused threads. This function can be used to
* regularly stop all unused threads e.g. from g_timeout_add().
*/
static stop_unused_threads(): void;
// Methods
/**
* Frees all resources allocated for `pool`.
*
* If `immediate` is %TRUE, no new task is processed for `pool`.
* Otherwise `pool` is not freed before the last task is processed.
* Note however, that no thread of this pool is interrupted while
* processing a task. Instead at least all still running threads
* can finish their tasks before the `pool` is freed.
*
* If `wait_` is %TRUE, this function does not return before all
* tasks to be processed (dependent on `immediate,` whether all
* or only the currently running) are ready.
* Otherwise this function returns immediately.
*
* After calling this function `pool` must not be used anymore.
* @param immediate should @pool shut down immediately?
* @param wait_ should the function wait for all tasks to be finished?
*/
free(immediate: boolean, wait_: boolean): void;
/**
* Returns the maximal number of threads for `pool`.
* @returns the maximal number of threads
*/
get_max_threads(): number;
/**
* Returns the number of threads currently running in `pool`.
* @returns the number of threads currently running
*/
get_num_threads(): number;
/**
* Moves the item to the front of the queue of unprocessed
* items, so that it will be processed next.
* @param data an unprocessed item in the pool
* @returns %TRUE if the item was found and moved
*/
move_to_front(data?: any | null): boolean;
/**
* Inserts `data` into the list of tasks to be executed by `pool`.
*
* When the number of currently running threads is lower than the
* maximal allowed number of threads, a new thread is started (or
* reused) with the properties given to g_thread_pool_new().
* Otherwise, `data` stays in the queue until a thread in this pool
* finishes its previous task and processes `data`.
*
* `error` can be %NULL to ignore errors, or non-%NULL to report
* errors. An error can only occur when a new thread couldn't be
* created. In that case `data` is simply appended to the queue of
* work to do.
*
* Before version 2.32, this function did not return a success status.
* @param data a new task for @pool
* @returns %TRUE on success, %FALSE if an error occurred
*/
push(data?: any | null): boolean;
/**
* Sets the maximal allowed number of threads for `pool`.
* A value of -1 means that the maximal number of threads
* is unlimited. If `pool` is an exclusive thread pool, setting
* the maximal number of threads to -1 is not allowed.
*
* Setting `max_threads` to 0 means stopping all work for `pool`.
* It is effectively frozen until `max_threads` is set to a non-zero
* value again.
*
* A thread is never terminated while calling `func,` as supplied by
* g_thread_pool_new(). Instead the maximal number of threads only
* has effect for the allocation of new threads in g_thread_pool_push().
* A new thread is allocated, whenever the number of currently
* running threads in `pool` is smaller than the maximal number.
*
* `error` can be %NULL to ignore errors, or non-%NULL to report
* errors. An error can only occur when a new thread couldn't be
* created.
*
* Before version 2.32, this function did not return a success status.
* @param max_threads a new maximal number of threads for @pool, or -1 for unlimited
* @returns %TRUE on success, %FALSE if an error occurred
*/
set_max_threads(max_threads: number): boolean;
/**
* Returns the number of tasks still unprocessed in `pool`.
* @returns the number of unprocessed tasks
*/
unprocessed(): number;
}
/**
* Represents a precise time, with seconds and microseconds.
*
* Similar to the struct timeval returned by the `gettimeofday()`
* UNIX system call.
*
* GLib is attempting to unify around the use of 64-bit integers to
* represent microsecond-precision time. As such, this type will be
* removed from a future version of GLib. A consequence of using `glong` for
* `tv_sec` is that on 32-bit systems `GTimeVal` is subject to the year 2038
* problem.
*/
class TimeVal {
static $gtype: GObject.GType<TimeVal>;
// Fields
tv_sec: number;
tv_usec: number;
// Constructors
constructor(
properties?: Partial<{
tv_sec: number;
tv_usec: number;
}>,
);
_init(...args: any[]): void;
// Static methods
/**
* Converts a string containing an ISO 8601 encoded date and time
* to a #GTimeVal and puts it into `time_`.
*
* `iso_date` must include year, month, day, hours, minutes, and
* seconds. It can optionally include fractions of a second and a time
* zone indicator. (In the absence of any time zone indication, the
* timestamp is assumed to be in local time.)
*
* Any leading or trailing space in `iso_date` is ignored.
*
* This function was deprecated, along with #GTimeVal itself, in GLib 2.62.
* Equivalent functionality is available using code like:
*
* ```
* GDateTime *dt = g_date_time_new_from_iso8601 (iso8601_string, NULL);
* gint64 time_val = g_date_time_to_unix (dt);
* g_date_time_unref (dt);
* ```
*
* @param iso_date an ISO 8601 encoded date string
*/
static from_iso8601(iso_date: string): [boolean, TimeVal];
// Methods
/**
* Adds the given number of microseconds to `time_`. `microseconds` can
* also be negative to decrease the value of `time_`.
* @param microseconds number of microseconds to add to @time
*/
add(microseconds: number): void;
/**
* Converts `time_` into an RFC 3339 encoded string, relative to the
* Coordinated Universal Time (UTC). This is one of the many formats
* allowed by ISO 8601.
*
* ISO 8601 allows a large number of date/time formats, with or without
* punctuation and optional elements. The format returned by this function
* is a complete date and time, with optional punctuation included, the
* UTC time zone represented as "Z", and the `tv_usec` part included if
* and only if it is nonzero, i.e. either
* "YYYY-MM-DDTHH:MM:SSZ" or "YYYY-MM-DDTHH:MM:SS.fffffZ".
*
* This corresponds to the Internet date/time format defined by
* [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt),
* and to either of the two most-precise formats defined by
* the W3C Note
* [Date and Time Formats](http://www.w3.org/TR/NOTE-datetime-19980827).
* Both of these documents are profiles of ISO 8601.
*
* Use g_date_time_format() or g_strdup_printf() if a different
* variation of ISO 8601 format is required.
*
* If `time_` represents a date which is too large to fit into a `struct tm`,
* %NULL will be returned. This is platform dependent. Note also that since
* `GTimeVal` stores the number of seconds as a `glong`, on 32-bit systems it
* is subject to the year 2038 problem. Accordingly, since GLib 2.62, this
* function has been deprecated. Equivalent functionality is available using:
*
* ```
* GDateTime *dt = g_date_time_new_from_unix_utc (time_val);
* iso8601_string = g_date_time_format_iso8601 (dt);
* g_date_time_unref (dt);
* ```
*
*
* The return value of g_time_val_to_iso8601() has been nullable since GLib
* 2.54; before then, GLib would crash under the same conditions.
* @returns a newly allocated string containing an ISO 8601 date, or %NULL if @time_ was too large
*/
to_iso8601(): string | null;
}
/**
* A `GTimeZone` represents a time zone, at no particular point in time.
*
* The `GTimeZone` struct is refcounted and immutable.
*
* Each time zone has an identifier (for example, Europe/London) which is
* platform dependent. See [ctor`GLib`.TimeZone.new] for information on the
* identifier formats. The identifier of a time zone can be retrieved using
* [method`GLib`.TimeZone.get_identifier].
*
* A time zone contains a number of intervals. Each interval has an abbreviation
* to describe it (for example, PDT), an offset to UTC and a flag indicating
* if the daylight savings time is in effect during that interval. A time zone
* always has at least one interval — interval 0. Note that interval abbreviations
* are not the same as time zone identifiers (apart from UTC), and cannot be
* passed to [ctor`GLib`.TimeZone.new].
*
* Every UTC time is contained within exactly one interval, but a given
* local time may be contained within zero, one or two intervals (due to
* incontinuities associated with daylight savings time).
*
* An interval may refer to a specific period of time (eg: the duration
* of daylight savings time during 2010) or it may refer to many periods
* of time that share the same properties (eg: all periods of daylight
* savings time). It is also possible (usually for political reasons)
* that some properties (like the abbreviation) change between intervals
* without other properties changing.
*/
class TimeZone {
static $gtype: GObject.GType<TimeZone>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
static ['new'](identifier?: string | null): TimeZone;
static new_identifier(identifier?: string | null): TimeZone;
static new_local(): TimeZone;
static new_offset(seconds: number): TimeZone;
static new_utc(): TimeZone;
// Methods
/**
* Finds an interval within `tz` that corresponds to the given `time_,`
* possibly adjusting `time_` if required to fit into an interval.
* The meaning of `time_` depends on `type`.
*
* This function is similar to g_time_zone_find_interval(), with the
* difference that it always succeeds (by making the adjustments
* described below).
*
* In any of the cases where g_time_zone_find_interval() succeeds then
* this function returns the same value, without modifying `time_`.
*
* This function may, however, modify `time_` in order to deal with
* non-existent times. If the non-existent local `time_` of 02:30 were
* requested on March 14th 2010 in Toronto then this function would
* adjust `time_` to be 03:00 and return the interval containing the
* adjusted time.
* @param type the #GTimeType of @time_
* @param time_ a pointer to a number of seconds since January 1, 1970
* @returns the interval containing @time_, never -1
*/
adjust_time(type: TimeType | null, time_: number): [number, number];
/**
* Finds an interval within `tz` that corresponds to the given `time_`.
* The meaning of `time_` depends on `type`.
*
* If `type` is %G_TIME_TYPE_UNIVERSAL then this function will always
* succeed (since universal time is monotonic and continuous).
*
* Otherwise `time_` is treated as local time. The distinction between
* %G_TIME_TYPE_STANDARD and %G_TIME_TYPE_DAYLIGHT is ignored except in
* the case that the given `time_` is ambiguous. In Toronto, for example,
* 01:30 on November 7th 2010 occurred twice (once inside of daylight
* savings time and the next, an hour later, outside of daylight savings
* time). In this case, the different value of `type` would result in a
* different interval being returned.
*
* It is still possible for this function to fail. In Toronto, for
* example, 02:00 on March 14th 2010 does not exist (due to the leap
* forward to begin daylight savings time). -1 is returned in that
* case.
* @param type the #GTimeType of @time_
* @param time_ a number of seconds since January 1, 1970
* @returns the interval containing @time_, or -1 in case of failure
*/
find_interval(type: TimeType | null, time_: number): number;
/**
* Determines the time zone abbreviation to be used during a particular
* `interval` of time in the time zone `tz`.
*
* For example, in Toronto this is currently "EST" during the winter
* months and "EDT" during the summer months when daylight savings time
* is in effect.
* @param interval an interval within the timezone
* @returns the time zone abbreviation, which belongs to @tz
*/
get_abbreviation(interval: number): string;
/**
* Get the identifier of this #GTimeZone, as passed to g_time_zone_new().
* If the identifier passed at construction time was not recognised, `UTC` will
* be returned. If it was %NULL, the identifier of the local timezone at
* construction time will be returned.
*
* The identifier will be returned in the same format as provided at
* construction time: if provided as a time offset, that will be returned by
* this function.
* @returns identifier for this timezone
*/
get_identifier(): string;
/**
* Determines the offset to UTC in effect during a particular `interval`
* of time in the time zone `tz`.
*
* The offset is the number of seconds that you add to UTC time to
* arrive at local time for `tz` (ie: negative numbers for time zones
* west of GMT, positive numbers for east).
* @param interval an interval within the timezone
* @returns the number of seconds that should be added to UTC to get the local time in @tz
*/
get_offset(interval: number): number;
/**
* Determines if daylight savings time is in effect during a particular
* `interval` of time in the time zone `tz`.
* @param interval an interval within the timezone
* @returns %TRUE if daylight savings time is in effect
*/
is_dst(interval: number): boolean;
/**
* Increases the reference count on `tz`.
* @returns a new reference to @tz.
*/
ref(): TimeZone;
/**
* Decreases the reference count on `tz`.
*/
unref(): void;
}
/**
* `GTimer` records a start time, and counts microseconds elapsed since
* that time.
*
* This is done somewhat differently on different platforms, and can be
* tricky to get exactly right, so `GTimer` provides a portable/convenient interface.
*/
abstract class Timer {
static $gtype: GObject.GType<Timer>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Resumes a timer that has previously been stopped with
* g_timer_stop(). g_timer_stop() must be called before using this
* function.
*/
['continue'](): void;
/**
* Destroys a timer, freeing associated resources.
*/
destroy(): void;
/**
* If `timer` has been started but not stopped, obtains the time since
* the timer was started. If `timer` has been stopped, obtains the
* elapsed time between the time it was started and the time it was
* stopped. The return value is the number of seconds elapsed,
* including any fractional part. The `microseconds` out parameter is
* essentially useless.
* @param microseconds return location for the fractional part of seconds elapsed, in microseconds (that is, the total number of microseconds elapsed, modulo 1000000), or %NULL
* @returns seconds elapsed as a floating point value, including any fractional part.
*/
elapsed(microseconds: number): number;
/**
* Exposes whether the timer is currently active.
* @returns %TRUE if the timer is running, %FALSE otherwise
*/
is_active(): boolean;
/**
* This function is useless; it's fine to call g_timer_start() on an
* already-started timer to reset the start time, so g_timer_reset()
* serves no purpose.
*/
reset(): void;
/**
* Marks a start time, so that future calls to g_timer_elapsed() will
* report the time since g_timer_start() was called. g_timer_new()
* automatically marks the start time, so no need to call
* g_timer_start() immediately after creating the timer.
*/
start(): void;
/**
* Marks an end time, so calls to g_timer_elapsed() will return the
* difference between this end time and the start time.
*/
stop(): void;
}
/**
* A `GTrashStack` is an efficient way to keep a stack of unused allocated
* memory chunks. Each memory chunk is required to be large enough to hold
* a `gpointer`. This allows the stack to be maintained without any space
* overhead, since the stack pointers can be stored inside the memory chunks.
*
* There is no function to create a `GTrashStack`. A `NULL` `GTrashStack*`
* is a perfectly valid empty stack.
*
* Each piece of memory that is pushed onto the stack is cast to a
* `GTrashStack*`.
*
* There is no longer any good reason to use `GTrashStack`. If you have
* extra pieces of memory, `free()` them and allocate them again later.
*/
class TrashStack {
static $gtype: GObject.GType<TrashStack>;
// Constructors
_init(...args: any[]): void;
// Static methods
/**
* Returns the height of a #GTrashStack.
*
* Note that execution of this function is of O(N) complexity
* where N denotes the number of items on the stack.
* @param stack_p a #GTrashStack
*/
static height(stack_p: TrashStack): number;
/**
* Returns the element at the top of a #GTrashStack
* which may be %NULL.
* @param stack_p a #GTrashStack
*/
static peek(stack_p: TrashStack): any | null;
/**
* Pops a piece of memory off a #GTrashStack.
* @param stack_p a #GTrashStack
*/
static pop(stack_p: TrashStack): any | null;
/**
* Pushes a piece of memory onto a #GTrashStack.
* @param stack_p a #GTrashStack
* @param data_p the piece of memory to push on the stack
*/
static push(stack_p: TrashStack, data_p: any): void;
}
/**
* The GTree struct is an opaque data structure representing a
* [balanced binary tree](data-structures.html#binary-trees). It should be
* accessed only by using the following functions.
*/
class Tree {
static $gtype: GObject.GType<Tree>;
// Constructors
constructor(key_compare_func: CompareFunc);
_init(...args: any[]): void;
static new_full(key_compare_func: CompareDataFunc): Tree;
// Methods
/**
* Removes all keys and values from the #GTree and decreases its
* reference count by one. If keys and/or values are dynamically
* allocated, you should either free them first or create the #GTree
* using g_tree_new_full(). In the latter case the destroy functions
* you supplied will be called on all keys and values before destroying
* the #GTree.
*/
destroy(): void;
/**
* Calls the given function for each of the key/value pairs in the #GTree.
* The function is passed the key and value of each pair, and the given
* `data` parameter. The tree is traversed in sorted order.
*
* The tree may not be modified while iterating over it (you can't
* add/remove items). To remove all items matching a predicate, you need
* to add each item to a list in your #GTraverseFunc as you walk over
* the tree, then walk the list and remove each item.
* @param func the function to call for each node visited. If this function returns %TRUE, the traversal is stopped.
*/
foreach(func: TraverseFunc): void;
/**
* Calls the given function for each of the nodes in the #GTree.
* The function is passed the pointer to the particular node, and the given
* `data` parameter. The tree traversal happens in-order.
*
* The tree may not be modified while iterating over it (you can't
* add/remove items). To remove all items matching a predicate, you need
* to add each item to a list in your #GTraverseFunc as you walk over
* the tree, then walk the list and remove each item.
* @param func the function to call for each node visited. If this function returns %TRUE, the traversal is stopped.
*/
foreach_node(func: TraverseNodeFunc): void;
/**
* Gets the height of a #GTree.
*
* If the #GTree contains no nodes, the height is 0.
* If the #GTree contains only one root node the height is 1.
* If the root node has children the height is 2, etc.
* @returns the height of @tree
*/
height(): number;
/**
* Inserts a key/value pair into a #GTree.
*
* Inserts a new key and value into a #GTree as g_tree_insert_node() does,
* only this function does not return the inserted or set node.
* @param key the key to insert
* @param value the value corresponding to the key
*/
insert(key?: any | null, value?: any | null): void;
/**
* Inserts a key/value pair into a #GTree.
*
* If the given key already exists in the #GTree its corresponding value
* is set to the new value. If you supplied a `value_destroy_func` when
* creating the #GTree, the old value is freed using that function. If
* you supplied a `key_destroy_func` when creating the #GTree, the passed
* key is freed using that function.
*
* The tree is automatically 'balanced' as new key/value pairs are added,
* so that the distance from the root to every leaf is as small as possible.
* The cost of maintaining a balanced tree while inserting new key/value
* result in a O(n log(n)) operation where most of the other operations
* are O(log(n)).
* @param key the key to insert
* @param value the value corresponding to the key
* @returns the inserted (or set) node or %NULL if insertion would overflow the tree node counter.
*/
insert_node(key?: any | null, value?: any | null): TreeNode | null;
/**
* Gets the value corresponding to the given key. Since a #GTree is
* automatically balanced as key/value pairs are added, key lookup
* is O(log n) (where n is the number of key/value pairs in the tree).
* @param key the key to look up
* @returns the value corresponding to the key, or %NULL if the key was not found
*/
lookup(key?: any | null): any | null;
/**
* Looks up a key in the #GTree, returning the original key and the
* associated value. This is useful if you need to free the memory
* allocated for the original key, for example before calling
* g_tree_remove().
* @param lookup_key the key to look up
* @returns %TRUE if the key was found in the #GTree
*/
lookup_extended(lookup_key: any | null): [boolean, any, any];
/**
* Gets the tree node corresponding to the given key. Since a #GTree is
* automatically balanced as key/value pairs are added, key lookup
* is O(log n) (where n is the number of key/value pairs in the tree).
* @param key the key to look up
* @returns the tree node corresponding to the key, or %NULL if the key was not found
*/
lookup_node(key?: any | null): TreeNode | null;
/**
* Gets the lower bound node corresponding to the given key,
* or %NULL if the tree is empty or all the nodes in the tree
* have keys that are strictly lower than the searched key.
*
* The lower bound is the first node that has its key greater
* than or equal to the searched key.
* @param key the key to calculate the lower bound for
* @returns the tree node corresponding to the lower bound, or %NULL if the tree is empty or has only keys strictly lower than the searched key.
*/
lower_bound(key?: any | null): TreeNode | null;
/**
* Gets the number of nodes in a #GTree.
* @returns the number of nodes in @tree The node counter value type is really a #guint, but it is returned as a #gint due to backward compatibility issues (can be cast back to #guint to support its full range of values).
*/
nnodes(): number;
/**
* Returns the first in-order node of the tree, or %NULL
* for an empty tree.
* @returns the first node in the tree
*/
node_first(): TreeNode | null;
/**
* Returns the last in-order node of the tree, or %NULL
* for an empty tree.
* @returns the last node in the tree
*/
node_last(): TreeNode | null;
/**
* Increments the reference count of `tree` by one.
*
* It is safe to call this function from any thread.
* @returns the passed in #GTree
*/
ref(): Tree;
/**
* Removes a key/value pair from a #GTree.
*
* If the #GTree was created using g_tree_new_full(), the key and value
* are freed using the supplied destroy functions, otherwise you have to
* make sure that any dynamically allocated values are freed yourself.
* If the key does not exist in the #GTree, the function does nothing.
*
* The cost of maintaining a balanced tree while removing a key/value
* result in a O(n log(n)) operation where most of the other operations
* are O(log(n)).
* @param key the key to remove
* @returns %TRUE if the key was found (prior to 2.8, this function returned nothing)
*/
remove(key?: any | null): boolean;
/**
* Removes all nodes from a #GTree and destroys their keys and values,
* then resets the #GTrees root to %NULL.
*/
remove_all(): void;
/**
* Inserts a new key and value into a #GTree as g_tree_replace_node() does,
* only this function does not return the inserted or set node.
* @param key the key to insert
* @param value the value corresponding to the key
*/
replace(key?: any | null, value?: any | null): void;
/**
* Inserts a new key and value into a #GTree similar to g_tree_insert_node().
* The difference is that if the key already exists in the #GTree, it gets
* replaced by the new key. If you supplied a `value_destroy_func` when
* creating the #GTree, the old value is freed using that function. If you
* supplied a `key_destroy_func` when creating the #GTree, the old key is
* freed using that function.
*
* The tree is automatically 'balanced' as new key/value pairs are added,
* so that the distance from the root to every leaf is as small as possible.
* @param key the key to insert
* @param value the value corresponding to the key
* @returns the inserted (or set) node or %NULL if insertion would overflow the tree node counter.
*/
replace_node(key?: any | null, value?: any | null): TreeNode | null;
/**
* Searches a #GTree using `search_func`.
*
* The `search_func` is called with a pointer to the key of a key/value
* pair in the tree, and the passed in `user_data`. If `search_func` returns
* 0 for a key/value pair, then the corresponding value is returned as
* the result of g_tree_search(). If `search_func` returns -1, searching
* will proceed among the key/value pairs that have a smaller key; if
* `search_func` returns 1, searching will proceed among the key/value
* pairs that have a larger key.
* @param search_func a function used to search the #GTree
* @returns the value corresponding to the found key, or %NULL if the key was not found
*/
search(search_func: CompareFunc): any | null;
/**
* Searches a #GTree using `search_func`.
*
* The `search_func` is called with a pointer to the key of a key/value
* pair in the tree, and the passed in `user_data`. If `search_func` returns
* 0 for a key/value pair, then the corresponding node is returned as
* the result of g_tree_search(). If `search_func` returns -1, searching
* will proceed among the key/value pairs that have a smaller key; if
* `search_func` returns 1, searching will proceed among the key/value
* pairs that have a larger key.
* @param search_func a function used to search the #GTree
* @returns the node corresponding to the found key, or %NULL if the key was not found
*/
search_node(search_func: CompareFunc): TreeNode | null;
/**
* Removes a key and its associated value from a #GTree without calling
* the key and value destroy functions.
*
* If the key does not exist in the #GTree, the function does nothing.
* @param key the key to remove
* @returns %TRUE if the key was found (prior to 2.8, this function returned nothing)
*/
steal(key?: any | null): boolean;
/**
* Calls the given function for each node in the #GTree.
* @param traverse_func the function to call for each node visited. If this function returns %TRUE, the traversal is stopped.
* @param traverse_type the order in which nodes are visited, one of %G_IN_ORDER, %G_PRE_ORDER and %G_POST_ORDER
*/
traverse(traverse_func: TraverseFunc, traverse_type: TraverseType | null): void;
/**
* Decrements the reference count of `tree` by one.
* If the reference count drops to 0, all keys and values will
* be destroyed (if destroy functions were specified) and all
* memory allocated by `tree` will be released.
*
* It is safe to call this function from any thread.
*/
unref(): void;
/**
* Gets the upper bound node corresponding to the given key,
* or %NULL if the tree is empty or all the nodes in the tree
* have keys that are lower than or equal to the searched key.
*
* The upper bound is the first node that has its key strictly greater
* than the searched key.
* @param key the key to calculate the upper bound for
* @returns the tree node corresponding to the upper bound, or %NULL if the tree is empty or has only keys lower than or equal to the searched key.
*/
upper_bound(key?: any | null): TreeNode | null;
}
/**
* An opaque type which identifies a specific node in a #GTree.
*/
abstract class TreeNode {
static $gtype: GObject.GType<TreeNode>;
// Constructors
_init(...args: any[]): void;
// Methods
/**
* Gets the key stored at a particular tree node.
* @returns the key at the node.
*/
key(): any | null;
/**
* Returns the next in-order node of the tree, or %NULL
* if the passed node was already the last one.
* @returns the next node in the tree
*/
next(): TreeNode | null;
/**
* Returns the previous in-order node of the tree, or %NULL
* if the passed node was already the first one.
* @returns the previous node in the tree
*/
previous(): TreeNode | null;
/**
* Gets the value stored at a particular tree node.
* @returns the value at the node.
*/
value(): any | null;
}
/**
* The #GTuples struct is used to return records (or tuples) from the
* #GRelation by g_relation_select(). It only contains one public
* member - the number of records that matched. To access the matched
* records, you must use g_tuples_index().
*/
class Tuples {
static $gtype: GObject.GType<Tuples>;
// Fields
len: number;
// Constructors
constructor(
properties?: Partial<{
len: number;
}>,
);
_init(...args: any[]): void;
// Methods
/**
* Frees the records which were returned by g_relation_select(). This
* should always be called after g_relation_select() when you are
* finished with the records. The records are not removed from the
* #GRelation.
*/
destroy(): void;
/**
* Gets a field from the records returned by g_relation_select(). It
* returns the given field of the record at the given index. The
* returned value should not be changed.
* @param index_ the index of the record.
* @param field the field to return.
* @returns the field of the record.
*/
index(index_: number, field: number): any | null;
}
/**
* A Unix pipe. The advantage of this type over `int[2]` is that it can
* be closed automatically when it goes out of scope, using `g_auto(GUnixPipe)`,
* on compilers that support that feature.
*/
class UnixPipe {
static $gtype: GObject.GType<UnixPipe>;
// Fields
fds: number[];
// Constructors
constructor(
properties?: Partial<{
fds: number[];
}>,
);
_init(...args: any[]): void;
}
/**
* The `GUri` type and related functions can be used to parse URIs into
* their components, and build valid URIs from individual components.
*
* Since `GUri` only represents absolute URIs, all `GUri`s will have a
* URI scheme, so [method`GLib`.Uri.get_scheme] will always return a non-`NULL`
* answer. Likewise, by definition, all URIs have a path component, so
* [method`GLib`.Uri.get_path] will always return a non-`NULL` string (which may
* be empty).
*
* If the URI string has an
* [authority component](https://tools.ietf.org/html/rfc3986#section-3) (that
* is, if the scheme is followed by `://` rather than just `:`), then the
* `GUri` will contain a hostname, and possibly a port and userinfo.
* Additionally, depending on how the `GUri` was constructed/parsed (for example,
* using the `G_URI_FLAGS_HAS_PASSWORD` and `G_URI_FLAGS_HAS_AUTH_PARAMS` flags),
* the userinfo may be split out into a username, password, and
* additional authorization-related parameters.
*
* Normally, the components of a `GUri` will have all `%`-encoded
* characters decoded. However, if you construct/parse a `GUri` with
* `G_URI_FLAGS_ENCODED`, then the `%`-encoding will be preserved instead in
* the userinfo, path, and query fields (and in the host field if also
* created with `G_URI_FLAGS_NON_DNS`). In particular, this is necessary if
* the URI may contain binary data or non-UTF-8 text, or if decoding
* the components might change the interpretation of the URI.
*
* For example, with the encoded flag:
*
* ```c
* g_autoptr(GUri) uri = g_uri_parse ("http://host/path?query=http%3A%2F%2Fhost%2Fpath%3Fparam%3Dvalue", G_URI_FLAGS_ENCODED, &err);
* g_assert_cmpstr (g_uri_get_query (uri), ==, "query=http%3A%2F%2Fhost%2Fpath%3Fparam%3Dvalue");
* ```
*
* While the default `%`-decoding behaviour would give:
*
* ```c
* g_autoptr(GUri) uri = g_uri_parse ("http://host/path?query=http%3A%2F%2Fhost%2Fpath%3Fparam%3Dvalue", G_URI_FLAGS_NONE, &err);
* g_assert_cmpstr (g_uri_get_query (uri), ==, "query=http://host/path?param=value");
* ```
*
* During decoding, if an invalid UTF-8 string is encountered, parsing will fail
* with an error indicating the bad string location:
*
* ```c
* g_autoptr(GUri) uri = g_uri_parse ("http://host/path?query=http%3A%2F%2Fhost%2Fpath%3Fbad%3D%00alue", G_URI_FLAGS_NONE, &err);
* g_assert_error (err, G_URI_ERROR, G_URI_ERROR_BAD_QUERY);
* ```
*
* You should pass `G_URI_FLAGS_ENCODED` or `G_URI_FLAGS_ENCODED_QUERY` if you
* need to handle that case manually. In particular, if the query string
* contains `=` characters that are `%`-encoded, you should let
* [func`GLib`.Uri.parse_params] do the decoding once of the query.
*
* `GUri` is immutable once constructed, and can safely be accessed from
* multiple threads. Its reference counting is atomic.
*
* Note that the scope of `GUri` is to help manipulate URIs in various applications,
* following [RFC 3986](https://tools.ietf.org/html/rfc3986). In particular,
* it doesn't intend to cover web browser needs, and doesnt implement the
* [WHATWG URL](https://url.spec.whatwg.org/) standard. No APIs are provided to
* help prevent
* [homograph attacks](https://en.wikipedia.org/wiki/IDN_homograph_attack), so
* `GUri` is not suitable for formatting URIs for display to the user for making
* security-sensitive decisions.
*
* ## Relative and absolute URIs
*
* As defined in [RFC 3986](https://tools.ietf.org/html/rfc3986#section-4), the
* hierarchical nature of URIs means that they can either be relative
* references (sometimes referred to as relative URIs) or URIs (for
* clarity, URIs are referred to in this documentation as
* absolute URIs — although
* [in contrast to RFC 3986](https://tools.ietf.org/html/rfc3986#section-4.3),
* fragment identifiers are always allowed).
*
* Relative references have one or more components of the URI missing. In
* particular, they have no scheme. Any other component, such as hostname,
* query, etc. may be missing, apart from a path, which has to be specified (but
* may be empty). The path may be relative, starting with `./` rather than `/`.
*
* For example, a valid relative reference is `./path?query`,
* `/?query#fragment` or `//example.com`.
*
* Absolute URIs have a scheme specified. Any other components of the URI which
* are missing are specified as explicitly unset in the URI, rather than being
* resolved relative to a base URI using [method`GLib`.Uri.parse_relative].
*
* For example, a valid absolute URI is `file:///home/bob` or
* `https://search.com?query=string`.
*
* A `GUri` instance is always an absolute URI. A string may be an absolute URI
* or a relative reference; see the documentation for individual functions as to
* what forms they accept.
*
* ## Parsing URIs
*
* The most minimalist APIs for parsing URIs are [func`GLib`.Uri.split] and
* [func`GLib`.Uri.split_with_user]. These split a URI into its component
* parts, and return the parts; the difference between the two is that
* [func`GLib`.Uri.split] treats the userinfo component of the URI as a
* single element, while [func`GLib`.Uri.split_with_user] can (depending on the
* [flags`GLib`.UriFlags] you pass) treat it as containing a username, password,
* and authentication parameters. Alternatively, [func`GLib`.Uri.split_network]
* can be used when you are only interested in the components that are
* needed to initiate a network connection to the service (scheme,
* host, and port).
*
* [func`GLib`.Uri.parse] is similar to [func`GLib`.Uri.split], but instead of
* returning individual strings, it returns a `GUri` structure (and it requires
* that the URI be an absolute URI).
*
* [func`GLib`.Uri.resolve_relative] and [method`GLib`.Uri.parse_relative] allow
* you to resolve a relative URI relative to a base URI.
* [func`GLib`.Uri.resolve_relative] takes two strings and returns a string,
* and [method`GLib`.Uri.parse_relative] takes a `GUri` and a string and returns a
* `GUri`.
*
* All of the parsing functions take a [flags`GLib`.UriFlags] argument describing
* exactly how to parse the URI; see the documentation for that type
* for more details on the specific flags that you can pass. If you
* need to choose different flags based on the type of URI, you can
* use [func`GLib`.Uri.peek_scheme] on the URI string to check the scheme
* first, and use that to decide what flags to parse it with.
*
* For example, you might want to use `G_URI_PARAMS_WWW_FORM` when parsing the
* params for a web URI, so compare the result of [func`GLib`.Uri.peek_scheme]
* against `http` and `https`.
*
* ## Building URIs
*
* [func`GLib`.Uri.join] and [func`GLib`.Uri.join_with_user] can be used to construct
* valid URI strings from a set of component strings. They are the
* inverse of [func`GLib`.Uri.split] and [func`GLib`.Uri.split_with_user].
*
* Similarly, [func`GLib`.Uri.build] and [func`GLib`.Uri.build_with_user] can be
* used to construct a `GUri` from a set of component strings.
*
* As with the parsing functions, the building functions take a
* [flags`GLib`.UriFlags] argument. In particular, it is important to keep in mind
* whether the URI components you are using are already `%`-encoded. If so,
* you must pass the `G_URI_FLAGS_ENCODED` flag.
*
* ## `file://` URIs
*
* Note that Windows and Unix both define special rules for parsing
* `file://` URIs (involving non-UTF-8 character sets on Unix, and the
* interpretation of path separators on Windows). `GUri` does not
* implement these rules. Use [func`GLib`.filename_from_uri] and
* [func`GLib`.filename_to_uri] if you want to properly convert between
* `file://` URIs and local filenames.
*
* ## URI Equality
*
* Note that there is no `g_uri_equal ()` function, because comparing
* URIs usefully requires scheme-specific knowledge that `GUri` does
* not have. `GUri` can help with normalization if you use the various
* encoded [flags`GLib`.UriFlags] as well as `G_URI_FLAGS_SCHEME_NORMALIZE`
* however it is not comprehensive.
* For example, `data:,foo` and `data:;base64,Zm9v` resolve to the same
* thing according to the `data:` URI specification which GLib does not
* handle.
*/
abstract class Uri {
static $gtype: GObject.GType<Uri>;
// Constructors
_init(...args: any[]): void;
// Static methods
/**
* Creates a new #GUri from the given components according to `flags`.
*
* See also g_uri_build_with_user(), which allows specifying the
* components of the "userinfo" separately.
* @param flags flags describing how to build the #GUri
* @param scheme the URI scheme
* @param userinfo the userinfo component, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
*/
static build(
flags: UriFlags,
scheme: string,
userinfo: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): Uri;
/**
* Creates a new #GUri from the given components according to `flags`
* (%G_URI_FLAGS_HAS_PASSWORD is added unconditionally). The `flags` must be
* coherent with the passed values, in particular use `%`-encoded values with
* %G_URI_FLAGS_ENCODED.
*
* In contrast to g_uri_build(), this allows specifying the components
* of the userinfo field separately. Note that `user` must be non-%NULL
* if either `password` or `auth_params` is non-%NULL.
* @param flags flags describing how to build the #GUri
* @param scheme the URI scheme
* @param user the user component of the userinfo, or %NULL
* @param password the password component of the userinfo, or %NULL
* @param auth_params the auth params of the userinfo, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
*/
static build_with_user(
flags: UriFlags,
scheme: string,
user: string | null,
password: string | null,
auth_params: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): Uri;
static error_quark(): Quark;
/**
* Escapes arbitrary data for use in a URI.
*
* Normally all characters that are not unreserved (i.e. ASCII
* alphanumerical characters plus dash, dot, underscore and tilde) are
* escaped. But if you specify characters in `reserved_chars_allowed`
* they are not escaped. This is useful for the reserved characters
* in the URI specification, since those are allowed unescaped in some
* portions of a URI.
*
* Though technically incorrect, this will also allow escaping nul
* bytes as `%``00`.
* @param unescaped the unescaped input data.
* @param reserved_chars_allowed a string of reserved characters that are allowed to be used, or %NULL.
*/
static escape_bytes(unescaped: Uint8Array | string, reserved_chars_allowed?: string | null): string;
/**
* Escapes a string for use in a URI.
*
* Normally all characters that are not "unreserved" (i.e. ASCII
* alphanumerical characters plus dash, dot, underscore and tilde) are
* escaped. But if you specify characters in `reserved_chars_allowed`
* they are not escaped. This is useful for the "reserved" characters
* in the URI specification, since those are allowed unescaped in some
* portions of a URI.
* @param unescaped the unescaped input string.
* @param reserved_chars_allowed a string of reserved characters that are allowed to be used, or %NULL.
* @param allow_utf8 %TRUE if the result can include UTF-8 characters.
*/
static escape_string(unescaped: string, reserved_chars_allowed: string | null, allow_utf8: boolean): string;
/**
* Parses `uri_string` according to `flags,` to determine whether it is a valid
* [absolute URI](#relative-and-absolute-uris), i.e. it does not need to be resolved
* relative to another URI using g_uri_parse_relative().
*
* If its not a valid URI, an error is returned explaining how its invalid.
*
* See g_uri_split(), and the definition of #GUriFlags, for more
* information on the effect of `flags`.
* @param uri_string a string containing an absolute URI
* @param flags flags for parsing @uri_string
*/
static is_valid(uri_string: string, flags: UriFlags): boolean;
/**
* Joins the given components together according to `flags` to create
* an absolute URI string. `path` may not be %NULL (though it may be the empty
* string).
*
* When `host` is present, `path` must either be empty or begin with a slash (`/`)
* character. When `host` is not present, `path` cannot begin with two slash
* characters (`//`). See
* [RFC 3986, section 3](https://tools.ietf.org/html/rfc3986#section-3).
*
* See also g_uri_join_with_user(), which allows specifying the
* components of the userinfo separately.
*
* %G_URI_FLAGS_HAS_PASSWORD and %G_URI_FLAGS_HAS_AUTH_PARAMS are ignored if set
* in `flags`.
* @param flags flags describing how to build the URI string
* @param scheme the URI scheme, or %NULL
* @param userinfo the userinfo component, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
*/
static join(
flags: UriFlags,
scheme: string | null,
userinfo: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): string;
/**
* Joins the given components together according to `flags` to create
* an absolute URI string. `path` may not be %NULL (though it may be the empty
* string).
*
* In contrast to g_uri_join(), this allows specifying the components
* of the userinfo separately. It otherwise behaves the same.
*
* %G_URI_FLAGS_HAS_PASSWORD and %G_URI_FLAGS_HAS_AUTH_PARAMS are ignored if set
* in `flags`.
* @param flags flags describing how to build the URI string
* @param scheme the URI scheme, or %NULL
* @param user the user component of the userinfo, or %NULL
* @param password the password component of the userinfo, or %NULL
* @param auth_params the auth params of the userinfo, or %NULL
* @param host the host component, or %NULL
* @param port the port, or `-1`
* @param path the path component
* @param query the query component, or %NULL
* @param fragment the fragment, or %NULL
*/
static join_with_user(
flags: UriFlags,
scheme: string | null,
user: string | null,
password: string | null,
auth_params: string | null,
host: string | null,
port: number,
path: string,
query?: string | null,
fragment?: string | null,
): string;
/**
* Splits an URI list conforming to the text/uri-list
* mime type defined in RFC 2483 into individual URIs,
* discarding any comments. The URIs are not validated.
* @param uri_list an URI list
*/
static list_extract_uris(uri_list: string): string[];
/**
* Parses `uri_string` according to `flags`. If the result is not a
* valid [absolute URI](#relative-and-absolute-uris), it will be discarded, and an
* error returned.
* @param uri_string a string representing an absolute URI
* @param flags flags describing how to parse @uri_string
*/
static parse(uri_string: string, flags: UriFlags): Uri;
/**
* Many URI schemes include one or more attribute/value pairs as part of the URI
* value. This method can be used to parse them into a hash table. When an
* attribute has multiple occurrences, the last value is the final returned
* value. If you need to handle repeated attributes differently, use
* #GUriParamsIter.
*
* The `params` string is assumed to still be `%`-encoded, but the returned
* values will be fully decoded. (Thus it is possible that the returned values
* may contain `=` or `separators,` if the value was encoded in the input.)
* Invalid `%`-encoding is treated as with the %G_URI_FLAGS_PARSE_RELAXED
* rules for g_uri_parse(). (However, if `params` is the path or query string
* from a #GUri that was parsed without %G_URI_FLAGS_PARSE_RELAXED and
* %G_URI_FLAGS_ENCODED, then you already know that it does not contain any
* invalid encoding.)
*
* %G_URI_PARAMS_WWW_FORM is handled as documented for g_uri_params_iter_init().
*
* If %G_URI_PARAMS_CASE_INSENSITIVE is passed to `flags,` attributes will be
* compared case-insensitively, so a params string `attr=123&Attr=456` will only
* return a single attributevalue pair, `Attr=456`. Case will be preserved in
* the returned attributes.
*
* If `params` cannot be parsed (for example, it contains two `separators`
* characters in a row), then `error` is set and %NULL is returned.
* @param params a `%`-encoded string containing `attribute=value` parameters
* @param length the length of @params, or `-1` if it is nul-terminated
* @param separators the separator byte character set between parameters. (usually `&`, but sometimes `;` or both `&;`). Note that this function works on bytes not characters, so it can't be used to delimit UTF-8 strings for anything but ASCII characters. You may pass an empty set, in which case no splitting will occur.
* @param flags flags to modify the way the parameters are handled.
*/
static parse_params(
params: string,
length: number,
separators: string,
flags: UriParamsFlags,
): HashTable<string, string>;
/**
* Gets the scheme portion of a URI string.
* [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) decodes the scheme
* as:
*
* ```
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
* ```
*
* Common schemes include `file`, `https`, `svn+ssh`, etc.
* @param uri a valid URI.
*/
static parse_scheme(uri: string): string | null;
/**
* Gets the scheme portion of a URI string.
* [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3) decodes the scheme
* as:
*
* ```
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
* ```
*
* Common schemes include `file`, `https`, `svn+ssh`, etc.
*
* Unlike g_uri_parse_scheme(), the returned scheme is normalized to
* all-lowercase and does not need to be freed.
* @param uri a valid URI.
*/
static peek_scheme(uri: string): string | null;
/**
* Parses `uri_ref` according to `flags` and, if it is a
* [relative URI](#relative-and-absolute-uris), resolves it relative to
* `base_uri_string`. If the result is not a valid absolute URI, it will be
* discarded, and an error returned.
*
* (If `base_uri_string` is %NULL, this just returns `uri_ref,` or
* %NULL if `uri_ref` is invalid or not absolute.)
* @param base_uri_string a string representing a base URI
* @param uri_ref a string representing a relative or absolute URI
* @param flags flags describing how to parse @uri_ref
*/
static resolve_relative(base_uri_string: string | null, uri_ref: string, flags: UriFlags): string;
/**
* Parses `uri_ref` (which can be an
* [absolute or relative URI](#relative-and-absolute-uris)) according to `flags,` and
* returns the pieces. Any component that doesn't appear in `uri_ref` will be
* returned as %NULL (but note that all URIs always have a path component,
* though it may be the empty string).
*
* If `flags` contains %G_URI_FLAGS_ENCODED, then `%`-encoded characters in
* `uri_ref` will remain encoded in the output strings. (If not,
* then all such characters will be decoded.) Note that decoding will
* only work if the URI components are ASCII or UTF-8, so you will
* need to use %G_URI_FLAGS_ENCODED if they are not.
*
* Note that the %G_URI_FLAGS_HAS_PASSWORD and
* %G_URI_FLAGS_HAS_AUTH_PARAMS `flags` are ignored by g_uri_split(),
* since it always returns only the full userinfo; use
* g_uri_split_with_user() if you want it split up.
* @param uri_ref a string containing a relative or absolute URI
* @param flags flags for parsing @uri_ref
*/
static split(
uri_ref: string,
flags: UriFlags,
): [boolean, string, string, string, number, string, string, string];
/**
* Parses `uri_string` (which must be an [absolute URI](#relative-and-absolute-uris))
* according to `flags,` and returns the pieces relevant to connecting to a host.
* See the documentation for g_uri_split() for more details; this is
* mostly a wrapper around that function with simpler arguments.
* However, it will return an error if `uri_string` is a relative URI,
* or does not contain a hostname component.
* @param uri_string a string containing an absolute URI
* @param flags flags for parsing @uri_string
*/
static split_network(uri_string: string, flags: UriFlags): [boolean, string, string, number];
/**
* Parses `uri_ref` (which can be an
* [absolute or relative URI](#relative-and-absolute-uris)) according to `flags,` and
* returns the pieces. Any component that doesn't appear in `uri_ref` will be
* returned as %NULL (but note that all URIs always have a path component,
* though it may be the empty string).
*
* See g_uri_split(), and the definition of #GUriFlags, for more
* information on the effect of `flags`. Note that `password` will only
* be parsed out if `flags` contains %G_URI_FLAGS_HAS_PASSWORD, and
* `auth_params` will only be parsed out if `flags` contains
* %G_URI_FLAGS_HAS_AUTH_PARAMS.
* @param uri_ref a string containing a relative or absolute URI
* @param flags flags for parsing @uri_ref
*/
static split_with_user(
uri_ref: string,
flags: UriFlags,
): [boolean, string, string, string, string, string, number, string, string, string];
/**
* Unescapes a segment of an escaped string as binary data.
*
* Note that in contrast to g_uri_unescape_string(), this does allow
* nul bytes to appear in the output.
*
* If any of the characters in `illegal_characters` appears as an escaped
* character in `escaped_string,` then that is an error and %NULL will be
* returned. This is useful if you want to avoid for instance having a slash
* being expanded in an escaped path element, which might confuse pathname
* handling.
* @param escaped_string A URI-escaped string
* @param length the length (in bytes) of @escaped_string to escape, or `-1` if it is nul-terminated.
* @param illegal_characters a string of illegal characters not to be allowed, or %NULL.
*/
static unescape_bytes(escaped_string: string, length: number, illegal_characters?: string | null): Bytes;
/**
* Unescapes a segment of an escaped string.
*
* If any of the characters in `illegal_characters` or the NUL
* character appears as an escaped character in `escaped_string,` then
* that is an error and %NULL will be returned. This is useful if you
* want to avoid for instance having a slash being expanded in an
* escaped path element, which might confuse pathname handling.
*
* Note: `NUL` byte is not accepted in the output, in contrast to
* g_uri_unescape_bytes().
* @param escaped_string A string, may be %NULL
* @param escaped_string_end Pointer to end of @escaped_string, may be %NULL
* @param illegal_characters An optional string of illegal characters not to be allowed, may be %NULL
*/
static unescape_segment(
escaped_string?: string | null,
escaped_string_end?: string | null,
illegal_characters?: string | null,
): string | null;
/**
* Unescapes a whole escaped string.
*
* If any of the characters in `illegal_characters` or the NUL
* character appears as an escaped character in `escaped_string,` then
* that is an error and %NULL will be returned. This is useful if you
* want to avoid for instance having a slash being expanded in an
* escaped path element, which might confuse pathname handling.
* @param escaped_string an escaped string to be unescaped.
* @param illegal_characters a string of illegal characters not to be allowed, or %NULL.
*/
static unescape_string(escaped_string: string, illegal_characters?: string | null): string | null;
// Methods
/**
* Gets `uri'`s authentication parameters, which may contain
* `%`-encoding, depending on the flags with which `uri` was created.
* (If `uri` was not created with %G_URI_FLAGS_HAS_AUTH_PARAMS then this will
* be %NULL.)
*
* Depending on the URI scheme, g_uri_parse_params() may be useful for
* further parsing this information.
* @returns @uri's authentication parameters.
*/
get_auth_params(): string | null;
/**
* Gets `uri'`s flags set upon construction.
* @returns @uri's flags.
*/
get_flags(): UriFlags;
/**
* Gets `uri'`s fragment, which may contain `%`-encoding, depending on
* the flags with which `uri` was created.
* @returns @uri's fragment.
*/
get_fragment(): string | null;
/**
* Gets `uri'`s host. This will never have `%`-encoded characters,
* unless it is non-UTF-8 (which can only be the case if `uri` was
* created with %G_URI_FLAGS_NON_DNS).
*
* If `uri` contained an IPv6 address literal, this value will be just
* that address, without the brackets around it that are necessary in
* the string form of the URI. Note that in this case there may also
* be a scope ID attached to the address. Eg, `fe80::1234%``em1` (or
* `fe80::1234%``25em1` if the string is still encoded).
* @returns @uri's host.
*/
get_host(): string | null;
/**
* Gets `uri'`s password, which may contain `%`-encoding, depending on
* the flags with which `uri` was created. (If `uri` was not created
* with %G_URI_FLAGS_HAS_PASSWORD then this will be %NULL.)
* @returns @uri's password.
*/
get_password(): string | null;
/**
* Gets `uri'`s path, which may contain `%`-encoding, depending on the
* flags with which `uri` was created.
* @returns @uri's path.
*/
get_path(): string;
/**
* Gets `uri'`s port.
* @returns @uri's port, or `-1` if no port was specified.
*/
get_port(): number;
/**
* Gets `uri'`s query, which may contain `%`-encoding, depending on the
* flags with which `uri` was created.
*
* For queries consisting of a series of `name=value` parameters,
* #GUriParamsIter or g_uri_parse_params() may be useful.
* @returns @uri's query.
*/
get_query(): string | null;
/**
* Gets `uri'`s scheme. Note that this will always be all-lowercase,
* regardless of the string or strings that `uri` was created from.
* @returns @uri's scheme.
*/
get_scheme(): string;
/**
* Gets the username component of `uri'`s userinfo, which may contain
* `%`-encoding, depending on the flags with which `uri` was created.
* If `uri` was not created with %G_URI_FLAGS_HAS_PASSWORD or
* %G_URI_FLAGS_HAS_AUTH_PARAMS, this is the same as g_uri_get_userinfo().
* @returns @uri's user.
*/
get_user(): string | null;
/**
* Gets `uri'`s userinfo, which may contain `%`-encoding, depending on
* the flags with which `uri` was created.
* @returns @uri's userinfo.
*/
get_userinfo(): string | null;
/**
* Parses `uri_ref` according to `flags` and, if it is a
* [relative URI](#relative-and-absolute-uris), resolves it relative to `base_uri`.
* If the result is not a valid absolute URI, it will be discarded, and an error
* returned.
* @param uri_ref a string representing a relative or absolute URI
* @param flags flags describing how to parse @uri_ref
* @returns a new #GUri, or NULL on error.
*/
parse_relative(uri_ref: string, flags: UriFlags | null): Uri;
/**
* Returns a string representing `uri`.
*
* This is not guaranteed to return a string which is identical to the
* string that `uri` was parsed from. However, if the source URI was
* syntactically correct (according to RFC 3986), and it was parsed
* with %G_URI_FLAGS_ENCODED, then g_uri_to_string() is guaranteed to return
* a string which is at least semantically equivalent to the source
* URI (according to RFC 3986).
*
* If `uri` might contain sensitive details, such as authentication parameters,
* or private data in its query string, and the returned string is going to be
* logged, then consider using g_uri_to_string_partial() to redact parts.
* @returns a string representing @uri, which the caller must free.
*/
to_string(): string;
/**
* Returns a string representing `uri,` subject to the options in
* `flags`. See g_uri_to_string() and #GUriHideFlags for more details.
* @param flags flags describing what parts of @uri to hide
* @returns a string representing @uri, which the caller must free.
*/
to_string_partial(flags: UriHideFlags | null): string;
}
/**
* Many URI schemes include one or more attribute/value pairs as part of the URI
* value. For example `scheme://server/path?query=string&is=there` has two
* attributes `query=string` and `is=there` in its query part.
*
* A #GUriParamsIter structure represents an iterator that can be used to
* iterate over the attribute/value pairs of a URI query string. #GUriParamsIter
* structures are typically allocated on the stack and then initialized with
* g_uri_params_iter_init(). See the documentation for g_uri_params_iter_init()
* for a usage example.
*/
class UriParamsIter {
static $gtype: GObject.GType<UriParamsIter>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Methods
/**
* Initializes an attribute/value pair iterator.
*
* The iterator keeps pointers to the `params` and `separators` arguments, those
* variables must thus outlive the iterator and not be modified during the
* iteration.
*
* If %G_URI_PARAMS_WWW_FORM is passed in `flags,` `+` characters in the param
* string will be replaced with spaces in the output. For example, `foo=bar+baz`
* will give attribute `foo` with value `bar baz`. This is commonly used on the
* web (the `https` and `http` schemes only), but is deprecated in favour of
* the equivalent of encoding spaces as `%20`.
*
* Unlike with g_uri_parse_params(), %G_URI_PARAMS_CASE_INSENSITIVE has no
* effect if passed to `flags` for g_uri_params_iter_init(). The caller is
* responsible for doing their own case-insensitive comparisons.
*
*
* ```c
* GUriParamsIter iter;
* GError *error = NULL;
* gchar *unowned_attr, *unowned_value;
*
* g_uri_params_iter_init (&iter, "foo=bar&baz=bar&Foo=frob&baz=bar2", -1, "&", G_URI_PARAMS_NONE);
* while (g_uri_params_iter_next (&iter, &unowned_attr, &unowned_value, &error))
* {
* g_autofree gchar *attr = g_steal_pointer (&unowned_attr);
* g_autofree gchar *value = g_steal_pointer (&unowned_value);
* // do something with attr and value; this code will be called 4 times
* // for the params string in this example: once with attr=foo and value=bar,
* // then with baz/bar, then Foo/frob, then baz/bar2.
* }
* if (error)
* // handle parsing error
* ```
*
* @param params a `%`-encoded string containing `attribute=value` parameters
* @param length the length of @params, or `-1` if it is nul-terminated
* @param separators the separator byte character set between parameters. (usually `&`, but sometimes `;` or both `&;`). Note that this function works on bytes not characters, so it can't be used to delimit UTF-8 strings for anything but ASCII characters. You may pass an empty set, in which case no splitting will occur.
* @param flags flags to modify the way the parameters are handled.
*/
init(params: string, length: number, separators: string, flags: UriParamsFlags | null): void;
/**
* Advances `iter` and retrieves the next attribute/value. %FALSE is returned if
* an error has occurred (in which case `error` is set), or if the end of the
* iteration is reached (in which case `attribute` and `value` are set to %NULL
* and the iterator becomes invalid). If %TRUE is returned,
* g_uri_params_iter_next() may be called again to receive another
* attribute/value pair.
*
* Note that the same `attribute` may be returned multiple times, since URIs
* allow repeated attributes.
* @returns %FALSE if the end of the parameters has been reached or an error was encountered. %TRUE otherwise.
*/
next(): [boolean, string, string];
}
/**
* `GVariant` is a variant datatype; it can contain one or more values
* along with information about the type of the values.
*
* A `GVariant` may contain simple types, like an integer, or a boolean value;
* or complex types, like an array of two strings, or a dictionary of key
* value pairs. A `GVariant` is also immutable: once its been created neither
* its type nor its content can be modified further.
*
* `GVariant` is useful whenever data needs to be serialized, for example when
* sending method parameters in D-Bus, or when saving settings using
* [`GSettings`](../gio/class.Settings.html).
*
* When creating a new `GVariant`, you pass the data you want to store in it
* along with a string representing the type of data you wish to pass to it.
*
* For instance, if you want to create a `GVariant` holding an integer value you
* can use:
*
* ```c
* GVariant *v = g_variant_new ("u", 40);
* ```
*
* The string `u` in the first argument tells `GVariant` that the data passed to
* the constructor (`40`) is going to be an unsigned integer.
*
* More advanced examples of `GVariant` in use can be found in documentation for
* [`GVariant` format strings](gvariant-format-strings.html#pointers).
*
* The range of possible values is determined by the type.
*
* The type system used by `GVariant` is [type`GLib`.VariantType].
*
* `GVariant` instances always have a type and a value (which are given
* at construction time). The type and value of a `GVariant` instance
* can never change other than by the `GVariant` itself being
* destroyed. A `GVariant` cannot contain a pointer.
*
* `GVariant` is reference counted using [method`GLib`.Variant.ref] and
* [method`GLib`.Variant.unref]. `GVariant` also has floating reference counts —
* see [method`GLib`.Variant.ref_sink].
*
* `GVariant` is completely threadsafe. A `GVariant` instance can be
* concurrently accessed in any way from any number of threads without
* problems.
*
* `GVariant` is heavily optimised for dealing with data in serialized
* form. It works particularly well with data located in memory-mapped
* files. It can perform nearly all deserialization operations in a
* small constant time, usually touching only a single memory page.
* Serialized `GVariant` data can also be sent over the network.
*
* `GVariant` is largely compatible with D-Bus. Almost all types of
* `GVariant` instances can be sent over D-Bus. See [type`GLib`.VariantType] for
* exceptions. (However, `GVariant`s serialization format is not the same
* as the serialization format of a D-Bus message body: use
* [GDBusMessage](../gio/class.DBusMessage.html), in the GIO library, for those.)
*
* For space-efficiency, the `GVariant` serialization format does not
* automatically include the variants length, type or endianness,
* which must either be implied from context (such as knowledge that a
* particular file format always contains a little-endian
* `G_VARIANT_TYPE_VARIANT` which occupies the whole length of the file)
* or supplied out-of-band (for instance, a length, type and/or endianness
* indicator could be placed at the beginning of a file, network message
* or network stream).
*
* A `GVariant`s size is limited mainly by any lower level operating
* system constraints, such as the number of bits in `gsize`. For
* example, it is reasonable to have a 2GB file mapped into memory
* with [struct`GLib`.MappedFile], and call [ctor`GLib`.Variant.new_from_data] on
* it.
*
* For convenience to C programmers, `GVariant` features powerful
* varargs-based value construction and destruction. This feature is
* designed to be embedded in other libraries.
*
* There is a Python-inspired text language for describing `GVariant`
* values. `GVariant` includes a printer for this language and a parser
* with type inferencing.
*
* ## Memory Use
*
* `GVariant` tries to be quite efficient with respect to memory use.
* This section gives a rough idea of how much memory is used by the
* current implementation. The information here is subject to change
* in the future.
*
* The memory allocated by `GVariant` can be grouped into 4 broad
* purposes: memory for serialized data, memory for the type
* information cache, buffer management memory and memory for the
* `GVariant` structure itself.
*
* ## Serialized Data Memory
*
* This is the memory that is used for storing `GVariant` data in
* serialized form. This is what would be sent over the network or
* what would end up on disk, not counting any indicator of the
* endianness, or of the length or type of the top-level variant.
*
* The amount of memory required to store a boolean is 1 byte. 16,
* 32 and 64 bit integers and double precision floating point numbers
* use their natural size. Strings (including object path and
* signature strings) are stored with a nul terminator, and as such
* use the length of the string plus 1 byte.
*
* Maybe types use no space at all to represent the null value and
* use the same amount of space (sometimes plus one byte) as the
* equivalent non-maybe-typed value to represent the non-null case.
*
* Arrays use the amount of space required to store each of their
* members, concatenated. Additionally, if the items stored in an
* array are not of a fixed-size (ie: strings, other arrays, etc)
* then an additional framing offset is stored for each item. The
* size of this offset is either 1, 2 or 4 bytes depending on the
* overall size of the container. Additionally, extra padding bytes
* are added as required for alignment of child values.
*
* Tuples (including dictionary entries) use the amount of space
* required to store each of their members, concatenated, plus one
* framing offset (as per arrays) for each non-fixed-sized item in
* the tuple, except for the last one. Additionally, extra padding
* bytes are added as required for alignment of child values.
*
* Variants use the same amount of space as the item inside of the
* variant, plus 1 byte, plus the length of the type string for the
* item inside the variant.
*
* As an example, consider a dictionary mapping strings to variants.
* In the case that the dictionary is empty, 0 bytes are required for
* the serialization.
*
* If we add an item width that maps to the int32 value of 500 then
* we will use 4 bytes to store the int32 (so 6 for the variant
* containing it) and 6 bytes for the string. The variant must be
* aligned to 8 after the 6 bytes of the string, so thats 2 extra
* bytes. 6 (string) + 2 (padding) + 6 (variant) is 14 bytes used
* for the dictionary entry. An additional 1 byte is added to the
* array as a framing offset making a total of 15 bytes.
*
* If we add another entry, title that maps to a nullable string
* that happens to have a value of null, then we use 0 bytes for the
* null value (and 3 bytes for the variant to contain it along with
* its type string) plus 6 bytes for the string. Again, we need 2
* padding bytes. That makes a total of 6 + 2 + 3 = 11 bytes.
*
* We now require extra padding between the two items in the array.
* After the 14 bytes of the first item, thats 2 bytes required.
* We now require 2 framing offsets for an extra two
* bytes. 14 + 2 + 11 + 2 = 29 bytes to encode the entire two-item
* dictionary.
*
* ## Type Information Cache
*
* For each `GVariant` type that currently exists in the program a type
* information structure is kept in the type information cache. The
* type information structure is required for rapid deserialization.
*
* Continuing with the above example, if a `GVariant` exists with the
* type `a{sv}` then a type information struct will exist for
* `a{sv}`, `{sv}`, `s`, and `v`. Multiple uses of the same type
* will share the same type information. Additionally, all
* single-digit types are stored in read-only static memory and do
* not contribute to the writable memory footprint of a program using
* `GVariant`.
*
* Aside from the type information structures stored in read-only
* memory, there are two forms of type information. One is used for
* container types where there is a single element type: arrays and
* maybe types. The other is used for container types where there
* are multiple element types: tuples and dictionary entries.
*
* Array type info structures are `6 * sizeof (void *)`, plus the
* memory required to store the type string itself. This means that
* on 32-bit systems, the cache entry for `a{sv}` would require 30
* bytes of memory (plus allocation overhead).
*
* Tuple type info structures are `6 * sizeof (void *)`, plus `4 *
* sizeof (void *)` for each item in the tuple, plus the memory
* required to store the type string itself. A 2-item tuple, for
* example, would have a type information structure that consumed
* writable memory in the size of `14 * sizeof (void *)` (plus type
* string) This means that on 32-bit systems, the cache entry for
* `{sv}` would require 61 bytes of memory (plus allocation overhead).
*
* This means that in total, for our `a{sv}` example, 91 bytes of
* type information would be allocated.
*
* The type information cache, additionally, uses a [struct`GLib`.HashTable] to
* store and look up the cached items and stores a pointer to this
* hash table in static storage. The hash table is freed when there
* are zero items in the type cache.
*
* Although these sizes may seem large it is important to remember
* that a program will probably only have a very small number of
* different types of values in it and that only one type information
* structure is required for many different values of the same type.
*
* ## Buffer Management Memory
*
* `GVariant` uses an internal buffer management structure to deal
* with the various different possible sources of serialized data
* that it uses. The buffer is responsible for ensuring that the
* correct call is made when the data is no longer in use by
* `GVariant`. This may involve a [func`GLib`.free] or
* even [method`GLib`.MappedFile.unref].
*
* One buffer management structure is used for each chunk of
* serialized data. The size of the buffer management structure
* is `4 * (void *)`. On 32-bit systems, thats 16 bytes.
*
* ## GVariant structure
*
* The size of a `GVariant` structure is `6 * (void *)`. On 32-bit
* systems, thats 24 bytes.
*
* `GVariant` structures only exist if they are explicitly created
* with API calls. For example, if a `GVariant` is constructed out of
* serialized data for the example given above (with the dictionary)
* then although there are 9 individual values that comprise the
* entire dictionary (two keys, two values, two variants containing
* the values, two dictionary entries, plus the dictionary itself),
* only 1 `GVariant` instance exists — the one referring to the
* dictionary.
*
* If calls are made to start accessing the other values then
* `GVariant` instances will exist for those values only for as long
* as they are in use (ie: until you call [method`GLib`.Variant.unref]). The
* type information is shared. The serialized data and the buffer
* management structure for that serialized data is shared by the
* child.
*
* ## Summary
*
* To put the entire example together, for our dictionary mapping
* strings to variants (with two entries, as given above), we are
* using 91 bytes of memory for type information, 29 bytes of memory
* for the serialized data, 16 bytes for buffer management and 24
* bytes for the `GVariant` instance, or a total of 160 bytes, plus
* allocation overhead. If we were to use [method`GLib`.Variant.get_child_value]
* to access the two dictionary entries, we would use an additional 48
* bytes. If we were to have other dictionaries of the same type, we
* would use more memory for the serialized data and buffer
* management for those dictionaries, but the type information would
* be shared.
*/
class Variant<A extends string = any> {
static $gtype: GObject.GType<Variant>;
// Constructors
constructor(sig: A, value: any);
_init(...args: any[]): void;
static ['new']<A extends string>(sig: A, value: any): Variant<A>;
static _new_internal<A extends string>(sig: A, value: any): any;
static new_array(child_type?: VariantType | null, children?: Variant[] | null): Variant;
static new_boolean(value: boolean): Variant;
static new_byte(value: number): Variant;
static new_bytestring(string: Uint8Array | string): Variant;
static new_bytestring_array(strv: string[]): Variant;
static new_dict_entry(key: Variant, value: Variant): Variant;
static new_double(value: number): Variant;
static new_fixed_array(
element_type: VariantType,
elements: any | null,
n_elements: number,
element_size: number,
): Variant;
static new_from_bytes(type: VariantType, bytes: Bytes | Uint8Array, trusted: boolean): Variant;
static new_from_data(
type: VariantType,
data: Uint8Array | string,
trusted: boolean,
user_data?: any | null,
): Variant;
static new_handle(value: number): Variant;
static new_int16(value: number): Variant;
static new_int32(value: number): Variant;
static new_int64(value: number): Variant;
static new_maybe(child_type?: VariantType | null, child?: Variant | null): Variant;
static new_object_path(object_path: string): Variant;
static new_objv(strv: string[]): Variant;
static new_signature(signature: string): Variant;
static new_string(string: string): Variant;
static new_strv(strv: string[]): Variant;
static new_tuple(children: Variant[]): Variant;
static new_uint16(value: number): Variant;
static new_uint32(value: number): Variant;
static new_uint64(value: number): Variant;
static new_variant(value: Variant): Variant;
// Static methods
/**
* Determines if a given string is a valid D-Bus object path. You
* should ensure that a string is a valid D-Bus object path before
* passing it to g_variant_new_object_path().
*
* A valid object path starts with `/` followed by zero or more
* sequences of characters separated by `/` characters. Each sequence
* must contain only the characters `[A-Z][a-z][0-9]_`. No sequence
* (including the one following the final `/` character) may be empty.
* @param string a normal C nul-terminated string
*/
static is_object_path(string: string): boolean;
/**
* Determines if a given string is a valid D-Bus type signature. You
* should ensure that a string is a valid D-Bus type signature before
* passing it to g_variant_new_signature().
*
* D-Bus type signatures consist of zero or more definite #GVariantType
* strings in sequence.
* @param string a normal C nul-terminated string
*/
static is_signature(string: string): boolean;
/**
* Parses a #GVariant from a text representation.
*
* A single #GVariant is parsed from the content of `text`.
*
* The format is described [here](gvariant-text-format.html).
*
* The memory at `limit` will never be accessed and the parser behaves as
* if the character at `limit` is the nul terminator. This has the
* effect of bounding `text`.
*
* If `endptr` is non-%NULL then `text` is permitted to contain data
* following the value that this function parses and `endptr` will be
* updated to point to the first character past the end of the text
* parsed by this function. If `endptr` is %NULL and there is extra data
* then an error is returned.
*
* If `type` is non-%NULL then the value will be parsed to have that
* type. This may result in additional parse errors (in the case that
* the parsed value doesn't fit the type) but may also result in fewer
* errors (in the case that the type would have been ambiguous, such as
* with empty arrays).
*
* In the event that the parsing is successful, the resulting #GVariant
* is returned. It is never floating, and must be freed with
* [method`GLib`.Variant.unref].
*
* In case of any error, %NULL will be returned. If `error` is non-%NULL
* then it will be set to reflect the error that occurred.
*
* Officially, the language understood by the parser is “any string
* produced by [method`GLib`.Variant.print]”. This explicitly includes
* `g_variant_print()`s annotated types like `int64 -1000`.
*
* There may be implementation specific restrictions on deeply nested values,
* which would result in a %G_VARIANT_PARSE_ERROR_RECURSION error. #GVariant is
* guaranteed to handle nesting up to at least 64 levels.
* @param type a #GVariantType, or %NULL
* @param text a string containing a GVariant in text form
* @param limit a pointer to the end of @text, or %NULL
* @param endptr a location to store the end pointer, or %NULL
*/
static parse(
type: VariantType | null,
text: string,
limit?: string | null,
endptr?: string | null,
): Variant;
/**
* Pretty-prints a message showing the context of a #GVariant parse
* error within the string for which parsing was attempted.
*
* The resulting string is suitable for output to the console or other
* monospace media where newlines are treated in the usual way.
*
* The message will typically look something like one of the following:
*
*
* ```
* unterminated string constant:
* (1, 2, 3, 'abc
* ^^^^
* ```
*
*
* or
*
*
* ```
* unable to find a common type:
* [1, 2, 3, 'str']
* ^ ^^^^^
* ```
*
*
* The format of the message may change in a future version.
*
* `error` must have come from a failed attempt to g_variant_parse() and
* `source_str` must be exactly the same string that caused the error.
* If `source_str` was not nul-terminated when you passed it to
* g_variant_parse() then you must add nul termination before using this
* function.
* @param error a #GError from the #GVariantParseError domain
* @param source_str the string that was given to the parser
*/
static parse_error_print_context(error: Error, source_str: string): string;
static parse_error_quark(): Quark;
/**
* Same as g_variant_error_quark().
*/
static parser_get_error_quark(): Quark;
// Methods
/**
* Performs a byteswapping operation on the contents of `value`. The
* result is that all multi-byte numeric data contained in `value` is
* byteswapped. That includes 16, 32, and 64bit signed and unsigned
* integers as well as file handles and double precision floating point
* values.
*
* This function is an identity mapping on any value that does not
* contain multi-byte numeric data. That include strings, booleans,
* bytes and containers containing only these things (recursively).
*
* While this function can safely handle untrusted, non-normal data, it is
* recommended to check whether the input is in normal form beforehand, using
* g_variant_is_normal_form(), and to reject non-normal inputs if your
* application can be strict about what inputs it rejects.
*
* The returned value is always in normal form and is marked as trusted.
* A full, not floating, reference is returned.
* @returns the byteswapped form of @value
*/
byteswap(): Variant;
/**
* Checks if calling g_variant_get() with `format_string` on `value` would
* be valid from a type-compatibility standpoint. `format_string` is
* assumed to be a valid format string (from a syntactic standpoint).
*
* If `copy_only` is %TRUE then this function additionally checks that it
* would be safe to call g_variant_unref() on `value` immediately after
* the call to g_variant_get() without invalidating the result. This is
* only possible if deep copies are made (ie: there are no pointers to
* the data inside of the soon-to-be-freed #GVariant instance). If this
* check fails then a g_critical() is printed and %FALSE is returned.
*
* This function is meant to be used by functions that wish to provide
* varargs accessors to #GVariant values of uncertain values (eg:
* g_variant_lookup() or g_menu_model_get_item_attribute()).
* @param format_string a valid #GVariant format string
* @param copy_only %TRUE to ensure the format string makes deep copies
* @returns %TRUE if @format_string is safe to use
*/
check_format_string(format_string: string, copy_only: boolean): boolean;
/**
* Classifies `value` according to its top-level type.
* @returns the #GVariantClass of @value
*/
classify(): VariantClass;
/**
* Compares `one` and `two`.
*
* The types of `one` and `two` are #gconstpointer only to allow use of
* this function with #GTree, #GPtrArray, etc. They must each be a
* #GVariant.
*
* Comparison is only defined for basic types (ie: booleans, numbers,
* strings). For booleans, %FALSE is less than %TRUE. Numbers are
* ordered in the usual way. Strings are in ASCII lexographical order.
*
* It is a programmer error to attempt to compare container values or
* two values that have types that are not exactly equal. For example,
* you cannot compare a 32-bit signed integer with a 32-bit unsigned
* integer. Also note that this function is not particularly
* well-behaved when it comes to comparison of doubles; in particular,
* the handling of incomparable values (ie: NaN) is undefined.
*
* If you only require an equality comparison, g_variant_equal() is more
* general.
* @param two a #GVariant instance of the same type
* @returns negative value if a < b; zero if a = b; positive value if a > b.
*/
compare(two: Variant): number;
/**
* Similar to g_variant_get_bytestring() except that instead of
* returning a constant string, the string is duplicated.
*
* The return value must be freed using g_free().
* @returns a newly allocated string
*/
dup_bytestring(): Uint8Array;
/**
* Gets the contents of an array of array of bytes #GVariant. This call
* makes a deep copy; the return result should be released with
* g_strfreev().
*
* If `length` is non-%NULL then the number of elements in the result is
* stored there. In any case, the resulting array will be
* %NULL-terminated.
*
* For an empty array, `length` will be set to 0 and a pointer to a
* %NULL pointer will be returned.
* @returns an array of strings
*/
dup_bytestring_array(): string[];
/**
* Gets the contents of an array of object paths #GVariant. This call
* makes a deep copy; the return result should be released with
* g_strfreev().
*
* If `length` is non-%NULL then the number of elements in the result
* is stored there. In any case, the resulting array will be
* %NULL-terminated.
*
* For an empty array, `length` will be set to 0 and a pointer to a
* %NULL pointer will be returned.
* @returns an array of strings
*/
dup_objv(): string[];
/**
* Similar to g_variant_get_string() except that instead of returning
* a constant string, the string is duplicated.
*
* The string will always be UTF-8 encoded.
*
* The return value must be freed using g_free().
* @returns a newly allocated string, UTF-8 encoded
*/
dup_string(): [string, number];
/**
* Gets the contents of an array of strings #GVariant. This call
* makes a deep copy; the return result should be released with
* g_strfreev().
*
* If `length` is non-%NULL then the number of elements in the result
* is stored there. In any case, the resulting array will be
* %NULL-terminated.
*
* For an empty array, `length` will be set to 0 and a pointer to a
* %NULL pointer will be returned.
* @returns an array of strings
*/
dup_strv(): string[];
/**
* Checks if `one` and `two` have the same type and value.
*
* The types of `one` and `two` are #gconstpointer only to allow use of
* this function with #GHashTable. They must each be a #GVariant.
* @param two a #GVariant instance
* @returns %TRUE if @one and @two are equal
*/
equal(two: Variant): boolean;
/**
* Returns the boolean value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_BOOLEAN.
* @returns %TRUE or %FALSE
*/
get_boolean(): boolean;
/**
* Returns the byte value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_BYTE.
* @returns a #guint8
*/
get_byte(): number;
/**
* Returns the string value of a #GVariant instance with an
* array-of-bytes type. The string has no particular encoding.
*
* If the array does not end with a nul terminator character, the empty
* string is returned. For this reason, you can always trust that a
* non-%NULL nul-terminated string will be returned by this function.
*
* If the array contains a nul terminator character somewhere other than
* the last byte then the returned string is the string, up to the first
* such nul character.
*
* g_variant_get_fixed_array() should be used instead if the array contains
* arbitrary data that could not be nul-terminated or could contain nul bytes.
*
* It is an error to call this function with a `value` that is not an
* array of bytes.
*
* The return value remains valid as long as `value` exists.
* @returns the constant string
*/
get_bytestring(): Uint8Array;
/**
* Gets the contents of an array of array of bytes #GVariant. This call
* makes a shallow copy; the return result should be released with
* g_free(), but the individual strings must not be modified.
*
* If `length` is non-%NULL then the number of elements in the result is
* stored there. In any case, the resulting array will be
* %NULL-terminated.
*
* For an empty array, `length` will be set to 0 and a pointer to a
* %NULL pointer will be returned.
* @returns an array of constant strings
*/
get_bytestring_array(): string[];
/**
* Reads a child item out of a container #GVariant instance. This
* includes variants, maybes, arrays, tuples and dictionary
* entries. It is an error to call this function on any other type of
* #GVariant.
*
* It is an error if `index_` is greater than the number of child items
* in the container. See g_variant_n_children().
*
* The returned value is never floating. You should free it with
* g_variant_unref() when you're done with it.
*
* Note that values borrowed from the returned child are not guaranteed to
* still be valid after the child is freed even if you still hold a reference
* to `value,` if `value` has not been serialized at the time this function is
* called. To avoid this, you can serialize `value` by calling
* g_variant_get_data() and optionally ignoring the return value.
*
* There may be implementation specific restrictions on deeply nested values,
* which would result in the unit tuple being returned as the child value,
* instead of further nested children. #GVariant is guaranteed to handle
* nesting up to at least 64 levels.
*
* This function is O(1).
* @param index_ the index of the child to fetch
* @returns the child at the specified index
*/
get_child_value(index_: number): Variant;
/**
* Returns a pointer to the serialized form of a #GVariant instance.
* The returned data may not be in fully-normalised form if read from an
* untrusted source. The returned data must not be freed; it remains
* valid for as long as `value` exists.
*
* If `value` is a fixed-sized value that was deserialized from a
* corrupted serialized container then %NULL may be returned. In this
* case, the proper thing to do is typically to use the appropriate
* number of nul bytes in place of `value`. If `value` is not fixed-sized
* then %NULL is never returned.
*
* In the case that `value` is already in serialized form, this function
* is O(1). If the value is not already in serialized form,
* serialization occurs implicitly and is approximately O(n) in the size
* of the result.
*
* To deserialize the data returned by this function, in addition to the
* serialized data, you must know the type of the #GVariant, and (if the
* machine might be different) the endianness of the machine that stored
* it. As a result, file formats or network messages that incorporate
* serialized #GVariants must include this information either
* implicitly (for instance "the file always contains a
* %G_VARIANT_TYPE_VARIANT and it is always in little-endian order") or
* explicitly (by storing the type and/or endianness in addition to the
* serialized data).
* @returns the serialized form of @value, or %NULL
*/
get_data(): any | null;
/**
* Returns a pointer to the serialized form of a #GVariant instance.
* The semantics of this function are exactly the same as
* g_variant_get_data(), except that the returned #GBytes holds
* a reference to the variant data.
* @returns A new #GBytes representing the variant data
*/
get_data_as_bytes(): Bytes;
/**
* Returns the double precision floating point value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_DOUBLE.
* @returns a #gdouble
*/
get_double(): number;
/**
* Returns the 32-bit signed integer value of `value`.
*
* It is an error to call this function with a `value` of any type other
* than %G_VARIANT_TYPE_HANDLE.
*
* By convention, handles are indexes into an array of file descriptors
* that are sent alongside a D-Bus message. If you're not interacting
* with D-Bus, you probably don't need them.
* @returns a #gint32
*/
get_handle(): number;
/**
* Returns the 16-bit signed integer value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_INT16.
* @returns a #gint16
*/
get_int16(): number;
/**
* Returns the 32-bit signed integer value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_INT32.
* @returns a #gint32
*/
get_int32(): number;
/**
* Returns the 64-bit signed integer value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_INT64.
* @returns a #gint64
*/
get_int64(): number;
/**
* Given a maybe-typed #GVariant instance, extract its value. If the
* value is Nothing, then this function returns %NULL.
* @returns the contents of @value, or %NULL
*/
get_maybe(): Variant | null;
/**
* Gets a #GVariant instance that has the same value as `value` and is
* trusted to be in normal form.
*
* If `value` is already trusted to be in normal form then a new
* reference to `value` is returned.
*
* If `value` is not already trusted, then it is scanned to check if it
* is in normal form. If it is found to be in normal form then it is
* marked as trusted and a new reference to it is returned.
*
* If `value` is found not to be in normal form then a new trusted
* #GVariant is created with the same value as `value`. The non-normal parts of
* `value` will be replaced with default values which are guaranteed to be in
* normal form.
*
* It makes sense to call this function if you've received #GVariant
* data from untrusted sources and you want to ensure your serialized
* output is definitely in normal form.
*
* If `value` is already in normal form, a new reference will be returned
* (which will be floating if `value` is floating). If it is not in normal form,
* the newly created #GVariant will be returned with a single non-floating
* reference. Typically, g_variant_take_ref() should be called on the return
* value from this function to guarantee ownership of a single non-floating
* reference to it.
* @returns a trusted #GVariant
*/
get_normal_form(): Variant;
/**
* Gets the contents of an array of object paths #GVariant. This call
* makes a shallow copy; the return result should be released with
* g_free(), but the individual strings must not be modified.
*
* If `length` is non-%NULL then the number of elements in the result
* is stored there. In any case, the resulting array will be
* %NULL-terminated.
*
* For an empty array, `length` will be set to 0 and a pointer to a
* %NULL pointer will be returned.
* @returns an array of constant strings
*/
get_objv(): string[];
/**
* Determines the number of bytes that would be required to store `value`
* with g_variant_store().
*
* If `value` has a fixed-sized type then this function always returned
* that fixed size.
*
* In the case that `value` is already in serialized form or the size has
* already been calculated (ie: this function has been called before)
* then this function is O(1). Otherwise, the size is calculated, an
* operation which is approximately O(n) in the number of values
* involved.
* @returns the serialized size of @value
*/
get_size(): number;
/**
* Returns the string value of a #GVariant instance with a string
* type. This includes the types %G_VARIANT_TYPE_STRING,
* %G_VARIANT_TYPE_OBJECT_PATH and %G_VARIANT_TYPE_SIGNATURE.
*
* The string will always be UTF-8 encoded, will never be %NULL, and will never
* contain nul bytes.
*
* If `length` is non-%NULL then the length of the string (in bytes) is
* returned there. For trusted values, this information is already
* known. Untrusted values will be validated and, if valid, a strlen() will be
* performed. If invalid, a default value will be returned — for
* %G_VARIANT_TYPE_OBJECT_PATH, this is `"/"`, and for other types it is the
* empty string.
*
* It is an error to call this function with a `value` of any type
* other than those three.
*
* The return value remains valid as long as `value` exists.
* @returns the constant string, UTF-8 encoded
*/
get_string(): [string, number];
/**
* Gets the contents of an array of strings #GVariant. This call
* makes a shallow copy; the return result should be released with
* g_free(), but the individual strings must not be modified.
*
* If `length` is non-%NULL then the number of elements in the result
* is stored there. In any case, the resulting array will be
* %NULL-terminated.
*
* For an empty array, `length` will be set to 0 and a pointer to a
* %NULL pointer will be returned.
* @returns an array of constant strings
*/
get_strv(): string[];
/**
* Determines the type of `value`.
*
* The return value is valid for the lifetime of `value` and must not
* be freed.
* @returns a #GVariantType
*/
get_type(): VariantType;
/**
* Returns the type string of `value`. Unlike the result of calling
* g_variant_type_peek_string(), this string is nul-terminated. This
* string belongs to #GVariant and must not be freed.
* @returns the type string for the type of @value
*/
get_type_string(): string;
/**
* Returns the 16-bit unsigned integer value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_UINT16.
* @returns a #guint16
*/
get_uint16(): number;
/**
* Returns the 32-bit unsigned integer value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_UINT32.
* @returns a #guint32
*/
get_uint32(): number;
/**
* Returns the 64-bit unsigned integer value of `value`.
*
* It is an error to call this function with a `value` of any type
* other than %G_VARIANT_TYPE_UINT64.
* @returns a #guint64
*/
get_uint64(): number;
/**
* Unboxes `value`. The result is the #GVariant instance that was
* contained in `value`.
* @returns the item contained in the variant
*/
get_variant(): Variant;
/**
* Generates a hash value for a #GVariant instance.
*
* The output of this function is guaranteed to be the same for a given
* value only per-process. It may change between different processor
* architectures or even different versions of GLib. Do not use this
* function as a basis for building protocols or file formats.
*
* The type of `value` is #gconstpointer only to allow use of this
* function with #GHashTable. `value` must be a #GVariant.
* @returns a hash value corresponding to @value
*/
hash(): number;
/**
* Checks if `value` is a container.
* @returns %TRUE if @value is a container
*/
is_container(): boolean;
/**
* Checks whether `value` has a floating reference count.
*
* This function should only ever be used to assert that a given variant
* is or is not floating, or for debug purposes. To acquire a reference
* to a variant that might be floating, always use g_variant_ref_sink()
* or g_variant_take_ref().
*
* See g_variant_ref_sink() for more information about floating reference
* counts.
* @returns whether @value is floating
*/
is_floating(): boolean;
/**
* Checks if `value` is in normal form.
*
* The main reason to do this is to detect if a given chunk of
* serialized data is in normal form: load the data into a #GVariant
* using g_variant_new_from_data() and then use this function to
* check.
*
* If `value` is found to be in normal form then it will be marked as
* being trusted. If the value was already marked as being trusted then
* this function will immediately return %TRUE.
*
* There may be implementation specific restrictions on deeply nested values.
* GVariant is guaranteed to handle nesting up to at least 64 levels.
* @returns %TRUE if @value is in normal form
*/
is_normal_form(): boolean;
/**
* Checks if a value has a type matching the provided type.
* @param type a #GVariantType
* @returns %TRUE if the type of @value matches @type
*/
is_of_type(type: VariantType): boolean;
/**
* Looks up a value in a dictionary #GVariant.
*
* This function works with dictionaries of the type a{s*} (and equally
* well with type a{o*}, but we only further discuss the string case
* for sake of clarity).
*
* In the event that `dictionary` has the type a{sv}, the `expected_type`
* string specifies what type of value is expected to be inside of the
* variant. If the value inside the variant has a different type then
* %NULL is returned. In the event that `dictionary` has a value type other
* than v then `expected_type` must directly match the value type and it is
* used to unpack the value directly or an error occurs.
*
* In either case, if `key` is not found in `dictionary,` %NULL is returned.
*
* If the key is found and the value has the correct type, it is
* returned. If `expected_type` was specified then any non-%NULL return
* value will have this type.
*
* This function is currently implemented with a linear scan. If you
* plan to do many lookups then #GVariantDict may be more efficient.
* @param key the key to look up in the dictionary
* @param expected_type a #GVariantType, or %NULL
* @returns the value of the dictionary key, or %NULL
*/
lookup_value(key: string, expected_type?: VariantType | null): Variant;
/**
* Determines the number of children in a container #GVariant instance.
* This includes variants, maybes, arrays, tuples and dictionary
* entries. It is an error to call this function on any other type of
* #GVariant.
*
* For variants, the return value is always 1. For values with maybe
* types, it is always zero or one. For arrays, it is the length of the
* array. For tuples it is the number of tuple items (which depends
* only on the type). For dictionary entries, it is always 2
*
* This function is O(1).
* @returns the number of children in the container
*/
n_children(): number;
/**
* Pretty-prints `value` in the format understood by g_variant_parse().
*
* The format is described [here](gvariant-text-format.html).
*
* If `type_annotate` is %TRUE, then type information is included in
* the output.
* @param type_annotate %TRUE if type information should be included in the output
* @returns a newly-allocated string holding the result.
*/
print(type_annotate: boolean): string;
/**
* Increases the reference count of `value`.
* @returns the same @value
*/
ref(): Variant;
/**
* #GVariant uses a floating reference count system. All functions with
* names starting with `g_variant_new_` return floating
* references.
*
* Calling g_variant_ref_sink() on a #GVariant with a floating reference
* will convert the floating reference into a full reference. Calling
* g_variant_ref_sink() on a non-floating #GVariant results in an
* additional normal reference being added.
*
* In other words, if the `value` is floating, then this call "assumes
* ownership" of the floating reference, converting it to a normal
* reference. If the `value` is not floating, then this call adds a
* new normal reference increasing the reference count by one.
*
* All calls that result in a #GVariant instance being inserted into a
* container will call g_variant_ref_sink() on the instance. This means
* that if the value was just created (and has only its floating
* reference) then the container will assume sole ownership of the value
* at that point and the caller will not need to unreference it. This
* makes certain common styles of programming much easier while still
* maintaining normal refcounting semantics in situations where values
* are not floating.
* @returns the same @value
*/
ref_sink(): Variant;
/**
* Stores the serialized form of `value` at `data`. `data` should be
* large enough. See g_variant_get_size().
*
* The stored data is in machine native byte order but may not be in
* fully-normalised form if read from an untrusted source. See
* g_variant_get_normal_form() for a solution.
*
* As with g_variant_get_data(), to be able to deserialize the
* serialized variant successfully, its type and (if the destination
* machine might be different) its endianness must also be available.
*
* This function is approximately O(n) in the size of `data`.
* @param data the location to store the serialized data at
*/
store(data: any): void;
/**
* If `value` is floating, sink it. Otherwise, do nothing.
*
* Typically you want to use g_variant_ref_sink() in order to
* automatically do the correct thing with respect to floating or
* non-floating references, but there is one specific scenario where
* this function is helpful.
*
* The situation where this function is helpful is when creating an API
* that allows the user to provide a callback function that returns a
* #GVariant. We certainly want to allow the user the flexibility to
* return a non-floating reference from this callback (for the case
* where the value that is being returned already exists).
*
* At the same time, the style of the #GVariant API makes it likely that
* for newly-created #GVariant instances, the user can be saved some
* typing if they are allowed to return a #GVariant with a floating
* reference.
*
* Using this function on the return value of the user's callback allows
* the user to do whichever is more convenient for them. The caller
* will always receives exactly one full reference to the value: either
* the one that was returned in the first place, or a floating reference
* that has been converted to a full reference.
*
* This function has an odd interaction when combined with
* g_variant_ref_sink() running at the same time in another thread on
* the same #GVariant instance. If g_variant_ref_sink() runs first then
* the result will be that the floating reference is converted to a hard
* reference. If g_variant_take_ref() runs first then the result will
* be that the floating reference is converted to a hard reference and
* an additional reference on top of that one is added. It is best to
* avoid this situation.
* @returns the same @value
*/
take_ref(): Variant;
/**
* Decreases the reference count of `value`. When its reference count
* drops to 0, the memory used by the variant is freed.
*/
unref(): void;
unpack<T>(): T;
deepUnpack<T>(): T;
deep_unpack<T>(): T;
recursiveUnpack(): any;
_init(sig: A, value: any): Variant;
}
/**
* A utility type for constructing container-type #GVariant instances.
*
* This is an opaque structure and may only be accessed using the
* following functions.
*
* #GVariantBuilder is not threadsafe in any way. Do not attempt to
* access it from more than one thread.
*/
class VariantBuilder {
static $gtype: GObject.GType<VariantBuilder>;
// Constructors
constructor(type: VariantType);
_init(...args: any[]): void;
static ['new'](type: VariantType): VariantBuilder;
// Methods
/**
* Adds `value` to `builder`.
*
* It is an error to call this function in any way that would create an
* inconsistent value to be constructed. Some examples of this are
* putting different types of items into an array, putting the wrong
* types or number of items in a tuple, putting more than one value into
* a variant, etc.
*
* If `value` is a floating reference (see g_variant_ref_sink()),
* the `builder` instance takes ownership of `value`.
* @param value a #GVariant
*/
add_value(value: Variant): void;
/**
* Closes the subcontainer inside the given `builder` that was opened by
* the most recent call to g_variant_builder_open().
*
* It is an error to call this function in any way that would create an
* inconsistent value to be constructed (ie: too few values added to the
* subcontainer).
*/
close(): void;
/**
* Ends the builder process and returns the constructed value.
*
* It is not permissible to use `builder` in any way after this call
* except for reference counting operations (in the case of a
* heap-allocated #GVariantBuilder) or by reinitialising it with
* g_variant_builder_init() (in the case of stack-allocated). This
* means that for the stack-allocated builders there is no need to
* call g_variant_builder_clear() after the call to
* g_variant_builder_end().
*
* It is an error to call this function in any way that would create an
* inconsistent value to be constructed (ie: insufficient number of
* items added to a container with a specific number of children
* required). It is also an error to call this function if the builder
* was created with an indefinite array or maybe type and no children
* have been added; in this case it is impossible to infer the type of
* the empty array.
* @returns a new, floating, #GVariant
*/
end(): Variant;
/**
* Opens a subcontainer inside the given `builder`. When done adding
* items to the subcontainer, g_variant_builder_close() must be called. `type`
* is the type of the container: so to build a tuple of several values, `type`
* must include the tuple itself.
*
* It is an error to call this function in any way that would cause an
* inconsistent value to be constructed (ie: adding too many values or
* a value of an incorrect type).
*
* Example of building a nested variant:
*
* ```c
* GVariantBuilder builder;
* guint32 some_number = get_number ();
* g_autoptr (GHashTable) some_dict = get_dict ();
* GHashTableIter iter;
* const gchar *key;
* const GVariant *value;
* g_autoptr (GVariant) output = NULL;
*
* g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ua{sv})"));
* g_variant_builder_add (&builder, "u", some_number);
* g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}"));
*
* g_hash_table_iter_init (&iter, some_dict);
* while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value))
* {
* g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}"));
* g_variant_builder_add (&builder, "s", key);
* g_variant_builder_add (&builder, "v", value);
* g_variant_builder_close (&builder);
* }
*
* g_variant_builder_close (&builder);
*
* output = g_variant_builder_end (&builder);
* ```
*
* @param type the #GVariantType of the container
*/
open(type: VariantType): void;
/**
* Increases the reference count on `builder`.
*
* Don't call this on stack-allocated #GVariantBuilder instances or bad
* things will happen.
* @returns a new reference to @builder
*/
ref(): VariantBuilder;
/**
* Decreases the reference count on `builder`.
*
* In the event that there are no more references, releases all memory
* associated with the #GVariantBuilder.
*
* Don't call this on stack-allocated #GVariantBuilder instances or bad
* things will happen.
*/
unref(): void;
}
/**
* #GVariantDict is a mutable interface to #GVariant dictionaries.
*
* It can be used for doing a sequence of dictionary lookups in an
* efficient way on an existing #GVariant dictionary or it can be used
* to construct new dictionaries with a hashtable-like interface. It
* can also be used for taking existing dictionaries and modifying them
* in order to create new ones.
*
* #GVariantDict can only be used with %G_VARIANT_TYPE_VARDICT
* dictionaries.
*
* It is possible to use #GVariantDict allocated on the stack or on the
* heap. When using a stack-allocated #GVariantDict, you begin with a
* call to g_variant_dict_init() and free the resources with a call to
* g_variant_dict_clear().
*
* Heap-allocated #GVariantDict follows normal refcounting rules: you
* allocate it with g_variant_dict_new() and use g_variant_dict_ref()
* and g_variant_dict_unref().
*
* g_variant_dict_end() is used to convert the #GVariantDict back into a
* dictionary-type #GVariant. When used with stack-allocated instances,
* this also implicitly frees all associated memory, but for
* heap-allocated instances, you must still call g_variant_dict_unref()
* afterwards.
*
* You will typically want to use a heap-allocated #GVariantDict when
* you expose it as part of an API. For most other uses, the
* stack-allocated form will be more convenient.
*
* Consider the following two examples that do the same thing in each
* style: take an existing dictionary and look up the "count" uint32
* key, adding 1 to it if it is found, or returning an error if the
* key is not found. Each returns the new dictionary as a floating
* #GVariant.
*
* ## Using a stack-allocated GVariantDict
*
*
* ```c
* GVariant *
* add_to_count (GVariant *orig,
* GError **error)
* {
* GVariantDict dict;
* guint32 count;
*
* g_variant_dict_init (&dict, orig);
* if (!g_variant_dict_lookup (&dict, "count", "u", &count))
* {
* g_set_error (...);
* g_variant_dict_clear (&dict);
* return NULL;
* }
*
* g_variant_dict_insert (&dict, "count", "u", count + 1);
*
* return g_variant_dict_end (&dict);
* }
* ```
*
*
* ## Using heap-allocated GVariantDict
*
*
* ```c
* GVariant *
* add_to_count (GVariant *orig,
* GError **error)
* {
* GVariantDict *dict;
* GVariant *result;
* guint32 count;
*
* dict = g_variant_dict_new (orig);
*
* if (g_variant_dict_lookup (dict, "count", "u", &count))
* {
* g_variant_dict_insert (dict, "count", "u", count + 1);
* result = g_variant_dict_end (dict);
* }
* else
* {
* g_set_error (...);
* result = NULL;
* }
*
* g_variant_dict_unref (dict);
*
* return result;
* }
* ```
*
*/
class VariantDict {
static $gtype: GObject.GType<VariantDict>;
// Constructors
constructor(from_asv?: Variant | null);
_init(...args: any[]): void;
static ['new'](from_asv?: Variant | null): VariantDict;
// Methods
/**
* Releases all memory associated with a #GVariantDict without freeing
* the #GVariantDict structure itself.
*
* It typically only makes sense to do this on a stack-allocated
* #GVariantDict if you want to abort building the value part-way
* through. This function need not be called if you call
* g_variant_dict_end() and it also doesn't need to be called on dicts
* allocated with g_variant_dict_new (see g_variant_dict_unref() for
* that).
*
* It is valid to call this function on either an initialised
* #GVariantDict or one that was previously cleared by an earlier call
* to g_variant_dict_clear() but it is not valid to call this function
* on uninitialised memory.
*/
clear(): void;
/**
* Checks if `key` exists in `dict`.
* @param key the key to look up in the dictionary
* @returns %TRUE if @key is in @dict
*/
contains(key: string): boolean;
/**
* Returns the current value of `dict` as a #GVariant of type
* %G_VARIANT_TYPE_VARDICT, clearing it in the process.
*
* It is not permissible to use `dict` in any way after this call except
* for reference counting operations (in the case of a heap-allocated
* #GVariantDict) or by reinitialising it with g_variant_dict_init() (in
* the case of stack-allocated).
* @returns a new, floating, #GVariant
*/
end(): Variant;
/**
* Inserts (or replaces) a key in a #GVariantDict.
*
* `value` is consumed if it is floating.
* @param key the key to insert a value for
* @param value the value to insert
*/
insert_value(key: string, value: Variant): void;
/**
* Looks up a value in a #GVariantDict.
*
* If `key` is not found in `dictionary,` %NULL is returned.
*
* The `expected_type` string specifies what type of value is expected.
* If the value associated with `key` has a different type then %NULL is
* returned.
*
* If the key is found and the value has the correct type, it is
* returned. If `expected_type` was specified then any non-%NULL return
* value will have this type.
* @param key the key to look up in the dictionary
* @param expected_type a #GVariantType, or %NULL
* @returns the value of the dictionary key, or %NULL
*/
lookup_value(key: string, expected_type?: VariantType | null): Variant | null;
/**
* Increases the reference count on `dict`.
*
* Don't call this on stack-allocated #GVariantDict instances or bad
* things will happen.
* @returns a new reference to @dict
*/
ref(): VariantDict;
/**
* Removes a key and its associated value from a #GVariantDict.
* @param key the key to remove
* @returns %TRUE if the key was found and removed
*/
remove(key: string): boolean;
/**
* Decreases the reference count on `dict`.
*
* In the event that there are no more references, releases all memory
* associated with the #GVariantDict.
*
* Don't call this on stack-allocated #GVariantDict instances or bad
* things will happen.
*/
unref(): void;
lookup(key: any, variantType?: any, deep?: boolean): any;
}
/**
* A type in the [type`GLib`.Variant] type system.
*
* This section introduces the [type`GLib`.Variant] type system. It is based, in
* large part, on the D-Bus type system, with two major changes and
* some minor lifting of restrictions. The
* [D-Bus specification](http://dbus.freedesktop.org/doc/dbus-specification.html),
* therefore, provides a significant amount of
* information that is useful when working with [type`GLib`.Variant].
*
* The first major change with respect to the D-Bus type system is the
* introduction of maybe (or nullable) types. Any type in [type`GLib`.Variant]
* can be converted to a maybe type, in which case, `nothing` (or `null`)
* becomes a valid value. Maybe types have been added by introducing the
* character `m` to type strings.
*
* The second major change is that the [type`GLib`.Variant] type system supports
* the concept of indefinite types — types that are less specific than
* the normal types found in D-Bus. For example, it is possible to speak
* of an array of any type in [type`GLib`.Variant], where the D-Bus type system
* would require you to speak of an array of integers or an array of
* strings. Indefinite types have been added by introducing the
* characters `*`, `?` and `r` to type strings.
*
* Finally, all arbitrary restrictions relating to the complexity of
* types are lifted along with the restriction that dictionary entries
* may only appear nested inside of arrays.
*
* Just as in D-Bus, [type`GLib`.Variant] types are described with strings (type
* strings). Subject to the differences mentioned above, these strings
* are of the same form as those found in D-Bus. Note, however: D-Bus
* always works in terms of messages and therefore individual type
* strings appear nowhere in its interface. Instead, signatures
* are a concatenation of the strings of the type of each argument in a
* message. [type`GLib`.Variant] deals with single values directly so
* [type`GLib`.Variant] type strings always describe the type of exactly one
* value. This means that a D-Bus signature string is generally not a valid
* [type`GLib`.Variant] type string — except in the case that it is the signature
* of a message containing exactly one argument.
*
* An indefinite type is similar in spirit to what may be called an
* abstract type in other type systems. No value can exist that has an
* indefinite type as its type, but values can exist that have types
* that are subtypes of indefinite types. That is to say,
* [method`GLib`.Variant.get_type] will never return an indefinite type, but
* calling [method`GLib`.Variant.is_of_type] with an indefinite type may return
* true. For example, you cannot have a value that represents an
* array of no particular type, but you can have an array of integers
* which certainly matches the type of an array of no particular type,
* since array of integers is a subtype of array of no particular
* type.
*
* This is similar to how instances of abstract classes may not
* directly exist in other type systems, but instances of their
* non-abstract subtypes may. For example, in GTK, no object that has
* the type of [`GtkWidget`](https://docs.gtk.org/gtk4/class.Widget.html) can
* exist (since `GtkWidget` is an abstract class), but a [`GtkWindow`](https://docs.gtk.org/gtk4/class.Window.html)
* can certainly be instantiated, and you would say that a `GtkWindow` is a
* `GtkWidget` (since `GtkWindow` is a subclass of `GtkWidget`).
*
* Two types may not be compared by value; use [method`GLib`.VariantType.equal]
* or [method`GLib`.VariantType.is_subtype_of] May be copied using
* [method`GLib`.VariantType.copy] and freed using [method`GLib`.VariantType.free].
*
* ## GVariant Type Strings
*
* A [type`GLib`.Variant] type string can be any of the following:
*
* - any basic type string (listed below)
* - `v`, `r` or `*`
* - one of the characters `a` or `m`, followed by another type string
* - the character `(`, followed by a concatenation of zero or more other
* type strings, followed by the character `)`
* - the character `{`, followed by a basic type string (see below),
* followed by another type string, followed by the character `}`
*
* A basic type string describes a basic type (as per
* [method`GLib`.VariantType.is_basic]) and is always a single character in
* length. The valid basic type strings are `b`, `y`, `n`, `q`, `i`, `u`, `x`,
* `t`, `h`, `d`, `s`, `o`, `g` and `?`.
*
* The above definition is recursive to arbitrary depth. `aaaaai` and
* `(ui(nq((y)))s)` are both valid type strings, as is
* `a(aa(ui)(qna{ya(yd)}))`. In order to not hit memory limits,
* [type`GLib`.Variant] imposes a limit on recursion depth of 65 nested
* containers. This is the limit in the D-Bus specification (64) plus one to
* allow a [`GDBusMessage`](../gio/class.DBusMessage.html) to be nested in
* a top-level tuple.
*
* The meaning of each of the characters is as follows:
*
* - `b`: the type string of `G_VARIANT_TYPE_BOOLEAN`; a boolean value.
* - `y`: the type string of `G_VARIANT_TYPE_BYTE`; a byte.
* - `n`: the type string of `G_VARIANT_TYPE_INT16`; a signed 16 bit integer.
* - `q`: the type string of `G_VARIANT_TYPE_UINT16`; an unsigned 16 bit integer.
* - `i`: the type string of `G_VARIANT_TYPE_INT32`; a signed 32 bit integer.
* - `u`: the type string of `G_VARIANT_TYPE_UINT32`; an unsigned 32 bit integer.
* - `x`: the type string of `G_VARIANT_TYPE_INT64`; a signed 64 bit integer.
* - `t`: the type string of `G_VARIANT_TYPE_UINT64`; an unsigned 64 bit integer.
* - `h`: the type string of `G_VARIANT_TYPE_HANDLE`; a signed 32 bit value
* that, by convention, is used as an index into an array of file
* descriptors that are sent alongside a D-Bus message.
* - `d`: the type string of `G_VARIANT_TYPE_DOUBLE`; a double precision
* floating point value.
* - `s`: the type string of `G_VARIANT_TYPE_STRING`; a string.
* - `o`: the type string of `G_VARIANT_TYPE_OBJECT_PATH`; a string in the form
* of a D-Bus object path.
* - `g`: the type string of `G_VARIANT_TYPE_SIGNATURE`; a string in the form of
* a D-Bus type signature.
* - `?`: the type string of `G_VARIANT_TYPE_BASIC`; an indefinite type that
* is a supertype of any of the basic types.
* - `v`: the type string of `G_VARIANT_TYPE_VARIANT`; a container type that
* contain any other type of value.
* - `a`: used as a prefix on another type string to mean an array of that
* type; the type string `ai`, for example, is the type of an array of
* signed 32-bit integers.
* - `m`: used as a prefix on another type string to mean a maybe, or
* nullable, version of that type; the type string `ms`, for example,
* is the type of a value that maybe contains a string, or maybe contains
* nothing.
* - `()`: used to enclose zero or more other concatenated type strings to
* create a tuple type; the type string `(is)`, for example, is the type of
* a pair of an integer and a string.
* - `r`: the type string of `G_VARIANT_TYPE_TUPLE`; an indefinite type that is
* a supertype of any tuple type, regardless of the number of items.
* - `{}`: used to enclose a basic type string concatenated with another type
* string to create a dictionary entry type, which usually appears inside of
* an array to form a dictionary; the type string `a{sd}`, for example, is
* the type of a dictionary that maps strings to double precision floating
* point values.
*
* The first type (the basic type) is the key type and the second type is
* the value type. The reason that the first type is restricted to being a
* basic type is so that it can easily be hashed.
* - `*`: the type string of `G_VARIANT_TYPE_ANY`; the indefinite type that is
* a supertype of all types. Note that, as with all type strings, this
* character represents exactly one type. It cannot be used inside of tuples
* to mean any number of items.
*
* Any type string of a container that contains an indefinite type is,
* itself, an indefinite type. For example, the type string `a*`
* (corresponding to `G_VARIANT_TYPE_ARRAY`) is an indefinite type
* that is a supertype of every array type. `(*s)` is a supertype
* of all tuples that contain exactly two items where the second
* item is a string.
*
* `a{?*}` is an indefinite type that is a supertype of all arrays
* containing dictionary entries where the key is any basic type and
* the value is any type at all. This is, by definition, a dictionary,
* so this type string corresponds to `G_VARIANT_TYPE_DICTIONARY`. Note
* that, due to the restriction that the key of a dictionary entry must
* be a basic type, `{**}` is not a valid type string.
*/
class VariantType<A extends string = any> {
static $gtype: GObject.GType<VariantType>;
// Constructors
constructor(type_string: string);
_init(...args: any[]): void;
static ['new'](type_string: string): VariantType;
static new_array(element: VariantType): VariantType;
static new_dict_entry(key: VariantType, value: VariantType): VariantType;
static new_maybe(element: VariantType): VariantType;
static new_tuple(items: VariantType[]): VariantType;
// Static methods
static checked_(type_string: string): VariantType;
static string_get_depth_(type_string: string): number;
/**
* Checks if `type_string` is a valid
* [GVariant type string](./struct.VariantType.html#gvariant-type-strings).
*
* This call is equivalent to calling [func`GLib`.VariantType.string_scan] and
* confirming that the following character is a nul terminator.
* @param type_string a pointer to any string
*/
static string_is_valid(type_string: string): boolean;
/**
* Scan for a single complete and valid GVariant type string in `string`.
*
* The memory pointed to by `limit` (or bytes beyond it) is never
* accessed.
*
* If a valid type string is found, `endptr` is updated to point to the
* first character past the end of the string that was found and %TRUE
* is returned.
*
* If there is no valid type string starting at `string,` or if the type
* string does not end before `limit` then %FALSE is returned.
*
* For the simple case of checking if a string is a valid type string,
* see [func`GLib`.VariantType.string_is_valid].
* @param string a pointer to any string
* @param limit the end of @string
*/
static string_scan(string: string, limit: string | null): [boolean, string];
// Methods
/**
* Makes a copy of a [type`GLib`.VariantType].
*
* It is appropriate to call [method`GLib`.VariantType.free] on the return value.
* `type` may not be `NULL`.
* @returns a new [type@GLib.VariantType] Since 2.24
*/
copy(): VariantType;
/**
* Returns a newly-allocated copy of the type string corresponding to `type`.
*
* The returned string is nul-terminated. It is appropriate to call
* [func`GLib`.free] on the return value.
* @returns the corresponding type string Since 2.24
*/
dup_string(): string;
/**
* Determines the element type of an array or maybe type.
*
* This function may only be used with array or maybe types.
* @returns the element type of @type Since 2.24
*/
element(): VariantType;
/**
* Compares `type1` and `type2` for equality.
*
* Only returns true if the types are exactly equal. Even if one type
* is an indefinite type and the other is a subtype of it, false will
* be returned if they are not exactly equal. If you want to check for
* subtypes, use [method`GLib`.VariantType.is_subtype_of].
*
* The argument types of `type1` and `type2` are only `gconstpointer` to
* allow use with [type`GLib`.HashTable] without function pointer casting. For
* both arguments, a valid [type`GLib`.VariantType] must be provided.
* @param type2 another type to compare
* @returns true if @type1 and @type2 are exactly equal Since 2.24
*/
equal(type2: VariantType): boolean;
/**
* Determines the first item type of a tuple or dictionary entry
* type.
*
* This function may only be used with tuple or dictionary entry types,
* but must not be used with the generic tuple type
* `G_VARIANT_TYPE_TUPLE`.
*
* In the case of a dictionary entry type, this returns the type of
* the key.
*
* `NULL` is returned in case of `type` being `G_VARIANT_TYPE_UNIT`.
*
* This call, together with [method`GLib`.VariantType.next] provides an iterator
* interface over tuple and dictionary entry types.
* @returns the first item type of @type, or `NULL` if the type has no item types Since 2.24
*/
first(): VariantType | null;
/**
* Frees a [type`GLib`.VariantType] that was allocated with
* [method`GLib`.VariantType.copy], [ctor`GLib`.VariantType.new] or one of the
* container type constructor functions.
*
* In the case that `type` is `NULL`, this function does nothing.
*
* Since 2.24
*/
free(): void;
/**
* Returns the length of the type string corresponding to the given `type`.
*
* This function must be used to determine the valid extent of
* the memory region returned by [method`GLib`.VariantType.peek_string].
* @returns the length of the corresponding type string Since 2.24
*/
get_string_length(): number;
/**
* Hashes `type`.
*
* The argument type of `type` is only `gconstpointer` to allow use with
* [type`GLib`.HashTable] without function pointer casting. A valid
* [type`GLib`.VariantType] must be provided.
* @returns the hash value Since 2.24
*/
hash(): number;
/**
* Determines if the given `type` is an array type.
*
* This is true if the type string for `type` starts with an `a`.
*
* This function returns true for any indefinite type for which every
* definite subtype is an array type — `G_VARIANT_TYPE_ARRAY`, for
* example.
* @returns true if @type is an array type Since 2.24
*/
is_array(): boolean;
/**
* Determines if the given `type` is a basic type.
*
* Basic types are booleans, bytes, integers, doubles, strings, object
* paths and signatures.
*
* Only a basic type may be used as the key of a dictionary entry.
*
* This function returns `FALSE` for all indefinite types except
* `G_VARIANT_TYPE_BASIC`.
* @returns true if @type is a basic type Since 2.24
*/
is_basic(): boolean;
/**
* Determines if the given `type` is a container type.
*
* Container types are any array, maybe, tuple, or dictionary
* entry types plus the variant type.
*
* This function returns true for any indefinite type for which every
* definite subtype is a container — `G_VARIANT_TYPE_ARRAY`, for
* example.
* @returns true if @type is a container type Since 2.24
*/
is_container(): boolean;
/**
* Determines if the given `type` is definite (ie: not indefinite).
*
* A type is definite if its type string does not contain any indefinite
* type characters (`*`, `?`, or `r`).
*
* A [type`GLib`.Variant] instance may not have an indefinite type, so calling
* this function on the result of [method`GLib`.Variant.get_type] will always
* result in true being returned. Calling this function on an
* indefinite type like `G_VARIANT_TYPE_ARRAY`, however, will result in
* `FALSE` being returned.
* @returns true if @type is definite Since 2.24
*/
is_definite(): boolean;
/**
* Determines if the given `type` is a dictionary entry type.
*
* This is true if the type string for `type` starts with a `{`.
*
* This function returns true for any indefinite type for which every
* definite subtype is a dictionary entry type —
* `G_VARIANT_TYPE_DICT_ENTRY`, for example.
* @returns true if @type is a dictionary entry type Since 2.24
*/
is_dict_entry(): boolean;
/**
* Determines if the given `type` is a maybe type.
*
* This is true if the type string for `type` starts with an `m`.
*
* This function returns true for any indefinite type for which every
* definite subtype is a maybe type — `G_VARIANT_TYPE_MAYBE`, for
* example.
* @returns true if @type is a maybe type Since 2.24
*/
is_maybe(): boolean;
/**
* Checks if `type` is a subtype of `supertype`.
*
* This function returns true if `type` is a subtype of `supertype`. All
* types are considered to be subtypes of themselves. Aside from that,
* only indefinite types can have subtypes.
* @param supertype type of potential supertype
* @returns true if @type is a subtype of @supertype Since 2.24
*/
is_subtype_of(supertype: VariantType): boolean;
/**
* Determines if the given `type` is a tuple type.
*
* This is true if the type string for `type` starts with a `(` or if `type` is
* `G_VARIANT_TYPE_TUPLE`.
*
* This function returns true for any indefinite type for which every
* definite subtype is a tuple type — `G_VARIANT_TYPE_TUPLE`, for
* example.
* @returns true if @type is a tuple type Since 2.24
*/
is_tuple(): boolean;
/**
* Determines if the given `type` is the variant type.
* @returns true if @type is the variant type Since 2.24
*/
is_variant(): boolean;
/**
* Determines the key type of a dictionary entry type.
*
* This function may only be used with a dictionary entry type. Other
* than the additional restriction, this call is equivalent to
* [method`GLib`.VariantType.first].
* @returns the key type of the dictionary entry Since 2.24
*/
key(): VariantType;
/**
* Determines the number of items contained in a tuple or
* dictionary entry type.
*
* This function may only be used with tuple or dictionary entry types,
* but must not be used with the generic tuple type
* `G_VARIANT_TYPE_TUPLE`.
*
* In the case of a dictionary entry type, this function will always
* return `2`.
* @returns the number of items in @type Since 2.24
*/
n_items(): number;
/**
* Determines the next item type of a tuple or dictionary entry
* type.
*
* `type` must be the result of a previous call to
* [method`GLib`.VariantType.first] or [method`GLib`.VariantType.next].
*
* If called on the key type of a dictionary entry then this call
* returns the value type. If called on the value type of a dictionary
* entry then this call returns `NULL`.
*
* For tuples, `NULL` is returned when `type` is the last item in the tuple.
* @returns the next type after @type, or `NULL` if there are no further types Since 2.24
*/
next(): VariantType | null;
/**
* Determines the value type of a dictionary entry type.
*
* This function may only be used with a dictionary entry type.
* @returns the value type of the dictionary entry Since 2.24
*/
value(): VariantType;
}
/**
* The #GFloatIEEE754 and #GDoubleIEEE754 unions are used to access the sign,
* mantissa and exponent of IEEE floats and doubles. These unions are defined
* as appropriate for a given platform. IEEE floats and doubles are supported
* (used for storage) by at least Intel, PPC and Sparc.
*/
class DoubleIEEE754 {
static $gtype: GObject.GType<DoubleIEEE754>;
// Fields
v_double: number;
// Constructors
constructor(
properties?: Partial<{
v_double: number;
}>,
);
_init(...args: any[]): void;
}
/**
* The #GFloatIEEE754 and #GDoubleIEEE754 unions are used to access the sign,
* mantissa and exponent of IEEE floats and doubles. These unions are defined
* as appropriate for a given platform. IEEE floats and doubles are supported
* (used for storage) by at least Intel, PPC and Sparc.
*/
class FloatIEEE754 {
static $gtype: GObject.GType<FloatIEEE754>;
// Fields
v_float: number;
// Constructors
constructor(
properties?: Partial<{
v_float: number;
}>,
);
_init(...args: any[]): void;
}
/**
* The #GMutex struct is an opaque data structure to represent a mutex
* (mutual exclusion). It can be used to protect data against shared
* access.
*
* Take for example the following function:
*
* ```c
* int
* give_me_next_number (void)
* {
* static int current_number = 0;
*
* // now do a very complicated calculation to calculate the new
* // number, this might for example be a random number generator
* current_number = calc_next_number (current_number);
*
* return current_number;
* }
* ```
*
* It is easy to see that this won't work in a multi-threaded
* application. There current_number must be protected against shared
* access. A #GMutex can be used as a solution to this problem:
*
* ```c
* int
* give_me_next_number (void)
* {
* static GMutex mutex;
* static int current_number = 0;
* int ret_val;
*
* g_mutex_lock (&mutex);
* ret_val = current_number = calc_next_number (current_number);
* g_mutex_unlock (&mutex);
*
* return ret_val;
* }
* ```
*
* Notice that the #GMutex is not initialised to any particular value.
* Its placement in static storage ensures that it will be initialised
* to all-zeros, which is appropriate.
*
* If a #GMutex is placed in other contexts (eg: embedded in a struct)
* then it must be explicitly initialised using g_mutex_init().
*
* A #GMutex should only be accessed via g_mutex_ functions.
*/
class Mutex {
static $gtype: GObject.GType<Mutex>;
// Constructors
constructor(properties?: Partial<{}>);
_init(...args: any[]): void;
// Methods
/**
* Frees the resources allocated to a mutex with g_mutex_init().
*
* This function should not be used with a #GMutex that has been
* statically allocated.
*
* Calling g_mutex_clear() on a locked mutex leads to undefined
* behaviour.
*/
clear(): void;
/**
* Initializes a #GMutex so that it can be used.
*
* This function is useful to initialize a mutex that has been
* allocated on the stack, or as part of a larger structure.
* It is not necessary to initialize a mutex that has been
* statically allocated.
*
*
* ```c
* typedef struct {
* GMutex m;
* ...
* } Blob;
*
* Blob *b;
*
* b = g_new (Blob, 1);
* g_mutex_init (&b->m);
* ```
*
*
* To undo the effect of g_mutex_init() when a mutex is no longer
* needed, use g_mutex_clear().
*
* Calling g_mutex_init() on an already initialized #GMutex leads
* to undefined behaviour.
*/
init(): void;
/**
* Locks `mutex`. If `mutex` is already locked by another thread, the
* current thread will block until `mutex` is unlocked by the other
* thread.
*
* #GMutex is neither guaranteed to be recursive nor to be
* non-recursive. As such, calling g_mutex_lock() on a #GMutex that has
* already been locked by the same thread results in undefined behaviour
* (including but not limited to deadlocks).
*/
lock(): void;
/**
* Tries to lock `mutex`. If `mutex` is already locked by another thread,
* it immediately returns %FALSE. Otherwise it locks `mutex` and returns
* %TRUE.
*
* #GMutex is neither guaranteed to be recursive nor to be
* non-recursive. As such, calling g_mutex_lock() on a #GMutex that has
* already been locked by the same thread results in undefined behaviour
* (including but not limited to deadlocks or arbitrary return values).
* @returns %TRUE if @mutex could be locked
*/
trylock(): boolean;
/**
* Unlocks `mutex`. If another thread is blocked in a g_mutex_lock()
* call for `mutex,` it will become unblocked and can lock `mutex` itself.
*
* Calling g_mutex_unlock() on a mutex that is not locked by the
* current thread leads to undefined behaviour.
*/
unlock(): void;
}
/**
* A union holding the value of the token.
*/
class TokenValue {
static $gtype: GObject.GType<TokenValue>;
// Fields
v_symbol: any;
v_identifier: string;
v_binary: number;
v_octal: number;
v_int: number;
v_int64: number;
v_float: number;
v_hex: number;
v_string: string;
v_comment: string;
v_char: number;
v_error: number;
// Constructors
constructor(
properties?: Partial<{
v_symbol: any;
v_identifier: string;
v_binary: number;
v_octal: number;
v_int: number;
v_int64: number;
v_float: number;
v_hex: number;
v_string: string;
v_comment: string;
v_char: number;
v_error: number;
}>,
);
_init(...args: any[]): void;
}
type DateDay = number;
type DateYear = number;
type MainContextPusher = void;
type MutexLocker = void;
type Pid = number;
type Quark = number;
type RWLockReaderLocker = void;
type RWLockWriterLocker = void;
type RecMutexLocker = void;
type RefString = number;
type Strv = string;
type Time = number;
type TimeSpan = number;
function log_structured(logDomain: any, logLevel: any, stringFields: any): any;
function strstrip(str: string): string;
/**
* Name of the imported GIR library
* `see` https://gitlab.gnome.org/GNOME/gjs/-/blob/master/gi/ns.cpp#L188
*/
const __name__: string;
/**
* Version of the imported GIR library
* `see` https://gitlab.gnome.org/GNOME/gjs/-/blob/master/gi/ns.cpp#L189
*/
const __version__: string;
}
export default GLib;
}
declare module 'gi://GLib' {
import GLib20 from 'gi://GLib?version=2.0';
export default GLib20;
}
// END