Ejemplo n.º 1
0
void Game::loadTalkTable(const Common::UString &tlk, const Common::UString &suffix,
                         Aurora::Language language, uint32 priority, ChangeList &changes) {

	Common::UString tlkM = tlk + DragonAge2Engine::getLanguageString(language) + suffix;
	Common::UString tlkF = tlk + DragonAge2Engine::getLanguageString(language) + suffix + "_f";

	changes.push_back(Common::ChangeID());
	TalkMan.addTable(tlkM, tlkF, false, priority, &changes.back());
}
Ejemplo n.º 2
0
//##############################################################################
//##############################################################################
uint64_t
BerkeleyDBCXXDb::version() const
{
    RANGE_LOG_FUNCTION();
    ChangeList changes = this->read_changelist();
    uint64_t version = changes.current_version();
    auto txn = current_txn_.lock();
    if(txn && txn->pending() > 0) {
        ++version;
    }
    return version;
}
Ejemplo n.º 3
0
//##############################################################################
//##############################################################################
uint64_t
BerkeleyDB::range_version() const
{
    RANGE_LOG_FUNCTION();
    this->init_info();
    std::string buf = info_->get_record(record_type::GRAPH_META,
            "range_changelist");
    if(!buf.empty()) {
        ChangeList changes;
        changes.ParseFromString(buf);
        return changes.current_version();
    }
    return 0;
}
Ejemplo n.º 4
0
//##############################################################################
//##############################################################################
void
BerkeleyDB::set_wanted_version(uint64_t version) {
    RANGE_LOG_FUNCTION();
    this->init_info();

    std::string buf = info_->get_record(record_type::GRAPH_META,
            "range_changelist");
    ChangeList changes;
    if(!buf.empty()) {
        changes.ParseFromString(buf);
    }


    for (uint32_t c_idx = changes.change_size() - 1; c_idx >= version; --c_idx) {
        for (int i_idx = 0; i_idx < changes.change(c_idx).items_size(); ++i_idx) {
            auto item = changes.change(c_idx).items(i_idx);
            graph_wanted_version_map_[item.key()] = item.version();
        }
    }
}
Ejemplo n.º 5
0
//##############################################################################
//##############################################################################
BerkeleyDB::range_changelist_t
BerkeleyDB::get_changelist()
{
    RANGE_LOG_FUNCTION();
    this->init_info();
    std::string buf = info_->get_record(record_type::GRAPH_META,
            "range_changelist");

    ChangeList changes;
    if(!buf.empty()) {
        changes.ParseFromString(buf);
    } else {
        return range_changelist_t();
    }

    range_changelist_t changelist;
    for (int c_idx = 0; c_idx < changes.change_size(); ++c_idx) {
        range_change_t c;
        std::time_t t;
        for (int i_idx = 0; i_idx < changes.change(c_idx).items_size(); ++i_idx) {
            auto item = changes.change(c_idx).items(i_idx);
            c[item.key()] = item.version();
            auto ts = changes.change(c_idx).timestamp();
            t = ts.seconds();
        }
        changelist.push_back(std::make_tuple(t, c_idx, c));
    }

    return changelist;
}
Ejemplo n.º 6
0
//##############################################################################
//##############################################################################
BerkeleyDBCXXDb::history_list_t
BerkeleyDBCXXDb::get_change_history() const
{
    RANGE_LOG_FUNCTION();
    ChangeList changes = this->read_changelist();
    history_list_t history_list;

    for (int v = 0; v < changes.change_size(); ++v) {
        ChangeList_Change v_change = changes.change(v);
        changelist_t clist;

        for (int i = 0; i < v_change.items_size(); ++i) {
            ChangeList_Change_Item item = v_change.items(i);
            record_type type = get_type_from_keyname(item.key());
            std::string key = item.key().substr(key_prefix(type).size());
            clist.push_back(std::make_tuple(type, key, item.version(), ""));
        }
        history_list.push_back(clist);
    }

    return history_list;
}
Ejemplo n.º 7
0
//##############################################################################
//##############################################################################
void
BerkeleyDB::add_new_range_version()
{
    RANGE_LOG_FUNCTION();
    this->init_info();
    auto lock = info_->write_lock(record_type::GRAPH_META, "graph_list");

    std::string buf = info_->get_record(record_type::GRAPH_META,
            "range_changelist");
    ChangeList changes;
    if(!buf.empty()) {
        changes.ParseFromString(buf);
    }

    std::unordered_map<std::string, uint64_t> vermap;
    for (auto &gname : listGraphInstances()) {
        auto ginst = getGraphInstance(gname);
        vermap[gname] = ginst->version();
    }

    ChangeList_Change *c = changes.add_change();

    for(auto &verinfo : vermap) {
        auto item = c->add_items();
        item->set_key(verinfo.first);
        item->set_version(verinfo.second);
    }

    struct timeval cur_time;
    gettimeofday(&cur_time, NULL);

    auto ts = c->mutable_timestamp();
    ts->set_seconds(cur_time.tv_sec);
    ts->set_msec(cur_time.tv_usec / 1000);

    changes.set_current_version(changes.current_version() + 1);
    info_->commit_record(std::make_tuple(record_type::GRAPH_META, "range_changelist", 0, changes.SerializeAsString()));
}
Ejemplo n.º 8
0
//##############################################################################
//##############################################################################
ChangeList
BerkeleyDBCXXDb::read_changelist() const
{
    RANGE_LOG_FUNCTION();
    std::string buf = this->get_record(record_type::GRAPH_META, "changelist");
    ChangeList changes;
    if(!buf.empty()) {
        changes.ParseFromString(buf);
        if(!changes.IsInitialized()) {
            THROW_STACK(DatabaseVersioningError("Changelist cannot be initialized"));
        }
        return changes;
    }
    changes.set_current_version(0);
    changes.mutable_change();
    changes.mutable_unknown_fields();
    return changes;
    //THROW_STACK(DatabaseVersioningError("Changelist cannot be read"));
}
Ejemplo n.º 9
0
uint32 ClingoPropagatorInit::init(uint32 lastStep, Potassco::AbstractSolver& s) {
	POTASSCO_REQUIRE(s.id() < 64, "Invalid solver id");
	int16 sId = static_cast<int16>(s.id());
	if (history_ && (step_ - lastStep) > 1) {
		for (History::const_iterator it = history_->begin(), end = history_->end(); it != end; ++it) {
			if (test_bit(it->second, sId)) { Change(it->first, AddWatch, sId).apply(s); }
		}
	}
	ChangeList changesForSolver;
	for (ChangeList::const_iterator it = changes_.begin(), end = changes_.end(); it != end; ++it) {
		if (it->sId < 0 || it->sId == sId) { changesForSolver.push_back(*it); }
	}
	std::stable_sort(changesForSolver.begin(), changesForSolver.end());
	for (ChangeList::const_iterator it = changesForSolver.begin(), end = changesForSolver.end(); it != end; ++it) {
		Lit_t lit = it->lit;
		// skip all but the last change for a given literal
		while ((it + 1) != end && (it + 1)->lit == lit) { ++it; }
		it->apply(s);
	}
	return step_;
}
void FieldContainer::subReferenceRecorded(void)
{
#ifndef OSG_FIELDCONTAINER_DEBUG_SILENT
    FINFO(("FieldContainer::subReference [%p] [%d] [%s] START - [%d %d]\n",
           this, this->getId(), 
           this->getType().getCName(),
           this->_iRefCount, 
           this->_iWeakRefCount));
#endif

    RefCountStore  tmpRefCnt   = osgAtomicExchangeAndAdd(&_iRefCount, -1);
    ChangeList    *pChangeList = Thread::getCurrentChangeList();

    if(tmpRefCnt <= 1)
    {
        pChangeList->incSubRefLevel();

        this->resolveLinks();

        pChangeList->decSubRefLevel();
        pChangeList->addSubRefd    (Inherited::getId());

        osgSpinLock(&_uiContainerId, SpinLockBit);

        RefCountStore tmpWeakRefCnt = OSG_AREAD(_iWeakRefCount);

        _uiContainerId |= DeadContainerBit;

        osgSpinLockRelease(&_uiContainerId, SpinLockClearMask);

        if(tmpWeakRefCnt <= 0)
        {
#ifdef OSG_MT_CPTR_ASPECT
            this->onDestroyAspect(Inherited::getId(), 
                                  Thread::getCurrentAspect());

            if(_pAspectStore->getRefCount() == 1)
            {
                this->deregister(Inherited::getId());
                this->onDestroy (Inherited::getId());
            }

            _pAspectStore->removePtrForAspect(Thread::getCurrentAspect());

            OSG::subRef(_pAspectStore);
            _pAspectStore = NULL;
#else
            this->deregister     (Inherited::getId()   );
            this->onDestroyAspect(Inherited::getId(), 0);
            this->onDestroy      (Inherited::getId()   );
#endif
            
            delete this;
        }
        else
        {
#ifndef OSG_FIELDCONTAINER_DEBUG_SILENT
            FINFO(
                ("FieldContainer::subReference [%p] [%d] [%s] STOP A [%d %d]\n",
                 this, 
                 this->getId(), 
                 this->getType().getCName(),
                 this->_iRefCount, 
                 this->_iWeakRefCount));
#endif
        }
    }
    else
    {
#ifndef OSG_FIELDCONTAINER_DEBUG_SILENT
        FINFO(
            ("FieldContainer::subReference [%p] [%d] [%s] STOP B [%d %d]\n",
             this, 
             this->getId(), 
             this->getType().getCName(),
             this->_iRefCount, 
             this->_iWeakRefCount));
#endif

        pChangeList->addSubRefd(Inherited::getId());
    }

}
Ejemplo n.º 11
0
void RemoteAspect::receiveSync(Connection &connection, bool applyToChangelist)
{
    bool                              finish    = false;
    UInt8                             cmd;
    FieldContainerFactoryBase        *fcFactory = FieldContainerFactory::the();
    FieldContainerVector              newContainers;
    RemoteAspectFieldContainerMapper  mapper;
    ChangeList                       *pChangeList =
        Thread::getCurrentChangeList();

    if(_statistics)
    {
        _statistics->getElem(statSyncTime)->start();
    }

    connection.selectChannel();
    connection.getValue(_remoteAspectId);

    // register mapper into factory
    mapper._remoteAspect = this;

    fcFactory->setMapper(&mapper);

    do
    {
        connection.getValue(cmd);

        switch(cmd)
        {
        case SYNCENDED:
        {
            finish = true;

#ifndef OSG_REMOTE_ASPECT_SILENT
            SLOG << "Receive SYNCENDED\n";
#endif
        }
        break;

        case NEWTYPE:
        {
            receiveNewType(connection, fcFactory);
        }
        break;

        case CREATED:
        {
            receiveCreated(connection, fcFactory, newContainers);
        }
        break;

        case CHANGED:
        {
            receiveChanged(connection, fcFactory);
        }
        break;

        case ADDREFED:
        {
            receiveAddRefed(connection, fcFactory, pChangeList);
        }
        break;

        case SUBREFED:
        {
            receiveSubRefed(connection, fcFactory, pChangeList);
        }
        break;

        case IDMAPPING:
        {
            receiveIdMapping(connection);
        }
        break;

        default:
        {
            SFATAL << "Unknown tag:" << Int32(cmd) << std::endl;
            throw RemoteSyncError();
        }
        }
    }
    while(!finish);

#ifndef OSG_REMOTE_ASPECT_SILENT
    PLOG << std::flush;
#endif

    pChangeList->commitDelayedSubRefs();

#ifdef OSG_DEBUG
    FieldContainerVector::const_iterator fcIt  = newContainers.begin();
    FieldContainerVector::const_iterator fcEnd = newContainers.end  ();

    for(; fcIt != fcEnd; ++fcIt)
    {
        if((*fcIt)->getRefCount() <= 1)
        {
            SWARNING << "New container type '" << (*fcIt)->getType().getName()
                     << "' local id '" << (*fcIt)->getId()
                     << "' remote id '"
                     << static_cast<UInt32>(_remoteFC[(*fcIt)->getId()])
                     << "' dies because of missing ref counts."
                     << std::endl;
        }
    }
#endif // OSG_DEBUG

    if(applyToChangelist)
    {
        Thread::getCurrentChangeList()->commitChanges(ChangedOrigin::Sync);
    }
    else
    {
        Thread::getCurrentChangeList()->commitChangesAndClear(ChangedOrigin::Sync);
    }

    // unregister mapper into factory
    fcFactory->setMapper(NULL);

    if(_statistics)
    {
        _statistics->getElem(statSyncTime)->stop();
    }
}
OSG_USING_NAMESPACE

/*! \class OSG::SortLastWindow
Cluster rendering configuration for sort first image composition
*/

/*----------------------------- static grouping functions -----------------*/

void SortLastWindow::buildGroups(void)
{
    UInt32            v          = 0;
    DrawableListT     drawables;
    UInt32            groupCount = 0;
    bool              rebuild    = false;

    // check for new nodes.
    FieldContainerFactoryBase *fcFactory = FieldContainerFactory::the();

    FieldContainer *fcPtr = NULL;

    ChangeList::ChangedStoreConstIt createdI;

    ChangeList *changeList = OSG::Thread::getCurrentChangeList();

    for(createdI  = changeList->beginCreated();
        createdI != changeList->endCreated(); 
        createdI++)
    {
        UInt32 uiId = (*createdI)->uiContainerId;

        fcPtr = fcFactory->getContainer(uiId);

        if(fcPtr != NULL && dynamic_cast<Node *>(fcPtr) != NULL)
            rebuild = true;
    }

    // is rebuild neccessary ?
    if(!rebuild && getMFGroupNodes()->size())
        return;

    groupCount = getMFServers()->size32();

    if(getComposer() != NULL)
    {
        groupCount = getComposer()->getUsableServers();
        if(getComposer()->getClientRendering())
            groupCount++;
    }

    // build groups for all viewports

    clearGroupNodes();
    editMFGroupLengths()->clear();

    for(v = 0; v < getMFPort()->size(); ++v)
    {
        Viewport *vp         = getPort(v);
        Node     *root       = vp->getRoot();

        drawables.clear();

        collectDrawables(root, drawables);

        if(drawables.size())
            splitDrawables(drawables, groupCount, false);
    }
}
Ejemplo n.º 13
0
void Game::unloadTalkTables(ChangeList &changes) {
	for (std::list<Common::ChangeID>::iterator t = changes.begin(); t != changes.end(); ++t)
		TalkMan.removeTable(*t);

	changes.clear();
}