Skip to content

Commit

Permalink
fix: take skip bug in progress reports and output buffering
Browse files Browse the repository at this point in the history
  • Loading branch information
hello-adam committed Sep 15, 2020
1 parent 89ff6e3 commit 92c8a29
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 24 deletions.
8 changes: 4 additions & 4 deletions src/hobbits-core/bitcontainer.cpp
Expand Up @@ -15,24 +15,24 @@ BitContainer::BitContainer() :
setActionLineage(PluginActionLineage::actionlessLineage());
}

QSharedPointer<BitContainer> BitContainer::create(QByteArray bytes, qint64 bitLen, QSharedPointer<BitInfo> bitInfo)
QSharedPointer<BitContainer> BitContainer::create(QByteArray bytes, qint64 bitLen, QSharedPointer<const BitInfo> bitInfo)
{
QBuffer buffer(&bytes);
buffer.open(QIODevice::ReadOnly);
return create(&buffer, bitLen, bitInfo);
}

QSharedPointer<BitContainer> BitContainer::create(QIODevice *readableBytes, qint64 bitLen, QSharedPointer<BitInfo> bitInfo)
QSharedPointer<BitContainer> BitContainer::create(QIODevice *readableBytes, qint64 bitLen, QSharedPointer<const BitInfo> bitInfo)
{
return create(QSharedPointer<BitArray>(new BitArray(readableBytes, bitLen)), bitInfo);
}

QSharedPointer<BitContainer> BitContainer::create(QSharedPointer<const BitArray> bits, QSharedPointer<BitInfo> bitInfo)
QSharedPointer<BitContainer> BitContainer::create(QSharedPointer<const BitArray> bits, QSharedPointer<const BitInfo> bitInfo)
{
return create(QSharedPointer<BitArray>(new BitArray(*bits.data())), bitInfo);
}

QSharedPointer<BitContainer> BitContainer::create(QSharedPointer<BitArray> bits, QSharedPointer<BitInfo> bitInfo)
QSharedPointer<BitContainer> BitContainer::create(QSharedPointer<BitArray> bits, QSharedPointer<const BitInfo> bitInfo)
{
auto container = QSharedPointer<BitContainer>(new BitContainer());
container->m_bits = bits;
Expand Down
8 changes: 4 additions & 4 deletions src/hobbits-core/bitcontainer.h
Expand Up @@ -22,10 +22,10 @@ class HOBBITSCORESHARED_EXPORT BitContainer : public QObject
friend class OperatorActor;

public:
static QSharedPointer<BitContainer> create(QByteArray bytes, qint64 bitLen = -1, QSharedPointer<BitInfo> info=QSharedPointer<BitInfo>());
static QSharedPointer<BitContainer> create(QIODevice *readableBytes, qint64 bitLen = -1, QSharedPointer<BitInfo> info=QSharedPointer<BitInfo>());
static QSharedPointer<BitContainer> create(QSharedPointer<const BitArray> bits, QSharedPointer<BitInfo> info=QSharedPointer<BitInfo>());
static QSharedPointer<BitContainer> create(QSharedPointer<BitArray> bits, QSharedPointer<BitInfo> info=QSharedPointer<BitInfo>());
static QSharedPointer<BitContainer> create(QByteArray bytes, qint64 bitLen = -1, QSharedPointer<const BitInfo> info=QSharedPointer<const BitInfo>());
static QSharedPointer<BitContainer> create(QIODevice *readableBytes, qint64 bitLen = -1, QSharedPointer<const BitInfo> info=QSharedPointer<const BitInfo>());
static QSharedPointer<BitContainer> create(QSharedPointer<const BitArray> bits, QSharedPointer<const BitInfo> info=QSharedPointer<const BitInfo>());
static QSharedPointer<BitContainer> create(QSharedPointer<BitArray> bits, QSharedPointer<const BitInfo> info=QSharedPointer<const BitInfo>());

void setInfo(QSharedPointer<const BitInfo> info);

Expand Down
2 changes: 1 addition & 1 deletion src/hobbits-plugins/operators/QamRemapper/qamremapper.cpp
Expand Up @@ -187,7 +187,7 @@ QSharedPointer<const OperatorResult> QamRemapper::operateOnContainers(
}
}

QSharedPointer<BitContainer> container = BitContainer::create(outputArray);
QSharedPointer<BitContainer> container = BitContainer::create(outputArray, inputContainers.at(0)->info());
container->setName(QString("%1 <- %2").arg("QAM Remap").arg(inputContainers.at(0)->name()));

return OperatorResult::result({container}, pluginState);
Expand Down
3 changes: 1 addition & 2 deletions src/hobbits-plugins/operators/TakeSkipOperator/skipop.cpp
Expand Up @@ -25,8 +25,7 @@ void SkipOp::apply(

qint64 SkipOp::inputStep(qint64 inputBits) const
{
Q_UNUSED(inputBits)
return m_value;
return qMin(inputBits, m_value);
}

qint64 SkipOp::outputStep(qint64 inputBits) const
Expand Down
29 changes: 16 additions & 13 deletions src/hobbits-plugins/operators/TakeSkipOperator/takeskipoperator.cpp
Expand Up @@ -107,19 +107,20 @@ QSharedPointer<const OperatorResult> TakeSkipOperator::operateOnContainers(
qint64 inputBitCount = 0;
qint64 inputStepTotal = 0;
qint64 outputStepTotal = 0;
for (QSharedPointer<BitOp> op : ops) {
for (auto input : inputs) {
for (int i = 0; i < frameCount; i++) {
Frame frame;
if (frameBased) {
frame = input.first->frameAt(i);
}
else {
frame = {Frame(input.first->bits(), 0,
input.first->bits()->sizeInBits() - 1)};
}
// need to check for integer overflow
inputBitCount += frame.size();
for (auto input : inputs) {
for (int i = 0; i < frameCount; i++) {
Frame frame;
if (frameBased) {
frame = input.first->frameAt(i);
}
else {
frame = {Frame(input.first->bits(), 0,
input.first->bits()->sizeInBits() - 1)};
}
// need to check for integer overflow
inputBitCount += frame.size();

for (QSharedPointer<BitOp> op : ops) {
qint64 frameStep = op->inputStep(frame.size());
qint64 inTotal = frameStep + inputStepTotal;
if (inTotal < frameStep || inTotal < inputStepTotal) {
Expand Down Expand Up @@ -222,6 +223,8 @@ QSharedPointer<const OperatorResult> TakeSkipOperator::operateOnContainers(
if (progressTracker->getCancelled()) {
return OperatorResult::error("Processing cancelled");
}

bitsProcessed = 0;
}
}

Expand Down

0 comments on commit 92c8a29

Please sign in to comment.