libneo/include/neo/_stddef.h

58 lines
1.3 KiB
C
Raw Normal View History

2021-07-09 00:04:44 +02:00
/** See the end of this file for copyright and license terms. */
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
2021-07-09 00:04:44 +02:00
#include "neo/_types.h"
#define nil ((void *)0)
#if !defined(__cplusplus) && !defined(true)
# define true ((bool)1)
2021-07-11 01:44:59 +02:00
#endif
#if !defined(__cplusplus) && !defined(false)
# define false ((bool)0)
2021-07-11 01:44:59 +02:00
#endif
#ifndef offsetof
# define offsetof(type, member) __builtin_offsetof(type, member)
2021-07-11 01:44:59 +02:00
#endif
/**
* Declare a length field in a structure.
* This makes it compatible with the `nlen` macro.
*
* @param name: field name, will be of type `usize`
*/
#define NLEN_FIELD(name) \
union { \
usize name; \
const usize __neo_nlen; \
}
/**
* Quickly get the length (as a `const usize`) of any libneo data structure
* that supports it. This includes strings, buffers, lists, and more.
*/
#define nlen(thing) ((thing)->__neo_nlen)
2021-07-09 00:04:44 +02:00
#ifdef __cplusplus
}; /* extern "C" */
#endif
2021-07-09 00:04:44 +02:00
/*
* This file is part of libneo.
* Copyright (c) 2021 Fefie <owo@fef.moe>.
*
* libneo is non-violent software: you may only use, redistribute,
* and/or modify it under the terms of the CNPLv6+ as found in
* the LICENSE file in the source code root directory or at
* <https://git.pixie.town/thufie/CNPL>.
*
* libneo comes with ABSOLUTELY NO WARRANTY, to the extent
* permitted by applicable law. See the CNPLv6+ for details.
*/