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; }
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(); } }
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; }