PIP 5.5.3
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
 Наследуйтесь от этого класса чтобы сделать свой класс нетривиально копируемым. Подробнее...
 

Функции

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 , typename... Args>
constexpr T piMin (const T &f, const T &s, const Args &... args)
 Шаблонный метод, возвращающий минимум из нескольких значений Подробнее...
 
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 >
piChangedEndian (const T &v)
 Шаблонный метод, возвращающий значение "v" с измененным порядком байт
 
uint piHashData (const uchar *data, uint len, uint seed=0)
 Хэш-функция общего назначения, по алгоритму murmur3/32.
 
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" если он не нулевой и устанавливает его в ноль. Возвращает было ли удаление.
 

Переменные

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
#define piCout
Макрос для условного (piDebug) вывода в PICout(StdOut)
Definition: picout.h:35

◆ 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 >
constexpr 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 >
constexpr 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 >
constexpr 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 >
constexpr 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>
constexpr 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>
constexpr 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 >
constexpr 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"

Пример: