#ifndef CONFIG_H_
#define CONFIG_H_
#include <string>
#include <vector>
class Config {
private:
static std::vector<std::string> list;
static void update();
public:
static int initialize();
static void rewrite(std::string parametr, std::string value = "");
static std::string search_str(std::string parametr);
static int search_int(std::string parametr);
static bool search_bool(std::string parametr);
};
#endif /* CONFIG_H_ */
#include "Config.h"
#include <iostream>
#include <fstream>
std::ofstream w_config;
std::ifstream r_config;
std::vector<std::string> Config::list{
"title = NAME",
"window_mode = 0",
"width = 800",
"hight = 600"
};
void Config::update() {
std::cout << "Create file Config.ini" << std::endl;
w_config.open("Config.ini");
for (int a = 0; a < list.size() ; a++) {
w_config << list[a] << std::endl;
}
w_config.close();
}
int Config::initialize() {
r_config.open("Config.ini");
if (!r_config.is_open()) {
r_config.close();
std::cout << "Have not file Config.ini" << std::endl;
update();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
r_config.close();
std::cerr << "Failed open file Config.ini" << std::endl;
return -1;
}
else if (r_config.peek() == EOF) {
r_config.close();
std::cout << "File Config.ini empty" << std::endl << "Re-";
update();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
r_config.close();
std::cerr << "Failed open file Config.ini" << std::endl;
return -1;
}
else {
r_config.close();
std::cerr << "Open file Config.ini" << std::endl;
return 0;
}
}
void Config::rewrite(std::string parametr, std::string value) {
std::cout << "Rewrite the parameter in file Config.ini" << std::endl;
std::string str;
if (value == "") {
for (int a = 0; a < list.size(); a++) {
str = list[a].substr(0, list[a].find_first_of(' '));
if (str == parametr) {
value = list[a];
break;
}
}
}
else {
value = parametr + " = " + value;
}
bool i = 1;
w_config.open("Config_copy.ini");
r_config.open("Config.ini");
while (!r_config.eof()) {
std::getline(r_config, str);
if (parametr == str.substr(0, str.find_first_of(' '))) {
w_config << value << std::endl;
i = 0;
}
else if (str == "") {}
else {
w_config << str << std::endl;
}
}
if (i) {
w_config << value << std::endl;
}
w_config.close();
r_config.close();
w_config.open("Config.ini");
r_config.open("Config_copy.ini");
while (!r_config.eof()) {
std::getline(r_config, str);
if (str == "") {}
else {
w_config << str << std::endl;
}
}
w_config.close();
r_config.close();
std::remove("Config_copy.ini");
}
std::string Config::search_str(std::string parametr) {
std::string str;
for (int a = 0; a < 2; a++) {
r_config.open("Config.ini");
std::cout << "Search in file Config.ini -> " << parametr;
while (!r_config.eof()) {
std::getline(r_config, str);
if (parametr == str.substr(0, str.find_first_of(' '))) {
r_config.close();
str.erase(0, parametr.length() + 3);
break;
}
else {
str = "";
}
}
if (str == "") {
r_config.close();
std::cout << " -> not found" << std::endl;
rewrite(parametr);
}
else {
break;
}
}
std::cout << " = " << str << std::endl;
return str;
}
int Config::search_int(std::string parametr) {
std::string int_str = Config::search_str(parametr);
char* ch;
strtol(int_str.c_str(), &ch, 10);
if (*ch) {
std::cout << "Not the corect value" << std::endl;
rewrite(parametr);
int_str = search_str(parametr);
}
return stoi(int_str);
}
bool Config::search_bool(std::string parametr) {
std::string bool_str = search_str(parametr);
if (bool_str == "0") {}
else if (bool_str == "1") {}
else {
std::cout << "Not the corect value" << std::endl;
rewrite(parametr);
bool_str = search_str(parametr);
}
return stoi(bool_str);
}
#ifndef _Core_H_
#define _Core_H_
#include <iostream>
//убрать после создания класса обработки событий
#include <GLFW/glfw3.h>
#include "Config.h"
#include "Window.h"
#include "Graphic.h"
class Сore {
private:
static void get_system_parameters();
public:
static bool initialize();
static void run();
static void terminate(int code = 0);
};
#endif // !_Core_H_
include "Core.h"
struct Date {
std::string title;
bool fullskreen;
bool window_mode;
int width;
int height;
int render_API;
};
Date date;
void Core::get_system_parameters() {
std::cout << "Get system parameters" << std::endl;
//каждая функция Config::search пишет в консоль какую переменую ищет в файле и её значение
date.title = Config::search_str("title");
date.fullskreen = Config::search_bool("fullskreen");
date.window_mode = Config::search_bool("window_mode");
date.width = Config::search_int("width");
date.height = Config::search_int("height");
date.render_API = Config::search_int("render_API");
}
bool Core::initialize() {
if (!Config::initialize()) { terminate(1); }
//после инициализации конфига в консоль пишется что файл открыт
//в функции ниже заполняется переменные в структуре
get_system_parameters();
if (!Window::initialize()) { terminate(2); }
if (!Window::create_window(date.title, date.fullskreen, date.window_mode, date.width, date.height)) { terminate(3); }
if (!Graphic::initialize(date.render_API)) { terminate(4); }
return 0;
}
void Core::run() {
while (!Window::is_should_close()) {
//убрать после создания класса обработки событий
glfwPollEvents();
}
}
void Core::terminate(int code) {
Window::terminate();
Graphic::terminate(date.render_API);
exit(code);
}
#ifndef CONFIG_H_
#define CONFIG_H_
#include <string>
#include <vector>
class Config {
private:
static std::vector<std::string> list;
static void update();
public:
static size_t lot_list();
static int initialize();
static void rewrite(std::string parametr, std::string value = "");
static std::string search_str(std::string parametr);
static int search_int(std::string parametr);
static bool search_bool(std::string parametr);
};
#endif /* CONFIG_H_ */
#include "Config.h"
#include <iostream>
#include <fstream>
std::ofstream w_config;
std::ifstream r_config;
size_t Config::lot_list() {
return list.size();
}
std::vector<std::string> Config::list{
"title = NAME",
"window_mode = 0",
"width = 800",
"hight = 600"
};
void Config::update() {
std::cout << "Create file Config.ini" << std::endl;
w_config.open("Config.ini");
for (int a = 0; a < lot_list(); a++) {
w_config << list[a] << std::endl;
}
w_config.close();
}
int Config::initialize() {
r_config.open("Config.ini");
if (!r_config.is_open()) {
r_config.close();
std::cout << "Have not file Config.ini" << std::endl;
update();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
r_config.close();
std::cerr << "Failed open file Config.ini" << std::endl;
return -1;
}
else if (r_config.peek() == EOF) {
r_config.close();
std::cout << "File Config.ini empty" << std::endl << "Re-";
update();
r_config.open("Config.ini");
}
if (!r_config.is_open()) {
r_config.close();
std::cerr << "Failed open file Config.ini" << std::endl;
return -1;
}
else {
r_config.close();
std::cerr << "Open file Config.ini" << std::endl;
return 0;
}
}
void Config::rewrite(std::string parametr, std::string value) {
std::cout << "Rewrite the parameter in file Config.ini" << std::endl;
std::string str;
if (value == "") {
for (int a = 0; a < lot_list(); a++) {
str = list[a].substr(0, list[a].find_first_of(' '));
if (str == parametr) {
value = list[a];
break;
}
}
}
else {
value = parametr + " = " + value;
}
bool i = 1;
w_config.open("Config_copy.ini");
r_config.open("Config.ini");
while (!r_config.eof()) {
std::getline(r_config, str);
if (parametr == str.substr(0, str.find_first_of(' '))) {
w_config << value << std::endl;
i = 0;
}
else if (str == "") {}
else {
w_config << str << std::endl;
}
}
if (i) {
w_config << value << std::endl;
}
w_config.close();
r_config.close();
w_config.open("Config.ini");
r_config.open("Config_copy.ini");
while (!r_config.eof()) {
std::getline(r_config, str);
if (str == "") {}
else {
w_config << str << std::endl;
}
}
w_config.close();
r_config.close();
std::remove("Config_copy.ini");
}
std::string Config::search_str(std::string parametr) {
std::string str;
for (int a = 0; a < 2; a++) {
r_config.open("Config.ini");
std::cout << "Search in file Config.ini -> " << parametr;
while (!r_config.eof()) {
std::getline(r_config, str);
if (parametr == str.substr(0, str.find_first_of(' '))) {
r_config.close();
str.erase(0, parametr.length() + 3);
break;
}
else {
str = "";
}
}
if (str == "") {
r_config.close();
std::cout << " -> not found" << std::endl;
rewrite(parametr);
}
else {
break;
}
}
std::cout << " = " << str << std::endl;
return str;
}
int Config::search_int(std::string parametr) {
std::string int_str = Config::search_str(parametr);
char* ch;
strtol(int_str.c_str(), &ch, 10);
if (*ch) {
std::cout << "Not the corect value" << std::endl;
rewrite(parametr);
int_str = search_str(parametr);
}
return stoi(int_str);
}
bool Config::search_bool(std::string parametr) {
std::string bool_str = search_str(parametr);
if (bool_str == "0") {}
else if (bool_str == "1") {}
else {
std::cout << "Not the corect value" << std::endl;
rewrite(parametr);
bool_str = search_str(parametr);
}
return stoi(bool_str);
}