mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-23 08:31:43 +02:00
FIFO resize bugfix and more tests
This commit is contained in:
@@ -88,8 +88,7 @@ public:
|
|||||||
throw InvalidAccessException("Can not resize FIFO without data loss.");
|
throw InvalidAccessException("Can not resize FIFO without data loss.");
|
||||||
|
|
||||||
_buffer.resize(newSize, preserveContent);
|
_buffer.resize(newSize, preserveContent);
|
||||||
if (_used > _buffer.size())
|
if (!preserveContent) _used = 0;
|
||||||
_used = _buffer.size();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer<T>& peek(Poco::Buffer<T>& buffer, std::size_t length = 0) const
|
Buffer<T>& peek(Poco::Buffer<T>& buffer, std::size_t length = 0) const
|
||||||
@@ -108,6 +107,7 @@ public:
|
|||||||
poco_assert (length <= _buffer.size());
|
poco_assert (length <= _buffer.size());
|
||||||
buffer.resize(length);
|
buffer.resize(length);
|
||||||
std::memcpy(buffer.begin(), _buffer.begin(), length * sizeof(T));
|
std::memcpy(buffer.begin(), _buffer.begin(), length * sizeof(T));
|
||||||
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,12 +139,14 @@ public:
|
|||||||
/// Returns the length of data written.
|
/// Returns the length of data written.
|
||||||
{
|
{
|
||||||
Mutex::ScopedLock lock(_mutex);
|
Mutex::ScopedLock lock(_mutex);
|
||||||
|
|
||||||
poco_assert (_used <= _buffer.size());
|
poco_assert (_used <= _buffer.size());
|
||||||
std::size_t available = _buffer.size() - _used;
|
std::size_t available = _buffer.size() - _used;
|
||||||
std::size_t len = buffer.size() > available ? available : buffer.size();
|
std::size_t len = buffer.size() > available ? available : buffer.size();
|
||||||
std::memcpy(_buffer.begin() + _used, buffer.begin(), len * sizeof(T));
|
std::memcpy(_buffer.begin() + _used, buffer.begin(), len * sizeof(T));
|
||||||
_used += len;
|
_used += len;
|
||||||
poco_assert (_used <= _buffer.size());
|
poco_assert (_used <= _buffer.size());
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -296,7 +296,31 @@ void CoreTest::testFIFOBufferChar()
|
|||||||
assert (0 == f.used());
|
assert (0 == f.used());
|
||||||
try { T i = f[0]; fail ("must fail"); }
|
try { T i = f[0]; fail ("must fail"); }
|
||||||
catch (InvalidAccessException&) { }
|
catch (InvalidAccessException&) { }
|
||||||
|
assert (f.isEmpty());
|
||||||
|
|
||||||
|
assert (5 == f.write(b));
|
||||||
|
assert (20 == f.size());
|
||||||
|
assert (5 == f.used());
|
||||||
|
assert (!f.isEmpty());
|
||||||
|
assert ('f' == f[0]);
|
||||||
|
assert ('g' == f[1]);
|
||||||
|
assert ('h' == f[2]);
|
||||||
|
assert ('i' == f[3]);
|
||||||
|
assert ('j' == f[4]);
|
||||||
|
|
||||||
|
f.resize(10);
|
||||||
|
assert (10 == f.size());
|
||||||
|
assert (5 == f.used());
|
||||||
|
assert (!f.isEmpty());
|
||||||
|
assert ('f' == f[0]);
|
||||||
|
assert ('g' == f[1]);
|
||||||
|
assert ('h' == f[2]);
|
||||||
|
assert ('i' == f[3]);
|
||||||
|
assert ('j' == f[4]);
|
||||||
|
|
||||||
|
f.resize(3, false);
|
||||||
|
assert (3 == f.size());
|
||||||
|
assert (0 == f.used());
|
||||||
assert (f.isEmpty());
|
assert (f.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,6 +413,31 @@ void CoreTest::testFIFOBufferInt()
|
|||||||
catch (InvalidAccessException&) { }
|
catch (InvalidAccessException&) { }
|
||||||
|
|
||||||
assert (f.isEmpty());
|
assert (f.isEmpty());
|
||||||
|
|
||||||
|
assert (5 == f.write(b));
|
||||||
|
assert (20 == f.size());
|
||||||
|
assert (5 == f.used());
|
||||||
|
assert (!f.isEmpty());
|
||||||
|
assert (15 == f[0]);
|
||||||
|
assert (16 == f[1]);
|
||||||
|
assert (17 == f[2]);
|
||||||
|
assert (18 == f[3]);
|
||||||
|
assert (19 == f[4]);
|
||||||
|
|
||||||
|
f.resize(10);
|
||||||
|
assert (10 == f.size());
|
||||||
|
assert (5 == f.used());
|
||||||
|
assert (!f.isEmpty());
|
||||||
|
assert (15 == f[0]);
|
||||||
|
assert (16 == f[1]);
|
||||||
|
assert (17 == f[2]);
|
||||||
|
assert (18 == f[3]);
|
||||||
|
assert (19 == f[4]);
|
||||||
|
|
||||||
|
f.resize(3, false);
|
||||||
|
assert (3 == f.size());
|
||||||
|
assert (0 == f.used());
|
||||||
|
assert (f.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user