#pragma once #include #include #include #include #include #include #include #include #include void char_array_to_uchar(int8_t *in, uint8_t *out, int nsamples); void signed_soft_to_unsigned(int8_t *in, uint8_t *out, int nsamples); template ::value_type> T most_common(InputIt begin, InputIt end) { std::map counts; for (InputIt it = begin; it != end; ++it) { if (counts.find(*it) != counts.end()) ++counts[*it]; else counts[*it] = 1; } return std::max_element(counts.begin(), counts.end(), [](const std::pair &pair1, const std::pair &pair2) { return pair1.second < pair2.second; }) ->first; } template ::value_type> T average_common(InputIt begin, InputIt end) { T avg = 0; size_t count = 0; for (InputIt it = begin; it != end; ++it) { avg += *it; count++; } return avg / T(count); } template std::string to_string_with_precision(const T a_value, const int n = 6) { std::ostringstream out; out.precision(n); out << std::fixed << a_value; return out.str(); } template T swap_endian(T u) { union { T u; unsigned char u8[sizeof(T)]; } source, dest; source.u = u; for (size_t k = 0; k < sizeof(T); k++) dest.u8[k] = source.u8[sizeof(T) - k - 1]; return dest.u; } template int percentile(T *array, int size, float percentile) { float number_percent = (size + 1) * percentile / 100.0f; if (number_percent == 1) return array[0]; else if (number_percent == size) return array[size - 1]; else return array[(int)number_percent - 1] + (number_percent - (int)number_percent) * (array[(int)number_percent] - array[(int)number_percent - 1]); } template double avg_overflowless(std::vector const &v) { T n = 0; double mean = 0.0; for (auto x : v) { double delta = x - mean; mean += delta / ++n; } return mean; } std::vector splitString(std::string input, char del); template inline bool getBit(T &data, int &bit) { return (data >> bit) & 1; } bool isStringPresent(std::string searched, std::string keyword); // Return filesize size_t getFilesize(std::string filepath); // Perform a HTTP Request on the provided URL and return the result as a string int perform_http_request(std::string url, std::string &result); std::string timestamp_to_string(double timestamp); inline std::vector double_buffer_to_float(double *ptr, int size) { std::vector ret; for (int i = 0; i < size; i++) ret.push_back(ptr[i]); return ret; }