ELC in dev
ELC-lang
载入中...
搜索中...
未找到
elc::defs::base::hash_n::hash_t结构体 参考

Public 成员函数

constexpr hash_value_t operator() () const noexcept
 
hash_value_t operator() (const base_type_info_t &a) const noexcept
 
template<class T >
requires able<T>
constexpr auto operator() (const T &a) const noexcept(nothrow< T >)
 
template<class T >
constexpr hash_base_t get_hash_in_base_type (const T &a) const noexcept(nothrow< T >)
 
template<class T >
constexpr hash_value_t with_calculated_before (hash_value_t before, size_t before_size, const T *a, size_t size) const noexcept
 
constexpr hash_value_t repeat_times (hash_value_t value, size_t size) const noexcept
 
template<class T >
constexpr hash_value_t repeat_times (T &&value, size_t size) const noexcept
 
template<class T >
constexpr hash_value_t operator() (const T *a, size_t size) const noexcept(nothrow< const T >)
 
hash_value_t merge_array_hash_results (hash_value_t before, size_t before_size, hash_value_t after, size_t after_size) const noexcept
 
template<class T >
requires is_not_signal_value_for_array_like<T>
constexpr hash_value_t operator() (const array_like_view_t< T > &a) const noexcept(nothrow< T >)
 
template<class T >
requires is_not_signal_value_for_array_like<T>
constexpr hash_value_t with_calculated_before (hash_value_t before, size_t before_size, const array_like_view_t< T > &a) const noexcept
 

静态 Public 属性

template<class T >
static constexpr bool nothrow =nothrow_helper<T>()
 
template<class T >
static constexpr bool able =able_helper<T>()
 

详细描述

在文件 all_defs.cpp10878 行定义.

成员函数说明

◆ get_hash_in_base_type()

template<class T >
constexpr hash_base_t elc::defs::base::hash_n::hash_t::get_hash_in_base_type ( const T &  a) const
inlineconstexprnoexcept

Computes the hash of a value in the base type.

参数
aThe value to hash.
返回
The hash of the value in the base type.

在文件 all_defs.cpp10976 行定义.

10976 {
10977 return hash(a)._value;
10978 }
struct elc::defs::base::hash_n::hash_t hash
constexpr T down_cast(U a) noexcept
向下转型至

◆ merge_array_hash_results()

hash_value_t elc::defs::base::hash_n::hash_t::merge_array_hash_results ( hash_value_t  before,
size_t  before_size,
hash_value_t  after,
size_t  after_size 
) const
inlinenoexcept

合并两个数据段的hash结果,好似计算这两个数据段合并后的hash结果一般

参数
beforeThe first hash value.
before_sizeThe size of the first hash value.
afterThe second hash value.
after_sizeThe size of the second hash value.
返回
The merged hash value.

在文件 all_defs.cpp11071 行定义.

11073 {
11074 return{before._value^(rotl(after._value,before_size))};
11075 }
constexpr auto rotl(const T v, const auto R) noexcept
位操作:循环左移 不使用std版本而是自己写的原因:std版本右操作数只能是int而不能是size_t或别的,标准会傻逼
函数调用图:

◆ operator()() [1/5]

constexpr hash_value_t elc::defs::base::hash_n::hash_t::operator() ( ) const
inlineconstexprnoexcept

Computes the hash value of nothing.

返回
The hash value of nothing.

在文件 all_defs.cpp10929 行定义.

10929 {
10930 return{hash_base_t(nothing)};
10931 }
#define nothing
Definition all_defs.cpp:647

◆ operator()() [2/5]

template<class T >
requires is_not_signal_value_for_array_like<T>
constexpr hash_value_t elc::defs::base::hash_n::hash_t::operator() ( const array_like_view_t< T > &  a) const
inlineconstexprnoexcept

计算一个 array_like_view_t<T> 对象的哈希值。

参数
aarray_like_view_t<T> 对象。
返回
array_like_view_t<T> 对象的哈希值。

在文件 all_defs.cpp11083 行定义.

11083 {
11084 return hash(a.begin(),a.size());
11085 }

◆ operator()() [3/5]

hash_value_t elc::defs::base::hash_n::hash_t::operator() ( const base_type_info_t a) const
inlinenoexcept

Computes the hash value of a base_type_info_t object.

参数
aThe base_type_info_t object to hash.
返回
The hash value of the object.

在文件 all_defs.cpp10939 行定义.

10939 {
10940 return{a.get_hash()};
10941 }

◆ operator()() [4/5]

template<class T >
requires able<T>
constexpr auto elc::defs::base::hash_n::hash_t::operator() ( const T &  a) const
inlineconstexprnoexcept

Computes the hash value of a value.

参数
aThe value to hash.
返回
The hash value of the value.

在文件 all_defs.cpp10950 行定义.

10950 {
10951 #undef hash
10952 if constexpr(is_pointer<T>)
10953 return pointer_hash(a);
10955 return hash_value_t{hash_base_t(a)};
10956 elseif constexpr(is_unstable_hash<T>)
10957 return unstable_hash_value_t(a);
10958 elseif constexpr(was_not_an_ill_form(declvalue(const T&).hash()))
10959 return a.hash();
10960 elseif constexpr(was_not_an_ill_form(hash_value_t(declvalue(const T&))))
10961 return hash_value_t(a);
10962 else{
10963 template_error("Please overload the function hash in the namespace where this type is defined.");
10964 return hash_value_t{};
10965 }
10966 #define hash operator()
10967 }
#define was_not_an_ill_form(...)
Definition all_defs.cpp:611
#define elseif
Definition all_defs.cpp:650
#define template_error(reason)
Definition all_defs.cpp:559
#define declvalue(...)
Definition all_defs.cpp:556
constexpr hash_value_t pointer_hash(T *a) noexcept
函数调用图:

◆ operator()() [5/5]

template<class T >
constexpr hash_value_t elc::defs::base::hash_n::hash_t::operator() ( const T *  a,
size_t  size 
) const
inlineconstexprnoexcept

Computes the hash value of an array of elements.

参数
aThe array of elements.
sizeThe size of the array.
返回
The hash value of the array.

在文件 all_defs.cpp11058 行定义.

11058 {
11059 return with_calculated_before(hash(nothing),0,a,size);
11060 }
constexpr hash_value_t with_calculated_before(hash_value_t before, size_t before_size, const T *a, size_t size) const noexcept

◆ repeat_times() [1/2]

constexpr hash_value_t elc::defs::base::hash_n::hash_t::repeat_times ( hash_value_t  value,
size_t  size 
) const
inlineconstexprnoexcept

计算此hash重复N次的数组的hash结果

参数
valueThe hash value to repeat.
sizeThe number of times to repeat the hash value.
返回
The repeated hash value.

在文件 all_defs.cpp11007 行定义.

11007 {
11008 hash_base_t aret=0;
11009 {
11010 //优化.
11011 //关於此,咱确信咱发现一种美妙的证法来保证这个优化不影响结果,但可惜凋可怜的脑容量不足以让他看懂.
11012 constexpr size_t bit_range_max=bitnum_of(hash_base_t);
11013 constexpr hash_base_t void_hash{nothing};
11014 push_and_disable_msvc_warning(26475)//强制转换警告diss.
11018
11020 if(value._value==0 || size==0)
11021 return{void_hash};
11022 if(size >= bit_range_max){
11023 const bool is_npos = ::std::popcount(value._value)%BIT_POSSIBILITY;
11026 }
11027 if(!size)
11028 return{aret};
11029 }
11030 rot_iterator<decltype(aret)>rotl_offset = size;
11031 while(size--){
11032 aret ^= rotl(value._value,rotl_offset);
11033 rotl_offset--;
11034 }
11035 return{aret};
11036 }
if constexpr(noexcept_stream_class< stream_T >)
#define bitnum_of(...)
Definition all_defs.cpp:578
#define pop_msvc_warning()
Definition all_defs.cpp:478
#define push_and_disable_msvc_warning(...)
Definition all_defs.cpp:479
constexpr size_t size(::size_t v)
constexpr size_t BIT_POSSIBILITY
每个bit(不是字节)的可能性 为什么c艹委员会不定义这个?
函数调用图:

◆ repeat_times() [2/2]

template<class T >
constexpr hash_value_t elc::defs::base::hash_n::hash_t::repeat_times ( T &&  value,
size_t  size 
) const
inlineconstexprnoexcept

计算此hash重复N次的数组的hash结果

参数
valueThe hash value to repeat.
sizeThe number of times to repeat the hash value.
返回
The repeated hash value.

在文件 all_defs.cpp11046 行定义.

11046 {
11047 return repeat_times(hash(value),size);
11048 }
constexpr hash_value_t repeat_times(hash_value_t value, size_t size) const noexcept

◆ with_calculated_before() [1/2]

template<class T >
requires is_not_signal_value_for_array_like<T>
constexpr hash_value_t elc::defs::base::hash_n::hash_t::with_calculated_before ( hash_value_t  before,
size_t  before_size,
const array_like_view_t< T > &  a 
) const
inlineconstexprnoexcept

计算一个 array_like_view_t<T> 对象的哈希值,并在哈希值之前进行计算。

参数
before用来作为计算基础的哈希值。
before_size用来作为计算基础的哈希值的大小。
a要计算哈希值的 array_like_view_t<T> 对象。
返回
array_like_view_t<T> 对象的哈希值。

在文件 all_defs.cpp11096 行定义.

11096 {
11097 return with_calculated_before(before,before_size,a.begin(),a.size());
11098 }

◆ with_calculated_before() [2/2]

template<class T >
constexpr hash_value_t elc::defs::base::hash_n::hash_t::with_calculated_before ( hash_value_t  before,
size_t  before_size,
const T *  a,
size_t  size 
) const
inlineconstexprnoexcept

从某个起始点算起的hash

参数
beforeThe hashed value before this hash.
before_sizeThe size of the hashed value before this hash.
aThe sequence of values.
sizeThe number of values in the sequence.
返回
The hash value of the sequence.

在文件 all_defs.cpp10990 行定义.

10990 {
10991 hash_base_t aret=before._value;
10992 rot_iterator<decltype(aret)>rotl_offset = before_size+size;
10993 while(size--){
10995 rotl_offset--;
10996 }
10997 return{aret};
10998 }
constexpr hash_base_t get_hash_in_base_type(const T &a) const noexcept(nothrow< T >)
函数调用图:

类成员变量说明

◆ able

template<class T >
constexpr bool elc::defs::base::hash_n::hash_t::able =able_helper<T>()
staticconstexpr

在文件 all_defs.cpp10920 行定义.

◆ nothrow

template<class T >
constexpr bool elc::defs::base::hash_n::hash_t::nothrow =nothrow_helper<T>()
staticconstexpr

在文件 all_defs.cpp10899 行定义.


该结构体的文档由以下文件生成: