Files

65 lines
2.5 KiB
C++

#ifndef FELIX_THE_CAT_DIFFERENT_LIBRARY_INCLUDED_AKJGNKJABVKALJGLKAJGLAKJG
#define FELIX_THE_CAT_DIFFERENT_LIBRARY_INCLUDED_AKJGNKJABVKALJGLKAJGLAKJG
#include <pthread.h>
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
using namespace std;
template <class T>
string ToString(const T& a)
{
ostringstream oss;
oss.setf(ios::fixed | ios::showpoint);
oss.precision(10);
oss << a;
return oss.str();
}
ostream& operator<<(ostream &out, const pthread_mutex_t m);
void LockMutex(pthread_mutex_t &m);
void ReleaseMutex(pthread_mutex_t &m);
int Round(double v);
// конвертирует из CP866 (в котором часто девайсы шлют всякую фигню)
// в UTF-8 (в котором весь наш код), чтобы можно было сравнивать строки
// и не иметь в исходниках две кодировки
// src предполагается нуль-терминированным
void CP866ToUTF8(unsigned char *src, unsigned char *dest, int destlen);
// То же самое для CP1251
void CP1251ToUTF8(const unsigned char *src, unsigned char *dest, int destlen);
string CP1251ToUTF8(const string &src);
// распаковывает BCD-число. Сделано в виде функции, а не макроса, чтобы
// можно было подставлять в нее функции, изменяющие состояние параметров
int UnpackBCD(int a);
// аналогично, упаковывает BCD-число
int PackBCD(int a);
// проверяет, является ли a валидным BCD-байтом
bool CheckBCD(int a);
// получает количество миллисекунд с начала эпохи (иногда нужно для)
// всяких точных таймаутов при приеме/отправке
unsigned long long GetMilliseconds();
// заменяет в text все вхождения pattern на replacement
// аккуратно со случаем, когда replacement содержит pattern - может повиснуть (!)
string ReplaceAll(string text, string pattern, string replacement);
// конвертирует число в строку в заданной base
string IntToString(int a, int base = 10);
// поднимает до упора лимит на количество открытых дескрипторов
int RaiseFDLimit();
#endif