forked from boostorg/unordered
Make the current function_pair public
This commit is contained in:
@ -2770,18 +2770,20 @@ namespace boost {
|
|||||||
bool current_; // The currently active functions.
|
bool current_; // The currently active functions.
|
||||||
aligned_function funcs_[2];
|
aligned_function funcs_[2];
|
||||||
|
|
||||||
function_pair const& current() const
|
public:
|
||||||
|
function_pair const& current_functions() const
|
||||||
{
|
{
|
||||||
return *static_cast<function_pair const*>(
|
return *static_cast<function_pair const*>(
|
||||||
static_cast<void const*>(funcs_[current_].address()));
|
static_cast<void const*>(funcs_[current_].address()));
|
||||||
}
|
}
|
||||||
|
|
||||||
function_pair& current()
|
function_pair& current_functions()
|
||||||
{
|
{
|
||||||
return *static_cast<function_pair*>(
|
return *static_cast<function_pair*>(
|
||||||
static_cast<void*>(funcs_[current_].address()));
|
static_cast<void*>(funcs_[current_].address()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
void construct(bool which, H const& hf, P const& eq)
|
void construct(bool which, H const& hf, P const& eq)
|
||||||
{
|
{
|
||||||
new ((void*)&funcs_[which]) function_pair(hf, eq);
|
new ((void*)&funcs_[which]) function_pair(hf, eq);
|
||||||
@ -2819,22 +2821,22 @@ namespace boost {
|
|||||||
|
|
||||||
functions(functions const& bf) : current_(false)
|
functions(functions const& bf) : current_(false)
|
||||||
{
|
{
|
||||||
construct(current_, bf.current());
|
construct(current_, bf.current_functions());
|
||||||
}
|
}
|
||||||
|
|
||||||
functions(functions& bf, boost::unordered::detail::move_tag)
|
functions(functions& bf, boost::unordered::detail::move_tag)
|
||||||
: current_(false)
|
: current_(false)
|
||||||
{
|
{
|
||||||
construct(current_, bf.current(),
|
construct(current_, bf.current_functions(),
|
||||||
boost::unordered::detail::integral_constant<bool,
|
boost::unordered::detail::integral_constant<bool,
|
||||||
nothrow_move_constructible>());
|
nothrow_move_constructible>());
|
||||||
}
|
}
|
||||||
|
|
||||||
~functions() { this->destroy(current_); }
|
~functions() { this->destroy(current_); }
|
||||||
|
|
||||||
H const& hash_function() const { return current().first(); }
|
H const& hash_function() const { return current_functions().first(); }
|
||||||
|
|
||||||
P const& key_eq() const { return current().second(); }
|
P const& key_eq() const { return current_functions().second(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class H, class P> class set_hash_functions<H, P, false>
|
template <class H, class P> class set_hash_functions<H, P, false>
|
||||||
@ -2857,7 +2859,7 @@ namespace boost {
|
|||||||
set_hash_functions(functions_type& f, functions_type const& other)
|
set_hash_functions(functions_type& f, functions_type const& other)
|
||||||
: functions_(f), tmp_functions_(!f.current_)
|
: functions_(f), tmp_functions_(!f.current_)
|
||||||
{
|
{
|
||||||
f.construct(tmp_functions_, other.current());
|
f.construct(tmp_functions_, other.current_functions());
|
||||||
}
|
}
|
||||||
|
|
||||||
~set_hash_functions() { functions_.destroy(tmp_functions_); }
|
~set_hash_functions() { functions_.destroy(tmp_functions_); }
|
||||||
@ -2893,8 +2895,8 @@ namespace boost {
|
|||||||
|
|
||||||
void commit()
|
void commit()
|
||||||
{
|
{
|
||||||
functions_.current().first() = boost::move(hash_);
|
functions_.current_functions().first() = boost::move(hash_);
|
||||||
functions_.current().second() = boost::move(pred_);
|
functions_.current_functions().second() = boost::move(pred_);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user