diff --git a/src/strings.bif b/src/strings.bif index d9728bb938..cc239c0075 100644 --- a/src/strings.bif +++ b/src/strings.bif @@ -1251,7 +1251,7 @@ function hexdump%(data_str: string%) : string function reverse%(str: string%) : string %{ string s = str->ToStdString(); - reverse(s.begin(), s.end()); + std::ranges::reverse(s); return zeek::make_intrusive(s.length(), (const char*)s.c_str()); %} @@ -1308,8 +1308,8 @@ static int64_t do_find_str(zeek::StringVal* str, zeek::StringVal* sub, int64_t s if ( ! case_sensitive ) { - transform(s.begin(), s.end(), s.begin(), ::tolower); - transform(sb.begin(), sb.end(), sb.begin(), ::tolower); + std::ranges::transform(s, s.begin(), ::tolower); + std::ranges::transform(sb, sb.begin(), ::tolower); } if ( rfind ) diff --git a/src/telemetry/telemetry_functions.bif b/src/telemetry/telemetry_functions.bif index 8672e864bb..95bbd9331a 100644 --- a/src/telemetry/telemetry_functions.bif +++ b/src/telemetry/telemetry_functions.bif @@ -73,7 +73,7 @@ bool labels_valid(std::span labels, return std::find(keys.begin(), keys.end(), x.first) != keys.end(); }; return labels.size() == label_names.size() - && std::all_of(labels.begin(), labels.end(), key_in_label_names); + && std::ranges::all_of(labels, key_in_label_names); } template diff --git a/src/zeek.bif b/src/zeek.bif index a70d5f11f1..0127105b14 100644 --- a/src/zeek.bif +++ b/src/zeek.bif @@ -17,6 +17,7 @@ #include #include #include +#include #include "zeek/digest.h" #include "zeek/Reporter.h" @@ -4222,12 +4223,13 @@ function blocking_lookup_hostname%(host: string%) : addr_set ## .. zeek:see:: haversine_distance_ip function haversine_distance%(lat1: double, long1: double, lat2: double, long2: double%): double %{ - const double PI = 3.14159; - const double RADIUS = 3958.8; // Earth's radius in miles. + constexpr double RADIUS = 3958.7615; // Mean radius of the Earth in miles. + constexpr double PI_360 = std::numbers::pi / 360.0; + constexpr double PI_180 = std::numbers::pi / 180.0; - double s1 = sin((lat2 - lat1) * PI/360); - double s2 = sin((long2 - long1) * PI/360); - double a = s1 * s1 + cos(lat1 * PI/180) * cos(lat2 * PI/180) * s2 * s2; + double s1 = pow(sin((lat2 - lat1) * PI_360), 2); + double s2 = pow(sin((long2 - long1) * PI_360), 2); + double a = s1 + (cos(lat1 * PI_180) * cos(lat2 * PI_180) * s2); double distance = 2 * RADIUS * asin(sqrt(a)); return zeek::make_intrusive(distance); diff --git a/testing/btest/Baseline/bifs.haversine_distance/out b/testing/btest/Baseline/bifs.haversine_distance/out index 280113f884..93382d43cc 100644 --- a/testing/btest/Baseline/bifs.haversine_distance/out +++ b/testing/btest/Baseline/bifs.haversine_distance/out @@ -1,8 +1,8 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. -5.8481e+03 -5.8481e+03 +5.8480e+03 +5.8480e+03 1.9193e-02 -1.5136e-02 -9.2419e-01 +1.5124e-02 +9.0762e-01 1.2437e+04 1.2437e+04 diff --git a/testing/btest/bifs/haversine_distance.zeek b/testing/btest/bifs/haversine_distance.zeek index b1429b13c1..97e38fbc6e 100644 --- a/testing/btest/bifs/haversine_distance.zeek +++ b/testing/btest/bifs/haversine_distance.zeek @@ -18,7 +18,7 @@ event zeek_init() test(.0001388889, 0, -.0001388889, 0); # Distance of one second of longitude (crossing the prime meridian). - test(38, 0.000138999, 38, -0.000138999); + test(38, 0.000138889, 38, -0.000138889); # Distance of one minute of longitude (test extreme longitude values). test(38, 180, 38, -179.98333);