rusi/include/rstdlib.h

358 lines
14 KiB
C
Raw Permalink 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.

// ============================================================
// СТАНДАРТНАЯ БИБЛИОТЕКА РУСИ
// ============================================================
// Объединение всех стандартных заголовочных файлов C11
// в единый модуль с русскими синонимами.
//
// Включает:
// - float.h — характеристики типов с плавающей точкой
// - stdalign.h — макросы для работы с выравниванием типов
// - stdarg.h — макросы для работы с переменным числом аргументов
// - stdatomic.h — атомарные операции и типы
// - stdbool.h — булевый тип данных
// - stddef.h — стандартные определения типов и макросов
// - stdnoreturn.h — спецификатор невозвратных функций
// ============================================================
#ifndef _STDLIB_RU
#define _STDLIB_RU
// ============================================================
// float.h - Характеристики типов с плавающей точкой
// ============================================================
// Общие параметры представления чисел с плавающей точкой
#define DECIMAL_DIG 21
#define FLT_EVAL_METHOD 0
#define FLT_RADIX 2
#define FLT_ROUNDS 1
// Характеристики типа float (одинарная точность, 32 бита)
#define FLT_DIG 6
#define FLT_EPSILON 0x1p-23
#define FLT_MANT_DIG 24
#define FLT_MAX 0x1.fffffep+127
#define FLT_MAX_10_EXP 38
#define FLT_MAX_EXP 128
#define FLT_MIN 0x1p-126
#define FLT_MIN_10_EXP -37
#define FLT_MIN_EXP -125
#define FLT_TRUE_MIN 0x1p-149
// Характеристики типа double (двойная точность, 64 бита)
#define DBL_DIG 15
#define DBL_EPSILON 0x1p-52
#define DBL_MANT_DIG 53
#define DBL_MAX 0x1.fffffffffffffp+1023
#define DBL_MAX_10_EXP 308
#define DBL_MAX_EXP 1024
#define DBL_MIN 0x1p-1022
#define DBL_MIN_10_EXP -307
#define DBL_MIN_EXP -1021
#define DBL_TRUE_MIN 0x0.0000000000001p-1022
// Характеристики типа long double (расширенная точность, 80/128 бит)
#define LDBL_DIG 15
#define LDBL_EPSILON 0x1p-52
#define LDBL_MANT_DIG 53
#define LDBL_MAX 0x1.fffffffffffffp+1023
#define LDBL_MAX_10_EXP 308
#define LDBL_MAX_EXP 1024
#define LDBL_MIN 0x1p-1022
#define LDBL_MIN_10_EXP -307
#define LDBL_MIN_EXP -1021
#define LDBL_TRUE_MIN 0x0.0000000000001p-1022
// Русские синонимы для float.h
#define ДЕСЯТИЧНЫХ_ЦИФР DECIMAL_DIG
#define МЕТОД_ОЦЕНКИ FLT_EVAL_METHOD
#define ОСНОВАНИЕ FLT_RADIX
#define РЕЖИМ_ОКРУГЛЕНИЯ FLT_ROUNDS
#define ОДИНАР_ЦИФР FLT_DIG
#define ОДИНАР_ЭПСИЛОН FLT_EPSILON
#define ОДИНАР_МАНТИССА FLT_MANT_DIG
#define ОДИНАР_МАКС FLT_MAX
#define ОДИНАР_МАКС_10_СТЕП FLT_MAX_10_EXP
#define ОДИНАР_МАКС_СТЕП FLT_MAX_EXP
#define ОДИНАР_МИН FLT_MIN
#define ОДИНАР_МИН_10_СТЕП FLT_MIN_10_EXP
#define ОДИНАР_МИН_СТЕП FLT_MIN_EXP
#define ОДИНАР_МИНЕНОРМ FLT_TRUE_MIN
#define ДВОЙН_ЦИФР DBL_DIG
#define ДВОЙН_ЭПСИЛОН DBL_EPSILON
#define ДВОЙН_МАНТИССА DBL_MANT_DIG
#define ДВОЙН_МАКС DBL_MAX
#define ДВОЙН_МАКС_10_СТЕП DBL_MAX_10_EXP
#define ДВОЙН_МАКС_СТЕП DBL_MAX_EXP
#define ДВОЙН_МИН DBL_MIN
#define ДВОЙН_МИН_10_СТЕП DBL_MIN_10_EXP
#define ДВОЙН_МИН_СТЕП DBL_MIN_EXP
#define ДВОЙН_МИНЕНОРМ DBL_TRUE_MIN
#define ДЛИН_ЦИФР LDBL_DIG
#define ДЛИН_ЭПСИЛОН LDBL_EPSILON
#define ДЛИН_МАНТИССА LDBL_MANT_DIG
#define ДЛИН_МАКС LDBL_MAX
#define ДЛИН_МАКС_10_СТЕП LDBL_MAX_10_EXP
#define ДЛИН_МАКС_СТЕП LDBL_MAX_EXP
#define ДЛИН_МИН LDBL_MIN
#define ДЛИН_МИН_10_СТЕП LDBL_MIN_10_EXP
#define ДЛИН_МИН_СТЕП LDBL_MIN_EXP
#define ДЛИН_МИНЕНОРМ LDBL_TRUE_MIN
// ============================================================
// stdalign.h - Макросы для работы с выравниванием типов
// ============================================================
#define alignas _Alignas
#define alignof _Alignof
#define __alignas_is_defined 1
#define __alignof_is_defined 1
// Русские синонимы для stdalign.h
#define выравн _Alignas
#define выравн_размер _Alignof
// ============================================================
// stdarg.h - Макросы для работы с переменным числом аргументов
// ============================================================
typedef struct {
unsigned int gp_offset;
unsigned int fp_offset;
void *overflow_arg_area;
void *reg_save_area;
} __va_state;
typedef __va_state va_list[1];
#define va_start(ap, last) \
do { *(ap) = *(__va_state *)__va_area__; } while (0)
#define va_end(ap)
static void *__va_read_from_stack(__va_state *ap, int sz, int align) {
void *p = ap->overflow_arg_area;
if (align > 8)
p = (p + 15) / 16 * 16;
ap->overflow_arg_area = ((unsigned long)p + sz + 7) / 8 * 8;
return p;
}
static void *__va_read_from_gp(__va_state *ap, int sz, int align) {
if (ap->gp_offset >= 48)
return __va_read_from_stack(ap, sz, align);
void *r = ap->reg_save_area + ap->gp_offset;
ap->gp_offset += 8;
return r;
}
static void *__va_read_from_fp(__va_state *ap, int sz, int align) {
if (ap->fp_offset >= 112)
return __va_read_from_stack(ap, sz, align);
void *r = ap->reg_save_area + ap->fp_offset;
ap->fp_offset += 8;
return r;
}
#define va_arg(ap, ty) \
({ \
int klass = __builtin_reg_class(ty); \
*(ty *)(klass == 0 ? __va_read_from_gp(ap, sizeof(ty), _Alignof(ty)) : \
klass == 1 ? __va_read_from_fp(ap, sizeof(ty), _Alignof(ty)) : \
__va_read_from_stack(ap, sizeof(ty), _Alignof(ty))); \
})
#define va_copy(dest, src) ((dest)[0] = (src)[0])
#define __GNUC_VA_LIST 1
typedef va_list __gnuc_va_list;
// Русские синонимы для stdarg.h
#define аргументы va_list
#define аргачало va_start
#define аргонец va_end
#define арг_взять va_arg
#define аргопия va_copy
// ============================================================
// stdatomic.h - Атомарные операции и типы
// ============================================================
#define ATOMIC_BOOL_LOCK_FREE 1
#define ATOMIC_CHAR_LOCK_FREE 1
#define ATOMIC_CHAR16_T_LOCK_FREE 1
#define ATOMIC_CHAR32_T_LOCK_FREE 1
#define ATOMIC_WCHAR_T_LOCK_FREE 1
#define ATOMIC_SHORT_LOCK_FREE 1
#define ATOMIC_INT_LOCK_FREE 1
#define ATOMIC_LONG_LOCK_FREE 1
#define ATOMIC_LLONG_LOCK_FREE 1
#define ATOMIC_POINTER_LOCK_FREE 1
typedef enum {
memory_order_relaxed,
memory_order_consume,
memory_order_acquire,
memory_order_release,
memory_order_acq_rel,
memory_order_seq_cst,
} memory_order;
#define порядок_ослабленный memory_order_relaxed
#define порядок_потребление memory_order_consume
#define порядок_приобретение memory_order_acquire
#define порядок_освобождение memory_order_release
#define порядок_приобретение_освобождение memory_order_acq_rel
#define порядок_последовательный memory_order_seq_cst
#define ATOMIC_FLAG_INIT(x) (x)
#define atomic_init(addr, val) (*(addr) = (val))
#define kill_dependency(x) (x)
#define atomic_thread_fence(order)
#define atomic_signal_fence(order)
#define atomic_is_lock_free(x) 1
#define atomic_load(addr) (*(addr))
#define atomic_store(addr, val) (*(addr) = (val))
#define atomic_load_explicit(addr, order) (*(addr))
#define atomic_store_explicit(addr, val, order) (*(addr) = (val))
#define атом_загрузить(addr) atomic_load(addr)
#define атом_сохранить(addr, val) atomic_store(addr, val)
#define атом_загрузить_явно(addr, order) atomic_load_explicit(addr, order)
#define атом_сохранить_явно(addr, val, order) atomic_store_explicit(addr, val, order)
#define atomic_fetch_add(obj, val) (*(obj) += (val))
#define atomic_fetch_sub(obj, val) (*(obj) -= (val))
#define atomic_fetch_or(obj, val) (*(obj) |= (val))
#define atomic_fetch_xor(obj, val) (*(obj) ^= (val))
#define atomic_fetch_and(obj, val) (*(obj) &= (val))
#define atomic_fetch_add_explicit(obj, val, order) (*(obj) += (val))
#define atomic_fetch_sub_explicit(obj, val, order) (*(obj) -= (val))
#define atomic_fetch_or_explicit(obj, val, order) (*(obj) |= (val))
#define atomic_fetch_xor_explicit(obj, val, order) (*(obj) ^= (val))
#define atomic_fetch_and_explicit(obj, val, order) (*(obj) &= (val))
#define атом_прибавить(obj, val) atomic_fetch_add(obj, val)
#define атом_вычесть(obj, val) atomic_fetch_sub(obj, val)
#define атом_или(obj, val) atomic_fetch_or(obj, val)
#define атом_исключ_или(obj, val) atomic_fetch_xor(obj, val)
#define атом_и(obj, val) atomic_fetch_and(obj, val)
#define атом_прибавить_явно(obj, val, order) atomic_fetch_add_explicit(obj, val, order)
#define атом_вычесть_явно(obj, val, order) atomic_fetch_sub_explicit(obj, val, order)
#define атом_или_явно(obj, val, order) atomic_fetch_or_explicit(obj, val, order)
#define атом_исключ_или_явно(obj, val, order) atomic_fetch_xor_explicit(obj, val, order)
#define атом_и_явно(obj, val, order) atomic_fetch_and_explicit(obj, val, order)
#define atomic_compare_exchange_weak(p, old, new) \
__builtin_compare_and_swap((p), (old), (new))
#define atomic_compare_exchange_strong(p, old, new) \
__builtin_compare_and_swap((p), (old), (new))
#define atomic_exchange(obj, val) __builtin_atomic_exchange((obj), (val))
#define atomic_exchange_explicit(obj, val, order) __builtin_atomic_exchange((obj), (val))
#define атом_сравнить_обменять_слабо(p, old, new) atomic_compare_exchange_weak(p, old, new)
#define атом_сравнить_обменять(p, old, new) atomic_compare_exchange_strong(p, old, new)
#define атом_обменять(obj, val) atomic_exchange(obj, val)
#define атом_обменять_явно(obj, val, order) atomic_exchange_explicit(obj, val, order)
#define atomic_flag_test_and_set(obj) atomic_exchange((obj), 1)
#define atomic_flag_test_and_set_explicit(obj, order) atomic_exchange((obj), 1)
#define atomic_flag_clear(obj) (*(obj) = 0)
#define atomic_flag_clear_explicit(obj, order) (*(obj) = 0)
#define атом_флаг_проверить_установить(obj) atomic_flag_test_and_set(obj)
#define атом_флаг_проверить_установить_явно(obj, order) atomic_flag_test_and_set_explicit(obj, order)
#define атом_флаг_очистить(obj) atomic_flag_clear(obj)
#define атом_флаг_очистить_явно(obj, order) atomic_flag_clear_explicit(obj, order)
typedef _Atomic _Bool atomic_flag;
typedef _Atomic _Bool atomic_bool;
typedef _Atomic char atomic_char;
typedef _Atomic signed char atomic_schar;
typedef _Atomic unsigned char atomic_uchar;
typedef _Atomic short atomic_short;
typedef _Atomic unsigned short atomic_ushort;
typedef _Atomic int atomic_int;
typedef _Atomic unsigned int atomic_uint;
typedef _Atomic long atomic_long;
typedef _Atomic unsigned long atomic_ulong;
typedef _Atomic long long atomic_llong;
typedef _Atomic unsigned long long atomic_ullong;
typedef _Atomic unsigned short atomic_char16_t;
typedef _Atomic unsigned atomic_char32_t;
typedef _Atomic unsigned atomic_wchar_t;
typedef _Atomic signed char atomic_int_least8_t;
typedef _Atomic unsigned char atomic_uint_least8_t;
typedef _Atomic short atomic_int_least16_t;
typedef _Atomic unsigned short atomic_uint_least16_t;
typedef _Atomic int atomic_int_least32_t;
typedef _Atomic unsigned int atomic_uint_least32_t;
typedef _Atomic long atomic_int_least64_t;
typedef _Atomic unsigned long atomic_uint_least64_t;
typedef _Atomic signed char atomic_int_fast8_t;
typedef _Atomic unsigned char atomic_uint_fast8_t;
typedef _Atomic short atomic_int_fast16_t;
typedef _Atomic unsigned short atomic_uint_fast16_t;
typedef _Atomic int atomic_int_fast32_t;
typedef _Atomic unsigned int atomic_uint_fast32_t;
typedef _Atomic long atomic_int_fast64_t;
typedef _Atomic unsigned long atomic_uint_fast64_t;
typedef _Atomic long atomic_intptr_t;
typedef _Atomic unsigned long atomic_uintptr_t;
typedef _Atomic unsigned long atomic_size_t;
typedef _Atomic long atomic_ptrdiff_t;
typedef _Atomic long atomic_intmax_t;
typedef _Atomic unsigned long atomic_uintmax_t;
// ============================================================
// stdbool.h - Булевый тип данных
// ============================================================
#define bool _Bool
#define true 1
#define false 0
#define бул _Bool
#define истина 1
#define ложь 0
#define __bool_true_false_are_defined 1
// ============================================================
// stddef.h - Стандартные определения типов и макросов
// ============================================================
#define NULL ((void *)0)
typedef unsigned long size_t;
typedef long ptrdiff_t;
typedef unsigned int wchar_t;
typedef long max_align_t;
#define offsetof(type, member) ((size_t)&(((type *)0)->member))
#define НУЛЬ NULL
typedef size_t размер_t;
typedef ptrdiff_t разность_t;
typedef wchar_t шсимвол_t;
typedef max_align_t макс_выравн_t;
#define смещение(type, member) offsetof(type, member)
// ============================================================
// stdnoreturn.h - Спецификатор невозвратных функций
// ============================================================
#define noreturn _Noreturn
#define безвозврат _Noreturn
#endif // _STDLIB_RU