#pragma once #include #include #include #include #include #include #include void char_array_to_uchar(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; } std::vector splitString(std::string input, char del);