@@ -33,13 +33,13 @@ CLASS::arrayhead(storage& head, const Link& buckets) NOEXCEPT
3333}
3434
3535TEMPLATE
36- size_t CLASS::size () const NOEXCEPT
36+ inline size_t CLASS::size () const NOEXCEPT
3737{
3838 return file_.size ();
3939}
4040
4141TEMPLATE
42- size_t CLASS::buckets () const NOEXCEPT
42+ inline size_t CLASS::buckets () const NOEXCEPT
4343{
4444 const auto count = position_to_link (size ()).value ;
4545 BC_ASSERT (count < Link::terminal);
@@ -55,8 +55,9 @@ bool CLASS::enabled() const NOEXCEPT
5555TEMPLATE
5656inline Link CLASS::index (size_t key) const NOEXCEPT
5757{
58- if (key >= buckets ())
59- return {};
58+ // buckets a table lock via file.size().
59+ // //if (key >= buckets()) return {};
60+ // //BC_ASSERT_MSG(key < buckets(), "index overflow");
6061
6162 // Put index does not validate, allowing for head expansion.
6263 return putter_index (key);
@@ -70,30 +71,32 @@ inline Link CLASS::putter_index(size_t key) const NOEXCEPT
7071}
7172
7273TEMPLATE
73- bool CLASS::create () NOEXCEPT
74+ bool CLASS::clear () NOEXCEPT
7475{
75- if (is_nonzero (file_.size ()))
76- return false ;
77-
78- const auto allocation = link_to_position (initial_buckets_);
79- const auto start = file_.allocate (allocation);
80-
81- // Guards addition overflow in manager_.get (start must be valid).
82- if (start == storage::eof)
83- return false ;
84-
85- const auto ptr = file_.get (start);
76+ const auto ptr = file_.get ();
8677 if (!ptr)
8778 return false ;
8879
89- BC_ASSERT_MSG (verify (), " unexpected body size" );
90-
9180 // std::memset/fill_n have identical performance (on win32).
9281 // //std::memset(ptr->data(), system::bit_all<uint8_t>, size());
9382 std::fill_n (ptr->data (), size (), system::bit_all<uint8_t >);
9483 return set_body_count (zero);
9584}
9685
86+ TEMPLATE
87+ bool CLASS::create () NOEXCEPT
88+ {
89+ if (is_nonzero (size ()))
90+ return false ;
91+
92+ // Guards addition overflow in manager_.get (start must be valid).
93+ if (file_.allocate (link_to_position (initial_buckets_)) == storage::eof)
94+ return false ;
95+
96+ BC_ASSERT_MSG (verify (), " unexpected head size" );
97+ return clear ();
98+ }
99+
97100TEMPLATE
98101bool CLASS::verify () const NOEXCEPT
99102{
@@ -104,7 +107,7 @@ TEMPLATE
104107bool CLASS::get_body_count (Link& count) const NOEXCEPT
105108{
106109 const auto ptr = file_.get ();
107- if (!ptr || Link::size > file_. size ())
110+ if (!ptr || Link::size > size ())
108111 return false ;
109112
110113 count = array_cast<Link::size>(ptr->data ());
@@ -115,7 +118,7 @@ TEMPLATE
115118bool CLASS::set_body_count (const Link& count) NOEXCEPT
116119{
117120 const auto ptr = file_.get ();
118- if (!ptr || Link::size > file_. size ())
121+ if (!ptr || Link::size > size ())
119122 return false ;
120123
121124 array_cast<Link::size>(ptr->data ()) = count;
0 commit comments