Hawaii
A consolidation release. There are a few backward incompatibilities but these are easily fixed. Fundamentally there was an issue in how temporaries for IPSpace
were handled when using tuple style support which were not possible to fix without breaking compatibility - correctness over convenience. There are many fixes to documentation comments and a number of additional convenience methods, along with as always more testing.
IPSpace
supports tuple style access to iterator values but internally this is now a structure because the tuple implementation could not be made to work correctly with strong optimization. This is compatible except in certain cases noted below.- Some of the
is_valid
methods methods for "container" classes were changed toempty
and inverted. Locally this is irrelevant but usingempty
to check for container validity is the common style for STL so this changes makes using the IP network support easier. - A new class
IPRangeView
which is a view to an IP address range. This is used to minimize copying when the actual stored data is family specific but external consumers want the generic wrapper. Previously this required a copy. The view class contains family specific pointers internally and forwards generic access to family specific access.
libswoc can now be built in github which means better checking for branches.
libswoc is now a Coverity covered project. The initial check against 1.5.0 yielded no problems although there were two false positives. The latter are complaints about calling stat
before unlink
and opendir
as if not doing that was safer. I explicitly disagree.
Compatibility notes:
lower_bound
andupper_bound
were changed tomin
,max
respectively for consistency.is_valid
was changed in some cases toempty
for consistency.- R-value reference in structured binding is no longer support for temporary iterators. E.g.
Although this mostly worked, in some cases it could create dangling references because the range was stored in the iterator. The range msut be a synthesized value because the internals store only family specific types. The fix is to use
if (auto && [ r, p ] = *space.find(addr) ; ! r.empty()) {
The new classif (auto [ r, p ] = *space.find(addr) ; ! r.empty()) {
IPRangeView
was created to support this style with minimal copying.