a8/a8/sysutils.h
aozhiwei a7fb25b2f7 1
2020-11-25 10:16:09 +08:00

100 lines
2.6 KiB
C++

#ifndef A8_SYSUTILS_H
#define A8_SYSUTILS_H
namespace a8
{
a8::tick_t XGetTickCount();
long long XGetNanoSeconds();
long long GetMilliSecond();
template <class T>
inline int ArraySize(T& array)
{
return (sizeof(array) / sizeof(array[0]));
}
int HashString(const std::string& str);
template <typename T>
T Get(std::vector<T> &vector_t, unsigned int idx, const T& defval)
{
if(idx < vector_t.size()){
return vector_t[idx];
}else{
return defval;
}
}
a8::XValue Get(std::map<std::string, a8::XValue> &map, const char* key, const char* defval=nullptr);
template <typename T>
T& FastAppend(std::vector<T>& t)
{
t.emplace_back();
return t.back();
}
template <typename T>
T& FastAppend(std::list<T>& t)
{
t.emplace_back();
return t.back();
}
template <typename T>
const T& Clamp(const T& v, const T& lo, const T& hi)
{
return v < hi ? (v > lo ? v : lo) : hi;
}
template <typename T>
float LengthSqr(const T& v)
{
return v.x * v.x + v.y * v.y;
}
template <typename T>
void SetToVector(std::set<T>& set_v, std::vector<T>& vector_v)
{
vector_v.reserve(set_v.size());
for (auto& v : set_v) {
vector_v.push_back(v);
}
}
int RandEx(int min, int max);
int GetRangeValue(int src_value, int min, int max);
void SetBitFlag(int& flag_bits, int bit);
void UnSetBitFlag(int& flag_bits, int bit);
bool HasBitFlag(const int& flag_bits, int bit);
void SetBitFlag(long long& flag_bits, int bit);
void UnSetBitFlag(long long& flag_bits, int bit);
bool HasBitFlag(const long long& flag_bits, int bit);
void XPrintf(const char* fmt, std::initializer_list<a8::XValue> args);
bool MkDir(const std::string& path);
void ForceCreateDir(const std::string& path);
std::string GetIpAddress(unsigned long ip_saddr);
std::string FormatDateTime(time_t time_val);
std::string TimestampToDateTime(time_t time_val);
std::string TimestampToDate(time_t time_val);
time_t GetDaySeconds(time_t time_val, int incdays = 0);
time_t GetMondaySeconds(time_t time_val);
time_t BetweenDays(time_t time_val1, time_t time_val2);
time_t GetDateTimeSeconds(const char* datetime_str);
time_t GetTimeDaySeconds(const char* time_str);
long long MakeInt64(int low32, int high32);
int Low32(long long int64_val);
int High32(long long int64_val);
int MkRgb(int red, int green, int blue);
float RandAngle();
void ClearSendQueue(a8::SendQueueNode* node);
}
#endif