X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Foptional.h;h=52139d50de7198ac6524862554a4c9a4d892fa31;hp=ca7d1f043d21bdef1b9ad8dc716452ee49fe7858;hb=HEAD;hpb=5747e45ab31cb9ad87fe17c7d4de0faf3324812b diff --git a/src/common/optional.h b/src/common/optional.h deleted file mode 100644 index ca7d1f043..000000000 --- a/src/common/optional.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2019 Jérémie Galarneau - * - * SPDX-License-Identifier: GPL-2.0-only - * - */ - -#ifndef LTTNG_OPTIONAL_H -#define LTTNG_OPTIONAL_H - -#include -#include - -/* - * Define wrapper structure representing an optional value. - * - * This macro defines an "is_set" boolean field that must be checked - * when accessing the optional field. This "is_set" field provides - * the semantics that would be expected of a typical "raw pointer" field - * which would be checked for NULL. - * - * Prefer using this macro where "special" values would be used, e.g. - * -1ULL for uint64_t types. - * - * Declaration example: - * struct my_struct { - * int a; - * LTTNG_OPTIONAL(int, b); - * }; - * - * Usage example: - * struct my_struct foo = LTTNG_OPTIONAL_INIT; - * - * LTTNG_OPTIONAL_SET(&foo.b, 42); - * if (foo.b.is_set) { - * printf("%d", foo.b.value); - * } - * - * LTTNG_OPTIONAL_UNSET(&foo.b); - */ -#define LTTNG_OPTIONAL(type) \ - struct { \ - uint8_t is_set; \ - type value; \ - } - -/* - * Alias used for communication structures. If the layout of an LTTNG_OPTIONAL - * is changed, the original layout should still be used for communication - * purposes. - * - * LTTNG_OPTIONAL_COMM should be combined with the LTTNG_PACKED macro when - * used for IPC / network communication. - */ -#define LTTNG_OPTIONAL_COMM LTTNG_OPTIONAL - -/* - * This macro is available as a 'convenience' to allow sites that assume - * an optional value is set to assert() that it is set when accessing it. - * - * Since this returns the 'optional' by value, it is not suitable for all - * wrapped optional types. It is meant to be used with PODs. - */ -#define LTTNG_OPTIONAL_GET(optional) \ - ({ \ - assert((optional).is_set); \ - (optional).value; \ - }) - -/* - * This macro is available as a 'convenience' to allow sites that assume - * an optional value is set to assert() that it is set when fecthing the - * underlying value's address. - */ -#define LTTNG_OPTIONAL_GET_PTR(optional) \ - ({ \ - assert((optional).is_set); \ - &(optional).value; \ - }) - -/* - * Initialize an optional field as unset. - * - * The wrapped field is set to the value it would gave if it had static storage - * duration. - */ -#define LTTNG_OPTIONAL_INIT_UNSET { .is_set = 0 } - -/* - * Initialize an optional field as 'set' with a given value. - */ -#define LTTNG_OPTIONAL_INIT_VALUE(val) { .value = val, .is_set = 1 } - -/* Set the value of an optional field. */ -#define LTTNG_OPTIONAL_SET(field_ptr, val) \ - do { \ - (field_ptr)->value = (val); \ - (field_ptr)->is_set = 1; \ - } while (0) - -/* Put an optional field in the "unset" (NULL-ed) state. */ -#define LTTNG_OPTIONAL_UNSET(field_ptr) \ - do { \ - (field_ptr)->is_set = 0; \ - } while (0) - -#endif /* LTTNG_OPTIONAL_H */