Пример #1
0
evtcbnode_s *EvtcbQue::schedule(evtcb_pf cb,
                                evtcbhead_t *session, long lParam, void *pParam)
{
    evtcbnode_s *pObj = s_pCbnodePool->get();
    if (pObj)
    {
        pObj->m_callback = cb;
        pObj->m_pSession = session;
        pObj->m_lParam = lParam;
        pObj->m_pParam = pParam;
        if (session)
        {
            if (session->evtcb_head == NULL)
            {
                session->evtcb_head = pObj;
                m_callbackObjList.append(pObj);
            }
            else
            {
                m_callbackObjList.insert_after(session->evtcb_head, pObj);
                logState("schedule()][Header EXIST", pObj);
            }
        }
        else
            m_callbackObjList.append(pObj);
    }

    logState("schedule()", pObj);
    return pObj;
}
Пример #2
0
std::pair<ScoreType, ScoreType> CombatSimulation::simulateCombat()
{
	MicroSearch::GameState s1(state);
	MicroSearch::GameState s2(state);

	MicroSearch::PlayerPtr selfChase(new MicroSearch::Player_NOK_AttackDPS(getPlayer(BWAPI::Broodwar->self())));
	MicroSearch::PlayerPtr selfKiter(new MicroSearch::Player_KiterDPS(getPlayer(BWAPI::Broodwar->self())));

	MicroSearch::PlayerPtr enemyChase(new MicroSearch::Player_AttackClosest(getPlayer(BWAPI::Broodwar->enemy())));
	MicroSearch::PlayerPtr enemyKiter(new MicroSearch::Player_KiterDPS(getPlayer(BWAPI::Broodwar->enemy())));

	MicroSearch::Game gameOptimistic (s1, selfChase, enemyChase, 1000);
	MicroSearch::Game gamePessimistic(s2, selfChase, enemyKiter, 1000);

	gameOptimistic.playScripts();
	gamePessimistic.playScripts();
	
	ScoreType evalOptimistic =  gameOptimistic.getState().eval(Search::Players::Player_One, Search::EvaluationMethods::SumPureDPS).val();
	ScoreType evalPessimistic = gamePessimistic.getState().eval(Search::Players::Player_One, Search::EvaluationMethods::SumPureDPS).val();

	BWAPI::Broodwar->drawTextScreen(240, 280, "Optimistic : %d", evalOptimistic);
	BWAPI::Broodwar->drawTextScreen(240, 295, "Pessimistic: %d", evalPessimistic);

	if (evalOptimistic > 1000000 || evalOptimistic < -1000000)
	{
		logState(gameOptimistic.getState());
	}

	return std::pair<ScoreType, ScoreType>(evalOptimistic, evalPessimistic);
}
Пример #3
0
void CallbackQueue::removeObj(CallbackLinkedObj *pObj)
{
    if (!pObj)
        return;

    logState("removeObj()", pObj);
    if (pObj->next())
    {
        m_callbackObjList.remove(pObj);
        recycle(pObj);
    }
}
Пример #4
0
void EvtcbQue::removeObj(evtcbnode_s *pObj)
{
    if (!pObj)
        return;

    logState("removeObj()", pObj);
    if (pObj->next())
    {
        m_callbackObjList.remove(pObj);
        recycle(pObj);
    }
}
Пример #5
0
void CallbackQueue::run(CallbackLinkedObj *pFirstObj,
                        LsiSession *pSessionFilter)
{
    CallbackLinkedObj *pObj;
    CallbackLinkedObj *pObjNext;

    if (pFirstObj == NULL)
        pObj = (CallbackLinkedObj *)m_callbackObjList.begin();
    else
        pObj = pFirstObj;

    int count = m_callbackObjList.size();
    while (count > 0
           && pObj && pObj != (CallbackLinkedObj *)m_callbackObjList.end()
           && (!pSessionFilter || pObj->m_pSession == pSessionFilter))
    {
        pObjNext = (CallbackLinkedObj *)pObj->next();
        logState("run()", pObj);

        --count;

        m_callbackObjList.remove(pObj);

        assert(pObj->m_callback);
        if (pObj->m_callback)
            pObj->m_callback((lsi_session_t *)pObj->m_pSession, pObj->m_lParam,
                             pObj->m_pParam);
        else
            logState("run()][Error: NULL calback", pObj);

        /**
         * Comment: the above cb may release the data, so checking here to avoid
         * recycle again!
         */
        recycle(pObj);
        pObj = pObjNext;
    }
    assert((pFirstObj && pSessionFilter) || (count == 0));
}
Пример #6
0
/**
 * session is a filter. If NULL, run all in queue
 */
void EvtcbQue::run(evtcbhead_t *session)
{
    evtcbnode_s *pObj;
    evtcbnode_s *pObjNext;

    if (session == NULL)
        pObj = (evtcbnode_s *)m_callbackObjList.begin();
    else
        pObj = session->evtcb_head;

    assert(m_callbackObjList.size() > 0
           || (m_callbackObjList.begin() ==
               m_callbackObjList.end())); //WRONG state!!!


    while (m_callbackObjList.size() > 0
           && pObj && pObj != (evtcbnode_s *)m_callbackObjList.end()
           && (!session || pObj->m_pSession == session))
    {
        pObjNext = (evtcbnode_s *)pObj->next();
        logState("run()", pObj);

        m_callbackObjList.remove(pObj);

        if (pObj->m_pSession)
            pObj->m_pSession->evtcb_head = NULL;


        assert(pObj->m_callback);
        if (pObj->m_callback)
            pObj->m_callback(pObj->m_pSession, pObj->m_lParam,
                             pObj->m_pParam);
        else
            logState("run()][Error: NULL calback", pObj);

        recycle(pObj);
        pObj = pObjNext;
    }
}
Пример #7
0
CallbackLinkedObj *CallbackQueue::createObj(lsi_callback_queue_pf cb,
        LsiSession *session,
        long lParam,
        void *pParam)
{
    CallbackLinkedObj *pObj = m_callbackObjPool.get();
    if (pObj)
    {
        pObj->m_callback = cb;
        pObj->m_pSession = session;
        pObj->m_lParam = lParam;
        pObj->m_pParam = pParam;
    }
    logState("createObj()", pObj);
    return pObj;
}
Пример #8
0
void CallbackQueue::removeSessionCb(LsiSession *pSession,
                                    CBQSessionHeader &header)
{
    CallbackLinkedObj *pObj = header.get();
    CallbackLinkedObj *pObjNext;

    logState("removeSessionCb()][header state", pObj);
    while (pObj && pObj != (CallbackLinkedObj *)m_callbackObjList.end())
    {
        pObjNext = (CallbackLinkedObj *)pObj->next();
        if (pObj->m_pSession == pSession)
            removeObj(pObj);
        else
            break;
        pObj = pObjNext;
    }
    header.set(NULL);
}
// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
//
void MenuStatesTest::HsInstallationLogState_construction()
{
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
    __UHEAP_MARK;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
    {
        QState parentState1;
        parentState1.setObjectName(tr("testName1"));

        HsInstallationLogState logState(&parentState1);
        QString s1 = logState.objectName();
        QVERIFY(s1 == tr("testName1/InstallationLogState"));
    }
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
    __UHEAP_MARKEND;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
}
Пример #10
0
CallbackLinkedObj *CallbackQueue::scheduleSessionCb(lsi_callback_queue_pf
        cb,
        LsiSession *pSession,
        long lParam, void *pParam,
        CBQSessionHeader &header)
{
    CallbackLinkedObj *pObj = createObj(cb, pSession, lParam, pParam);
    if (pObj)
    {
        if (header.get() == NULL)
        {
            header.set(pObj);
            m_callbackObjList.append(pObj);
        }
        else
        {
            m_callbackObjList.append(header.get(), pObj);
            logState("scheduleSessionCb()][Header EXIST", pObj);
        }
    }
    return pObj;
}
Пример #11
0
void EvtcbQue::removeSessionCb(evtcbhead_t *session)
{
    if (m_callbackObjList.size() == 0)
    {
        session->evtcb_head = NULL;
        return;
    }

    evtcbnode_s *pObj = session->evtcb_head;
    evtcbnode_s *pObjNext;

    logState("removeSessionCb()][header state", pObj);
    while (pObj && pObj != (evtcbnode_s *)m_callbackObjList.end())
    {
        pObjNext = (evtcbnode_s *)pObj->next();
        if (pObj->m_pSession == session)
            removeObj(pObj);
        else
            break;
        pObj = pObjNext;
    }
    session->evtcb_head = NULL;
}
// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
//
void MenuStatesTest::HsInstallationLogState_onEntry()
{
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
    __UHEAP_MARK;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
    {
        QState parentState;
        HsInstallationLogState logState(&parentState);

        //test event
        QScopedPointer<HsMenuEvent> event(new HsMenuEvent(HsMenuEvent::ShowInstallationLog));

        logState.onEntry(event.data());

        checkDialogController();
    }
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
    __UHEAP_MARKEND;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
}
Пример #13
0
ParseTreeNode* Parser::parse() {
    log_.str("");
    states_.push(0);

    Token* token = nextToken();
    bool error = false, accepted = false, fatal = false;

    while ((! accepted) && (! fatal)) {
        if (debugging_) {
            log_ << "current token: " << ((token != 0) ? token->toString() : "NULL") << "\n";
            logState();
        }

        int state = states_.top();
        const int symbolID = ((token != 0) ? token->getTokenID() : -1);
        ParserAction* a = action(state, symbolID);

        if (a == 0) {
            log_ << "  parser error: no action was found for topmost state '" << state;
            log_ << "' and symbol '" << symbolID2String(symbolID) << "'!\n";
            delete a;
            continue;
        }

        switch (a->getType()) {
        case ParserAction::ACTION_TRANSITION:
            if (ParserActionTransition* t = dynamic_cast<ParserActionTransition*>(a)) {
                states_.push(t->getNextState());

                if (token != 0)
                    symbols_.push(new ParserSymbol(token));
                token = nextToken();
            }
            break;

        case ParserAction::ACTION_REDUCE:
            if (! reduce(dynamic_cast<ParserActionReduce*>(a)))
                fatal = true;
            break;

        case ParserAction::ACTION_ACCEPT:
            if (token != 0)
                symbols_.push(new ParserSymbol(token));
            token = 0;
            accepted = true;
            break;

        case ParserAction::ACTION_ERROR:
            logError(dynamic_cast<ParserActionError*>(a), token);
            //logState();
            fatal = true;
        // no break here
        default:
            delete token;
            token = nextToken();
            error = true;
            break;
        }   // switch

        delete a;
    }   // while (! accepted

    ParseTreeNode* root = 0;
    if ((accepted == true) && (error == false)) {
        log_ << "  accepted." << std::endl;

        if (nodes_.empty())
            log_ << " !!! Error: parse tree has no  root !!!" << std::endl;

        while (! nodes_.empty()) {
            if (root != 0)
                nodes_.top()->addChild(root);
            root = nodes_.top();
            nodes_.pop();
        }
    }

    cleanup();
    return root;
}