docs: Add and use anchors in conversion-macros

The documented conversion macros don't have their own page, so can't be
linked to directly.

Instead, introduce and use anchors for them.
This commit is contained in:
Matthijs Velsink
2024-05-27 23:31:15 +02:00
parent f2df7c3115
commit c260521056

View File

@@ -39,8 +39,8 @@ p = (void*) (long) 42;
i = (int) (long) p; i = (int) (long) p;
``` ```
The GLib macros `GPOINTER_TO_INT()`, `GINT_TO_POINTER()`, etc. take care to The GLib macros [`GPOINTER_TO_INT()`](#gpointer-to-int), [`GINT_TO_POINTER()`](#gint-to-pointer),
do the right thing on every platform. etc. take care to do the right thing on every platform.
**Warning**: You may not store pointers in integers. This is not portable in **Warning**: You may not store pointers in integers. This is not portable in
any way, shape or form. These macros only allow storing integers in any way, shape or form. These macros only allow storing integers in
@@ -48,7 +48,7 @@ pointers, and only preserve 32 bits of the integer; values outside the range
of a 32-bit integer will be mangled. of a 32-bit integer will be mangled.
`GINT_TO_POINTER(value)`, `GPOINTER_TO_INT(value)` `GINT_TO_POINTER(value)`<a name="gint-to-pointer"></a>, `GPOINTER_TO_INT(value)`<a name="gpointer-to-int"></a>
: Stuffs an integer into a pointer type, and vice versa. : Stuffs an integer into a pointer type, and vice versa.
@@ -57,22 +57,22 @@ of a 32-bit integer will be mangled.
pointers, and only preserve 32 bits of the integer; values outside the pointers, and only preserve 32 bits of the integer; values outside the
range of a 32-bit integer will be mangled. range of a 32-bit integer will be mangled.
`GUINT_TO_POINTER(value)`, `GPOINTER_TO_UINT(value)` `GUINT_TO_POINTER(value)`<a name="guint-to-pointer"></a>, `GPOINTER_TO_UINT(value)`<a name="gpointer-to-uint"></a>
: Stuffs an unsigned integer into a pointer type, and vice versa. : Stuffs an unsigned integer into a pointer type, and vice versa.
`GSIZE_TO_POINTER(value)`, `GPOINTER_TO_SIZE(value)` `GSIZE_TO_POINTER(value)`<a name="gsize-to-pointer"></a>, `GPOINTER_TO_SIZE(value)`<a name="gpointer-to-size"></a>
: Stuffs a `size_t` into a pointer type, and vice versa. : Stuffs a `size_t` into a pointer type, and vice versa.
`GTYPE_TO_POINTER(value)`, `GPOINTER_TO_TYPE(value)` `GTYPE_TO_POINTER(value)`<a name="gtype-to-pointer"></a>, `GPOINTER_TO_TYPE(value)`<a name="gpointer-to-type"></a>
: Stuffs a [`GType`](../gobject/alias.Type.html) into a pointer type, and : Stuffs a [`GType`](../gobject/alias.Type.html) into a pointer type, and
vice versa. vice versa.
These macros should be used instead of `GSIZE_TO_POINTER()`, These macros should be used instead of [`GSIZE_TO_POINTER()`](#gsize-to-pointer),
`GPOINTER_TO_SIZE()` to ensure portability, since `GType` is not [`GPOINTER_TO_SIZE()`](#gpointer-to-size) to ensure portability, since
guaranteed to be the same as `size_t`. `GType` is not guaranteed to be the same as `size_t`.
Since: 2.80 Since: 2.80
@@ -107,249 +107,250 @@ Note that the byte order conversion macros may evaluate their arguments
multiple times, thus you should not use them with arguments which have multiple times, thus you should not use them with arguments which have
side-effects. side-effects.
`G_BYTE_ORDER` `G_BYTE_ORDER`<a name="g-byte-order"></a>
: The host byte order. This can be either `G_LITTLE_ENDIAN` or `G_BIG_ENDIAN`. : The host byte order. This can be either [`G_LITTLE_ENDIAN`](#g-little-endian)
or [`G_BIG_ENDIAN`](#g-big-endian).
`G_LITTLE_ENDIAN` `G_LITTLE_ENDIAN`<a name="g-little-endian"></a>
: Specifies the little endian byte order. : Specifies the little endian byte order.
`G_BIG_ENDIAN` `G_BIG_ENDIAN`<a name="g-big-endian"></a>
: Specifies the big endian byte order. : Specifies the big endian byte order.
`G_PDP_ENDIAN` `G_PDP_ENDIAN`<a name="g-pdp-endian"></a>
: Specifies the PDP endian byte order. : Specifies the PDP endian byte order.
### Signed ### Signed
`GINT_FROM_BE(value)` `GINT_FROM_BE(value)`<a name="gint-from-be"></a>
: Converts an `int` value from big-endian to host byte order. : Converts an `int` value from big-endian to host byte order.
`GINT_FROM_LE(value)` `GINT_FROM_LE(value)`<a name="gint-from-le"></a>
: Converts an `int` value from little-endian to host byte order. : Converts an `int` value from little-endian to host byte order.
`GINT_TO_BE(value)` `GINT_TO_BE(value)`<a name="gint-to-be"></a>
: Converts an `int` value from host byte order to big-endian. : Converts an `int` value from host byte order to big-endian.
`GINT_TO_LE(value)` `GINT_TO_LE(value)`<a name="gint-to-le"></a>
: Converts an `int` value from host byte order to little-endian. : Converts an `int` value from host byte order to little-endian.
`GLONG_FROM_BE(value)` `GLONG_FROM_BE(value)`<a name="glong-from-be"></a>
: Converts a `long` value from big-endian to the host byte order. : Converts a `long` value from big-endian to the host byte order.
`GLONG_FROM_LE(value)` `GLONG_FROM_LE(value)`<a name="glong-from-le"></a>
: Converts a `long` value from little-endian to host byte order. : Converts a `long` value from little-endian to host byte order.
`GLONG_TO_BE(value)` `GLONG_TO_BE(value)`<a name="glong-to-be"></a>
: Converts a `long` value from host byte order to big-endian. : Converts a `long` value from host byte order to big-endian.
`GLONG_TO_LE(value)` `GLONG_TO_LE(value)`<a name="glong-to-le"></a>
: Converts a `long` value from host byte order to little-endian. : Converts a `long` value from host byte order to little-endian.
`GSSIZE_FROM_BE(value)` `GSSIZE_FROM_BE(value)`<a name="gssize-from-be"></a>
: Converts a `ssize_t` value from big-endian to host byte order. : Converts a `ssize_t` value from big-endian to host byte order.
`GSSIZE_FROM_LE(value)` `GSSIZE_FROM_LE(value)`<a name="gssize-from-le"></a>
: Converts a `ssize_t` value from little-endian to host byte order. : Converts a `ssize_t` value from little-endian to host byte order.
`GSSIZE_TO_BE(value)` `GSSIZE_TO_BE(value)`<a name="gssize-to-be"></a>
: Converts a `ssize_t` value from host byte order to big-endian. : Converts a `ssize_t` value from host byte order to big-endian.
`GSSIZE_TO_LE(value)` `GSSIZE_TO_LE(value)`<a name="gssize-to-le"></a>
: Converts a `ssize_t` value from host byte order to little-endian. : Converts a `ssize_t` value from host byte order to little-endian.
`GINT16_FROM_BE(value)` `GINT16_FROM_BE(value)`<a name="gint16-from-be"></a>
: Converts an `int16_t` value from big-endian to host byte order. : Converts an `int16_t` value from big-endian to host byte order.
`GINT16_FROM_LE(value)` `GINT16_FROM_LE(value)`<a name="gint16-from-le"></a>
: Converts an `int16_t` value from little-endian to host byte order. : Converts an `int16_t` value from little-endian to host byte order.
`GINT16_TO_BE(value)` `GINT16_TO_BE(value)`<a name="gint16-to-be"></a>
: Converts an `int16_t` value from host byte order to big-endian. : Converts an `int16_t` value from host byte order to big-endian.
`GINT16_TO_LE(value)` `GINT16_TO_LE(value)`<a name="gint16-to-le"></a>
: Converts an `int16_t` value from host byte order to little-endian. : Converts an `int16_t` value from host byte order to little-endian.
`GINT32_FROM_BE(value)` `GINT32_FROM_BE(value)`<a name="gint32-from-be"></a>
: Converts an `int32_t` value from big-endian to host byte order. : Converts an `int32_t` value from big-endian to host byte order.
`GINT32_FROM_LE(value)` `GINT32_FROM_LE(value)`<a name="gint32-from-le"></a>
: Converts an `int32_t` value from little-endian to host byte order. : Converts an `int32_t` value from little-endian to host byte order.
`GINT32_TO_BE(value)` `GINT32_TO_BE(value)`<a name="gint32-to-be"></a>
: Converts an `int32_t` value from host byte order to big-endian. : Converts an `int32_t` value from host byte order to big-endian.
`GINT32_TO_LE(value)` `GINT32_TO_LE(value)`<a name="gint32-to-le"></a>
: Converts an `int32_t` value from host byte order to little-endian. : Converts an `int32_t` value from host byte order to little-endian.
`GINT64_FROM_BE(value)` `GINT64_FROM_BE(value)`<a name="gint64-from-be"></a>
: Converts an `int64_t` value from big-endian to host byte order. : Converts an `int64_t` value from big-endian to host byte order.
`GINT64_FROM_LE(value)` `GINT64_FROM_LE(value)`<a name="gint64-from-le"></a>
: Converts an `int64_t` value from little-endian to host byte order. : Converts an `int64_t` value from little-endian to host byte order.
`GINT64_TO_BE(value)` `GINT64_TO_BE(value)`<a name="gint64-to-be"></a>
: Converts an `int64_t` value from host byte order to big-endian. : Converts an `int64_t` value from host byte order to big-endian.
`GINT64_TO_LE(value)` `GINT64_TO_LE(value)`<a name="gint64-to-le"></a>
: Converts an `int64_t` value from host byte order to little-endian. : Converts an `int64_t` value from host byte order to little-endian.
### Unsigned ### Unsigned
`GUINT_FROM_BE(value)` `GUINT_FROM_BE(value)`<a name="guint-from-be"></a>
: Converts an `unsigned int` value from big-endian to host byte order. : Converts an `unsigned int` value from big-endian to host byte order.
`GUINT_FROM_LE(value)` `GUINT_FROM_LE(value)`<a name="guint-from-le"></a>
: Converts an `unsigned int` value from little-endian to host byte order. : Converts an `unsigned int` value from little-endian to host byte order.
`GUINT_TO_BE(value)` `GUINT_TO_BE(value)`<a name="guint-to-be"></a>
: Converts an `unsigned int` value from host byte order to big-endian. : Converts an `unsigned int` value from host byte order to big-endian.
`GUINT_TO_LE(value)` `GUINT_TO_LE(value)`<a name="guint-to-le"></a>
: Converts an `unsigned int` value from host byte order to little-endian. : Converts an `unsigned int` value from host byte order to little-endian.
`GULONG_FROM_BE(value)` `GULONG_FROM_BE(value)`<a name="gulong-from-be"></a>
: Converts an `unsigned long` value from big-endian to host byte order. : Converts an `unsigned long` value from big-endian to host byte order.
`GULONG_FROM_LE(value)` `GULONG_FROM_LE(value)`<a name="gulong-from-le"></a>
: Converts an `unsigned long` value from little-endian to host byte order. : Converts an `unsigned long` value from little-endian to host byte order.
`GULONG_TO_BE(value)` `GULONG_TO_BE(value)`<a name="gulong-to-be"></a>
: Converts an `unsigned long` value from host byte order to big-endian. : Converts an `unsigned long` value from host byte order to big-endian.
`GULONG_TO_LE(value)` `GULONG_TO_LE(value)`<a name="gulong-to-le"></a>
: Converts an `unsigned long` value from host byte order to little-endian. : Converts an `unsigned long` value from host byte order to little-endian.
`GSIZE_FROM_BE(value)` `GSIZE_FROM_BE(value)`<a name="gsize-from-be"></a>
: Converts a `size_t` value from big-endian to the host byte order. : Converts a `size_t` value from big-endian to the host byte order.
`GSIZE_FROM_LE(value)` `GSIZE_FROM_LE(value)`<a name="gsize-from-le"></a>
: Converts a `size_t` value from little-endian to host byte order. : Converts a `size_t` value from little-endian to host byte order.
`GSIZE_TO_BE(value)` `GSIZE_TO_BE(value)`<a name="gsize-to-be"></a>
: Converts a `size_t` value from host byte order to big-endian. : Converts a `size_t` value from host byte order to big-endian.
`GSIZE_TO_LE(value)` `GSIZE_TO_LE(value)`<a name="gsize-to-le"></a>
: Converts a `size_t` value from host byte order to little-endian. : Converts a `size_t` value from host byte order to little-endian.
`GUINT16_FROM_BE(value)` `GUINT16_FROM_BE(value)`<a name="guint16-from-be"></a>
: Converts a `uint16_t` value from big-endian to host byte order. : Converts a `uint16_t` value from big-endian to host byte order.
`GUINT16_FROM_LE(value)` `GUINT16_FROM_LE(value)`<a name="guint16-from-le"></a>
: Converts a `uint16_t` value from little-endian to host byte order. : Converts a `uint16_t` value from little-endian to host byte order.
`GUINT16_TO_BE(value)` `GUINT16_TO_BE(value)`<a name="guint16-to-be"></a>
: Converts a `uint16_t` value from host byte order to big-endian. : Converts a `uint16_t` value from host byte order to big-endian.
`GUINT16_TO_LE(value)` `GUINT16_TO_LE(value)`<a name="guint16-to-le"></a>
: Converts a `uint16_t` value from host byte order to little-endian. : Converts a `uint16_t` value from host byte order to little-endian.
`GUINT32_FROM_BE(value)` `GUINT32_FROM_BE(value)`<a name="guint32-from-be"></a>
: Converts a `uint32_t` value from big-endian to host byte order. : Converts a `uint32_t` value from big-endian to host byte order.
`GUINT32_FROM_LE(value)` `GUINT32_FROM_LE(value)`<a name="guint32-from-le"></a>
: Converts a `uint32_t` value from little-endian to host byte order. : Converts a `uint32_t` value from little-endian to host byte order.
`GUINT32_TO_BE(value)` `GUINT32_TO_BE(value)`<a name="guint32-to-be"></a>
: Converts a `uint32_t` value from host byte order to big-endian. : Converts a `uint32_t` value from host byte order to big-endian.
`GUINT32_TO_LE(value)` `GUINT32_TO_LE(value)`<a name="guint32-to-le"></a>
: Converts a `uint32_t` value from host byte order to little-endian. : Converts a `uint32_t` value from host byte order to little-endian.
`GUINT64_FROM_BE(value)` `GUINT64_FROM_BE(value)`<a name="guint64-from-be"></a>
: Converts a `uint64_t` value from big-endian to host byte order. : Converts a `uint64_t` value from big-endian to host byte order.
`GUINT64_FROM_LE(value)` `GUINT64_FROM_LE(value)`<a name="guint64-from-le"></a>
: Converts a `uint64_t` value from little-endian to host byte order. : Converts a `uint64_t` value from little-endian to host byte order.
`GUINT64_TO_BE(value)` `GUINT64_TO_BE(value)`<a name="guint64-to-be"></a>
: Converts a `uint64_t` value from host byte order to big-endian. : Converts a `uint64_t` value from host byte order to big-endian.
`GUINT64_TO_LE(value)` `GUINT64_TO_LE(value)`<a name="guint64-to-le"></a>
: Converts a `uint64_t` value from host byte order to little-endian. : Converts a `uint64_t` value from host byte order to little-endian.
`GUINT16_SWAP_BE_PDP(value)` `GUINT16_SWAP_BE_PDP(value)`<a name="guint16-swap-be-pdp"></a>
: Converts a `uint16_t` value between big-endian and pdp-endian byte order. : Converts a `uint16_t` value between big-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways. The conversion is symmetric so it can be used both ways.
`GUINT16_SWAP_LE_BE(value)` `GUINT16_SWAP_LE_BE(value)`<a name="guint16-swap-le-be"></a>
: Converts a `uint16_t` value between little-endian and big-endian byte order. : Converts a `uint16_t` value between little-endian and big-endian byte order.
The conversion is symmetric so it can be used both ways. The conversion is symmetric so it can be used both ways.
`GUINT16_SWAP_LE_PDP(value)` `GUINT16_SWAP_LE_PDP(value)`<a name="guint16-swap-le-pdp"></a>
: Converts a `uint16_t` value between little-endian and pdp-endian byte order. : Converts a `uint16_t` value between little-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways. The conversion is symmetric so it can be used both ways.
`GUINT32_SWAP_BE_PDP(value)` `GUINT32_SWAP_BE_PDP(value)`<a name="guint32-swap-be-pdp"></a>
: Converts a `uint32_t` value between big-endian and pdp-endian byte order. : Converts a `uint32_t` value between big-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways. The conversion is symmetric so it can be used both ways.
`GUINT32_SWAP_LE_BE(value)` `GUINT32_SWAP_LE_BE(value)`<a name="guint32-swap-le-be"></a>
: Converts a `uint32_t` value between little-endian and big-endian byte order. : Converts a `uint32_t` value between little-endian and big-endian byte order.
The conversion is symmetric so it can be used both ways. The conversion is symmetric so it can be used both ways.
`GUINT32_SWAP_LE_PDP(value)` `GUINT32_SWAP_LE_PDP(value)`<a name="guint32-swap-le-pdp"></a>
: Converts a `uint32_t` value between little-endian and pdp-endian byte order. : Converts a `uint32_t` value between little-endian and pdp-endian byte order.
The conversion is symmetric so it can be used both ways. The conversion is symmetric so it can be used both ways.
`GUINT64_SWAP_LE_BE(value)` `GUINT64_SWAP_LE_BE(value)`<a name="guint64-swap-le-be"></a>
: Converts a `uint64_t` value between little-endian and big-endian byte order. : Converts a `uint64_t` value between little-endian and big-endian byte order.
The conversion is symmetric so it can be used both ways. The conversion is symmetric so it can be used both ways.