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