⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transact.cxx

📁 eCos1.31版
💻 CXX
📖 第 1 页 / 共 5 页
字号:
        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()) && (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_structural_conflict(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::get_structural_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_structural_conflicts.begin();             conf_i != current_transaction->new_structural_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->structural_conflicts.begin(); conf_i != toplevel->structural_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_structural_conflicts(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict),                                             std::vector<CdlConflict>& result){    CYG_REPORT_FUNCNAME("CdlTransaction::get_structural_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_structural_conflicts.begin();             conf_i != current_transaction->new_structural_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->structural_conflicts.begin(); conf_i != toplevel->structural_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();}//}}}//{{{  clear_conflicts()                        // ----------------------------------------------------------------------------// Clearing a conflict. This can only happen in the context of a// transaction.voidCdlTransactionBody::clear_conflicts(CdlNode node, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAME("CdlTransaction::clear_conflicts");    CYG_REPORT_FUNCARG3XV(this, node, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    // Recursing into the parent is the wrong thing to do here, it    // would result in the conflict being cleared in the parent rather    // than in the current transaction.    std::list<CdlConflict>::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(); ) {            CdlConflict conflict = *conf_i++;            if ((node == conflict->get_node()) && !(this->has_conflict_been_cleared(conflict)) && (*pFn)(conflict)) {                this->clear_conflict(conflict);            }        }        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(); ) {        CdlConflict conflict = *conf_i++;        if ((node == conflict->get_node()) && !(this->has_conflict_been_cleared(conflict)) && (*pFn)(conflict)) {            this->clear_conflict(conflict);        }    }        CYG_REPORT_RETURN();}voidCdlTransactionBody::clear_conflicts(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAME("CdlTransaction::clear_conflicts");    CYG_REPORT_FUNCARG4XV(this, node, prop, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    std::list<CdlConflict>::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(); ) {            CdlConflict conflict = *conf_i++;            if ((node == conflict->get_node()) && (prop == conflict->get_property()) &&                 !(this->has_conflict_been_cleared(conflict)) && (*pFn)(conflict)) {                this->clear_conflict(conflict);            }        }        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(); ) {        CdlConflict conflict = *conf_i++;        if ((node == conflict->get_node()) && (prop == conflict->get_property()) &&            !(this->has_conflict_been_cleared(conflict)) && (*pFn)(conflict)) {            this->clear_conflict(conflict);        }    }        CYG_REPORT_RETURN();}voidCdlTransactionBody::clear_structural_conflicts(CdlNode node, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAME("CdlTransaction::clear_structural_conflicts");    CYG_REPORT_FUNCARG3XV(this, node, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    std::list<CdlConflict>::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();            ) {                        CdlConflict conflict = *conf_i++;            if ((node == conflict->get_node()) && !(this->has_conflict_been_cleared(conflict)) && (*pFn)(conflict)) {                this->clear_conflict(conflict);            }        }        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(); ) {        CdlConflict conflict = *conf_i++;        if ((node == conflict->get_node()) && !(this->has_conflict_been_cleared(conflict)) && (*pFn)(conflict)) {            this->clear_conflict(conflict);        }    }        CYG_REPORT_RETURN();}voidCdlTransactionBody::clear_structural_conflicts(CdlNode node, CdlProperty prop, bool (*pFn)(CdlConflict)){    CYG_REPORT_FUNCNAME("CdlTransaction::clear_structural_conflicts");    CYG_REPORT_FUNCARG4XV(this, node, prop, pFn);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(node);    std::list<CdlConflict>::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();            ) {                        CdlConflict conflict = *conf_i++;            if ((node == conflict->get_node()) && (prop == conflict->get_property()) &&                 !(this->has_conflict_been_cleared(conflict)) && (*pFn)(conflict)) {                                this->clear_conflict(conflict);            }        }        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(); ) {        CdlConflict conflict = *conf_i++;        if ((node == conflict->get_node()) && (prop == conflict->get_property()) && (*pFn)(conflict)) {            this->clear_conflict(conflict);        }    }        CYG_REPORT_RETURN();}//}}}//{{{  clear_conflict()                         // ----------------------------------------------------------------------------voidCdlTransactionBody::clear_conflict(CdlConflict conflict){    CYG_REPORT_FUNCNAME("CdlTransaction::clear_conflict");    CYG_REPORT_FUNCARG2XV(this, conflict);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(conflict);    // If this conflict was created during the transaction, it should    // be on the new_conflicts or new_structural_conflicts container    if (this == conflict->transaction) {        // The conflict should be on one of the two new_conflicts deques.        if (conflict->structural) {            std::list<CdlConflict>::iterator conf_i = std::find(new_structural_conflicts.begin(),                                                                  new_structural_conflicts.end(), conflict);            CYG_ASSERTC(conf_i != new_structural_conflicts.end());            new_structural_conflicts.erase(conf_i);        } else {            std::list<CdlConflict>::iterator conf_i = std::find(new_conflicts.begin(), new_conflicts.end(), conflict);            CYG_ASSERTC(conf_i != new_conflicts.end());            new_conflicts.erase(conf_i);        }        delete conflict;            } else {        if (conflict->structural) {            deleted_structural_conflicts.push_back(conflict);        } else {            deleted_conflicts.push_back(conflict);        }    }    CYG_REPORT_RETURN();}// ----------------------------------------------------------------------------boolCdlTransactionBody::has_conflict_been_cleared(CdlConflict conf){    CYG_REPORT_FUNCNAMETYPE("CdlTransaction::has_conflict_been_cleared", "result %d");    CYG_REPORT_FUNCARG2XV(this, conf);    CYG_PRECONDITION_THISC();    CYG_PRECONDITION_CLASSC(conf);        bool result = false;    CdlTransaction current_transaction = this;    do {        if (conf->structural) {            if (std::find(current_transaction->deleted_structural_conflicts.begin(),                          current_transaction->deleted_structural_conflicts.end(), conf) !=                current_transaction->deleted_structural_conflicts.end()) {                                result = true;            }        } else {            if (std::find(current_transaction->deleted_conflicts.begin(), current_transaction->deleted_conflicts.end(),                          conf) != current_transaction->deleted_conflicts.end()) {                result = true;            }        }        current_transaction = current_transaction->parent;    } while (!result && (0 != current_transaction));        CYG_REPORT_RETVAL(result);    return result;}//}}}//{{{  per-transaction data                     // ----------------------------------------------------------------------------// Accessing the per-transaction conflict data.const std::list<CdlConflict>&CdlTransactionBody::get_new_conflicts() const{    CYG_REPORT_FUNCNAME("CdlTransaction::get_new_conflicts");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    CYG_REPORT_RETURN();    return new_conflicts;}const std::list<CdlConflict>&CdlTransactionBody::get_new_structural_conflicts() const{    CYG_REPORT_FUNCNAME("CdlTransaction::get_new_structural_conflicts");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    CYG_REPORT_RETURN();    return new_structural_conflicts;}const std::vector<CdlConflict>&CdlTransactionBody::get_deleted_conflicts() const{    CYG_REPORT_FUNCNAME("CdlTransaction::get_deleted_conflicts");    CYG_REPORT_FUNCARG1XV(this);    CYG_PRECONDITION_THISC();    CYG_REPORT_RETURN();    return deleted_conflicts;

⌨️ 快捷键说明

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