Skip to content

Hawaii

Compare
Choose a tag to compare
@SolidWallOfCode SolidWallOfCode released this 11 Jun 18:03
· 70 commits to master since this release

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 to empty and inverted. Locally this is irrelevant but using empty 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 and upper_bound were changed to min, max respectively for consistency.
  • is_valid was changed in some cases to empty for consistency.
  • R-value reference in structured binding is no longer support for temporary iterators. E.g.
    if (auto && [ r, p ] = *space.find(addr) ; ! r.empty()) {
    
    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 class IPRangeView was created to support this style with minimal copying.