transact.cxx

来自「移植到WLIT项目的redboot源代码」· CXX 代码 · 共 1,896 行 · 第 1/5 页

CXX
1,896
字号
        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while (!result && (0 != current_transaction));    if (!result) {        CYG_ASSERT_CLASSC(toplevel);        for (conf_i = toplevel->conflicts.begin(); conf_i != toplevel->conflicts.end(); conf_i++) {            if ((node == (*conf_i)->get_node()) && !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = true;                break;            }        }    }    CYG_REPORT_RETVAL(result);    return result;}CdlConflictCdlTransactionBody::get_conflict(CdlNode node, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::get_conflict", "result %p");    CYG_REPORT_FUNCARG3XV(this, node, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    CdlConflict result = 0;    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_conflicts.begin();             conf_i != current_transaction->new_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = *conf_i;                break;            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while ((0 == result) && (0 != current_transaction));    if (0 == result) {        CYG_ASSERT_CLASSC(toplevel);        for (conf_i = toplevel->conflicts.begin(); conf_i != toplevel->conflicts.end(); conf_i++) {            if ((node == (*conf_i)->get_node()) && !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = *conf_i;                break;            }        }    }    CYG_REPORT_RETVAL(result);    return result;}voidCdlTransactionBody::get_conflicts(CdlNode node, bool (*pFn)(CdlConflict), std::vector<CdlConflict>& result){    CYG_REPORT_FUNCNAME("CdlTransaction::get_conflicts");    CYG_REPORT_FUNCARG3XV(this, node, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_conflicts.begin();             conf_i != current_transaction->new_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result.push_back(*conf_i);            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while (0 != current_transaction);    CYG_ASSERT_CLASSC(toplevel);    for (conf_i = toplevel->conflicts.begin(); conf_i != toplevel->conflicts.end(); conf_i++) {        if ((node == (*conf_i)->get_node()) && !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {            result.push_back(*conf_i);        }    }    CYG_REPORT_RETURN();}boolCdlTransactionBody::has_conflict(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::has_conflict", "result %d");    CYG_REPORT_FUNCARG4XV(this, node, prop, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    CYG_PRECONDITION_CLASSC(prop);        bool result = false;    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_conflicts.begin();             conf_i != current_transaction->new_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) && (prop == (*conf_i)->get_property()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                                result = true;                break;            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while (!result && (0 != current_transaction));    if (!result) {        CYG_ASSERT_CLASSC(toplevel);        for (conf_i = toplevel->conflicts.begin(); conf_i != toplevel->conflicts.end(); conf_i++) {            if ((node == (*conf_i)->get_node()) && (prop == (*conf_i)->get_property()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                                result = true;                break;            }        }    }    CYG_REPORT_RETVAL(result);    return result;}CdlConflictCdlTransactionBody::get_conflict(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::get_conflict", "result %p");    CYG_REPORT_FUNCARG4XV(this, node, prop, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    CYG_PRECONDITION_CLASSC(prop);    CdlConflict result = 0;    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_conflicts.begin();             conf_i != current_transaction->new_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) && (prop == (*conf_i)->get_property()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = *conf_i;                break;            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while ((0 == result) && (0 != current_transaction));    if (0 == result) {        CYG_ASSERT_CLASSC(toplevel);        for (conf_i = toplevel->conflicts.begin(); conf_i != toplevel->conflicts.end(); conf_i++) {            if ((node == (*conf_i)->get_node()) && (prop == (*conf_i)->get_property()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                                result = *conf_i;                break;            }        }    }    CYG_REPORT_RETVAL(result);    return result;}voidCdlTransactionBody::get_conflicts(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict), std::vector<CdlConflict>& result){    CYG_REPORT_FUNCNAME("CdlTransaction::get_conflict");    CYG_REPORT_FUNCARG4XV(this, node, prop, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    CYG_PRECONDITION_CLASSC(prop);    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_conflicts.begin();             conf_i != current_transaction->new_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) && (prop == (*conf_i)->get_property()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result.push_back(*conf_i);            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while (0 != current_transaction);    CYG_ASSERT_CLASSC(toplevel);    for (conf_i = toplevel->conflicts.begin(); conf_i != toplevel->conflicts.end(); conf_i++) {        if ((node == (*conf_i)->get_node()) && (prop == (*conf_i)->get_property()) &&            !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                        result.push_back(*conf_i);        }    }    CYG_REPORT_RETURN();}//}}}//{{{  get_structural_conflict() etc            // ----------------------------------------------------------------------------boolCdlTransactionBody::has_structural_conflict(CdlNode node, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::has_structural_conflict", "result %d");    CYG_REPORT_FUNCARG3XV(this, node, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    // Because it is necessary to check whether or not any given    // conflict has been cleared in the current transaction or any    // parent transaction, recursion into the parent is not    // appropriate.    bool result = false;    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_structural_conflicts.begin();             conf_i != current_transaction->new_structural_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = true;                break;            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while (!result && (0 != current_transaction));    if (!result) {        CYG_ASSERT_CLASSC(toplevel);        for (conf_i = toplevel->structural_conflicts.begin(); conf_i != toplevel->structural_conflicts.end(); conf_i++) {            if ((node == (*conf_i)->get_node()) && !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = true;                break;            }        }    }    CYG_REPORT_RETVAL(result);    return result;}CdlConflictCdlTransactionBody::get_structural_conflict(CdlNode node, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::get_structural_conflict", "result %p");    CYG_REPORT_FUNCARG3XV(this, node, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    CdlConflict result = 0;    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_structural_conflicts.begin();             conf_i != current_transaction->new_structural_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = *conf_i;                break;            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while ((0 == result) && (0 != current_transaction));    if (0 == result) {        CYG_ASSERT_CLASSC(toplevel);        for (conf_i = toplevel->structural_conflicts.begin(); conf_i != toplevel->structural_conflicts.end(); conf_i++) {            if ((node == (*conf_i)->get_node()) && !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result = *conf_i;                break;            }        }    }    CYG_REPORT_RETVAL(result);    return result;}voidCdlTransactionBody::get_structural_conflicts(CdlNode node, bool (*pFn)(CdlConflict), std::vector<CdlConflict>& result){    CYG_REPORT_FUNCNAME("CdlTransaction::get_structural_conflicts");    CYG_REPORT_FUNCARG3XV(this, node, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    std::list<CdlConflict>::const_iterator conf_i;    CdlTransaction current_transaction = this;    CdlToplevel    toplevel            = this->toplevel;    do {        CYG_LOOP_INVARIANT_CLASSC(current_transaction);                for (conf_i = current_transaction->new_structural_conflicts.begin();             conf_i != current_transaction->new_structural_conflicts.end();             conf_i++) {            if ((node == (*conf_i)->get_node()) &&                !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {                result.push_back(*conf_i);            }        }                    toplevel            = current_transaction->toplevel;        current_transaction = current_transaction->parent;    } while (0 != current_transaction);    CYG_ASSERT_CLASSC(toplevel);    for (conf_i = toplevel->structural_conflicts.begin(); conf_i != toplevel->structural_conflicts.end(); conf_i++) {        if ((node == (*conf_i)->get_node()) && !(this->has_conflict_been_cleared(*conf_i)) && (*pFn)(*conf_i)) {            result.push_back(*conf_i);        }    }    CYG_REPORT_RETURN();}boolCdlTransactionBody::has_structural_conflict(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::has_structural_conflict", "result %d");    CYG_REPORT_FUNCARG4XV(this, node, prop, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    CYG_PRECONDITION_CLASSC(prop);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?