Move length tracking to HashArray
This commit is contained in:
parent
9cf1b6f491
commit
00dbb224f7
@ -113,7 +113,6 @@ if (is(typeof(hasher(Key.init)) == size_t))
|
|||||||
alias ConstRange = .Range!(const HashTable);*/
|
alias ConstRange = .Range!(const HashTable);*/
|
||||||
|
|
||||||
private HashArray!(hasher, Key, Value) data;
|
private HashArray!(hasher, Key, Value) data;
|
||||||
private size_t length_;
|
|
||||||
|
|
||||||
private alias Buckets = typeof(this.data).Buckets;
|
private alias Buckets = typeof(this.data).Buckets;
|
||||||
|
|
||||||
@ -154,7 +153,7 @@ if (is(typeof(hasher(Key.init)) == size_t))
|
|||||||
*/
|
*/
|
||||||
@property size_t length() const
|
@property size_t length() const
|
||||||
{
|
{
|
||||||
return this.length_;
|
return this.data.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,7 +163,7 @@ if (is(typeof(hasher(Key.init)) == size_t))
|
|||||||
*/
|
*/
|
||||||
@property bool empty() const
|
@property bool empty() const
|
||||||
{
|
{
|
||||||
return this.length_ == 0;
|
return length == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -172,8 +171,7 @@ if (is(typeof(hasher(Key.init)) == size_t))
|
|||||||
*/
|
*/
|
||||||
void clear()
|
void clear()
|
||||||
{
|
{
|
||||||
this.data.array.clear();
|
this.data.clear();
|
||||||
this.length_ = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -224,7 +222,6 @@ if (is(typeof(hasher(Key.init)) == size_t))
|
|||||||
if (e.status != BucketStatus.used)
|
if (e.status != BucketStatus.used)
|
||||||
{
|
{
|
||||||
e.key = key;
|
e.key = key;
|
||||||
++this.length_;
|
|
||||||
}
|
}
|
||||||
e.value = value;
|
e.value = value;
|
||||||
return e.value;
|
return e.value;
|
||||||
@ -269,18 +266,7 @@ if (is(typeof(hasher(Key.init)) == size_t))
|
|||||||
*/
|
*/
|
||||||
size_t remove(Key key)
|
size_t remove(Key key)
|
||||||
{
|
{
|
||||||
const code = this.data.locateBucket(key);
|
return this.data.remove(key);
|
||||||
|
|
||||||
for (auto range = this.data.array[code .. $]; !range.empty; range.popFront())
|
|
||||||
{
|
|
||||||
if (key == range.front.key)
|
|
||||||
{
|
|
||||||
range.front.status = BucketStatus.deleted;
|
|
||||||
--this.length_;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -294,16 +280,7 @@ if (is(typeof(hasher(Key.init)) == size_t))
|
|||||||
*/
|
*/
|
||||||
bool opBinaryRight(string op : "in")(Key key)
|
bool opBinaryRight(string op : "in")(Key key)
|
||||||
{
|
{
|
||||||
const code = this.data.locateBucket(key);
|
return this.data.find(key);
|
||||||
|
|
||||||
foreach (ref const e; this.data.array[code .. $])
|
|
||||||
{
|
|
||||||
if (key == e.key)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user