// // Created by matrixai on 4/2/24. // #include "Utils.h" namespace ai_matrix { Utils *Utils::ins = nullptr; Utils::GarbageCollector Utils::gc; std::mutex Utils::mx; Utils *Utils::getins() { //双层锁,确保线程安全 if (ins == nullptr) { std::lock_guard guard(mx); //防止异常发生不能解锁 if (ins == nullptr) { ins = new Utils(); } } return ins; } float Utils::getMean(const std::vector &data) { int size = data.size(); if (size == 0) { return 0; } float sum = 0; for (int i = 0; i < size; i++) { sum += data[i]; } return sum / size; } float Utils::getMax(const std::vector &data) { int size = data.size(); if (size == 0) { return 0; } float max = 0; for (int i = 0; i < size; i++) { if (i == 0) { max = data[i]; } else if (data[i] > max) { max = data[i]; } } return max; } float Utils::getMin(const std::vector &data) { int size = data.size(); if (size == 0) { return 0; } float min = 0; for (int i = 0; i < size; i++) { if (i == 0) { min = data[i]; } else if (data[i] < min) { min = data[i]; } } return min; } float Utils::getMedian(const std::vector &data) { if (data.size() < 2) { return 0; } std::vector data_tmp; int n = data.size(); for (int i = 0; i < n; i++) { data_tmp.push_back(data[i]); } std::sort(data_tmp.begin(), data_tmp.end(), std::less()); if (n % 2 == 0) { return (data_tmp[n / 2] + data_tmp[n / 2 - 1]) / 2; } else { return data_tmp[(n - 1) / 2]; } } bool Utils::contains_vec(const std::vector &vec, std::string x) { return count(vec.begin(), vec.end(), x) > 0; } // /** // * 读取json格式文件内容 // * inParam : std::string &strFilePath :文件路径 // * outParam: Json::Value &jvFileInfo :json格式内容 // * return : true/false // */ // bool Utils::ReadJsonInfo(Json::Value &jvFileInfo, std::string &strFilePath) // { // std::ifstream ifs(strFilePath.c_str()); // if (!ifs.is_open()) // { //// LogWarn << "txt:" << strFilePath << " open fail"; // return false; // } // // std::string strContent; // getline(ifs, strContent); // ifs.close(); // // Json::CharReaderBuilder jsrBuilder; // std::shared_ptr reader(jsrBuilder.newCharReader()); // JSONCPP_STRING errs; // if (!reader->parse(strContent.data(), strContent.data() + strContent.size(), &jvFileInfo, &errs)) // { //// LogWarn << "json parse fail content:" << strContent; // return false; // } // return true; // } // // /** // * json格式内容写入文件 // * inParam : Json::Value &jvFileInfo :json格式内容 // : std::string &strFilePath :文件路径 // * outParam: N/A // * return : true/false // */ // bool Utils::WriteJsonInfo(Json::Value &jvFileInfo, std::string &strFilePath) // { // Json::StreamWriterBuilder jswBuilder; // // 紧密型存储 // jswBuilder["indentation"] = ""; // std::string strFrameInfo = Json::writeString(jswBuilder, jvFileInfo); // // std::ofstream ofs(strFilePath.c_str()); // if (!ofs.is_open()) // { // LogWarn << "txt:" << strFilePath << " open fail"; // return false; // } // ofs.write(strFrameInfo.c_str(), strFrameInfo.length()); // ofs.close(); // return true; // } }