Better cmake build support with presets and clangd setup
Works well with Eclipse CDT-LSP (and all client projects)
Misc. math function fixes
Misc. API renames, i.e. free enum types to be lower-case with
_t ending.
Classes may use CamelCase
TODO: Code test coverage test
1.2.0
Last C++17 release, moving to C++20 as minimum requirement because
Moving metaprogramming to C++20 concepts and constrains
SFINAE and its utilization in type_traits
for C++ metaprogramming are great
C++20 constaints add an easier to read and code alternative using
the same idea
C++20 concepts declare a set of C++20 constrains and can be reused,
guarantees of same concept
C++ Named Requirements are defined as concepts next to
type traits counterpart
Hence moving step by step to C++20 concepts helps with
maintainability
Lack of C++17 constexpr completeness in the
STL (e.g. std::string)
Used compiler gcc and clang have matured
enough for C++20 in 2024
Added
jau::os Operation system support (OS and user
information complementing jau::cpu, dynamic library
handling, ..)
jau::math (mostly linear algebra for graphics etc)
jau::mp (BigInt) multi-precision for cryptograpy
etc
Constant time (CT) functionality for cryptography etc
Misc jau::fs fixes (visitor,
dir_item)
Fixes
clang-16 toolchain and gcc 12.2 fixes using C++20
1.1.1
Fixes
jau::io::ByteInStream_[URL|Feed] utilize blocking
read-operations w/o knowledge of content-size until producer (curl
consumer, manual feeder) signals EOS, see ringbuffer changes.
Features
jau::ringbuffer: Add 'End of Stream' (EOS) concept to
unblock all read-operations from this point onwards and unblocking a
potentially currently blocked reader thread.
1.1.0
Fixes
JNI:
Java_org_jau_sys_Clock_get[Monotonic|WallClock]TimeImpl():
Avoid GetPrimitiveArrayCritical(), which occasionally hangs on system
call ::clock_gettime()
JNI: Consolidate static and dynamic OnLoad for
jaulib_jni_jni, static variant also requires to cache the
JavaVM ref
API Change
jau::ringbuffer: Add nodiscard attribute
for put, get, peek and waitFor
methods; Add overloads w/ result param 'timeout_occured' for all
blocking methods.
jau::io::ByteInStream_Feed::write() returns boolean
denoting success w/ nodiscard attribute, failure due to
timeout etc causing !good()
jau::io::ByteInStream*: Remove redundant
end_of_data(), use !good() instead.
Misc
jau::io::ByteInStream_Feed::write(): Added explicit
timeout value write method.
jau::io::ByteInStream_[URL|Feed]: Consider
timeout_occured in ringbuffer operation and check
good() in available() upfront
1.0.1
C++20 clean
Fix certain C++17 and C++20 compiler and clang-tidy warnings
1.0.0
First stable release
Added and passed clang-tidy diagnostics
Fixed multiple issues revealed by review
fraction_type divison by zero
explicitly abort on heap alloc failure, maintaining noexcept
performance and API cleansiness
Added IDE vscode (vscodium) multi root-workspace config
ByteInStream_{SecMemor, File},
ByteOutStream_File: Set iostate::eofbit at
close(), ensure ending potential loops
FileStats (java): Expose ctor using DirItem for efficiency
Add [[nodiscard]] to Byte{In,Out}Stream read(), peek(),
write() interface and all specializations, refine single byte API.
Add ByteOutStream and ByteOutStream_File
POSIX 'fd' implementation
io_util/byte_stream: Decouple from Botan,
add iostate and new Byte*Stream* super
iostate_func class for std::basic_ios's
iostate functionality
Add jau::io::read_stream() with double-buffered reading
to ensure last consumer_fn() call gets
is_final set if next buffer has eof() w/ zero
bytes
jau::io::ByteInStream_File: Replace
std::ifstream for file-descriptor (fd) POSIX layer to
support dirfd and plain fd operations
jau::fs::file_stats: Support new fmode_t
types sock, blk, chr and fifo, move fd from type -> attribute,
support sole file_stats(fd) ctor,
Add jau::fs::traverse_options::lexicographical_order as
required when computing an order dependent outcome like a hash
value
Add jau::fs::copy_option::into_existing_dir: Copy
source dir content into an already existing destination directory as if
destination directory did not exist
Add support for FreeBSD
Build clean and passes all tests.
Motivation: Have one more target system for POSIX and clang
validation.
Add support for (named) file descriptor:
jau::fs::file_stat and
jau::io::ByteInStream_File
sub-project pipe dreams for
cipherpack.
allow stream-processing via pipes (e.g. stdin/stdout)
Resolve OpenJDK segmentation fault running via qemu binfmt_misc
armhf or aarch64 on x86_64 host (cross build and test)
copy_options::ignore_symlink_errors: Also ignore
symlinks if not supported by target filesystem if not using
follow_symlinks (e.g.: vfat target)
fraction_timespec::to_iso8601_string(),
file_stats::to_string(): Drop use_space
parameter and print UTC ISO8601 w/ nanoseconds if not zero
Mapped jau::io::to_ByteInStream() to
org.jau.io.ByteInStreamUtil.to_ByteInStream()
Mapped jau::io::uri_tk to
org.jau.io.UriTk
Added java unit test TestByteStream01 covering above,
same as native test_bytestream01
Add jau::fs::mount_image() and umount()
mount_image() is currently only supported on
Linux
Enable testing on Linux via
-DTEST_WITH_SUDO=ON as it requires root
permissions.
Require to be called as user with capabilities
cap_sys_admin,cap_setuid,cap_setgid+eip or as root via
sudo
Uses fork() to have child-process seteuid(0) if not already for
loop-control and mount only.
Update Catch2 to v3.0.1, generated 2022-05-17 and adopt build and
tests
Use libcurl optional, enable via cmake option
-DUSE_LIBCURL=ON and remove dependencies if unused.
libunwind default is disabled (must be explicitly
enabled via -DUSE_LIBUNWIND=ON)
Fix issues with gcc 9.4 used on Ubuntu 20.04
file_util, namespace jau::fs
file_stats fully maps symbolic links via
link_target() and exposing stored
link_target_path()
dir_item reduces . and .. in
given path, drop taking splitted dirname and basename arguments
fmode_{bits->t}: Add full POSIX protection bit
support
file_stats: Use statx() or { lstat64() and stat64() },
maintain retrieved field_t, contain the linked-target as
std::shared_ptr<file_stats>.
Add dirname() and basename()
Add fmode_t POSIX protection bits to mkdir() and
touch()
Add traverse_event as path_visitor()
argument and traverse_options - both supporting visit();
remove() uses traverse_options
Add jau::fs::copy() with [recursive,
follow_symlinks, overwrite,
preserve_all, sync] copy_options,
using visit()
Move JavaVM Group to namespace jau::jni
Security
ringbuffer<T>: Add clear() argument bool
zeromem=false, allowing to explicitly zero memory if used w/o
sec_mem
ByteInStream_URL, ByteInStream_Feed: Zero
ringbuffer at close()/dtor() to be on par with
ByteInStream_SecMemory and ByteInStream_File +
secure_vector<T> usage.
Add secure_string typedef along with
secure_vector using ::explicit_bzero()jau::callocator_sec<T>
Add jau::io::uri_tk to Group IOUtils
0.13.0
string_util.hpp: Add jau::to_string()
support for std::string and std::string_view
as well as for std::vector<T> lists
Add namespace jau::io::uri_tk, limited URI scheme
functionality to query whether implementation may handle the protocol.
Query libcurl supported protocols at runtime
Test for local file protocol
Test whether protocol in given uri is supported by
libcurl
jau::io::read_url_stream(), sync and async, return
immediately if protocol in given url is not supportet
async variant returns
std::unique_ptr<std::thread>, where a nullptr is used
for no support
jau::io::ByteInStream_File recognizes the local file
protocol and cuts off file:// is used.
Fix: Recognition of a non-existing path, unaccessbile path or
non-file case properly
jau::io::ByteInStream_URL recognizes a non supported
protocol via async jau::io::read_url_stream().
Add sleep_for(), sleep_until() and wait_for() & wait_until()
using fraction, fraction_timespec, as well as choice over clock
type.
Introduce new types: fraction, fraction_timespec; its constants
& literals as well adoption in latch, ringbuffer, service_runner and
simple_timer.
int_math.hpp: Add Integer overflow aware arithmetic, use Integer
Overflow Builtins if available (GCC + Clang)
Refine sign(), invert_sign(), abs() and digits10() template funcs:
Better type and signed/unsigned variant for invert_sign() and abs()
Add stdint literals in namespace jau::int_literals,
e.g. 3_i64 for (int64_t)3 for all stdint
signed and unsigned 8-64 bit wide types
Always add libatomic (will be required for new fraction)
0.8.6
Enhance service_runner and fix
simple_timer, i.e. end waiting if stopped
Disable libunwind on
armhf/arm32 for stability, see
USE_LIBUNWIND cmake variable above
OpenJDK 17 compatible w/o warnings, use if available via build
scripts.
0.8.0
Enhance service_runner: fix using
service_shutdown_timeout_ms(), add join(),
remove service_end_post_notify (leak),
Add simple_timer: A simple timer for timeout and
interval applications, using one dedicated service_runner
thread per instance.
Fix EUI48[Sub] ctor with byte-ptr: Don't swap if given
byte_order == endian::native, we store in native order
uint[128,192,256]_t: Add ctor with given byte array in
native byte order, useful for const initialization
SIGSEGV workaround in jau::get_backtrace(..) of
libunwind [1.3 - 1.6.2]'s unw_step(..) using g++ 10.2.1
aarch64: Disable Optimization
0.7.12
git version info: Added post-tag: VERSION_COMMITS and
VERSION_SHA1_SHORT. VERSION_LONG reflects
post-tag and dirty. Added mapping to project version var-names.