1 /*
2  * Copyright (C) 2018-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #include "shared/source/utilities/debug_file_reader.h"
9 
10 namespace NEO {
11 
SettingsFileReader(const char * filePath)12 SettingsFileReader::SettingsFileReader(const char *filePath) {
13     std::ifstream settingsFile;
14 
15     if (filePath == nullptr)
16         settingsFile.open(settingsFileName);
17     else
18         settingsFile.open(filePath);
19 
20     if (settingsFile.is_open()) {
21         parseStream(settingsFile);
22         settingsFile.close();
23     }
24 }
25 
~SettingsFileReader()26 SettingsFileReader::~SettingsFileReader() {
27     settingStringMap.clear();
28 }
29 
getSetting(const char * settingName,int32_t defaultValue)30 int32_t SettingsFileReader::getSetting(const char *settingName, int32_t defaultValue) {
31     return static_cast<int32_t>(getSetting(settingName, static_cast<int64_t>(defaultValue)));
32 }
33 
getSetting(const char * settingName,int64_t defaultValue)34 int64_t SettingsFileReader::getSetting(const char *settingName, int64_t defaultValue) {
35     int64_t value = defaultValue;
36 
37     std::map<std::string, std::string>::iterator it = settingStringMap.find(std::string(settingName));
38     if (it != settingStringMap.end()) {
39         value = strtoll(it->second.c_str(), nullptr, 0);
40     }
41 
42     return value;
43 }
44 
getSetting(const char * settingName,bool defaultValue)45 bool SettingsFileReader::getSetting(const char *settingName, bool defaultValue) {
46     return getSetting(settingName, static_cast<int64_t>(defaultValue)) ? true : false;
47 }
48 
getSetting(const char * settingName,const std::string & value)49 std::string SettingsFileReader::getSetting(const char *settingName, const std::string &value) {
50     std::string returnValue = value;
51     std::map<std::string, std::string>::iterator it = settingStringMap.find(std::string(settingName));
52     if (it != settingStringMap.end())
53         returnValue = it->second;
54 
55     return returnValue;
56 }
57 
appSpecificLocation(const std::string & name)58 const char *SettingsFileReader::appSpecificLocation(const std::string &name) {
59     return name.c_str();
60 }
61 
parseStream(std::istream & inputStream)62 void SettingsFileReader::parseStream(std::istream &inputStream) {
63     std::string key;
64     std::string value;
65     std::string line;
66     std::string tmp;
67 
68     while (!inputStream.eof()) {
69         getline(inputStream, line);
70 
71         auto equalsSignPosition = line.find('=');
72         if (equalsSignPosition == std::string::npos) {
73             continue;
74         }
75 
76         {
77             std::stringstream ss;
78             auto linePartWithKey = line.substr(0, equalsSignPosition);
79             ss << linePartWithKey;
80             ss >> key;
81             if (ss.fail() || (ss >> tmp)) {
82                 continue;
83             }
84         }
85         {
86             std::stringstream ss;
87             auto linePartWithValue = line.substr(equalsSignPosition + 1);
88             ss << linePartWithValue;
89             ss >> value;
90             if (ss.fail() || (ss >> tmp)) {
91                 continue;
92             }
93         }
94 
95         settingStringMap.insert(std::pair<std::string, std::string>(key, value));
96     }
97 }
98 }; // namespace NEO
99