コード例 #1
0
ファイル: txExecutionState.cpp プロジェクト: bgrins/gecko-dev
txExecutionState::~txExecutionState()
{
    MOZ_COUNT_DTOR(txExecutionState);

    delete mResultHandler;
    delete mLocalVariables;
    if (mEvalContext != mInitialEvalContext) {
        delete mEvalContext;
    }

    txStackIterator varsIter(&mLocalVarsStack);
    while (varsIter.hasNext()) {
        delete (txVariableMap*)varsIter.next();
    }

    txStackIterator contextIter(&mEvalContextStack);
    while (contextIter.hasNext()) {
        txIEvalContext* context = (txIEvalContext*)contextIter.next();
        if (context != mInitialEvalContext) {
            delete context;
        }
    }

    txStackIterator handlerIter(&mResultHandlerStack);
    while (handlerIter.hasNext()) {
        delete (txAXMLEventHandler*)handlerIter.next();
    }

    txStackIterator paramIter(&mParamStack);
    while (paramIter.hasNext()) {
        delete (txVariableMap*)paramIter.next();
    }

    delete mInitialEvalContext;
}
コード例 #2
0
txExecutionState::~txExecutionState()
{
    delete mResultHandler;
    delete mLocalVariables;
    delete mEvalContext;

    PRInt32 i;
    for (i = 0; i < mTemplateRuleCount; ++i) {
        NS_IF_RELEASE(mTemplateRules[i].mModeLocalName);
    }
    delete [] mTemplateRules;
    
    txStackIterator varsIter(&mLocalVarsStack);
    while (varsIter.hasNext()) {
        delete (txVariableMap*)varsIter.next();
    }

    txStackIterator contextIter(&mEvalContextStack);
    while (contextIter.hasNext()) {
        txIEvalContext* context = (txIEvalContext*)contextIter.next();
        if (context != mInitialEvalContext) {
            delete context;
        }
    }

    txStackIterator handlerIter(&mResultHandlerStack);
    while (handlerIter.hasNext()) {
        delete (txAXMLEventHandler*)handlerIter.next();
    }

    txStackIterator paramIter(&mParamStack);
    while (paramIter.hasNext()) {
        delete (txVariableMap*)paramIter.next();
    }
}
コード例 #3
0
ファイル: gcParser.cpp プロジェクト: deanm1278/gcParser
int gcParser::parseBlock(std::string block, std::vector<cmd> &cmds){
    
    static const boost::regex re_fullCmd("("                                    //for parsing the full gcode command
        "([GM]([0-9]{1,3})([ABCDEFHIJKLPQRUVWXYZ](\\+|\\-|\\.|[0-9])+)*)|"
        "([ABCDEFHIJKLPQRSUVWXYZFT]((\\+|\\-|\\.|[0-9])+)*)+"
        ")"),
        re_cmdNumber("[0-9]{1,3}"),                                             //for parsing the command number
        re_params("[ABCDEFHIJKLPQRSTUVWXYZF](\\+|\\-|\\.|[0-9])+");               //for parsing command parameters
    
    int i = strcspn (block.c_str(),";");                                   //remove comments
    block = block.substr(0,i);
    
    block.erase(std::remove_if(block.begin(),block.end(), ::isspace),block.end()); //remove whitespace
    
    boost::sregex_token_iterator iter(block.begin(), block.end(), re_fullCmd, 0);
    boost::sregex_token_iterator end;
    
    for( ; iter != end; ++iter ) {
        cmd a;
        a.letter = NO_LETTER;
        a.number = strtof("", NULL);
        
        std::string s = *iter;
        char letter = s.at(0); //get the command letter
        
        bool is_param = std::find(std::begin(paramLetters), std::end(paramLetters), letter) != std::end(paramLetters);
        
        if(!is_param){ //If this is a new command get the letter and number
            if(letter == 'G' || letter == 'M'){
                a.letter = letter;
                boost::smatch result;
                if (boost::regex_search(s, result, re_cmdNumber)) {
                    std::string submatch(result[0]);
                    a.number = strtof(submatch.c_str(), NULL);
                }
            }
        }
        boost::sregex_token_iterator paramIter(s.begin(), s.end(), re_params, 0);
        boost::sregex_token_iterator paramIterEnd;
        for( ; paramIter != paramIterEnd; ++paramIter ) {
            std::string p = *paramIter;
            char p_letter = p.at(0);
            a.params[p_letter] = strtof(p.substr(1, std::string::npos).c_str(), NULL);
        }
        a.priority = order[a.letter][a.number];
        cmds.push_back(a);
    }
    
    std::sort(cmds.begin(), cmds.end()); //sort according to priority
    
    return 0;
}