Merge branch 'master' into pico_sdk
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
/*! \file pibase_macros.h
|
||||
* \ingroup Core
|
||||
* \~\brief
|
||||
* \~english Base macros
|
||||
* \~russian Базовые макросы
|
||||
*
|
||||
* \~\details
|
||||
* \~english
|
||||
* This file declares basic useful maros
|
||||
* \~russian
|
||||
* Этот файл объявляет основные вспомогательные макросы
|
||||
*/
|
||||
//! \addtogroup Core
|
||||
//! \{
|
||||
//! \~\file pibase_macros.h
|
||||
//! \brief
|
||||
//! \~english Base macros
|
||||
//! \~russian Базовые макросы
|
||||
//! \details
|
||||
//! \~english
|
||||
//! This file declares basic useful macros for the PIP library including platform detection,
|
||||
//! compiler-specific configurations, and utility macros for private data handling.
|
||||
//! \~russian
|
||||
//! Этот файл объявляет основные вспомогательные макросы для библиотеки PIP, включая обнаружение платформы,
|
||||
//! конфигурации, специфичные для компилятора, и служебные макросы для работы с приватными данными.
|
||||
//! \~\}
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Base macros
|
||||
@@ -50,147 +52,118 @@
|
||||
|
||||
#ifdef DOXYGEN
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Major value of PIP version
|
||||
//! \~russian Мажорная версия PIP
|
||||
# define PIP_VERSION_MAJOR
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Minor value of PIP version
|
||||
//! \~russian Минорная версия PIP
|
||||
# define PIP_VERSION_MINOR
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Revision value of PIP version
|
||||
//! \~russian Ревизия версии PIP
|
||||
# define PIP_VERSION_REVISION
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Suffix of PIP version
|
||||
//! \~russian Суффикс версии PIP
|
||||
# define PIP_VERSION_SUFFIX
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Version of PIP in hex - 0x##(Major)##(Minor)##(Revision)
|
||||
//! \~russian Версия PIP в hex - 0x##(Major)##(Minor)##(Revision)
|
||||
# define PIP_VERSION
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when compile-time debug is enabled
|
||||
//! \~russian Макрос объявлен когда включена compile-time отладка
|
||||
# define PIP_DEBUG
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is any Windows
|
||||
//! \~russian Макрос объявлен когда операционная система Windows
|
||||
# define WINDOWS
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is QNX or Blackberry
|
||||
//! \~russian Макрос объявлен когда операционная система QNX или Blackberry
|
||||
# define QNX
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is Blackberry
|
||||
//! \~russian Макрос объявлен когда операционная система Blackberry
|
||||
# define BLACKBERRY
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is FreeBSD
|
||||
//! \~russian Макрос объявлен когда операционная система FreeBSD
|
||||
# define FREE_BSD
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is Mac OS
|
||||
//! \~russian Макрос объявлен когда операционная система Mac OS
|
||||
# define MAC_OS
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is Android
|
||||
//! \~russian Макрос объявлен когда операционная система Android
|
||||
# define ANDROID
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is any Linux
|
||||
//! \~russian Макрос объявлен когда операционная система Linux
|
||||
# define LINUX
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when operation system is FreeRTOS
|
||||
//! \~russian Макрос объявлен когда операционная система FreeRTOS
|
||||
# define FREERTOS
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when compiler is GCC or MinGW
|
||||
//! \~russian Макрос объявлен когда компилятор GCC или MinGW
|
||||
# define CC_GCC
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when PIP is decided that host is support language
|
||||
//! \~russian Макрос объявлен когда PIP решил что система поддерживает локализацию
|
||||
# define HAS_LOCALE
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when PIP is building for embedded systems
|
||||
//! \~russian Макрос объявлен когда PIP собирается для встраиваемых систем
|
||||
# define MICRO_PIP
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when compiler is Visual Studio
|
||||
//! \~russian Макрос объявлен когда компилятор Visual Studio
|
||||
# define CC_VC
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when compiler is AVR GCC
|
||||
//! \~russian Макрос объявлен когда компилятор AVR GCC
|
||||
# define CC_AVR_GCC
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro is defined when compiler is unknown
|
||||
//! \~russian Макрос объявлен когда компилятор неизвестен
|
||||
# define CC_OTHER
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to declare private section, "export" is optional
|
||||
//! \~russian Макрос для объявления частной секции, "export" необязателен
|
||||
# define PRIVATE_DECLARATION(export)
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to start definition of private section
|
||||
//! \~russian Макрос для начала реализации частной секции
|
||||
# define PRIVATE_DEFINITION_START(Class)
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to end definition of private section
|
||||
//! \~russian Макрос для окончания реализации частной секции
|
||||
# define PRIVATE_DEFINITION_END(Class)
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to access private section by pointer
|
||||
//! \~russian Макрос для доступа к частной секции
|
||||
# define PRIVATE
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to access private section by pointer without brakes ()
|
||||
//! \~english Macro to access private section by pointer without braces ()
|
||||
//! \~russian Макрос для доступа к частной секции без обрамляющих скобок ()
|
||||
# define PRIVATEWB
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to start static initializer
|
||||
//! \~russian Макрос для начала статической инициализации
|
||||
# define STATIC_INITIALIZER_BEGIN
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to end static initializer
|
||||
//! \~russian Макрос для окончания статической инициализации
|
||||
# define STATIC_INITIALIZER_END
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to remove class copy availability
|
||||
//! \~russian Макрос для запрета копирования класса
|
||||
# define NO_COPY_CLASS(Class)
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro to supress compiler warning about unused variable
|
||||
//! \~russian Макрос для подавления предупреждения компилятора о неиспользуемой переменной
|
||||
# define NO_UNUSED(x)
|
||||
@@ -322,6 +295,9 @@ typedef long long ssize_t;
|
||||
// Private data macros
|
||||
#ifndef DOXYGEN
|
||||
|
||||
//! \~english Macro to declare private section, "export" is optional
|
||||
//! \~russian Макрос для объявления частной секции, "export" необязателен
|
||||
//! \~sa PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DECLARATION(e) \
|
||||
struct __Private__; \
|
||||
friend struct __Private__; \
|
||||
@@ -334,10 +310,20 @@ typedef long long ssize_t;
|
||||
}; \
|
||||
__PrivateInitializer__ __privateinitializer__;
|
||||
|
||||
//! \~english Macro to start definition of private section
|
||||
//! \~russian Макрос для начала реализации частной секции
|
||||
//! \~sa PRIVATE_DEFINITION_END PRIVATE_DEFINITION_END_NO_INITIALIZE PRIVATE_DEFINITION_INITIALIZE PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DEFINITION_START(c) struct c::__Private__ {
|
||||
//! \~english Macro to end definition of private section without initialization
|
||||
//! \~russian Макрос для окончания реализации частной секции без инициализации
|
||||
//! \~sa PRIVATE_DEFINITION_END PRIVATE_DEFINITION_START PRIVATE_DEFINITION_INITIALIZE PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DEFINITION_END_NO_INITIALIZE(c) \
|
||||
} \
|
||||
;
|
||||
|
||||
//! \~english Macro to initialize private section
|
||||
//! \~russian Макрос для инициализации частной секции
|
||||
//! \~sa PRIVATE_DEFINITION_END PRIVATE_DEFINITION_START PRIVATE_DEFINITION_END_NO_INITIALIZE PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DEFINITION_INITIALIZE(c) \
|
||||
c::__PrivateInitializer__::__PrivateInitializer__() { \
|
||||
p = new c::__Private__(); \
|
||||
@@ -353,31 +339,51 @@ typedef long long ssize_t;
|
||||
p = new c::__Private__(); \
|
||||
return *this; \
|
||||
}
|
||||
|
||||
|
||||
//! \~english Macro to end definition of private section with initialization
|
||||
//! \~russian Макрос для окончания реализации частной секции с инициализацией
|
||||
//! \~sa PRIVATE_DEFINITION_END_NO_INITIALIZE PRIVATE_DEFINITION_START PRIVATE_DEFINITION_INITIALIZE PRIVATE PRIVATEWB
|
||||
# define PRIVATE_DEFINITION_END(c) \
|
||||
PRIVATE_DEFINITION_END_NO_INITIALIZE \
|
||||
(c) PRIVATE_DEFINITION_INITIALIZE(c)
|
||||
|
||||
|
||||
//! \~english Macro to access private section by pointer
|
||||
//! \~russian Макрос для доступа к частной секции
|
||||
//! \~sa PRIVATEWB
|
||||
# define PRIVATE (__privateinitializer__.p)
|
||||
|
||||
//! \~english Macro to access private section by pointer without braces ()
|
||||
//! \~russian Макрос для доступа к частной секции без обрамляющих скобок ()
|
||||
//! \~sa PRIVATE
|
||||
# define PRIVATEWB __privateinitializer__.p
|
||||
|
||||
#endif // DOXYGEN
|
||||
|
||||
//! \~english Macro to remove class copy availability
|
||||
//! \~russian Макрос для запрета копирования класса
|
||||
#define NO_COPY_CLASS(name) \
|
||||
name(const name &) = delete; \
|
||||
name & operator=(const name &) = delete;
|
||||
|
||||
|
||||
//! \~english Counter macro for unique identifier generation
|
||||
//! \~russian Макрос счетчика для генерации уникальных идентификаторов
|
||||
#define _PIP_ADD_COUNTER_WS(a, cnt, line) a##cnt##_##line
|
||||
#define _PIP_ADD_COUNTER_WF(a, cnt, line) _PIP_ADD_COUNTER_WS(a, cnt, line)
|
||||
#define _PIP_ADD_COUNTER(a) _PIP_ADD_COUNTER_WF(a, __COUNTER__, __LINE__)
|
||||
|
||||
|
||||
//! \~english Macro to start static initializer
|
||||
//! \~russian Макрос для начала статической инициализации
|
||||
//! \~sa STATIC_INITIALIZER_END
|
||||
#define STATIC_INITIALIZER_BEGIN \
|
||||
class { \
|
||||
class _Initializer_ { \
|
||||
public: \
|
||||
_Initializer_() {
|
||||
//! \~english Macro to end static initializer
|
||||
//! \~russian Макрос для окончания статической инициализации
|
||||
//! \~sa STATIC_INITIALIZER_BEGIN
|
||||
#define STATIC_INITIALIZER_END \
|
||||
} \
|
||||
} \
|
||||
@@ -386,12 +392,12 @@ typedef long long ssize_t;
|
||||
_PIP_ADD_COUNTER(_pip_initializer_);
|
||||
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Minimal sleep in milliseconds for internal PIP using
|
||||
//! \~russian Минимальное значание задержки в милисекундах для внутреннего использования в библиотеке PIP
|
||||
//! \~\details
|
||||
//! \~english Using in \a piMinSleep(), \a PIThread, \a PITimer::Pool. By default 1ms.
|
||||
//! \~russian Используется в \a piMinSleep(), \a PIThread, \a PITimer::Pool. По умолчанию равна 1мс.
|
||||
//! \~\sa PIP_MIN_MSLEEP
|
||||
#ifndef PIP_MIN_MSLEEP
|
||||
# ifndef MICRO_PIP
|
||||
# define PIP_MIN_MSLEEP 1.
|
||||
@@ -401,19 +407,26 @@ typedef long long ssize_t;
|
||||
#endif
|
||||
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro used for infinite loop
|
||||
//! \~russian Макрос для бесконечного цикла
|
||||
//! \~\details
|
||||
//! \~english Expands to \c for(;;) infinite loop construct
|
||||
//! \~russian Раскрывается в конструкцию бесконечного цикла \c for(;;)
|
||||
#define FOREVER for (;;)
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro used for infinite wait
|
||||
//! \~russian Макрос для бесконечного ожидания
|
||||
//! \~\details
|
||||
//! \~english Expands to infinite loop with periodic sleep calls for CPU-friendly waiting
|
||||
//! \~russian Раскрывается в бесконечный цикл с периодическими вызовами sleep для экономии ресурсов CPU
|
||||
#define FOREVER_WAIT FOREVER piMinSleep();
|
||||
|
||||
//! \~\brief
|
||||
//! \~english Macro used for infinite wait
|
||||
//! \~russian Макрос для бесконечного ожидания
|
||||
//! \~\details
|
||||
//! \~english Expands to infinite loop with periodic sleep calls for CPU-friendly waiting
|
||||
//! \~russian Раскрывается в бесконечный цикл с периодическими вызовами sleep для экономии ресурсов CPU
|
||||
//! \~\sa FOREVER_WAIT
|
||||
#define WAIT_FOREVER FOREVER piMinSleep();
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user