4.3.0


Freundlich's C++ toolkit 
fcppt::algorithm::index_of_enum_array
. fcppt::optional_deref
which returns the dereferenced contents of the optional iff it is not empty. This is often useful when optionals contain iterators or unique pointers. std::function
that cannot be null and has an explicit constructor. std::function
. Add a missing ;
for boost1.59
in test/io/read_write.cpp
.
CMake3.0
is now required. clang3.7
warnings when std::move
can be omitted from return
statements. fcppt::algorithm::set_difference
. reserve
optimization in fcppt::algorithm::map by either using end()  begin()
or size()
of the source range. noexcept
to move constructors and assignment operators of fcppt::container::raw_vector
, fcppt::container::tree::object and fcppt::container::grid::object. size
function to fcppt::container::grid::pos_ref_range. Wunusedlocaltypedef
in external headers. size
function to fcppt::enum_range
. fcppt::math::at_c
that accesses a container using an integral constant as index. noexcept
to the move constructor and assignment operator. fcppt::optional_assign
which assigns to an optional but returns the reference to the optional's content. fcppt::optional_from_pointer
. fcppt::optional_alternative
. SeedSeq
constructor to random number generators. nullptr
. fcppt::type_traits::function_pointer_to_reference
. noexcept
to the move constructor and assignment operator. fcppt::make_homogenous_pair
. size
function to fcppt::int_range. FcpptCMakeUtils
CMAKE_{RUNTIME,LIBRARY_ARCHIVE}_OUTPUT_DIRECTORY
instead of their deprecated versions. fcppt::algorithm::join
and fcppt::algorithm::join_move
have been merged. fcppt::algorithm::map_concat_move
have been merged. emplace
instead of insert
in fcppt::container::get_or_insert. fcppt::container::grid::pos_range
to fcppt::container::grid::pos_ref_range. fcppt/math/box/comparison.hpp
. fcpptmpl
fcppt::mpl::for_each
and fcppt::mpl::invoke_on
to use fcppt::tag to call its function. fcppt/strong_typedef_input.hpp
and fcppt/strong_typedef_output.hpp
from fcppt/strong_typedef.hpp
. explicit
. std::swap
includes to conform to C++11
. Wdeprecateddeclarations
in external headers. FCPPT_ASSERT_OPTIONAL_ERROR
which first asserts that an optional is set and then evaluates to its contents. fcppt::forward_optional_get
which can be used to forward the contents of an optional if the optional itself is an rvalue. fcppt::optional_combine
which either chooses one of two optionals or combines both. fcppt::maybe_multi
and fcppt::maybe_void_multi
which accept multiple optionals. std::foward
but works on two types. Removed pointer semantics from optional. See Design for a detailed explanation.
Also removed reset
and assignment of nonlifted values to optionals.
get
has been renamed to get_exn
. prepare_config
function is no longer needed and has been removed. Ignore VC++ warnings about implicitly deleted move ctors and assignment operators in external headers. This goes towards supporting VC++ again, but the 2015 preview still has issues with noexcept.
Added fcppt::algorithm::find_by_opt and fcppt::algorithm::find_by_exn
.
Added fcppt::optional_to_exception
.
Added element_type typedef to fcppt::optional
.
Changed fcppt::algorithm::array_fold_static and fcppt::algorithm::enum_array_fold_static to take function objects that are callable with one parameter instead of zero parameters. This also goes towards supporting VC++ again.
Require cast functions from fcppt.casts in fcppt::strong_typedef_construct_cast and fcppt::mpl::integral_cast
.
Removed fcppt::io::color which had a very questionable implementation.
Removed fcppt::algorithm::copy_n. Use std::copy_n instead.
Removed fcppt::math::is_rational which was unused.
Removed fcppt::number_multiplexer which was undocumented.
Removed fcppt::time::sleep. Use std::this_thread::sleep_for instead.
Fixed cmake3.1.1 warnings about quoting in if statements.
Fixed structure_cast functions in math to actually use their conversion functions instead of static_cast.
Int ranges where end < begin are now empty.
enable_ifs that checked for type constraints were replaced by static_asserts.
Added FCPPT_DONT_EXPORT option to cmake. This option is useful if modules are found via add_subdirectory.
Added FCPPT_CONFIG_CLANG_VERSION_AT_LEAST and FCPPT_CONFIG_GCC_VERSION_AT_LEAST.
Changed fcppt::algorithm::find_exn and fcppt::algorithm::find_if_exn to take the exception as a parameter.
Changed structure_cast functions of fcppt::math to require a cast function as template parameter.
Forward headers were added to vector/static.hpp, dim/static.hpp, matrix/static.hpp, sphere/circle.hpp and box/rect.hpp.
Removed array_hash which was a duplicate of fcppt::range_hash.
Removed fcppt::math::vector::slerp.
Removed fcppt::algorithm::exception and fcppt::algorithm::element_not_found.
Added missing ${} for cmake3.1 in fcppt_utils_handle_so_version.
Added const_iterator typedef to fcppt::container::tree::pre_order.
fcppt now uses C++11 which implies that nonconforming compilers are no longer supported.
Added fcppt.casts which includes casts to replace static_cast
.
Added fcppt::enum_max_value, fcppt::enum_size and fcppt::cast_to_enum.
Added fcppt::container::enum_array.
Added fcppt::enum_range.
Added fcppt::runtime_enum.
Added fcppt::algorithm::enum_array_fold and fcppt::algorithm::enum_array_fold_static.
Added fcppt::literal.
Added fcppt::reference_wrapper which supports incomplete types.
CMake
Allow to externally modify fcppt's .so version.
Added fcppt::algorithm::map_concat and fcppt::algorithm::map_concat_move.
Added fcppt::algorithm::array_push_back.
Added fcppt::algorithm::find_if_exn for ranges.
Added fcppt::algorithm::fold for ranges.
Added fcppt::algorithm::repeat.
Added fcppt::algorithm::join_move.
Added fcppt::algorithm::array_fold and fcppt::algorithm::array_fold_static.
Added fcppt::algorithm::array_init and fcppt::algorithm::array_init_move.
fcpptassign
Added fcppt::assign::make_container_opt.
fcppt::container::raw_vector is now movable.
Added initializer list constructor to fcppt::container::raw_vector.
Added fcppt::container::find_exn.
Added fcppt::container::find_opt.
Added fcppt::container::array_hash.
Added array constructor to fcppt::container::bitfield::object.
Added initializer list constructors to fcppt::container::bitfield::object.
Added hash to fcppt::container::bitfield::object.
Added range constructor for fcppt::container::grid::object.
fcppt::container::grid::object is now movable.
Added fcppt::container::grid::pos.
Added fcppt::container::grid::clamp_pos and fcppt::container::grid::clamp_signed_pos.
fcppt::container::tree::object is now movable.
Added fcppt::container::tree::map.
Added fcppt::filesystem::num_subpaths.
Added fcppt::filesystem::strip_prefix.
Added fcppt::filesystem::normalize.
Added fcppt::io::scoped_rdbuf.
Added FCPPT_LOG_DEFINE_OBJECT.
Added fcppt::log::activate_levels_recursive.
Added fcppt::log::deactivate_levels_recursive.
Added fcppt::log::context::transfer_to.
Added fcppt::log::new_sink.
Added fcppt::log::print_all_locations.
Math operations are asymmetric now (e.g. multiplying a vector of meters by a vector of seconds).
Added fcppt::math::ceil_div_signed.
Added hashing function to fcppt::math::vector::object, fcppt::math::dim::object and fcppt::math::matrix::object.
Added fcppt::math::bresenham and fcppt::math::bresenham_thick.
Added scalar addition, subtraction and modulus to fcppt::math::vector::object and fcppt::math::dim::object.
fcpptmpl
Generalized fcppt::mpl::invoke_on
by adding fcppt::mpl::runtime_index
.
fcppt::optional is now movable.
Added fcppt::optional_ref_compare.
Added fcppt::optional_string typedef.
Added operator< to fcppt::optional.
Added fcppt::optional_bind.
Added fcppt::optional_bind_construct.
Added fcppt::from_optional.
Added fcppt::maybe and fcppt::maybe_void.
Random has been improved to allow other types in distributions (e.g. strong typedefs).
Added fcppt::random::make_variate.
Added fcppt::random::distribution::parameters::make_uniform_indices.
Added constructor to fcppt::random::variate which takes the parameters of the distribution.
fcppt::signal::object is now movable.
fcppt::strong_typedef is now movable.
fcppt::variant::object is now movable.
Added fcppt::variant::compare.
Added operator< for fcppt::variant::object.
Added fcppt::range_hash.
Added fcppt::int_range that also works with strong typedefs.
General
Remove consts on return types that have move constructors.
Added override to all overriding functions.
fcppt::algorithm::map now also works with movable types.
Improved fcppt::algorithm::map by reserving the result's size, if possible.
Allow multi argument fcppt::algorithm::join.
fcpptassign
fcppt.assign is now move only. Use initializer lists for all other cases.
Moved most cast functions to the cast namespace.
Allow fcppt::container::grid::resize_preserve_init to be used with types without a default constructor.
fcppt::container::tree::object stores its children move efficiently by not using unique_ptr anymore.
fcppt::log::level_stream is now copyable.
fcppt.log headers have been split to conform to the include what you use style.
fcppt.log is now a distinct library.
Use template aliases for math types.
Changed fcppt::math::vector::fill and fcppt::math::dim::fill to take the vector or dim as template argument.
fcppt::signal::connection is now inline, making fcppt.signal headeronly.
Features made obsolete by C++11
Removed SAFE_BOOL which can be replaced by explicit conversion operators.
Removed fcppt::assign::make_array which can be replaced by initializer lists.
Removed fcppt::signal::connection_manager which can be replaced by fcppt::signal::connection_container.
Removed fcppt::scoped_ptr<T> which can be replaced by std::unique_ptr<T> const
.
Removed fcppt::make_auto_ptr.
Removed fcppt.alignment which is replaced by alignas and alignof.
Removed fcppt::container::array. Use std::array instead.
Removed fcppt::type_info which is replaced by std::type_index
.
Removed workarounds.hpp which applied to preC++11 compilers only.
Removed fcppt::container::ptr functions and fcppt::algorithm::ptr_container_ease and fcppt::algorithm::ptr_container_erase_if. Ptr containers should be replaced by containers of unique ptrs.
Others
Removed fcppt::variant::recursive. Recursive variants are inefficient.
Removed fcppt.chrono.asio. Asio now supports std::chrono durations and time points.
Removed dynamic math classes that we didn't have a usecase for.
Removed fcppt::algorithm::copy_if. fcppt::algorithm::map_optional can be used instead.
Removed fcppt::container::map which was incomplete and never documented.
Removed fcppt::log::global which was unused.
Removed FOREACH_ENUMERATOR. Use fcppt::make_enum_range instead.
Removed FCPPT_TRY_DYNAMIC_CAST. Use fcppt::cast::try_dynamic instead.
Removed fcppt::math::quaterion which was unused.
CMake
Fix cmake paths so that fcppt can be used via add_subdirectory.
Fixed linking to Boost found by testing on Fedora.
Fixed FcpptCMakeUtils to not set anything globally.
Fixed comparison of different math objects (e.g. a vector and a vector view).
Fixed a bug in fcppt::optional::operator=.
Fixed fcppt::variant::object::operator= when construction throws.
Expose cmake targets from the build directory and when installing. This should make it a lot easier to use fcppt from other cmake based projects. See Using fcppt
Some updates for VC++11, mostly warning fixes.
Some updates for gcc4.8 trunk, also mostly warning fixes.
Automatically set CMAKE_INSTALL_LIBDIR
which some distributions set to handle multilib.
Added fcppt::math::box::expand and fcppt::math::box::shrink
Added fcppt::algorithm::join to join two containers into a new one
Added typedefs for N
and M
template parameters for matrix
Added fcppt::assign::make_map as a convenience wrapper for fcppt::assign::make_container so that you don't have to call std::make_pair
Added fcppt::mpl::all_of
Added fcppt::math::step
Added fcppt::math::matrix::transform_point and fcppt::math::matrix::transform_direction to multiply a 4x4 matrix by a 3dimensinal point or direction vector, respectively.
Added fcppt::math::matrix::exponential_pade to calculate the exponential of a matrix using the Pade algorithm.
Added fcppt::math::matrix::logarithm to calculate the logarithm of a matrix.
Removed include_windows.hpp
from public includes
Removed fcppt.thread
. The purpose of fcppt.thread
was to provide sleeping with a steady clock and to call terminate on joinable threads upon destruction. Both issues have been fixed in Boost.Thread
as of boost1.52.0
Fixed a bug in fcppt::unique_ptr::reset
Fixed assigning of math views (like matrix's row view)
Reduced smart pointer include dependencies
Don't use pthread
if not necessary
Prefer newer boost versions over older ones. We also don't set Boost_ADDITIONAL_VERSIONS
anymore.
This release is mainly a bugfix release.
Some documentation fixes.
fcppt::algorithm::levenshtein and fcppt::algorithm::shortest_levenshtein now support boost.range and not only containers.
Added FCPPT_PP_CONST, FCPPT_PP_PURE and FCPPT_PP_WARN_UNUSED_RESULT.
Added missing template keywords for clang3.1
Added fcppt::math::interpolation::perlin_fifth_degree function (along with the corresponding functor) which implements Ken Perlin's noise interpolation function.
Added fcppt::container::bitfield::object::get and fcppt::container::bitfield::object::static_size for easy integration into other APIs.
Ignore Wextrasemi
in Boost headers for clang3.2 trunk
Fixed type problems in bitfield. The size type is now the same as the enum type. The difference type is its signed counterpart.
Enabled more warnings in clang if available, namely Wundef
, Wimplicitfallthrough
, Wunneededmemberfunction
, Wunusedmemberfunction
, Wconditionaluninitialized
, Wunreachablecode
.
Updates for doxygen1.8.1
Updates for boost1.50
Made fcppt Wunusedlocaltypedefs
proof.
Introduced new headers fcppt/config/external_begin.hpp
and fcppt/config/external_end.hpp
that are used around external includes and disable a lot of warnings. This way it was possible for us to enable many more warnings for fcppt, especially in VC++.
Removed convenience headers that included everything in a subsystem. They are not considered good style anyway.
Removed trailing whitespaces in the code.
Don't use constants with internal linkage anymore.
Parts of fcppt that require additional libraries to link to are now split into their own libraries, namely fcppt_filesystem
and fcppt_thread
.
Added a new assert framework
Added fcppt::null_ptr which can be used for null pointers to objects.
Added fcppt::algorithm::key_set
Added fcppt::algorithm::set_union
Added fcppt::algorithm::copy_if
Added fcppt::container::grid::iterator_position
Added fcppt::container::grid::is_square
Added support for explicit instantiations of template functions and classes.
Added fcppt::math::vector::mod
Added componentwise_equal functions to replace the removed implicit epsilon comparison.
Added fcppt::io::read_exn
The log library has been redesigned, see Changed functionality
Added fcppt::log::format::time_stamp
fcpptmpl
Added fcppt::mpl::contains_if
.
Added fcppt::mpl::integral_cast
.
Support optional references.
Added fcppt::dynamic_optional_cast, fcppt::static_optional_cast and fcppt::const_optional_cast to cast between optional references.
Added fcppt::type_traits::is_random_access_iterator, fcppt::type_traits::is_bidirectional_iterator, fcppt::type_traits::is_forward_iterator, fcppt::type_traits::is_input_iterator and fcppt::type_traits::is_output_iterator.
Added a free fcppt::variant::get function.
Added nonconst variant visitation using fcppt::ref
Added FCPPT_FOREACH_ENUMERATOR_START_END
Renamed every template named basic
to object
.
fcppt::sn_cast has been renamed to fcppt::safe_numeric_cast. Also, it has been changed to forbid any conversions that can lead to data loss.
fcppt::truncation_check_cast has been improved.
fcppt::container::bitfield::object's constructor is now explicit.
fcppt::endianness has been reworked. Most of the functions have been replaced by fcppt::endianness::convert, see Removed functionality
fcppt::filesystem now uses the boost types directly, because only boost filesystem v3
is supported now. Also, a lot of now unnecessary functions have been removed, see Removed functionality
fcppt::io::read now returns an optional.
Renamed fcppt::math::vector::signed_angle to fcppt::math::vector::signed_angle_between.
Renamed fcppt::math::next_pow_2 to fcppt::math::next_power_of_2.
Renamed fcppt::math::vector::signed_angle_cast to fcppt::math::vector::signed_angle_between_cast.
Renamed fcppt/math/log.hpp
to fcppt/math/log2.hpp
Split fcppt::math::box::stretch into fcppt::math::box::stretch_absolute and fcppt::math::box::stretch_relative
Redesigned the logger library that makes it possible to declare global loggers and enable and disable them at runtime easily.
Formatters are now functions instead of classes.
Renamed fcppt::log::parameters::all to fcppt::log::parameters::object.
The constructor of optionals is now explicit.
fcppt::random has been completely redesigned. Is is now a wrapper around boost.random
that forbids copying of generators and disables all default parameters.
The deleters are no longer templatetemplate parameters. Instead, they are normal template parameters now.
fcppt::io::cout, etc. are now functions to prevent global initialization problems.
Use the standard locale std::locale("")
for the converting string functions by default.
Improved the type safety of the constructors, which now use fcppt::safe_cast
Support references in strong typedefs.
Removed the default constructor.
Variants can no longer be empty. A default constructor is no longer provided.
Made fcppt::type_info constructor explicit.
fcppt::type_name now gets a std::type_info
instead of an fcppt::type_info.
Removed fcppt::utf8. It is not really implementable without OS support.
Removed fcppt::chrono, expect the asio glue code. boost.chrono
should be used.
Removed fcppt::auto_ptr typedef
Removed FCPPT_ASSERT and FCPPT_ASSERT_MESSAGE, which were replaced by the new assert framework
Removed FCPPT_STUB_FUNCTION
Removed fcppt::minmax_pair
Removed fcppt::endianness::copy_n_from_host, fcppt::endianness::copy_n_to_host, fcppt::endianness::copy_n_swapped and fcppt::endianness::copy_swapped, fcppt::endianness::from_big_endian, fcppt::endianness::from_host, fcppt::endianness::from_little_endian, fcppt::endianness::to_big_endian, fcppt::endianness::to_host and fcppt::endianness::to_little_endian.
Removed fcppt::filesystem::first_file, fcppt::filesystem::next_file and fcppt::filesystem::skip_directories.
Removed fcppt::filesystem::create_directories_recursive, fcppt::filesystem::create_directory, fcppt::filesystem::current_path, fcppt::filesystem::directory_iterator, fcppt::filesystem::exists, fcppt::filesystem::file_size, fcppt::filesystem::is_directory, fcppt::filesystem::is_regular, fcppt::filesystem::path, fcppt::filesystem::readlink, fcppt::filesystem::recursive_directory_iterator, fcppt::filesystem::remove and fcppt::filesystem::remove_filename
Removed fcppt::io::cifstream, fcppt::io::cofstream and fcppt::io::cfstream
Removed fcppt::math::almost_zero, fcppt;:math::compare, fcppt::math::machine_epsilon, fcppt::math::vector::is_null, fcppt::math::null and all other epsilon comparing functions. A general epsilon cannot be provided and the user must choose one. As a result of this, all comparison functions use ==
. It is made sure that they still emit warnings when using Wfloatequal
.
Removed fcppt::math::vector::to_angle, fcppt::math::vector::transform, fcppt::math::vector::unit_circle and fcppt::math::vector::place.
Removed fcppt::math::dim::quad and fcppt::math::dim::transform.
Removed FCPPT_MATH_INSTANTIATE_ARITHMETIC, fcppt::math::is_negative, fcppt::math::round_div_int, fcppt::math::quad, fcppt::math::inverse and fcppt::math::signum.
Removed fcppt::math::matrix::look_at
Removed broken overloads of fcppt::math::next_pow_2
fcppt::unique_ptr doesn't store its deleter anymore.
Removed fcppt::lexical_cast which was replaced by fcppt::extract_from_string and fcppt::insert_to_string
Removed the nonconst getter from fcppt::strong_typedef
Removed fcppt::variant::apply, use fcppt::variant::apply_unary, fcppt::variant::apply_binary or fcppt::variant::apply_ternary instead.
Fixed fcppt::mpl::index_of
to only allow types that are part of the sequence. This also fixes invalid uses of fcppt::variant::object::get
Fixed fcppt::variant::holds_type when recursive types are involved.
Don't overwrite Boost_ADDITIONAL_VERSIONS
in cmake, just append to it.
Fixed fcppt::algorithm::ptr_container_erase
Fixed the iterator category of fcppt::cyclic_iterator
Fixed static linking of fcppt
Made logging a lot less expensive
fcppt::variant::apply_unary now has linear complexity instead of quadratic complexity if the variant has been declared using an boost::mpl::list
math::matrix::is_matrix
trait. io::stream_to_string
that reads the whole content of a stream into a string. filesystem::create_directory_exn
and filesystem::create_directories_recursive_exn
. backtrace
which can print a stack trace for gcc compiled binaries. FcpptConfig.cmake
file so cmake can find an installed fcppt without FindFcppt.cmake
. container::array
. utf8::from_std_string
. FCPPT_PP_FUNCTION
for VC++. boost::array
to assign::array
. container::ptr::push_front_unique_ptr
. fvibisibility=hidden
is now optional, but still on by default (use FCPPT_ENABLE_VISIBILITY_HIDDEN
). mpl::append
. ${CMAKE_ROOT}/Modules
if ${CMAKE_INSTALL_PREFIX}
is a prefix of ${CMAKE_ROOT}
. utf8::convert
by utf8::from_fcppt_string
and utf8::to_fcppt_string
. boost::random
instead of tr1::random
. math::matrix::perspective
, math::matrix::orthogonal
and math::matrix::orthogonal_xy
. Every projection function is only meaningful if you know which canonical view volume you are using.FCPPT_DYN_LINK
behaviour in FindFcppt.cmake
. QUIETLY
and REQUIRED
in FindFcppt.cmake
. Boost_INCLUDE_DIRS
rather than Boost_INCLUDE_DIR
. pthread
for POSIX systems because we use boost.thread and asio. variant::object::get
or ::get_raw
is actually among its possible types. type_traits::is_iterable
, TYPE_TRAITS_GENERATE_HAS_MEMBER_FUNCTION
and TYPE_TRAITS_GENERATE_HAS_TYPE
now properly expose an mpl::bool
. chrono::common_type
has been restricted to fundamental types to avoid compiler errors with certain overloaded operators.