xref: /openbmc/slpd-lite/slp_service_info.hpp (revision 1a6b1c2b67e2277acbae2799cff92d0037bf4401)
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