blob: 3c483ca75e00a6524025ed8901424e475dd06ec5 [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0
// Copyright Apache Software Foundation 2019
/** @file
Additional handy utilities for @c string_view and hence also @c TextView.
*/
#include "swoc/string_view_util.h"
int
memcmp(std::string_view const &lhs, std::string_view const &rhs) {
int zret = 0;
size_t n = rhs.size();
// Seems a bit ugly but size comparisons must be done anyway to get the memcmp args.
if (lhs.size() < rhs.size()) {
zret = 1;
n = lhs.size();
} else if (lhs.size() > rhs.size()) {
zret = -1;
} else if (lhs.data() == rhs.data()) { // same memory, obviously equal.
return 0;
}
int r = ::memcmp(lhs.data(), rhs.data(), n);
return r ? r : zret;
}
int
strcasecmp(const std::string_view &lhs, const std::string_view &rhs) {
int zret = 0;
size_t n = rhs.size();
// Seems a bit ugly but size comparisons must be done anyway to get the @c strncasecmp args.
if (lhs.size() < rhs.size()) {
zret = 1;
n = lhs.size();
} else if (lhs.size() > rhs.size()) {
zret = -1;
} else if (lhs.data() == rhs.data()) { // the same memory, obviously equal.
return 0;
}
int r = ::strncasecmp(lhs.data(), rhs.data(), n);
return r ? r : zret;
}