set ValueIterator's fIndex to the next slot so OpenHashTable's Iterator properly gets it.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20974 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -75,8 +75,7 @@ public:
|
|||||||
: fOriginalIndex(index), fOriginalValue(value)
|
: fOriginalIndex(index), fOriginalValue(value)
|
||||||
{
|
{
|
||||||
Iterator::fTable = table;
|
Iterator::fTable = table;
|
||||||
Iterator::fIndex = index;
|
Rewind();
|
||||||
Iterator::fNext = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HasNext() const
|
bool HasNext() const
|
||||||
@@ -91,7 +90,7 @@ public:
|
|||||||
|
|
||||||
void Rewind()
|
void Rewind()
|
||||||
{
|
{
|
||||||
Iterator::fIndex = fOriginalIndex;
|
Iterator::fIndex = fOriginalIndex + 1;
|
||||||
Iterator::fNext = fOriginalValue;
|
Iterator::fNext = fOriginalValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,16 +114,8 @@ public:
|
|||||||
|
|
||||||
void InsertUnchecked(ValueType *value)
|
void InsertUnchecked(ValueType *value)
|
||||||
{
|
{
|
||||||
if (CheckDuplicates) {
|
if (CheckDuplicates && _ExaustiveSearch(value))
|
||||||
for (size_t i = 0; i < fTableSize; i++) {
|
|
||||||
ValueType *bucket = fTable[i];
|
|
||||||
while (bucket) {
|
|
||||||
if (bucket == value)
|
|
||||||
panic("Hash Table: value already in table.");
|
panic("Hash Table: value already in table.");
|
||||||
bucket = _Link(bucket)->fNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_Insert(fTable, fTableSize, value);
|
_Insert(fTable, fTableSize, value);
|
||||||
fItemCount++;
|
fItemCount++;
|
||||||
@@ -164,16 +156,8 @@ public:
|
|||||||
if (slot == NULL)
|
if (slot == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (CheckDuplicates) {
|
if (CheckDuplicates && _ExaustiveSearch(value))
|
||||||
for (size_t i = 0; i < fTableSize; i++) {
|
|
||||||
ValueType *bucket = fTable[i];
|
|
||||||
while (bucket) {
|
|
||||||
if (bucket == value)
|
|
||||||
panic("Hash Table: duplicate detected.");
|
panic("Hash Table: duplicate detected.");
|
||||||
bucket = _Link(bucket)->fNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fItemCount--;
|
fItemCount--;
|
||||||
return true;
|
return true;
|
||||||
@@ -270,6 +254,20 @@ protected:
|
|||||||
return fDefinition.GetLink(bucket);
|
return fDefinition.GetLink(bucket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _ExaustiveSearch(ValueType *value) const
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < fTableSize; i++) {
|
||||||
|
ValueType *bucket = fTable[i];
|
||||||
|
while (bucket) {
|
||||||
|
if (bucket == value)
|
||||||
|
return true;
|
||||||
|
bucket = _Link(bucket)->fNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Definition fDefinition;
|
Definition fDefinition;
|
||||||
size_t fTableSize, fItemCount;
|
size_t fTableSize, fItemCount;
|
||||||
ValueType **fTable;
|
ValueType **fTable;
|
||||||
|
|||||||
@@ -933,6 +933,8 @@ UdpEndpoint::StoreData(net_buffer *buffer)
|
|||||||
status_t
|
status_t
|
||||||
UdpEndpoint::DeliverData(net_buffer *_buffer)
|
UdpEndpoint::DeliverData(net_buffer *_buffer)
|
||||||
{
|
{
|
||||||
|
TRACE_EP("DeliverData(%p [%ld bytes])", _buffer, _buffer->size);
|
||||||
|
|
||||||
net_buffer *buffer = gBufferModule->clone(_buffer, false);
|
net_buffer *buffer = gBufferModule->clone(_buffer, false);
|
||||||
if (buffer == NULL)
|
if (buffer == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|||||||
Reference in New Issue
Block a user