![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/thread-self/root/usr/include/boost/hana/fwd/concept/ |
Upload File : |
/*! @file Forward declares `boost::hana::Hashable`. @copyright Louis Dionne 2016 @copyright Jason Rice 2016 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_HANA_FWD_CONCEPT_HASHABLE_HPP #define BOOST_HANA_FWD_CONCEPT_HASHABLE_HPP #include <boost/hana/config.hpp> BOOST_HANA_NAMESPACE_BEGIN //! @ingroup group-concepts //! @defgroup group-Hashable Hashable //! The `Hashable` concept represents objects that can be normalized to //! a type-level hash. //! //! In day to day programming, hashes are very important as a way to //! efficiently lookup objects in maps. While the implementation of //! maps is very different, the same idea of using hashes for efficient //! lookup applies in metaprogramming. The `Hashable` concept represents //! objects that can be summarized (possibly with loss of information) to //! a type, in a way suitable for use in hash-based data structures. Of //! course, in order for a hash to be well-behaved, it must obey some laws //! that are explained below. //! //! //! Minimal complete definition //! --------------------------- //! `hash`, satisfying the laws below //! //! //! Laws //! ---- //! First, `hana::hash` must return a `hana::type`. Furthermore, for any //! two `Hashable` objects `x` and `y`, it must be the case that //! @code //! x == y implies hash(x) == hash(y) //! @endcode //! //! where `==` denotes `hana::equal`. In other words, any two objects that //! compare equal (with `hana::equal`) must also have the same hash. //! However, the reverse is not true, and two different objects may have //! the same hash. This situation of two different objects having the same //! hash is called a _collision_. //! //! //! Concrete models //! --------------- //! `hana::integral_constant`, `hana::type`, `hana::string` //! //! //! Free model for `IntegralConstant`s //! ---------------------------------- //! Any `IntegralConstant` is `Hashable`, by normalizing its value to a //! `hana::integral_constant`. The type of the value held in the normalized //! `integral_constant` is `unsigned long long` for unsigned integral //! types, and `signed long long` for signed integral types. template <typename T> struct Hashable; BOOST_HANA_NAMESPACE_END #endif // !BOOST_HANA_FWD_CONCEPT_HASHABLE_HPP