/* =========================================================================== oastat - OpenArena stat program Copyright (C) 2010 Poul Sander (oastat@poulsander.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA =========================================================================== */ using namespace std; #include "oastatstruct.h" #include #include #include OaStatStruct::OaStatStruct() { second = 0; command = ""; parameters.empty(); restOfLine = ""; } OaStatStruct::OaStatStruct(const OaStatStruct& orig) { second = orig.second; command = orig.command; parameters = orig.parameters; restOfLine = orig.restOfLine; } OaStatStruct::~OaStatStruct() { } void OaStatStruct::parseLine(string line) { //Parse time //cout << line << endl; //try{ string tempTimeString = line.substr(0,7); int posColon = tempTimeString.find(":"); int minute = atoi(tempTimeString.substr(0,posColon).c_str()); second = atoi(tempTimeString.substr(posColon+1,7).c_str()); second+=minute*60; line = line.substr(7,line.length()); //Cut the first part of the string. //Parse command name: posColon = line.find(":"); command = line.substr(0,posColon); try{ line = line.substr(posColon+2,line.length()); //Also remove the colon and the first space after it (+2) posColon = line.find_first_not_of(" -0123456789"); //First non-number or space stringstream ss; ss << line.substr(0,posColon); int counter = 0; //to ensure that we don't go on forever while(ss && counter++<10) { int value; ss >> value; parameters.push_back(value); } if(line.at(posColon) == ':'){ posColon++; //There is some inconsistensy about then there is a colon here if(line.at(posColon) == ' ') posColon++; //If there is a colon there is likely a space } line = line.substr(posColon,line.length()); } catch(...) { //The last part does not always exist... ignore it restOfLine = ""; return; } restOfLine = line; } map OaStatStruct::GetInfostring(string restOfLine) { map list; int curPos = 0, lastPos = 0; bool iskey = true; string key, value; if(restOfLine[0] == '\\') lastPos++; while(lastPos(key,value)); if(key.length()>0) list[key] = value; //cout << key << ":" << value << endl; } iskey = !iskey; lastPos = curPos+1; } return list; } map OaStatStruct::GetInfostring() { return GetInfostring(restOfLine); }