| #pragma once |
| #include <iostream> |
| #include <fstream> |
| #include <sstream> |
| namespace slp |
| { |
| struct ConfigData |
| { |
| std::string name; |
| std::string type; |
| std::string port; |
| |
| friend std::istream& operator>>(std::istream& str, ConfigData& data) |
| { |
| std::string line; |
| constexpr auto DELIMITER = " "; |
| size_t delimtrPos = 0; |
| size_t delimtrPrevPos = 0; |
| std::array<std::string, 3>tokens; |
| std::getline(str, line); |
| size_t count = 0; |
| |
| delimtrPos = line.find(DELIMITER, delimtrPrevPos); |
| while (delimtrPos != std::string::npos) |
| { |
| tokens[count] = line.substr(delimtrPrevPos, (delimtrPos - delimtrPrevPos)); |
| delimtrPrevPos = delimtrPos + 1; |
| |
| delimtrPos = line.find(DELIMITER, delimtrPrevPos); |
| if (delimtrPos == std::string::npos && delimtrPrevPos < line.length()) |
| { |
| delimtrPos = line.length(); |
| } |
| |
| count++; |
| } |
| |
| if (count > 2) |
| { |
| data.name = tokens[0]; |
| data.type = tokens[1]; |
| data.port = tokens[2]; |
| } |
| else |
| { |
| str.setstate(std::ios::failbit); |
| } |
| return str; |
| } |
| |
| }; |
| } |