rendered paste body/* Line IRC's parsing in cpp */#ifndef _C_PARSER_#define _C_PARSER_#include <iostream>#include <string>using namespace std;class c_parser{ private: string m_nick; string m_ident; string m_hostname; string m_type; string m_where; //pv (nick) or channel string m_msg; string m_pong; string m_parserError; public: c_parser(); ~c_parser(); bool parse(string buffer); string getnick(); string getident(); string gethostname(); string gettype(); string getwhere(); string getmsg(); string getpong(); string getParserError();};#endif/* constructor (erasing) */c_parser::c_parser(){ m_nick.clear(); m_ident.clear(); m_hostname.clear(); m_type.clear(); m_where.clear(); m_msg.clear(); m_pong.clear(); m_parserError.clear();}/* destructor (erasing) */c_parser::~c_parser(){ m_nick.clear(); m_ident.clear(); m_hostname.clear(); m_type.clear(); m_where.clear(); m_msg.clear(); m_pong.clear(); m_parserError.clear();}/* line's parsing */bool c_parser::parse(string buffer){ int a; /* erasing */ m_parserError.clear(); m_nick.clear(); m_ident.clear(); m_hostname.clear(); m_type.clear(); m_where.clear(); m_msg.clear(); m_pong.clear(); /* if PING */ if(buffer[0] != ':') { if(!buffer.compare(0, 6, "PING :")) { buffer.erase(0,6); m_pong = buffer; cout << "+PONG :"<<m_pong<<"+"<<endl; buffer.clear(); return true; } else return false; } /* m_nick search */ for(a = 0; buffer[a] != '!' && buffer[a] != '\0'; a++); if(buffer[a] == '\0') { m_parserError = "buffer's end was found before m_nick."; return false; } else m_nick = buffer.substr(1, a-1); buffer.erase(0,a+1); //erasing already read /* m_ident search */ for(a = 0; buffer[a] != '@' && buffer[a] != '\0'; a++); if(buffer[a] == '\0') { m_parserError = "buffer's end was found before m_ident."; return false; } else m_ident = buffer.substr(0, a); buffer.erase(0,a+1); //erasing already read /* m_hostname search */ for(a = 0; buffer[a] != ' ' && buffer[a] != '\0'; a++); if(buffer[a] == '\0') { m_parserError = "buffer's end was found before m_hostname."; return false; } else m_hostname = buffer.substr(0, a); buffer.erase(0,a+1); //erasing already read /* m_type search */ for(a = 0; buffer[a] != ' ' && buffer[a] != '\0'; a++); if(buffer[a] == '\0') { m_parserError = "buffer's end was found before m_type."; return false; } else m_type = buffer.substr(0, a); buffer.erase(0,a+1); //erasing already read /* m_where search */ for(a = 0; buffer[a] != ' ' && buffer[a] != '\0'; a++); if(buffer[a] == '\0') { m_parserError = "buffer's end was found before m_where."; return false; } else m_where = buffer.substr(0, a); buffer.erase(0,a+2); //erasing already read /* m_msg search */ m_msg = buffer; buffer.clear(); //erasing all (the rest) of bufferreturn true;}string c_parser::getnick(){ return m_nick;}string c_parser::getident(){ return m_ident;}string c_parser::gethostname(){ return m_hostname;}string c_parser::gettype(){ return m_type;}string c_parser::getwhere(){ return m_where;}string c_parser::getmsg(){ return m_msg;}string c_parser::getpong(){ return m_pong;}string c_parser::getParserError(){ return m_parserError;}int main(){ c_parser Parsing; string line1 = ":Co2SoFt!guest@3569536830.fr PRIVMSG #under :&op geeks nerds"; string line2 = "PING :irc.voila.fr"; string line3 = ":Co2SoFt!guest@3569536830.fr PRIVMSG #under :&op geeks nerds"; if(!Parsing.parse(line1)) cout<< "ERROR, invalid line: " <<Parsing.getParserError()<< endl; else { cout<< "first line :" << endl; cout<< "m_nick : +" <<Parsing.getnick()<<"+"<< endl; cout<< "m_ident : +" <<Parsing.getident()<<"+"<< endl; cout<< "m_hostname : +" <<Parsing.gethostname()<<"+"<< endl; cout<< "m_type : +" <<Parsing.gettype()<<"+"<< endl; cout<< "m_where : +" <<Parsing.getwhere()<<"+"<< endl; cout<< "m_msg : +" <<Parsing.getmsg()<<"+"<< endl; } cout<< endl; if(!Parsing.parse(line2)) cout<< "ERROR, invalid line: " <<Parsing.getParserError()<< endl; cout<< endl; if(!Parsing.parse(line3)) cout<< "ERROR, invalid line: " <<Parsing.getParserError()<< endl; else { cout<< "third line : " << endl; cout<< "m_nick : +" <<Parsing.getnick()<<"+"<< endl; cout<< "m_ident : +" <<Parsing.getident()<<"+"<< endl; cout<< "m_hostname : +" <<Parsing.gethostname()<<"+"<< endl; cout<< "m_type : +" <<Parsing.gettype()<<"+"<< endl; cout<< "m_where : +" <<Parsing.getwhere()<<"+"<< endl; cout<< "m_msg : +" <<Parsing.getmsg()<<"+"<< endl; cout <<endl; if(Parsing.getnick() == "MProg") cout << "MProg have a valid access !" << endl; }return 0;}