PIP 6.1.0
Platform-Independent Primitives
Загрузка...
Поиск...
Не найдено
Файл pibase.h

Базовые типы и методы Подробнее...

#include "pibase_macros.h"
#include "pimemoryblock.h"
#include "pip_export.h"
#include <string.h>
#include <ArduinoSTL.h>
#include <atomic>
#include <cassert>
#include <cstddef>
#include <cstdio>
#include <functional>
#include <initializer_list>
#include <limits>

Классы

class  PIScopeExitCall
 Класс для выполнения функции при выходе из области видимости Подробнее...
struct  PINonTriviallyCopyable
 Наследуйтесь от этого класса чтобы сделать свой класс нетривиально копируемым. Подробнее...
struct  FunctionType< T >
 Шаблонная структура для извлечения типа функции из вызываемых объектов Подробнее...
struct  FunctionType< Ret(Class::*)(Args...) const >
 Специализация для указателей на члены класса Подробнее...

Функции

template<typename T>
void piSwap (T &f, T &s)
 Шаблонный метод для перестановки двух значений
template<typename T>
void piSwapBinary (T &f, T &s)
 Шаблонный метод для перестановки двух значений без использования "=".
bool piCompareBinary (const void *f, const void *s, size_t size)
 Метод для сравнения двух значений без использования "==" (по сырому содержимому).
template<typename T>
constexpr int piRound (const T &v)
 Шаблонный метод, возвращающий округленное значение
template<typename T>
constexpr int piFloor (const T &v)
 Шаблонный метод, возвращающий floor значение
template<typename T>
constexpr int piCeil (const T &v)
 Шаблонный метод, возвращающий ceil значение
template<typename T>
constexpr T piAbs (const T &v)
 Шаблонный метод, возвращающий модуль числового значения
template<typename T>
constexpr T piMin (const T &f, const T &s)
 Шаблонный метод, возвращающий минимум из двух значений
template<typename T, typename... Args>
constexpr T piMin (const T &f, const T &s, const Args &... args)
 Шаблонный метод, возвращающий минимум из нескольких значений
template<typename T>
constexpr T piMax (const T &f, const T &s)
 Шаблонный метод, возвращающий максимум из двух значений
template<typename T, typename... Args>
constexpr T piMax (const T &f, const T &s, const Args &... args)
 Шаблонный метод, возвращающий максимум из нескольких значений
template<typename T>
constexpr T piClamp (const T &v, const T &min, const T &max)
 Шаблонный метод, возвращающий ограниченное значение
template<typename T>
bool piCompare (const T &a, const T &b, const T &epsilon=std::numeric_limits< T >::epsilon())
 Метод для сравнения двух чисел с порогом
void piChangeEndianBinary (void *data, size_t size)
 Метод для смены порядка байт в блоке памяти ([1..N] -> [N..1]).
void piChangeEndianBinary (PIMemoryBlock mem_blk)
 Метод для смены порядка байт в блоке памяти ([1..N] -> [N..1]).
template<typename T>
void piChangeEndian (T &v)
 Шаблонный метод, меняющий порядок байт в переменной "v".
template<typename T>
T piChangedEndian (const T &v)
 Шаблонный метод, возвращающий значение "v" с измененным порядком байт
uint piHashData (const uchar *data, uint len, uint seed=0)
 Хэш-функция общего назначения, по алгоритму murmur3/32.
template<typename T>
uint piHash (const T &v)
 Хэш-функция общего назначения, возвращает 0 для неизвестных типов
template<>
uint piHash (const char &v)
 Специализация хэш-функции для типа char.
template<>
uint piHash (const uchar &v)
 Специализация хэш-функции для типа uchar.
template<>
uint piHash (const short &v)
 Специализация хэш-функции для типа short.
template<>
uint piHash (const ushort &v)
 Специализация хэш-функции для типа ushort.
template<>
uint piHash (const int &v)
 Специализация хэш-функции для типа int.
template<>
uint piHash (const uint &v)
 Специализация хэш-функции для типа uint.
template<>
uint piHash (const llong &v)
 Специализация хэш-функции для типа llong с использованием piHashData.
template<>
uint piHash (const ullong &v)
 Специализация хэш-функции для типа ullong с использованием piHashData.
template<>
uint piHash (const float &v)
 Специализация хэш-функции для типа float.
template<>
uint piHash (const double &v)
 Специализация хэш-функции для типа double с использованием piHashData.
template<>
uint piHash (const ldouble &v)
 Специализация хэш-функции для типа ldouble с использованием piHashData.
void piZeroMemory (void *ptr, size_t size)
 Зануляет "size" байт по адресу "ptr".
template<typename T>
void piZeroMemory (T &v)
 Зануляет память переменной "v".
template<typename T>
void piDeleteAll (const T &container)
 Вызывает delete на каждый элемент "container".
template<typename T>
void piDeleteAll (std::initializer_list< T > container)
 Вызывает delete на каждый элемент списка инициализации C++11.
template<typename T>
void piDeleteAllAndClear (T &container)
 Вызывает delete на каждый элемент "container" и очищает контейнер.
template<typename T>
bool piDeleteSafety (T *&pointer)
 Вызывает delete на "pointer" если он не нулевой и устанавливает его в ноль. Возвращает было ли удаление.
template<typename L>
FunctionType< decltype(&L::operator())>::Type toStdFunction (L const &func)
 Преобразует лямбду/функциональный объект в std::function.

Переменные

bool piDebug
 Глобальная переменная, включающая вывод в piCout, при старте true.
double piMountInfoRefreshIntervalMs
 Глобальная переменная минимального ожидания между реальным обновлением в методе PIInit::mountInfo(), по умолчанию 10000 мс

Подробное описание

Базовые типы и методы

Этот файл реализует первый слой после системы и объявляет несколько базовых полезных методов

Функции

◆ piSwap()

template<typename T>
void piSwap ( T & f,
T & s )
inline

Шаблонный метод для перестановки двух значений

Пример:

int v1 = 1, v2 = 2;
piCout << v1 << v2; // 1 2
piSwap<int>(v1, v2);
piCout << v1 << v2; // 2 1

◆ piSwapBinary()

template<typename T>
void piSwapBinary ( T & f,
T & s )
inline

Шаблонный метод для перестановки двух значений без использования "=".

Пример:

◆ piCompareBinary()

bool piCompareBinary ( const void * f,
const void * s,
size_t size )
inline

Метод для сравнения двух значений без использования "==" (по сырому содержимому).

Пример:

◆ piRound()

template<typename T>
int piRound ( const T & v)
inlineconstexpr

Шаблонный метод, возвращающий округленное значение

Округленное значение - это ближайшее целое число
Есть несколько макросов:

  • piRoundf для "float"
  • piRoundd для "double"

Пример:

piCout << piRoundf(0.6f) << piRoundd(0.2); // 1 0
piCout << piRoundf(-0.6f) << piRoundd(-0.2); // -1 0

◆ piFloor()

template<typename T>
int piFloor ( const T & v)
inlineconstexpr

Шаблонный метод, возвращающий floor значение

Floor значение - это наибольшее целое, не большее чем "v"
Есть несколько макросов:

  • piFloorf для "float"
  • piFloord для "double"

Пример:

piCout << piFloorf(0.6f) << piFloorf(0.2); // 0 0
piCout << piFloorf(-0.6f) << piFloorf(-0.2f); // -1 -1

◆ piCeil()

template<typename T>
int piCeil ( const T & v)
inlineconstexpr

Шаблонный метод, возвращающий ceil значение

Ceil значение - это наименьшее целое, не меньшее чем "v"
Есть несколько макросов:

  • piCeilf для "float"
  • piCeild для "double"

Пример:

piCout << piCeilf(0.6f) << piCeilf(0.2); // 1 1
piCout << piCeilf(-0.6f) << piCeilf(-0.2f); // 0 0

◆ piAbs()

template<typename T>
T piAbs ( const T & v)
inlineconstexpr

Шаблонный метод, возвращающий модуль числового значения

Модуль числового значения всегда >= 0
Есть несколько макросов:

  • piAbss для "short"
  • piAbsi для "int"
  • piAbsl для "long"
  • piAbsll для "llong"
  • piAbsf для "float"
  • piAbsd для "double"

Пример:

piCout << piAbsi(5) << piAbsi(-11); // 5 11
piCout << piAbsf(-0.6f) << piAbsf(-0.2f); // 0.6 0.2

◆ piMin()

template<typename T, typename... Args>
T piMin ( const T & f,
const T & s,
const Args &... args )
constexpr

Шаблонный метод, возвращающий минимум из нескольких значений

Есть несколько макросов:

  • piMins для "short"
  • piMini для "int"
  • piMinl для "long"
  • piMinll для "llong"
  • piMinf для "float"
  • piMind для "double"

Пример:

piCout << piMini(5, 1); // 1
piCout << piMinf(-0.6f, -0.2f); // -0.6

◆ piMax()

template<typename T, typename... Args>
T piMax ( const T & f,
const T & s,
const Args &... args )
constexpr

Шаблонный метод, возвращающий максимум из нескольких значений

Есть несколько макросов:

  • piMaxs для "short"
  • piMaxi для "int"
  • piMaxl для "long"
  • piMaxll для "llong"
  • piMaxf для "float"
  • piMaxd для "double"

Пример:

piCout << piMaxi(5, 1); // 5
piCout << piMaxf(-0.6f, -0.2f); // -0.2

◆ piClamp()

template<typename T>
T piClamp ( const T & v,
const T & min,
const T & max )
inlineconstexpr

Шаблонный метод, возвращающий ограниченное значение

Ограниченное значение - не больше чем "max" и не меньше чем "min" Есть несколько макросов:

  • piClamps для "short"
  • piClampi для "int"
  • piClampl для "long"
  • piClampll для "llong"
  • piClampf для "float"
  • piClampd для "double"

Пример:

piCout << piClampf(-5, -3, 2); // -3
piCout << piClampf(1, -3, 2); // 1
piCout << piClampf(5, -3, 2); // 2

◆ piCompare()

template<typename T>
bool piCompare ( const T & a,
const T & b,
const T & epsilon = std::numeric_limits<T>::epsilon() )
inline

Метод для сравнения двух чисел с порогом

Есть несколько макросов:

  • piComparef для "float"
  • piCompared для "double"

Пример:

◆ toStdFunction()

template<typename L>
FunctionType< decltype(&L::operator())>::Type toStdFunction ( L const & func)

Преобразует лямбду/функциональный объект в std::function.

Использует шаблон FunctionType для извлечения сигнатуры функции из вызываемого объекта