Skip to content

Commit

Permalink
feat: add interleaving and frame-based modes to Take Skip operator
Browse files Browse the repository at this point in the history
  • Loading branch information
hello-adam committed Mar 10, 2020
1 parent 99e5b56 commit bcbd804
Show file tree
Hide file tree
Showing 42 changed files with 657 additions and 234 deletions.
4 changes: 3 additions & 1 deletion src/hobbits-core/operatoractor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,10 @@ void OperatorActor::postProcess()
result->getPluginState()));
QSharedPointer<PluginActionLineage> lineage = PluginActionLineage::create(action)->setOutputPos(i);
if (!m_inputContainers.isEmpty()) {
// TODO: multiple parents
lineage->setParent(m_inputContainers.at(0)->getActionLineage());
for (int i = 1; i < m_inputContainers.size(); i++) {
lineage->addAdditionalInput(m_inputContainers.at(i)->getActionLineage());
}
}
result->getOutputContainers().at(i)->setActionLineage(lineage);
}
Expand Down
6 changes: 3 additions & 3 deletions src/hobbits-core/operatorinterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ class HOBBITSCORESHARED_EXPORT OperatorInterface
virtual bool canRecallPluginState(const QJsonObject &pluginState) = 0;
virtual bool setPluginStateInUi(const QJsonObject &pluginState) = 0;

virtual int getMinInputContainers() = 0;
virtual int getMaxInputContainers() = 0;
virtual int getMinInputContainers(const QJsonObject &pluginState) = 0;
virtual int getMaxInputContainers(const QJsonObject &pluginState) = 0;
virtual QSharedPointer<const OperatorResult> operateOnContainers(
QList<QSharedPointer<const BitContainer>> inputContainers,
const QJsonObject &recallablePluginState,
QSharedPointer<ActionProgress> progressTracker) = 0;

};

Q_DECLARE_INTERFACE(OperatorInterface, "hobbits.OperatorInterface.3")
Q_DECLARE_INTERFACE(OperatorInterface, "hobbits.OperatorInterface.4")

#endif // OPERATORINTERFACE_H
49 changes: 49 additions & 0 deletions src/hobbits-core/pluginactionlineage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,14 @@ QSharedPointer<PluginActionLineage> PluginActionLineage::setParent(QSharedPointe
return sharedFromThis();
}


QSharedPointer<PluginActionLineage> PluginActionLineage::addAdditionalInput(
QSharedPointer<const PluginActionLineage> inputLineage)
{
m_additionalInputs.append(inputLineage);
return sharedFromThis();
}

QSharedPointer<PluginActionLineage> PluginActionLineage::setOutputPos(int outputPosition)
{
m_outputPosition = outputPosition;
Expand All @@ -114,6 +122,11 @@ int PluginActionLineage::getOutputPosition() const
return m_outputPosition;
}

QList<QSharedPointer<const PluginActionLineage>> PluginActionLineage::getAdditionalInputs() const
{
return m_additionalInputs;
}

QJsonObject PluginActionLineage::serialize() const
{
QJsonObject obj;
Expand All @@ -122,6 +135,16 @@ QJsonObject PluginActionLineage::serialize() const
QJsonObject actionObject;
actionObject.insert("action", action->m_pluginAction->serialize());
actionObject.insert("outputPosition", action->m_outputPosition);
QJsonArray additionalInputs;
for (auto input : m_additionalInputs) {
if (input.isNull()) {
additionalInputs.append(QJsonObject());
}
else {
additionalInputs.append(input->serialize());
}
}
actionObject.insert("additionalInputs", additionalInputs);
actions.append(actionObject);
}
obj.insert("actions", actions);
Expand Down Expand Up @@ -154,7 +177,24 @@ QSharedPointer<PluginActionLineage> PluginActionLineage::deserialize(QJsonObject
return nullLineage;
}
int outputPosition = int(actionObject.value("outputPosition").toDouble());

lineage = PluginActionLineage::create(pluginAction)->setParent(lineage)->setOutputPos(outputPosition);

if (actionObject.contains("additionalInputs")
&& actionObject.value("additionalInputs").isArray()) {
for (auto additional : actionObject.value("additionalInputs").toArray()) {
if (!additional.isObject()) {
return nullLineage;
}
QJsonObject additionalObject = additional.toObject();
if (additionalObject.size() == 0) {
lineage->addAdditionalInput(QSharedPointer<PluginActionLineage>());
}
else {
lineage->addAdditionalInput(PluginActionLineage::deserialize(additionalObject));
}
}
}
}

return lineage;
Expand All @@ -169,3 +209,12 @@ QList<QSharedPointer<const PluginActionLineage>> PluginActionLineage::getLineage
lineage.append(this->sharedFromThis());
return lineage;
}

int PluginActionLineage::additionalInputCount() const
{
int count = 0;
for (auto lineage: getLineage()) {
count += lineage->getAdditionalInputs().size();
}
return count;
}
18 changes: 17 additions & 1 deletion src/hobbits-core/pluginactionlineage.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,21 @@ class HOBBITSCORESHARED_EXPORT PluginActionLineage : public QEnableSharedFromThi
PluginActionLineage(QSharedPointer<const PluginAction> pluginAction);

public:
struct TreeNode {
class TreeNode {
public:
QSharedPointer<const PluginActionLineage> lineage;
QList<QSharedPointer<TreeNode>> children;

int additionalInputCount() {
int count = 0;
if (!lineage.isNull()) {
count += lineage->additionalInputCount();
}
for (auto child: children) {
count += child->additionalInputCount();
}
return count;
}
};

static QSharedPointer<PluginActionLineage> create(QSharedPointer<const PluginAction> pluginAction);
Expand All @@ -27,19 +39,23 @@ class HOBBITSCORESHARED_EXPORT PluginActionLineage : public QEnableSharedFromThi

QSharedPointer<PluginActionLineage> setParent(QSharedPointer<const PluginActionLineage> parent);
QSharedPointer<PluginActionLineage> setOutputPos(int outputPosition);
QSharedPointer<PluginActionLineage> addAdditionalInput(QSharedPointer<const PluginActionLineage>);

QSharedPointer<const PluginAction> getPluginAction() const;
int getOutputPosition() const;
QList<QSharedPointer<const PluginActionLineage>> getAdditionalInputs() const;

QJsonObject serialize() const;
static QSharedPointer<PluginActionLineage> deserialize(QJsonObject data);

QList<QSharedPointer<const PluginActionLineage>> getLineage() const;
int additionalInputCount() const;

private:
QSharedPointer<const PluginAction> m_pluginAction;
int m_outputPosition;
QSharedPointer<const PluginActionLineage> m_parent;
QList<QSharedPointer<const PluginActionLineage>> m_additionalInputs;
};

#endif // PLUGINACTIONLINEAGE_H

0 comments on commit bcbd804

Please sign in to comment.