1309ac445SRatan Gupta #pragma once 2537ff140SPatrick Venture 3537ff140SPatrick Venture #include <array> 4309ac445SRatan Gupta #include <fstream> 5537ff140SPatrick Venture #include <iostream> 6309ac445SRatan Gupta #include <sstream> 7537ff140SPatrick Venture #include <string> 8537ff140SPatrick Venture 9309ac445SRatan Gupta namespace slp 10309ac445SRatan Gupta { 11309ac445SRatan Gupta struct ConfigData 12309ac445SRatan Gupta { 13309ac445SRatan Gupta std::string name; 14309ac445SRatan Gupta std::string type; 15309ac445SRatan Gupta std::string port; 16309ac445SRatan Gupta operator >>(std::istream & str,ConfigData & data)17309ac445SRatan Gupta friend std::istream& operator>>(std::istream& str, ConfigData& data) 18309ac445SRatan Gupta { 19309ac445SRatan Gupta std::string line; 20309ac445SRatan Gupta constexpr auto DELIMITER = " "; 21309ac445SRatan Gupta size_t delimtrPos = 0; 22309ac445SRatan Gupta size_t delimtrPrevPos = 0; 23309ac445SRatan Gupta std::array<std::string, 3> tokens; 24309ac445SRatan Gupta std::getline(str, line); 25309ac445SRatan Gupta size_t count = 0; 26309ac445SRatan Gupta 27309ac445SRatan Gupta delimtrPos = line.find(DELIMITER, delimtrPrevPos); 28309ac445SRatan Gupta while (delimtrPos != std::string::npos) 29309ac445SRatan Gupta { 30*1a6b1c2bSPatrick Williams tokens[count] = 31*1a6b1c2bSPatrick Williams line.substr(delimtrPrevPos, (delimtrPos - delimtrPrevPos)); 32309ac445SRatan Gupta delimtrPrevPos = delimtrPos + 1; 33309ac445SRatan Gupta 34309ac445SRatan Gupta delimtrPos = line.find(DELIMITER, delimtrPrevPos); 35537ff140SPatrick Venture if (delimtrPos == std::string::npos && 36537ff140SPatrick Venture delimtrPrevPos < line.length()) 37309ac445SRatan Gupta { 38309ac445SRatan Gupta delimtrPos = line.length(); 39309ac445SRatan Gupta } 40309ac445SRatan Gupta 41309ac445SRatan Gupta count++; 42309ac445SRatan Gupta } 43309ac445SRatan Gupta 44309ac445SRatan Gupta if (count > 2) 45309ac445SRatan Gupta { 46309ac445SRatan Gupta data.name = tokens[0]; 47309ac445SRatan Gupta data.type = tokens[1]; 48309ac445SRatan Gupta data.port = tokens[2]; 49309ac445SRatan Gupta } 50309ac445SRatan Gupta else 51309ac445SRatan Gupta { 52309ac445SRatan Gupta str.setstate(std::ios::failbit); 53309ac445SRatan Gupta } 54309ac445SRatan Gupta return str; 55309ac445SRatan Gupta } 56309ac445SRatan Gupta }; 57537ff140SPatrick Venture } // namespace slp 58