| #pragma once | 
 |  | 
 | #include <array> | 
 | #include <fstream> | 
 | #include <iostream> | 
 | #include <sstream> | 
 | #include <string> | 
 |  | 
 | 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; | 
 |     } | 
 | }; | 
 | } // namespace slp |