Here is what needs to be done to get the library ready for a mini-review:
Common use case scenarios should be developed.
Example programs should be developed for the common use case scenarios.
Documentation should illuminate the differences between endian integer/float type and endian conversion approaches to the common use case scenarios, and provide guidelines for choosing the most appropriate approach in user's applications.
Done. See Choosing between endian types and endian conversion functions.
Conversion functions supplying results via return should be provided.
Done. See conversion docs.
Platform specific performance enhancements such as use of compiler intrinsics or relaxed alignment requirements should be supported.
Done. Compiler (Clang, GCC, VisualC++, etc.) intrinsics and built-in functions are used in the implementation where appropriate, as requested. See Built-in support for Intrinsics. See Timings for Example 2 to gauge the impact of intrinsics.
Endian integer (and floating) types should be implemented via the conversion functions. If that can't be done efficiently, consideration should be given to expanding the conversion function signatures to resolve the inefficiencies.
Done. For the endian types, the implementation uses the endian conversion functions, and thus the intrinsics, as requested.
Benchmarks that measure performance should be provided. It should be possible to compare platform specific performance enhancements against portable base implementations, and to compare endian integer approaches against endian conversion approaches for the common use case scenarios.
Done. See Timings for Example 2. The
endian/testdirectory also contains several addional benchmark and speed test programs.
Float (32-bits) and double (64-bits) should be supported. IEEE 754 is the primary use case.
Done. The endian types and endian conversion functions now support 32-bit (
float)and 64-bit(double)floating point, as requested.
Support for user defined types (UDTs) is desirable, and should be provided where there would be no conflict with the other concerns.
Done. See conversion requirements.
There is some concern that endian integer/float arithmetic operations might used inadvertently or inappropriately. The impact of adding an endian_buffer class without arithmetic operations should be investigated.
Done. The endian types have been decomposed into class template
endian_bufferand class templateendian_arithmetic. Classendian_bufferis a public base class forendian_arithmetic, and can also be used by users as a stand-alone class.
Stream insertion and extraction of the endian integer/float types should be documented and included in the test coverage.
Done. See Stream inserter and Stream extractor.
Binary I/O support that was investigated during development of the Endian library should be put up for mini-review for inclusion in the Boost I/O library.
Last revised: 05 December, 2014
© Copyright Beman Dawes, 2014
Distributed under the Boost Software License, Version 1.0. See www.boost.org/ LICENSE_1_0.txt