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:
Hugo Santos
2007-05-02 14:08:55 +00:00
parent cc70cbe297
commit f6cfc5af19
3 changed files with 22 additions and 23 deletions
+2 -3
View File
@@ -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;
} }
+16 -18
View File
@@ -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;