Program Listing for File DependencyNode.cpp

Return to documentation for file (src/flamegpu/model/DependencyNode.cpp)

#include <iostream>
#include <string>
#include <vector>

#include "flamegpu/model/DependencyNode.h"

#include "flamegpu/model/AgentFunctionDescription.h"

namespace flamegpu {

DependencyNode::~DependencyNode() {
}

bool DependencyNode::hasDependents() const {
    return dependents.size() != 0;
}
const std::vector<DependencyNode*> DependencyNode::getDependents() const {
    return dependents;
}
bool DependencyNode::hasDependencies() const {
    return dependencies.size() != 0;
}
const std::vector<DependencyNode*> DependencyNode::getDependencies() const {
    return dependencies;
}

void DependencyNode::setMinimumLayerDepth(const int _minLayerDepth) {
    this->minLayerDepth = _minLayerDepth;
}

int DependencyNode::getMinimumLayerDepth() {
    return minLayerDepth;
}

void DependencyNode::dependsOnImpl(DependencyNode& dependency) {
    if (auto thisAsAFD = dynamic_cast<CAgentFunctionDescription*>(this)) {
        if (auto depAsAFD = dynamic_cast<CAgentFunctionDescription*>(&dependency)) {
            if (thisAsAFD->function->model.expired() || !(thisAsAFD->function->model.lock() == depAsAFD->function->model.lock())) {
                THROW exception::InvalidDependencyGraph("Attempting to add two agent functions from different models to dependency graph!");
            }
        }
    }
    dependency.addDependent(*this);
    dependencies.push_back(&dependency);
}

void DependencyNode::addDependent(DependencyNode& dependent) {
    dependents.push_back(&dependent);
}

}  // namespace flamegpu