rusi/include/rstdlib.h

358 lines
14 KiB
C
Raw Permalink Normal View History

// ============================================================
// СТАНДАРТНАЯ БИБЛИОТЕКА РУСИ
// ============================================================
// Объединение всех стандартных заголовочных файлов 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