Skip to content

Version 2.2.2

Latest

Choose a tag to compare

@StormBytePP StormBytePP released this 28 Oct 01:22

[Summary]

StormByte Base is the C++26 foundation of the StormByte suite.

Every other module links this library.
This repository is not Buffer, Config, Crypto, Database, Logger, Multimedia, Network or System — those live in their own repos and depend on Base.

Public headers under StormByte/ cover exceptions, Expected, little-endian Serializable, strings, paths, UUID v4, bitmasks, clonable types, ThreadLock, Size, and StormByte::Type concepts.
StormByte::Safe is the owned surface that crosses a DLL without the caller's CRT: collections, wait, and Safe::Thread.

If you landed here from a release link and have not read the tree:

  • What this module is, how to build it, and short examples: README.md
  • Since 2.0.0 license changed: original source in this repository is dual-licensed, LGPL v3 or later or a commercial license from the copyright holder. The grant does not cover other StormByte modules or thirdparty/. LICENSE

Fixed

  • Safe::Vector fill assignment and fill growth retain an element passed by reference before clearing or reallocating its own storage.
  • Safe::String and Safe::WString preserve self-referencing views during assignment, append growth and shrink_to_fit. Previously assignment freed the source before copying it, and append could invalidate its own input during reallocation. Short overlapping assignments use overlap-safe copies.
  • Base64 and string tests retain temporary owners while comparing their values. The Linux secure-page test explicitly skips the kernel lock-count assertion under AddressSanitizer, which intercepts mlock/munlock without locking pages; the remaining secure-buffer tests still run.

Changed

  • Safe::Vector copies trivially copyable elements and matching contiguous ranges in bulk, and initializes trivial growth without per-element push_back bookkeeping. This accelerates Safe::Binary copies and buffered I/O without changing ownership, layout, zero initialization, or SecureBinary discard and page-lock hooks. Nontrivial elements, converting ranges and single-pass input iterators retain their element-wise behavior.

Added

  • Regression coverage for large byte copies, independent storage, self-aliased range assignment, zero/fill growth, empty ranges, volatile and single-pass sources, and nontrivial elements.
  • A shared-library boundary regression exchanges, copies, grows and destroys owned vectors and narrow/wide strings on both sides of a module boundary. On MSVC the fixture uses a static CRT to check that owned storage still belongs to Base rather than the module's CRT.