version 3.12.0
split pibase.h into 2 files add PIScopeExitCall
This commit is contained in:
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0)
|
|||||||
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
||||||
project(PIP)
|
project(PIP)
|
||||||
set(PIP_MAJOR 3)
|
set(PIP_MAJOR 3)
|
||||||
set(PIP_MINOR 11)
|
set(PIP_MINOR 12)
|
||||||
set(PIP_REVISION 0)
|
set(PIP_REVISION 0)
|
||||||
set(PIP_SUFFIX )
|
set(PIP_SUFFIX )
|
||||||
set(PIP_COMPANY SHS)
|
set(PIP_COMPANY SHS)
|
||||||
|
|||||||
@@ -34,181 +34,11 @@
|
|||||||
#ifndef PIBASE_H
|
#ifndef PIBASE_H
|
||||||
#define PIBASE_H
|
#define PIBASE_H
|
||||||
|
|
||||||
#include "pip_defs.h"
|
#include "pibase_macros.h"
|
||||||
#include "pip_export.h"
|
#include "pip_export.h"
|
||||||
#include "pip_version.h"
|
|
||||||
#include "piplatform.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
//! \~english
|
|
||||||
//! Meta-information section for any entity.
|
|
||||||
//! Parsing by \a pip_cmg and can be accessed by \a PICodeInfo.
|
|
||||||
//! Contains sequence of key=value pairs, e.g.
|
|
||||||
//! \~russian
|
|
||||||
//! Секция метаинформации для любой сущности.
|
|
||||||
//! Парсится \a pip_cmg и доступна с помощью \a PICodeInfo.
|
|
||||||
//! Содержит набор пар ключ=значение, например
|
|
||||||
//! \~
|
|
||||||
//! PIMETA(id=12345,tag="my string")
|
|
||||||
#define PIMETA(...)
|
|
||||||
|
|
||||||
#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 is defined when PIP can use "rt" library for \a PITimer::ThreadRT timers implementation
|
|
||||||
//! \~russian Макрос объявлен когда PIP может использовать библиотеку "rt" для \a PITimer::ThreadRT реализации таймера
|
|
||||||
# define PIP_TIMER_RT
|
|
||||||
|
|
||||||
//! \~\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 ()
|
|
||||||
//! \~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)
|
|
||||||
|
|
||||||
# undef MICRO_PIP
|
|
||||||
# undef FREERTOS
|
|
||||||
#endif // DOXYGEN
|
|
||||||
|
|
||||||
#ifdef CC_AVR_GCC
|
#ifdef CC_AVR_GCC
|
||||||
# include <ArduinoSTL.h>
|
# include <ArduinoSTL.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -218,215 +48,6 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
#ifdef WINDOWS
|
|
||||||
# ifdef CC_VC
|
|
||||||
# define SHUT_RDWR 2
|
|
||||||
# pragma comment(lib, "Ws2_32.lib")
|
|
||||||
# pragma comment(lib, "Iphlpapi.lib")
|
|
||||||
# pragma comment(lib, "Psapi.lib")
|
|
||||||
# ifdef ARCH_BITS_32
|
|
||||||
# define _X86_
|
|
||||||
# else
|
|
||||||
# define _IA64_
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# define SHUT_RDWR SD_BOTH
|
|
||||||
# endif
|
|
||||||
typedef int socklen_t;
|
|
||||||
extern long long __pi_perf_freq;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef DOXYGEN
|
|
||||||
|
|
||||||
# ifdef ANDROID
|
|
||||||
/// # define tcdrain(fd) ioctl(fd, TCSBRK, 1)
|
|
||||||
// inline int wctomb(char * c, wchar_t w) {*c = ((char * )&w)[0]; return 1;}
|
|
||||||
// inline int mbtowc(wchar_t * w, const char * c, size_t) {*w = ((wchar_t * )&c)[0]; return 1;}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef MAC_OS
|
|
||||||
# define environ (*_NSGetEnviron())
|
|
||||||
typedef long time_t;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef LINUX
|
|
||||||
# define environ __environ
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef FREE_BSD
|
|
||||||
extern char ** environ;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef NO_UNUSED
|
|
||||||
# define NO_UNUSED(x) (void)x
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef assert
|
|
||||||
# define assert(x)
|
|
||||||
# define assertm(exp, msg)
|
|
||||||
# else
|
|
||||||
# define assertm(exp, msg) assert(((void)msg, exp))
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef MICRO_PIP
|
|
||||||
# define __PIP_TYPENAME__(T) "?"
|
|
||||||
# else
|
|
||||||
# define __PIP_TYPENAME__(T) typeid(T).name()
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef CC_GCC
|
|
||||||
# undef DEPRECATED
|
|
||||||
# undef DEPRECATEDM
|
|
||||||
# define DEPRECATED __attribute__((deprecated))
|
|
||||||
# define DEPRECATEDM(msg) __attribute__((deprecated(msg)))
|
|
||||||
# if CC_GCC_VERSION > 0x025F // > 2.95
|
|
||||||
# pragma GCC diagnostic warning "-Wdeprecated-declarations"
|
|
||||||
# ifdef LINUX
|
|
||||||
# define HAS_LOCALE
|
|
||||||
# endif
|
|
||||||
# ifdef MAC_OS
|
|
||||||
# pragma GCC diagnostic ignored "-Wundefined-bool-conversion"
|
|
||||||
# pragma GCC diagnostic ignored "-Wc++11-extensions"
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# ifdef ANDROID
|
|
||||||
# pragma GCC diagnostic ignored "-Wunused-parameter"
|
|
||||||
# pragma GCC diagnostic ignored "-Wextra"
|
|
||||||
# pragma GCC diagnostic ignored "-Wc++11-extensions"
|
|
||||||
# pragma GCC diagnostic ignored "-Wundefined-bool-conversion"
|
|
||||||
// # pragma GCC diagnostic ignored "-Wliteral-suffix"
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef CC_VC
|
|
||||||
# undef DEPRECATED
|
|
||||||
# undef DEPRECATEDM
|
|
||||||
# define DEPRECATED __declspec(deprecated)
|
|
||||||
# define DEPRECATEDM(msg) __declspec(deprecated(msg))
|
|
||||||
# pragma warning(disable: 4018)
|
|
||||||
# pragma warning(disable: 4061)
|
|
||||||
# pragma warning(disable: 4100)
|
|
||||||
# pragma warning(disable: 4239)
|
|
||||||
# pragma warning(disable: 4242)
|
|
||||||
# pragma warning(disable: 4244)
|
|
||||||
# pragma warning(disable: 4251)
|
|
||||||
# pragma warning(disable: 4365)
|
|
||||||
# pragma warning(disable: 4512)
|
|
||||||
# pragma warning(disable: 4668)
|
|
||||||
# pragma warning(disable: 4710)
|
|
||||||
# pragma warning(disable: 4800)
|
|
||||||
# pragma warning(disable: 4820)
|
|
||||||
# pragma warning(disable: 4986)
|
|
||||||
# pragma warning(disable: 4996)
|
|
||||||
# ifdef ARCH_BITS_32
|
|
||||||
typedef long ssize_t;
|
|
||||||
# else
|
|
||||||
typedef long long ssize_t;
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifdef CC_OTHER
|
|
||||||
# undef DEPRECATED
|
|
||||||
# undef DEPRECATEDM
|
|
||||||
# define DEPRECATED
|
|
||||||
# define DEPRECATEDM(msg)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif // DOXYGEN
|
|
||||||
// Private data macros
|
|
||||||
#ifndef DOXYGEN
|
|
||||||
|
|
||||||
# define PRIVATE_DECLARATION(e) \
|
|
||||||
struct __Private__; \
|
|
||||||
friend struct __Private__; \
|
|
||||||
struct e __PrivateInitializer__ { \
|
|
||||||
__PrivateInitializer__(); \
|
|
||||||
__PrivateInitializer__(const __PrivateInitializer__ & o); \
|
|
||||||
~__PrivateInitializer__(); \
|
|
||||||
__PrivateInitializer__ & operator=(const __PrivateInitializer__ & o); \
|
|
||||||
__Private__ * p; \
|
|
||||||
}; \
|
|
||||||
__PrivateInitializer__ __privateinitializer__;
|
|
||||||
|
|
||||||
# define PRIVATE_DEFINITION_START(c) struct c::__Private__ {
|
|
||||||
# define PRIVATE_DEFINITION_END(c) \
|
|
||||||
} \
|
|
||||||
; \
|
|
||||||
c::__PrivateInitializer__::__PrivateInitializer__() { \
|
|
||||||
p = new c::__Private__(); \
|
|
||||||
} \
|
|
||||||
c::__PrivateInitializer__::__PrivateInitializer__(const c::__PrivateInitializer__ &) { /*if (p) delete p;*/ \
|
|
||||||
p = new c::__Private__(); \
|
|
||||||
} \
|
|
||||||
c::__PrivateInitializer__::~__PrivateInitializer__() { \
|
|
||||||
delete p; \
|
|
||||||
p = 0; \
|
|
||||||
} \
|
|
||||||
c::__PrivateInitializer__ & c::__PrivateInitializer__::operator=(const c::__PrivateInitializer__ &) { \
|
|
||||||
if (p) delete p; \
|
|
||||||
p = new c::__Private__(); \
|
|
||||||
return *this; \
|
|
||||||
}
|
|
||||||
|
|
||||||
# define PRIVATE (__privateinitializer__.p)
|
|
||||||
# define PRIVATEWB __privateinitializer__.p
|
|
||||||
|
|
||||||
#endif // DOXYGEN
|
|
||||||
|
|
||||||
#define NO_COPY_CLASS(name) \
|
|
||||||
name(const name &) = delete; \
|
|
||||||
name & operator=(const name &) = delete;
|
|
||||||
|
|
||||||
|
|
||||||
#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__)
|
|
||||||
|
|
||||||
|
|
||||||
#define STATIC_INITIALIZER_BEGIN \
|
|
||||||
class { \
|
|
||||||
class _Initializer_ { \
|
|
||||||
public: \
|
|
||||||
_Initializer_() {
|
|
||||||
#define STATIC_INITIALIZER_END \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
_initializer_; \
|
|
||||||
} \
|
|
||||||
_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мс.
|
|
||||||
#ifndef PIP_MIN_MSLEEP
|
|
||||||
# ifndef MICRO_PIP
|
|
||||||
# define PIP_MIN_MSLEEP 1.
|
|
||||||
# else
|
|
||||||
# define PIP_MIN_MSLEEP 10.
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
//! \~\brief
|
|
||||||
//! \~english Macro used for infinite loop
|
|
||||||
//! \~russian Макрос для бесконечного цикла
|
|
||||||
#define FOREVER for (;;)
|
|
||||||
|
|
||||||
//! \~\brief
|
|
||||||
//! \~english Macro used for infinite wait
|
|
||||||
//! \~russian Макрос для бесконечного ожидания
|
|
||||||
#define FOREVER_WAIT FOREVER piMinSleep();
|
|
||||||
|
|
||||||
//! \~\brief
|
|
||||||
//! \~english Macro used for infinite wait
|
|
||||||
//! \~russian Макрос для бесконечного ожидания
|
|
||||||
#define WAIT_FOREVER FOREVER piMinSleep();
|
|
||||||
|
|
||||||
|
|
||||||
//! \~\brief
|
//! \~\brief
|
||||||
//! \~english Global variable enabling output to piCout, default is true
|
//! \~english Global variable enabling output to piCout, default is true
|
||||||
//! \~russian Глобальная переменная, включающая вывод в piCout, при старте true
|
//! \~russian Глобальная переменная, включающая вывод в piCout, при старте true
|
||||||
@@ -1021,4 +642,19 @@ inline bool piDeleteSafety(T *& pointer) {
|
|||||||
#define piLetobef piLetobe<float>
|
#define piLetobef piLetobe<float>
|
||||||
|
|
||||||
|
|
||||||
|
class PIP_EXPORT PIScopeExitCall {
|
||||||
|
public:
|
||||||
|
explicit PIScopeExitCall(std::function<void()> f): func(f) {}
|
||||||
|
~PIScopeExitCall() {
|
||||||
|
if (func) func();
|
||||||
|
}
|
||||||
|
void cancel() { func = nullptr; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
NO_COPY_CLASS(PIScopeExitCall)
|
||||||
|
|
||||||
|
std::function<void()> func;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // PIBASE_H
|
#endif // PIBASE_H
|
||||||
|
|||||||
419
libs/main/core/pibase_macros.h
Normal file
419
libs/main/core/pibase_macros.h
Normal file
@@ -0,0 +1,419 @@
|
|||||||
|
/*! \file pibase_macros.h
|
||||||
|
* \ingroup Core
|
||||||
|
* \~\brief
|
||||||
|
* \~english Base macros
|
||||||
|
* \~russian Базовые макросы
|
||||||
|
*
|
||||||
|
* \~\details
|
||||||
|
* \~english
|
||||||
|
* This file declares basic useful maros
|
||||||
|
* \~russian
|
||||||
|
* Этот файл объявляет основные вспомогательные макросы
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
PIP - Platform Independent Primitives
|
||||||
|
Base macros
|
||||||
|
Ivan Pelipenko peri4ko@yandex.ru
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PIBASE_MACROS_H
|
||||||
|
#define PIBASE_MACROS_H
|
||||||
|
|
||||||
|
#include "pip_defs.h"
|
||||||
|
#include "pip_version.h"
|
||||||
|
#include "piplatform.h"
|
||||||
|
|
||||||
|
//! \~english
|
||||||
|
//! Meta-information section for any entity.
|
||||||
|
//! Parsing by \a pip_cmg and can be accessed by \a PICodeInfo.
|
||||||
|
//! Contains sequence of key=value pairs, e.g.
|
||||||
|
//! \~russian
|
||||||
|
//! Секция метаинформации для любой сущности.
|
||||||
|
//! Парсится \a pip_cmg и доступна с помощью \a PICodeInfo.
|
||||||
|
//! Содержит набор пар ключ=значение, например
|
||||||
|
//! \~
|
||||||
|
//! PIMETA(id=12345,tag="my string")
|
||||||
|
#define PIMETA(...)
|
||||||
|
|
||||||
|
#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 is defined when PIP can use "rt" library for \a PITimer::ThreadRT timers implementation
|
||||||
|
//! \~russian Макрос объявлен когда PIP может использовать библиотеку "rt" для \a PITimer::ThreadRT реализации таймера
|
||||||
|
# define PIP_TIMER_RT
|
||||||
|
|
||||||
|
//! \~\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 ()
|
||||||
|
//! \~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)
|
||||||
|
|
||||||
|
# undef MICRO_PIP
|
||||||
|
# undef FREERTOS
|
||||||
|
|
||||||
|
#endif // DOXYGEN
|
||||||
|
|
||||||
|
#ifdef WINDOWS
|
||||||
|
# ifdef CC_VC
|
||||||
|
# define SHUT_RDWR 2
|
||||||
|
# pragma comment(lib, "Ws2_32.lib")
|
||||||
|
# pragma comment(lib, "Iphlpapi.lib")
|
||||||
|
# pragma comment(lib, "Psapi.lib")
|
||||||
|
# ifdef ARCH_BITS_32
|
||||||
|
# define _X86_
|
||||||
|
# else
|
||||||
|
# define _IA64_
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define SHUT_RDWR SD_BOTH
|
||||||
|
# endif
|
||||||
|
typedef int socklen_t;
|
||||||
|
extern long long __pi_perf_freq;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DOXYGEN
|
||||||
|
|
||||||
|
# ifdef ANDROID
|
||||||
|
// # define tcdrain(fd) ioctl(fd, TCSBRK, 1)
|
||||||
|
// inline int wctomb(char * c, wchar_t w) {*c = ((char * )&w)[0]; return 1;}
|
||||||
|
// inline int mbtowc(wchar_t * w, const char * c, size_t) {*w = ((wchar_t * )&c)[0]; return 1;}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef MAC_OS
|
||||||
|
# define environ (*_NSGetEnviron())
|
||||||
|
typedef long time_t;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef LINUX
|
||||||
|
# define environ __environ
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef FREE_BSD
|
||||||
|
extern char ** environ;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifndef NO_UNUSED
|
||||||
|
# define NO_UNUSED(x) (void)x
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifndef assert
|
||||||
|
# define assert(x)
|
||||||
|
# define assertm(exp, msg)
|
||||||
|
# else
|
||||||
|
# define assertm(exp, msg) assert(((void)msg, exp))
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef MICRO_PIP
|
||||||
|
# define __PIP_TYPENAME__(T) "?"
|
||||||
|
# else
|
||||||
|
# define __PIP_TYPENAME__(T) typeid(T).name()
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef CC_GCC
|
||||||
|
# undef DEPRECATED
|
||||||
|
# undef DEPRECATEDM
|
||||||
|
# define DEPRECATED __attribute__((deprecated))
|
||||||
|
# define DEPRECATEDM(msg) __attribute__((deprecated(msg)))
|
||||||
|
# if CC_GCC_VERSION > 0x025F // > 2.95
|
||||||
|
# pragma GCC diagnostic warning "-Wdeprecated-declarations"
|
||||||
|
# ifdef LINUX
|
||||||
|
# define HAS_LOCALE
|
||||||
|
# endif
|
||||||
|
# ifdef MAC_OS
|
||||||
|
# pragma GCC diagnostic ignored "-Wundefined-bool-conversion"
|
||||||
|
# pragma GCC diagnostic ignored "-Wc++11-extensions"
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# ifdef ANDROID
|
||||||
|
# pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
|
# pragma GCC diagnostic ignored "-Wextra"
|
||||||
|
# pragma GCC diagnostic ignored "-Wc++11-extensions"
|
||||||
|
# pragma GCC diagnostic ignored "-Wundefined-bool-conversion"
|
||||||
|
// # pragma GCC diagnostic ignored "-Wliteral-suffix"
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef CC_VC
|
||||||
|
# undef DEPRECATED
|
||||||
|
# undef DEPRECATEDM
|
||||||
|
# define DEPRECATED __declspec(deprecated)
|
||||||
|
# define DEPRECATEDM(msg) __declspec(deprecated(msg))
|
||||||
|
# pragma warning(disable: 4018)
|
||||||
|
# pragma warning(disable: 4061)
|
||||||
|
# pragma warning(disable: 4100)
|
||||||
|
# pragma warning(disable: 4239)
|
||||||
|
# pragma warning(disable: 4242)
|
||||||
|
# pragma warning(disable: 4244)
|
||||||
|
# pragma warning(disable: 4251)
|
||||||
|
# pragma warning(disable: 4365)
|
||||||
|
# pragma warning(disable: 4512)
|
||||||
|
# pragma warning(disable: 4668)
|
||||||
|
# pragma warning(disable: 4710)
|
||||||
|
# pragma warning(disable: 4800)
|
||||||
|
# pragma warning(disable: 4820)
|
||||||
|
# pragma warning(disable: 4986)
|
||||||
|
# pragma warning(disable: 4996)
|
||||||
|
# ifdef ARCH_BITS_32
|
||||||
|
typedef long ssize_t;
|
||||||
|
# else
|
||||||
|
typedef long long ssize_t;
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef CC_OTHER
|
||||||
|
# undef DEPRECATED
|
||||||
|
# undef DEPRECATEDM
|
||||||
|
# define DEPRECATED
|
||||||
|
# define DEPRECATEDM(msg)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif // DOXYGEN
|
||||||
|
|
||||||
|
|
||||||
|
// Private data macros
|
||||||
|
#ifndef DOXYGEN
|
||||||
|
|
||||||
|
# define PRIVATE_DECLARATION(e) \
|
||||||
|
struct __Private__; \
|
||||||
|
friend struct __Private__; \
|
||||||
|
struct e __PrivateInitializer__ { \
|
||||||
|
__PrivateInitializer__(); \
|
||||||
|
__PrivateInitializer__(const __PrivateInitializer__ & o); \
|
||||||
|
~__PrivateInitializer__(); \
|
||||||
|
__PrivateInitializer__ & operator=(const __PrivateInitializer__ & o); \
|
||||||
|
__Private__ * p; \
|
||||||
|
}; \
|
||||||
|
__PrivateInitializer__ __privateinitializer__;
|
||||||
|
|
||||||
|
# define PRIVATE_DEFINITION_START(c) struct c::__Private__ {
|
||||||
|
# define PRIVATE_DEFINITION_END(c) \
|
||||||
|
} \
|
||||||
|
; \
|
||||||
|
c::__PrivateInitializer__::__PrivateInitializer__() { \
|
||||||
|
p = new c::__Private__(); \
|
||||||
|
} \
|
||||||
|
c::__PrivateInitializer__::__PrivateInitializer__(const c::__PrivateInitializer__ &) { /*if (p) delete p;*/ \
|
||||||
|
p = new c::__Private__(); \
|
||||||
|
} \
|
||||||
|
c::__PrivateInitializer__::~__PrivateInitializer__() { \
|
||||||
|
delete p; \
|
||||||
|
p = 0; \
|
||||||
|
} \
|
||||||
|
c::__PrivateInitializer__ & c::__PrivateInitializer__::operator=(const c::__PrivateInitializer__ &) { \
|
||||||
|
if (p) delete p; \
|
||||||
|
p = new c::__Private__(); \
|
||||||
|
return *this; \
|
||||||
|
}
|
||||||
|
|
||||||
|
# define PRIVATE (__privateinitializer__.p)
|
||||||
|
# define PRIVATEWB __privateinitializer__.p
|
||||||
|
|
||||||
|
#endif // DOXYGEN
|
||||||
|
|
||||||
|
#define NO_COPY_CLASS(name) \
|
||||||
|
name(const name &) = delete; \
|
||||||
|
name & operator=(const name &) = delete;
|
||||||
|
|
||||||
|
|
||||||
|
#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__)
|
||||||
|
|
||||||
|
|
||||||
|
#define STATIC_INITIALIZER_BEGIN \
|
||||||
|
class { \
|
||||||
|
class _Initializer_ { \
|
||||||
|
public: \
|
||||||
|
_Initializer_() {
|
||||||
|
#define STATIC_INITIALIZER_END \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
_initializer_; \
|
||||||
|
} \
|
||||||
|
_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мс.
|
||||||
|
#ifndef PIP_MIN_MSLEEP
|
||||||
|
# ifndef MICRO_PIP
|
||||||
|
# define PIP_MIN_MSLEEP 1.
|
||||||
|
# else
|
||||||
|
# define PIP_MIN_MSLEEP 10.
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//! \~\brief
|
||||||
|
//! \~english Macro used for infinite loop
|
||||||
|
//! \~russian Макрос для бесконечного цикла
|
||||||
|
#define FOREVER for (;;)
|
||||||
|
|
||||||
|
//! \~\brief
|
||||||
|
//! \~english Macro used for infinite wait
|
||||||
|
//! \~russian Макрос для бесконечного ожидания
|
||||||
|
#define FOREVER_WAIT FOREVER piMinSleep();
|
||||||
|
|
||||||
|
//! \~\brief
|
||||||
|
//! \~english Macro used for infinite wait
|
||||||
|
//! \~russian Макрос для бесконечного ожидания
|
||||||
|
#define WAIT_FOREVER FOREVER piMinSleep();
|
||||||
|
|
||||||
|
|
||||||
|
#endif // PIBASE_MACROS_H
|
||||||
5
main.cpp
5
main.cpp
@@ -67,7 +67,10 @@ int main(int argc, char * argv[]) {
|
|||||||
// piCout << e.toString();
|
// piCout << e.toString();
|
||||||
// piCout << PIVariantTypes::Enum::fromString(e.toString()).toString();
|
// piCout << PIVariantTypes::Enum::fromString(e.toString()).toString();
|
||||||
// piCout << PIVariantTypes::Enum::fromString("\"MyEnum\"(\"Null\":10105 \"Sec\":20 \"Fir\":100) 20").toString();
|
// piCout << PIVariantTypes::Enum::fromString("\"MyEnum\"(\"Null\":10105 \"Sec\":20 \"Fir\":100) 20").toString();
|
||||||
|
{
|
||||||
|
PIScopeExitCall ec([]() { piCout << "exit"; });
|
||||||
|
ec.cancel();
|
||||||
|
}
|
||||||
piCout << PIVariantTypes::Enum::fromString("(\"DeformationWithTemperature2\":1\n;Sigma1:2\n;Tau:3)").toString();
|
piCout << PIVariantTypes::Enum::fromString("(\"DeformationWithTemperature2\":1\n;Sigma1:2\n;Tau:3)").toString();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user