This commit is contained in:
parent
c74b1b54c1
commit
bd472eea1e
|
@ -228,7 +228,7 @@ QList<std::shared_ptr<DAGOrderHelper>> DAGGraph::tidy_graph_nodes() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
void dags::DAGGraph::graph_layout_nodes_forward(const QList<std::shared_ptr<DAGOrderHelper>>& nodes)
|
void dags::DAGGraph::graph_layout_layers_forward(const QList<std::shared_ptr<DAGOrderHelper>>& nodes)
|
||||||
{
|
{
|
||||||
for (auto layer_index = 0; layer_index < maxLayerCount(); ++layer_index) {
|
for (auto layer_index = 0; layer_index < maxLayerCount(); ++layer_index) {
|
||||||
this->nodes_sort_forward_within_layer(layer_index, nodes);
|
this->nodes_sort_forward_within_layer(layer_index, nodes);
|
||||||
|
@ -360,7 +360,7 @@ void dags::DAGGraph::nodes_sort_with_above(int layer_index, const QList<std::sha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dags::DAGGraph::graph_adjust_nodes_backward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
void dags::DAGGraph::graph_adjust_layers_backward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
||||||
{
|
{
|
||||||
auto layer_index = this->maxLayerCount() - 1;
|
auto layer_index = this->maxLayerCount() - 1;
|
||||||
while (layer_index > -1) {
|
while (layer_index > -1) {
|
||||||
|
@ -470,17 +470,39 @@ void dags::DAGGraph::nodes_sort_with_belows(int curr_layer, const QList<std::sha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void dags::DAGGraph::node_adjust_ingraph_forward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
void dags::DAGGraph::node_adjust_ingraph_forward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
||||||
{
|
{
|
||||||
int layer_index = 0;
|
int layer_index = 0;
|
||||||
while (this->node_adjust_inlayer_forward(layer_index, total_nodes)) {
|
while (this->nodes_revise_forward_within_layer(layer_index, total_nodes)) {
|
||||||
this->node_adjust_inlayer_partition_indi(layer_index, total_nodes);
|
this->node_adjust_inlayer_partition_indi(layer_index, total_nodes);
|
||||||
this->nodes_sort_with_above(layer_index, total_nodes);
|
this->nodes_sort_with_above(layer_index, total_nodes);
|
||||||
layer_index++;
|
layer_index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool dags::DAGGraph::nodes_revise_forward_within_layer(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>>& nodes)
|
||||||
|
{
|
||||||
|
if (layer_index) {
|
||||||
|
QList<std::shared_ptr<DAGOrderHelper>> nodes_within_current_layer;
|
||||||
|
std::copy_if(nodes.begin(), nodes.end(), std::back_inserter(nodes_within_current_layer),
|
||||||
|
[=](std::shared_ptr<DAGOrderHelper> n) { return n->layerNumber() == layer_index; });
|
||||||
|
|
||||||
|
QList<std::pair<int, int>> sort_arrows;
|
||||||
|
std::for_each(nodes_within_current_layer.begin(), nodes_within_current_layer.end(),
|
||||||
|
[&](std::shared_ptr<DAGOrderHelper> curr_node) {
|
||||||
|
auto prev_nodes = curr_node->getUpstreamNodes();
|
||||||
|
std::for_each(prev_nodes.begin(), prev_nodes.end(),
|
||||||
|
[&](std::shared_ptr<DAGOrderHelper> n) {
|
||||||
|
sort_arrows << std::make_pair(n->sortNumber().toInt(), curr_node->sortNumber().toInt());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
bool dags::DAGGraph::node_adjust_inlayer_forward(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
bool dags::DAGGraph::node_adjust_inlayer_forward(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
||||||
{
|
{
|
||||||
// 挑选当前层次节点
|
// 挑选当前层次节点
|
||||||
|
@ -541,7 +563,7 @@ bool dags::DAGGraph::node_adjust_inlayer_forward(int curr_layer, const QList<std
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
bool dags::DAGGraph::node_adjust_inlayer_partition_indi(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
bool dags::DAGGraph::node_adjust_inlayer_partition_indi(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
||||||
{
|
{
|
||||||
// 提取层次节点并排序节点
|
// 提取层次节点并排序节点
|
||||||
|
@ -624,13 +646,13 @@ bool dags::DAGGraph::node_adjust_inlayer_partition_indi(int layer_index, const Q
|
||||||
this->current_nodelist_filling_indi(nodes_within_current_layer);
|
this->current_nodelist_filling_indi(nodes_within_current_layer);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
std::pair<qlonglong, qlonglong> dags::DAGGraph::node_evaluate_with_downstream(std::shared_ptr<DAGOrderHelper> node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
std::pair<qlonglong, qlonglong> dags::DAGGraph::node_evaluate_with_downstream(std::shared_ptr<DAGOrderHelper> curr_node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
||||||
{
|
{
|
||||||
decltype(node) next_node;
|
decltype(curr_node) next_node;
|
||||||
if (node->isFakeNode()) {
|
if (curr_node->isFakeNode()) {
|
||||||
auto n_data = node->headsNode();
|
auto n_data = curr_node->headsNode();
|
||||||
next_node = *std::find_if(total_nodes.begin(), total_nodes.end(), [&](decltype(node) n) {
|
next_node = *std::find_if(total_nodes.begin(), total_nodes.end(), [&](decltype(curr_node) n) {
|
||||||
if (!n->isFakeNode()) {
|
if (!n->isFakeNode()) {
|
||||||
return n->layerNode() == n_data;
|
return n->layerNode() == n_data;
|
||||||
}
|
}
|
||||||
|
@ -638,14 +660,14 @@ std::pair<qlonglong, qlonglong> dags::DAGGraph::node_evaluate_with_downstream(st
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
auto n_datas = node->layerNode()->nextNodes();
|
auto n_datas = curr_node->layerNode()->nextNodes();
|
||||||
if (!n_datas.size())
|
if (!n_datas.size())
|
||||||
return std::make_pair(node->layerNumber(), node->sortNumber().toLongLong());
|
return std::make_pair(curr_node->layerNumber(), curr_node->sortNumber().toLongLong());
|
||||||
|
|
||||||
QList<std::shared_ptr<DAGOrderHelper>> next_nodes;
|
QList<std::shared_ptr<DAGOrderHelper>> next_nodes;
|
||||||
std::transform(n_datas.begin(), n_datas.end(), std::back_inserter(next_nodes),
|
std::transform(n_datas.begin(), n_datas.end(), std::back_inserter(next_nodes),
|
||||||
[&](std::shared_ptr<DAGLayerHelper> inst) {
|
[&](std::shared_ptr<DAGLayerHelper> inst) {
|
||||||
auto rst = std::find_if(total_nodes.begin(), total_nodes.end(), [&](decltype(node) n) {
|
auto rst = std::find_if(total_nodes.begin(), total_nodes.end(), [&](decltype(curr_node) n) {
|
||||||
if (!n->isFakeNode()) {
|
if (!n->isFakeNode()) {
|
||||||
return n->layerNode() == inst;
|
return n->layerNode() == inst;
|
||||||
}
|
}
|
||||||
|
@ -664,11 +686,11 @@ std::pair<qlonglong, qlonglong> dags::DAGGraph::node_evaluate_with_downstream(st
|
||||||
return std::make_pair(next_node->layerNumber(), next_node->sortNumber().toLongLong());
|
return std::make_pair(next_node->layerNumber(), next_node->sortNumber().toLongLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<qlonglong, qlonglong> dags::DAGGraph::node_evaluate_with_upstream(std::shared_ptr<DAGOrderHelper> node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
std::pair<qlonglong, qlonglong> dags::DAGGraph::node_evaluate_with_upstream(std::shared_ptr<DAGOrderHelper> curr_node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes)
|
||||||
{
|
{
|
||||||
auto prim_nodes = node->getUpstreamNodes();
|
auto prim_nodes = curr_node->getUpstreamNodes();
|
||||||
if (!prim_nodes.size())
|
if (!prim_nodes.size())
|
||||||
return std::make_pair(node->layerNumber(), node->sortNumber().toLongLong());
|
return std::make_pair(curr_node->layerNumber(), curr_node->sortNumber().toLongLong());
|
||||||
|
|
||||||
QList<std::shared_ptr<DAGOrderHelper>> prev_nodes;
|
QList<std::shared_ptr<DAGOrderHelper>> prev_nodes;
|
||||||
std::transform(prim_nodes.begin(), prim_nodes.end(), std::back_inserter(prev_nodes),
|
std::transform(prim_nodes.begin(), prim_nodes.end(), std::back_inserter(prev_nodes),
|
||||||
|
@ -721,18 +743,18 @@ void dags::DAGGraph::primitiveGraphLayout() {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto tidy_nodes = this->tidy_graph_nodes();
|
auto tidy_nodes = this->tidy_graph_nodes();
|
||||||
this->graph_layout_nodes_forward(tidy_nodes);
|
this->graph_layout_layers_forward(tidy_nodes);
|
||||||
this->node_with_layout = tidy_nodes;
|
this->node_with_layout = tidy_nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dags::DAGGraph::forwardsLayoutImpls()
|
void dags::DAGGraph::forwardsLayoutImpls()
|
||||||
{
|
{
|
||||||
this->graph_layout_nodes_forward(this->node_with_layout);
|
this->graph_layout_layers_forward(this->node_with_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dags::DAGGraph::backwardsLayoutImpls()
|
void dags::DAGGraph::backwardsLayoutImpls()
|
||||||
{
|
{
|
||||||
this->graph_adjust_nodes_backward(this->node_with_layout);
|
this->graph_adjust_layers_backward(this->node_with_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dags::DAGGraph::adjustLayoutImpls()
|
void dags::DAGGraph::adjustLayoutImpls()
|
||||||
|
|
|
@ -91,10 +91,10 @@ namespace dags {
|
||||||
int node_layering_adj(std::shared_ptr<DAGLayerHelper> inst);
|
int node_layering_adj(std::shared_ptr<DAGLayerHelper> inst);
|
||||||
QList<std::shared_ptr<DAGOrderHelper>> tidy_graph_nodes();
|
QList<std::shared_ptr<DAGOrderHelper>> tidy_graph_nodes();
|
||||||
|
|
||||||
void graph_layout_nodes_forward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
void graph_layout_layers_forward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
void nodes_sort_forward_within_layer(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>> &nodes);
|
void nodes_sort_forward_within_layer(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>> &nodes);
|
||||||
|
|
||||||
void graph_adjust_nodes_backward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
void graph_adjust_layers_backward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
QList<std::shared_ptr<DAGOrderHelper>> layer_adjust_via_next_sibling(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
QList<std::shared_ptr<DAGOrderHelper>> layer_adjust_via_next_sibling(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
void node_adjust_via_next_sibling(std::shared_ptr<DAGOrderHelper> curr_node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
void node_adjust_via_next_sibling(std::shared_ptr<DAGOrderHelper> curr_node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
|
|
||||||
|
@ -102,9 +102,12 @@ namespace dags {
|
||||||
void nodes_sort_with_above(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
void nodes_sort_with_above(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
void nodes_sort_with_belows(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
void nodes_sort_with_belows(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
|
|
||||||
//void node_adjust_ingraph_forward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
void node_adjust_ingraph_forward(const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
|
bool nodes_revise_forward_within_layer(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>>& nodes);
|
||||||
|
bool node_adjust_inlayer_partition_indi(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
|
|
||||||
|
|
||||||
//bool node_adjust_inlayer_forward(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
//bool node_adjust_inlayer_forward(int curr_layer, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
//bool node_adjust_inlayer_partition_indi(int layer_index, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
|
||||||
//std::pair<qlonglong, qlonglong> node_evaluate_with_downstream(std::shared_ptr<DAGOrderHelper> node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
//std::pair<qlonglong, qlonglong> node_evaluate_with_downstream(std::shared_ptr<DAGOrderHelper> node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
//std::pair<qlonglong, qlonglong> node_evaluate_with_upstream(std::shared_ptr<DAGOrderHelper> node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
//std::pair<qlonglong, qlonglong> node_evaluate_with_upstream(std::shared_ptr<DAGOrderHelper> node, const QList<std::shared_ptr<DAGOrderHelper>>& total_nodes);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue