parent
388cd36ea3
commit
8593e137dd
@ -1,202 +0,0 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#include <atomic>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/wait.h>
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <sstream>
|
||||
|
||||
#include "../comm/Log.hpp"
|
||||
|
||||
namespace ns_util
|
||||
{
|
||||
// 公共编译路径
|
||||
const std::string defaultTempPath = "./temp/";
|
||||
|
||||
// 给文件名加路径和后缀
|
||||
class pathUtil
|
||||
{
|
||||
public:
|
||||
pathUtil()
|
||||
{
|
||||
}
|
||||
~pathUtil()
|
||||
{
|
||||
}
|
||||
|
||||
// 给要文件添加后缀,路径
|
||||
static std::string addSuffix(const std::string &file_name, const std::string &suffix)
|
||||
{
|
||||
return defaultTempPath + file_name + suffix;
|
||||
}
|
||||
|
||||
// 程序编译时的三个临时文件
|
||||
// 生成源文件
|
||||
static std::string src(const std::string &file_name)
|
||||
{
|
||||
return addSuffix(file_name, ".cpp");
|
||||
}
|
||||
|
||||
// 生成可执行文件
|
||||
static std::string exe(const std::string &file_name)
|
||||
{
|
||||
return addSuffix(file_name, ".exe");
|
||||
}
|
||||
|
||||
// 生成编译错误的完整文件名
|
||||
static std::string compilerError(const std::string &file_name)
|
||||
{
|
||||
return addSuffix(file_name, ".compile_error");
|
||||
}
|
||||
|
||||
// 程序运行时的三个临时文件
|
||||
// 生成标准输入的完整文件名(标准输入所在路径+后缀)(这个地方函数名必须大写,否则命名冲突)
|
||||
static std::string Stdin(const std::string &file_name)
|
||||
{
|
||||
return addSuffix(file_name, ".stdin");
|
||||
}
|
||||
// 生成标准输出的完整文件名(标准输出所在路径+后缀)
|
||||
static std::string Stdout(const std::string &file_name)
|
||||
{
|
||||
return addSuffix(file_name, ".stdout");
|
||||
}
|
||||
// 生成标准错误的完整文件名(标准错误所在路径+后缀)
|
||||
static std::string Stderr(const std::string &file_name)
|
||||
{
|
||||
return addSuffix(file_name, ".stderr");
|
||||
}
|
||||
};
|
||||
|
||||
// 判断文件是否存在
|
||||
class fileUtil
|
||||
{
|
||||
public:
|
||||
fileUtil()
|
||||
{
|
||||
}
|
||||
~fileUtil()
|
||||
{
|
||||
}
|
||||
static bool isFileExist(const std::string &file_name)
|
||||
{
|
||||
struct stat buffer;
|
||||
return (stat(file_name.c_str(), &buffer) == 0);
|
||||
}
|
||||
|
||||
// keep表示是否需要\n换行符
|
||||
static bool readFile(const std::string &file_name, std::string *input, bool keep = false)
|
||||
{
|
||||
input->clear();
|
||||
|
||||
std::ifstream in(file_name);
|
||||
if (!in.is_open())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string line;
|
||||
|
||||
while (getline(in, line))
|
||||
{
|
||||
*input += line;
|
||||
*input += (keep ? "\n" : "");
|
||||
}
|
||||
|
||||
in.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool writeFile(const std::string &file_name, const std::string &output)
|
||||
{
|
||||
std::ofstream out(file_name);
|
||||
if (!out.is_open())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
out.write(output.c_str(), output.size());
|
||||
out.close();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class TimeUtil
|
||||
{
|
||||
public:
|
||||
// 获取时间戳(秒级)
|
||||
static std::string GetTimeStamp()
|
||||
{
|
||||
struct timeval _time;
|
||||
gettimeofday(&_time, nullptr);
|
||||
return std::to_string(_time.tv_sec); // 累积到现在的秒数
|
||||
}
|
||||
// 获取时间戳(毫秒级)
|
||||
static std::string GetTimeMs()
|
||||
{
|
||||
struct timeval _time;
|
||||
gettimeofday(&_time, nullptr);
|
||||
return std::to_string(_time.tv_sec * 1000 + _time.tv_usec / 1000);
|
||||
}
|
||||
};
|
||||
|
||||
// 生成唯一的文件名
|
||||
class nameUtil
|
||||
{
|
||||
public:
|
||||
nameUtil()
|
||||
{
|
||||
}
|
||||
~nameUtil()
|
||||
{
|
||||
}
|
||||
static std::string getUniqueName()
|
||||
{
|
||||
static std::atomic_uint id(0); // atomic是C++提供的原子性计数器
|
||||
id++;
|
||||
std::string ms = TimeUtil::GetTimeMs();
|
||||
std::string uniq_id = to_string(id);
|
||||
return ms + "-" + uniq_id;
|
||||
// // 获取当前时间戳
|
||||
// auto now = std::chrono::system_clock::now();
|
||||
// auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
|
||||
|
||||
// // 使用随机数生成器
|
||||
// std::random_device rd; // 非确定性随机数生成器
|
||||
// std::mt19937 gen(rd()); // 使用Mersenne Twister算法的伪随机数生成器
|
||||
// std::uniform_int_distribution<> dis(1000, 9999);
|
||||
|
||||
// // 生成唯一的文件名
|
||||
// std::stringstream ss;
|
||||
// ss << millis;
|
||||
// ss << "_";
|
||||
// ss << dis(gen); // 添加一个随机数来进一步确保唯一性
|
||||
|
||||
// return ss.str();
|
||||
}
|
||||
};
|
||||
|
||||
// 切分字符串工具
|
||||
class splitUtil
|
||||
{
|
||||
public:
|
||||
splitUtil()
|
||||
{
|
||||
}
|
||||
~splitUtil()
|
||||
{
|
||||
}
|
||||
static void splitString(const std::string& src, const std::string& sep, std::vector<std::string>* tokens)
|
||||
{
|
||||
tokens->clear();
|
||||
boost::split(*tokens, src, boost::is_any_of(sep), boost::algorithm::token_compress_on);
|
||||
}
|
||||
};
|
||||
}
|
Loading…
Reference in new issue