return true;
}
+void Object::appendUse(const ::neurun::graph::operation::Index &idx)
+{
+ assert(_usage != OperandUsage::NOT_DEFINED);
+ assert(!_uses.contains(idx));
+
+ _uses.append(idx);
+}
+
+void Object::removeUse(const ::neurun::graph::operation::Index &idx)
+{
+ assert(_usage != OperandUsage::NOT_DEFINED);
+ assert(_uses.contains(idx));
+
+ _uses.remove(idx);
+}
+
+void Object::appendDef(const ::neurun::graph::operation::Index &idx)
+{
+ assert(_usage != OperandUsage::NOT_DEFINED && _usage != OperandUsage::CONSTANT);
+ assert(_def.size() == 0);
+
+ _def.append(idx);
+}
+
+void Object::removeDef(const ::neurun::graph::operation::Index &idx)
+{
+ assert(_usage != OperandUsage::NOT_DEFINED);
+ assert(_def.contains(idx));
+
+ _def.remove(idx);
+}
+
} // namespace operand
} // namespace graph
} // namespace neurun
#include "Shape.h"
#include "Data.h"
#include "TypeInfo.h"
+#include "graph/operation/IndexList.h"
namespace neurun
{
bool usageIsDefined(void) const { return _usage != OperandUsage::NOT_DEFINED; }
bool isModelInput(void) const { return _usage == OperandUsage::MODEL_INPUT; }
+ const operation::IndexList &getUses() const { return _uses; }
+ const operation::IndexList &getDef() const { return _def; }
+ void appendUse(const operation::Index &idx);
+ void removeUse(const operation::Index &idx);
+ void appendDef(const operation::Index &idx);
+ void removeDef(const operation::Index &idx);
+
private:
bool setUsage(OperandUsage usage);
const TypeInfo _type;
std::unique_ptr<Data> _data;
OperandUsage _usage;
+
+ operation::IndexList _uses;
+ operation::IndexList _def; // size is 0 (constant) or 1 (from def operation)
};
} // namespace operand