#include #include #include #include #define STAT_DATA_PATH "/users/dsc/stat_data" namespace data_handler { std::string get_data_path(std::string ruleId, int dim) { return std::string(STAT_DATA_PATH) + "/" + ruleId + "_" + std::to_string(dim); } std::string get_total_rs_path(std::string ruleId, int dim) { return get_data_path(ruleId, dim) + ".dat"; } size_t get_rs_count(std::string ruleId, int dim) { size_t rs_count = 0; for (const auto& entry : std::filesystem::directory_iterator(STAT_DATA_PATH)) { if (entry.path().string().find(ruleId + "_" + std::to_string(dim)) != std::string::npos) { rs_count++; } } return rs_count; } std::string get_this_rs_path(std::string ruleId, int dim) { return get_data_path(ruleId, dim) + ".1.dat"; } std::string get_prev_rs_path(std::string ruleId, int dim) { return get_data_path(ruleId, dim) + ".2.dat"; } bool remove_old_rs(std::string ruleId, int dim) { auto prev_fpath = get_prev_rs_path(ruleId, dim); if (std::filesystem::exists(prev_fpath)) { std::filesystem::remove(prev_fpath); return true; } return false; } bool move_this_rs_to_old(std::string ruleId, int dim) { auto this_fpath = get_this_rs_path(ruleId, dim); auto prev_fpath = get_prev_rs_path(ruleId, dim); if (std::filesystem::exists(this_fpath)) { std::filesystem::rename(this_fpath, prev_fpath); return true; } return false; } std::optional> get_rs( std::string ruleId, int dim, std::function path_func) { auto ps_path = path_func(ruleId, dim); if (std::filesystem::exists(ps_path)) { dlib::running_stats rs_tmp; std::ifstream ifs(ps_path, std::ios::binary); if (ifs.is_open()) { dlib::deserialize(rs_tmp, ifs); ifs.close(); ifs.clear(); return rs_tmp; } } return std::nullopt; } json get_running_stats_format(dlib::running_stats&& rs) { return json{{"平均数", rs.mean()}, {"方差", rs.variance()}, {"偏态系数", rs.skewness()}, {"超值峰度", rs.ex_kurtosis()}, {"最大值", rs.max()}, {"最小值", rs.min()}, {"总样本数", rs.current_n()}}; } bool make_sure_stat_data_exist() { std::filesystem::path stat_tool(std::string(STAT_DATA_PATH)); if (!std::filesystem::exists(stat_tool)) { std::filesystem::create_directory(stat_tool); } if (!std::filesystem::exists(stat_tool)) { return false; } return true; } } // namespace data_handler