Releases: SolidWallOfCode/libswoc
C++mas Edition
Just in time for the holidays, a new release of libSWOC! This is a bit bigger than other recent point releases due to increased integration in ATS.
- Fixed possible overflow bug in
svtoi. - IP networking support
- Generalization of network category (multicast, private, etc.).
- Better endian handling.
- Added some missing / unimplemented methods.
- Errata: Auto text support for error codes in constructor and
notemethod. - MemArena - support
discardallocated spans.
Perpetual Change
Minor tweaks
Erratanow supports more constructors along with "AUTO" text generation based on the error code and severity.Errata::is_okfix (false positives if no messages but severity).- IPAddr - added
constto certain methods. - Improved clang formatting, more Traffic Server compliant.
- Added
letto meta utilities. This enables changing the value of variables in a scope.
Clanging gong
- IPSpace - fix compiler issue with
auto && [ r, p ] = *space.find(addr)type constructs. - Fix CMake hard coded install directory.
- Update clang format to ATS 10, update related tools, apply.
swoc::fileconstruct from string.- Better hashing for IP addresses.
IP man
Primarily a bug fix release.
- Port access from
IPEndpointwas too fragile, throwing an exception in situations it shouldn't. - When iterating over IPSpace instances with both IPv4 and IPv6 addresses, the latter would be badly formatted.
For convenience, IntrusiveDList was extended to support list operations (e.g., appending one list to another).
Leif Storm
Minor ATS compatibility release.
- Added
UnHexwrapper for BWF to convert hexadecimal strings to raw byte buffers (conversion the other way is already supported). - Better
std:error_codehandlin.
Spanning the Void
More minor tweaks for ATS support.
- IP - better handling of
sockaddrtypes. - MemSpan - better construction for stricter
constcorrectness. - MemSpan - handle literal strings better by excluding the terminal nul character by default.
- MemSpan - related to above, handle C arrays better.
- MemSpan - add
restrictmethod to optionally shorten the view (change to minimum of current size, restrict value). - BWF - remove direct support for C strings - depend on MemSpan instead.
The Home Front
A small release for better ATS compatibility as work on replacing legacy code with libswoc continues.
- More size based constructors for
TextViewto allowing using various integral types without casting. BufferWriter- Support passing an instance for printing. Internally this convers it to a view and prints that, but it's an idiom used in ATS.
- Generic memory changed to
MemSpan<const void>for less casting and amibiguity.
Mask of Zorro
Emergency release to fix a bug in the handling of certain edge cases between IP address classes and IPMask.
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.
IPSpacesupports 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_validmethods methods for "container" classes were changed toemptyand inverted. Locally this is irrelevant but usingemptyto check for container validity is the common style for STL so this changes makes using the IP network support easier. - A new class
IPRangeViewwhich 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_boundandupper_boundwere changed tomin,maxrespectively for consistency.is_validwas changed in some cases toemptyfor 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()) {IPRangeViewwas created to support this style with minimal copying.
Too much tuple
Primarily cleanup in IP network support.
- A bug in mask generation was fixed.
- libswoc can now be built on github.
- Internally
IPSpacenow uses a structure instead of a tuple. It was becoming increasing difficult to update the API as needed with a tuple.
One of the reasons for the change from a tuple is a compiler issue I was unable to track down where an IPSpace iterator would not iterate at run time in release mode. I suspect it was a bad optimization by the compiler with regard to reference values. Building release with symbols caused the problem to disappear making it almost impossible to usefully run a debugger on the problem. Of course everything worked in debug mode. Even adding some instrumentation code to detect the failure "fixed" the problem.