From 598d076cb158cd8e23563e79a3616d73d28e4036 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Wed, 26 Feb 2025 17:57:35 +0300 Subject: [PATCH 01/58] Server 0.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Реализованы заглушки функций --- echoServer.pro | 32 +++++++++++++++++++++++++++ func2serv.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++ func2serv.h | 12 +++++++++++ main.cpp | 9 ++++++++ mytcpserver.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ mytcpserver.h | 33 ++++++++++++++++++++++++++++ 6 files changed, 192 insertions(+) create mode 100644 echoServer.pro create mode 100644 func2serv.cpp create mode 100644 func2serv.h create mode 100644 main.cpp create mode 100644 mytcpserver.cpp create mode 100644 mytcpserver.h diff --git a/echoServer.pro b/echoServer.pro new file mode 100644 index 0000000..46b33c2 --- /dev/null +++ b/echoServer.pro @@ -0,0 +1,32 @@ +QT -= gui + +QT += network #Для работы с сетью + + +CONFIG += c++11 console +CONFIG -= app_bundle + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + func2serv.cpp \ + main.cpp \ + mytcpserver.cpp + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +HEADERS += \ + func2serv.h \ + mytcpserver.h diff --git a/func2serv.cpp b/func2serv.cpp new file mode 100644 index 0000000..b846c63 --- /dev/null +++ b/func2serv.cpp @@ -0,0 +1,49 @@ +#include "func2serv.h" +#include +#include + +using namespace std; +QByteArray parsing(QString input) + +{ + QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + QString var = container[0]; + if (var == "check_task") + { + return check_task(); + } + else if (var =="auth") + { + return auth(container); + } + else if (var =="reg") + { + return reg(); + } + else if (var == "get_stat") + { + return(get_stat()); + } + else + { + return "server error: unknow command\r\n"; + } +} + +QByteArray auth( QStringList log ){ + string res = "You succesfull logged in!\r\nWelcom to system: " + log[1].toStdString() + "\r\nYour password: " + log[2].toStdString()+"\r\n"; + QByteArray byteArray(res.c_str(), res.length()); + return byteArray; +} + +QByteArray reg(/*QStringList*/){ + return "you have been successfully registered\r\n"; +} + +QByteArray get_stat(/*QStringList*/){ + return "Your Statistic: null\r\n"; +} + +QByteArray check_task(/*QStringList*/){ + return "Task was succesful completed\r\n"; +} diff --git a/func2serv.h b/func2serv.h new file mode 100644 index 0000000..4282641 --- /dev/null +++ b/func2serv.h @@ -0,0 +1,12 @@ +#ifndef FUNC2SERV_H +#define FUNC2SERV_H + +#include + +QByteArray parsing(QString input); +QByteArray auth(QStringList ); +QByteArray reg(/*QStringList*/); +QByteArray get_stat(/*QStringList*/); +QByteArray check_task(/*QStringList*/); + +#endif // FUNC2SERV_H diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..1b2110a --- /dev/null +++ b/main.cpp @@ -0,0 +1,9 @@ +#include +#include "mytcpserver.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication a(argc, argv); + MyTcpServer myserv; + return a.exec(); +} diff --git a/mytcpserver.cpp b/mytcpserver.cpp new file mode 100644 index 0000000..2b9b8ca --- /dev/null +++ b/mytcpserver.cpp @@ -0,0 +1,57 @@ +#include "mytcpserver.h" +#include +#include +#include +#include "func2serv.h" +MyTcpServer::~MyTcpServer() +{ + + mTcpServer->close(); + //server_status=0; +} + +MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent){ + mTcpServer = new QTcpServer(this); + + connect(mTcpServer, &QTcpServer::newConnection, + this, &MyTcpServer::slotNewConnection); + + if(!mTcpServer->listen(QHostAddress::Any, 33333)){ + qDebug() << "server is not started"; + } else { + //server_status=1; + qDebug() << "server is started"; + } +} + +void MyTcpServer::slotNewConnection(){ + // if(server_status==1){ + mTcpSocket = mTcpServer->nextPendingConnection(); + mTcpSocket->write("Hello, World!!! I am echo server!\r\n"); + connect(mTcpSocket, &QTcpSocket::readyRead,this,&MyTcpServer::slotServerRead); + connect(mTcpSocket,&QTcpSocket::disconnected,this,&MyTcpServer::slotClientDisconnected); + // } +} + +void MyTcpServer::slotServerRead(){ + QString res = ""; + QByteArray array;// =mTcpSocket->readAll(); + while(mTcpSocket->bytesAvailable()>0) + { + array =mTcpSocket->readAll(); + /*if(array=="\x01") + { + mTcpSocket->write(res.toUtf8()); + res = ""; + } + else*/ + res.append(array); + } + qDebug()<<"server"<write(parsing(res)); + +} + +void MyTcpServer::slotClientDisconnected(){ + mTcpSocket->close(); +} diff --git a/mytcpserver.h b/mytcpserver.h new file mode 100644 index 0000000..cb39523 --- /dev/null +++ b/mytcpserver.h @@ -0,0 +1,33 @@ +#ifndef MYTCPSERVER_H +#define MYTCPSERVER_H +#include +#include +#include + +#include +#include +#include + +class MyTcpServer : public QObject +{ + Q_OBJECT +public: + explicit MyTcpServer(QObject *parent = nullptr); + ~MyTcpServer(); +public slots: + void slotNewConnection(); + void slotClientDisconnected(); + void slotServerRead(); +private: + QTcpServer * mTcpServer; + QTcpSocket * mTcpSocket; + //int server_status; +}; +#endif // MYTCPSERVER_H + + + + + + + From aef6a597efc2074d9a125fb708c2bc10c16ed913 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Wed, 26 Feb 2025 22:42:57 +0300 Subject: [PATCH 02/58] ver. 1.0 --- ...320\260\320\275\320\275\321\213\321\205.jpg" | Bin 0 -> 38707 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\320\241\321\205\320\265\320\274\320\260 \320\261\320\260\320\267\321\213 \320\264\320\260\320\275\320\275\321\213\321\205.jpg" diff --git "a/\320\241\321\205\320\265\320\274\320\260 \320\261\320\260\320\267\321\213 \320\264\320\260\320\275\320\275\321\213\321\205.jpg" "b/\320\241\321\205\320\265\320\274\320\260 \320\261\320\260\320\267\321\213 \320\264\320\260\320\275\320\275\321\213\321\205.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..02e12ed4f8833b668315e88849bb129f02ea7f10 GIT binary patch literal 38707 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 Date: Wed, 26 Feb 2025 22:53:55 +0300 Subject: [PATCH 03/58] version 0.2 --- func2serv.cpp | 137 +++++++++++++++++++++++++++++++++++++++++++++++++- func2serv.h | 12 +++++ 2 files changed, 147 insertions(+), 2 deletions(-) diff --git a/func2serv.cpp b/func2serv.cpp index b846c63..5f7397a 100644 --- a/func2serv.cpp +++ b/func2serv.cpp @@ -1,13 +1,19 @@ #include "func2serv.h" #include #include +#include + +// Заглушка для базы данных +QMap> mockDatabase = { + {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, + {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, +}; using namespace std; QByteArray parsing(QString input) - { QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user - QString var = container[0]; + QString var = container[0]; if (var == "check_task") { return check_task(); @@ -16,6 +22,9 @@ QByteArray parsing(QString input) { return auth(container); } + else if (var == "user" && container[2] == "get_products") { + return get_products(container); + } else if (var =="reg") { return reg(); @@ -24,6 +33,22 @@ QByteArray parsing(QString input) { return(get_stat()); } + else if (var == "admin" && container[1] == "dynamic_stat") { + return get_dynamic_stat(); + } + else if (var == "menu_export") + { + return menu_export(); + } + else if (var == "user" && container[2] == "add_favorite_ration") { + return add_favorite_ration(container); + } + else if (var == "admin" && container[1] == "get_all_users") { + return get_all_users(); + } + else if (var == "admin" && container[1] == "stable_stat") { + return get_stable_stat(); + } else { return "server error: unknow command\r\n"; @@ -47,3 +72,111 @@ QByteArray get_stat(/*QStringList*/){ QByteArray check_task(/*QStringList*/){ return "Task was succesful completed\r\n"; } +QByteArray menu_export(/*QStringList*/){ + return "Меню успешно экспортировано!\r\n"; +} + +void fetch_products_from_db(const QString& userId, QStringList& products) { + + if (mockDatabase.contains(userId)) { + products = mockDatabase[userId]; + } +} +QByteArray get_products(QStringList params) { + QString userId = params[1]; // ID пользователя + QStringList products; // Список продуктов + + + fetch_products_from_db(userId, products); + + + QString response; + for (const QString& product : std::as_const(products)) { + response += "prod//" + product + "\r\n"; + } + + return response.toUtf8(); +} +QByteArray get_all_users() { + QStringList users; + + // fetch_users_from_db(users); + + QString response; + for (const QString& user : users) { + response += user + "\r\n"; + } + + return response.toUtf8(); +} +int get_user_count() { + // Здесь будет SQL-запрос, пока заглушка + return 152; // Примерное значение +} + +int get_product_count() { + // Здесь будет SQL-запрос, пока заглушка + return 732; // Примерное значение +} +QByteArray get_stable_stat() { + + int userCount = 0; + int productCount = 0; + + userCount = get_user_count(); + productCount = get_product_count(); + + // Формируем строку ответа + QString response = "Users: " + QString::number(userCount) + "\r\n" + + "Products: " + QString::number(productCount) + "\r\n"; + + return response.toUtf8(); +} +int get_weekly_logins() { + // Заглушка, пока без БД + return 78; // Примерное значение +} + +int get_monthly_logins() { + // Заглушка, пока без БД + return 312; // Примерное значение +} +QByteArray get_dynamic_stat() { + int weeklyLogins = 0; + int monthlyLogins = 0; + + // Получаем данные из БД (пока заглушки) + weeklyLogins = get_weekly_logins(); + monthlyLogins = get_monthly_logins(); + + // Формируем строку ответа + QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + + "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; + + return response.toUtf8(); +} +QByteArray add_favorite_ration(const QStringList& container) { + QString userId = container[1]; // ID пользователя + QString rationId = container[2]; // ID рациона + + bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки + + if (success) { + return "Ration successfully added to favorites\r\n"; + } else { + return "Error: failed to add ration to favorites\r\n"; + } +} +bool add_ration_to_favorites(const QString& userId, const QString& rationId) { + qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; + return true; // Заглушка, потом заменить на SQL-запрос +} + + + + + + + + + diff --git a/func2serv.h b/func2serv.h index 4282641..9eca279 100644 --- a/func2serv.h +++ b/func2serv.h @@ -8,5 +8,17 @@ QByteArray auth(QStringList ); QByteArray reg(/*QStringList*/); QByteArray get_stat(/*QStringList*/); QByteArray check_task(/*QStringList*/); +QByteArray menu_export(/*QStringList*/); +QByteArray get_products(QStringList params); +QByteArray get_all_users(); +QByteArray get_stable_stat(); +int get_user_count(); +int get_product_count(); +QByteArray get_dynamic_stat(); +int get_weekly_logins(); +int get_monthly_logins(); +QByteArray add_favorite_ration(const QStringList& container); +bool add_ration_to_favorites(const QString& userId, const QString& rationId); +#include #endif // FUNC2SERV_H From c611ebdf0a324ee831a1cee1c1fe31eee33bd31f Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 27 Feb 2025 00:59:23 +0300 Subject: [PATCH 04/58] roles --- ...21\200\320\276\320\273\320\265\320\271.png" | Bin 0 -> 277855 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" diff --git "a/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" "b/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..e7de0c670398b5e0f714b510def4f246027df5a1 GIT binary patch literal 277855 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 e%e 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

cKxGE`yWh*r?vjB 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 z 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 Date: Thu, 27 Feb 2025 01:17:58 +0300 Subject: [PATCH 05/58] git struct --- ...272\321\202\321\203\321\200\320\260 Git.png" | Bin 0 -> 26562 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" diff --git "a/C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" "b/C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" new file mode 100644 index 0000000000000000000000000000000000000000..1556cfa2e62e1dd59113b8eb5f6b7433c0a77ad2 GIT binary patch literal 26562 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 Gg8v`&?fQBE literal 0 HcmV?d00001 From e1ea24a5b0977616e43dceabe4fe48ce8ded54ed Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Thu, 27 Feb 2025 09:50:29 +0300 Subject: [PATCH 06/58] ver. 0.220 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + Добавлена возможно подключения нескольких клиентов + Добавлены новые функции сервера --- server/echoServer.pro | 32 ++++++++ server/func2serv.cpp | 181 +++++++++++++++++++++++++++++++++++++++++ server/func2serv.h | 24 ++++++ server/main.cpp | 9 ++ server/mytcpserver.cpp | 72 ++++++++++++++++ server/mytcpserver.h | 34 ++++++++ 6 files changed, 352 insertions(+) create mode 100644 server/echoServer.pro create mode 100644 server/func2serv.cpp create mode 100644 server/func2serv.h create mode 100644 server/main.cpp create mode 100644 server/mytcpserver.cpp create mode 100644 server/mytcpserver.h diff --git a/server/echoServer.pro b/server/echoServer.pro new file mode 100644 index 0000000..46b33c2 --- /dev/null +++ b/server/echoServer.pro @@ -0,0 +1,32 @@ +QT -= gui + +QT += network #Для работы с сетью + + +CONFIG += c++11 console +CONFIG -= app_bundle + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + func2serv.cpp \ + main.cpp \ + mytcpserver.cpp + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +HEADERS += \ + func2serv.h \ + mytcpserver.h diff --git a/server/func2serv.cpp b/server/func2serv.cpp new file mode 100644 index 0000000..2898b70 --- /dev/null +++ b/server/func2serv.cpp @@ -0,0 +1,181 @@ +#include "func2serv.h" +#include +#include +#include + +// Заглушка для базы данных +QMap> mockDatabase = { + {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, + {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, + }; + +using namespace std; +QByteArray parsing(QString input) +{ + QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + QString var = container[0]; + if (var == "check_task") + { + return check_task(); + } + else if (var =="auth") + { + return auth(container); + } + else if (var == "user" && container[2] == "get_products") { + return get_products(container); + } + else if (var =="reg") + { + return reg(); + } + else if (var == "get_stat") + { + return(get_stat()); + } + else if (var == "admin" && container[1] == "dynamic_stat") { + return get_dynamic_stat(); + } + else if (var == "menu_export") + { + return menu_export(); + } + else if (var == "user" && container[2] == "add_favorite_ration") { + return add_favorite_ration(container); + } + else if (var == "admin" && container[1] == "get_all_users") { + return get_all_users(); + } + else if (var == "admin" && container[1] == "stable_stat") { + return get_stable_stat(); + } + else + { + return "server error: unknow command\r\n"; + } +} + +QByteArray auth( QStringList log ){ + string res = "You succesfull logged in!\r\nWelcom to system: " + log[1].toStdString() + "\r\nYour password: " + log[2].toStdString()+"\r\n"; + QByteArray byteArray(res.c_str(), res.length()); + return byteArray; +} + +QByteArray reg(/*QStringList*/){ + return "you have been successfully registered\r\n"; +} + +QByteArray get_stat(/*QStringList*/){ + return "Your Statistic: null\r\n"; +} + +QByteArray check_task(/*QStringList*/){ + return "Task was succesful completed\r\n"; +} +QByteArray menu_export(/*QStringList*/){ + return "Меню успешно экспортировано!\r\n"; +} + +void fetch_products_from_db(const QString& userId, QStringList& products) { + + if (mockDatabase.contains(userId)) { + products = mockDatabase[userId]; + } +} +QByteArray get_products(QStringList params) { + QString userId = params[1]; // ID пользователя + QStringList products; // Список продуктов + + + fetch_products_from_db(userId, products); + + + QString response; + for (const QString& product : std::as_const(products)) { + response += "prod//" + product + "\r\n"; + } + + return response.toUtf8(); +} +QByteArray get_all_users() { + QStringList users; + + // fetch_users_from_db(users); + + QString response; + for (const QString& user : users) { + response += user + "\r\n"; + } + + return response.toUtf8(); +} +int get_user_count() { + // Здесь будет SQL-запрос, пока заглушка + return 152; // Примерное значение +} + +int get_product_count() { + // Здесь будет SQL-запрос, пока заглушка + return 732; // Примерное значение +} +QByteArray get_stable_stat() { + + int userCount = 0; + int productCount = 0; + + userCount = get_user_count(); + productCount = get_product_count(); + + // Формируем строку ответа + QString response = "Users: " + QString::number(userCount) + "\r\n" + + "Products: " + QString::number(productCount) + "\r\n"; + + return response.toUtf8(); +} +int get_weekly_logins() { + // Заглушка, пока без БД + return 78; // Примерное значение +} + +int get_monthly_logins() { + // Заглушка, пока без БД + return 312; // Примерное значение +} +QByteArray get_dynamic_stat() { + int weeklyLogins = 0; + int monthlyLogins = 0; + + // Получаем данные из БД (пока заглушки) + weeklyLogins = get_weekly_logins(); + monthlyLogins = get_monthly_logins(); + + // Формируем строку ответа + QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + + "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; + + return response.toUtf8(); +} +QByteArray add_favorite_ration(const QStringList& container) { + QString userId = container[1]; // ID пользователя + QString rationId = container[2]; // ID рациона + + bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки + + if (success) { + return "Ration successfully added to favorites\r\n"; + } else { + return "Error: failed to add ration to favorites\r\n"; + } +} +bool add_ration_to_favorites(const QString& userId, const QString& rationId) { + qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; + return true; // Заглушка, потом заменить на SQL-запрос +} + + + + + + + + diff --git a/server/func2serv.h b/server/func2serv.h new file mode 100644 index 0000000..9eca279 --- /dev/null +++ b/server/func2serv.h @@ -0,0 +1,24 @@ +#ifndef FUNC2SERV_H +#define FUNC2SERV_H + +#include + +QByteArray parsing(QString input); +QByteArray auth(QStringList ); +QByteArray reg(/*QStringList*/); +QByteArray get_stat(/*QStringList*/); +QByteArray check_task(/*QStringList*/); +QByteArray menu_export(/*QStringList*/); +QByteArray get_products(QStringList params); +QByteArray get_all_users(); +QByteArray get_stable_stat(); +int get_user_count(); +int get_product_count(); +QByteArray get_dynamic_stat(); +int get_weekly_logins(); +int get_monthly_logins(); +QByteArray add_favorite_ration(const QStringList& container); +bool add_ration_to_favorites(const QString& userId, const QString& rationId); +#include + +#endif // FUNC2SERV_H diff --git a/server/main.cpp b/server/main.cpp new file mode 100644 index 0000000..1b2110a --- /dev/null +++ b/server/main.cpp @@ -0,0 +1,9 @@ +#include +#include "mytcpserver.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication a(argc, argv); + MyTcpServer myserv; + return a.exec(); +} diff --git a/server/mytcpserver.cpp b/server/mytcpserver.cpp new file mode 100644 index 0000000..1f8cd1b --- /dev/null +++ b/server/mytcpserver.cpp @@ -0,0 +1,72 @@ +#include "mytcpserver.h" +#include +#include +#include +#include "func2serv.h" + +MyTcpServer::~MyTcpServer() +{ + mTcpServer->close(); + server_status = 0; + qDeleteAll(mTcpSockets); // Удаляем все сокеты +} + +MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) +{ + mTcpServer = new QTcpServer(this); + + connect(mTcpServer, &QTcpServer::newConnection, + this, &MyTcpServer::slotNewConnection); + + if (!mTcpServer->listen(QHostAddress::Any, 33333)) { + qDebug() << "server is not started"; + } else { + server_status = 1; + qDebug() << "server is started"; + } +} + +void MyTcpServer::slotNewConnection() +{ + if (server_status == 1) { + QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); + mTcpSockets.append(clientSocket); // Добавляем сокет в список + + clientSocket->write("Hello, World!!! I am echo server!\r\n"); + + connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); + connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); + } +} + +void MyTcpServer::slotServerRead() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); // Получаем сокет, который отправил сигнал + if (!clientSocket) { + return; + } + + QString res = ""; + while (clientSocket->bytesAvailable() > 0) { + QByteArray array = clientSocket->readAll(); + qDebug() << array << "\n"; + if (array == "\x01") { + clientSocket->write(res.toUtf8()); + res = ""; + } else { + res.append(array); + } + } + clientSocket->write(parsing(res)); +} + +void MyTcpServer::slotClientDisconnected() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); // Получаем сокет, который отправил сигнал + if (!clientSocket) { + return; + } + + mTcpSockets.removeOne(clientSocket); // Удаляем сокет из списка + clientSocket->deleteLater(); // Удаляем сокет +} diff --git a/server/mytcpserver.h b/server/mytcpserver.h new file mode 100644 index 0000000..000880d --- /dev/null +++ b/server/mytcpserver.h @@ -0,0 +1,34 @@ +#ifndef MYTCPSERVER_H +#define MYTCPSERVER_H +#include +#include +#include + +#include +#include +#include + +class MyTcpServer : public QObject +{ + Q_OBJECT +public: + explicit MyTcpServer(QObject *parent = nullptr); + ~MyTcpServer(); +public slots: + void slotNewConnection(); + void slotClientDisconnected(); + void slotServerRead(); +private: + QTcpServer * mTcpServer; + QTcpSocket * mTcpSocket; + int server_status; + QList mTcpSockets; +}; +#endif MYTCPSERVER_H + + + + + + + From 27b08f562b608c254d0b3656daf2205ca52a51c1 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:15:45 +0300 Subject: [PATCH 07/58] Delete echoServer.pro --- echoServer.pro | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 echoServer.pro diff --git a/echoServer.pro b/echoServer.pro deleted file mode 100644 index 46b33c2..0000000 --- a/echoServer.pro +++ /dev/null @@ -1,32 +0,0 @@ -QT -= gui - -QT += network #Для работы с сетью - - -CONFIG += c++11 console -CONFIG -= app_bundle - -# The following define makes your compiler emit warnings if you use -# any Qt feature that has been marked deprecated (the exact warnings -# depend on your compiler). Please consult the documentation of the -# deprecated API in order to know how to port your code away from it. -DEFINES += QT_DEPRECATED_WARNINGS - -# You can also make your code fail to compile if it uses deprecated APIs. -# In order to do so, uncomment the following line. -# You can also select to disable deprecated APIs only up to a certain version of Qt. -#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - -SOURCES += \ - func2serv.cpp \ - main.cpp \ - mytcpserver.cpp - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -HEADERS += \ - func2serv.h \ - mytcpserver.h From e102a04dceedf8c4614ccd425618c322b318bd2c Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Thu, 27 Feb 2025 10:19:28 +0300 Subject: [PATCH 08/58] Delete func2serv.cpp --- func2serv.cpp | 182 -------------------------------------------------- 1 file changed, 182 deletions(-) delete mode 100644 func2serv.cpp diff --git a/func2serv.cpp b/func2serv.cpp deleted file mode 100644 index 5f7397a..0000000 --- a/func2serv.cpp +++ /dev/null @@ -1,182 +0,0 @@ -#include "func2serv.h" -#include -#include -#include - -// Заглушка для базы данных -QMap> mockDatabase = { - {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, - {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, -}; - -using namespace std; -QByteArray parsing(QString input) -{ - QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user - QString var = container[0]; - if (var == "check_task") - { - return check_task(); - } - else if (var =="auth") - { - return auth(container); - } - else if (var == "user" && container[2] == "get_products") { - return get_products(container); - } - else if (var =="reg") - { - return reg(); - } - else if (var == "get_stat") - { - return(get_stat()); - } - else if (var == "admin" && container[1] == "dynamic_stat") { - return get_dynamic_stat(); - } - else if (var == "menu_export") - { - return menu_export(); - } - else if (var == "user" && container[2] == "add_favorite_ration") { - return add_favorite_ration(container); - } - else if (var == "admin" && container[1] == "get_all_users") { - return get_all_users(); - } - else if (var == "admin" && container[1] == "stable_stat") { - return get_stable_stat(); - } - else - { - return "server error: unknow command\r\n"; - } -} - -QByteArray auth( QStringList log ){ - string res = "You succesfull logged in!\r\nWelcom to system: " + log[1].toStdString() + "\r\nYour password: " + log[2].toStdString()+"\r\n"; - QByteArray byteArray(res.c_str(), res.length()); - return byteArray; -} - -QByteArray reg(/*QStringList*/){ - return "you have been successfully registered\r\n"; -} - -QByteArray get_stat(/*QStringList*/){ - return "Your Statistic: null\r\n"; -} - -QByteArray check_task(/*QStringList*/){ - return "Task was succesful completed\r\n"; -} -QByteArray menu_export(/*QStringList*/){ - return "Меню успешно экспортировано!\r\n"; -} - -void fetch_products_from_db(const QString& userId, QStringList& products) { - - if (mockDatabase.contains(userId)) { - products = mockDatabase[userId]; - } -} -QByteArray get_products(QStringList params) { - QString userId = params[1]; // ID пользователя - QStringList products; // Список продуктов - - - fetch_products_from_db(userId, products); - - - QString response; - for (const QString& product : std::as_const(products)) { - response += "prod//" + product + "\r\n"; - } - - return response.toUtf8(); -} -QByteArray get_all_users() { - QStringList users; - - // fetch_users_from_db(users); - - QString response; - for (const QString& user : users) { - response += user + "\r\n"; - } - - return response.toUtf8(); -} -int get_user_count() { - // Здесь будет SQL-запрос, пока заглушка - return 152; // Примерное значение -} - -int get_product_count() { - // Здесь будет SQL-запрос, пока заглушка - return 732; // Примерное значение -} -QByteArray get_stable_stat() { - - int userCount = 0; - int productCount = 0; - - userCount = get_user_count(); - productCount = get_product_count(); - - // Формируем строку ответа - QString response = "Users: " + QString::number(userCount) + "\r\n" + - "Products: " + QString::number(productCount) + "\r\n"; - - return response.toUtf8(); -} -int get_weekly_logins() { - // Заглушка, пока без БД - return 78; // Примерное значение -} - -int get_monthly_logins() { - // Заглушка, пока без БД - return 312; // Примерное значение -} -QByteArray get_dynamic_stat() { - int weeklyLogins = 0; - int monthlyLogins = 0; - - // Получаем данные из БД (пока заглушки) - weeklyLogins = get_weekly_logins(); - monthlyLogins = get_monthly_logins(); - - // Формируем строку ответа - QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + - "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; - - return response.toUtf8(); -} -QByteArray add_favorite_ration(const QStringList& container) { - QString userId = container[1]; // ID пользователя - QString rationId = container[2]; // ID рациона - - bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки - - if (success) { - return "Ration successfully added to favorites\r\n"; - } else { - return "Error: failed to add ration to favorites\r\n"; - } -} -bool add_ration_to_favorites(const QString& userId, const QString& rationId) { - qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; - return true; // Заглушка, потом заменить на SQL-запрос -} - - - - - - - - - From e2dbd9ad895cb1549e20d40229dd7979b8af6869 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Thu, 27 Feb 2025 10:19:48 +0300 Subject: [PATCH 09/58] Delete func2serv.h --- func2serv.h | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 func2serv.h diff --git a/func2serv.h b/func2serv.h deleted file mode 100644 index 9eca279..0000000 --- a/func2serv.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef FUNC2SERV_H -#define FUNC2SERV_H - -#include - -QByteArray parsing(QString input); -QByteArray auth(QStringList ); -QByteArray reg(/*QStringList*/); -QByteArray get_stat(/*QStringList*/); -QByteArray check_task(/*QStringList*/); -QByteArray menu_export(/*QStringList*/); -QByteArray get_products(QStringList params); -QByteArray get_all_users(); -QByteArray get_stable_stat(); -int get_user_count(); -int get_product_count(); -QByteArray get_dynamic_stat(); -int get_weekly_logins(); -int get_monthly_logins(); -QByteArray add_favorite_ration(const QStringList& container); -bool add_ration_to_favorites(const QString& userId, const QString& rationId); -#include - -#endif // FUNC2SERV_H From b39773dd485caec45a3f64a401bd67a66bb3bc8a Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Thu, 27 Feb 2025 10:21:41 +0300 Subject: [PATCH 10/58] Delete main.cpp --- main.cpp | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 main.cpp diff --git a/main.cpp b/main.cpp deleted file mode 100644 index 1b2110a..0000000 --- a/main.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include "mytcpserver.h" - -int main(int argc, char *argv[]) -{ - QCoreApplication a(argc, argv); - MyTcpServer myserv; - return a.exec(); -} From 68a3d007b2dc3f48f7f169b80e7531c06afb363f Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Thu, 27 Feb 2025 10:22:01 +0300 Subject: [PATCH 11/58] Delete mytcpserver.cpp --- mytcpserver.cpp | 57 ------------------------------------------------- 1 file changed, 57 deletions(-) delete mode 100644 mytcpserver.cpp diff --git a/mytcpserver.cpp b/mytcpserver.cpp deleted file mode 100644 index 2b9b8ca..0000000 --- a/mytcpserver.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "mytcpserver.h" -#include -#include -#include -#include "func2serv.h" -MyTcpServer::~MyTcpServer() -{ - - mTcpServer->close(); - //server_status=0; -} - -MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent){ - mTcpServer = new QTcpServer(this); - - connect(mTcpServer, &QTcpServer::newConnection, - this, &MyTcpServer::slotNewConnection); - - if(!mTcpServer->listen(QHostAddress::Any, 33333)){ - qDebug() << "server is not started"; - } else { - //server_status=1; - qDebug() << "server is started"; - } -} - -void MyTcpServer::slotNewConnection(){ - // if(server_status==1){ - mTcpSocket = mTcpServer->nextPendingConnection(); - mTcpSocket->write("Hello, World!!! I am echo server!\r\n"); - connect(mTcpSocket, &QTcpSocket::readyRead,this,&MyTcpServer::slotServerRead); - connect(mTcpSocket,&QTcpSocket::disconnected,this,&MyTcpServer::slotClientDisconnected); - // } -} - -void MyTcpServer::slotServerRead(){ - QString res = ""; - QByteArray array;// =mTcpSocket->readAll(); - while(mTcpSocket->bytesAvailable()>0) - { - array =mTcpSocket->readAll(); - /*if(array=="\x01") - { - mTcpSocket->write(res.toUtf8()); - res = ""; - } - else*/ - res.append(array); - } - qDebug()<<"server"<write(parsing(res)); - -} - -void MyTcpServer::slotClientDisconnected(){ - mTcpSocket->close(); -} From 0d35491d2fa29f85403b2b667f4a7b14f94da1d0 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Thu, 27 Feb 2025 10:22:23 +0300 Subject: [PATCH 12/58] Delete mytcpserver.h --- mytcpserver.h | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 mytcpserver.h diff --git a/mytcpserver.h b/mytcpserver.h deleted file mode 100644 index cb39523..0000000 --- a/mytcpserver.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef MYTCPSERVER_H -#define MYTCPSERVER_H -#include -#include -#include - -#include -#include -#include - -class MyTcpServer : public QObject -{ - Q_OBJECT -public: - explicit MyTcpServer(QObject *parent = nullptr); - ~MyTcpServer(); -public slots: - void slotNewConnection(); - void slotClientDisconnected(); - void slotServerRead(); -private: - QTcpServer * mTcpServer; - QTcpSocket * mTcpSocket; - //int server_status; -}; -#endif // MYTCPSERVER_H - - - - - - - From 0f7daa0351f1f5bc851ccfab80b1b00441072f41 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:26:40 +0300 Subject: [PATCH 13/58] =?UTF-8?q?Delete=20C=D1=82=D1=80=D1=83=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D1=80=D0=B0=20Git.png?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...272\321\202\321\203\321\200\320\260 Git.png" | Bin 26562 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" diff --git "a/C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" "b/C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" deleted file mode 100644 index 1556cfa2e62e1dd59113b8eb5f6b7433c0a77ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26562 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 Gg8v`&?fQBE From bfef606cf8111721c203fc1341e7e9dc51846890 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:26:57 +0300 Subject: [PATCH 14/58] =?UTF-8?q?Delete=20=D0=A0=D0=B0=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9.png?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\200\320\276\320\273\320\265\320\271.png" | Bin 277855 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" diff --git "a/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" "b/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" deleted file mode 100644 index e7de0c670398b5e0f714b510def4f246027df5a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277855 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 e%e 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

cKxGE`yWh*r?vjB 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 z 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 Date: Thu, 27 Feb 2025 10:27:17 +0300 Subject: [PATCH 15/58] =?UTF-8?q?Delete=20=D0=A1=D1=85=D0=B5=D0=BC=D0=B0?= =?UTF-8?q?=20=D0=B1=D0=B0=D0=B7=D1=8B=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85.jpg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\260\320\275\320\275\321\213\321\205.jpg" | Bin 38707 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "\320\241\321\205\320\265\320\274\320\260 \320\261\320\260\320\267\321\213 \320\264\320\260\320\275\320\275\321\213\321\205.jpg" diff --git "a/\320\241\321\205\320\265\320\274\320\260 \320\261\320\260\320\267\321\213 \320\264\320\260\320\275\320\275\321\213\321\205.jpg" "b/\320\241\321\205\320\265\320\274\320\260 \320\261\320\260\320\267\321\213 \320\264\320\260\320\275\320\275\321\213\321\205.jpg" deleted file mode 100644 index 02e12ed4f8833b668315e88849bb129f02ea7f10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38707 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 Date: Thu, 27 Feb 2025 10:28:05 +0300 Subject: [PATCH 16/58] ver. 1 --- ...72\321\202\321\203\321\200\320\260 Git.png" | Bin 0 -> 26562 bytes ...21\200\320\276\320\273\320\265\320\271.png" | Bin 0 -> 277855 bytes ...20\260\320\275\320\275\321\213\321\205.jpg" | Bin 0 -> 38707 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 "docs/C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" create mode 100644 "docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" create mode 100644 "docs/\320\241\321\205\320\265\320\274\320\260 \320\261\320\260\320\267\321\213 \320\264\320\260\320\275\320\275\321\213\321\205.jpg" diff --git "a/docs/C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" "b/docs/C\321\202\321\200\321\203\320\272\321\202\321\203\321\200\320\260 Git.png" new file mode 100644 index 0000000000000000000000000000000000000000..1556cfa2e62e1dd59113b8eb5f6b7433c0a77ad2 GIT binary patch literal 26562 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 Gg8v`&?fQBE literal 0 HcmV?d00001 diff --git "a/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" "b/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..e7de0c670398b5e0f714b510def4f246027df5a1 GIT binary patch literal 277855 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 e%e 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

cKxGE`yWh*r?vjB z|A1>|q5@#6fjrP$&^-TSbX~hw#V7v5#OtcA%O7E z4{fM;DD!{jQat$=lr#-TQ_P{1RAE5>_WAPF-37qxKljqOIHxS~Dsbh%)y15~yF7Ss zpXz67irYLzNO(N`h8jIf{t6MG-xl#p+o`IZuo$mpEfo(3=X>fowj~E-^(RA+*7zfS z(cLb11jLUQXJndiv@ApIVeG2|kc82BS9hy3%1%^V&M|QtiX$I%PgIVTx&*N6vLX3D z+jv?t8MbMHEPJR0c>w-%CPU~JTewQ7Ua4;Ja{8~?Aa}$st?46+jJwKHpJjL40pgxz zOUmAo_jR^bpq{EzRfp=Ogc=EvM?{Z|G@TG-nWukVS;WG1fR|KRqF)fao475&c$_w{ z9WaTn-9P;gIMPf^FbQXVO^{5L6J6j!Es}=zsuh917v_0i0!ygmumzN8 zM;pKL0(j4|0Inh7|6T7=54=AJ;A0B26$Ai$X@m$}4bLh^5S^N(evMYiw%G?crbU%; z+TOYo!b;^~^4(jm!N1rYv;wNQR%JEBrr&G-pSu}w$Cg6B-4yudx>MxCi{!5$+Pc`C z-~HcR{Vy^~(x!uIeY#e(8a|)(cCKmddA&?U!_ZoRtP;;)Cjz;k-C~`T5W|Cx6H_KW zeEI#Mu-VUW93%_Kt9n`Z5@h)2^N#|%o-dwDzplian2w>)>FIqo*anZkQayT}J^aUGoXz%S!%-v0hN# z31nD*ji*3N#S$H#iFxH<2NU8Lofv0@h$#&^CA30LpAt-F> zzPy(rGKkhW+VI_6r_AH&z$VLk+ou;B7!27W7CWf@w(D0Me=oFGAlcT zG8M65V*v(%h6HM7zTV`PK;;Ft==SxPcu{xp?R(r+(_Yt|XS!n8)(Z32N4{z>oE)wE zEi6r3s6o*^$(WtsH@>VVtgLl{PV3QU01G<)e~)pfpjn|UM)>#8=nmi)w(LXaFkR!S zy*B(Kzc;nAJXW2m=8E=LmeIEpb)RPAHjEYCw%AU9q~UWqhWR@7m!(|OlX0Sh2;jT? z2i^h

}}DwY#DZc4&L4(*f{jtWPhYa({!(dqEfsG)lffJv5lh#VDR({_Fs?LPL!p zP09<>hN#oo!AK$iG;BMhOAibKBc*KL^f8&9EpDSO_2i%&!V^%!W}0Mz1P;*R9)Q%` z9t-qmHp%E|@pa#={eP_Mc<0HRMWz*ZqaagDT``4EKixf;uuX91e47Sr-)$K0H#P+O zUPY`Syr?ict{FfVPTxohfhgsnk}EJEPq5hZ-c4hq9?|TF05$aySdWGFl2%Ft%^g=KYmUoSZ%7wYJzYH3T2cc+AXy z=F{G9cDtZh>6R4aq4MTZK)lw)a4Y%MCCQcB7-HYf%5tAiwRo_hg^YZEeVdu7C#(YS z?`vTxub_zWg(KjlJ0V-wgg))m400YXcE^UXS*~jfCebiQiM4s%wEc=%5TdRkAA}X( zAtL{gXir0|_(@U9DBH*fg=$GAfSBfmO_FGh$Adw4Qox6XwHZ(Lz>yV(wg3TxeVd~I z@|K!w#dWuiu7ReuveuvKxDTfM(kwfUh=_2{D6_kvp22?F*rh2RjqIla0%NabDhEcskVn2ppI-oRtbZl%*gPH014ZBTeILy# zr1?!V4$&pcCYS5jQD9t>R(k7ekIA`mfF5Um!z=xKkM$5(GN*Cpmt*n=rz?9_%3#pW-mYpSqk7{%K?E*dZWYd>$kiI3 z?+Kftn%iFkSOeIe<6(QTGZo2~;VQXR$H8M6HEB_pY7)$4>Sv!g_`eaMvZfAjz_Th_ zG*dri$lv!nQ6uT_mS=#LA-B*lf8Ttfcwl?Z8xYjd4c#=j14p9O5oQnYS zBfUGG{TTo_=U%&)Ii<3y<$<2^`3ve?%l+C_IB?o5X9Z@Ofu+khYXW5mpPUQG*lyxI zil;dw-~3DKTar2}w}BCog{{XoCj(+1HUfP9TT^L(ehiRNaND;&rvy^KJYWjm+jH6q zHE{3bc8_i()`K#^MQd1Mg1J=-wcR6iuzX9SNW^B_GUmQXn?FIXZ63An?!Vu_;~y*S%m9{ho!;4}H~KIaE>{g{D}X~ok=t~2HFY%=<-7kDhJ5TIQq z3PJ=;M7}mRdJh+|T)tdMw)zTi7e=0-pLAL{1xM)yL?QtV5^HdO#znF}Inn4mpOfK_ z<0xse258ka%^N%g(9;z|)oUu#HCxBJ$H5obSSSwMKy?GOJ=$fW6MH& zU~6ECA0teT{V3P2B>*ow`V|{Z%P8%Eq_s&u23`ZAz{^C0k)*C}O{E_18P|&1{&nVZ z?{mPip^jA!IF2`Hzka$)bzQ3UK#sB3*CBH2f>Q3?>wJJ1x+|*gQz!Igwf0Ku9=oMu z2V!F?=^{gND2csN8E?Y=d0`*l<2`da{Qb%gfW?A-a|tMSzU!nuu9zMEM;G4v3aZBm znUv}P-$EXJ!WXaNky`hrIgyq@=gFVcQck1qH{##F&q)TfJYCEa#Tu;y`~ce7T?`=4 za}96~Aq;?JTOUB9Jn(<4!X7@B|AIR|PdClYa{uFf?^qPeU{+r`zbK#fc2)M3m*1bh zaNrsc8Eoq^u~>D;QuH-tM(!Kk51P#1MTii~w`E*MLvO7i`)}(l)+I`wp5fXek7`4J3jxdnsM?dg4G9ewp_xXIUp)$RP^bVt%-SqEuYWK@;3fHJLkRRs`2 zt$cuGSv)X{ve=SS+7D#uD$NC?zx&&(k;%oT{AQxmsyQ0S=*F0%3V7Jm^(^arK0#9y z+NdkxtspZ>>x&Kz$ydMVNXOrhGe}_Ol;dH2w{RB0Ftg*3CS}{XAfGi%7G6C_7x_Sp zYLIN|>fVRhh>0fCbT&sN7kq8Qguf7_XOK$|b!Qo6dUdj>27`P~A$iHur1?^&K%JXe zQ_YpzWbt9M3W_h8MoN^pdr}CntYx4-j-lnPo%MQb7fEvA2i!V)$~V zf(NgH^5`p@=D-VuNM;wXz70w-3zIs5CrVzBd?u1=36yYLVU!Y)a@DIHo;R5UXrP07 zj+cNJIIGl#B!2R;wpM(<3$&C5G6m{`55*8X=v+k-kUxDL5JlC$?e|bh7z=8n|J%8e zI9ci7-6dOXGXV3X?+dmnqhS9m$bBR`vvCjroSybJMU%Dv6d-f{WimiP#hgRhfGw96 zF)QG+RUi>E{#Q3ua5+!a?T)Eh;Dh5=3#)toZKC}Grm7r^fkg&9j$KNYJ7aFZLsg+NTZW9;r zCBr1@Oa;KC(OZJOa26bvtg6XFEsR8f8a5F%iHchDE!-F#P^h)ueRB zH-UL6;Ypc64C4!K-|vq^jWy4X?=jfy*w%qxO~o+GdJvK#AgmK*22UaqqZ)85&-YprbRjSLmDUF@qTo51u7dSxhb3wh&> z(rTXMIDA3{P>~&&C(CoQ)bxNhhZXUZS>0ECP(T}@)Hm;^)9VShX+)C2dPvvH&JeyV zeiQv=gVoXHw<5chRXEloK&63gMIz0j#%spzyvpZoh7&r56Zk#J3&B1Ba09sa6cU@R zn?%pb0YIctsRY|U*`UpH8{B56F=`DgnO1xY!=!pq31*L_Sa5-MS7a&iv|kN`sICVh z&H5Y(mxTbMhO08(QqE(D8-4z~YiFYVKknbz^ISDf97oD5pgTL0m7j_Q7(T*r-HZpj zogj}}1x+x<+iL$kIB$0*{Zk5B&MWU!vhJ)7eOqfj0_QlJl({zvQnF#Ix2AVy=3m9& zvMdgA)i&V(*a?W&Aa$U&;EpdS?XI3v^PZUrTe;Bh zX??{OQ1@9#<_Df04kiBiuh45_99Ru$Zt30A+PBDK5xV%+mo8la%moyy*-j$RnhaNS z0GmqC<$ahN_1K$Cp?2_Rgd5wTwRBxC=W3hs&EPMn?JpwGw7H-%Hl>r-N~}c-y5Fwf z4TB+1B4z<vSf1 z!Ux~6a2;_7t!1zBIoZs6Czv7i7tx|vz}BDa(y4|o0`OF6Z zlbsWlMrKcIkBbS!+?p>5iv@YpiIwh6WP+Tz&2z2y7|cjZ0aU+1dOP>!0rrY8V>SO^ zijJqmX`&Vy{L0e<>B>$CS zf1eZ3xHM$MTnbFJfx3vm;qc+j;;n1lHI>-gPX^eiC}-=z%!u}H*cCSWev66){blkwQJH83cGN5v~~DQgYD7_B+qz1E2n(0=pqhp36l%pYalbZV$D%XYPc z*w{a61nyvT@J*u9m;laD)_k=+^=x#T_2Gg?nd>;+C6&HBVRI>R;=7~9Nf|O401$yH z`)f&p6fqYkht)zVr8xtv*FgI3$+vQoyW3tsO_?pkFKXG(9qieoJsB$JJfPz4s$+aw-mG#@UiSFO+^)-c2?xk zA%<$`sTzyiDmNbCU>C^5+~S{Jgq`DU)Rs)=U6Qp`@MF>lcBo7+JK@C`?*z-xNEB!h zSlVGvYL#zierI`QCY+yY7>vtAHVpdmc2C62$39BPA5CalpMKSmKqsqdb^HM2E!*c@ z3rnw)FzzC$DR2!9I>Xlc8|{n+I~0dd zjNMN3y`JCKb)mmAUA>usR+YaoVKGl4rBm}de+E|NxZ!I5<`d4L9Fb5VY!(YHd(mkW z9KKOw4)gK1^+eu=`Dag9{M_Km)ctqX1siaOGVo zpb5@le9TY%N>3J_K;1R zbsL7Dnhu-IVXFgzZaBNu%`;uEF)AJwv5PUK^K0m0n-mdtvq<|imU>+Wv+-omo;d_M zGOvQ!9K717bW&1MEMQU=CCHR&(Fg787QD)?C(BGDDa}^*NL7t zrVCj)p!=!-f77V#8ujh$p*g_%qv*EpdZ0}GQSpof6P1dL;j2x(ye*5XR_sBNm z_7$)9$3RdSP4UlqNV7gPBR5ga!>E#M^hN3Q-uJb-xH2dZX+{%peNK|$3Zd+2l_tAoyq{?e7Qr8D?^XkoP6?3%fU5?`B3Gu)Nc=Z7O$wn zO4P=d_RTA;=AT>z%zH(6@q&p>hS7=M_+1=Kw-SXkJ2Ea9d7bI&=6ooA8OO@vJ%RO} zB|bD{jVn;974KN|t7rd%qosy@919G3zNQH^|6_}ET`*}MyO1a{5n6JHHend77r9ov zFr@P%ninoH?1R=6hf1gz%a=$Qmu4%k0_H8C9YwIJB57OSuL2+ ziMfY>k5MtKMh;l&j2TC#`s{NbgIjVMs_vp!6eoxrJG}#x_iT^n><4Yt9)0FazKr6-(aLvhy`%D~*p@tixBY@$y+l`PVPg(Q;2zwiiI3fj;)#q#h?U(Rs{u z5$$wz*dw`PlZt8L&gsOjMD$Wb`H`lK_d;@Py9)ZcC(b9c-m80)mCUGSI1Q1dtxD5X zW4Q(sX#x9pRJPl}jfOwSh_poIgF~|vI0a@W17#M^?_8&%Yxn?S!u-aT7FB=6i(X|Y znYp2e?^oLr;zA3G?ha~&F2qLz0;vXWKu-SKun_&`b~SyS7?6DOCq)S|8RF3GNk8b_ zo*T#mKPP2@TG!8w$_Xf5y|-^Vnx4f08AZ8yZ*;?Nwej>G*BsGw^(e%LtNoc`vsR|U z14I?WGq8V%vpI&dS?BxGryHt!^Qi+C+{K*Ef;#4Nx-(!Kxfp$ucel`UJNiq|0csxO zgFq?x*UXk%4?<@IR}q7nnj6PE`lWf=B+VDF#m7`|DCNinv5N~26g}4Gi%=U{=aGw= zL```ZYU%WoIm||GD*L5?id@<#MUm61)om5GdabWflF zt#p7mh1t`l$s>2Zy+50Nty!qekHT*O>;Wj4_HX0JXuRCZ$)Zb|fZC@?Q(I{8FyCq^ z7_8QLClcDhC49Kw@xjWX3{c4X824;&ZS{h{Tqo=;D8PJg0AY);s()K457}g@^1*x` znQwI8!917LrGUU}b?|-i#60fb%_eeIgRo%W8@{$09hh^rJ$7s&L$jMv%fz5w0AY`k^_l9T~Y7bfG)T;am98z~P4MgC1Qm zdHPpKFSF2IeoW)EJzo2Ho-Gq+JRg^iEW+|G;uW%(xVUSX0{tA>--}+@9}l+TA^rS` zjTKS=xaekI#J^1M$M)b+r`7-^V5kM?XO<=}EH}@+`PxYwidQeL%%t~%5D+;kfKins zQk!@_Ig$@}VZI>$0|X(Ei!gYItqrJuqUA8*gfZ(Vd^Cig-uS&08u^Y1K3oYy3IM-@ z*MR`I!oPp~9SIZoXMFz#4)zLtt&s+Nc;$;^cCQD>=(9ey!L}=pi|fsT5C0r#isC87 z#R}CBmL%@-QUHfKLc|)oX@08Kvz4f7MV`**iP(Jt5ngJz`+VpA{+J3rTf%smb^bFC zYkCV%15S?%p1X`;jqV&lPP}_#+1T}WC%x=0cJI9p{E)HLC{*tOrL!khEazKs&=!b2 zUFdt4+Wq%*FLD1Cg~Kb@er?`&c<|t?yfB6Hlb#wrele(vJc4#95?;?a9O<)FjKyII zvWpZzf(`dX};bU+!9HmTzlmGS;}i!F+rsovy(}oxbeJBVXkLe!XU>^eX4k4%XewSPPT|n&bCLV{izBb#5rEQ zYU7mg<^;lPS;2eu2qxWzx50SKj_H5LlnpcF?=WE$_@Be1`#0NoL;%$`tw1Z zC7Q!P@cPOiM?Qt`eE(Fyus=2`mcv~9`efbUwzPbAEMquL!k&cS^(Q^X>A7lqdyV=V zIrWT`0Z`?R_?Ko@4}9v57$y7p@MKFT4@k;vsr4Q$@qcbI?Ek*WuaHs0tM*T*Y5vLA z0#oUIe5sT21azz~_n@tZ1nvSA#{!rK2E z4v<)BRqD7sxZJswao59>Up}_Cwc2#L>z0{dg%WWM;84J!a8!&MGuyP!&ALxC7WSpT zZ37@4EgxTeOACb-tCJv@O8+AS;3oZ72oOyj$o2u{5XWwN zgfd5`{)RtYAO>(=uRC*wz`{LXxLUSsMQWS*=Y?rY%axB z8-C$U3aUN?2X@xmozrR8x`rMWzutreqD0FH3m((O2T|gNNdkdA=>>ex#f5o+&>ukj z1Dyy_%II%%YC8;{z+Y|Nb2x@>eXt zoA1AW2ToX0@87ZeKS%rC^etKCe;f)9;*BNzul3>IUlW1(_loeJ1Ny-M&&U7yACdn5 z6Z_8%`Ty1(qk5<2+-4aqC~Ug0Mhk>8KS4V3pGyHl$q{@e%3L?sk5g0m`(hI=mcxy6 z9{41J)B>U5UO%$e>GG!uyP4PBu|%|-z^ zPUJt$T~$d*6RWu@VYbaad;bHp=b_^J{#~n|Zyi&&f|i!Lsdtrtj6xB78AOkNk45li z_!*f%JT9Zg+y4qu%w&gEwyS?<`^BC*3I;}I(Ge2png|Cv(*KOvzi<9ungoF$|Dcjz zZ19+F1g%^#7wDE4egpDo~uXg{}+1osV8sVQ6TRKOzP!@=^?ET}{1`^^DT{Z|* zX&!i-4v3#H)EY-GUmf>jN?^RjnU0L+kS@;lc}u?M7eDW%Q+EVqff}_WD#l>fcCFK) zV>^`&dA!HO%hl~;o$++uL(T%9XLT=;9rZ~0G$-AL(dxE)9jx}T7N&kD#f(v5<^rH zLB|j#AhrZfezxt;=j&X43T!VX-Ag{%Iox8ik|+6-1JY+`9}+a!S5b81~{4BMhnee`N}TwiGeI zw}d_;u%zqPtb6~}kzT0U$?bf_4j*<++2ccJ&~a07mcYt7JA0I7x!F3W0aU(TTXTqS zH?SOZ)_xM|42KYmW&^(QFXQJBuat&s0Q`+e4!CZGz)=(P1iqQ~wkc6Axr{iK_kJ^7J(3@95X z_?ltg&vFi)i1s&mC)twnNxq;}j3jG_2zZt9gTgCSPT)R%^zW1Y#?Mutn+6i-A>cVW zHGaLFnRL}~4D8+c2gJoo%;9&Q3_q`(0LrP#Fbrf!?`b2b(*nKj zgsmITaXkRC^!fUP64z!&=&JH_w$hO?;!gI5?AM@34Bi!MB=@ttx6qVYc7;3(!lCbg z83w+G3e|S&+>H_T2f@vL~9Eto(4udzJjoKZ8E((aTrBSVonkKD_%UweclL z-(DorvMCoRMm+$|5H1t*11D(nhVNnFN=f6C>W!sDt$i~j0s>hCA*Y3qY0F4)lk;W) z|L3bCeO2^S&@efiEbO}lHJ)^2-X$=V}ZN^YN6kWde0re1nFmACu9X zK-DY(9J|}q_rFT|C{tv44@&CODq#O)tUTb-7nMcw&8SmT3wL z6;}*YUo_glr>)d@aG;Vw|X_VGQ(VzIj%p#Td{1$va*x=Ypy%1Km`%9=yecF}$DPhj*;}fF5KM%n_ra)a%=!oXLxja1NmhHS@6br&XH?W+@kRbwws05%~ z9m!wU%J@uxyEN1P?|@YFw74K(C=A(M1Bc=5UF(LlZw$ZZF;teimMOvzGhd#4GhlrL za?Fvd<5hK3O0S2zc!WgvlXqaAR;)JXlFTa4RyvWT12L27-^BqAmon0CWBbOzd=5rt z>UDeO*|hye#xZus==Z{}iu-TMr^E6@*2NltSLbQr@TiP)dwGk+AI z>P9nZ%33$xb9!92Z(6`Wn{s;+mzHqUPAecDjdhAjgew*7Vdd2aulh|`8b}C?wQmQc zmIp)or7qnbdMz=3gDSItd{7p#sLRqRH=}$^CWvQz>9guxa)>I-aid&iqmRD3W{d0# z8B#f43Xth_H#LYb@c8N+vWu65@wxp?xv9R~74XZnY3FX9`+{5YUjc>ptvnHi9t0y4 z)g&4!J>M6RjIV788Ya%FFOe-ku=cG0-w-*POG``3lp~=)`tDE)ET}{M3$#K#g|MH( z2*ifQTO+za`k&-`+=ndE8bzo)Pp2*yp3w#HC{2d|?;s78AE4Is|!;{b0K z^aDMDN=B-%@fhLuk;??Lwy^F5#X981Ch%q6kKhxOS^?6z%7BxN{#Nt2=NN)5KI(bq zC+mZQ+ra0{K-JqF==7F3ml|eb2|h^5#Bv&1YEAw0|HZO5B_gei=iE}j za&xgBt*bcvvHfF68jR&w?&YgZVG=d_6cVJb9;RuRZilur9ca5*X62pQ#RJD=Tvo(} zUEjT1d(MO{HoyKWfqXJ7n5d=~fx&h-k8lf^bAz{dI0nP_w6zcPAUm@KuXcuyPU?Dz zM&*7;5y8OKyEVmJnaEKN#ybN(79&T?tuCj5v`QI6_9VPTzq&GEZ${nf-A-W_Kz}r? za?sk@N-%Sc1_~eWX`zo|P>+y`q*)Ha0?)(GE%^JNciDh^x>H(e-vY|zfy+jzC^`j@ zQ*Con8ZwSux;09G2wq2T%ntn5r^M;~l6mab^cZ`A5?BGJv!2wZ>aA@7hPltpdD4p9 z?oZwo$dIo(1(K9C?@4MRG%SMrLY)h(>GRZA?;?&S*#Wx0QuCq4;6-mSDrpyI6KVDV`G%J%U8mv`zt?dRPB`;--mx*y~ffq-5n-D)z|K0^Q7=@tkA) ztz?UII%Qf05AMrS)6$Hy;Q%s4SBb~jGRt1jwh{NO>zD7F#J!S+WH0Pv4>{pxE<2>uv&K!ry13mk=uE0c=v-Ek;A5z} zm@$7so?Msx@l2+Q^z+bQ(J=V<^h(jS_G%pWr3^YkmdQBlu7EW18iI0Rt5^oX#^5Hy?D?2bX16YdoAGzq`OYFV{7e^1E~&ohUz=FC z*Ing^OFADt7x;_6r1h)J?}M7X=dT_dQZ`gH$TWXUvledjT-igcFOV|@Loc{%#zUpDa1D+dAENG z(d3WqL1mZXxKcmrv*^Xa&L`g4Ns0qC^E9sv&HiiWllpDBn#61t|4)6)0FRP=o4_wl zd-*=Y<21JRBOHXP-7GY-nS)~Mhn6X*Qdy?#R$g-uH3n3CW;_VOdLEQCk(lCjnUHx% zxCt&F^kdc1<-L^oXB1EX{-OP!N7+I$2gzY-*xN^Cl{=8}uApejdEx8{9>)3GS zdF*CN)Zqlw%T@mVZN3ExL?+&M_oN6SIEZB* z;+USvl*agP%-Fi)`3w_!Fx6hk0>~WG?@HWa4CN9V@GezPM8@AO9e%Y1i0|)bNi*rb zAJF+MknHGn@lNCT)a~pt8E@;*+O zJ&xEN6Fe91X|FZmNBIir(Vhae)Qs?G+et*c>kmmwsfVs^_=s)&S7or3nc?XRq$@v| z-7?Och;IwY1P*&BLFNlb_yik=0l1@1&unZbiLLWoY3r89A_F-PwirC1r>lht0KlR2 zifGz}ousR4sf;BqO^$BK8tpt``D5PP+i=G#znst4zkcOwiSF+T^d0LRW}C-nvrW{x7A&_eQX6lI)cSa?`HSGl?=@2o~xW5*b@@L=|Q+|!Vp z|G2}(HCx{W*O7Be;G0zC{kPk(t$ng7FJP@(QJvs>fzYd3_gMv3pok|3(JV$Y=gW;0qM`(neopKl^; zmlH`FsQBiV$mKeN*HXUHh}~%B<%KVbf9c4DXr}rR@<#q_FU-5Uu=t=)&~ztIQ{DdZ zxPnmn1t-2g>Ss&8(w136kjhg(HM}o7jZrdJJIC@F%Sk8uqx-1SyYC~oQTQjG$KH;A z%j@ly%tVz(x(xP?;0W!~y+Jc!PZAGhIO0hZQ+z-M^L&%(^oajZ)ik}jbFjcfj!tMR ze2KrU>+l?by4!Ve1cqHb&+D&>#dor^O*#A_te(ofIGfJNVXCGAyPeEWBP=mQj4n_- zACm>}hf8RGC*IU_7EU9!*L}v2%99(E&C|m4N`T#La8dG|G#9BJds z6(d5UkcZ@-(YqIP-iK%Kn6c2Bsn~2`n&lMmreG>2l1VwD+z0wbax&fk#rw2BcXJx! zGc=9gP|g7h@bVV?ZH~ zRifk|Ch34dsKAobTA$$#$0vr#?3vyK3L?~Btx8(q`n>oe_Pm-cVDS>s`-{l8Q5P30 z?7mAwpF7+ZSrM}sL%`KGLH!@IjMHN)0q=CI+p5$C6Q%>D{ZuJD#cPDQ^w(&Ghs3;( zESRSvG^pgxeME^NgcEsfh7K2`0`0L`HH@lviPrLo9M*`BuYJokt+g6EwiBmH4w1|^ zL{Pb%tTH{+;dlI+Uc}~fb=oq8Y9OiFGK}}&tU5ypA7`JcsfC?vNmOmq>G>f0%J!m)JL*@E%?QW1P}5UXY?^!4?}?2oE=1;ztt z;Z0IMjVT7E(N+_?0%zNq<8^?nkr85?sT2+R%1j|OQMGaN2M4M{^BX8gz$ z`F_!FF70c6Z{#yUmWxUiaw(2w_g44;%?TE&2;kE7){8Cii`F+j*-C5bpaLXx(rm3@ zpnXVrF&$j<5eCDLcZho&KF5{Vk0>f=!)Td)MUM+tM50X;AElY{%LEO(w7xMe=tk~C z9YTPM(L_(QoelICf)^S5oqJ*DS+8p(h}9vkZ%jd9FqZNqf0ED;Whi{~VU=a3g*Exv zURTA#l7v%ZpJ&XySfd`9YPx8b>rS8ggeUyY)cA2K*uM^oNt>I?9Cz0suX2--m;wF$ zeWcyQJ}xHXYos~-2pGcgn>m=Bxo3oxL;OZQk9s(!NqMtG6r>;mfaEtZ!Xh8 zB0c*DZ^m&H~F&zqY~+j zklRxT-sl^usuqgc?#{sDW{BVi)$QQx`H=hXswt3-^uOtQNY$kyS^ZG(7E;;4Am3R~ zM30Io-gwSu3Ovtnzekrq$if!tAOeCrzjOVC_HH4l@Bg}KIyHO%$1Nt@4M zWn=7`RCVo_B~PKti9F@-(A!`6)9)MI&-geB)P|y3y^>`FJ*IK#<}WC6?t6r=Mo7B259`^psEtHq#*p7yyBcYSg-8?Dh z@h{T%uQT6?GfI8>BWqY{gD;|SrOb_AceW`&Sb77;!I=1?Mi5sxx?nMt)m*Mt(N}_{ zV;U^5+M3VFu$8#2zl!}$Q&y|VEp-7M6Z|pi=V+$HxXq2Te)NQkdyyT#ff2FsgrfLO*`Dr*NjZKZaqw!0r0u#HPoCv>ESkkyI{OuLoSsgZ584Em$mYrJlwC6vIedzJsj?)U3Ivf|8)L_Q%Us!!#8Fj)G7uC}dgX=$Z<*vb*ddYa$BT%GH%5v( zyNqXAzu#A^k`Sqo)(J^4Yh@ycy{`HgKUEGnX5B2Io*=0e35ejG(D@HABm0EY81=_i zfAsTP+ZoSgw^YU;+{G<*X2*z>V`nPOK)5Nc?5R z*HqyM;Z`cMKI4u{8?rok>EZr}x83!-_wz=?s<-`+Im4f6x0RP@Zk4dNKQ{MOl-1LS zS|ILJUPoQ5DDR@ePGRF`ADFp5HKsasQcoe2{6_E|iJnhdt`QDb8Lz%ayOkZy!k8&) zLaLi9K|l9+K)z%pCtbE8iM5%6+eh=rrM#ub?G;NC-0AaV+3H6>>%&&AUX=8$|41_S zl#OOOSRCxp`zifI{QM^*3?5+Z`*AW=%-W3PeOgv#)=g^m!}WxeU=SZ7L) zX6ze-G7M0}x06ga4mV7)u>1%Q(g9(*8C~|O+quJW+)Rc&pUP}IO?NKO5zr3>-J25- zpx0|*e<>6oW!fNGTFouHH^YAoo$WDf_WONny76&SJkO+7rIX-nHO7*7ViuP9OkKDh zq0rX<0M3C?YtMbz#~_A}`o{HfFei=OFvUKf^Ya|Klb4yGpf6QFKiK{3Q_6WQ)2M3W z-iC96z5(a(FYQepj2#KV7h9+HhYzg}2F9sZRXDAk)|rEinyu^5CjyIZtPT%)1h?J- zoS1DBZu;nqH-j$EZl<8x9{Ji`o+aL_A=87L+~~9Wb=y3HeW5-V!j0{&i#tK79#pew zoFKaV4+dF%^Y$NzRpD12bxTO08g4--hREqWyo1AY_0d~x=|mPN$%8)Fdx9RonIX`nbYa{4Z*oI*hSt%RVlUZ!tl0o zUwPWxjOwA!5WoU{O@DEj+3a|X5+9pNEZ5QN2>rQKk~4SMO{&kBpM-@_pP%>+k zg7F3Fz3r-NUpw^(`PkmfAHLb)<_=4taW0Q-gg1^4RMr`YC!c!X|J=y`BOZlfU$wlt z&K=)hd{q9DT^WT_nB^>-Qp>pFGsJ!FN}qyvN?e>*G8n18+lLKGSRbGh*UnV^!4nf- zjZSj*1F8igZ_P%$_!99EzcaBDM3bCbvCVuYkAOFH!ggWHTs!6rti!DDhFA!TR(V~Y z7?LLG8Zl-XjY|*Zc;NA%EgvL>ZuBFu;^O=I8W+eDb*fR+&)>FYw~lgf%XqU#y4hb5 zGa>GQNpqt|>S%REvk8m2Aj0BuaHn4RecFoDH;&7?!%U}Pq>j_!+MO@XkKm{mCNX@6 z(g(&K)yMQKp>reQ@Ji5#!^*Mq+qM7QBr(SOG^0X;##jT_#V`q-HSQzD))T%1GlACg za?*Qz{U8L5JxSkpFD%ZG$f4xidR<7G)iwu61mo6)xltjEe&xr8Y3fy#??|7opG?~? zZ7HM3Ib~vI2$62q?++bIkCkiN-k6S{ql<32o*lX5s8VtzG~z2|!A5*Pt%+r_JX6KG zZnM6C#qD60|baqdn+3|uYNeMF!!caq6&u@}%HRtGesOxAk>mHkEeT#X%b;c6q z+;wdy3!P$=w&TLhD0i`SyR#D2xfS3UJ~CQ_4_W&zbRxuhyJ=^ry#`SnOkKq$Z<2Lc-sh70e&?MT4 zeCG(kv^f3TLilDfUa#RYPnV|zL4vPw+7x;LPLXAZ>(IoPH`Uw+W9dYERuY4Y$tOHY zwuGKg9&UwFZ~?Qw2Hq;$Wg6-iqr+7eQ3UJ$SykaT>9)NP#pc4)YCO=wgOb}EIG9_s zK33Us>9^yudK+Fyj${jnP9Mrt1-Hjk)Tjd^sy+=V4pPQ}PFU#GqwQTS+TkZdx*9H8 zIc!0XKn_?`9OtGe5r+62RZcS0HoZ~&WG0hSh@hvbh^Px27knAq<81?P{?#?V6dvwI zP^i(-?7rHT+lDw@C9sLi$p(Po4C~=&w^F9skiTOx4wAQ0y_qaT8^B%MA*1-+99mjT_NtypNnaZ|rJ+TEHze3`lN{|NHAM_!=3aU>Z{p1crMMsO8Dje<+ z)xRJ^7|RrQ$K1OZKl?YadG*^y7Ot4&%y(zMLm~elrcq%>p>A?zTlu;ml2@Tc8;bD* zl<;1IXr`K^g^#EE)w#yaavGgeo%@J-$^OeIn#f_Cpl&asFa>XSS^YEr;Ni&-<^|Wt zp0T7ZN7qfJ(u(2m3;oebv$$-A_w{xHH;*WclM+4RjdRG-xbuQYzjl?og^iiDHs2(p z-Cm^;WXmu2v9gCi`;C>;Z3IH}I;Py&tf<2|I*4bgQRF;M{2DpUyqQHv*aqiu5gdK^ za_a*9Eq_c-Ct8GJ&0YoA)U3Umi_KMuEhdi&-Jh5vP^{vjXKUsblCE5iNtl}eW%QOv zq`iH%{<-}Lf?0m&p<`uegL}yp_on5tq^8Rr-DN*qY(14~s#UGKZR>zIc0QYw?h}hh-NPK^3fl4ScDGglJFc~d|j9L{S%zb zq#NpaB&uM^v937Y7#h?H>RV8$)F3fxKS~XugtOjGzOX-`PeHkL`s$oFaH}Wr<61n z43m3@&dZmy<`O=&GHJN0==zW{5eKtK`koevbHOk2a(Id&YG@G7ChlcKOQV>MCgc0% z?X>cw?_W8|x&4mhOif{sh@o%v2k7Gs;5X0)M91+EON8+4_g0gPhQBkNYxCr7vX;FU zw%DNDz=EsW3g1!kJ@7ri4Ey*rw!Lj@NpSed_({@ma;#(Gwus*UrjbztyOfyMWImEU zSRbN4j1MOrW^48mT7~MTE9Cmsa!VY0|C>Hkojo!vU^%QQ5SE>4ZOEH7Ty>v5VV~hkTc7NToP^(eA9W%;<;Aj|XLCdXG50c0-Qy zc6TT;Cf87vI6s(f8bUZ#8@2p`#Q$VmU?=E4CR^){4K%xCRxmnCEJDF`OO@hjH1N|& z6g~dX8fNx%=<{?z-6bria@-uZ>N^;B&b2M-HGlbE9MK|S`G#m^A;z+bTGYAf6@K&u zfEQp$+R0ES6elxqOdo<|4tSDLdvWvU-ZS&vvZI>V4Ctdni6|lsC%>C?yZUhRc@Jji zwudcVkWcK)IQr_Cdv!gWIvuv=qIMZ`CyMs zUUwkh7NQo1EYwWJ6}ygYrRkW+6{r2SE2pLRX;^V{b(5Oc&AoMjmh2gif3exaTSHQe zc(y6#``yNQKBHdFy^In6(<3AEEDTN)#Z ze7j zL^UkxU>JNznAoB1TiGbp^YS_iwjsB`O-@A%FkmU*u#>gDD6jY-W; znbqyztf48Tso;%lwGim~t2Ll}KEVBG&$j?q-85U(?x#o$6fM(;%t0R6yDI8PGZBLPg3IN68md4Mb-FaCSDqDUzxNU+l{bn>atJ?%k^nR zsyx@=dq^3JcHj|y>3tj#}(2&gPp)85rYg`+#z#y-|go)Aj zA8)N9Fjk!)>wB{|(=LbH?&Gaoi!A(cJAk>VAm@3AFfXn~v2O?C8jIRz7G%_qP!@_z z_fC}7N9>k17!%L^-!g5od`o*_hL{t8E|>u2p$lxC*G zR3~&o*H$tnx^`KLLyHXBiKY2hp_m+s*dU)Gn7}sLa}|!ZP1o|E5!U(&22J3K3)+kM zm3XMfILP~$APMB}wV>~)ds|+pn6Uo7on1PPX9#I$T~f1oZ&G?VX`Xf0`g^;12D?ft zL89bTEzPqmjs0gabc`9I0h@c%>cMfque{g8Unw{nqViBVAVJ%a&;PR1g33bz| z8|(ude0!rlnbc$}{cWWE>+!tVO0QDvrc?LX<2nWFJ%s6!s2R`IU4s^49lpbtF$QO5 zs*?7%7-8jv%!q2r>7*F7$Lmfd^G~IT-A>h6sEHcax-QZ^mW1DKAe*eEde~d!ceJQ} z9!0dxrXE_tzfTbLZp*RMy)oGMhZKGX`l76A?~r@`-MxU~ize|Tbkt~Y=LrDTI}*Tj zBNGVW?XGk(EvD^0bDN_7Rg-Kiz+kNIGz%~ZrI|l)Sppm}f$G9`xEknECbH1FV+2hep-mi|@|1iQt`@DGOrD8K-vSct6qUH{PmN}W zOx4e<(oUN7#O^X{9edUHb6+xyav~^9Cl?tHFjo*@Vsy5KXfVc|`>JVwFel5Y%%p>8 z)Fd^P`(<9!q#%|G9tJqnV-B>OeL>zkBh|c)r+*Qu{kR(ZvAkn+DHf|DDas9|LgHAR z*Uvif3wft3`35c8tIsvm?zFilLRn~T`IyxbVO^2=UeMUa%&1ZJ4Vd)+8tM7-u7j4= zR$2zW4Lm_7wp0c4R?xzbZ8Dt7?s?}-cr|TY2Kp6t=Bi8S&ljkt2+N&qWF`B+-j^4M zam&s#T_Qi!$Q%zl1CE4H1P?g%KPC@UB3a)_O!J@nKRpmnowJ8_W8K4F*Mz#9X8QEb zUTbI*uei3S>L78dw2}PzcY}xU?!f4szEO5j3RP6@OIQsT5)I0G>))z(eNvtH z$M6#-mn9Mv`OwI0_Xd)(f3)6K!n8(d@0a( zO--I0iN-1{HPI1+^=7j|_hHH5a*BMfb^``aF*MAUc1Z_q)T&{V3b%0^M0RnGr%dZ~ zJ7CxqEUnUhX=w#zrktQTE5+{Q^^xmr%FDB_#<#!6`tw+soA4-V#l zh$Imir`e;<9hr6Hw_D$ujoe$>I6q(q%Dt?Uc|cZm2{os5wOOT`eT%x|T~UyO=z@h% zCAf1bITvu|79%ph`(o!IAMB1|B!NxLrKIP;WHXi<)mA1)kKT`X)_gH;^=ev?33cisT3t0kcMyNO=$^C@|`mG939vYPH7`kKV zA&1(_=Xl>|@BL*y@M(_4x@WEX{$1yJ?LIlCO?ENuEAJ>PEwg?r2nE$n>}+c7^g&84L)TSm+jDD zX~(Nw4jtki(9~V=+)Y^AH5Zli{{ZQenP3jSR(iOAkRWS(q{en5jhG-(eEw&b+GycL zX54pXGve)SiALmU{o6ObY`9cVlv^&N)1Hj}jIS;f;PjdYk?2*|nB7Gt_}FBnS+dzM z*Vc272d(wFSbUe}z8ldDqlIVBPV+Lqo4GrS7E|#BJMtHZYyYw4tf{tt@V=6jk#W9R zlPqGBztJjpJl1|%u*{ygaq0k&VfIbO>K_hN4bY&>o3cdK{&W#A*OkLc4Xubq174Va z#ueRz7@W>VyNCt1;*Y zV)4zCXqAvG?)9Sc(AKjgG0UvRWJ@Qr8|^@Z#nl%d)=CaE!JWtJ^CWW5CofuRQm2q$ zOTi3Q9}Ik?7Y?qgF~`v{3Mt`!yL{fBz)T1U)pJ|hIA%BmMHREjSg^kB@~ zOJL5SDcAN#kXYn}5oH5P`jcW><1c;{K;S%Ip2a!T3{gq%kZghhagqbBZ~v`&V7WSs zbSo~|GL7hc0wP(PcSEu9J1(M$3R@OOPN%-{l&-*#P*QEEM|>)txj`xWw;*PK1@Yz?z6wLN_Chf)CO7sb78`6O)-smiO*f;) zGF@bjplqe;M0qZc*@@d@J*C86#J_vpb>Od6?(Y83-2N(9DfgGWG!?f;M&4Fx=F^bb zu7hKHgq*BVBXz7_c!S@GD$HY6aDc%T>D@)fMrpejg(U-2uo->zLQI7t9h zpAKGd+hOr1AcSN!$s8fx7O9S$*I9?LN9OTTIq5Ibgnbv97|@XY9oh>t?1<#m=SMf zTrocx1$O^lqXSe7oj@3U|2q8T{;K~|UbU--_JK$zidru zBAS$nzbfl8Qj5u$fTZUXv;wHsKMMW-$TUB-x*u)SCzPm7F8mQ*wcGC`kgqaqf2VVv zkRbAh(5Y*-`0{%u=jp9b-(GSF!YiK1?tuFuc260j+J)b5K3qTbb@A8fTZ+FxWNG0` z7m(IzrpvDmkGf@c-kN#CZp1TxL`@jOq%25oYu(+gZ562)R2_~#iiMnXITbjVt|s1{ zfcHyh!*V_sSwX4WTy6)Wg>O7jVq|ZVt5!#|i_whkaM<2nT+W~E;RjC^5EiwEDW6H# zPyULCte#1y*8);dT=CjQe3Ak_7Vt^WiDFFkB>SQr<*z$u0V>4TGV=wPObwDYu|L-$R^di2BKd5K)#(rPgHHZ`lGvzl`Rl%o9C;YQnqKmv;ncmf&i_=MqE_Vv=iVqYY)^uzMifw{rU8dIeYO_dD4g;UffUnHY+l zXV?g#s@C*OWaYfo^n+nX*nyej)dnfla?bxf@)Ps%_8y0yHX%ycnWR`wmFy|nwY_9W z{WW6?@aj!6Oz(RziQnRT`^(3SC4NyW18tJ8PkpMF?dSVWiiRtmFw*L-=j&`wzmG|X z*Xs_~%f?j3evN+E)3f@u*Km9b_b}wnG5>)S)A7w1+;)6?LJ6r~rh9JblS@R>Bku1} z56L~i4bk;BIu#VO3*HcblYUW_C6rALRB3W#*$~40-h1+_RI~eoft*EQIvUSE8=MA# zcHfL0wHmu4m-2$7$+si0sNDFXcp*>;Em-SKGT&O%F8$Vb}L41FkhZi%z zJFM4+t!i9p)IzO3f4N&YHT|ClOAC=(d~Knk%r^IG&f7b7XHkdjy~)A2kz0_xjXc7))l#i7{Zs<<+17g@EC2%62akaXI%rsD zf$!h73@9nI-k%xD1J;iZcUX9@)|8}a0BFJ;S8FQ&GkoP8UAOUcRj1YxK!I6^pG#-) z0u(Pn9^p+XmD~1kVkDxp;nxc7_#Il`$BWx_;!jP7M*a_dXE@je6Je*PQRURk9|7>5 z5Ra1Q2cHA%V;G^ZcKNUD2wpSU^ZP>#f$d<$M|6XVLTIYvtP%WpAO1_+` zH&mTT2q1cG4}v}v3{}&U0aBS~_yS5;k$HR|m`a_+NO8g@!-jVp-NuGq-mI@9rGl98I1s?S4n*^(K8)o~?eqLtsAjq_VANyW@{Ri4Fam2{@@#%MJ&dr#R`QPD0Wz9sX8b` zrIJIl5lz?#(@5qwQ)dZ(*jLd5f>2EUk%i^8rm6|hDu`*z|DY$fU${E4WfCnJU~!Ak)gva z@CZCe3gGikH_?DMN3Yt2+K>KIsfv8&pw~pC z^OxQ+EI)aGJI(D0BbXSb7!_9- zn|<<}&upEQiobB5etU4cDe^B8Iep?Uu9BUd(W)xtGJrvtE97}f`FOWlzFk`H{Vy}# zT7OU{S0Jg*;~@icnisTG@c@G0-n)G}?*-bOk4Do?(+U0ZM;`{NiAc>tkYe67V!S{e z|E^R_5)*nsN*HNjB$+24x}V)3Tyn*VzCYJ7=bXW@yJfg(FJ$3==PjN!*86AKm-ZXM zTY`-t8MZHUC{__tW+WVEG9!k&Sy%^fT;I><13?WjJ~LKOj`gB?%Zh-wi}(pd@j)c| zLV0X0sSo17%g;J|HNc3>F(XsvXf$uPWI=fKjPP1{sYi16du;73ZEqf3(R)67)c;w3 zwixr`GCW4WW{xs_82!xEp(RT(G((;J}Jt$&_Opjio zbT9QC(dCqYaMgBYe|vOcjkABG91rdKTP0hSUBP41@pvsDN||&K6P-wlr~H{pNv0}v zeJqg=sjZj%M-Gv;)11daM0Q=4km_fb7AsbfK1B-O8hg+xHnlI3fc0vbWc|k{#kr=i z%xIB1KfTTYg{*&;C>@8N7oB8{ezqIvRL@K?;>^pHKtle&?Ym0&>6Ex0$OraZB2Qv+;@A}X#sHMBwv0%f$m*kA*Jvi zKjUZIJkjcv6FUo*`@5=n^H1=b)nWi5KEwi=h>QMpF@qK#0Y?&GkywP-nZC?Ycry4b zy6U$`3a5$_R?HMiOydFVL@*F|z-MRJPQf*ZA$vp?%8|}xf!#vw{fxkuh~tIUWF>0h zLwN== zN7Q~XsqppW^DZOl-0$DoM^slfl0bT0$H#px=IA~+JOqo@kzHcN8xGPu5_7(Z)63%n zKx((+rPOB^C(4THJnI5Ek9hwmcRH(OHpDQSJE% zjWriJl-%OS+x4>{h73Yj#SICu`Am=1%IP=i{wkSNG&@}7RXh02U+(*ow<@}&0$E&B zWD_1I9>0OWh$Ho&^t-$L>yBplDA|j3vJ6<@BS_pe4RrGR>E;Wu-$k8tPbn~K5xFEK zcPoSb=D4Z9+|177$nVT{*@#3LNESH@*YH1#5fr<#pGgu2YowSD-#=2vr_N>9UcZD! zMT$SMvJyKV0*8q;`?fi;91L(=*F}0UyXoK2FB?Bp%diEM1e@NvoGPd+m0frRn1z5e zmR!=sRl`qmn@(8n$~7hAaMqa)x*{d#+cnHIIDLf3+DiF=VOydyKO!%r0Hu4g`%|Pa zKZeWFl&JM|so0v~gKwSC{eP|igpzNI4-CfKuT^sTQLfD!1XGt^86TNIQ#69~mQJ`v zcf8-EV8DQ-bYj9pQcL`89kE}Ki8HxX%q!Mh#L&O!CpM= zCG?x0)X=v65OkW)zkedSyMTvY4?;x-;pa@QHXV}%EhJ)PVd&trideLH(E{C*ZY#qd zpcl#}8rd2d;o=}q>8hdfxnwA?6HFDu{`fR3#Myy-A7D}DvSJdtc*>Y8OV zBfS0)_X`gI+9tRkF8xKb%51QmJJ;Hdh}(j;Pd6Dkis0r)&x$Ka{H`=KE%7&HSVbpP zD~zI`_D_S`ap&vJvA3OR0p8*gn+BV5NuS4iuSXZrt9diK17kof=6X8LAiDy{>%K9w zXx6{eC{df?(%~2npZa-mIbQV+_{#c~K;m+`X49p7@)3A0wd%V4;&~JDi%A*C3~hCQ z@5tKk2U)+CX|gGWokG5a6Mu#JUKE`L?u0pfpA3CtLPBiuBtfQk%IUsY_<%O>Qtz6k zK=h74H8p5qPxqI~!PAthr2zx8^-R+8VaK}XT8rE32u(XTo3{IXPa=E;DjByy@sIq! z1jrK8J*K)|j^bjn>(8sa(U^q09vprW0wYOg%D;a1OK(lHH|&r>?;m!%=9Mmeqrcn7 zI%l=sBI>#^&&BeKBWRH1uQI&xD3`-OQ^D4q)_r%?WeZO+1x$-^*o*{ddk`|NEj(c!1-+N`I&xir6w8UVtf@ki1oH{+TL zLoHfY2DJ%bj%H}NY_Nd^Anf^Q6;1&?<|7VGV=pGUMgre4trN&-xN-di}N zu75e|E&PV|xmpp>@}WfSyt*1tia6Bx9o_m{{F9iISVRvTaGgg@T-~G;VLRdXlx2+ zKqv@dbM2hdFHOjy+c-p%g&ac)&%W-0eLLNmiA;F!Oy%ZaG)(&P6|B8(n5&zAFBhx) z2pzX8_hRa0iF;p00vC9V_FD%+S$JP+dL8ia#(@RBxCDq zhgqJ#dtoz{ds9LS%nFpdZg^-V879o{{AK18;ub&V{*^Aanw{pFJXN4_j&~M9CNO?d zYuUbmO9X_{VKgpC$4{=dj;fcbrS2V6ytyz;EKm45Ba^U+ROeB!5u=^fd!x>x>vi*= zLAzf((irh3nXg>Kh}L!MQ6*DLBbkq_!Y!JpqlJ?r>KUbB~)= zEtF`g>sS%++826&F#j@S%bp>9`4YQTB)XCR;ymkII^gymjdpISMco^j)nN%=g?ug)YyZuaiATcg7OZ_@Cn{XGX;sw)7$B-29Or*(;^1TBFPi)1Sbtn-D5oQNQIHR@eU& z{eZ@=Sk|4DLidq_djBUsJ_QQB1FSEV#imL^LDiJ{qHnZPQSuqL#Vc|~w=@*?nxQVni90KC; znf+ojU(JvVpR3Bwi}BFj!wEb9Yz~Si?Q@Y+KrRb#bdI;4Ko$N+-#mXBMWHjw>v1g7 z;wKt$G#dnXRchNxy%0OJcat^J!jwB!n+vlQ%%C(L9=~o3Z^Q_HbBy6hyDUDX$fsD5 zbL^9|i|eJ^3+G*O!4V^%2Sy$piy%Ltq@u&SiRv>k8SQ!#9;3+rN*imQ$;3bDw55zt z?ztXJhijG_4)o`qkp2INFJeN^o7o1xdsNs*_cZxp@@yF?b%@EeWTp0)1gF4*f0ZgQ zBNVw}Wd}q4;{#&`?#brFVp69dnYYUqN3ND` z7zkm}t%&E;M0}9!CjNJBSh!aFeE*k^|NM&6J=U)=KIRI~UYs*F=ckD0trLVQLs%Mz zkE*6c8dWPMMSG+bm<7~AitQ)6=?-^3@YHG1L5FqM9*K*eWI5&Vz`;q!rPUEUV8~S4 zMEfWp#jXuU@jau)uKuaL4{SV-8dseAK5_%an>GuzZ^4%{TGIsz^Ek; z{iY@#I6!fD#e271duWKBn!w{i^t}jjD7=*hKKELxyjZOON7U?06Vv8Mky3OUXPKsV zMuv^Ha3jKi#>q<#@#bE#om2eudSh>-y)96gx`qPxbh=7HT)V%pik|2J`=SPeIE6YD z>g$uSlg(j1BBE)2e}vBScq&-Ve|T^?ZKywZ;|;BO=^gDH4)2R8+C-514~$RU+%9r( zcW8JSjlK-ot6mf|Ia9K^esqkL(rw3Ac7xvz``x-!a3YXCQ7j|xvDRJNZDQ4qXvN3Z zj4V!zjvleC1H}hkkURPd)wx->%@?=pg;%*aRT0TiH4qIy3W3QJS<@aWNhhV|OE5;W zPT$6c8vq+7%wcEcxxdP0ez7Ik#MrJ>4Vpo;*a7$EqoXbtHlb@G?=6+$qijg9m)bOY zcLdyq&sPo*3HFIQwhutRE3G-@XfmIxNI|MGt>n#WlP6h&~b3q3I#E_Z(un{S(0o72c(IszLG z=N9i4RSz%vNGiwPhe4yf8z~y-IDg)`ZX$UNse3{dO%s)|AUFVrV%yw|hs=KMA`tCa z_o86rRTtHA+kM{~h}T|;a`lMZ+^A|ZacI+*Du=>qM*{2lUIK7e%uX4Eu8>yxX$wJ? zjzmEk)o8P?ykTOePQS%8FF7k6XwE^#MthMEk>r7*NDoCkKx$bY_8so)cy3fe%k8&> z7#=R)+XjWRHkSOKcE!sB@fXvpy-H%m54vM+92!dpA(b_fIcd@Y19TqtasbkBu!i|@mFVd1$|s?$ow$Y3 zat>kj0pzgzb?U=&QTNx!Y4< zv|R^M~oyXU5F%tK~93Ap#&)!s|5q;t28u>3b6v%7y zKl+j1bcY)_!?X!Ntkc`oIqk3%X2Eg^p5c0;8|sr9{|CS9DYH7mwwirPHhs$8ZL{sh zOm_HbgdupX#N!Q5^n-vLFi&Y#7(B%BJXDO;>arBwb>ZyGc)2}lXrOk-_Z>;>2d3>jO*%ihn@7x`#bT1{v$Q;0>hHr)OsTvb2 zGdh5buGmNM3!en|fHs?9bM}Xjw?)N~{Cn{pgHr%%Fwi0vS9rluZ!)OL(|! z%?UrfYeZSV5II_jDsHsO{OQOqBx7b9u@s$HR=7~o=%0bfhpOQEgC)f*Va1`XyjT`t zan$dOpfQ~=tL1Q3*ZX_?2)X2_(k&&0cDga8X72nb)vK#Sc-#JBfY9g@A&;Jk52*_V zWqkEZeIRRsH167eb-k`dH?mjEft8FpUixS@MZxETkQ-H@th@Z}Qzw84>$7m}$r|3Q zd^$P$*@l`_sfycLHvR`+@mI*f&S%m*8i(ESFV|Xmvw9EL!pNH+GN99d%(+lpvPr-e zX}}fuPmEUY1$S>8zp(!Zh$!y9H`z=h(P^PCago6dM8ZG`2*OfPAxufwV-y4MaJ1>* z6>IT{(}=i)0w;icriLQQ0*U@6M7UnYcjSBK^qmyr?G3M~DPQBE5)CW*ih}TQdjkv! zjL|d781}VQFaj0t2nQx_U4DK&ZXWXtbM)^@k?OqO%ow?_3RB+O_we8Fy!Uw4u`mcx z21dDg%|mlesa1>*15_)_^v2RggB=1Xq0U5NUcxfUmq5L16#OiNyrbMY_*bo2un!XlfJE;vfO-JMgP0W@KkKYuobwl7vh2UzVG^Sg+B8#&2!iRqtAqB-JVpW3YzRnyve?ouAy(^kW}cEFVzMT2O!X>bf9ZB~x$XE$nzO~bPCX9So6reb zy&%%~7LHt!OrrqYt>elsDM zJRD+pt-@WV=u^l$pE*qN(>gnRoH1E(Dt(lAHDa$7$6q8PbOX#0+%IeA-`kJ=wB_PU z>t@t6o=3{rsQ&jF_q&IyR{&BpEAg&+H~K%jF)b`KO>F%dlcm>!lS>Twn6I9I^U!?$ zCwKb*%yowo$_c6-Ng)0o6uqA$k{$~O+K}A|MqGi!{ie13Gv^pj8>|!)Vc(J6aEWQu z;jnVZ1VXCnfd#Dk%Ihz^~D{kp`WIcq~&K zjw48xl zZ+P3wlYuK__3+Xp)?>24Jp`4X3)FwP>?MeLG1A+^Hz-Y9H5Js(PK&H%o$;bQ4K}8L z`J!Z3OTQ)xsu@b=SiG{H3Y2SP+`3QHD^?lB(r<70sDQ<-%_#1P;c0*5smQ0ip0~57aGxps=TFmX_8-@N4gfo**~>GL`FPPBre{=18e@1 zAplf+J$|H3OR&*$&#C{wMf*u!At5lG^Rn_Z zWfxh^e}=1sdJy!Nc-kP>QS)&aJ8cr#79dD^Bbte8>_#onxJTZPZmvQmfn62sLcs9O zkXGAd&Y#AG;FCeSoI;}jCJ7F<&ZT=o5>H5r-n9UKqS{)D({aujPPA1$J`i|GF$kqB z`%|U_vf;G{JXN-&yDUK9HbKzGFeVJe56I=0*F?6BCpDxIz7htDy~`0?s+TfMYjzdQ zY~J#%?y8X<(viKC<*N1Yc{H(8xn77|!L0fh&%!kU=|kDEG4>G4f0khr?SF1H9T_Sl(OO!F94YsW|K-*l%{lk?ML6F%&6*=M3gkEfb9XJM6*|FDT+` z+}SY_QfoseVIxIAi4LqzToKkUjvb9!ujq!aqps&Z)4xe#_~;+n zT6xy1(}1qt2x!-8pU4eq9f6FI?255iu#0sc-3tKSw03GgHhn7y#jP&wx!f(n9CaJW zu}7Oj92wowSh!cTB$JAqYe=FHDE;AsSu}|8mh_mYA27{J11* zJ|(P3nUW*c`Y6qP{Zs!cQX1RUr2s#-CC_70p)HjiI!YE*R* z*R{J?g0bGfVe4|uJKs!Pi+Md^3vG_7yCdXo1=#4Ix~F_7hKj$f3W50)7(EYIhg+or zcLATR`)x=s;4{WlxSuG#-0pfOMw>-Eg`P%CtNr4K-!r6k#R0+$G=_yi8YO%*N3IfetKbi(tdg_6p-T9#P$W6U%Anpylut1k&0pHTM{V=W zXeNDG|N6m*aWLzE(tyBewnRdQ)$m9>NWOkwneK@v(l5OsqyaBivAEMKfK&O_t?lwN zxrLMjc23FjTo#PKpVhxRQDfK>A-&58-zkbulM@FmPiJ1DC4{re=gm$nNj=R7qFeEc z%z&<><*;(gXi^9luRe*(q1R&u(hf6Sy!!By5lBPztQ>Vp2@$2Sb7$+Ny#JHU%^k}y zJ{GoM;TZvc&)FwZdX}QThmFei#Zdw~LP&IdUmxW`V4SSA(hpUGzygy#L~Bh%+LqJ; zXF7wYfnQyqUwS6|kssW~bLV!r6W3iz6HvpRB5DvNwlA?3?iUO^j_Oj;Sf_6_*Fv$r zs5T8;rnwwvi-3zbDbdcSnKOf4^Tr^Xzq$|(@D*Fi&e}X1FUAybf9L?-oO|uC9*#wQ zS#Z-N?6PTz(+izF73#Zcdhgc8kSz&hd!1xAW*bm>&wFx7%* zd#8&pHR#Pk`6YkStYBznaW0MzAz8-NJP$ey47}Tl&Ka{NU5Am^G%XUJUT3(-?oOKT z`oA}D-c^vE$F9uaU^Dp9@_D@^4<49`MwIkl@6p`Q#@yA<@~>4Y7nJbf0xH*a-Qh=A zbQphmOsn=sn+VsXb7zYmUiyPFM;WtT3%*jzHDL>QK}C@EOICJ18&Y>r%2^G~>rlg$ zO7;hVwuTc0nob+L;ac}irvD|4HezKeI0$8&z6GGzEzOftn8U@aknI8^D9r80L0!>pcY&d+f{vr-j(~$^$W^tD`rb%N5Vet*4+K3eg@~QGiy=TJr%|jct74Km zWbM#%>(eYx=(yWS^P3Dh%I~(CRi^8?jmUFLrO(aI-!?f9f<@_hSBQ+e+dk^6x^zt~ zeFz3)_^YKye`z#fse&;AK)gQnZ@>{q!#KQR|&w5mA>t0dqMFbv!Bb zdzqKtLQ0XBp8m2GrhgZNq{jAf%#EcGk0&`Rt z$vY!sEeigQxSaNXV{|tw9G^;*sVH(W3oSxyaMUoHg>?*=gzAKGxWTsnKe{|+ssL0rUs(HPP$@mbW{wIz4U#;XHH(H7n-wLt@)ic_p0I;ud6vqCKKcE zB|6<+^RQ<3NE%Sqv1ypgNMM;8E2}?Gaiw<+1iFRA;4%+FvpZv(>!nw&UD3Cx+}$hn z`}F$3j>802OOF?ZtoGzoxst5&dfCRot{1YI)@umfg_V-pZJb;z9vO3X?cESNR$ID9i%!Gp z4yeKF|TKIBv-xIa@<)+G-z&HnW-2pdW z7n+Tja%ST++x;}Jf#UFE`uqq(sD?17CCW>>>cGekH{*hwqA+@PS1wa=Ou6^3}loe#dVcnKk*K*?wjo)GA8=Ee*^y0Iby#ec|Gv3bWTK+)CtKr##GXRe;TrGc$JOcnS zi&fX*`xPWj)MkWYX4jsqlnV44L|Cj(%N3-R;g?n)99lop!ttBXknM>cA60`p6L%}sJrU6vgs{-UC4X2D^*)v1}x_+Tq6@bOoa6`w^%{}WljSkQ&;KGXY5@qf~U5KwGUm%_}s#96EieiH3E zI~f)1O?P5eN9{S-&4&3hY_d!TD?@DRgV%jK3qM!~B2nJ=tH?r$16w2^oq0cXkjIEXy+Y`?ad|yH8iY zD_=czN{1JPv8^d&Ntn$P8i*4S<{C!JM%G35Ef27tT22t*+yqw*>@#N@P-4V#G?q&n zh|wu$QVDtB&w5le_RNX(eV?B`8d7?KqU26CNLu_ zN_Wr6or7U)L4$Icz@Cu~=m|+T5g^fQozYTSe^oGRA_scKst4cqxY5IxF^bt#qzYul z_=r}xuzBz}T)3k(m>?02?sLQlV%=4OoIA$`--SVaVukFtJS z9^UBsu!c`_EOK6YQJoMSv4o~PfXYcLunWlUmInw`I#!g+u22RyKXu*?@gMJX5bR*| ze;Q#3XgLJz2*j`vz)!j666}N?%|g24X|;p4751GkMyE;^Yar^WP6$G>U#p&orRJ1r zHFV&A2ol>v{Gq0r$@*}adm!!O$VD*kS^g(i-r<+hjAAt!m^)O@NV{s1*!a+7x_eu5j_G(tQ z>S5qw;>B^QaK>@IdoH=GwnR zsVdv;>>(xf3M@sTuzo&cuQ0H?ejgI&@_E7IyCbla687`DDP{#|Cq0D`FufB?TQZRM z)t>z`yjR9qo*UuiA4}v<6D)OfQmyqh&q9NFDe$LRlpyn_3f%T*WL{V{wn9xQ(s5+5 zQrCW7D(tURXu6^xZgVM(X)(58jdi zM0b`wQRV%q!AgrB0;h|E_QzkQIP`o2sGn3qH`BZP6S3udi3;3(+&~zcE>Eq(OGhGV zDt>ba{xoA?=Yi(6uS35_`kzfzhqgEzZtEAPIUxGt%mX~pW5Yd6ky*qRJfy#KQJ(}2yB^{|0^u}hUbmV}cxei;#daB9Ggvst2TY-Ic#WtemO4)Zp!M@CDVFPAYW z6_TQAh+Uwc2Z?(^6^t(ixO%Y;BteeNj>=?WjgKNz+Bqkg_y}2zFEMKrEJO`W}6_lyc zy8Jb_Z?aRmyt@mxTMFn)9$roQRke-0TCBI79t53(2dt3>Q4hVJry$B&gNUO%;7sma zpEPr6n}1xt{p{+KnzqXejFm9X$FGihf_+PwizLCl}&6SM%{<#QkTd!$>HQ6?>JF9zpC z%ru&f%)ORbAV0`q`y+hZ5xr2n?YzyG-TWX+TUdEmCl1-481{2O3 zN6Y?}-9@i$KF?tr{GdX0CtA?_YUH|m#*!Row7?p7@jzF-mM>_aabNY^l;}KcpgEp) zUy~&2#oW~MS9*YcLlJX;cCMDrTEdY`5~fzJN_8hrB+UhWt4aZS`!JC3oACBAOcRSU z9wIbc2oMCB2GD%T+>ra+N|M0+d0rcXz;qte|CGuzr-zC}jXIfEJHJA~$xR2+;LdVO zXaXuK1)C_*RHN;+zF<15SlfdyI+)>{B6zaDL8fAQeLLjqCJ>&gnx15eb^Qh#%~*5aHam)^<6bRmAe4J$N6hYC|4u+8$P;Wt zVSKvd?s&}Qlai(E8|UL9X!yPko&;aa;SjhiJx?w5O!q{5M;zkm43G9jnvFJ}nb=}= ze3dnR_+0<6OehZHpG3b2t14Q(pBFhjT(pRE)2wwaclu)#^$~=Qkyb*0x~ie6b2{t) zyWHtDm9~tdM|bbmr$_J&yNtn|_$uz4?;*>klz}QqK`HZg6b$we=7N7qr(W)o7?&-7 zXOzw>oUTg3?<`XhTaQ}f`)4k!e$(7Yb7q$#ej~k_yLs6!{sE)K8VMV@fx3O4hof{qPxdM9 zb?2v$^9=Fn-o&EA8;OCTrezv0$Oa)dCiKnrj+n)F*3iuD?wJ>c9MhL{Et9LcxElX- zQcdkH=o^b(W&f{xi+Jf0N8+{cy>qGf} z5PIL3A{N>$7x*DldXq1D4Gua=_=tQSe+s7_do<4(wqM?F0>Q5K1fMcbE=#j*AIa1m zQ~n*rC;5@?%ZGue=ajhC{mLNeYsC+|PIL?ccXP$D3Lo+`f1LnsdXl;$so)&0tI9|D zR;fExyq#IL`?sotzwxtG_2f9iut52A*+$IQn5nY{eXj(L zyoD9W9E6O_LiaE+{<4Ib5&0ni8>E zr0Zz6p%Gs6JG0LFitCb$b=3mHtbrk^irhKjK)@(eRUDzGqLLahc(K}@`6aZMUoalLwBSNR`9 zhc$fiFg~tw$Yc1b)wgi}B?Cxb%=h8*fhCOBMvx($=W+5l{?!A|9rhog?8+gBVsW87 zP1T67XEvlvx5LF1?|-q!0rzUm&vuv zFhRd6#bI&85C`RpsO_}^Ma1rKwHJmHzx~X#ub^v+%R|rGB<*e<2Z&v0V?mGDcT*!P zvJH;x>wPUk28-5G-hM~#?F#ge1sF|k^zrYh@cSM(!=Yz6` z_#ljS;epF1m){cR>9Tfvo%#ULTSfK^^%fHxbs)RQueMDuf@;d>{1ywfA!}=y{2yWs zy=uX^uV#BNQ`#eW-2|nfG|3|r@Dtd;%2-m=?fD{R3mqX1=Ujy4|w34AA>+8U2!hJNYb_f4A zw`jRwX85FiI&NhZw+(55=lj{F^4ohmsC=rJ*Y8yE4qewzf2;e*^wOLn8#&#y^u<|A zL>x^tha;2fVpir7W-@J!wlrvRj##hUzyAQS=4(YgB7N`g&)qBv+DG-@3H&S^F}R4NImV3E?lTABHx~HSjd+8Hj}F6AZ>m`xS*urPuOQ89-V#LV^rM*dz%E( zm^KD!*eSR%S?JlEUyY`I=z9P70JqS83a%yoR3Zmo&gN-6o?WtoI^PPvjKB;M7x8>O zWc{v}4uMi30yRc~#5~ zyd}sJS5h=kV_50mY)L$G)kn?J?y$DQ?II76$5Gm@^ViQm>$yvq7AIe_q`b?A60z&R z9wb8!_1!+#N&!oX{VCKBD@5U$@Aa`V^vLN_b4chTHnLTmFOcANz|>%ViB4B(RTBe`Gg0`5=>A&a(V-()gKMv|Hx);hvq zkWbJW=Cp6R8e>}-OzCZ2Ivk z%$8VEaxBlkubKD164vz%Z`tYaa*@v}1mT{FZ~>+8+>3Sjim2NL%wc!Gyeq{}m|y#7 zWvOL5Fz+(c8+1OX;^ek}Dsh?*@iurxF&B7_pCp{$K9V(Oo2ueu^P*DAT8^gK?hL1z zB^f~8vuZ^2t@@8~j-(}}KKD=RfSaqzqBqRo;!h_L8RS8{Yj(4I(vBdDqxAr(z*<7F z_A}CVMPR=c_g3CUc6N8Ms{X5{aG%8xTO*G{$6Xe)p2dE7zPGyiwTo`4sW2BAQ2ysY z$;)z_=2i0s#9dWIu$jXc-Iq2!r}mS_&%Oz6qV940)nzAjn&fuKZibm5 zxWG3F;&5mUb>Hbym8CTq6|G8Nu&W!X{T2F?FGM-(yDyj|@5uDU6#1>5t7<0XuPg)j zecx5HFXR71*1P{R{lD?!o5d<+=_EOfD3l20Y{;t|Gf5%G96LCl4;vFvIW33gJe5Pr zA%~m|DZ`vXnA64_a%K!OhwroZ=kvXNfB60b&+&X-*W+1m7qLq>SttG0aAn*c`uyo!{irQ(g2d}T z*Zn%G&iov?oGWCaFh`+(FF`3wrJIfC+?=m^8&trF+RZiO+>g^Jbo=nEk8m&jrP=sG z0)3Ul82^J;7?&jMOmULIrUVnxJ=Xnr=l|9=W={e~dM zResbwXhr|SBJg6YDlLIG({~e{EJ2l}-+87(8M2{X!(FT`#qzM zaBqZwY5K!=eSR;^(oy|4S>IA5Tt$%fOLl!&X-qacZR_p00`)7@m}h5GKh>C}8e2+x zhLC6G4fL4p=TykDtYeZwk;O?qVHI?TjTSE%KCho~eM-Pwiwij8*r2NN7e z=edOiY{o-3_M}A~oV~1e@$Rs9+~Rp4@Y*5Q&q2)_r~esoI7WuJLkF4&GW4Zx{{%sRH+y z%4!NcWJg$x1w6b9SPICqn{7SvsR;0I|JiNwTi@lCb4m$=K+{528{Glz|1%vJI*fn+ zh^ThmaMY^vLblduOweZ3HlO2{Xk9H9Oz3IPs7Q`f?lYgnJ|l`{t*$aNPe?av_i8^1 zl~dZTkX!lMOvUE0OK7g)%(mzQp1$+g6V-HKa~Hkk`@Ev$oxTe;#$pn_%kf_pq`GSd zi~DQ(0MG3XiJ1^giD1M6rcnCPRo2lQuA^k)U#9VpU+wPM1nyrc_ZJg9Z&x-s&TTZ$ zh(h|Rq?27EH|>0mnpXvE&1QcT|D_4}u6NeQb`~0pi^&(tS=C2x{g+^sR*5S3s@Alq zRV&H~ylw_V#73ow#2g93!u4ioE0{&B<*rX|NyAoJ;A+FR*G$S;&EE3vU7Ly!1NETo z6;~<3jvZf)8ekw^9x(%H_N%N^_m7P&a;00N?kjlj&O0k^!v;~xhxOi_3KW!m_W>n! z77+Va(A5uiTKIjZCubW%_B+M!D7!eN*$Z-k3l*=Hw1SS7`7I2zqtskdYVx#Uqvxmp zYUdkf-oqo%oo(+#?yDcwlz6r*CP~%n-f|YZ#)s%o1%FHntsX?(>&wAb7{Un=>(#hM6 zeouJ8zvkIOOsLRa==aSnmUqaMzDGMFiw_wYm{E@{{wf`jByt)4!Owm{Jel!J$B~av zDdbN+BNIdz7^+MX%gyfP{f;4xxmLUCYQMKC7yw&dL9>j@kbMwcyAlp`nA%Rvq$f$0Ti-R3d$a9Om=_;h3*k)Ijr9;8=;Bhhi&xJ=-yo zK=Pm*H3F4By`SzoUqH&r|8zH2w#cHYvRvDWf!!dNQ_D5OJ7t#~opQvSvw;l(V!0`= zMyh&5Rv`HYoJ+mZ>^(P4FmIWsR5~T8- z{AWRfC&-;}kXF1u@mN2#vGm!vr;r*Y7}Pdmdw#j1AT$-&KuI3V^wQHFm8#?& zWsFu+Iw9K>cUCA-plWpa9ShP%FiNXf)krwG_UC>omVlBVd$P<%?eae?Co3B(z~N;E zI{T>p9KvkkF6t%L>S0b<3E}Kwzwx*C4w$)Iq=xJ%3wXl2BFQtxcw-?)VH+u4EW+V9 z8h4^iR?|z!)$tFREm#;rp>Gd*ewLc%(^0dz*tgBR zs~4m(k|2mJ!&Fd4iEg{(UbY~p8odZ**Kv0l{WiyeoY<1Bx*bp z_Ud?WygJ4OGmu=MKlJCW@p19hMG^OC`WVL!aO2wV3cF&Gn0p|6rao~l3MV1$Jdj{H z!iG~rMsW!^{VOaCRrY<#dl0M^iV4SzbUT!y!&>%gh^C!EC`NdCkM3WVBP^ zQzWny*v@a6*V(5uC?yQ=|C>5f!oH%vb;^=bh=QR%B&)`}Dph?KO!^&C@5&=9bxNwI zj(hJ+Mx|c|FneJ0&mqeE{J|VGLRf zt*9LNAY+fyl3x>H{aD15WJ#l`<&y_izN*OtR6zx#wDOms)#!BpyISTB))C)>>NjSw z1NW3ExnL~B=J=^Xc7y=^Sk4JY@)eIiVnEL5*O0m|L&{DFB@)6mg@L=D;AiRe?Aimo zG!Q5+aH89}mUub_hn7Drg{y43oQQbXIJ-bnZW{W`ZW5KW>3F<4OFH(qKa-;#;h-gZ z$$=-49`f@qr0kuehHPBV#E_o>J_m-kCP=J?yFeTZa0BsXYIp%`S(7M_FXM|e?FFHG^h9}fg0j^={3H7R#z0%R3Kr^2fol}H-w&_;OnIB>6HKBdRXNhxqhAu7iMWwWV<2V@=Iw*|km}o1X~=FUge8ytgoG z;IR&9-dkt=w*jmGehe>jHMM#7k>E&rFCPzD2h#jSoXVtw1+vnez|2dPb1qiep@zGf zyY&EGFK0ipBhIA&6&P9TOM;UhKY4Y|3vB5^`uXNeq0}m5Z63WdsqK_6;NLkfOnqxB zx!e2szQ~IxWy!$ae58$cr;N5mgC-vBv<+qJ4Rxseszr?J{*Go=RxgOd9Mo)fF{2=J z4nl2?pF_v8MncF3iM2n>$~PF*f<|GuuCk6UhdBPx-DicA3JE4qf;dvkOA3?RL&ezv zkX2uMH`(!2A5=!x{H~s?1`~y9FH6e5XTRSe`cE`D_H_n&3n&%(urN?f1z1=m0bIai&+|frgmK`ZjR{bR*z<^R_1ftPj9O7q3A@X$3vqxY|8%TVU!Uu?-zkgE;yJEVVH|d(Hp5 zmX3g)uG9nbp5+9W>bRbGNl4m#&VUAe(~fG&yH9shyA&utTxw?CKdJ;aPLFCx48GY9 z8aB-XCVco^e{{r_PyV?>$nLxt-_t!nCD;|TSmf;b&7}Fu*W%}p^eRe79q+b9pzUd+ z(W7ZUU@wbwz<<^cp4=lR8me}8r>SjXwY>xgI#%;0Lra){>nxNNqU60_~^IVU1}fSt>-x>A14ZKS&$xGcNN?Pjruje;z_e` zt07CJf(#K%hYhM$d`b(KN~curx1V;0WM3Dn<~%8seF>5ujmxVMCq7+=K37c^&3X^)|u_|XC~|- zSXikca4DnI4@1hy>XEu@I?^V)-MmiLR~HUdP2R$c*1A|e)8X*|{>plE(_&4dnVP9y zC8EaQSb_G=UhchIcvAo0JYD;J9i`@(B|AwC&Y^|SGy z{fwo2e5gFBGz>FL&S5cOh`e5pNy)g#|!Pi7|=E4oe|8=0w3zxpNS1peFQ@-zi z%!Ps|S-k!Esgbc4M}1$kuk0V}cX6pK*^*M$;~e=1RGv( zyJs1NsEI@3>3va>;iBe+(&m0l2v9rTqo?OUZ!0H3lW+w+{%!C-V4UhBmwjA!Ou0@n~wbAAZ=ve6#cpnn&8!b1&j)5Hk4>YEFT zBjNS&Rg)V$_N(RK`jgat#yoJih|P=5gK=?Rvs@e(%I0*`gn)ay-DG!i`R77wUTFv_ z2myT0XAd&}QHgf|Dv{^$r}I!-|Lg6w5sk%;Yb7p(gWVV96G1b8Fo28ysr-nC7K<(=$-OpSMM=9g zWbORHkGsAeaM3O21M8zX8QhCg)}yq?-o)jqxk3D8i?z=3o-{2kmlqped?5DwG8^ap zN(j4OGXK;ybMTolmF6;DJhE`T)&EHw#;16hQYL_(czgX(SCMoybrW*{=@ee(Dt9bY zW6gZymj4#L520=Y!|iU2OE(U@pM`H4m+P*lRlQ z>I`P?7|t4ju#%XEbm+sS@Ce@62V>b@u@5eO+FA4LU`4=CCj?a$#YEJGZ6zlqj%s+# zLm9nVb(m@3XNo=Fiiz58{4uqe0Y;t=I4`JEgxvHnY`cBL*fs`bfS2hHDWR(nQ{K_IeEXp4tqIpP1mQ8-%6_NYSaEMIAnPdu zQXUM-CbMdJZ!2M(nb*rQzeLWoXLsyzPQ^c z{F%!>y7lPxJ;b`eC#wX=7&U+O6zwQd`CZWxUJ{Z8wbWklwzA=q64>P3Cqf%x80Eix zp0Nj^HR=-_9XoD27ozwN{%*I#hnm22;H*EssJm*1*1C~Fn=mg56YQQo1fgpNX0ciK zFm5b*w_hgVPKls#J=hbp6D*4Z8xKAgzV1}31CYAYJA=GozmO%+7;KNG5LMdcy8ezR zS=N#=dl)Yo1tT;vS4HLj@B*~2<@?V=wgoF>RI;q|)`|Xx;2B@XjwFdKhbaJ->_OkS z7Bf+6O}5?Fb5Xb6+W-olG{_dEhd+31{ox>)q zQ!C%(`O$j>-xXR6S(c?#$d6fTnU|rzcc!=M<9-wRr`GC+^1(1uIKmi>+KeUSe z8inQ*$k?7IB`UZzWS^mu6KJ_A<+Agi5+-H6e`#+6z>18a|i8mEFt zMkf(}qC(z`V?gEy`;S)b(pvvJpfK( zo3`>5O>_;zo-n$~Kq2}&!UjD5OgbD^cOL#2tMOizIYG>5*dh-Nn0p-yw!FCZTVsQX zZJzxU7T(zco51nHXQW@#5bK#)evh5yd`E6>EGtk(R=umn{mKtyX5DI-PQd8FGv2@l zNmuq=7`EppL#E+@)7*Sb#KH}zU_ev%U`rqG=f#Qr;~VQlc)EGHQ)+M!#c`{96V|8_ zquwcQQ|oEZ;%j05Rb037e1GcF)JsmOn<9<-6I-FZ+09NA^mbR~+5;9!<+c|!p>ER- zeO{kSyl2so7q1!4Va^=1aBsj03h#@YWQwLo47QA-fA9=?Hmex5%42_) za;ue0zgBUhXvn7Iw#9?|L#rnlQ+B5pqac#fEyVdf=7#s-n|k#N=@;^QTV$ng8a6xP ztX2f_=Q2Y>UU}*fSv~59V{s2ueZyRv@?A$OE3ZH2SwmEJH08nquFgoQQ4ex9svF6_L)e?rS2^fNlXP{LWTVSG>&to7D%C3RUN^x$AujV_6h>XZ;5;ew|K*v6IJ#V#luW!o54w^}Q*%@T$8)&P;a><)A^TpjJ; zg}?q|4yley?kOQeko`39uYA36cTGKN_2B0jWCih!jD2g0%4&6sVAaK2F19`6qXI!X zvl;Wau~N>_i2Q`lJp-XaRZ&B~-MRH`J(aRmaqk*7TO4(Mhe~R{Iv|xUDi{Aglx9MT zH^PBIk!G306d}T)wqQu_&8NM+g5mS5sJO-8U*E46_w+XA%Fdl7(27;nvCF5Ew*PqZ zcDIMJTr>6s5)Bhhf_axsO&dQ%pVb`hSN1P++`}baXC@L04-Z&Fh4>mocBRhTzyswp z*GlqWRzHLurXgPp;TCW84}CD($W8h<>Cdn1G&!<85xiQocKCYn^v=)K^FtjrCj{KK zm0td~aQ*(U7>Qy9bSx5>TNZpafcB^K5dj!t@1`>P;)~z%h~s6whc7AYSCD^Rd^34u zykTDGX}-bycUYt8{{<&JFc%UU$w%T{3NmPMD&1KD57}4ihk7c;ou$hS7h}7m?L#{) zpSnMX6+dJ@@L8Mn-xH>RI;HzG5)20GHZMOzdszmhTplc?N%*0=9u+-K1x)^9#oKQf z+T5sL=}TZk!Jw_BXUOceOA>4$9_!=+Z)flE??aE_`I#ZLO41v1ugzmkZM0QG}&S8lM z`6CB*?^WiXxJ>_~8(q*NUI6M*I8|GH zwDna_SLzu*@)b6d>yHbc#-qO}tqgy<*Td&lX8+`HAJ&$Uv0bWw_26$w`&mMu>kXFG z!&1%#HyyZkkxG(!7FuJ&4KtO~{U-uP1;1LO8Q(i!jf_8ni|M{_3Qvi$of|wp^(0IJyJs{41t|TnN8_H`$tb zbCYozwc2#c@K_rj;J8!_*YWxaAKTs2Jl|qYx>>IygfHBtoozmAsqrL(u->}p*RX6C z|KR0z*qr8w>|}rRcc@}dbL?r=hg1EYWN&kW;8%ZXjZ46ZEDI0adt>fLmStt0E@cT) z;H{7YqzuQmD|`CVjZPcOqwr^qp=7Ax(>#F$$+ z|HiQePioIC!Fk2lAby_1?Z!iLQgN)}g>;x&K;wM>w#Bwa{!bM=sCun{DOr8bgrwo| zQ8!UGxayQ9SVQv|n}6CBgN&5x=c1nV=Z}UDcapu!61@DzYhsxpo3Po)#o|&i|C0Kx zNLRR#UYl3JB-EK78-~2HXyx0K9M3qWGyCO}>Iz4tduYVT8^S_W8{H}ZB%;xK60C}v zSRCpZoQ%Nifp==QCs<3F!SvE)`O)FJg8zn!t(JdX*^~TkA|khf!an z=%&ZyaCQhJ_{U4-G4{jhPjsQF%}&MU+K<)Zznoi6D#(g7N`#(ZfAMjuSaCPvjBLd{ zur>jHn{^VaS^*2p9H0?y2Q@j97+Q-7Y{i_GfV1`}uVI|H4#`)T7$v<7R%!FFdn?P9 zx`V(@9XTc@RWCgTr#g1@?@YnJ5V!B}+{Nr=qm{`byqljJEnx>n+JxVx10wOunpvAW zQ7P9(KMnK@D^e&`ntcr4gCpe+0Qe(bRX1MzKPg|7 zuYj`8jeG~Gpw9r}d$a%F+I3!`l*7$_8ecMv(l`>vrw33%mX!{LE31iD$a^Oh#%!OC+mB&V51n0nb>r7eTU4t= zSpK7@8FowDy+{>9z5(gb-Iv>M;``|cgIkOR99$v#mf?&aWCA*E#WGmf?a&P>-Qxf2 zq12-v+{8#6fiV9<+IAU-P2C}CH8hE>Na3h0H8(pEs+NaMN>`=NY+cUb15`<4EZ)J_ zLko16pQ04W8+t+Cf%JefoGU{HS_n%#&Z4-0p=Ezkf@&W-lAFHlQ=WtZJ;$$dvdP+@ z3lT!*3DR8K>~=29RW4hbo7O?ip=a52;t^XZN}Ih}ox6N44l@{(a4toR>6*6wO6Xkj zeRccR&dv+wLoOBfYhYxt1C>_a)BAB&_6~M_k`Zwh0Ppz@O+QL2>G>2tHzNG`go-tB zV?aBO6t{^YRKpX5XZE4>haYGcnJxaWG|t4;P2*Y>*8~m&7IqKTEi^LstUoL&uh3UH zt3y~`aHCXXvI3rekF`4X3P2PS_9AvqW&$WN#jpv?=S;jR6if*a{dOo-`z>AR%0?!2 zECU&tefCU&8zI-UxG^OlLTt&S^T+lZ$Ij1`5C3v|-6CDq@k?fV3_8wRPs6nX4RR3Z z{U4G!Fru*>Z{Iq6M&gL@-}{%j3>Vgp&c99N3@V7n-DwG10cw5O;N|bQE(HrWbMIDO=i%MFd+Dj+ zT!`UWa7XpV!{L89A!}%Bh4`Bnz*#20zw5D>fT?s3x)<8PXS}ju+hRuUrm!#8vH% zY8-W|D`JGJTMxTd>N4R7r-&`!z^EYorE)1%hGqMKT{)@yVBH{4ptYE5pi&MrpaE%9 ztbbe_DY3mwpDbf94oYZO2EZp#ftR>kHEJL})J9K~c`qHg0QG1``8EB~P5>t)cH;WX zvdb!H2aW=m7#!NS&!#YI0C^2+Of-#(hIbO6)i2aNr;e1fR_aXGVlSV%aptH3sQNm6 zUruZ}-MuuoNF=>I)S#2SBikO{qOxtNQocMDE!EMkbe2k7KN?nPn5jZeWKml8pF3+N zuByv2PU5aMe#=gWD!#W4oJn?KEmxKE2&Py?*mg{-hbnw6uKhCaJL>8;8jwB>!)7=n z>D5R=<`X+g5uC}8f-_%e00MS+0Y6stRn1fd6o{9W(w?|wSlX(9;X6eG^$l>%Ys2gIW zrWuhU1ZL^;)(ld1f3N=n-?!W#!fL6B$!hRQd)MPB!YPAK*~gkr?na&@#fPUv$ha=p zyu3RW-Z+b49t0x#US@5MZCoZG{OJ{`}s#r%MK-^(q7ePkA`lFg8O@B5Vw((MSy~RzKBs> zVOxNsZ9Y&C%h2ce4$Ss39V@*s_t?kSY2wf-o&Hch?;F!8oh&5Ieg{kzFDjf&*xV02CWLF##xRl>!+EgMw@q5-@$Udc;Gd= z_rQ}w%9{G%xwwZoY+w)51?yIob_G?5=(H|c$~O(cnwE0}UmoGH^a#sb4+^N$Dm`(}JjrPi)AxvY3@^ z^_bGdT(;*hG35aM`C%IJTlvM`b58ftN6y%&UhzI)&XKh<14BW{XgW4)04xeY*a+p| za(bKx^sMGdb1jaX)iI0u7DCI3sK~unOVx))S4YFfW)zAnI|3HILY^&r?wm=25>#W^ z@dDCOBT&&q-#$3^r>KfkH3P@~aHssH|6@J0Y4bUJ)E~zdx$XVbgo3}oGntJ)MjS!1 zlCClm-c#M~S10eDcDpfkmTsE01B!c!w961vHQJQhh@a-um?n;`y~E@<3!v$U zvf2WT_BF6(oTy@O3neTIqQko?GT8?uEDMXTmTzamtK(jbsmFRIXdcF^AC%eiuL`d1 zbA&B%?w|j5MP9(a6#pCEmplhGBRvcOQj#zRL&4uk0&WptdNfyw_l#ADL!&UUbHA3c zFmmj+Vt0iTkxQfUwQzN-Nb%|#ozgP$z1%bEgU!kBp2y2Roi!3vkojhL?)^?nVkn*U zpE~nU+(V$;!+WY-4F64k^+|h#+SXW0>$NtRtG2N@AU-p`2KgSYE{*SN6b=>*3lBfT zRv4g40}!At{@1f<5)ZDVuhT+G8D@~v83BE|TUpdAVYW|mEx0(v_GwdF;581%V#WZ%Bie=wH?LstWp)Ufd9K}IKC-7z64_n_%>52)u zOP}&A(+M;ATTkz}mKQi1fe};(PeZ76ABnx-ga14g@Pb9q0RH1ImM0_PY%pvS@B-)6 zZ29LIbt1>dg~JiI_}t5=J$z!H&EVTfoheO)XD|n}pYH^J5oywU?|5sZ1K^-!u!Av7 zhwoGZc%G7rn+|un&xVttTT+Icj8*Cpx(cn%Z8mLjq}zdHE-XSkHW`AG%)#ezY20;` zn%k06!pc1dR{^~K?K06|{MgKyvzK7sg%>?0BOHxxK-hQ=eL6wCfxGkh%exB>+7cRS zf;_)sWT$8_^=}HtJtf23|F(z?vi4pz#w2I_r0A#mwH8ySuk{tFm6wB<8L1;=$O9_~& z2?+#gLUqc-5&&_EK$Yiwd%X)pF3e-{t!EH0?y$!5tujh5bZ>nuC|v508S|hCtpP=* z{ET~$Hvj6o%Z%bH8_D}gHvx^qZCOwa()2x=e$%l-zdBXpr48!a7^YauvBRPAkL4+e%{&gIU;-c^_|uxH6d@uRC1Z znpR>JbpPsWvbvP{MRZ@Xd{V~&_t<$I^gK)m$zn@1eQKi$%(nKs!b%0ubEmL*Xv?zo@n5s3qAz%r-PoHJP2r$CwRCPaZqx(re3X;P{{3%j4dA8e27A2Qc?r^RpNOVU2qM23O z-w|^O2;SW-vPeIdCS7l~j%^NieT!S_4db-UlN|igJViAV^Br6=uc1nY@h0@BZx>qm zX};tYO?eZIbPR{cP|ll9_}W6tvTz&g^ZhihzF+M^Y?;~u=)wlMYx`N zFr-{HEFl5ax+`MoH&#`V>}48^S*SUwlK`3E=h@qWU*NB=xnxX3vcM`}mvod5F4 zE5Qa3-pn)&acBtAIqQ7ONi)=AT*qaxh(R-A|2g^O*qHz8#TDEsD7&;s+ zX1BRb88$a4voW(@8xb5zQ<3H2IGVs+odPVyq95x2MP#gx7mt4c2Gp+o;=HrA<=xpQ zB;Y|iIh5YRak4D1?b`{1^i2QmOEf;rXDDf6}H^MfPb} zZzVRySOQw#gYmKS!e#YTN$OWyx7{7|L{rQ1&;Ipl6pIDpqR* z=+{aryxj6Gx3*ypW)|h_Vt=jRaE+2jgR0kK?Jry3Jl+N~4vCo=Z6=CtJ~dz)G7C5S zZ1p^G71l%=K&)yP0+vX;%?eDX0V~}!lTtsmJN|@OSw#sPQe{jh&USXLat_^Vqw%M) zVEYI-dhah{vJANL0Z4y0>mdFt!UI_tznXievFr_Uhn^!UIBGG@0edlB=|KZMdPtTnlCOCWb z9NI&`zrbC$5nTf}%2UM#HC-0Dy^E=uV>LFNh6c>@v_1o7r^;Qo_+BA>nl_X*ofxle znLl+QY`q%5cxOYTQ+Q9_Ae~bX1Fwor9kJo!dlJftQi|@~p5M*iPLrO-9P6_{wtU!`(&cIv22UlFTT#w8Ur#OW-R1&&ZPk&tYu=BoVHruSK~^{7GtroHDK_pw+4!ApL%2_&tZJ zEOHRIU4Fp@oq8_4LiR28PEH>Ws`h?UMfrIB@02JviO&}Q>0se&NhxPLWY{)?ZETV# zV6yjND&ma)3#M{Ca6c1oow6a8{AQBWgm;Wi)% zd$qTIR>wx1#=2`O$P*$;91px$zGHjxYL4Q%7XxY!mb*xeCcPu3v?4Iq+d-=eTd>wk zn>Pf(+u_P6A=)x+M&qx_$YrDWgS7)v(Cw{P#zSUQKTE?1hY!j^EbhKUgeJo4paeY5dVAZ26lf+ z_(#r^H10iD_FH=DSl!gBFYf_KaJg|8?3UHcv+JWbC%43T9@a@fX{~Tt&yMQom>ctY z;Ok?J+mCgyma3(&UU;?Fz_**M?dx_#%3dXTzU6(s7b({|FF%@80)w@2$;IC=1h=~M zDZWA~8G6cL_AbZvFUlU`c&vPW-=_KOR?Pcl{NQo%Fn|OcIZOC#g)j^oga5CnHu(9M z2`I1q=9#GMPKG4|kazWn&2P}x-chElW$$=V2*f2>{&ZWY)e&J2!6Rx05!GuSIhS{1 zjs}4WpT(rl3^{a{7T147ZSlR&{$bxCbkh%Qf4aK$;=%Uq<-SUA2WtyPWnS3Fp4gcd zf*&UBhWMM^2F+FIcyiU;qxvxwcY5jjj_MT}Q{BBm5oj$HM3y-kE| zMjytl3w(reh7ea|rdXkO@PM2X$NR$FTqOnWI!0;30Gbqharx$%ppn7J7gzL^h|3<5-Qz>7+hVF<8_@i0iHRS?m zb#VrxeKE&{?g6dG*2K=p474`-+SA+d0< zW<4+c9!|MlIme5`#Z~1>G{k@`srfz8d|k z+0Y5s5aS!TgZIov?=yy6RK%;uHL?4j#Loq<)a0WJ1^wwBMt9ZcsRjVh1g##+T`Y_K z9sRqR(6IFO>%H;I=jFU-yQ(A(vQOzicig!5er*4A3Y{vRb)dWcSIrpfp`w5TD=TBbYjTLzX3h}bAlz1Ql}Cvj}KXR zmM$hwcCatlk9rOQscGr{r)i=h2<#U|T@GYRw_pOsZXISq6j=5D_iaKs6 zJA=4;>YTL72aS$7t;k_AMbY!;fy!cMu@i6wmm$8LIN^4+Nl=Ui67ycIXB9VG_~i}_ zDLpv%)Tl9RJo2BGXr$6L{l(Dtc%4~3&J3(tGl@`(J-If|{i-cDj>JKf5uD}-aENmf zoxCDqShg-4oRgvyM&x`JdD2OTdieC$InxR+ja{GegrN^smL|P#l-(}rw5jh2fkuTA ziT>K7nDi$BXJqn$-N-e>#eljL*Y_3Db`H;cENip>^~^n7JZ2gP3c7teM@(>oaaiSg z1KL@A`QF{yXRQ()J0=Xp+ymfL;j0`z{~VW1;6{yB^Y8c^!@C-%dXVi$Z+u<(V`^O> zcA^u0u#Nj!R z{h2ec&nGCwfV?LtqnuWyJIA3IVrzG@L-$a@D+bf+4?C=W61OTSZ90WcU}?S&OPXO> zBr)pwl~;Cwt3MRg2v%whcCMdfVtv|Cev|l(R=IPmr6?t8c=cOPx)wU$g}n?y^>ax z5FrO%mfuo}%}Z=?>?1?%{6>vk89qXa`au?Mgj4{bjf#g{=IZ+k<*;5HEOO11 z#IYTDUK(30l&yN>j3`nW8-79H4N`2-)R@l%pF@1}{muG(-BdDTG4PH5}Zxj6@Fm)G4keE_{e(@4y)6>q-|C^EnBtT$< zsPDSNeyo|*xq<0Wbn`(h-{h-~a>1jwZZ!l`Ttl~W!V{&A%-8uYIysAL-1Su?FAlGt zWjz(DaoP<0DRfbHN(v#U`|AXB zVfA{|m>n`39<&zHpTBDVD2~YHdHS_E+h2FUTa%_R5imZ;J>VRtKYNighleKO%A1qS zM74G(A=1qfHv4yJNk86C7Y9j1{|3wW2{|lo-2a?G`$ChQo`0u(5-`YD`e(^72S*%OGj;r!^?gtrw17DGzEb*J61W!JY$ux>f6{Lb5|CqFm>b1<9YI-Ew@{(ZeL!KCCF<1m#x#hueh zIH>c>>7>X_dmqf^>K9HXn^a(1e2IWYAnxR3Uw+UtSPs`38H{(ms9wfTZ*gpzyQYg= z0D|l>?yM0n4^Mz)a1XHQrCGOdH2AMDG|jtPjnaKe6Ld!23>LJ{=)lP~3p^Ws5-D!n zX?bN$jFZ<%mEUKrxkh>HPZWQMaQ>Zr?wJ3mXB7NzSY$ahuM;+w|C@N|4^WONnPu^M zQ`?c+zvfF3ea*^m0#vRE!bEv<|6iYmx8}V)&3)yNk6reWTYzhatU7W)+kWGBUOpMT zN0rHcpzPb7yl(uqHI{GG^(X1XNR>POg?r6R+6XUyifib`^#(7m&Kpgm?vp&_5uQsw z41AV&(n@dF7Vm4w>dlx5sp)}BIGF}lA$S{VpVs4lRGy2@Z22eE`S6^eAGveozU`XE z)|J<0ibF_SDCLMGW(Pt^h_}zU4FD+bI(~ubDiZ)X{xO|ahE`=?_Z%e|`H52;Zz9b) zVn^5ApJX&$j(>NbEQWke%+(IeF@aS}H58tYKp9!Za8ZLSyO&YBfKk|PGay~}z_J$5 zN|&=UcZ99*&2CeiYBg^tpZG(=`+pZw8VFIC3 zKlsN?6y1dA`?pGb|I9P=hO!WvIij2B&p6h$E2=J>`n9{t6;)@6j{cLl_&I^!!$M=L z4?gsv9vKCQ3ak(qePS-(7f2F}!TWO>FsOVP`ahglt;Y2Uoi|P4(VPJH?9*1fJ^#_X zKX3L!l%TAN1LWF&{WGTDywZH@K4UQ4>WXz-TT;C0*fR+81f==u7l@P=w40!P5~(Q+p^ z>T`VH8ewAgXQJ}(j963e2d(9MCp%I5fbykMPWwjP`SQVUpAo1jnPOAxkl)2!5z4B4 zhkt2Ea~6*c>i1G8wRzCJ#KQgiBBW&&&{vj{l2s3WK9FyVW{}o&lHB>i3Lyc7oL+6k z^>n@R{jJf50Wu)K#nF>yKXg{4dOr$|c5o&no?tnV9p85(Px38JKk-`{9CdMaUP;Jk zI$?Kw)6U{s=MTW@?6wQLU@K3tBUw@}WOJ2A$wc$U+kOx@(!|=Fe*stupDyx{&f6-% zR0kCSRbE{oTTw8lB`eG!X?O4%2Ws>+773~uc;^TpfqZ8##Xk#okWx8S=J_2gzS`&A zt|9D|r3Xkqh1vyoPfc01!8cC?>?a&C>^|SED|c8?@2E(Pe6d z?jlD-$;N8fN+D6m7=9qx5pM~U{~JL77-zZrq1H%+AfIzDA*2m)7v{l7rB8klvD_7M zuy_p@^0f@XROBX+tU_{PI{M%q?U)L1j>zablUAu)8$qfXpoLf+U`Q||@cJxU_iKD4 z;17ss?lHq%?3Tvv_8(oFVn22?vwt& zbj`?QV3r=mQo#gT&HwZ7t0hh2hOsKZU3RyKb6|?wF0K7)vy170*|#I{iuRG$yResU zhzwpXnP21mUK}n*Wk`*inY%O;a?VHk0KBjZrVz&DP=(!At{0G??OIAZKrH>F8Y<)w zHAt9|fU(qe*TK0)$s5dpIHvk?Z%n&F&7!JnP8wPFB!e{mKY=O zV#sKBClTqQ_Fh@TcJpJj^!Kfl+~{27sih<7Zk4HlR6_7_r%`8sw(a?_@scRC<3)Lw zr=!91GdS1Y3-Oif1iQOe7kUNRioH}o4rY%gW8`Xwc?*sXo;I8NVhZ@!$j(_$0CHmw znQ^1Jux2(*iFYEaiv%K-+7?}{mwbl;t-t~$!!VdzFNcq|#sPkYx{!0s+v?mxQK4*d zG1Ap*x4lW%71IAX7(0~xS6l>9f4No8@RFnk+K256j@)*GCI?b1?VJBO$BnsixRT#_ z;Sp;1)e0}{0EZ5(=d#wsoJjlm9TzPGsQsN@O^+DXH;K(!41HRdVtj@4515)`Btc*O z1sIOoyC$;-R<62g65GjPB={OR5+yp{3TzV-BYW}Txv*uTR=6Vlm1~J7v9fM0lR?7i zMrz5&B(~>SfT95dm>RX@RbiF~ISt5_4L+J!D`0CY+$O);n-+nHLXDvkCGoD19iQAx zQhd*OBc=BEq;RYawf~Owpl+~r&xXbVTZcFAkT+RlwjWCHdK@@XmIT2|t^IlB6INnH z?SqJJcYVIMpp^g=wMJZjxRd5~o18fko?N~9y zL8%?SecAU|!D63&89VlY(scMJL;{v<6#{r35S9dtB!tY7tbbVyQ2t8vFf??ucRjyP zCV1kp_fuJ(OrLqM4eyQ*s@8;y2@)PRQ+qjwu4FE>)#k{)ix+4IP1m2uxvoQByaq`K zGpp&bNf4x#8L3gdI!FUUc}T9d^EvBUfzMj@J$b8q=Rw7D8(P(Sp5(Dmo_g%-QR0q2 zGqDU?JmAR$Bk(413=zg{z;Qx-(erSY0G9T~C*cs7O<0b>E+e_WBXN%uQ~*U)HkpdK zTKQregw^Ir3ZKq<1UHfTO7vIy!5@?pz~(*sY=9PGvNEDaJ7H`ld=cES81wj!gw($Q z0sxzq9sd8ccOFhnee1giL82m{q7;#$f{2s|Xpk0~AVrFFgn&{F5J4~?B@|JyARsOD zpaKF?69~Qcu5>~XzclG3v{3Jg=XcJXJNMlG;5v+x37hPlwbx$deV^y^7Rp^G2Nka< z>g?F|NJW>9ep9jIBVXn=;iB(uCN4y{$93zfLtbqtwJ@}Jr}EQ@`;~MI!cWWvhKKb0 z5Ybd50{2T{J2Oq6)Kh#SW@PSj@Fid;Mv0hrW26E%SUd*NCFvCp^&`lk~ zuz(#9j*Dv-tE%auQN77da6Oyfcz@`7UTITq@q4~`9-rmMFFMckRbhIWCn=Sz+b5Z1z^Zn?c|>8YA^&cob;fPfpve#Uw+ z-gIJbSLAy_9Sa>uOUUUT)FD#4-FVtX;u@zSrSASOs$FK!`Z$js>Zi3Tc`sE1#v-3B z?X$nuJS?$JjiD}=AJv{3`6$)t0hYjt{@Et7QZ^q}AbNXvUiwyXw(Be}lDE0}K{^f3 z)3ED0{8D*Jzu8Vj0w)%Z=Rojn26PXk0qDkMpSB==*&ABYu5+ntqSJSUru2i`z=WvI zz06uda&1-24p}$6Cp1x|)PfZWetr_zqomZj9VYRjcOjr(xv7V(^R8^+PyhLMXF8`L^W*C!nUY}JDv30{ zRt7z|+CAd$9@;7oC3O~81P&L@ygH{PePVd63=kgnclKNHy37_R(2HWtqSOnrYs(g} z)%RI8n=heX{T0I4FSc^a3R^iDp2t-#>F^$x+}0l+YY&}kWfSjeePmiHmCzo#ul z)fDma`E2~W*SUf0UD9WKA#Mf?)Js|&dcl0lEoZNGY{@R$ZniSlPDaXj;JsX@J}q^c zIUIC9mEHC4>^Cu|`0Xv)seQbN+zS?90?sKhcgytZRd?XX9a&P61>7PS&L7_3dvx$* z1mdd)IaA^Xj4g{D!@XsRb{-_8AOY}fNSq}saM$X%gKgXL8K`qUl*UqmK~JrGaO2P8 z+>S+q`Re<~UwWEu0TodOoUVwLG#z~~_Rwq#0e=Ox7qm$5nTexqeASaoc{R2a=V>fi zO0|O90}E-9zFG)em@+tKRbud~cX%r6x<+a=t=PTf`P3wly(#=@;N+ta1*dBqu1=?z z%J9>L@3mc)Z!6y~o4->5pMtb_Yo;Z(6}U~TU+AGTWJwKmW_-2(;0D@voxd86iBj3E z>3`E6+9u|&A3XSaQN8ImUXKezZo5nvEUqo2aj#P7^=HT`b`$t*;Muq1ev1lbbz(8o zm)A{`Gwv3I$nj>)qQxo!tppmrSs?~QNzAxS4GB%Va&fyhIujp@;Q2JLoJ+MbV*xvw zXgeX@p6xkWTrN<}*c1T5)vN>AsBNQ_wR4}+|3z5y4ZvsgG9Z+lw*E=!U?H6|k;hUN zRb({m^iFeQnba3#n{*%I5|yWc0||=~2N8FAg|%}xL{w`wQ<>W8fvid1QFqg(IkZUY z+#^xrhc{?w5#Dnb6a${Mq;xNam=-pVC{7TS4tDK(wWV%<1&SNt9DEk0mMw;5$N2}J zB=l<#>}<_64E$N))lV3R#T#tcV|yqy?nPwUK#xKdW{IyC^WkFlWi~O;K(lOvbR9$n z?;qK%{_J5wXLJVdfZgHCW)vos4=Bv%=s2@qO~a`>KQ015f+4Ms}&A z1Czrce*1s)RoDe+I1J27nvT5=!qWxbcSGdTnIc}# zzr9sfBS821&zrU?xfFa9t5|7wlZj5xRn5zubLyPX$)*!E54+*q;Y6l05ow#)Jm%lu zKdfmr0Lseio%P|DdR&HEtpWvZIICkv;tn|XP_NBslL{I7yzRNNse&>MySi`9)0eG2 z%hUrE26{0wTGt@Z0~VY$&?jf*Ypn~lr*Oy^hW1aonuXx>xIaw^8Z%o+=v?Fy zVxf5Sr=9F71wL>S%tbCMDnCYxO$AgA@tYd)fVU7WQ02QVWOZ>Tb|s%uHQ1-7Jbqi@ zg^0Ghm)D12it!%S=*&x#S95gh93U3xf+bh$19dYJ@zkg0`3XC}6fLY6?6|mJz;`j@ znYwR+(*<@|1?=hbU%0;Bqwt$!p*T@>8{M6K$`l{}*C>di^r-Q!#tl|@rSE=Y8~^2B zpv?!>E>`n3>1HDyCMdVRaAVMI(n}e5T}Ue~aYJx!cku;0Ri)w28OqQ%QM!oMUsndx zd|NDMlp^4+a{;DaB#8+LE6a0}*hoX&l8x1K6Cl#*`n&+I1s;I!LB)}&ur z2lg12o3FH+-E~uCKFE3sAu-Gr9jNuDBC6e6QKkww!P)b$XvMY?7QTZPx6l9D6hMtl zVr+aiA0{gV_Cn;NVQJNqGc?LAE7F12m4hx;=ja(m+NUQlKJk4h;Wz3>C zZl~o{gG$BeCFPywb1ym@!P)~2m#}R9?cH;Yn3y^n0hD?`#&rz%u6jQC(R2g80CFXA zZ@+2h8D(`ikb?^c4~HY{a#w(v_?7Rm2-;g_D1NuOd?9issrZ-p5{VmBaMV<_^rKwZJFi8s*Cw1x zJO9U}U^l?7rzwor93c0*V7oF`7)HLNbMvUH2z!~@r#X8W+!m#Hgv>E{c^7Ej4^xnWeNz@ z_a9sOA27L(KAVP?8=h~C)P>uT7Dt=1V-f9ELQK2n+3=8yx7+q%%j|@aWgmM1&4QY$ zM#i|?dfyF?U(67_T&9NFJm%B~SbB#uHFPW;n&;C1mT3zFS+qg?`afs306Jz^W7((o z`X@@BEdTf%MA?}PBLFyK%X0aWwYP;&<*?)T9B}yGFTOft6BY+N_$?dDh$@~6eYt#> zwR1Lr7m|7E`NxN81CpN0qs~uhZy0c1zdQ3)f@EyA8Sy$JWXmXBLeB_)Ci-Vp8yh!g zYyv_yUxH*{)*0EKImnk_u9!JOU!={jQCt#`71N(nyxQ|H&GCc5h%JZ~ykT&R=3B4P z3cKoF+Gfab>eDmL;n23M>X56`)Q>Y{$kJ^3wBGi_%I-tx>Au#g)iepxcO;%_gv$h0 zB;QODO}`mz8)pVP&M%BkNFlZc9I|~6bM8`bcYer;>W9UF`4Vumy(Aw0bC(PP{Bgm& zes_e;ZvBRgx8123yvxZ$uDPoHqVS#VqaP_sGr(te>)xfGIE-O~d1r)KD=`J+t)Gk5Tb# zL(GHWI#(~dLMsE?9hXM&h*0coqI+mGwhW|^jIawTQXjB%Vk%!f43%Aeq9dO+seEAGmqK@wJ3LTJt?!yy zo@M3zVn(riXh5y`-FGe^M=#?c*Ldmq52bXU?eBtua`J7+yh8 zSKP{9UPRK8xdRh_+sSy{Lkazf()5zYpH1&R=Tg1j!EW5vy-W7+y$x1LK=yL?jzzJ_ zytzPtrV!ho@0;-R*C(VMQ5-y$O}$)aEIt`zc}Vx0&0N$1)LS?W?sRhu9kbkzifu~; z;CojQ{)2F96_^3{`R1U7dlBHSFLe|&^EjmI;+`&?LP@=`E`Bg(cW!VfGsN$et#3sL zhj>q02CiyNKdZ{s+P43o`1;9K$Mt8}E$LRIn&^WLqGExqsg`F^zj4uCIilRdegsvF zcw&CXNOW%&=id=A95<=Cd3;T>Vd#uj{cKM0c-sJnEbX(|Bu`lR5;4IG?4}6%X;~S> zK+^d3sLl9`C8ND9q5}>C6Bfm_dM`^mBw($)e-0R3d$I>~4X{n@4M`TjJK?<@HRxr&F`2#m+e9}LC0RC$~OMCs3di)Yqj#4HX;DS)-bjJRrpga zy`9q`mOa@YW|Fs;C%3X&4=LEXt-)X+)6ml{63Hp)GYh|jtya|rNl)*6p^qV3mqX3F z;oC2Vy%Uz4<6f+{3MMt*JTvm9?H@at!!e18h+@b78=l#t0NO(6vGp%fYHAMl9lhAF z`>ge5{RKkVYH7KrOTs@*w*uv+VgrvF*{y8TE?_#7MnmwtYWEv zn3pUYoKkrux;x68-U>(i?zzh#$KHXGoj;>TAO89D1k2zlTe@FE!8E#^Er$l?0mZ>A zC@%l?K>ahqbcQibeLZ*HZ5nY(48BlOC;(zCEoZK@i0JiVQ%z3SR;T%A*cEqrR?5Yq z0=T9S9bgf-gSBqwl6#1Im1xa$UY70Ve81$;d+ObuEd9nS8O-YuE4};Y>k?%06yME} z$@uRb0K0(dQaJLZLhE96fiPe|$VjEga`#dFM_@TOF|CzbSI1>H#KJLcqDSvfqu zhUFwW`Xu*Tj35X9>}HYD8wH)I*~2{?Kq~3z!2enJ3@cH}E*K!qfax@MLS-9=Gu?~7 z;(p-wg6DpMOuuEoZ)Ik7zRUiP9z?$WF{!&|*FYt&#NR^Vf3)7V7h1F75c|<|V0@@> z@o%@e?6|Ol9qB~h3*$kBVP9OrvaUlMgF@U*4-q zkl4InCP^(Q!FguL#6H<)S=!yT{Hn8jE}dA(YF#4JcuyGWE~m>DkF=X@F7xcHmET%v z=hx*Cm+B&l4@jamg>pNQ4|e?@jeE@|C3ZUHRocV5HkkH-Jd}832-M%R2>`7iZZfl! z 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 Date: Thu, 27 Feb 2025 10:55:10 +0300 Subject: [PATCH 17/58] ver. 1 --- docs/UseCase.png | Bin 0 -> 138098 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/UseCase.png diff --git a/docs/UseCase.png b/docs/UseCase.png new file mode 100644 index 0000000000000000000000000000000000000000..a52882217bef72efd7f2f16201562ce2bcd4de56 GIT binary patch literal 138098 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

tn2W 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�z|y*_Dc|2cK@aN|3jIaAyxenUne$+=q=?Dx%Zxven<9@Zzu6_CS z*K9v%Sc2`;BA8seQ#YNf{l|c^m!!wsg}Rr=nm%o(P9|lRtjJncvszfRJu)5gYF40} zl&hI(#uv1f{tCK(^9NfOWBBgPHs6WF?u3kIVtH)z8l{D7ao@Y6uTwMSnde>GS6$aX zN!X6VrP>G3i?TekH@372H4U-kl^T6!J|g=pU ztUZ2|{prHj`yZ;$exLag4}sTnof%d(vfW@rXqzA3H>?%Y2K>l**aY=_GuLV6U88I- zDcSGrA98*}T3c_9rtFs(=j4@@l{p=-aBy^PjN~kBPe~uHFJ0bkPjYZ}xu*EY(z7Yr zejMAeuPPqG@g#)N0!Hb>m~pM@_L(c?Q$$JeQ4q%BV2mnkF4fZYN=>{f3&e}#jqwXr zqI=`UE|H7nF>jX6?Axq&tejFhySsP3P05+>jG{LOsPvfb?*4}H{`c>TGcP4}*N4zF zoW}^VPs*_qn_Fpj@XaJywan`XM-ETw&>4y+X1z7$QVwN5s6t@T0i+=eLS}*H+GOh3 zQX>p1&(+=ZK=#~|hj5%>|HGXYMD0_ud)*zeTkYQ-FvKYBO?b>tdmMZ1E?!*+>4csH zPQuxHXn6RF3`9>)FZcCp?!dt7OTZ^)eM2EW@Ml2P=O?!%^+Nap$!VxyL=8)*M|XSz zc$QFBJ$FbSQ`v<0|G*4Wn$kmt4UKZ07!caUkF6|@ICWl8sBrM?J;v>{Q|CuNO_<83 z9XK%b36v38{FvbX%kwtTQI2>)Yal%hr&2J<&mRsz4zbs%mT|;x;;z@hrYRK_)%?4( zub#h8;or9vB5l5Y>G<&CbFX~7H?{opAz9JM_^?=q_8PI}8k)1AA=%(oh*!L~gpw6H zw9D#w(F(7M>#C_^S4x60Z}wWg>W**Kl_4~$FR2_-FhQDBh+ePft#8%#eZ5bdFNy!0 z^VQx{G9hnTE@>br;q&ypyjS_PZ!5DHoWyE>;aUCCwPR7lagkOhQsQ~OS_a(Ezd*N z^YEDv>}$<&Wxo|UQ*jhUBt*g#gHpjc=rCw^sIq9z2vf}bZvR0}sk9#(Nz}I0aX@0) zhsm%l#jPzQU6*{|0WB!FCl&COD?CDL@Z-nOhK9z$20PC2N~?(RakI2SXIIxZKv{HX za4@&fdeu8XcV*eoK(iWdpp*UdY4_+T14S4lLzab`yJvlpGo^wbn!4PEWm2Fwj_aUm#b;!9FnH{hwVV9$sZzk z;}7p3agwSGnukjRJ$@z`_^)B)7g)J_mX{qa-2VE)c5i+EnEAn_ zwF3*P-iiv&B4TRlgWi=*;5=hlZvB!pE>7P$;2U+z++=9?s?#~SN)79PW?gF)%g=Y&626$jE-b48b5qs3q|d2dURH?eJ{sGW6FTs)GQ9>Gy9_M=Il9Gk8m-}2+~Jr)10TKpkWZg zTs)wMh%)h%g&nq;ia=OV*W8A*qNx+R?;LWDiC6Y)Q-f1_ugDFx`3we7c?VbO;#VazM0Bi{*4rkE-#Yro0j@C3S3-oFy-xD&iQXN3K3QS!uXS* zfTOh||NQ^YL*NF02W!ThR%n literal 0 HcmV?d00001 From e9a2ee4d186430aaba57809c473665e7163e12c2 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 27 Feb 2025 20:19:18 +0300 Subject: [PATCH 18/58] ver. 1 --- .../All.png" | Bin 0 -> 99633 bytes .../Main Window.png" | Bin 0 -> 58321 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 "docs/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/All.png" create mode 100644 "docs/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Main Window.png" diff --git "a/docs/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/All.png" "b/docs/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/All.png" new file mode 100644 index 0000000000000000000000000000000000000000..5bddb1d345988c3c38f2838164949dd21f0cf4af GIT binary patch literal 99633 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 RY@F)M>GQv2oV5M@KLE?Rdk_Es literal 0 HcmV?d00001 diff --git "a/docs/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Main Window.png" "b/docs/\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Main Window.png" new file mode 100644 index 0000000000000000000000000000000000000000..ad873cd56786aacd51f35bcb8a402168fb8725f2 GIT binary patch literal 58321 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 Date: Sun, 2 Mar 2025 11:42:54 +0300 Subject: [PATCH 19/58] server 0.320 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлено обозначение сокетов по socketdescriptor Список сокетов заменён на map, хранящий пару В debug сервера выводится socketdescriptor при подключении/отключении пользователя, а также при выполнении команд. --- server/func2serv.cpp | 4 +++- server/func2serv.h | 3 ++- server/mytcpserver.cpp | 42 +++++++++++++++++++++++++++++++++--------- server/mytcpserver.h | 13 +++---------- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/server/func2serv.cpp b/server/func2serv.cpp index 2898b70..aabd6a8 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -10,9 +10,11 @@ QMap> mockDatabase = { }; using namespace std; -QByteArray parsing(QString input) +QByteArray parsing(QString input, int socdes) { + QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + qDebug() << socdes << " user command: " << container[0]; QString var = container[0]; if (var == "check_task") { diff --git a/server/func2serv.h b/server/func2serv.h index 9eca279..f182fcb 100644 --- a/server/func2serv.h +++ b/server/func2serv.h @@ -3,7 +3,8 @@ #include -QByteArray parsing(QString input); +QByteArray parsing(QString input, int socdes); + QByteArray auth(QStringList ); QByteArray reg(/*QStringList*/); QByteArray get_stat(/*QStringList*/); diff --git a/server/mytcpserver.cpp b/server/mytcpserver.cpp index 1f8cd1b..23c3afe 100644 --- a/server/mytcpserver.cpp +++ b/server/mytcpserver.cpp @@ -8,15 +8,14 @@ MyTcpServer::~MyTcpServer() { mTcpServer->close(); server_status = 0; - qDeleteAll(mTcpSockets); // Удаляем все сокеты + qDeleteAll(mSocketDescriptors); // Удаляем все сокеты } MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) { mTcpServer = new QTcpServer(this); - connect(mTcpServer, &QTcpServer::newConnection, - this, &MyTcpServer::slotNewConnection); + connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); if (!mTcpServer->listen(QHostAddress::Any, 33333)) { qDebug() << "server is not started"; @@ -30,7 +29,17 @@ void MyTcpServer::slotNewConnection() { if (server_status == 1) { QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); - mTcpSockets.append(clientSocket); // Добавляем сокет в список + int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета + + if (socketDescriptor == -1) { + qDebug() << "Invalid socket descriptor!"; + clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен + return; + } + + mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере + + qDebug() << "New connection, socket descriptor:" << socketDescriptor; clientSocket->write("Hello, World!!! I am echo server!\r\n"); @@ -41,7 +50,7 @@ void MyTcpServer::slotNewConnection() void MyTcpServer::slotServerRead() { - QTcpSocket *clientSocket = qobject_cast(sender()); // Получаем сокет, который отправил сигнал + QTcpSocket *clientSocket = qobject_cast(sender()); if (!clientSocket) { return; } @@ -50,23 +59,38 @@ void MyTcpServer::slotServerRead() while (clientSocket->bytesAvailable() > 0) { QByteArray array = clientSocket->readAll(); qDebug() << array << "\n"; - if (array == "\x01") { + if (array == "\\x01\r\n") { clientSocket->write(res.toUtf8()); res = ""; } else { res.append(array); } } - clientSocket->write(parsing(res)); + clientSocket->write(parsing(res, clientSocket->socketDescriptor())); } void MyTcpServer::slotClientDisconnected() { - QTcpSocket *clientSocket = qobject_cast(sender()); // Получаем сокет, который отправил сигнал + QTcpSocket *clientSocket = qobject_cast(sender()); if (!clientSocket) { return; } - mTcpSockets.removeOne(clientSocket); // Удаляем сокет из списка + // Получаем дескриптор сокета из контейнера + int socketDescriptor = -1; + for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { + if (it.value() == clientSocket) { + socketDescriptor = it.key(); + break; + } + } + + if (socketDescriptor != -1) { + mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера + qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; + } else { + qDebug() << "Client disconnected, but socket descriptor not found!"; + } + clientSocket->deleteLater(); // Удаляем сокет } diff --git a/server/mytcpserver.h b/server/mytcpserver.h index 000880d..fe179a1 100644 --- a/server/mytcpserver.h +++ b/server/mytcpserver.h @@ -3,10 +3,10 @@ #include #include #include - #include #include #include +#include class MyTcpServer : public QObject { @@ -22,13 +22,6 @@ public slots: QTcpServer * mTcpServer; QTcpSocket * mTcpSocket; int server_status; - QList mTcpSockets; + QMap mSocketDescriptors; // Хранение дескрипторов сокетов }; -#endif MYTCPSERVER_H - - - - - - - +#endif // MYTCPSERVER_H From 75bcbfa13e5b7bbfc1f7073bc0961c63a887a5c7 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 6 Mar 2025 07:33:35 +0300 Subject: [PATCH 20/58] ver. from 06.03 --- ...1\200\320\276\320\273\320\265\320\271.png" | Bin 277855 -> 121910 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" "b/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" index e7de0c670398b5e0f714b510def4f246027df5a1..f87c293db575a5b1229ca09303d0e039b4a3c621 100644 GIT binary patch literal 121910 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

qp=v~ZEvW2)>dd2;`gXo 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%0AMMi?0b>$$LWX@Jjwtx23np4!9l2J+wLT?~Cd= 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 z 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 e%e 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

cKxGE`yWh*r?vjB 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 z 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 Date: Thu, 6 Mar 2025 07:34:30 +0300 Subject: [PATCH 21/58] =?UTF-8?q?Delete=20docs/=D0=A0=D0=B0=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80?= =?UTF-8?q?=D0=BE=D0=BB=D0=B5=D0=B9.png?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\200\320\276\320\273\320\265\320\271.png" | Bin 121910 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" diff --git "a/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" "b/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" deleted file mode 100644 index f87c293db575a5b1229ca09303d0e039b4a3c621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121910 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

qp=v~ZEvW2)>dd2;`gXo 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%0AMMi?0b>$$LWX@Jjwtx23np4!9l2J+wLT?~Cd= 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 z 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 Date: Thu, 6 Mar 2025 07:34:55 +0300 Subject: [PATCH 22/58] ver. from 06.03 --- ...21\200\320\276\320\273\320\265\320\271.png" | Bin 0 -> 121910 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" diff --git "a/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" "b/docs/\320\240\320\260\321\201\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265 \321\200\320\276\320\273\320\265\320\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..f87c293db575a5b1229ca09303d0e039b4a3c621 GIT binary patch literal 121910 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

qp=v~ZEvW2)>dd2;`gXo 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%0AMMi?0b>$$LWX@Jjwtx23np4!9l2J+wLT?~Cd= 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 z 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 Date: Fri, 7 Mar 2025 19:26:50 +0300 Subject: [PATCH 23/58] Update mytcpserver.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit убрал строчку clientSocket->write("Hello, World!!! I am echo server!\r\n"), потому что в конструкторе синглтона клиента у меня нет приёма ответа сразу после подключения, так что в ней нет смысла --- server/mytcpserver.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/mytcpserver.cpp b/server/mytcpserver.cpp index 23c3afe..be276cb 100644 --- a/server/mytcpserver.cpp +++ b/server/mytcpserver.cpp @@ -41,8 +41,6 @@ void MyTcpServer::slotNewConnection() qDebug() << "New connection, socket descriptor:" << socketDescriptor; - clientSocket->write("Hello, World!!! I am echo server!\r\n"); - connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); } From 1a798b7dd290457fe8da5dc876f23e86a35298e0 Mon Sep 17 00:00:00 2001 From: Petr <86932261+PetrSaprykin@users.noreply.github.com> Date: Tue, 11 Mar 2025 19:27:59 +0300 Subject: [PATCH 24/58] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=B0=D1=80=D1=83=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=A0?= =?UTF-8?q?=D1=83=D1=81=D0=BB=D0=B0=D0=BD=D0=B0=20=D0=B2=20func2serv.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/func2serv.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/func2serv.cpp b/server/func2serv.cpp index aabd6a8..78eb070 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -57,12 +57,15 @@ QByteArray parsing(QString input, int socdes) } } + +// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ QByteArray auth( QStringList log ){ string res = "You succesfull logged in!\r\nWelcom to system: " + log[1].toStdString() + "\r\nYour password: " + log[2].toStdString()+"\r\n"; QByteArray byteArray(res.c_str(), res.length()); return byteArray; } +// с регистрацией та же тема, успешная - return "true", неуспешная - return "false" QByteArray reg(/*QStringList*/){ return "you have been successfully registered\r\n"; } From de060afaa78fe340a5ef65dce326f6bc0cdb1f60 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:00:07 +0300 Subject: [PATCH 25/58] Create static.yml --- .github/workflows/static.yml | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 0000000..cd0ed7e --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,54 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload entire repository + path: './html/' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 + + # Install Doxygen + - name: Install Doxygen + run: sudo apt install doxygen && doxygen --version + + - name: Install Graphviz + run: sudo apt install graphviz + + # Create documentation + - name: Create documentation + run: doxygen From 6539590694fe826556de3936d288505a6295be8d Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:02:47 +0300 Subject: [PATCH 26/58] Doxyfile --- Doxyfile | 1 + 1 file changed, 1 insertion(+) create mode 100644 Doxyfile diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Doxyfile @@ -0,0 +1 @@ + From 3cef92148934a93f38320c983ed55e68619fb167 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:07:58 +0300 Subject: [PATCH 27/58] Update Doxyfile --- Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doxyfile b/Doxyfile index 8b13789..fd38861 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1 +1 @@ - ++ From 8563532de22ba9d0639226654f4b5f9aadfebb93 Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:10:03 +0300 Subject: [PATCH 28/58] Update static.yml --- .github/workflows/static.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index cd0ed7e..c445979 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -32,7 +32,19 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Setup Pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@v4 + + # Install Doxygen + - name: Install Doxygen + run: sudo apt install doxygen && doxygen --version + + - name: Install Graphviz + run: sudo apt install graphviz + + # Create documentation + - name: Create documentation + run: doxygen + - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: @@ -41,14 +53,3 @@ jobs: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 - - # Install Doxygen - - name: Install Doxygen - run: sudo apt install doxygen && doxygen --version - - - name: Install Graphviz - run: sudo apt install graphviz - - # Create documentation - - name: Create documentation - run: doxygen From cb4974f680fed4a810f4eab63c011d8322301353 Mon Sep 17 00:00:00 2001 From: Starkcrimea <92050654+Starkcrimea@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:36:23 +0300 Subject: [PATCH 29/58] Update func2serv.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проверка doxygen --- server/func2serv.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/server/func2serv.h b/server/func2serv.h index f182fcb..f529f3e 100644 --- a/server/func2serv.h +++ b/server/func2serv.h @@ -4,7 +4,17 @@ #include QByteArray parsing(QString input, int socdes); +/** + \brief Шаблонная функция суммирования двух объектов + \tparam T - любой тип, для которого определен оператор суммирования + и оператор присваивания + + \param [in] a Первый объект, который нужно сложить + \param [in] b Второй объект, который нужно сложить + + \return Новый объект типа *T*, равный сумме *a* и *b*. +*/ QByteArray auth(QStringList ); QByteArray reg(/*QStringList*/); QByteArray get_stat(/*QStringList*/); From 4bb9204408d58ac7bd99bee25ae31536f0ee2d39 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Wed, 26 Mar 2025 17:30:34 +0300 Subject: [PATCH 30/58] Server 0.321 Added Database --- Server 0.321/databasesingleton.cpp | 198 +++++++++++++++++++++++++ Server 0.321/databasesingleton.h | 62 ++++++++ Server 0.321/echoServer.pro | 34 +++++ Server 0.321/func2serv.cpp | 222 +++++++++++++++++++++++++++++ Server 0.321/func2serv.h | 26 ++++ Server 0.321/main.cpp | 16 +++ Server 0.321/mytcpserver.cpp | 94 ++++++++++++ Server 0.321/mytcpserver.h | 27 ++++ 8 files changed, 679 insertions(+) create mode 100644 Server 0.321/databasesingleton.cpp create mode 100644 Server 0.321/databasesingleton.h create mode 100644 Server 0.321/echoServer.pro create mode 100644 Server 0.321/func2serv.cpp create mode 100644 Server 0.321/func2serv.h create mode 100644 Server 0.321/main.cpp create mode 100644 Server 0.321/mytcpserver.cpp create mode 100644 Server 0.321/mytcpserver.h diff --git a/Server 0.321/databasesingleton.cpp b/Server 0.321/databasesingleton.cpp new file mode 100644 index 0000000..28e84ed --- /dev/null +++ b/Server 0.321/databasesingleton.cpp @@ -0,0 +1,198 @@ +#include "databasesingleton.h" + +DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; +SingletonDestroyer DataBaseSingleton::destroyer; + +DataBaseSingleton::DataBaseSingleton() { + db = QSqlDatabase::addDatabase("QSQLITE"); +} + +DataBaseSingleton* DataBaseSingleton::getInstance() { + if (!p_instance) { + p_instance = new DataBaseSingleton(); + destroyer.initialize(p_instance); + } + return p_instance; +} + +bool DataBaseSingleton::initialize(const QString& databaseName) { + db.setDatabaseName(databaseName); + if (!db.open()) { + qDebug() << "Ошибка подключения:" << db.lastError().text(); + return false; + } + + // Создание таблицы users + QSqlQuery query(db); + bool success = query.exec( + "CREATE TABLE IF NOT EXISTS users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name VARCHAR(20) NOT NULL, " + "email VARCHAR(50) NOT NULL , " + "pass VARCHAR(20) NOT NULL, " + "is_admin BOOLEAN DEFAULT FALSE)" + ); + + // Создание таблицы products + success &= query.exec( + "CREATE TABLE IF NOT EXISTS products (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "id_user INTEGER NOT NULL, " + "name VARCHAR(50) NOT NULL, " + "proteins INTEGER NOT NULL, " + "fatness INTEGER NOT NULL, " + "carbs INTEGER NOT NULL, " + "weight INTEGER NOT NULL, " + "cost INTEGER NOT NULL, " + "type INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы favorites + success &= query.exec( + "CREATE TABLE IF NOT EXISTS favorites (" + "id_user INTEGER NOT NULL, " + "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки + "calories INTEGER NOT NULL, " + "all_cost INTEGER NOT NULL, " + "all_weight INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы statistics + success &= query.exec( + "CREATE TABLE IF NOT EXISTS statistics (" + "count_registrations INTEGER DEFAULT 0, " + "count_visits INTEGER DEFAULT 0, " + "count_generations INTEGER DEFAULT 0)" + ); + + // Инициализация статистики, если таблица пуста + query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); + + return success; +} + +QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { + QSqlQuery query(db); + query.prepare(queryStr); + for (auto it = params.begin(); it != params.end(); ++it) { + query.bindValue(it.key(), it.value()); + } + if (!query.exec()) { + qDebug() << "Ошибка запроса:" << query.lastError().text(); + qDebug() << "Текст запроса:" << queryStr; + } + return query; +} + +// Методы для работы с таблицей users +bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { + QSqlQuery query = executeQuery( + "SELECT * FROM users WHERE name = :name AND pass = :pass", + {{":name", login}, {":pass", password}} + ); + return query.next(); +} + +bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { + QSqlQuery query = executeQuery( + "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", + {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} + ); + bool res = query.exec(); + qDebug() << "Ошибка запроса:" << query.lastError().text(); + return res; +} + +// Методы для работы с таблицей products +bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { + return executeQuery( + "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " + "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", + {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, + {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} + ).exec(); +} + +QVector DataBaseSingleton::getProductsByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM products WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector products; + while (query.next()) { + QVariantMap product; + product["id"] = query.value("id").toInt(); + product["name"] = query.value("name").toString(); + product["proteins"] = query.value("proteins").toInt(); + product["fatness"] = query.value("fatness").toInt(); + product["carbs"] = query.value("carbs").toInt(); + product["weight"] = query.value("weight").toInt(); + product["cost"] = query.value("cost").toInt(); + product["type"] = query.value("type").toInt(); + products.append(product); + } + return products; +} + +// Методы для работы с таблицей favorites +bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { + // Преобразуем QVector в QVector + QVector productIdsStr; + for (int id : productIds) { + productIdsStr.append(QString::number(id)); // Преобразуем int в QString + } + + // Преобразуем QVector в QStringList и объединяем в строку через запятую + QString productsStr = QStringList::fromVector(productIdsStr).join(","); + + // Выполняем SQL-запрос + return executeQuery( + "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " + "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", + {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, + {":all_cost", allCost}, {":all_weight", allWeight}} + ).exec(); +} + +QVector DataBaseSingleton::getFavoritesByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM favorites WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector favorites; + while (query.next()) { + QVariantMap favorite; + favorite["products"] = query.value("products").toString(); + favorite["calories"] = query.value("calories").toInt(); + favorite["all_cost"] = query.value("all_cost").toInt(); + favorite["all_weight"] = query.value("all_weight").toInt(); + favorites.append(favorite); + } + return favorites; +} + +// Методы для работы с таблицей statistics +bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { + return executeQuery( + "UPDATE statistics SET count_registrations = :registrations, " + "count_visits = :visits, count_generations = :generations", + {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} + ).exec(); +} + +QVariantMap DataBaseSingleton::getStatistics() { + QSqlQuery query = executeQuery("SELECT * FROM statistics"); + QVariantMap stats; + if (query.next()) { + stats["registrations"] = query.value("count_registrations").toInt(); + stats["visits"] = query.value("count_visits").toInt(); + stats["generations"] = query.value("count_generations").toInt(); + } + return stats; +} + +// Реализация разрушителя +SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } +void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.321/databasesingleton.h b/Server 0.321/databasesingleton.h new file mode 100644 index 0000000..db7e7e3 --- /dev/null +++ b/Server 0.321/databasesingleton.h @@ -0,0 +1,62 @@ +#ifndef DATABASESINGLETON_H +#define DATABASESINGLETON_H + +#include +#include +#include +#include +#include +#include + +class DataBaseSingleton; + +// Класс-разрушитель для корректного удаления Singleton +class SingletonDestroyer { +private: + DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton +public: + ~SingletonDestroyer(); // Деструктор для удаления Singleton + void initialize(DataBaseSingleton* p); // Инициализация указателя +}; + +// Основной класс для работы с базой данных +class DataBaseSingleton { +private: + static DataBaseSingleton* p_instance; // Единственный экземпляр класса + static SingletonDestroyer destroyer; // Объект-разрушитель + QSqlDatabase db; // Объект базы данных + + DataBaseSingleton(); // Приватный конструктор + DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования + DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; + ~DataBaseSingleton() = default; // Приватный деструктор + friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору + +public: + // Получение экземпляра Singleton + static DataBaseSingleton* getInstance(); + + // Инициализация БД: имя файла, создание таблиц + bool initialize(const QString& databaseName); + + // Выполнение параметризованного SQL-запроса + QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); + + // Методы для работы с таблицей users + bool checkUserCredentials(const QString& login, const QString& password); + bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); + + // Методы для работы с таблицей products + bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); + QVector getProductsByUser(int userId); + + // Методы для работы с таблицей favorites + bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); + QVector getFavoritesByUser(int userId); + + // Методы для работы с таблицей statistics + bool updateStatistics(int registrations, int visits, int generations); + QVariantMap getStatistics(); +}; + +#endif // DATABASESINGLETON_H diff --git a/Server 0.321/echoServer.pro b/Server 0.321/echoServer.pro new file mode 100644 index 0000000..fa16d4f --- /dev/null +++ b/Server 0.321/echoServer.pro @@ -0,0 +1,34 @@ +QT -= gui + +QT += network #Для работы с сетью +QT += sql + +CONFIG += c++11 console +CONFIG -= app_bundle + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + databasesingleton.cpp \ + func2serv.cpp \ + main.cpp \ + mytcpserver.cpp + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +HEADERS += \ + databasesingleton.h \ + func2serv.h \ + mytcpserver.h diff --git a/Server 0.321/func2serv.cpp b/Server 0.321/func2serv.cpp new file mode 100644 index 0000000..4fa609c --- /dev/null +++ b/Server 0.321/func2serv.cpp @@ -0,0 +1,222 @@ +#include "func2serv.h" +#include +#include +#include +#include +// Заглушка для базы данных + + +QMap> mockDatabase = { + {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, + {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, + }; + +using namespace std; +QByteArray parsing(QString input, int socdes) +{ + + QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + + if (container.isEmpty()) { + return "server error: empty command\\n"; + } + + + qDebug() << socdes << " user command: " << container[0]; + QString var = container[0]; + if (var == "check_task") + { + return check_task(); + } + else if (var =="auth") + { + return auth(container); + } + else if (var == "user" && container[2] == "get_products") { + return get_products(container); + } + else if (var =="reg") + { + return reg(container); + } + else if (var == "get_stat") + { + return(get_stat()); + } + else if (var == "admin" && container[1] == "dynamic_stat") { + return get_dynamic_stat(); + } + else if (var == "menu_export") + { + return menu_export(); + } + else if (var == "user" && container[2] == "add_favorite_ration") { + return add_favorite_ration(container); + } + else if (var == "admin" && container[1] == "get_all_users") { + return get_all_users(); + } + else if (var == "admin" && container[1] == "stable_stat") { + return get_stable_stat(); + } + else + { + return "server error: unknow command\r\n"; + } +} + + +// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ +QByteArray auth(QStringList log) { + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + bool authSuccess = db->checkUserCredentials(log[1], log[2]); + + if (authSuccess) { + return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; + } + return "auth_failed//Invalid credentials\r\n"; +} + +QByteArray reg(QStringList params) { + if (params.size() != 4) { + return "reg_failed//Недостаточно параметров для регистрации\r\n"; + } + + QString name = params[1]; + QString email = params[2]; + QString password = params[3]; + + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + + QSqlQuery checkQuery = db->executeQuery( + "SELECT * FROM users WHERE email = :email", + {{":email", email}} + ); + + if (!checkQuery.exec()) { + return "reg_failed//Ошибка при проверке email\r\n"; + } + + bool success = db->addUser(name, email, password, false); + + if (success) { + return "reg_success//Регистрация прошла успешно\r\n"; + } else { + return "reg_failed//Ошибка при регистрации\r\n"; + } +} + +QByteArray get_stat(/*QStringList*/){ + return "Your Statistic: null\r\n"; +} + +QByteArray check_task(/*QStringList*/){ + return "Task was succesful completed\r\n"; +} +QByteArray menu_export(/*QStringList*/){ + return "Меню успешно экспортировано!\r\n"; +} + +void fetch_products_from_db(const QString& userId, QStringList& products) { + + if (mockDatabase.contains(userId)) { + products = mockDatabase[userId]; + } +} +QByteArray get_products(QStringList params) { + QString userId = params[1]; // ID пользователя + QStringList products; // Список продуктов + + + fetch_products_from_db(userId, products); + + + QString response; + for (const QString& product : std::as_const(products)) { + response += "prod//" + product + "\r\n"; + } + + return response.toUtf8(); +} +QByteArray get_all_users() { + QStringList users; + + // fetch_users_from_db(users); + + QString response; + for (const QString& user : users) { + response += user + "\r\n"; + } + + return response.toUtf8(); +} +int get_user_count() { + // Здесь будет SQL-запрос, пока заглушка + return 152; // Примерное значение +} + +int get_product_count() { + // Здесь будет SQL-запрос, пока заглушка + return 732; // Примерное значение +} +QByteArray get_stable_stat() { + + int userCount = 0; + int productCount = 0; + + userCount = get_user_count(); + productCount = get_product_count(); + + // Формируем строку ответа + QString response = "Users: " + QString::number(userCount) + "\r\n" + + "Products: " + QString::number(productCount) + "\r\n"; + + return response.toUtf8(); +} +int get_weekly_logins() { + // Заглушка, пока без БД + return 78; // Примерное значение +} + +int get_monthly_logins() { + // Заглушка, пока без БД + return 312; // Примерное значение +} +QByteArray get_dynamic_stat() { + int weeklyLogins = 0; + int monthlyLogins = 0; + + // Получаем данные из БД (пока заглушки) + weeklyLogins = get_weekly_logins(); + monthlyLogins = get_monthly_logins(); + + // Формируем строку ответа + QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + + "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; + + return response.toUtf8(); +} +QByteArray add_favorite_ration(const QStringList& container) { + QString userId = container[1]; // ID пользователя + QString rationId = container[2]; // ID рациона + + bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки + + if (success) { + return "Ration successfully added to favorites\r\n"; + } else { + return "Error: failed to add ration to favorites\r\n"; + } +} +bool add_ration_to_favorites(const QString& userId, const QString& rationId) { + qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; + return true; // Заглушка, потом заменить на SQL-запрос +} + + + + + + + + diff --git a/Server 0.321/func2serv.h b/Server 0.321/func2serv.h new file mode 100644 index 0000000..76cb0fb --- /dev/null +++ b/Server 0.321/func2serv.h @@ -0,0 +1,26 @@ +#ifndef FUNC2SERV_H +#define FUNC2SERV_H + +#include + +QByteArray parsing(QString input, int socdes); + +QByteArray auth(QStringList ); +QByteArray reg(QStringList); +QByteArray get_stat(/*QStringList*/); +QByteArray check_task(/*QStringList*/); +QByteArray menu_export(/*QStringList*/); +QByteArray get_products(QStringList params); +QByteArray get_all_users(); +QByteArray get_stable_stat(); +int get_user_count(); +int get_product_count(); +QByteArray get_dynamic_stat(); +int get_weekly_logins(); +int get_monthly_logins(); +QByteArray add_favorite_ration(const QStringList& container); +bool add_ration_to_favorites(const QString& userId, const QString& rationId); + +#include + +#endif // FUNC2SERV_H diff --git a/Server 0.321/main.cpp b/Server 0.321/main.cpp new file mode 100644 index 0000000..c1efc71 --- /dev/null +++ b/Server 0.321/main.cpp @@ -0,0 +1,16 @@ +#include +#include "mytcpserver.h" +#include "databasesingleton.h" + +int main(int argc, char *argv[]) { + QCoreApplication a(argc, argv); + + // Инициализация БД + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + if (!db->initialize("Easyweek.db")) { + qFatal("Failed to initialize database"); + } + + MyTcpServer myserv; + return a.exec(); +} diff --git a/Server 0.321/mytcpserver.cpp b/Server 0.321/mytcpserver.cpp new file mode 100644 index 0000000..be276cb --- /dev/null +++ b/Server 0.321/mytcpserver.cpp @@ -0,0 +1,94 @@ +#include "mytcpserver.h" +#include +#include +#include +#include "func2serv.h" + +MyTcpServer::~MyTcpServer() +{ + mTcpServer->close(); + server_status = 0; + qDeleteAll(mSocketDescriptors); // Удаляем все сокеты +} + +MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) +{ + mTcpServer = new QTcpServer(this); + + connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); + + if (!mTcpServer->listen(QHostAddress::Any, 33333)) { + qDebug() << "server is not started"; + } else { + server_status = 1; + qDebug() << "server is started"; + } +} + +void MyTcpServer::slotNewConnection() +{ + if (server_status == 1) { + QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); + int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета + + if (socketDescriptor == -1) { + qDebug() << "Invalid socket descriptor!"; + clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен + return; + } + + mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере + + qDebug() << "New connection, socket descriptor:" << socketDescriptor; + + connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); + connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); + } +} + +void MyTcpServer::slotServerRead() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + QString res = ""; + while (clientSocket->bytesAvailable() > 0) { + QByteArray array = clientSocket->readAll(); + qDebug() << array << "\n"; + if (array == "\\x01\r\n") { + clientSocket->write(res.toUtf8()); + res = ""; + } else { + res.append(array); + } + } + clientSocket->write(parsing(res, clientSocket->socketDescriptor())); +} + +void MyTcpServer::slotClientDisconnected() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + // Получаем дескриптор сокета из контейнера + int socketDescriptor = -1; + for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { + if (it.value() == clientSocket) { + socketDescriptor = it.key(); + break; + } + } + + if (socketDescriptor != -1) { + mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера + qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; + } else { + qDebug() << "Client disconnected, but socket descriptor not found!"; + } + + clientSocket->deleteLater(); // Удаляем сокет +} diff --git a/Server 0.321/mytcpserver.h b/Server 0.321/mytcpserver.h new file mode 100644 index 0000000..fe179a1 --- /dev/null +++ b/Server 0.321/mytcpserver.h @@ -0,0 +1,27 @@ +#ifndef MYTCPSERVER_H +#define MYTCPSERVER_H +#include +#include +#include +#include +#include +#include +#include + +class MyTcpServer : public QObject +{ + Q_OBJECT +public: + explicit MyTcpServer(QObject *parent = nullptr); + ~MyTcpServer(); +public slots: + void slotNewConnection(); + void slotClientDisconnected(); + void slotServerRead(); +private: + QTcpServer * mTcpServer; + QTcpSocket * mTcpSocket; + int server_status; + QMap mSocketDescriptors; // Хранение дескрипторов сокетов +}; +#endif // MYTCPSERVER_H From b3f978e052b95d0749dbdac8100d42eacde9cb60 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Wed, 26 Mar 2025 17:31:01 +0300 Subject: [PATCH 31/58] Delete Server 0.321 directory --- Server 0.321/databasesingleton.cpp | 198 ------------------------- Server 0.321/databasesingleton.h | 62 -------- Server 0.321/echoServer.pro | 34 ----- Server 0.321/func2serv.cpp | 222 ----------------------------- Server 0.321/func2serv.h | 26 ---- Server 0.321/main.cpp | 16 --- Server 0.321/mytcpserver.cpp | 94 ------------ Server 0.321/mytcpserver.h | 27 ---- 8 files changed, 679 deletions(-) delete mode 100644 Server 0.321/databasesingleton.cpp delete mode 100644 Server 0.321/databasesingleton.h delete mode 100644 Server 0.321/echoServer.pro delete mode 100644 Server 0.321/func2serv.cpp delete mode 100644 Server 0.321/func2serv.h delete mode 100644 Server 0.321/main.cpp delete mode 100644 Server 0.321/mytcpserver.cpp delete mode 100644 Server 0.321/mytcpserver.h diff --git a/Server 0.321/databasesingleton.cpp b/Server 0.321/databasesingleton.cpp deleted file mode 100644 index 28e84ed..0000000 --- a/Server 0.321/databasesingleton.cpp +++ /dev/null @@ -1,198 +0,0 @@ -#include "databasesingleton.h" - -DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; -SingletonDestroyer DataBaseSingleton::destroyer; - -DataBaseSingleton::DataBaseSingleton() { - db = QSqlDatabase::addDatabase("QSQLITE"); -} - -DataBaseSingleton* DataBaseSingleton::getInstance() { - if (!p_instance) { - p_instance = new DataBaseSingleton(); - destroyer.initialize(p_instance); - } - return p_instance; -} - -bool DataBaseSingleton::initialize(const QString& databaseName) { - db.setDatabaseName(databaseName); - if (!db.open()) { - qDebug() << "Ошибка подключения:" << db.lastError().text(); - return false; - } - - // Создание таблицы users - QSqlQuery query(db); - bool success = query.exec( - "CREATE TABLE IF NOT EXISTS users (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "name VARCHAR(20) NOT NULL, " - "email VARCHAR(50) NOT NULL , " - "pass VARCHAR(20) NOT NULL, " - "is_admin BOOLEAN DEFAULT FALSE)" - ); - - // Создание таблицы products - success &= query.exec( - "CREATE TABLE IF NOT EXISTS products (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "id_user INTEGER NOT NULL, " - "name VARCHAR(50) NOT NULL, " - "proteins INTEGER NOT NULL, " - "fatness INTEGER NOT NULL, " - "carbs INTEGER NOT NULL, " - "weight INTEGER NOT NULL, " - "cost INTEGER NOT NULL, " - "type INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы favorites - success &= query.exec( - "CREATE TABLE IF NOT EXISTS favorites (" - "id_user INTEGER NOT NULL, " - "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки - "calories INTEGER NOT NULL, " - "all_cost INTEGER NOT NULL, " - "all_weight INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы statistics - success &= query.exec( - "CREATE TABLE IF NOT EXISTS statistics (" - "count_registrations INTEGER DEFAULT 0, " - "count_visits INTEGER DEFAULT 0, " - "count_generations INTEGER DEFAULT 0)" - ); - - // Инициализация статистики, если таблица пуста - query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); - - return success; -} - -QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { - QSqlQuery query(db); - query.prepare(queryStr); - for (auto it = params.begin(); it != params.end(); ++it) { - query.bindValue(it.key(), it.value()); - } - if (!query.exec()) { - qDebug() << "Ошибка запроса:" << query.lastError().text(); - qDebug() << "Текст запроса:" << queryStr; - } - return query; -} - -// Методы для работы с таблицей users -bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { - QSqlQuery query = executeQuery( - "SELECT * FROM users WHERE name = :name AND pass = :pass", - {{":name", login}, {":pass", password}} - ); - return query.next(); -} - -bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { - QSqlQuery query = executeQuery( - "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", - {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} - ); - bool res = query.exec(); - qDebug() << "Ошибка запроса:" << query.lastError().text(); - return res; -} - -// Методы для работы с таблицей products -bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { - return executeQuery( - "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " - "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", - {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, - {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} - ).exec(); -} - -QVector DataBaseSingleton::getProductsByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM products WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector products; - while (query.next()) { - QVariantMap product; - product["id"] = query.value("id").toInt(); - product["name"] = query.value("name").toString(); - product["proteins"] = query.value("proteins").toInt(); - product["fatness"] = query.value("fatness").toInt(); - product["carbs"] = query.value("carbs").toInt(); - product["weight"] = query.value("weight").toInt(); - product["cost"] = query.value("cost").toInt(); - product["type"] = query.value("type").toInt(); - products.append(product); - } - return products; -} - -// Методы для работы с таблицей favorites -bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { - // Преобразуем QVector в QVector - QVector productIdsStr; - for (int id : productIds) { - productIdsStr.append(QString::number(id)); // Преобразуем int в QString - } - - // Преобразуем QVector в QStringList и объединяем в строку через запятую - QString productsStr = QStringList::fromVector(productIdsStr).join(","); - - // Выполняем SQL-запрос - return executeQuery( - "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " - "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", - {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, - {":all_cost", allCost}, {":all_weight", allWeight}} - ).exec(); -} - -QVector DataBaseSingleton::getFavoritesByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM favorites WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector favorites; - while (query.next()) { - QVariantMap favorite; - favorite["products"] = query.value("products").toString(); - favorite["calories"] = query.value("calories").toInt(); - favorite["all_cost"] = query.value("all_cost").toInt(); - favorite["all_weight"] = query.value("all_weight").toInt(); - favorites.append(favorite); - } - return favorites; -} - -// Методы для работы с таблицей statistics -bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { - return executeQuery( - "UPDATE statistics SET count_registrations = :registrations, " - "count_visits = :visits, count_generations = :generations", - {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} - ).exec(); -} - -QVariantMap DataBaseSingleton::getStatistics() { - QSqlQuery query = executeQuery("SELECT * FROM statistics"); - QVariantMap stats; - if (query.next()) { - stats["registrations"] = query.value("count_registrations").toInt(); - stats["visits"] = query.value("count_visits").toInt(); - stats["generations"] = query.value("count_generations").toInt(); - } - return stats; -} - -// Реализация разрушителя -SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } -void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.321/databasesingleton.h b/Server 0.321/databasesingleton.h deleted file mode 100644 index db7e7e3..0000000 --- a/Server 0.321/databasesingleton.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef DATABASESINGLETON_H -#define DATABASESINGLETON_H - -#include -#include -#include -#include -#include -#include - -class DataBaseSingleton; - -// Класс-разрушитель для корректного удаления Singleton -class SingletonDestroyer { -private: - DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton -public: - ~SingletonDestroyer(); // Деструктор для удаления Singleton - void initialize(DataBaseSingleton* p); // Инициализация указателя -}; - -// Основной класс для работы с базой данных -class DataBaseSingleton { -private: - static DataBaseSingleton* p_instance; // Единственный экземпляр класса - static SingletonDestroyer destroyer; // Объект-разрушитель - QSqlDatabase db; // Объект базы данных - - DataBaseSingleton(); // Приватный конструктор - DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования - DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; - ~DataBaseSingleton() = default; // Приватный деструктор - friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору - -public: - // Получение экземпляра Singleton - static DataBaseSingleton* getInstance(); - - // Инициализация БД: имя файла, создание таблиц - bool initialize(const QString& databaseName); - - // Выполнение параметризованного SQL-запроса - QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); - - // Методы для работы с таблицей users - bool checkUserCredentials(const QString& login, const QString& password); - bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); - - // Методы для работы с таблицей products - bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); - QVector getProductsByUser(int userId); - - // Методы для работы с таблицей favorites - bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); - QVector getFavoritesByUser(int userId); - - // Методы для работы с таблицей statistics - bool updateStatistics(int registrations, int visits, int generations); - QVariantMap getStatistics(); -}; - -#endif // DATABASESINGLETON_H diff --git a/Server 0.321/echoServer.pro b/Server 0.321/echoServer.pro deleted file mode 100644 index fa16d4f..0000000 --- a/Server 0.321/echoServer.pro +++ /dev/null @@ -1,34 +0,0 @@ -QT -= gui - -QT += network #Для работы с сетью -QT += sql - -CONFIG += c++11 console -CONFIG -= app_bundle - -# The following define makes your compiler emit warnings if you use -# any Qt feature that has been marked deprecated (the exact warnings -# depend on your compiler). Please consult the documentation of the -# deprecated API in order to know how to port your code away from it. -DEFINES += QT_DEPRECATED_WARNINGS - -# You can also make your code fail to compile if it uses deprecated APIs. -# In order to do so, uncomment the following line. -# You can also select to disable deprecated APIs only up to a certain version of Qt. -#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - -SOURCES += \ - databasesingleton.cpp \ - func2serv.cpp \ - main.cpp \ - mytcpserver.cpp - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -HEADERS += \ - databasesingleton.h \ - func2serv.h \ - mytcpserver.h diff --git a/Server 0.321/func2serv.cpp b/Server 0.321/func2serv.cpp deleted file mode 100644 index 4fa609c..0000000 --- a/Server 0.321/func2serv.cpp +++ /dev/null @@ -1,222 +0,0 @@ -#include "func2serv.h" -#include -#include -#include -#include -// Заглушка для базы данных - - -QMap> mockDatabase = { - {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, - {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, - }; - -using namespace std; -QByteArray parsing(QString input, int socdes) -{ - - QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user - - if (container.isEmpty()) { - return "server error: empty command\\n"; - } - - - qDebug() << socdes << " user command: " << container[0]; - QString var = container[0]; - if (var == "check_task") - { - return check_task(); - } - else if (var =="auth") - { - return auth(container); - } - else if (var == "user" && container[2] == "get_products") { - return get_products(container); - } - else if (var =="reg") - { - return reg(container); - } - else if (var == "get_stat") - { - return(get_stat()); - } - else if (var == "admin" && container[1] == "dynamic_stat") { - return get_dynamic_stat(); - } - else if (var == "menu_export") - { - return menu_export(); - } - else if (var == "user" && container[2] == "add_favorite_ration") { - return add_favorite_ration(container); - } - else if (var == "admin" && container[1] == "get_all_users") { - return get_all_users(); - } - else if (var == "admin" && container[1] == "stable_stat") { - return get_stable_stat(); - } - else - { - return "server error: unknow command\r\n"; - } -} - - -// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ -QByteArray auth(QStringList log) { - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - bool authSuccess = db->checkUserCredentials(log[1], log[2]); - - if (authSuccess) { - return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; - } - return "auth_failed//Invalid credentials\r\n"; -} - -QByteArray reg(QStringList params) { - if (params.size() != 4) { - return "reg_failed//Недостаточно параметров для регистрации\r\n"; - } - - QString name = params[1]; - QString email = params[2]; - QString password = params[3]; - - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - - QSqlQuery checkQuery = db->executeQuery( - "SELECT * FROM users WHERE email = :email", - {{":email", email}} - ); - - if (!checkQuery.exec()) { - return "reg_failed//Ошибка при проверке email\r\n"; - } - - bool success = db->addUser(name, email, password, false); - - if (success) { - return "reg_success//Регистрация прошла успешно\r\n"; - } else { - return "reg_failed//Ошибка при регистрации\r\n"; - } -} - -QByteArray get_stat(/*QStringList*/){ - return "Your Statistic: null\r\n"; -} - -QByteArray check_task(/*QStringList*/){ - return "Task was succesful completed\r\n"; -} -QByteArray menu_export(/*QStringList*/){ - return "Меню успешно экспортировано!\r\n"; -} - -void fetch_products_from_db(const QString& userId, QStringList& products) { - - if (mockDatabase.contains(userId)) { - products = mockDatabase[userId]; - } -} -QByteArray get_products(QStringList params) { - QString userId = params[1]; // ID пользователя - QStringList products; // Список продуктов - - - fetch_products_from_db(userId, products); - - - QString response; - for (const QString& product : std::as_const(products)) { - response += "prod//" + product + "\r\n"; - } - - return response.toUtf8(); -} -QByteArray get_all_users() { - QStringList users; - - // fetch_users_from_db(users); - - QString response; - for (const QString& user : users) { - response += user + "\r\n"; - } - - return response.toUtf8(); -} -int get_user_count() { - // Здесь будет SQL-запрос, пока заглушка - return 152; // Примерное значение -} - -int get_product_count() { - // Здесь будет SQL-запрос, пока заглушка - return 732; // Примерное значение -} -QByteArray get_stable_stat() { - - int userCount = 0; - int productCount = 0; - - userCount = get_user_count(); - productCount = get_product_count(); - - // Формируем строку ответа - QString response = "Users: " + QString::number(userCount) + "\r\n" + - "Products: " + QString::number(productCount) + "\r\n"; - - return response.toUtf8(); -} -int get_weekly_logins() { - // Заглушка, пока без БД - return 78; // Примерное значение -} - -int get_monthly_logins() { - // Заглушка, пока без БД - return 312; // Примерное значение -} -QByteArray get_dynamic_stat() { - int weeklyLogins = 0; - int monthlyLogins = 0; - - // Получаем данные из БД (пока заглушки) - weeklyLogins = get_weekly_logins(); - monthlyLogins = get_monthly_logins(); - - // Формируем строку ответа - QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + - "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; - - return response.toUtf8(); -} -QByteArray add_favorite_ration(const QStringList& container) { - QString userId = container[1]; // ID пользователя - QString rationId = container[2]; // ID рациона - - bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки - - if (success) { - return "Ration successfully added to favorites\r\n"; - } else { - return "Error: failed to add ration to favorites\r\n"; - } -} -bool add_ration_to_favorites(const QString& userId, const QString& rationId) { - qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; - return true; // Заглушка, потом заменить на SQL-запрос -} - - - - - - - - diff --git a/Server 0.321/func2serv.h b/Server 0.321/func2serv.h deleted file mode 100644 index 76cb0fb..0000000 --- a/Server 0.321/func2serv.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef FUNC2SERV_H -#define FUNC2SERV_H - -#include - -QByteArray parsing(QString input, int socdes); - -QByteArray auth(QStringList ); -QByteArray reg(QStringList); -QByteArray get_stat(/*QStringList*/); -QByteArray check_task(/*QStringList*/); -QByteArray menu_export(/*QStringList*/); -QByteArray get_products(QStringList params); -QByteArray get_all_users(); -QByteArray get_stable_stat(); -int get_user_count(); -int get_product_count(); -QByteArray get_dynamic_stat(); -int get_weekly_logins(); -int get_monthly_logins(); -QByteArray add_favorite_ration(const QStringList& container); -bool add_ration_to_favorites(const QString& userId, const QString& rationId); - -#include - -#endif // FUNC2SERV_H diff --git a/Server 0.321/main.cpp b/Server 0.321/main.cpp deleted file mode 100644 index c1efc71..0000000 --- a/Server 0.321/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "mytcpserver.h" -#include "databasesingleton.h" - -int main(int argc, char *argv[]) { - QCoreApplication a(argc, argv); - - // Инициализация БД - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - if (!db->initialize("Easyweek.db")) { - qFatal("Failed to initialize database"); - } - - MyTcpServer myserv; - return a.exec(); -} diff --git a/Server 0.321/mytcpserver.cpp b/Server 0.321/mytcpserver.cpp deleted file mode 100644 index be276cb..0000000 --- a/Server 0.321/mytcpserver.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "mytcpserver.h" -#include -#include -#include -#include "func2serv.h" - -MyTcpServer::~MyTcpServer() -{ - mTcpServer->close(); - server_status = 0; - qDeleteAll(mSocketDescriptors); // Удаляем все сокеты -} - -MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) -{ - mTcpServer = new QTcpServer(this); - - connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); - - if (!mTcpServer->listen(QHostAddress::Any, 33333)) { - qDebug() << "server is not started"; - } else { - server_status = 1; - qDebug() << "server is started"; - } -} - -void MyTcpServer::slotNewConnection() -{ - if (server_status == 1) { - QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); - int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета - - if (socketDescriptor == -1) { - qDebug() << "Invalid socket descriptor!"; - clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен - return; - } - - mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере - - qDebug() << "New connection, socket descriptor:" << socketDescriptor; - - connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); - connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); - } -} - -void MyTcpServer::slotServerRead() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - QString res = ""; - while (clientSocket->bytesAvailable() > 0) { - QByteArray array = clientSocket->readAll(); - qDebug() << array << "\n"; - if (array == "\\x01\r\n") { - clientSocket->write(res.toUtf8()); - res = ""; - } else { - res.append(array); - } - } - clientSocket->write(parsing(res, clientSocket->socketDescriptor())); -} - -void MyTcpServer::slotClientDisconnected() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - // Получаем дескриптор сокета из контейнера - int socketDescriptor = -1; - for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { - if (it.value() == clientSocket) { - socketDescriptor = it.key(); - break; - } - } - - if (socketDescriptor != -1) { - mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера - qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; - } else { - qDebug() << "Client disconnected, but socket descriptor not found!"; - } - - clientSocket->deleteLater(); // Удаляем сокет -} diff --git a/Server 0.321/mytcpserver.h b/Server 0.321/mytcpserver.h deleted file mode 100644 index fe179a1..0000000 --- a/Server 0.321/mytcpserver.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef MYTCPSERVER_H -#define MYTCPSERVER_H -#include -#include -#include -#include -#include -#include -#include - -class MyTcpServer : public QObject -{ - Q_OBJECT -public: - explicit MyTcpServer(QObject *parent = nullptr); - ~MyTcpServer(); -public slots: - void slotNewConnection(); - void slotClientDisconnected(); - void slotServerRead(); -private: - QTcpServer * mTcpServer; - QTcpSocket * mTcpSocket; - int server_status; - QMap mSocketDescriptors; // Хранение дескрипторов сокетов -}; -#endif // MYTCPSERVER_H From bd875e2e7287d79b7ef263079aa6a6d4fb0ca335 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Wed, 26 Mar 2025 17:31:43 +0300 Subject: [PATCH 32/58] Add files via upload --- Server 0.321/databasesingleton.cpp | 198 +++++++++++++++++++++++++ Server 0.321/databasesingleton.h | 62 ++++++++ Server 0.321/echoServer.pro | 34 +++++ Server 0.321/func2serv.cpp | 222 +++++++++++++++++++++++++++++ Server 0.321/func2serv.h | 26 ++++ Server 0.321/main.cpp | 16 +++ Server 0.321/mytcpserver.cpp | 94 ++++++++++++ Server 0.321/mytcpserver.h | 27 ++++ 8 files changed, 679 insertions(+) create mode 100644 Server 0.321/databasesingleton.cpp create mode 100644 Server 0.321/databasesingleton.h create mode 100644 Server 0.321/echoServer.pro create mode 100644 Server 0.321/func2serv.cpp create mode 100644 Server 0.321/func2serv.h create mode 100644 Server 0.321/main.cpp create mode 100644 Server 0.321/mytcpserver.cpp create mode 100644 Server 0.321/mytcpserver.h diff --git a/Server 0.321/databasesingleton.cpp b/Server 0.321/databasesingleton.cpp new file mode 100644 index 0000000..28e84ed --- /dev/null +++ b/Server 0.321/databasesingleton.cpp @@ -0,0 +1,198 @@ +#include "databasesingleton.h" + +DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; +SingletonDestroyer DataBaseSingleton::destroyer; + +DataBaseSingleton::DataBaseSingleton() { + db = QSqlDatabase::addDatabase("QSQLITE"); +} + +DataBaseSingleton* DataBaseSingleton::getInstance() { + if (!p_instance) { + p_instance = new DataBaseSingleton(); + destroyer.initialize(p_instance); + } + return p_instance; +} + +bool DataBaseSingleton::initialize(const QString& databaseName) { + db.setDatabaseName(databaseName); + if (!db.open()) { + qDebug() << "Ошибка подключения:" << db.lastError().text(); + return false; + } + + // Создание таблицы users + QSqlQuery query(db); + bool success = query.exec( + "CREATE TABLE IF NOT EXISTS users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name VARCHAR(20) NOT NULL, " + "email VARCHAR(50) NOT NULL , " + "pass VARCHAR(20) NOT NULL, " + "is_admin BOOLEAN DEFAULT FALSE)" + ); + + // Создание таблицы products + success &= query.exec( + "CREATE TABLE IF NOT EXISTS products (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "id_user INTEGER NOT NULL, " + "name VARCHAR(50) NOT NULL, " + "proteins INTEGER NOT NULL, " + "fatness INTEGER NOT NULL, " + "carbs INTEGER NOT NULL, " + "weight INTEGER NOT NULL, " + "cost INTEGER NOT NULL, " + "type INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы favorites + success &= query.exec( + "CREATE TABLE IF NOT EXISTS favorites (" + "id_user INTEGER NOT NULL, " + "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки + "calories INTEGER NOT NULL, " + "all_cost INTEGER NOT NULL, " + "all_weight INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы statistics + success &= query.exec( + "CREATE TABLE IF NOT EXISTS statistics (" + "count_registrations INTEGER DEFAULT 0, " + "count_visits INTEGER DEFAULT 0, " + "count_generations INTEGER DEFAULT 0)" + ); + + // Инициализация статистики, если таблица пуста + query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); + + return success; +} + +QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { + QSqlQuery query(db); + query.prepare(queryStr); + for (auto it = params.begin(); it != params.end(); ++it) { + query.bindValue(it.key(), it.value()); + } + if (!query.exec()) { + qDebug() << "Ошибка запроса:" << query.lastError().text(); + qDebug() << "Текст запроса:" << queryStr; + } + return query; +} + +// Методы для работы с таблицей users +bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { + QSqlQuery query = executeQuery( + "SELECT * FROM users WHERE name = :name AND pass = :pass", + {{":name", login}, {":pass", password}} + ); + return query.next(); +} + +bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { + QSqlQuery query = executeQuery( + "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", + {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} + ); + bool res = query.exec(); + qDebug() << "Ошибка запроса:" << query.lastError().text(); + return res; +} + +// Методы для работы с таблицей products +bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { + return executeQuery( + "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " + "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", + {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, + {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} + ).exec(); +} + +QVector DataBaseSingleton::getProductsByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM products WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector products; + while (query.next()) { + QVariantMap product; + product["id"] = query.value("id").toInt(); + product["name"] = query.value("name").toString(); + product["proteins"] = query.value("proteins").toInt(); + product["fatness"] = query.value("fatness").toInt(); + product["carbs"] = query.value("carbs").toInt(); + product["weight"] = query.value("weight").toInt(); + product["cost"] = query.value("cost").toInt(); + product["type"] = query.value("type").toInt(); + products.append(product); + } + return products; +} + +// Методы для работы с таблицей favorites +bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { + // Преобразуем QVector в QVector + QVector productIdsStr; + for (int id : productIds) { + productIdsStr.append(QString::number(id)); // Преобразуем int в QString + } + + // Преобразуем QVector в QStringList и объединяем в строку через запятую + QString productsStr = QStringList::fromVector(productIdsStr).join(","); + + // Выполняем SQL-запрос + return executeQuery( + "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " + "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", + {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, + {":all_cost", allCost}, {":all_weight", allWeight}} + ).exec(); +} + +QVector DataBaseSingleton::getFavoritesByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM favorites WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector favorites; + while (query.next()) { + QVariantMap favorite; + favorite["products"] = query.value("products").toString(); + favorite["calories"] = query.value("calories").toInt(); + favorite["all_cost"] = query.value("all_cost").toInt(); + favorite["all_weight"] = query.value("all_weight").toInt(); + favorites.append(favorite); + } + return favorites; +} + +// Методы для работы с таблицей statistics +bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { + return executeQuery( + "UPDATE statistics SET count_registrations = :registrations, " + "count_visits = :visits, count_generations = :generations", + {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} + ).exec(); +} + +QVariantMap DataBaseSingleton::getStatistics() { + QSqlQuery query = executeQuery("SELECT * FROM statistics"); + QVariantMap stats; + if (query.next()) { + stats["registrations"] = query.value("count_registrations").toInt(); + stats["visits"] = query.value("count_visits").toInt(); + stats["generations"] = query.value("count_generations").toInt(); + } + return stats; +} + +// Реализация разрушителя +SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } +void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.321/databasesingleton.h b/Server 0.321/databasesingleton.h new file mode 100644 index 0000000..db7e7e3 --- /dev/null +++ b/Server 0.321/databasesingleton.h @@ -0,0 +1,62 @@ +#ifndef DATABASESINGLETON_H +#define DATABASESINGLETON_H + +#include +#include +#include +#include +#include +#include + +class DataBaseSingleton; + +// Класс-разрушитель для корректного удаления Singleton +class SingletonDestroyer { +private: + DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton +public: + ~SingletonDestroyer(); // Деструктор для удаления Singleton + void initialize(DataBaseSingleton* p); // Инициализация указателя +}; + +// Основной класс для работы с базой данных +class DataBaseSingleton { +private: + static DataBaseSingleton* p_instance; // Единственный экземпляр класса + static SingletonDestroyer destroyer; // Объект-разрушитель + QSqlDatabase db; // Объект базы данных + + DataBaseSingleton(); // Приватный конструктор + DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования + DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; + ~DataBaseSingleton() = default; // Приватный деструктор + friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору + +public: + // Получение экземпляра Singleton + static DataBaseSingleton* getInstance(); + + // Инициализация БД: имя файла, создание таблиц + bool initialize(const QString& databaseName); + + // Выполнение параметризованного SQL-запроса + QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); + + // Методы для работы с таблицей users + bool checkUserCredentials(const QString& login, const QString& password); + bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); + + // Методы для работы с таблицей products + bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); + QVector getProductsByUser(int userId); + + // Методы для работы с таблицей favorites + bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); + QVector getFavoritesByUser(int userId); + + // Методы для работы с таблицей statistics + bool updateStatistics(int registrations, int visits, int generations); + QVariantMap getStatistics(); +}; + +#endif // DATABASESINGLETON_H diff --git a/Server 0.321/echoServer.pro b/Server 0.321/echoServer.pro new file mode 100644 index 0000000..fa16d4f --- /dev/null +++ b/Server 0.321/echoServer.pro @@ -0,0 +1,34 @@ +QT -= gui + +QT += network #Для работы с сетью +QT += sql + +CONFIG += c++11 console +CONFIG -= app_bundle + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + databasesingleton.cpp \ + func2serv.cpp \ + main.cpp \ + mytcpserver.cpp + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +HEADERS += \ + databasesingleton.h \ + func2serv.h \ + mytcpserver.h diff --git a/Server 0.321/func2serv.cpp b/Server 0.321/func2serv.cpp new file mode 100644 index 0000000..4fa609c --- /dev/null +++ b/Server 0.321/func2serv.cpp @@ -0,0 +1,222 @@ +#include "func2serv.h" +#include +#include +#include +#include +// Заглушка для базы данных + + +QMap> mockDatabase = { + {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, + {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, + }; + +using namespace std; +QByteArray parsing(QString input, int socdes) +{ + + QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + + if (container.isEmpty()) { + return "server error: empty command\\n"; + } + + + qDebug() << socdes << " user command: " << container[0]; + QString var = container[0]; + if (var == "check_task") + { + return check_task(); + } + else if (var =="auth") + { + return auth(container); + } + else if (var == "user" && container[2] == "get_products") { + return get_products(container); + } + else if (var =="reg") + { + return reg(container); + } + else if (var == "get_stat") + { + return(get_stat()); + } + else if (var == "admin" && container[1] == "dynamic_stat") { + return get_dynamic_stat(); + } + else if (var == "menu_export") + { + return menu_export(); + } + else if (var == "user" && container[2] == "add_favorite_ration") { + return add_favorite_ration(container); + } + else if (var == "admin" && container[1] == "get_all_users") { + return get_all_users(); + } + else if (var == "admin" && container[1] == "stable_stat") { + return get_stable_stat(); + } + else + { + return "server error: unknow command\r\n"; + } +} + + +// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ +QByteArray auth(QStringList log) { + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + bool authSuccess = db->checkUserCredentials(log[1], log[2]); + + if (authSuccess) { + return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; + } + return "auth_failed//Invalid credentials\r\n"; +} + +QByteArray reg(QStringList params) { + if (params.size() != 4) { + return "reg_failed//Недостаточно параметров для регистрации\r\n"; + } + + QString name = params[1]; + QString email = params[2]; + QString password = params[3]; + + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + + QSqlQuery checkQuery = db->executeQuery( + "SELECT * FROM users WHERE email = :email", + {{":email", email}} + ); + + if (!checkQuery.exec()) { + return "reg_failed//Ошибка при проверке email\r\n"; + } + + bool success = db->addUser(name, email, password, false); + + if (success) { + return "reg_success//Регистрация прошла успешно\r\n"; + } else { + return "reg_failed//Ошибка при регистрации\r\n"; + } +} + +QByteArray get_stat(/*QStringList*/){ + return "Your Statistic: null\r\n"; +} + +QByteArray check_task(/*QStringList*/){ + return "Task was succesful completed\r\n"; +} +QByteArray menu_export(/*QStringList*/){ + return "Меню успешно экспортировано!\r\n"; +} + +void fetch_products_from_db(const QString& userId, QStringList& products) { + + if (mockDatabase.contains(userId)) { + products = mockDatabase[userId]; + } +} +QByteArray get_products(QStringList params) { + QString userId = params[1]; // ID пользователя + QStringList products; // Список продуктов + + + fetch_products_from_db(userId, products); + + + QString response; + for (const QString& product : std::as_const(products)) { + response += "prod//" + product + "\r\n"; + } + + return response.toUtf8(); +} +QByteArray get_all_users() { + QStringList users; + + // fetch_users_from_db(users); + + QString response; + for (const QString& user : users) { + response += user + "\r\n"; + } + + return response.toUtf8(); +} +int get_user_count() { + // Здесь будет SQL-запрос, пока заглушка + return 152; // Примерное значение +} + +int get_product_count() { + // Здесь будет SQL-запрос, пока заглушка + return 732; // Примерное значение +} +QByteArray get_stable_stat() { + + int userCount = 0; + int productCount = 0; + + userCount = get_user_count(); + productCount = get_product_count(); + + // Формируем строку ответа + QString response = "Users: " + QString::number(userCount) + "\r\n" + + "Products: " + QString::number(productCount) + "\r\n"; + + return response.toUtf8(); +} +int get_weekly_logins() { + // Заглушка, пока без БД + return 78; // Примерное значение +} + +int get_monthly_logins() { + // Заглушка, пока без БД + return 312; // Примерное значение +} +QByteArray get_dynamic_stat() { + int weeklyLogins = 0; + int monthlyLogins = 0; + + // Получаем данные из БД (пока заглушки) + weeklyLogins = get_weekly_logins(); + monthlyLogins = get_monthly_logins(); + + // Формируем строку ответа + QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + + "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; + + return response.toUtf8(); +} +QByteArray add_favorite_ration(const QStringList& container) { + QString userId = container[1]; // ID пользователя + QString rationId = container[2]; // ID рациона + + bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки + + if (success) { + return "Ration successfully added to favorites\r\n"; + } else { + return "Error: failed to add ration to favorites\r\n"; + } +} +bool add_ration_to_favorites(const QString& userId, const QString& rationId) { + qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; + return true; // Заглушка, потом заменить на SQL-запрос +} + + + + + + + + diff --git a/Server 0.321/func2serv.h b/Server 0.321/func2serv.h new file mode 100644 index 0000000..76cb0fb --- /dev/null +++ b/Server 0.321/func2serv.h @@ -0,0 +1,26 @@ +#ifndef FUNC2SERV_H +#define FUNC2SERV_H + +#include + +QByteArray parsing(QString input, int socdes); + +QByteArray auth(QStringList ); +QByteArray reg(QStringList); +QByteArray get_stat(/*QStringList*/); +QByteArray check_task(/*QStringList*/); +QByteArray menu_export(/*QStringList*/); +QByteArray get_products(QStringList params); +QByteArray get_all_users(); +QByteArray get_stable_stat(); +int get_user_count(); +int get_product_count(); +QByteArray get_dynamic_stat(); +int get_weekly_logins(); +int get_monthly_logins(); +QByteArray add_favorite_ration(const QStringList& container); +bool add_ration_to_favorites(const QString& userId, const QString& rationId); + +#include + +#endif // FUNC2SERV_H diff --git a/Server 0.321/main.cpp b/Server 0.321/main.cpp new file mode 100644 index 0000000..c1efc71 --- /dev/null +++ b/Server 0.321/main.cpp @@ -0,0 +1,16 @@ +#include +#include "mytcpserver.h" +#include "databasesingleton.h" + +int main(int argc, char *argv[]) { + QCoreApplication a(argc, argv); + + // Инициализация БД + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + if (!db->initialize("Easyweek.db")) { + qFatal("Failed to initialize database"); + } + + MyTcpServer myserv; + return a.exec(); +} diff --git a/Server 0.321/mytcpserver.cpp b/Server 0.321/mytcpserver.cpp new file mode 100644 index 0000000..be276cb --- /dev/null +++ b/Server 0.321/mytcpserver.cpp @@ -0,0 +1,94 @@ +#include "mytcpserver.h" +#include +#include +#include +#include "func2serv.h" + +MyTcpServer::~MyTcpServer() +{ + mTcpServer->close(); + server_status = 0; + qDeleteAll(mSocketDescriptors); // Удаляем все сокеты +} + +MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) +{ + mTcpServer = new QTcpServer(this); + + connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); + + if (!mTcpServer->listen(QHostAddress::Any, 33333)) { + qDebug() << "server is not started"; + } else { + server_status = 1; + qDebug() << "server is started"; + } +} + +void MyTcpServer::slotNewConnection() +{ + if (server_status == 1) { + QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); + int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета + + if (socketDescriptor == -1) { + qDebug() << "Invalid socket descriptor!"; + clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен + return; + } + + mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере + + qDebug() << "New connection, socket descriptor:" << socketDescriptor; + + connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); + connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); + } +} + +void MyTcpServer::slotServerRead() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + QString res = ""; + while (clientSocket->bytesAvailable() > 0) { + QByteArray array = clientSocket->readAll(); + qDebug() << array << "\n"; + if (array == "\\x01\r\n") { + clientSocket->write(res.toUtf8()); + res = ""; + } else { + res.append(array); + } + } + clientSocket->write(parsing(res, clientSocket->socketDescriptor())); +} + +void MyTcpServer::slotClientDisconnected() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + // Получаем дескриптор сокета из контейнера + int socketDescriptor = -1; + for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { + if (it.value() == clientSocket) { + socketDescriptor = it.key(); + break; + } + } + + if (socketDescriptor != -1) { + mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера + qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; + } else { + qDebug() << "Client disconnected, but socket descriptor not found!"; + } + + clientSocket->deleteLater(); // Удаляем сокет +} diff --git a/Server 0.321/mytcpserver.h b/Server 0.321/mytcpserver.h new file mode 100644 index 0000000..fe179a1 --- /dev/null +++ b/Server 0.321/mytcpserver.h @@ -0,0 +1,27 @@ +#ifndef MYTCPSERVER_H +#define MYTCPSERVER_H +#include +#include +#include +#include +#include +#include +#include + +class MyTcpServer : public QObject +{ + Q_OBJECT +public: + explicit MyTcpServer(QObject *parent = nullptr); + ~MyTcpServer(); +public slots: + void slotNewConnection(); + void slotClientDisconnected(); + void slotServerRead(); +private: + QTcpServer * mTcpServer; + QTcpSocket * mTcpSocket; + int server_status; + QMap mSocketDescriptors; // Хранение дескрипторов сокетов +}; +#endif // MYTCPSERVER_H From a6001f7468ad8901233bb9597e6c47177dd5408e Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 15:56:16 +0300 Subject: [PATCH 33/58] Server 0.332 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -Исправлены ошибки связанные с дублированием записей в таблице Users -Переработана функция reg() -Исправлена проверка уникальности email --- Server 0.332/databasesingleton.cpp | 203 ++++++++++++++++++++++++ Server 0.332/databasesingleton.h | 62 ++++++++ Server 0.332/echoServer.pro | 34 ++++ Server 0.332/func2serv.cpp | 241 +++++++++++++++++++++++++++++ Server 0.332/func2serv.h | 26 ++++ Server 0.332/main.cpp | 16 ++ Server 0.332/mytcpserver.cpp | 94 +++++++++++ Server 0.332/mytcpserver.h | 27 ++++ 8 files changed, 703 insertions(+) create mode 100644 Server 0.332/databasesingleton.cpp create mode 100644 Server 0.332/databasesingleton.h create mode 100644 Server 0.332/echoServer.pro create mode 100644 Server 0.332/func2serv.cpp create mode 100644 Server 0.332/func2serv.h create mode 100644 Server 0.332/main.cpp create mode 100644 Server 0.332/mytcpserver.cpp create mode 100644 Server 0.332/mytcpserver.h diff --git a/Server 0.332/databasesingleton.cpp b/Server 0.332/databasesingleton.cpp new file mode 100644 index 0000000..9536fb3 --- /dev/null +++ b/Server 0.332/databasesingleton.cpp @@ -0,0 +1,203 @@ +#include "databasesingleton.h" + +DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; +SingletonDestroyer DataBaseSingleton::destroyer; + +DataBaseSingleton::DataBaseSingleton() { + db = QSqlDatabase::addDatabase("QSQLITE"); +} + +DataBaseSingleton* DataBaseSingleton::getInstance() { + if (!p_instance) { + p_instance = new DataBaseSingleton(); + destroyer.initialize(p_instance); + } + return p_instance; +} + +bool DataBaseSingleton::initialize(const QString& databaseName) { + db.setDatabaseName(databaseName); + if (!db.open()) { + qDebug() << "Ошибка подключения:" << db.lastError().text(); + return false; + } + + // Создание таблицы users + QSqlQuery query(db); + bool success = query.exec( + "CREATE TABLE IF NOT EXISTS users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name VARCHAR(20) NOT NULL, " + "email VARCHAR(50) NOT NULL , " + "pass VARCHAR(20) NOT NULL, " + "is_admin BOOLEAN DEFAULT FALSE)" + ); + + success &= query.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email)"); + + // Создание таблицы products + success &= query.exec( + "CREATE TABLE IF NOT EXISTS products (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "id_user INTEGER NOT NULL, " + "name VARCHAR(50) NOT NULL, " + "proteins INTEGER NOT NULL, " + "fatness INTEGER NOT NULL, " + "carbs INTEGER NOT NULL, " + "weight INTEGER NOT NULL, " + "cost INTEGER NOT NULL, " + "type INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы favorites + success &= query.exec( + "CREATE TABLE IF NOT EXISTS favorites (" + "id_user INTEGER NOT NULL, " + "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки + "calories INTEGER NOT NULL, " + "all_cost INTEGER NOT NULL, " + "all_weight INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы statistics + success &= query.exec( + "CREATE TABLE IF NOT EXISTS statistics (" + "count_registrations INTEGER DEFAULT 0, " + "count_visits INTEGER DEFAULT 0, " + "count_generations INTEGER DEFAULT 0)" + ); + + // Инициализация статистики, если таблица пуста + query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); + + return success; +} + +QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { + QSqlQuery query(db); + query.prepare(queryStr); + for (auto it = params.begin(); it != params.end(); ++it) { + query.bindValue(it.key(), it.value()); + } + if (!query.exec()) { + qDebug() << "Ошибка запроса:" << query.lastError().text(); + qDebug() << "Текст запроса:" << queryStr; + } + return query; +} + +// Методы для работы с таблицей users +bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { + QSqlQuery query = executeQuery( + "SELECT * FROM users WHERE name = :name AND pass = :pass", + {{":name", login}, {":pass", password}} + ); + return query.next(); +} + +bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { + QSqlQuery query = executeQuery( + "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", + {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} + ); + + if (query.lastError().isValid()) { + qDebug() << "Ошибка SQL:" << query.lastError().text(); + return false; + } + return true; +} + +// Методы для работы с таблицей products +bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { + return executeQuery( + "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " + "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", + {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, + {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} + ).exec(); +} + +QVector DataBaseSingleton::getProductsByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM products WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector products; + while (query.next()) { + QVariantMap product; + product["id"] = query.value("id").toInt(); + product["name"] = query.value("name").toString(); + product["proteins"] = query.value("proteins").toInt(); + product["fatness"] = query.value("fatness").toInt(); + product["carbs"] = query.value("carbs").toInt(); + product["weight"] = query.value("weight").toInt(); + product["cost"] = query.value("cost").toInt(); + product["type"] = query.value("type").toInt(); + products.append(product); + } + return products; +} + +// Методы для работы с таблицей favorites +bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { + // Преобразуем QVector в QVector + QVector productIdsStr; + for (int id : productIds) { + productIdsStr.append(QString::number(id)); // Преобразуем int в QString + } + + // Преобразуем QVector в QStringList и объединяем в строку через запятую + QString productsStr = QStringList::fromVector(productIdsStr).join(","); + + // Выполняем SQL-запрос + return executeQuery( + "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " + "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", + {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, + {":all_cost", allCost}, {":all_weight", allWeight}} + ).exec(); +} + +QVector DataBaseSingleton::getFavoritesByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM favorites WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector favorites; + while (query.next()) { + QVariantMap favorite; + favorite["products"] = query.value("products").toString(); + favorite["calories"] = query.value("calories").toInt(); + favorite["all_cost"] = query.value("all_cost").toInt(); + favorite["all_weight"] = query.value("all_weight").toInt(); + favorites.append(favorite); + } + return favorites; +} + +// Методы для работы с таблицей statistics +bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { + return executeQuery( + "UPDATE statistics SET count_registrations = :registrations, " + "count_visits = :visits, count_generations = :generations", + {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} + ).exec(); +} + +QVariantMap DataBaseSingleton::getStatistics() { + QSqlQuery query = executeQuery("SELECT * FROM statistics"); + QVariantMap stats; + if (query.next()) { + stats["registrations"] = query.value("count_registrations").toInt(); + stats["visits"] = query.value("count_visits").toInt(); + stats["generations"] = query.value("count_generations").toInt(); + } + return stats; +} + +// Реализация разрушителя +SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } +void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.332/databasesingleton.h b/Server 0.332/databasesingleton.h new file mode 100644 index 0000000..db7e7e3 --- /dev/null +++ b/Server 0.332/databasesingleton.h @@ -0,0 +1,62 @@ +#ifndef DATABASESINGLETON_H +#define DATABASESINGLETON_H + +#include +#include +#include +#include +#include +#include + +class DataBaseSingleton; + +// Класс-разрушитель для корректного удаления Singleton +class SingletonDestroyer { +private: + DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton +public: + ~SingletonDestroyer(); // Деструктор для удаления Singleton + void initialize(DataBaseSingleton* p); // Инициализация указателя +}; + +// Основной класс для работы с базой данных +class DataBaseSingleton { +private: + static DataBaseSingleton* p_instance; // Единственный экземпляр класса + static SingletonDestroyer destroyer; // Объект-разрушитель + QSqlDatabase db; // Объект базы данных + + DataBaseSingleton(); // Приватный конструктор + DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования + DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; + ~DataBaseSingleton() = default; // Приватный деструктор + friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору + +public: + // Получение экземпляра Singleton + static DataBaseSingleton* getInstance(); + + // Инициализация БД: имя файла, создание таблиц + bool initialize(const QString& databaseName); + + // Выполнение параметризованного SQL-запроса + QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); + + // Методы для работы с таблицей users + bool checkUserCredentials(const QString& login, const QString& password); + bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); + + // Методы для работы с таблицей products + bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); + QVector getProductsByUser(int userId); + + // Методы для работы с таблицей favorites + bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); + QVector getFavoritesByUser(int userId); + + // Методы для работы с таблицей statistics + bool updateStatistics(int registrations, int visits, int generations); + QVariantMap getStatistics(); +}; + +#endif // DATABASESINGLETON_H diff --git a/Server 0.332/echoServer.pro b/Server 0.332/echoServer.pro new file mode 100644 index 0000000..fa16d4f --- /dev/null +++ b/Server 0.332/echoServer.pro @@ -0,0 +1,34 @@ +QT -= gui + +QT += network #Для работы с сетью +QT += sql + +CONFIG += c++11 console +CONFIG -= app_bundle + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + databasesingleton.cpp \ + func2serv.cpp \ + main.cpp \ + mytcpserver.cpp + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +HEADERS += \ + databasesingleton.h \ + func2serv.h \ + mytcpserver.h diff --git a/Server 0.332/func2serv.cpp b/Server 0.332/func2serv.cpp new file mode 100644 index 0000000..25f8894 --- /dev/null +++ b/Server 0.332/func2serv.cpp @@ -0,0 +1,241 @@ +#include "func2serv.h" +#include +#include +#include +#include +// Заглушка для базы данных + + +QMap> mockDatabase = { + {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, + {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, + }; + +using namespace std; +QByteArray parsing(QString input, int socdes) +{ + + QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + + if (container.isEmpty()) { + return "server error: empty command\\n"; + } + + + qDebug() << socdes << " user command: " << container[0]; + QString var = container[0]; + if (var == "check_task") + { + return check_task(); + } + else if (var =="auth") + { + return auth(container); + } + else if (var == "user" && container[2] == "get_products") { + return get_products(container); + } + else if (var =="reg") + { + return reg(container); + } + else if (var == "get_stat") + { + return(get_stat()); + } + else if (var == "admin" && container[1] == "dynamic_stat") { + return get_dynamic_stat(); + } + else if (var == "menu_export") + { + return menu_export(); + } + else if (var == "user" && container[2] == "add_favorite_ration") { + return add_favorite_ration(container); + } + else if (var == "admin" && container[1] == "get_all_users") { + return get_all_users(); + } + else if (var == "admin" && container[1] == "stable_stat") { + return get_stable_stat(); + } + else + { + return "server error: unknow command\r\n"; + } +} + + +// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ +QByteArray auth(QStringList log) { + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + bool authSuccess = db->checkUserCredentials(log[1], log[2]); + + if (authSuccess) { + return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; + } + return "auth_failed//Invalid credentials\r\n"; +} + + +QByteArray reg(QStringList params) { + // 1️⃣ Проверка количества параметров + if (params.size() != 4) { + return "reg_failed//Недостаточно параметров для регистрации\r\n"; + } + + // 2️⃣ Извлечение данных из запроса + QString name = params[1]; // Имя пользователя + QString email = params[2]; // Email (должен быть уникальным) + QString password = params[3]; // Пароль + + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + + // 3️⃣ Проверка, не занят ли email + QSqlQuery checkQuery = db->executeQuery( + "SELECT id FROM users WHERE email = :email", + {{":email", email}} + ); + + // Если запрос не выполнился (ошибка БД) + if (!checkQuery.exec()) { + return "reg_failed//Ошибка при проверке email\r\n"; + } + + // Если email уже существует (найдена запись) + if (checkQuery.next()) { + return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n"; + } + + // 4️⃣ Попытка добавить пользователя + bool success = db->addUser(name, email, password, false); + + if (success) { + // 5️⃣ Обновление статистики (увеличиваем счетчик регистраций) + QVariantMap stats = db->getStatistics(); + db->updateStatistics( + stats["registrations"].toInt() + 1, // +1 новая регистрация + stats["visits"].toInt(), // Визиты без изменений + stats["generations"].toInt() // Генерации без изменений + ); + return "reg_success//Регистрация прошла успешно\r\n"; + } else { + // Если INSERT не сработал (например, из-за UNIQUE INDEX) + return "reg_failed//Ошибка при регистрации (возможно, email уже занят)\r\n"; + } +} + +QByteArray get_stat(/*QStringList*/){ + return "Your Statistic: null\r\n"; +} + +QByteArray check_task(/*QStringList*/){ + return "Task was succesful completed\r\n"; +} +QByteArray menu_export(/*QStringList*/){ + return "Меню успешно экспортировано!\r\n"; +} + +void fetch_products_from_db(const QString& userId, QStringList& products) { + + if (mockDatabase.contains(userId)) { + products = mockDatabase[userId]; + } +} +QByteArray get_products(QStringList params) { + QString userId = params[1]; // ID пользователя + QStringList products; // Список продуктов + + + fetch_products_from_db(userId, products); + + + QString response; + for (const QString& product : std::as_const(products)) { + response += "prod//" + product + "\r\n"; + } + + return response.toUtf8(); +} +QByteArray get_all_users() { + QStringList users; + + // fetch_users_from_db(users); + + QString response; + for (const QString& user : users) { + response += user + "\r\n"; + } + + return response.toUtf8(); +} +int get_user_count() { + // Здесь будет SQL-запрос, пока заглушка + return 152; // Примерное значение +} + +int get_product_count() { + // Здесь будет SQL-запрос, пока заглушка + return 732; // Примерное значение +} +QByteArray get_stable_stat() { + + int userCount = 0; + int productCount = 0; + + userCount = get_user_count(); + productCount = get_product_count(); + + // Формируем строку ответа + QString response = "Users: " + QString::number(userCount) + "\r\n" + + "Products: " + QString::number(productCount) + "\r\n"; + + return response.toUtf8(); +} +int get_weekly_logins() { + // Заглушка, пока без БД + return 78; // Примерное значение +} + +int get_monthly_logins() { + // Заглушка, пока без БД + return 312; // Примерное значение +} +QByteArray get_dynamic_stat() { + int weeklyLogins = 0; + int monthlyLogins = 0; + + // Получаем данные из БД (пока заглушки) + weeklyLogins = get_weekly_logins(); + monthlyLogins = get_monthly_logins(); + + // Формируем строку ответа + QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + + "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; + + return response.toUtf8(); +} +QByteArray add_favorite_ration(const QStringList& container) { + QString userId = container[1]; // ID пользователя + QString rationId = container[2]; // ID рациона + + bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки + + if (success) { + return "Ration successfully added to favorites\r\n"; + } else { + return "Error: failed to add ration to favorites\r\n"; + } +} +bool add_ration_to_favorites(const QString& userId, const QString& rationId) { + qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; + return true; // Заглушка, потом заменить на SQL-запрос +} + + + + + + + + diff --git a/Server 0.332/func2serv.h b/Server 0.332/func2serv.h new file mode 100644 index 0000000..76cb0fb --- /dev/null +++ b/Server 0.332/func2serv.h @@ -0,0 +1,26 @@ +#ifndef FUNC2SERV_H +#define FUNC2SERV_H + +#include + +QByteArray parsing(QString input, int socdes); + +QByteArray auth(QStringList ); +QByteArray reg(QStringList); +QByteArray get_stat(/*QStringList*/); +QByteArray check_task(/*QStringList*/); +QByteArray menu_export(/*QStringList*/); +QByteArray get_products(QStringList params); +QByteArray get_all_users(); +QByteArray get_stable_stat(); +int get_user_count(); +int get_product_count(); +QByteArray get_dynamic_stat(); +int get_weekly_logins(); +int get_monthly_logins(); +QByteArray add_favorite_ration(const QStringList& container); +bool add_ration_to_favorites(const QString& userId, const QString& rationId); + +#include + +#endif // FUNC2SERV_H diff --git a/Server 0.332/main.cpp b/Server 0.332/main.cpp new file mode 100644 index 0000000..c1efc71 --- /dev/null +++ b/Server 0.332/main.cpp @@ -0,0 +1,16 @@ +#include +#include "mytcpserver.h" +#include "databasesingleton.h" + +int main(int argc, char *argv[]) { + QCoreApplication a(argc, argv); + + // Инициализация БД + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + if (!db->initialize("Easyweek.db")) { + qFatal("Failed to initialize database"); + } + + MyTcpServer myserv; + return a.exec(); +} diff --git a/Server 0.332/mytcpserver.cpp b/Server 0.332/mytcpserver.cpp new file mode 100644 index 0000000..be276cb --- /dev/null +++ b/Server 0.332/mytcpserver.cpp @@ -0,0 +1,94 @@ +#include "mytcpserver.h" +#include +#include +#include +#include "func2serv.h" + +MyTcpServer::~MyTcpServer() +{ + mTcpServer->close(); + server_status = 0; + qDeleteAll(mSocketDescriptors); // Удаляем все сокеты +} + +MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) +{ + mTcpServer = new QTcpServer(this); + + connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); + + if (!mTcpServer->listen(QHostAddress::Any, 33333)) { + qDebug() << "server is not started"; + } else { + server_status = 1; + qDebug() << "server is started"; + } +} + +void MyTcpServer::slotNewConnection() +{ + if (server_status == 1) { + QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); + int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета + + if (socketDescriptor == -1) { + qDebug() << "Invalid socket descriptor!"; + clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен + return; + } + + mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере + + qDebug() << "New connection, socket descriptor:" << socketDescriptor; + + connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); + connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); + } +} + +void MyTcpServer::slotServerRead() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + QString res = ""; + while (clientSocket->bytesAvailable() > 0) { + QByteArray array = clientSocket->readAll(); + qDebug() << array << "\n"; + if (array == "\\x01\r\n") { + clientSocket->write(res.toUtf8()); + res = ""; + } else { + res.append(array); + } + } + clientSocket->write(parsing(res, clientSocket->socketDescriptor())); +} + +void MyTcpServer::slotClientDisconnected() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + // Получаем дескриптор сокета из контейнера + int socketDescriptor = -1; + for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { + if (it.value() == clientSocket) { + socketDescriptor = it.key(); + break; + } + } + + if (socketDescriptor != -1) { + mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера + qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; + } else { + qDebug() << "Client disconnected, but socket descriptor not found!"; + } + + clientSocket->deleteLater(); // Удаляем сокет +} diff --git a/Server 0.332/mytcpserver.h b/Server 0.332/mytcpserver.h new file mode 100644 index 0000000..fe179a1 --- /dev/null +++ b/Server 0.332/mytcpserver.h @@ -0,0 +1,27 @@ +#ifndef MYTCPSERVER_H +#define MYTCPSERVER_H +#include +#include +#include +#include +#include +#include +#include + +class MyTcpServer : public QObject +{ + Q_OBJECT +public: + explicit MyTcpServer(QObject *parent = nullptr); + ~MyTcpServer(); +public slots: + void slotNewConnection(); + void slotClientDisconnected(); + void slotServerRead(); +private: + QTcpServer * mTcpServer; + QTcpSocket * mTcpSocket; + int server_status; + QMap mSocketDescriptors; // Хранение дескрипторов сокетов +}; +#endif // MYTCPSERVER_H From c8eb8ec1e78bafa01c6bbdf58d90eb8a26012777 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 16:11:07 +0300 Subject: [PATCH 34/58] Server 0.342 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Изменёны возвратные значения для auth --- Server 0.342/databasesingleton.cpp | 203 ++++++++++++++++++++++++ Server 0.342/databasesingleton.h | 62 ++++++++ Server 0.342/echoServer.pro | 34 ++++ Server 0.342/func2serv.cpp | 241 +++++++++++++++++++++++++++++ Server 0.342/func2serv.h | 26 ++++ Server 0.342/main.cpp | 16 ++ Server 0.342/mytcpserver.cpp | 94 +++++++++++ Server 0.342/mytcpserver.h | 27 ++++ 8 files changed, 703 insertions(+) create mode 100644 Server 0.342/databasesingleton.cpp create mode 100644 Server 0.342/databasesingleton.h create mode 100644 Server 0.342/echoServer.pro create mode 100644 Server 0.342/func2serv.cpp create mode 100644 Server 0.342/func2serv.h create mode 100644 Server 0.342/main.cpp create mode 100644 Server 0.342/mytcpserver.cpp create mode 100644 Server 0.342/mytcpserver.h diff --git a/Server 0.342/databasesingleton.cpp b/Server 0.342/databasesingleton.cpp new file mode 100644 index 0000000..9536fb3 --- /dev/null +++ b/Server 0.342/databasesingleton.cpp @@ -0,0 +1,203 @@ +#include "databasesingleton.h" + +DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; +SingletonDestroyer DataBaseSingleton::destroyer; + +DataBaseSingleton::DataBaseSingleton() { + db = QSqlDatabase::addDatabase("QSQLITE"); +} + +DataBaseSingleton* DataBaseSingleton::getInstance() { + if (!p_instance) { + p_instance = new DataBaseSingleton(); + destroyer.initialize(p_instance); + } + return p_instance; +} + +bool DataBaseSingleton::initialize(const QString& databaseName) { + db.setDatabaseName(databaseName); + if (!db.open()) { + qDebug() << "Ошибка подключения:" << db.lastError().text(); + return false; + } + + // Создание таблицы users + QSqlQuery query(db); + bool success = query.exec( + "CREATE TABLE IF NOT EXISTS users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name VARCHAR(20) NOT NULL, " + "email VARCHAR(50) NOT NULL , " + "pass VARCHAR(20) NOT NULL, " + "is_admin BOOLEAN DEFAULT FALSE)" + ); + + success &= query.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email)"); + + // Создание таблицы products + success &= query.exec( + "CREATE TABLE IF NOT EXISTS products (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "id_user INTEGER NOT NULL, " + "name VARCHAR(50) NOT NULL, " + "proteins INTEGER NOT NULL, " + "fatness INTEGER NOT NULL, " + "carbs INTEGER NOT NULL, " + "weight INTEGER NOT NULL, " + "cost INTEGER NOT NULL, " + "type INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы favorites + success &= query.exec( + "CREATE TABLE IF NOT EXISTS favorites (" + "id_user INTEGER NOT NULL, " + "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки + "calories INTEGER NOT NULL, " + "all_cost INTEGER NOT NULL, " + "all_weight INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы statistics + success &= query.exec( + "CREATE TABLE IF NOT EXISTS statistics (" + "count_registrations INTEGER DEFAULT 0, " + "count_visits INTEGER DEFAULT 0, " + "count_generations INTEGER DEFAULT 0)" + ); + + // Инициализация статистики, если таблица пуста + query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); + + return success; +} + +QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { + QSqlQuery query(db); + query.prepare(queryStr); + for (auto it = params.begin(); it != params.end(); ++it) { + query.bindValue(it.key(), it.value()); + } + if (!query.exec()) { + qDebug() << "Ошибка запроса:" << query.lastError().text(); + qDebug() << "Текст запроса:" << queryStr; + } + return query; +} + +// Методы для работы с таблицей users +bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { + QSqlQuery query = executeQuery( + "SELECT * FROM users WHERE name = :name AND pass = :pass", + {{":name", login}, {":pass", password}} + ); + return query.next(); +} + +bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { + QSqlQuery query = executeQuery( + "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", + {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} + ); + + if (query.lastError().isValid()) { + qDebug() << "Ошибка SQL:" << query.lastError().text(); + return false; + } + return true; +} + +// Методы для работы с таблицей products +bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { + return executeQuery( + "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " + "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", + {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, + {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} + ).exec(); +} + +QVector DataBaseSingleton::getProductsByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM products WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector products; + while (query.next()) { + QVariantMap product; + product["id"] = query.value("id").toInt(); + product["name"] = query.value("name").toString(); + product["proteins"] = query.value("proteins").toInt(); + product["fatness"] = query.value("fatness").toInt(); + product["carbs"] = query.value("carbs").toInt(); + product["weight"] = query.value("weight").toInt(); + product["cost"] = query.value("cost").toInt(); + product["type"] = query.value("type").toInt(); + products.append(product); + } + return products; +} + +// Методы для работы с таблицей favorites +bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { + // Преобразуем QVector в QVector + QVector productIdsStr; + for (int id : productIds) { + productIdsStr.append(QString::number(id)); // Преобразуем int в QString + } + + // Преобразуем QVector в QStringList и объединяем в строку через запятую + QString productsStr = QStringList::fromVector(productIdsStr).join(","); + + // Выполняем SQL-запрос + return executeQuery( + "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " + "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", + {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, + {":all_cost", allCost}, {":all_weight", allWeight}} + ).exec(); +} + +QVector DataBaseSingleton::getFavoritesByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM favorites WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector favorites; + while (query.next()) { + QVariantMap favorite; + favorite["products"] = query.value("products").toString(); + favorite["calories"] = query.value("calories").toInt(); + favorite["all_cost"] = query.value("all_cost").toInt(); + favorite["all_weight"] = query.value("all_weight").toInt(); + favorites.append(favorite); + } + return favorites; +} + +// Методы для работы с таблицей statistics +bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { + return executeQuery( + "UPDATE statistics SET count_registrations = :registrations, " + "count_visits = :visits, count_generations = :generations", + {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} + ).exec(); +} + +QVariantMap DataBaseSingleton::getStatistics() { + QSqlQuery query = executeQuery("SELECT * FROM statistics"); + QVariantMap stats; + if (query.next()) { + stats["registrations"] = query.value("count_registrations").toInt(); + stats["visits"] = query.value("count_visits").toInt(); + stats["generations"] = query.value("count_generations").toInt(); + } + return stats; +} + +// Реализация разрушителя +SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } +void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.342/databasesingleton.h b/Server 0.342/databasesingleton.h new file mode 100644 index 0000000..db7e7e3 --- /dev/null +++ b/Server 0.342/databasesingleton.h @@ -0,0 +1,62 @@ +#ifndef DATABASESINGLETON_H +#define DATABASESINGLETON_H + +#include +#include +#include +#include +#include +#include + +class DataBaseSingleton; + +// Класс-разрушитель для корректного удаления Singleton +class SingletonDestroyer { +private: + DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton +public: + ~SingletonDestroyer(); // Деструктор для удаления Singleton + void initialize(DataBaseSingleton* p); // Инициализация указателя +}; + +// Основной класс для работы с базой данных +class DataBaseSingleton { +private: + static DataBaseSingleton* p_instance; // Единственный экземпляр класса + static SingletonDestroyer destroyer; // Объект-разрушитель + QSqlDatabase db; // Объект базы данных + + DataBaseSingleton(); // Приватный конструктор + DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования + DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; + ~DataBaseSingleton() = default; // Приватный деструктор + friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору + +public: + // Получение экземпляра Singleton + static DataBaseSingleton* getInstance(); + + // Инициализация БД: имя файла, создание таблиц + bool initialize(const QString& databaseName); + + // Выполнение параметризованного SQL-запроса + QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); + + // Методы для работы с таблицей users + bool checkUserCredentials(const QString& login, const QString& password); + bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); + + // Методы для работы с таблицей products + bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); + QVector getProductsByUser(int userId); + + // Методы для работы с таблицей favorites + bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); + QVector getFavoritesByUser(int userId); + + // Методы для работы с таблицей statistics + bool updateStatistics(int registrations, int visits, int generations); + QVariantMap getStatistics(); +}; + +#endif // DATABASESINGLETON_H diff --git a/Server 0.342/echoServer.pro b/Server 0.342/echoServer.pro new file mode 100644 index 0000000..fa16d4f --- /dev/null +++ b/Server 0.342/echoServer.pro @@ -0,0 +1,34 @@ +QT -= gui + +QT += network #Для работы с сетью +QT += sql + +CONFIG += c++11 console +CONFIG -= app_bundle + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + databasesingleton.cpp \ + func2serv.cpp \ + main.cpp \ + mytcpserver.cpp + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +HEADERS += \ + databasesingleton.h \ + func2serv.h \ + mytcpserver.h diff --git a/Server 0.342/func2serv.cpp b/Server 0.342/func2serv.cpp new file mode 100644 index 0000000..397a853 --- /dev/null +++ b/Server 0.342/func2serv.cpp @@ -0,0 +1,241 @@ +#include "func2serv.h" +#include +#include +#include +#include +// Заглушка для базы данных + + +QMap> mockDatabase = { + {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, + {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, + }; + +using namespace std; +QByteArray parsing(QString input, int socdes) +{ + + QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + + if (container.isEmpty()) { + return "server error: empty command\\n"; + } + + + qDebug() << socdes << " user command: " << container[0]; + QString var = container[0]; + if (var == "check_task") + { + return check_task(); + } + else if (var =="auth") + { + return auth(container); + } + else if (var == "user" && container[2] == "get_products") { + return get_products(container); + } + else if (var =="reg") + { + return reg(container); + } + else if (var == "get_stat") + { + return(get_stat()); + } + else if (var == "admin" && container[1] == "dynamic_stat") { + return get_dynamic_stat(); + } + else if (var == "menu_export") + { + return menu_export(); + } + else if (var == "user" && container[2] == "add_favorite_ration") { + return add_favorite_ration(container); + } + else if (var == "admin" && container[1] == "get_all_users") { + return get_all_users(); + } + else if (var == "admin" && container[1] == "stable_stat") { + return get_stable_stat(); + } + else + { + return "server error: unknow command\r\n"; + } +} + + +// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ +QByteArray auth(QStringList log) { + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + bool authSuccess = db->checkUserCredentials(log[1], log[2]); + + if (authSuccess) { + return "true"; + } + return "false"; +} + + +QByteArray reg(QStringList params) { + // 1️⃣ Проверка количества параметров + if (params.size() != 4) { + return "reg_failed//Недостаточно параметров для регистрации\r\n"; + } + + // 2️⃣ Извлечение данных из запроса + QString name = params[1]; // Имя пользователя + QString email = params[2]; // Email (должен быть уникальным) + QString password = params[3]; // Пароль + + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + + // 3️⃣ Проверка, не занят ли email + QSqlQuery checkQuery = db->executeQuery( + "SELECT id FROM users WHERE email = :email", + {{":email", email}} + ); + + // Если запрос не выполнился (ошибка БД) + if (!checkQuery.exec()) { + return "reg_failed//Ошибка при проверке email\r\n"; + } + + // Если email уже существует (найдена запись) + if (checkQuery.next()) { + return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n"; + } + + // 4️⃣ Попытка добавить пользователя + bool success = db->addUser(name, email, password, false); + + if (success) { + // 5️⃣ Обновление статистики (увеличиваем счетчик регистраций) + QVariantMap stats = db->getStatistics(); + db->updateStatistics( + stats["registrations"].toInt() + 1, // +1 новая регистрация + stats["visits"].toInt(), // Визиты без изменений + stats["generations"].toInt() // Генерации без изменений + ); + return "reg_success//Регистрация прошла успешно\r\n"; + } else { + // Если INSERT не сработал (например, из-за UNIQUE INDEX) + return "reg_failed//Ошибка при регистрации (возможно, email уже занят)\r\n"; + } +} + +QByteArray get_stat(/*QStringList*/){ + return "Your Statistic: null\r\n"; +} + +QByteArray check_task(/*QStringList*/){ + return "Task was succesful completed\r\n"; +} +QByteArray menu_export(/*QStringList*/){ + return "Меню успешно экспортировано!\r\n"; +} + +void fetch_products_from_db(const QString& userId, QStringList& products) { + + if (mockDatabase.contains(userId)) { + products = mockDatabase[userId]; + } +} +QByteArray get_products(QStringList params) { + QString userId = params[1]; // ID пользователя + QStringList products; // Список продуктов + + + fetch_products_from_db(userId, products); + + + QString response; + for (const QString& product : std::as_const(products)) { + response += "prod//" + product + "\r\n"; + } + + return response.toUtf8(); +} +QByteArray get_all_users() { + QStringList users; + + // fetch_users_from_db(users); + + QString response; + for (const QString& user : users) { + response += user + "\r\n"; + } + + return response.toUtf8(); +} +int get_user_count() { + // Здесь будет SQL-запрос, пока заглушка + return 152; // Примерное значение +} + +int get_product_count() { + // Здесь будет SQL-запрос, пока заглушка + return 732; // Примерное значение +} +QByteArray get_stable_stat() { + + int userCount = 0; + int productCount = 0; + + userCount = get_user_count(); + productCount = get_product_count(); + + // Формируем строку ответа + QString response = "Users: " + QString::number(userCount) + "\r\n" + + "Products: " + QString::number(productCount) + "\r\n"; + + return response.toUtf8(); +} +int get_weekly_logins() { + // Заглушка, пока без БД + return 78; // Примерное значение +} + +int get_monthly_logins() { + // Заглушка, пока без БД + return 312; // Примерное значение +} +QByteArray get_dynamic_stat() { + int weeklyLogins = 0; + int monthlyLogins = 0; + + // Получаем данные из БД (пока заглушки) + weeklyLogins = get_weekly_logins(); + monthlyLogins = get_monthly_logins(); + + // Формируем строку ответа + QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + + "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; + + return response.toUtf8(); +} +QByteArray add_favorite_ration(const QStringList& container) { + QString userId = container[1]; // ID пользователя + QString rationId = container[2]; // ID рациона + + bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки + + if (success) { + return "Ration successfully added to favorites\r\n"; + } else { + return "Error: failed to add ration to favorites\r\n"; + } +} +bool add_ration_to_favorites(const QString& userId, const QString& rationId) { + qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; + return true; // Заглушка, потом заменить на SQL-запрос +} + + + + + + + + diff --git a/Server 0.342/func2serv.h b/Server 0.342/func2serv.h new file mode 100644 index 0000000..76cb0fb --- /dev/null +++ b/Server 0.342/func2serv.h @@ -0,0 +1,26 @@ +#ifndef FUNC2SERV_H +#define FUNC2SERV_H + +#include + +QByteArray parsing(QString input, int socdes); + +QByteArray auth(QStringList ); +QByteArray reg(QStringList); +QByteArray get_stat(/*QStringList*/); +QByteArray check_task(/*QStringList*/); +QByteArray menu_export(/*QStringList*/); +QByteArray get_products(QStringList params); +QByteArray get_all_users(); +QByteArray get_stable_stat(); +int get_user_count(); +int get_product_count(); +QByteArray get_dynamic_stat(); +int get_weekly_logins(); +int get_monthly_logins(); +QByteArray add_favorite_ration(const QStringList& container); +bool add_ration_to_favorites(const QString& userId, const QString& rationId); + +#include + +#endif // FUNC2SERV_H diff --git a/Server 0.342/main.cpp b/Server 0.342/main.cpp new file mode 100644 index 0000000..c1efc71 --- /dev/null +++ b/Server 0.342/main.cpp @@ -0,0 +1,16 @@ +#include +#include "mytcpserver.h" +#include "databasesingleton.h" + +int main(int argc, char *argv[]) { + QCoreApplication a(argc, argv); + + // Инициализация БД + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + if (!db->initialize("Easyweek.db")) { + qFatal("Failed to initialize database"); + } + + MyTcpServer myserv; + return a.exec(); +} diff --git a/Server 0.342/mytcpserver.cpp b/Server 0.342/mytcpserver.cpp new file mode 100644 index 0000000..be276cb --- /dev/null +++ b/Server 0.342/mytcpserver.cpp @@ -0,0 +1,94 @@ +#include "mytcpserver.h" +#include +#include +#include +#include "func2serv.h" + +MyTcpServer::~MyTcpServer() +{ + mTcpServer->close(); + server_status = 0; + qDeleteAll(mSocketDescriptors); // Удаляем все сокеты +} + +MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) +{ + mTcpServer = new QTcpServer(this); + + connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); + + if (!mTcpServer->listen(QHostAddress::Any, 33333)) { + qDebug() << "server is not started"; + } else { + server_status = 1; + qDebug() << "server is started"; + } +} + +void MyTcpServer::slotNewConnection() +{ + if (server_status == 1) { + QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); + int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета + + if (socketDescriptor == -1) { + qDebug() << "Invalid socket descriptor!"; + clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен + return; + } + + mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере + + qDebug() << "New connection, socket descriptor:" << socketDescriptor; + + connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); + connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); + } +} + +void MyTcpServer::slotServerRead() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + QString res = ""; + while (clientSocket->bytesAvailable() > 0) { + QByteArray array = clientSocket->readAll(); + qDebug() << array << "\n"; + if (array == "\\x01\r\n") { + clientSocket->write(res.toUtf8()); + res = ""; + } else { + res.append(array); + } + } + clientSocket->write(parsing(res, clientSocket->socketDescriptor())); +} + +void MyTcpServer::slotClientDisconnected() +{ + QTcpSocket *clientSocket = qobject_cast(sender()); + if (!clientSocket) { + return; + } + + // Получаем дескриптор сокета из контейнера + int socketDescriptor = -1; + for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { + if (it.value() == clientSocket) { + socketDescriptor = it.key(); + break; + } + } + + if (socketDescriptor != -1) { + mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера + qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; + } else { + qDebug() << "Client disconnected, but socket descriptor not found!"; + } + + clientSocket->deleteLater(); // Удаляем сокет +} diff --git a/Server 0.342/mytcpserver.h b/Server 0.342/mytcpserver.h new file mode 100644 index 0000000..fe179a1 --- /dev/null +++ b/Server 0.342/mytcpserver.h @@ -0,0 +1,27 @@ +#ifndef MYTCPSERVER_H +#define MYTCPSERVER_H +#include +#include +#include +#include +#include +#include +#include + +class MyTcpServer : public QObject +{ + Q_OBJECT +public: + explicit MyTcpServer(QObject *parent = nullptr); + ~MyTcpServer(); +public slots: + void slotNewConnection(); + void slotClientDisconnected(); + void slotServerRead(); +private: + QTcpServer * mTcpServer; + QTcpSocket * mTcpSocket; + int server_status; + QMap mSocketDescriptors; // Хранение дескрипторов сокетов +}; +#endif // MYTCPSERVER_H From 870ec58f4e94394ad5db9debf4b1300cfc512b07 Mon Sep 17 00:00:00 2001 From: Petr <86932261+PetrSaprykin@users.noreply.github.com> Date: Sat, 26 Apr 2025 16:16:52 +0300 Subject: [PATCH 35/58] Add files via upload --- functions_for_client.cpp | 66 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 functions_for_client.cpp diff --git a/functions_for_client.cpp b/functions_for_client.cpp new file mode 100644 index 0000000..114e6fc --- /dev/null +++ b/functions_for_client.cpp @@ -0,0 +1,66 @@ +#include "functions_for_client.h" + +#include +#include +#include + + +bool auth(QString login, QString password) { + + ClientSingleton& client = ClientSingleton::getInstance(); + + QString response = client.send_msg(QStringList{"auth", login, password}); + + qDebug() << "Успешность авторизации: " << response; + + // здесь проверка успешна ли авторизация + if (response == "true") { + return true; + } + return false; +}; + +bool reg(QString login, QString password, QString email) { + + ClientSingleton& client = ClientSingleton::getInstance(); + + QString response = client.send_msg(QStringList{"reg", login, password, email}); + + + // проверка на успешность регистрации + if (response == "true") { + return true; + } + return false; +}; + +QString get_stable_stat() { + + ClientSingleton& client = ClientSingleton::getInstance(); + + QString stat = client.send_msg(QStringList{"admin", "stable_stat"}); + + return stat; + +}; + +QString get_dynamic_stat() { + + ClientSingleton& client = ClientSingleton::getInstance(); + + QString stat = client.send_msg(QStringList{"admin", "dynamic_stat"}); + + return stat; + +}; + + +QByteArray get_all_users() { + + ClientSingleton& client = ClientSingleton::getInstance(); + + QByteArray stat = client.send_msg(QStringList{"admin", "get_all_users"}); + + return stat; +}; + From b879a0f4d739a27268fbc84e282d9e348a2e1062 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 17:51:53 +0300 Subject: [PATCH 36/58] Delete Server 0.342 directory --- Server 0.342/databasesingleton.cpp | 203 ------------------------ Server 0.342/databasesingleton.h | 62 -------- Server 0.342/echoServer.pro | 34 ---- Server 0.342/func2serv.cpp | 241 ----------------------------- Server 0.342/func2serv.h | 26 ---- Server 0.342/main.cpp | 16 -- Server 0.342/mytcpserver.cpp | 94 ----------- Server 0.342/mytcpserver.h | 27 ---- 8 files changed, 703 deletions(-) delete mode 100644 Server 0.342/databasesingleton.cpp delete mode 100644 Server 0.342/databasesingleton.h delete mode 100644 Server 0.342/echoServer.pro delete mode 100644 Server 0.342/func2serv.cpp delete mode 100644 Server 0.342/func2serv.h delete mode 100644 Server 0.342/main.cpp delete mode 100644 Server 0.342/mytcpserver.cpp delete mode 100644 Server 0.342/mytcpserver.h diff --git a/Server 0.342/databasesingleton.cpp b/Server 0.342/databasesingleton.cpp deleted file mode 100644 index 9536fb3..0000000 --- a/Server 0.342/databasesingleton.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include "databasesingleton.h" - -DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; -SingletonDestroyer DataBaseSingleton::destroyer; - -DataBaseSingleton::DataBaseSingleton() { - db = QSqlDatabase::addDatabase("QSQLITE"); -} - -DataBaseSingleton* DataBaseSingleton::getInstance() { - if (!p_instance) { - p_instance = new DataBaseSingleton(); - destroyer.initialize(p_instance); - } - return p_instance; -} - -bool DataBaseSingleton::initialize(const QString& databaseName) { - db.setDatabaseName(databaseName); - if (!db.open()) { - qDebug() << "Ошибка подключения:" << db.lastError().text(); - return false; - } - - // Создание таблицы users - QSqlQuery query(db); - bool success = query.exec( - "CREATE TABLE IF NOT EXISTS users (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "name VARCHAR(20) NOT NULL, " - "email VARCHAR(50) NOT NULL , " - "pass VARCHAR(20) NOT NULL, " - "is_admin BOOLEAN DEFAULT FALSE)" - ); - - success &= query.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email)"); - - // Создание таблицы products - success &= query.exec( - "CREATE TABLE IF NOT EXISTS products (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "id_user INTEGER NOT NULL, " - "name VARCHAR(50) NOT NULL, " - "proteins INTEGER NOT NULL, " - "fatness INTEGER NOT NULL, " - "carbs INTEGER NOT NULL, " - "weight INTEGER NOT NULL, " - "cost INTEGER NOT NULL, " - "type INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы favorites - success &= query.exec( - "CREATE TABLE IF NOT EXISTS favorites (" - "id_user INTEGER NOT NULL, " - "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки - "calories INTEGER NOT NULL, " - "all_cost INTEGER NOT NULL, " - "all_weight INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы statistics - success &= query.exec( - "CREATE TABLE IF NOT EXISTS statistics (" - "count_registrations INTEGER DEFAULT 0, " - "count_visits INTEGER DEFAULT 0, " - "count_generations INTEGER DEFAULT 0)" - ); - - // Инициализация статистики, если таблица пуста - query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); - - return success; -} - -QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { - QSqlQuery query(db); - query.prepare(queryStr); - for (auto it = params.begin(); it != params.end(); ++it) { - query.bindValue(it.key(), it.value()); - } - if (!query.exec()) { - qDebug() << "Ошибка запроса:" << query.lastError().text(); - qDebug() << "Текст запроса:" << queryStr; - } - return query; -} - -// Методы для работы с таблицей users -bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { - QSqlQuery query = executeQuery( - "SELECT * FROM users WHERE name = :name AND pass = :pass", - {{":name", login}, {":pass", password}} - ); - return query.next(); -} - -bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { - QSqlQuery query = executeQuery( - "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", - {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} - ); - - if (query.lastError().isValid()) { - qDebug() << "Ошибка SQL:" << query.lastError().text(); - return false; - } - return true; -} - -// Методы для работы с таблицей products -bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { - return executeQuery( - "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " - "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", - {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, - {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} - ).exec(); -} - -QVector DataBaseSingleton::getProductsByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM products WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector products; - while (query.next()) { - QVariantMap product; - product["id"] = query.value("id").toInt(); - product["name"] = query.value("name").toString(); - product["proteins"] = query.value("proteins").toInt(); - product["fatness"] = query.value("fatness").toInt(); - product["carbs"] = query.value("carbs").toInt(); - product["weight"] = query.value("weight").toInt(); - product["cost"] = query.value("cost").toInt(); - product["type"] = query.value("type").toInt(); - products.append(product); - } - return products; -} - -// Методы для работы с таблицей favorites -bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { - // Преобразуем QVector в QVector - QVector productIdsStr; - for (int id : productIds) { - productIdsStr.append(QString::number(id)); // Преобразуем int в QString - } - - // Преобразуем QVector в QStringList и объединяем в строку через запятую - QString productsStr = QStringList::fromVector(productIdsStr).join(","); - - // Выполняем SQL-запрос - return executeQuery( - "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " - "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", - {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, - {":all_cost", allCost}, {":all_weight", allWeight}} - ).exec(); -} - -QVector DataBaseSingleton::getFavoritesByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM favorites WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector favorites; - while (query.next()) { - QVariantMap favorite; - favorite["products"] = query.value("products").toString(); - favorite["calories"] = query.value("calories").toInt(); - favorite["all_cost"] = query.value("all_cost").toInt(); - favorite["all_weight"] = query.value("all_weight").toInt(); - favorites.append(favorite); - } - return favorites; -} - -// Методы для работы с таблицей statistics -bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { - return executeQuery( - "UPDATE statistics SET count_registrations = :registrations, " - "count_visits = :visits, count_generations = :generations", - {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} - ).exec(); -} - -QVariantMap DataBaseSingleton::getStatistics() { - QSqlQuery query = executeQuery("SELECT * FROM statistics"); - QVariantMap stats; - if (query.next()) { - stats["registrations"] = query.value("count_registrations").toInt(); - stats["visits"] = query.value("count_visits").toInt(); - stats["generations"] = query.value("count_generations").toInt(); - } - return stats; -} - -// Реализация разрушителя -SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } -void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.342/databasesingleton.h b/Server 0.342/databasesingleton.h deleted file mode 100644 index db7e7e3..0000000 --- a/Server 0.342/databasesingleton.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef DATABASESINGLETON_H -#define DATABASESINGLETON_H - -#include -#include -#include -#include -#include -#include - -class DataBaseSingleton; - -// Класс-разрушитель для корректного удаления Singleton -class SingletonDestroyer { -private: - DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton -public: - ~SingletonDestroyer(); // Деструктор для удаления Singleton - void initialize(DataBaseSingleton* p); // Инициализация указателя -}; - -// Основной класс для работы с базой данных -class DataBaseSingleton { -private: - static DataBaseSingleton* p_instance; // Единственный экземпляр класса - static SingletonDestroyer destroyer; // Объект-разрушитель - QSqlDatabase db; // Объект базы данных - - DataBaseSingleton(); // Приватный конструктор - DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования - DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; - ~DataBaseSingleton() = default; // Приватный деструктор - friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору - -public: - // Получение экземпляра Singleton - static DataBaseSingleton* getInstance(); - - // Инициализация БД: имя файла, создание таблиц - bool initialize(const QString& databaseName); - - // Выполнение параметризованного SQL-запроса - QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); - - // Методы для работы с таблицей users - bool checkUserCredentials(const QString& login, const QString& password); - bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); - - // Методы для работы с таблицей products - bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); - QVector getProductsByUser(int userId); - - // Методы для работы с таблицей favorites - bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); - QVector getFavoritesByUser(int userId); - - // Методы для работы с таблицей statistics - bool updateStatistics(int registrations, int visits, int generations); - QVariantMap getStatistics(); -}; - -#endif // DATABASESINGLETON_H diff --git a/Server 0.342/echoServer.pro b/Server 0.342/echoServer.pro deleted file mode 100644 index fa16d4f..0000000 --- a/Server 0.342/echoServer.pro +++ /dev/null @@ -1,34 +0,0 @@ -QT -= gui - -QT += network #Для работы с сетью -QT += sql - -CONFIG += c++11 console -CONFIG -= app_bundle - -# The following define makes your compiler emit warnings if you use -# any Qt feature that has been marked deprecated (the exact warnings -# depend on your compiler). Please consult the documentation of the -# deprecated API in order to know how to port your code away from it. -DEFINES += QT_DEPRECATED_WARNINGS - -# You can also make your code fail to compile if it uses deprecated APIs. -# In order to do so, uncomment the following line. -# You can also select to disable deprecated APIs only up to a certain version of Qt. -#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - -SOURCES += \ - databasesingleton.cpp \ - func2serv.cpp \ - main.cpp \ - mytcpserver.cpp - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -HEADERS += \ - databasesingleton.h \ - func2serv.h \ - mytcpserver.h diff --git a/Server 0.342/func2serv.cpp b/Server 0.342/func2serv.cpp deleted file mode 100644 index 397a853..0000000 --- a/Server 0.342/func2serv.cpp +++ /dev/null @@ -1,241 +0,0 @@ -#include "func2serv.h" -#include -#include -#include -#include -// Заглушка для базы данных - - -QMap> mockDatabase = { - {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, - {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, - }; - -using namespace std; -QByteArray parsing(QString input, int socdes) -{ - - QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user - - if (container.isEmpty()) { - return "server error: empty command\\n"; - } - - - qDebug() << socdes << " user command: " << container[0]; - QString var = container[0]; - if (var == "check_task") - { - return check_task(); - } - else if (var =="auth") - { - return auth(container); - } - else if (var == "user" && container[2] == "get_products") { - return get_products(container); - } - else if (var =="reg") - { - return reg(container); - } - else if (var == "get_stat") - { - return(get_stat()); - } - else if (var == "admin" && container[1] == "dynamic_stat") { - return get_dynamic_stat(); - } - else if (var == "menu_export") - { - return menu_export(); - } - else if (var == "user" && container[2] == "add_favorite_ration") { - return add_favorite_ration(container); - } - else if (var == "admin" && container[1] == "get_all_users") { - return get_all_users(); - } - else if (var == "admin" && container[1] == "stable_stat") { - return get_stable_stat(); - } - else - { - return "server error: unknow command\r\n"; - } -} - - -// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ -QByteArray auth(QStringList log) { - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - bool authSuccess = db->checkUserCredentials(log[1], log[2]); - - if (authSuccess) { - return "true"; - } - return "false"; -} - - -QByteArray reg(QStringList params) { - // 1️⃣ Проверка количества параметров - if (params.size() != 4) { - return "reg_failed//Недостаточно параметров для регистрации\r\n"; - } - - // 2️⃣ Извлечение данных из запроса - QString name = params[1]; // Имя пользователя - QString email = params[2]; // Email (должен быть уникальным) - QString password = params[3]; // Пароль - - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - - // 3️⃣ Проверка, не занят ли email - QSqlQuery checkQuery = db->executeQuery( - "SELECT id FROM users WHERE email = :email", - {{":email", email}} - ); - - // Если запрос не выполнился (ошибка БД) - if (!checkQuery.exec()) { - return "reg_failed//Ошибка при проверке email\r\n"; - } - - // Если email уже существует (найдена запись) - if (checkQuery.next()) { - return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n"; - } - - // 4️⃣ Попытка добавить пользователя - bool success = db->addUser(name, email, password, false); - - if (success) { - // 5️⃣ Обновление статистики (увеличиваем счетчик регистраций) - QVariantMap stats = db->getStatistics(); - db->updateStatistics( - stats["registrations"].toInt() + 1, // +1 новая регистрация - stats["visits"].toInt(), // Визиты без изменений - stats["generations"].toInt() // Генерации без изменений - ); - return "reg_success//Регистрация прошла успешно\r\n"; - } else { - // Если INSERT не сработал (например, из-за UNIQUE INDEX) - return "reg_failed//Ошибка при регистрации (возможно, email уже занят)\r\n"; - } -} - -QByteArray get_stat(/*QStringList*/){ - return "Your Statistic: null\r\n"; -} - -QByteArray check_task(/*QStringList*/){ - return "Task was succesful completed\r\n"; -} -QByteArray menu_export(/*QStringList*/){ - return "Меню успешно экспортировано!\r\n"; -} - -void fetch_products_from_db(const QString& userId, QStringList& products) { - - if (mockDatabase.contains(userId)) { - products = mockDatabase[userId]; - } -} -QByteArray get_products(QStringList params) { - QString userId = params[1]; // ID пользователя - QStringList products; // Список продуктов - - - fetch_products_from_db(userId, products); - - - QString response; - for (const QString& product : std::as_const(products)) { - response += "prod//" + product + "\r\n"; - } - - return response.toUtf8(); -} -QByteArray get_all_users() { - QStringList users; - - // fetch_users_from_db(users); - - QString response; - for (const QString& user : users) { - response += user + "\r\n"; - } - - return response.toUtf8(); -} -int get_user_count() { - // Здесь будет SQL-запрос, пока заглушка - return 152; // Примерное значение -} - -int get_product_count() { - // Здесь будет SQL-запрос, пока заглушка - return 732; // Примерное значение -} -QByteArray get_stable_stat() { - - int userCount = 0; - int productCount = 0; - - userCount = get_user_count(); - productCount = get_product_count(); - - // Формируем строку ответа - QString response = "Users: " + QString::number(userCount) + "\r\n" + - "Products: " + QString::number(productCount) + "\r\n"; - - return response.toUtf8(); -} -int get_weekly_logins() { - // Заглушка, пока без БД - return 78; // Примерное значение -} - -int get_monthly_logins() { - // Заглушка, пока без БД - return 312; // Примерное значение -} -QByteArray get_dynamic_stat() { - int weeklyLogins = 0; - int monthlyLogins = 0; - - // Получаем данные из БД (пока заглушки) - weeklyLogins = get_weekly_logins(); - monthlyLogins = get_monthly_logins(); - - // Формируем строку ответа - QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + - "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; - - return response.toUtf8(); -} -QByteArray add_favorite_ration(const QStringList& container) { - QString userId = container[1]; // ID пользователя - QString rationId = container[2]; // ID рациона - - bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки - - if (success) { - return "Ration successfully added to favorites\r\n"; - } else { - return "Error: failed to add ration to favorites\r\n"; - } -} -bool add_ration_to_favorites(const QString& userId, const QString& rationId) { - qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; - return true; // Заглушка, потом заменить на SQL-запрос -} - - - - - - - - diff --git a/Server 0.342/func2serv.h b/Server 0.342/func2serv.h deleted file mode 100644 index 76cb0fb..0000000 --- a/Server 0.342/func2serv.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef FUNC2SERV_H -#define FUNC2SERV_H - -#include - -QByteArray parsing(QString input, int socdes); - -QByteArray auth(QStringList ); -QByteArray reg(QStringList); -QByteArray get_stat(/*QStringList*/); -QByteArray check_task(/*QStringList*/); -QByteArray menu_export(/*QStringList*/); -QByteArray get_products(QStringList params); -QByteArray get_all_users(); -QByteArray get_stable_stat(); -int get_user_count(); -int get_product_count(); -QByteArray get_dynamic_stat(); -int get_weekly_logins(); -int get_monthly_logins(); -QByteArray add_favorite_ration(const QStringList& container); -bool add_ration_to_favorites(const QString& userId, const QString& rationId); - -#include - -#endif // FUNC2SERV_H diff --git a/Server 0.342/main.cpp b/Server 0.342/main.cpp deleted file mode 100644 index c1efc71..0000000 --- a/Server 0.342/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "mytcpserver.h" -#include "databasesingleton.h" - -int main(int argc, char *argv[]) { - QCoreApplication a(argc, argv); - - // Инициализация БД - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - if (!db->initialize("Easyweek.db")) { - qFatal("Failed to initialize database"); - } - - MyTcpServer myserv; - return a.exec(); -} diff --git a/Server 0.342/mytcpserver.cpp b/Server 0.342/mytcpserver.cpp deleted file mode 100644 index be276cb..0000000 --- a/Server 0.342/mytcpserver.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "mytcpserver.h" -#include -#include -#include -#include "func2serv.h" - -MyTcpServer::~MyTcpServer() -{ - mTcpServer->close(); - server_status = 0; - qDeleteAll(mSocketDescriptors); // Удаляем все сокеты -} - -MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) -{ - mTcpServer = new QTcpServer(this); - - connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); - - if (!mTcpServer->listen(QHostAddress::Any, 33333)) { - qDebug() << "server is not started"; - } else { - server_status = 1; - qDebug() << "server is started"; - } -} - -void MyTcpServer::slotNewConnection() -{ - if (server_status == 1) { - QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); - int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета - - if (socketDescriptor == -1) { - qDebug() << "Invalid socket descriptor!"; - clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен - return; - } - - mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере - - qDebug() << "New connection, socket descriptor:" << socketDescriptor; - - connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); - connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); - } -} - -void MyTcpServer::slotServerRead() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - QString res = ""; - while (clientSocket->bytesAvailable() > 0) { - QByteArray array = clientSocket->readAll(); - qDebug() << array << "\n"; - if (array == "\\x01\r\n") { - clientSocket->write(res.toUtf8()); - res = ""; - } else { - res.append(array); - } - } - clientSocket->write(parsing(res, clientSocket->socketDescriptor())); -} - -void MyTcpServer::slotClientDisconnected() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - // Получаем дескриптор сокета из контейнера - int socketDescriptor = -1; - for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { - if (it.value() == clientSocket) { - socketDescriptor = it.key(); - break; - } - } - - if (socketDescriptor != -1) { - mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера - qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; - } else { - qDebug() << "Client disconnected, but socket descriptor not found!"; - } - - clientSocket->deleteLater(); // Удаляем сокет -} diff --git a/Server 0.342/mytcpserver.h b/Server 0.342/mytcpserver.h deleted file mode 100644 index fe179a1..0000000 --- a/Server 0.342/mytcpserver.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef MYTCPSERVER_H -#define MYTCPSERVER_H -#include -#include -#include -#include -#include -#include -#include - -class MyTcpServer : public QObject -{ - Q_OBJECT -public: - explicit MyTcpServer(QObject *parent = nullptr); - ~MyTcpServer(); -public slots: - void slotNewConnection(); - void slotClientDisconnected(); - void slotServerRead(); -private: - QTcpServer * mTcpServer; - QTcpSocket * mTcpSocket; - int server_status; - QMap mSocketDescriptors; // Хранение дескрипторов сокетов -}; -#endif // MYTCPSERVER_H From 04335d35f7c7e78e3060f8fa38e905ae8fb34880 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 17:52:08 +0300 Subject: [PATCH 37/58] Delete Server 0.321 directory --- Server 0.321/databasesingleton.cpp | 198 ------------------------- Server 0.321/databasesingleton.h | 62 -------- Server 0.321/echoServer.pro | 34 ----- Server 0.321/func2serv.cpp | 222 ----------------------------- Server 0.321/func2serv.h | 26 ---- Server 0.321/main.cpp | 16 --- Server 0.321/mytcpserver.cpp | 94 ------------ Server 0.321/mytcpserver.h | 27 ---- 8 files changed, 679 deletions(-) delete mode 100644 Server 0.321/databasesingleton.cpp delete mode 100644 Server 0.321/databasesingleton.h delete mode 100644 Server 0.321/echoServer.pro delete mode 100644 Server 0.321/func2serv.cpp delete mode 100644 Server 0.321/func2serv.h delete mode 100644 Server 0.321/main.cpp delete mode 100644 Server 0.321/mytcpserver.cpp delete mode 100644 Server 0.321/mytcpserver.h diff --git a/Server 0.321/databasesingleton.cpp b/Server 0.321/databasesingleton.cpp deleted file mode 100644 index 28e84ed..0000000 --- a/Server 0.321/databasesingleton.cpp +++ /dev/null @@ -1,198 +0,0 @@ -#include "databasesingleton.h" - -DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; -SingletonDestroyer DataBaseSingleton::destroyer; - -DataBaseSingleton::DataBaseSingleton() { - db = QSqlDatabase::addDatabase("QSQLITE"); -} - -DataBaseSingleton* DataBaseSingleton::getInstance() { - if (!p_instance) { - p_instance = new DataBaseSingleton(); - destroyer.initialize(p_instance); - } - return p_instance; -} - -bool DataBaseSingleton::initialize(const QString& databaseName) { - db.setDatabaseName(databaseName); - if (!db.open()) { - qDebug() << "Ошибка подключения:" << db.lastError().text(); - return false; - } - - // Создание таблицы users - QSqlQuery query(db); - bool success = query.exec( - "CREATE TABLE IF NOT EXISTS users (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "name VARCHAR(20) NOT NULL, " - "email VARCHAR(50) NOT NULL , " - "pass VARCHAR(20) NOT NULL, " - "is_admin BOOLEAN DEFAULT FALSE)" - ); - - // Создание таблицы products - success &= query.exec( - "CREATE TABLE IF NOT EXISTS products (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "id_user INTEGER NOT NULL, " - "name VARCHAR(50) NOT NULL, " - "proteins INTEGER NOT NULL, " - "fatness INTEGER NOT NULL, " - "carbs INTEGER NOT NULL, " - "weight INTEGER NOT NULL, " - "cost INTEGER NOT NULL, " - "type INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы favorites - success &= query.exec( - "CREATE TABLE IF NOT EXISTS favorites (" - "id_user INTEGER NOT NULL, " - "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки - "calories INTEGER NOT NULL, " - "all_cost INTEGER NOT NULL, " - "all_weight INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы statistics - success &= query.exec( - "CREATE TABLE IF NOT EXISTS statistics (" - "count_registrations INTEGER DEFAULT 0, " - "count_visits INTEGER DEFAULT 0, " - "count_generations INTEGER DEFAULT 0)" - ); - - // Инициализация статистики, если таблица пуста - query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); - - return success; -} - -QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { - QSqlQuery query(db); - query.prepare(queryStr); - for (auto it = params.begin(); it != params.end(); ++it) { - query.bindValue(it.key(), it.value()); - } - if (!query.exec()) { - qDebug() << "Ошибка запроса:" << query.lastError().text(); - qDebug() << "Текст запроса:" << queryStr; - } - return query; -} - -// Методы для работы с таблицей users -bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { - QSqlQuery query = executeQuery( - "SELECT * FROM users WHERE name = :name AND pass = :pass", - {{":name", login}, {":pass", password}} - ); - return query.next(); -} - -bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { - QSqlQuery query = executeQuery( - "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", - {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} - ); - bool res = query.exec(); - qDebug() << "Ошибка запроса:" << query.lastError().text(); - return res; -} - -// Методы для работы с таблицей products -bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { - return executeQuery( - "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " - "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", - {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, - {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} - ).exec(); -} - -QVector DataBaseSingleton::getProductsByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM products WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector products; - while (query.next()) { - QVariantMap product; - product["id"] = query.value("id").toInt(); - product["name"] = query.value("name").toString(); - product["proteins"] = query.value("proteins").toInt(); - product["fatness"] = query.value("fatness").toInt(); - product["carbs"] = query.value("carbs").toInt(); - product["weight"] = query.value("weight").toInt(); - product["cost"] = query.value("cost").toInt(); - product["type"] = query.value("type").toInt(); - products.append(product); - } - return products; -} - -// Методы для работы с таблицей favorites -bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { - // Преобразуем QVector в QVector - QVector productIdsStr; - for (int id : productIds) { - productIdsStr.append(QString::number(id)); // Преобразуем int в QString - } - - // Преобразуем QVector в QStringList и объединяем в строку через запятую - QString productsStr = QStringList::fromVector(productIdsStr).join(","); - - // Выполняем SQL-запрос - return executeQuery( - "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " - "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", - {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, - {":all_cost", allCost}, {":all_weight", allWeight}} - ).exec(); -} - -QVector DataBaseSingleton::getFavoritesByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM favorites WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector favorites; - while (query.next()) { - QVariantMap favorite; - favorite["products"] = query.value("products").toString(); - favorite["calories"] = query.value("calories").toInt(); - favorite["all_cost"] = query.value("all_cost").toInt(); - favorite["all_weight"] = query.value("all_weight").toInt(); - favorites.append(favorite); - } - return favorites; -} - -// Методы для работы с таблицей statistics -bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { - return executeQuery( - "UPDATE statistics SET count_registrations = :registrations, " - "count_visits = :visits, count_generations = :generations", - {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} - ).exec(); -} - -QVariantMap DataBaseSingleton::getStatistics() { - QSqlQuery query = executeQuery("SELECT * FROM statistics"); - QVariantMap stats; - if (query.next()) { - stats["registrations"] = query.value("count_registrations").toInt(); - stats["visits"] = query.value("count_visits").toInt(); - stats["generations"] = query.value("count_generations").toInt(); - } - return stats; -} - -// Реализация разрушителя -SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } -void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.321/databasesingleton.h b/Server 0.321/databasesingleton.h deleted file mode 100644 index db7e7e3..0000000 --- a/Server 0.321/databasesingleton.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef DATABASESINGLETON_H -#define DATABASESINGLETON_H - -#include -#include -#include -#include -#include -#include - -class DataBaseSingleton; - -// Класс-разрушитель для корректного удаления Singleton -class SingletonDestroyer { -private: - DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton -public: - ~SingletonDestroyer(); // Деструктор для удаления Singleton - void initialize(DataBaseSingleton* p); // Инициализация указателя -}; - -// Основной класс для работы с базой данных -class DataBaseSingleton { -private: - static DataBaseSingleton* p_instance; // Единственный экземпляр класса - static SingletonDestroyer destroyer; // Объект-разрушитель - QSqlDatabase db; // Объект базы данных - - DataBaseSingleton(); // Приватный конструктор - DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования - DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; - ~DataBaseSingleton() = default; // Приватный деструктор - friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору - -public: - // Получение экземпляра Singleton - static DataBaseSingleton* getInstance(); - - // Инициализация БД: имя файла, создание таблиц - bool initialize(const QString& databaseName); - - // Выполнение параметризованного SQL-запроса - QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); - - // Методы для работы с таблицей users - bool checkUserCredentials(const QString& login, const QString& password); - bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); - - // Методы для работы с таблицей products - bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); - QVector getProductsByUser(int userId); - - // Методы для работы с таблицей favorites - bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); - QVector getFavoritesByUser(int userId); - - // Методы для работы с таблицей statistics - bool updateStatistics(int registrations, int visits, int generations); - QVariantMap getStatistics(); -}; - -#endif // DATABASESINGLETON_H diff --git a/Server 0.321/echoServer.pro b/Server 0.321/echoServer.pro deleted file mode 100644 index fa16d4f..0000000 --- a/Server 0.321/echoServer.pro +++ /dev/null @@ -1,34 +0,0 @@ -QT -= gui - -QT += network #Для работы с сетью -QT += sql - -CONFIG += c++11 console -CONFIG -= app_bundle - -# The following define makes your compiler emit warnings if you use -# any Qt feature that has been marked deprecated (the exact warnings -# depend on your compiler). Please consult the documentation of the -# deprecated API in order to know how to port your code away from it. -DEFINES += QT_DEPRECATED_WARNINGS - -# You can also make your code fail to compile if it uses deprecated APIs. -# In order to do so, uncomment the following line. -# You can also select to disable deprecated APIs only up to a certain version of Qt. -#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - -SOURCES += \ - databasesingleton.cpp \ - func2serv.cpp \ - main.cpp \ - mytcpserver.cpp - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -HEADERS += \ - databasesingleton.h \ - func2serv.h \ - mytcpserver.h diff --git a/Server 0.321/func2serv.cpp b/Server 0.321/func2serv.cpp deleted file mode 100644 index 4fa609c..0000000 --- a/Server 0.321/func2serv.cpp +++ /dev/null @@ -1,222 +0,0 @@ -#include "func2serv.h" -#include -#include -#include -#include -// Заглушка для базы данных - - -QMap> mockDatabase = { - {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, - {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, - }; - -using namespace std; -QByteArray parsing(QString input, int socdes) -{ - - QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user - - if (container.isEmpty()) { - return "server error: empty command\\n"; - } - - - qDebug() << socdes << " user command: " << container[0]; - QString var = container[0]; - if (var == "check_task") - { - return check_task(); - } - else if (var =="auth") - { - return auth(container); - } - else if (var == "user" && container[2] == "get_products") { - return get_products(container); - } - else if (var =="reg") - { - return reg(container); - } - else if (var == "get_stat") - { - return(get_stat()); - } - else if (var == "admin" && container[1] == "dynamic_stat") { - return get_dynamic_stat(); - } - else if (var == "menu_export") - { - return menu_export(); - } - else if (var == "user" && container[2] == "add_favorite_ration") { - return add_favorite_ration(container); - } - else if (var == "admin" && container[1] == "get_all_users") { - return get_all_users(); - } - else if (var == "admin" && container[1] == "stable_stat") { - return get_stable_stat(); - } - else - { - return "server error: unknow command\r\n"; - } -} - - -// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ -QByteArray auth(QStringList log) { - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - bool authSuccess = db->checkUserCredentials(log[1], log[2]); - - if (authSuccess) { - return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; - } - return "auth_failed//Invalid credentials\r\n"; -} - -QByteArray reg(QStringList params) { - if (params.size() != 4) { - return "reg_failed//Недостаточно параметров для регистрации\r\n"; - } - - QString name = params[1]; - QString email = params[2]; - QString password = params[3]; - - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - - QSqlQuery checkQuery = db->executeQuery( - "SELECT * FROM users WHERE email = :email", - {{":email", email}} - ); - - if (!checkQuery.exec()) { - return "reg_failed//Ошибка при проверке email\r\n"; - } - - bool success = db->addUser(name, email, password, false); - - if (success) { - return "reg_success//Регистрация прошла успешно\r\n"; - } else { - return "reg_failed//Ошибка при регистрации\r\n"; - } -} - -QByteArray get_stat(/*QStringList*/){ - return "Your Statistic: null\r\n"; -} - -QByteArray check_task(/*QStringList*/){ - return "Task was succesful completed\r\n"; -} -QByteArray menu_export(/*QStringList*/){ - return "Меню успешно экспортировано!\r\n"; -} - -void fetch_products_from_db(const QString& userId, QStringList& products) { - - if (mockDatabase.contains(userId)) { - products = mockDatabase[userId]; - } -} -QByteArray get_products(QStringList params) { - QString userId = params[1]; // ID пользователя - QStringList products; // Список продуктов - - - fetch_products_from_db(userId, products); - - - QString response; - for (const QString& product : std::as_const(products)) { - response += "prod//" + product + "\r\n"; - } - - return response.toUtf8(); -} -QByteArray get_all_users() { - QStringList users; - - // fetch_users_from_db(users); - - QString response; - for (const QString& user : users) { - response += user + "\r\n"; - } - - return response.toUtf8(); -} -int get_user_count() { - // Здесь будет SQL-запрос, пока заглушка - return 152; // Примерное значение -} - -int get_product_count() { - // Здесь будет SQL-запрос, пока заглушка - return 732; // Примерное значение -} -QByteArray get_stable_stat() { - - int userCount = 0; - int productCount = 0; - - userCount = get_user_count(); - productCount = get_product_count(); - - // Формируем строку ответа - QString response = "Users: " + QString::number(userCount) + "\r\n" + - "Products: " + QString::number(productCount) + "\r\n"; - - return response.toUtf8(); -} -int get_weekly_logins() { - // Заглушка, пока без БД - return 78; // Примерное значение -} - -int get_monthly_logins() { - // Заглушка, пока без БД - return 312; // Примерное значение -} -QByteArray get_dynamic_stat() { - int weeklyLogins = 0; - int monthlyLogins = 0; - - // Получаем данные из БД (пока заглушки) - weeklyLogins = get_weekly_logins(); - monthlyLogins = get_monthly_logins(); - - // Формируем строку ответа - QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + - "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; - - return response.toUtf8(); -} -QByteArray add_favorite_ration(const QStringList& container) { - QString userId = container[1]; // ID пользователя - QString rationId = container[2]; // ID рациона - - bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки - - if (success) { - return "Ration successfully added to favorites\r\n"; - } else { - return "Error: failed to add ration to favorites\r\n"; - } -} -bool add_ration_to_favorites(const QString& userId, const QString& rationId) { - qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; - return true; // Заглушка, потом заменить на SQL-запрос -} - - - - - - - - diff --git a/Server 0.321/func2serv.h b/Server 0.321/func2serv.h deleted file mode 100644 index 76cb0fb..0000000 --- a/Server 0.321/func2serv.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef FUNC2SERV_H -#define FUNC2SERV_H - -#include - -QByteArray parsing(QString input, int socdes); - -QByteArray auth(QStringList ); -QByteArray reg(QStringList); -QByteArray get_stat(/*QStringList*/); -QByteArray check_task(/*QStringList*/); -QByteArray menu_export(/*QStringList*/); -QByteArray get_products(QStringList params); -QByteArray get_all_users(); -QByteArray get_stable_stat(); -int get_user_count(); -int get_product_count(); -QByteArray get_dynamic_stat(); -int get_weekly_logins(); -int get_monthly_logins(); -QByteArray add_favorite_ration(const QStringList& container); -bool add_ration_to_favorites(const QString& userId, const QString& rationId); - -#include - -#endif // FUNC2SERV_H diff --git a/Server 0.321/main.cpp b/Server 0.321/main.cpp deleted file mode 100644 index c1efc71..0000000 --- a/Server 0.321/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "mytcpserver.h" -#include "databasesingleton.h" - -int main(int argc, char *argv[]) { - QCoreApplication a(argc, argv); - - // Инициализация БД - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - if (!db->initialize("Easyweek.db")) { - qFatal("Failed to initialize database"); - } - - MyTcpServer myserv; - return a.exec(); -} diff --git a/Server 0.321/mytcpserver.cpp b/Server 0.321/mytcpserver.cpp deleted file mode 100644 index be276cb..0000000 --- a/Server 0.321/mytcpserver.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "mytcpserver.h" -#include -#include -#include -#include "func2serv.h" - -MyTcpServer::~MyTcpServer() -{ - mTcpServer->close(); - server_status = 0; - qDeleteAll(mSocketDescriptors); // Удаляем все сокеты -} - -MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) -{ - mTcpServer = new QTcpServer(this); - - connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); - - if (!mTcpServer->listen(QHostAddress::Any, 33333)) { - qDebug() << "server is not started"; - } else { - server_status = 1; - qDebug() << "server is started"; - } -} - -void MyTcpServer::slotNewConnection() -{ - if (server_status == 1) { - QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); - int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета - - if (socketDescriptor == -1) { - qDebug() << "Invalid socket descriptor!"; - clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен - return; - } - - mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере - - qDebug() << "New connection, socket descriptor:" << socketDescriptor; - - connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); - connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); - } -} - -void MyTcpServer::slotServerRead() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - QString res = ""; - while (clientSocket->bytesAvailable() > 0) { - QByteArray array = clientSocket->readAll(); - qDebug() << array << "\n"; - if (array == "\\x01\r\n") { - clientSocket->write(res.toUtf8()); - res = ""; - } else { - res.append(array); - } - } - clientSocket->write(parsing(res, clientSocket->socketDescriptor())); -} - -void MyTcpServer::slotClientDisconnected() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - // Получаем дескриптор сокета из контейнера - int socketDescriptor = -1; - for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { - if (it.value() == clientSocket) { - socketDescriptor = it.key(); - break; - } - } - - if (socketDescriptor != -1) { - mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера - qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; - } else { - qDebug() << "Client disconnected, but socket descriptor not found!"; - } - - clientSocket->deleteLater(); // Удаляем сокет -} diff --git a/Server 0.321/mytcpserver.h b/Server 0.321/mytcpserver.h deleted file mode 100644 index fe179a1..0000000 --- a/Server 0.321/mytcpserver.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef MYTCPSERVER_H -#define MYTCPSERVER_H -#include -#include -#include -#include -#include -#include -#include - -class MyTcpServer : public QObject -{ - Q_OBJECT -public: - explicit MyTcpServer(QObject *parent = nullptr); - ~MyTcpServer(); -public slots: - void slotNewConnection(); - void slotClientDisconnected(); - void slotServerRead(); -private: - QTcpServer * mTcpServer; - QTcpSocket * mTcpSocket; - int server_status; - QMap mSocketDescriptors; // Хранение дескрипторов сокетов -}; -#endif // MYTCPSERVER_H From a1707ebd02c5c02bfd22658173c7df8026f0f56b Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 17:52:24 +0300 Subject: [PATCH 38/58] Delete Server 0.332 directory --- Server 0.332/databasesingleton.cpp | 203 ------------------------ Server 0.332/databasesingleton.h | 62 -------- Server 0.332/echoServer.pro | 34 ---- Server 0.332/func2serv.cpp | 241 ----------------------------- Server 0.332/func2serv.h | 26 ---- Server 0.332/main.cpp | 16 -- Server 0.332/mytcpserver.cpp | 94 ----------- Server 0.332/mytcpserver.h | 27 ---- 8 files changed, 703 deletions(-) delete mode 100644 Server 0.332/databasesingleton.cpp delete mode 100644 Server 0.332/databasesingleton.h delete mode 100644 Server 0.332/echoServer.pro delete mode 100644 Server 0.332/func2serv.cpp delete mode 100644 Server 0.332/func2serv.h delete mode 100644 Server 0.332/main.cpp delete mode 100644 Server 0.332/mytcpserver.cpp delete mode 100644 Server 0.332/mytcpserver.h diff --git a/Server 0.332/databasesingleton.cpp b/Server 0.332/databasesingleton.cpp deleted file mode 100644 index 9536fb3..0000000 --- a/Server 0.332/databasesingleton.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include "databasesingleton.h" - -DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; -SingletonDestroyer DataBaseSingleton::destroyer; - -DataBaseSingleton::DataBaseSingleton() { - db = QSqlDatabase::addDatabase("QSQLITE"); -} - -DataBaseSingleton* DataBaseSingleton::getInstance() { - if (!p_instance) { - p_instance = new DataBaseSingleton(); - destroyer.initialize(p_instance); - } - return p_instance; -} - -bool DataBaseSingleton::initialize(const QString& databaseName) { - db.setDatabaseName(databaseName); - if (!db.open()) { - qDebug() << "Ошибка подключения:" << db.lastError().text(); - return false; - } - - // Создание таблицы users - QSqlQuery query(db); - bool success = query.exec( - "CREATE TABLE IF NOT EXISTS users (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "name VARCHAR(20) NOT NULL, " - "email VARCHAR(50) NOT NULL , " - "pass VARCHAR(20) NOT NULL, " - "is_admin BOOLEAN DEFAULT FALSE)" - ); - - success &= query.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email)"); - - // Создание таблицы products - success &= query.exec( - "CREATE TABLE IF NOT EXISTS products (" - "id INTEGER PRIMARY KEY AUTOINCREMENT, " - "id_user INTEGER NOT NULL, " - "name VARCHAR(50) NOT NULL, " - "proteins INTEGER NOT NULL, " - "fatness INTEGER NOT NULL, " - "carbs INTEGER NOT NULL, " - "weight INTEGER NOT NULL, " - "cost INTEGER NOT NULL, " - "type INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы favorites - success &= query.exec( - "CREATE TABLE IF NOT EXISTS favorites (" - "id_user INTEGER NOT NULL, " - "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки - "calories INTEGER NOT NULL, " - "all_cost INTEGER NOT NULL, " - "all_weight INTEGER NOT NULL, " - "FOREIGN KEY(id_user) REFERENCES users(id))" - ); - - // Создание таблицы statistics - success &= query.exec( - "CREATE TABLE IF NOT EXISTS statistics (" - "count_registrations INTEGER DEFAULT 0, " - "count_visits INTEGER DEFAULT 0, " - "count_generations INTEGER DEFAULT 0)" - ); - - // Инициализация статистики, если таблица пуста - query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); - - return success; -} - -QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { - QSqlQuery query(db); - query.prepare(queryStr); - for (auto it = params.begin(); it != params.end(); ++it) { - query.bindValue(it.key(), it.value()); - } - if (!query.exec()) { - qDebug() << "Ошибка запроса:" << query.lastError().text(); - qDebug() << "Текст запроса:" << queryStr; - } - return query; -} - -// Методы для работы с таблицей users -bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { - QSqlQuery query = executeQuery( - "SELECT * FROM users WHERE name = :name AND pass = :pass", - {{":name", login}, {":pass", password}} - ); - return query.next(); -} - -bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { - QSqlQuery query = executeQuery( - "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", - {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} - ); - - if (query.lastError().isValid()) { - qDebug() << "Ошибка SQL:" << query.lastError().text(); - return false; - } - return true; -} - -// Методы для работы с таблицей products -bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { - return executeQuery( - "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " - "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", - {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, - {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} - ).exec(); -} - -QVector DataBaseSingleton::getProductsByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM products WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector products; - while (query.next()) { - QVariantMap product; - product["id"] = query.value("id").toInt(); - product["name"] = query.value("name").toString(); - product["proteins"] = query.value("proteins").toInt(); - product["fatness"] = query.value("fatness").toInt(); - product["carbs"] = query.value("carbs").toInt(); - product["weight"] = query.value("weight").toInt(); - product["cost"] = query.value("cost").toInt(); - product["type"] = query.value("type").toInt(); - products.append(product); - } - return products; -} - -// Методы для работы с таблицей favorites -bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { - // Преобразуем QVector в QVector - QVector productIdsStr; - for (int id : productIds) { - productIdsStr.append(QString::number(id)); // Преобразуем int в QString - } - - // Преобразуем QVector в QStringList и объединяем в строку через запятую - QString productsStr = QStringList::fromVector(productIdsStr).join(","); - - // Выполняем SQL-запрос - return executeQuery( - "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " - "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", - {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, - {":all_cost", allCost}, {":all_weight", allWeight}} - ).exec(); -} - -QVector DataBaseSingleton::getFavoritesByUser(int userId) { - QSqlQuery query = executeQuery( - "SELECT * FROM favorites WHERE id_user = :id_user", - {{":id_user", userId}} - ); - QVector favorites; - while (query.next()) { - QVariantMap favorite; - favorite["products"] = query.value("products").toString(); - favorite["calories"] = query.value("calories").toInt(); - favorite["all_cost"] = query.value("all_cost").toInt(); - favorite["all_weight"] = query.value("all_weight").toInt(); - favorites.append(favorite); - } - return favorites; -} - -// Методы для работы с таблицей statistics -bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { - return executeQuery( - "UPDATE statistics SET count_registrations = :registrations, " - "count_visits = :visits, count_generations = :generations", - {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} - ).exec(); -} - -QVariantMap DataBaseSingleton::getStatistics() { - QSqlQuery query = executeQuery("SELECT * FROM statistics"); - QVariantMap stats; - if (query.next()) { - stats["registrations"] = query.value("count_registrations").toInt(); - stats["visits"] = query.value("count_visits").toInt(); - stats["generations"] = query.value("count_generations").toInt(); - } - return stats; -} - -// Реализация разрушителя -SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } -void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/Server 0.332/databasesingleton.h b/Server 0.332/databasesingleton.h deleted file mode 100644 index db7e7e3..0000000 --- a/Server 0.332/databasesingleton.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef DATABASESINGLETON_H -#define DATABASESINGLETON_H - -#include -#include -#include -#include -#include -#include - -class DataBaseSingleton; - -// Класс-разрушитель для корректного удаления Singleton -class SingletonDestroyer { -private: - DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton -public: - ~SingletonDestroyer(); // Деструктор для удаления Singleton - void initialize(DataBaseSingleton* p); // Инициализация указателя -}; - -// Основной класс для работы с базой данных -class DataBaseSingleton { -private: - static DataBaseSingleton* p_instance; // Единственный экземпляр класса - static SingletonDestroyer destroyer; // Объект-разрушитель - QSqlDatabase db; // Объект базы данных - - DataBaseSingleton(); // Приватный конструктор - DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования - DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; - ~DataBaseSingleton() = default; // Приватный деструктор - friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору - -public: - // Получение экземпляра Singleton - static DataBaseSingleton* getInstance(); - - // Инициализация БД: имя файла, создание таблиц - bool initialize(const QString& databaseName); - - // Выполнение параметризованного SQL-запроса - QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); - - // Методы для работы с таблицей users - bool checkUserCredentials(const QString& login, const QString& password); - bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); - - // Методы для работы с таблицей products - bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); - QVector getProductsByUser(int userId); - - // Методы для работы с таблицей favorites - bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); - QVector getFavoritesByUser(int userId); - - // Методы для работы с таблицей statistics - bool updateStatistics(int registrations, int visits, int generations); - QVariantMap getStatistics(); -}; - -#endif // DATABASESINGLETON_H diff --git a/Server 0.332/echoServer.pro b/Server 0.332/echoServer.pro deleted file mode 100644 index fa16d4f..0000000 --- a/Server 0.332/echoServer.pro +++ /dev/null @@ -1,34 +0,0 @@ -QT -= gui - -QT += network #Для работы с сетью -QT += sql - -CONFIG += c++11 console -CONFIG -= app_bundle - -# The following define makes your compiler emit warnings if you use -# any Qt feature that has been marked deprecated (the exact warnings -# depend on your compiler). Please consult the documentation of the -# deprecated API in order to know how to port your code away from it. -DEFINES += QT_DEPRECATED_WARNINGS - -# You can also make your code fail to compile if it uses deprecated APIs. -# In order to do so, uncomment the following line. -# You can also select to disable deprecated APIs only up to a certain version of Qt. -#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 - -SOURCES += \ - databasesingleton.cpp \ - func2serv.cpp \ - main.cpp \ - mytcpserver.cpp - -# Default rules for deployment. -qnx: target.path = /tmp/$${TARGET}/bin -else: unix:!android: target.path = /opt/$${TARGET}/bin -!isEmpty(target.path): INSTALLS += target - -HEADERS += \ - databasesingleton.h \ - func2serv.h \ - mytcpserver.h diff --git a/Server 0.332/func2serv.cpp b/Server 0.332/func2serv.cpp deleted file mode 100644 index 25f8894..0000000 --- a/Server 0.332/func2serv.cpp +++ /dev/null @@ -1,241 +0,0 @@ -#include "func2serv.h" -#include -#include -#include -#include -// Заглушка для базы данных - - -QMap> mockDatabase = { - {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, - {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, - }; - -using namespace std; -QByteArray parsing(QString input, int socdes) -{ - - QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user - - if (container.isEmpty()) { - return "server error: empty command\\n"; - } - - - qDebug() << socdes << " user command: " << container[0]; - QString var = container[0]; - if (var == "check_task") - { - return check_task(); - } - else if (var =="auth") - { - return auth(container); - } - else if (var == "user" && container[2] == "get_products") { - return get_products(container); - } - else if (var =="reg") - { - return reg(container); - } - else if (var == "get_stat") - { - return(get_stat()); - } - else if (var == "admin" && container[1] == "dynamic_stat") { - return get_dynamic_stat(); - } - else if (var == "menu_export") - { - return menu_export(); - } - else if (var == "user" && container[2] == "add_favorite_ration") { - return add_favorite_ration(container); - } - else if (var == "admin" && container[1] == "get_all_users") { - return get_all_users(); - } - else if (var == "admin" && container[1] == "stable_stat") { - return get_stable_stat(); - } - else - { - return "server error: unknow command\r\n"; - } -} - - -// дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ -QByteArray auth(QStringList log) { - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - bool authSuccess = db->checkUserCredentials(log[1], log[2]); - - if (authSuccess) { - return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; - } - return "auth_failed//Invalid credentials\r\n"; -} - - -QByteArray reg(QStringList params) { - // 1️⃣ Проверка количества параметров - if (params.size() != 4) { - return "reg_failed//Недостаточно параметров для регистрации\r\n"; - } - - // 2️⃣ Извлечение данных из запроса - QString name = params[1]; // Имя пользователя - QString email = params[2]; // Email (должен быть уникальным) - QString password = params[3]; // Пароль - - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - - // 3️⃣ Проверка, не занят ли email - QSqlQuery checkQuery = db->executeQuery( - "SELECT id FROM users WHERE email = :email", - {{":email", email}} - ); - - // Если запрос не выполнился (ошибка БД) - if (!checkQuery.exec()) { - return "reg_failed//Ошибка при проверке email\r\n"; - } - - // Если email уже существует (найдена запись) - if (checkQuery.next()) { - return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n"; - } - - // 4️⃣ Попытка добавить пользователя - bool success = db->addUser(name, email, password, false); - - if (success) { - // 5️⃣ Обновление статистики (увеличиваем счетчик регистраций) - QVariantMap stats = db->getStatistics(); - db->updateStatistics( - stats["registrations"].toInt() + 1, // +1 новая регистрация - stats["visits"].toInt(), // Визиты без изменений - stats["generations"].toInt() // Генерации без изменений - ); - return "reg_success//Регистрация прошла успешно\r\n"; - } else { - // Если INSERT не сработал (например, из-за UNIQUE INDEX) - return "reg_failed//Ошибка при регистрации (возможно, email уже занят)\r\n"; - } -} - -QByteArray get_stat(/*QStringList*/){ - return "Your Statistic: null\r\n"; -} - -QByteArray check_task(/*QStringList*/){ - return "Task was succesful completed\r\n"; -} -QByteArray menu_export(/*QStringList*/){ - return "Меню успешно экспортировано!\r\n"; -} - -void fetch_products_from_db(const QString& userId, QStringList& products) { - - if (mockDatabase.contains(userId)) { - products = mockDatabase[userId]; - } -} -QByteArray get_products(QStringList params) { - QString userId = params[1]; // ID пользователя - QStringList products; // Список продуктов - - - fetch_products_from_db(userId, products); - - - QString response; - for (const QString& product : std::as_const(products)) { - response += "prod//" + product + "\r\n"; - } - - return response.toUtf8(); -} -QByteArray get_all_users() { - QStringList users; - - // fetch_users_from_db(users); - - QString response; - for (const QString& user : users) { - response += user + "\r\n"; - } - - return response.toUtf8(); -} -int get_user_count() { - // Здесь будет SQL-запрос, пока заглушка - return 152; // Примерное значение -} - -int get_product_count() { - // Здесь будет SQL-запрос, пока заглушка - return 732; // Примерное значение -} -QByteArray get_stable_stat() { - - int userCount = 0; - int productCount = 0; - - userCount = get_user_count(); - productCount = get_product_count(); - - // Формируем строку ответа - QString response = "Users: " + QString::number(userCount) + "\r\n" + - "Products: " + QString::number(productCount) + "\r\n"; - - return response.toUtf8(); -} -int get_weekly_logins() { - // Заглушка, пока без БД - return 78; // Примерное значение -} - -int get_monthly_logins() { - // Заглушка, пока без БД - return 312; // Примерное значение -} -QByteArray get_dynamic_stat() { - int weeklyLogins = 0; - int monthlyLogins = 0; - - // Получаем данные из БД (пока заглушки) - weeklyLogins = get_weekly_logins(); - monthlyLogins = get_monthly_logins(); - - // Формируем строку ответа - QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" + - "Logins per month: " + QString::number(monthlyLogins) + "\r\n"; - - return response.toUtf8(); -} -QByteArray add_favorite_ration(const QStringList& container) { - QString userId = container[1]; // ID пользователя - QString rationId = container[2]; // ID рациона - - bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки - - if (success) { - return "Ration successfully added to favorites\r\n"; - } else { - return "Error: failed to add ration to favorites\r\n"; - } -} -bool add_ration_to_favorites(const QString& userId, const QString& rationId) { - qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; - return true; // Заглушка, потом заменить на SQL-запрос -} - - - - - - - - diff --git a/Server 0.332/func2serv.h b/Server 0.332/func2serv.h deleted file mode 100644 index 76cb0fb..0000000 --- a/Server 0.332/func2serv.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef FUNC2SERV_H -#define FUNC2SERV_H - -#include - -QByteArray parsing(QString input, int socdes); - -QByteArray auth(QStringList ); -QByteArray reg(QStringList); -QByteArray get_stat(/*QStringList*/); -QByteArray check_task(/*QStringList*/); -QByteArray menu_export(/*QStringList*/); -QByteArray get_products(QStringList params); -QByteArray get_all_users(); -QByteArray get_stable_stat(); -int get_user_count(); -int get_product_count(); -QByteArray get_dynamic_stat(); -int get_weekly_logins(); -int get_monthly_logins(); -QByteArray add_favorite_ration(const QStringList& container); -bool add_ration_to_favorites(const QString& userId, const QString& rationId); - -#include - -#endif // FUNC2SERV_H diff --git a/Server 0.332/main.cpp b/Server 0.332/main.cpp deleted file mode 100644 index c1efc71..0000000 --- a/Server 0.332/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "mytcpserver.h" -#include "databasesingleton.h" - -int main(int argc, char *argv[]) { - QCoreApplication a(argc, argv); - - // Инициализация БД - DataBaseSingleton* db = DataBaseSingleton::getInstance(); - if (!db->initialize("Easyweek.db")) { - qFatal("Failed to initialize database"); - } - - MyTcpServer myserv; - return a.exec(); -} diff --git a/Server 0.332/mytcpserver.cpp b/Server 0.332/mytcpserver.cpp deleted file mode 100644 index be276cb..0000000 --- a/Server 0.332/mytcpserver.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include "mytcpserver.h" -#include -#include -#include -#include "func2serv.h" - -MyTcpServer::~MyTcpServer() -{ - mTcpServer->close(); - server_status = 0; - qDeleteAll(mSocketDescriptors); // Удаляем все сокеты -} - -MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent) -{ - mTcpServer = new QTcpServer(this); - - connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection); - - if (!mTcpServer->listen(QHostAddress::Any, 33333)) { - qDebug() << "server is not started"; - } else { - server_status = 1; - qDebug() << "server is started"; - } -} - -void MyTcpServer::slotNewConnection() -{ - if (server_status == 1) { - QTcpSocket *clientSocket = mTcpServer->nextPendingConnection(); - int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета - - if (socketDescriptor == -1) { - qDebug() << "Invalid socket descriptor!"; - clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен - return; - } - - mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере - - qDebug() << "New connection, socket descriptor:" << socketDescriptor; - - connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead); - connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected); - } -} - -void MyTcpServer::slotServerRead() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - QString res = ""; - while (clientSocket->bytesAvailable() > 0) { - QByteArray array = clientSocket->readAll(); - qDebug() << array << "\n"; - if (array == "\\x01\r\n") { - clientSocket->write(res.toUtf8()); - res = ""; - } else { - res.append(array); - } - } - clientSocket->write(parsing(res, clientSocket->socketDescriptor())); -} - -void MyTcpServer::slotClientDisconnected() -{ - QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } - - // Получаем дескриптор сокета из контейнера - int socketDescriptor = -1; - for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) { - if (it.value() == clientSocket) { - socketDescriptor = it.key(); - break; - } - } - - if (socketDescriptor != -1) { - mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера - qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor; - } else { - qDebug() << "Client disconnected, but socket descriptor not found!"; - } - - clientSocket->deleteLater(); // Удаляем сокет -} diff --git a/Server 0.332/mytcpserver.h b/Server 0.332/mytcpserver.h deleted file mode 100644 index fe179a1..0000000 --- a/Server 0.332/mytcpserver.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef MYTCPSERVER_H -#define MYTCPSERVER_H -#include -#include -#include -#include -#include -#include -#include - -class MyTcpServer : public QObject -{ - Q_OBJECT -public: - explicit MyTcpServer(QObject *parent = nullptr); - ~MyTcpServer(); -public slots: - void slotNewConnection(); - void slotClientDisconnected(); - void slotServerRead(); -private: - QTcpServer * mTcpServer; - QTcpSocket * mTcpSocket; - int server_status; - QMap mSocketDescriptors; // Хранение дескрипторов сокетов -}; -#endif // MYTCPSERVER_H From 84f966bb3fe4578a52476b252fac40c2b84fb38a Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 17:53:20 +0300 Subject: [PATCH 39/58] server 0.321 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -Добавление базы данных и функционала для работы с ней --- server/databasesingleton.cpp | 198 +++++++++++++++++++++++++++++++++++ server/databasesingleton.h | 62 +++++++++++ server/echoServer.pro | 4 +- server/func2serv.cpp | 54 ++++++++-- server/func2serv.h | 13 +-- server/main.cpp | 11 +- 6 files changed, 319 insertions(+), 23 deletions(-) create mode 100644 server/databasesingleton.cpp create mode 100644 server/databasesingleton.h diff --git a/server/databasesingleton.cpp b/server/databasesingleton.cpp new file mode 100644 index 0000000..28e84ed --- /dev/null +++ b/server/databasesingleton.cpp @@ -0,0 +1,198 @@ +#include "databasesingleton.h" + +DataBaseSingleton* DataBaseSingleton::p_instance = nullptr; +SingletonDestroyer DataBaseSingleton::destroyer; + +DataBaseSingleton::DataBaseSingleton() { + db = QSqlDatabase::addDatabase("QSQLITE"); +} + +DataBaseSingleton* DataBaseSingleton::getInstance() { + if (!p_instance) { + p_instance = new DataBaseSingleton(); + destroyer.initialize(p_instance); + } + return p_instance; +} + +bool DataBaseSingleton::initialize(const QString& databaseName) { + db.setDatabaseName(databaseName); + if (!db.open()) { + qDebug() << "Ошибка подключения:" << db.lastError().text(); + return false; + } + + // Создание таблицы users + QSqlQuery query(db); + bool success = query.exec( + "CREATE TABLE IF NOT EXISTS users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name VARCHAR(20) NOT NULL, " + "email VARCHAR(50) NOT NULL , " + "pass VARCHAR(20) NOT NULL, " + "is_admin BOOLEAN DEFAULT FALSE)" + ); + + // Создание таблицы products + success &= query.exec( + "CREATE TABLE IF NOT EXISTS products (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "id_user INTEGER NOT NULL, " + "name VARCHAR(50) NOT NULL, " + "proteins INTEGER NOT NULL, " + "fatness INTEGER NOT NULL, " + "carbs INTEGER NOT NULL, " + "weight INTEGER NOT NULL, " + "cost INTEGER NOT NULL, " + "type INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы favorites + success &= query.exec( + "CREATE TABLE IF NOT EXISTS favorites (" + "id_user INTEGER NOT NULL, " + "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки + "calories INTEGER NOT NULL, " + "all_cost INTEGER NOT NULL, " + "all_weight INTEGER NOT NULL, " + "FOREIGN KEY(id_user) REFERENCES users(id))" + ); + + // Создание таблицы statistics + success &= query.exec( + "CREATE TABLE IF NOT EXISTS statistics (" + "count_registrations INTEGER DEFAULT 0, " + "count_visits INTEGER DEFAULT 0, " + "count_generations INTEGER DEFAULT 0)" + ); + + // Инициализация статистики, если таблица пуста + query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); + + return success; +} + +QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVariantMap& params) { + QSqlQuery query(db); + query.prepare(queryStr); + for (auto it = params.begin(); it != params.end(); ++it) { + query.bindValue(it.key(), it.value()); + } + if (!query.exec()) { + qDebug() << "Ошибка запроса:" << query.lastError().text(); + qDebug() << "Текст запроса:" << queryStr; + } + return query; +} + +// Методы для работы с таблицей users +bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { + QSqlQuery query = executeQuery( + "SELECT * FROM users WHERE name = :name AND pass = :pass", + {{":name", login}, {":pass", password}} + ); + return query.next(); +} + +bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { + QSqlQuery query = executeQuery( + "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", + {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} + ); + bool res = query.exec(); + qDebug() << "Ошибка запроса:" << query.lastError().text(); + return res; +} + +// Методы для работы с таблицей products +bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { + return executeQuery( + "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " + "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", + {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, + {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} + ).exec(); +} + +QVector DataBaseSingleton::getProductsByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM products WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector products; + while (query.next()) { + QVariantMap product; + product["id"] = query.value("id").toInt(); + product["name"] = query.value("name").toString(); + product["proteins"] = query.value("proteins").toInt(); + product["fatness"] = query.value("fatness").toInt(); + product["carbs"] = query.value("carbs").toInt(); + product["weight"] = query.value("weight").toInt(); + product["cost"] = query.value("cost").toInt(); + product["type"] = query.value("type").toInt(); + products.append(product); + } + return products; +} + +// Методы для работы с таблицей favorites +bool DataBaseSingleton::addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight) { + // Преобразуем QVector в QVector + QVector productIdsStr; + for (int id : productIds) { + productIdsStr.append(QString::number(id)); // Преобразуем int в QString + } + + // Преобразуем QVector в QStringList и объединяем в строку через запятую + QString productsStr = QStringList::fromVector(productIdsStr).join(","); + + // Выполняем SQL-запрос + return executeQuery( + "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) " + "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)", + {{":id_user", userId}, {":products", productsStr}, {":calories", calories}, + {":all_cost", allCost}, {":all_weight", allWeight}} + ).exec(); +} + +QVector DataBaseSingleton::getFavoritesByUser(int userId) { + QSqlQuery query = executeQuery( + "SELECT * FROM favorites WHERE id_user = :id_user", + {{":id_user", userId}} + ); + QVector favorites; + while (query.next()) { + QVariantMap favorite; + favorite["products"] = query.value("products").toString(); + favorite["calories"] = query.value("calories").toInt(); + favorite["all_cost"] = query.value("all_cost").toInt(); + favorite["all_weight"] = query.value("all_weight").toInt(); + favorites.append(favorite); + } + return favorites; +} + +// Методы для работы с таблицей statistics +bool DataBaseSingleton::updateStatistics(int registrations, int visits, int generations) { + return executeQuery( + "UPDATE statistics SET count_registrations = :registrations, " + "count_visits = :visits, count_generations = :generations", + {{":registrations", registrations}, {":visits", visits}, {":generations", generations}} + ).exec(); +} + +QVariantMap DataBaseSingleton::getStatistics() { + QSqlQuery query = executeQuery("SELECT * FROM statistics"); + QVariantMap stats; + if (query.next()) { + stats["registrations"] = query.value("count_registrations").toInt(); + stats["visits"] = query.value("count_visits").toInt(); + stats["generations"] = query.value("count_generations").toInt(); + } + return stats; +} + +// Реализация разрушителя +SingletonDestroyer::~SingletonDestroyer() { delete p_instance; } +void SingletonDestroyer::initialize(DataBaseSingleton* p) { p_instance = p; } diff --git a/server/databasesingleton.h b/server/databasesingleton.h new file mode 100644 index 0000000..db7e7e3 --- /dev/null +++ b/server/databasesingleton.h @@ -0,0 +1,62 @@ +#ifndef DATABASESINGLETON_H +#define DATABASESINGLETON_H + +#include +#include +#include +#include +#include +#include + +class DataBaseSingleton; + +// Класс-разрушитель для корректного удаления Singleton +class SingletonDestroyer { +private: + DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton +public: + ~SingletonDestroyer(); // Деструктор для удаления Singleton + void initialize(DataBaseSingleton* p); // Инициализация указателя +}; + +// Основной класс для работы с базой данных +class DataBaseSingleton { +private: + static DataBaseSingleton* p_instance; // Единственный экземпляр класса + static SingletonDestroyer destroyer; // Объект-разрушитель + QSqlDatabase db; // Объект базы данных + + DataBaseSingleton(); // Приватный конструктор + DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования + DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; + ~DataBaseSingleton() = default; // Приватный деструктор + friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору + +public: + // Получение экземпляра Singleton + static DataBaseSingleton* getInstance(); + + // Инициализация БД: имя файла, создание таблиц + bool initialize(const QString& databaseName); + + // Выполнение параметризованного SQL-запроса + QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); + + // Методы для работы с таблицей users + bool checkUserCredentials(const QString& login, const QString& password); + bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); + + // Методы для работы с таблицей products + bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); + QVector getProductsByUser(int userId); + + // Методы для работы с таблицей favorites + bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); + QVector getFavoritesByUser(int userId); + + // Методы для работы с таблицей statistics + bool updateStatistics(int registrations, int visits, int generations); + QVariantMap getStatistics(); +}; + +#endif // DATABASESINGLETON_H diff --git a/server/echoServer.pro b/server/echoServer.pro index 46b33c2..fa16d4f 100644 --- a/server/echoServer.pro +++ b/server/echoServer.pro @@ -1,7 +1,7 @@ QT -= gui QT += network #Для работы с сетью - +QT += sql CONFIG += c++11 console CONFIG -= app_bundle @@ -18,6 +18,7 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ + databasesingleton.cpp \ func2serv.cpp \ main.cpp \ mytcpserver.cpp @@ -28,5 +29,6 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target HEADERS += \ + databasesingleton.h \ func2serv.h \ mytcpserver.h diff --git a/server/func2serv.cpp b/server/func2serv.cpp index 78eb070..4fa609c 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -2,8 +2,10 @@ #include #include #include - +#include // Заглушка для базы данных + + QMap> mockDatabase = { {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, @@ -14,6 +16,12 @@ QByteArray parsing(QString input, int socdes) { QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user + + if (container.isEmpty()) { + return "server error: empty command\\n"; + } + + qDebug() << socdes << " user command: " << container[0]; QString var = container[0]; if (var == "check_task") @@ -29,7 +37,7 @@ QByteArray parsing(QString input, int socdes) } else if (var =="reg") { - return reg(); + return reg(container); } else if (var == "get_stat") { @@ -59,15 +67,43 @@ QByteArray parsing(QString input, int socdes) // дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ -QByteArray auth( QStringList log ){ - string res = "You succesfull logged in!\r\nWelcom to system: " + log[1].toStdString() + "\r\nYour password: " + log[2].toStdString()+"\r\n"; - QByteArray byteArray(res.c_str(), res.length()); - return byteArray; +QByteArray auth(QStringList log) { + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + bool authSuccess = db->checkUserCredentials(log[1], log[2]); + + if (authSuccess) { + return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; + } + return "auth_failed//Invalid credentials\r\n"; } -// с регистрацией та же тема, успешная - return "true", неуспешная - return "false" -QByteArray reg(/*QStringList*/){ - return "you have been successfully registered\r\n"; +QByteArray reg(QStringList params) { + if (params.size() != 4) { + return "reg_failed//Недостаточно параметров для регистрации\r\n"; + } + + QString name = params[1]; + QString email = params[2]; + QString password = params[3]; + + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + + QSqlQuery checkQuery = db->executeQuery( + "SELECT * FROM users WHERE email = :email", + {{":email", email}} + ); + + if (!checkQuery.exec()) { + return "reg_failed//Ошибка при проверке email\r\n"; + } + + bool success = db->addUser(name, email, password, false); + + if (success) { + return "reg_success//Регистрация прошла успешно\r\n"; + } else { + return "reg_failed//Ошибка при регистрации\r\n"; + } } QByteArray get_stat(/*QStringList*/){ diff --git a/server/func2serv.h b/server/func2serv.h index f529f3e..76cb0fb 100644 --- a/server/func2serv.h +++ b/server/func2serv.h @@ -4,19 +4,9 @@ #include QByteArray parsing(QString input, int socdes); -/** - \brief Шаблонная функция суммирования двух объектов - \tparam T - любой тип, для которого определен оператор суммирования - и оператор присваивания - - \param [in] a Первый объект, который нужно сложить - \param [in] b Второй объект, который нужно сложить - - \return Новый объект типа *T*, равный сумме *a* и *b*. -*/ QByteArray auth(QStringList ); -QByteArray reg(/*QStringList*/); +QByteArray reg(QStringList); QByteArray get_stat(/*QStringList*/); QByteArray check_task(/*QStringList*/); QByteArray menu_export(/*QStringList*/); @@ -30,6 +20,7 @@ int get_weekly_logins(); int get_monthly_logins(); QByteArray add_favorite_ration(const QStringList& container); bool add_ration_to_favorites(const QString& userId, const QString& rationId); + #include #endif // FUNC2SERV_H diff --git a/server/main.cpp b/server/main.cpp index 1b2110a..c1efc71 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -1,9 +1,16 @@ #include #include "mytcpserver.h" +#include "databasesingleton.h" -int main(int argc, char *argv[]) -{ +int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); + + // Инициализация БД + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + if (!db->initialize("Easyweek.db")) { + qFatal("Failed to initialize database"); + } + MyTcpServer myserv; return a.exec(); } From ff69118e3fbadcb73bacbafaa800feb862b19229 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 17:55:44 +0300 Subject: [PATCH 40/58] server 0.332 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -Исправлены ошибки связанные с дублированием записей в таблице Users -Переработана функция reg() -Исправлена проверка уникальности email --- server/databasesingleton.cpp | 17 +++++++++++------ server/func2serv.cpp | 31 +++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/server/databasesingleton.cpp b/server/databasesingleton.cpp index 28e84ed..9536fb3 100644 --- a/server/databasesingleton.cpp +++ b/server/databasesingleton.cpp @@ -33,6 +33,8 @@ bool DataBaseSingleton::initialize(const QString& databaseName) { "is_admin BOOLEAN DEFAULT FALSE)" ); + success &= query.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email)"); + // Создание таблицы products success &= query.exec( "CREATE TABLE IF NOT EXISTS products (" @@ -97,12 +99,15 @@ bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString bool DataBaseSingleton::addUser(const QString& name, const QString& email, const QString& password, bool isAdmin) { QSqlQuery query = executeQuery( - "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", - {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} - ); - bool res = query.exec(); - qDebug() << "Ошибка запроса:" << query.lastError().text(); - return res; + "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)", + {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}} + ); + + if (query.lastError().isValid()) { + qDebug() << "Ошибка SQL:" << query.lastError().text(); + return false; + } + return true; } // Методы для работы с таблицей products diff --git a/server/func2serv.cpp b/server/func2serv.cpp index 4fa609c..25f8894 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -77,32 +77,51 @@ QByteArray auth(QStringList log) { return "auth_failed//Invalid credentials\r\n"; } + QByteArray reg(QStringList params) { + // 1️⃣ Проверка количества параметров if (params.size() != 4) { return "reg_failed//Недостаточно параметров для регистрации\r\n"; } - QString name = params[1]; - QString email = params[2]; - QString password = params[3]; + // 2️⃣ Извлечение данных из запроса + QString name = params[1]; // Имя пользователя + QString email = params[2]; // Email (должен быть уникальным) + QString password = params[3]; // Пароль DataBaseSingleton* db = DataBaseSingleton::getInstance(); + // 3️⃣ Проверка, не занят ли email QSqlQuery checkQuery = db->executeQuery( - "SELECT * FROM users WHERE email = :email", + "SELECT id FROM users WHERE email = :email", {{":email", email}} ); - + + // Если запрос не выполнился (ошибка БД) if (!checkQuery.exec()) { return "reg_failed//Ошибка при проверке email\r\n"; } + // Если email уже существует (найдена запись) + if (checkQuery.next()) { + return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n"; + } + + // 4️⃣ Попытка добавить пользователя bool success = db->addUser(name, email, password, false); if (success) { + // 5️⃣ Обновление статистики (увеличиваем счетчик регистраций) + QVariantMap stats = db->getStatistics(); + db->updateStatistics( + stats["registrations"].toInt() + 1, // +1 новая регистрация + stats["visits"].toInt(), // Визиты без изменений + stats["generations"].toInt() // Генерации без изменений + ); return "reg_success//Регистрация прошла успешно\r\n"; } else { - return "reg_failed//Ошибка при регистрации\r\n"; + // Если INSERT не сработал (например, из-за UNIQUE INDEX) + return "reg_failed//Ошибка при регистрации (возможно, email уже занят)\r\n"; } } From f4301cfb43fbd3c8fd5034930f9a3391dfdb8d82 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 26 Apr 2025 17:58:15 +0300 Subject: [PATCH 41/58] server 0.342 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Изменёны возвратные значения для auth --- server/func2serv.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/func2serv.cpp b/server/func2serv.cpp index 25f8894..397a853 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -72,9 +72,9 @@ QByteArray auth(QStringList log) { bool authSuccess = db->checkUserCredentials(log[1], log[2]); if (authSuccess) { - return "auth_success//Welcome " + log[1].toUtf8() + "\r\n"; + return "true"; } - return "auth_failed//Invalid credentials\r\n"; + return "false"; } From 1686c5196263bb3c9f56c861dee9d07c046939af Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 3 May 2025 16:54:25 +0300 Subject: [PATCH 42/58] server 0.352 --- server/func2serv.cpp | 58 +++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 14 deletions(-) diff --git a/server/func2serv.cpp b/server/func2serv.cpp index 397a853..4ae789b 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -7,8 +7,8 @@ QMap> mockDatabase = { - {"1", {"Product1//10//5//20//1.5//...", "Product2//15//8//30//2.0//..."}}, - {"2", {"Product3//5//2//10//0.5//...", "Product4//8//3//12//0.8//..."}}, + {"1", {"orange_11_45_12_24", "banana_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24"}}, + {"2", {"apple_11_45_12_24", "grape_11_45_12_24"}}, }; using namespace std; @@ -68,13 +68,45 @@ QByteArray parsing(QString input, int socdes) // дарова Руслан, когда будешь писать тут функцию эту, при успешной авторизации просто пропиши return "true", при неуспешной return "false", на клиенте я так принимаю ответ QByteArray auth(QStringList log) { + // Проверяем количество параметров + if (log.size() < 3) { + return "auth_failed//Недостаточно параметров для авторизации\r\n"; + } + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + + bool authSuccess = db->checkUserCredentials(log[1], log[2]); - if (authSuccess) { - return "true"; + if (!authSuccess) { + return "auth_failed//Неверный логин или пароль\r\n"; + } + + + + QSqlQuery query = db->executeQuery( + "SELECT id, name, email, pass FROM users WHERE (email = :login OR name = :login) AND pass = :pass", + { + {":login", log[1]}, // логин + {":pass", log[2]} // пароль + } + ); + + + if (!query.next()) { + return "auth_failed//Ошибка при получении данных пользователя\r\n"; } - return "false"; + + QString userId = query.value("id").toString(); + QString userLogin = query.value("name").toString(); + QString userEmail = query.value("email").toString(); + + QString response = QString("auth_success//%1//%2//%3\r\n") + .arg(userId) + .arg(userLogin) + .arg(userEmail); + + return response.toUtf8(); } @@ -107,6 +139,7 @@ QByteArray reg(QStringList params) { return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n"; } + // 4️⃣ Попытка добавить пользователя bool success = db->addUser(name, email, password, false); @@ -118,6 +151,8 @@ QByteArray reg(QStringList params) { stats["visits"].toInt(), // Визиты без изменений stats["generations"].toInt() // Генерации без изменений ); + + return "reg_success//Регистрация прошла успешно\r\n"; } else { // Если INSERT не сработал (например, из-за UNIQUE INDEX) @@ -144,6 +179,9 @@ void fetch_products_from_db(const QString& userId, QStringList& products) { } QByteArray get_products(QStringList params) { QString userId = params[1]; // ID пользователя + + qDebug() << "ID USER: " << userId; + QStringList products; // Список продуктов @@ -152,7 +190,7 @@ QByteArray get_products(QStringList params) { QString response; for (const QString& product : std::as_const(products)) { - response += "prod//" + product + "\r\n"; + response += product + "\r\n"; } return response.toUtf8(); @@ -231,11 +269,3 @@ bool add_ration_to_favorites(const QString& userId, const QString& rationId) { qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; return true; // Заглушка, потом заменить на SQL-запрос } - - - - - - - - From 011815f0988c6bb2503155f78ca023438d713da3 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sat, 3 May 2025 17:14:49 +0300 Subject: [PATCH 43/58] Server 0.4 --- server/databasesingleton.cpp | 29 +++++++++++------- server/func2serv.cpp | 57 ++++++++++++++++++++++++++++++------ server/func2serv.h | 1 + server/main.cpp | 7 +++++ server/mytcpserver.cpp | 25 +++++----------- 5 files changed, 83 insertions(+), 36 deletions(-) diff --git a/server/databasesingleton.cpp b/server/databasesingleton.cpp index 9536fb3..f13a758 100644 --- a/server/databasesingleton.cpp +++ b/server/databasesingleton.cpp @@ -71,7 +71,7 @@ bool DataBaseSingleton::initialize(const QString& databaseName) { // Инициализация статистики, если таблица пуста query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)"); - + query.exec("INSERT OR IGNORE INTO users(name, email, pass, is_admin) VALUES ('NewDev','new@devs.su','admin',true)"); return success; } @@ -89,10 +89,10 @@ QSqlQuery DataBaseSingleton::executeQuery(const QString& queryStr, const QVarian } // Методы для работы с таблицей users -bool DataBaseSingleton::checkUserCredentials(const QString& login, const QString& password) { +bool DataBaseSingleton::checkUserCredentials(const QString& email, const QString& password) { QSqlQuery query = executeQuery( - "SELECT * FROM users WHERE name = :name AND pass = :pass", - {{":name", login}, {":pass", password}} + "SELECT * FROM users WHERE email = :email AND pass = :pass", + {{":email", email}, {":pass", password}} ); return query.next(); } @@ -112,12 +112,21 @@ bool DataBaseSingleton::addUser(const QString& name, const QString& email, const // Методы для работы с таблицей products bool DataBaseSingleton::addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type) { - return executeQuery( - "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " - "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", - {{":id_user", userId}, {":name", name}, {":proteins", proteins}, {":fatness", fatness}, - {":carbs", carbs}, {":weight", weight}, {":cost", cost}, {":type", type}} - ).exec(); + QSqlQuery query = executeQuery( + "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) " + "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)", + { + {":id_user", userId}, + {":name", name}, + {":proteins", proteins}, + {":fatness", fatness}, + {":carbs", carbs}, + {":weight", weight}, + {":cost", cost}, + {":type", type} + } + ); + return !query.lastError().isValid(); // Возвращаем true, если ошибок нет } QVector DataBaseSingleton::getProductsByUser(int userId) { diff --git a/server/func2serv.cpp b/server/func2serv.cpp index 4ae789b..240b0b8 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -2,13 +2,13 @@ #include #include #include +#include #include // Заглушка для базы данных - QMap> mockDatabase = { {"1", {"orange_11_45_12_24", "banana_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24"}}, - {"2", {"apple_11_45_12_24", "grape_11_45_12_24"}}, + {"2", {"apple_11_45_12_24", "grape_11_45_12_24"}} }; using namespace std; @@ -32,6 +32,10 @@ QByteArray parsing(QString input, int socdes) { return auth(container); } + else if (var == "add_product") + { + return add_product(container); + } else if (var == "user" && container[2] == "get_products") { return get_products(container); } @@ -74,8 +78,6 @@ QByteArray auth(QStringList log) { } DataBaseSingleton* db = DataBaseSingleton::getInstance(); - - bool authSuccess = db->checkUserCredentials(log[1], log[2]); if (!authSuccess) { @@ -139,7 +141,6 @@ QByteArray reg(QStringList params) { return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n"; } - // 4️⃣ Попытка добавить пользователя bool success = db->addUser(name, email, password, false); @@ -151,8 +152,6 @@ QByteArray reg(QStringList params) { stats["visits"].toInt(), // Визиты без изменений stats["generations"].toInt() // Генерации без изменений ); - - return "reg_success//Регистрация прошла успешно\r\n"; } else { // Если INSERT не сработал (например, из-за UNIQUE INDEX) @@ -160,6 +159,40 @@ QByteArray reg(QStringList params) { } } +QByteArray add_product(QStringList params) { + if (params.size() != 9) { + return "add_product//failed//Неверные аргументы\r\n"; + } + + DataBaseSingleton *db = DataBaseSingleton::getInstance(); + int userId = params[1].toInt(); + QString name = params[2]; +/* + // Проверяем, существует ли уже такой продукт + QSqlQuery checkQuery = db->executeQuery( + "SELECT id FROM products WHERE id_user = :id_user AND name = :name", + {{":id_user", userId}, {":name", name}} + ); + + if (checkQuery.next()) { + return "add_product//failed//Продукт уже существует\r\n"; + } +*/ + // Добавляем продукт + bool success = db->addProduct( + userId, + name, + params[3].toInt(), // proteins + params[4].toInt(), // fatness + params[5].toInt(), // carbs + params[6].toInt(), // weight + params[7].toInt(), // cost + params[8].toInt() // type + ); + + return success ? "add_product//success\r\n" : "add_product//failed//Ошибка БД\r\n"; +} + QByteArray get_stat(/*QStringList*/){ return "Your Statistic: null\r\n"; } @@ -179,9 +212,7 @@ void fetch_products_from_db(const QString& userId, QStringList& products) { } QByteArray get_products(QStringList params) { QString userId = params[1]; // ID пользователя - qDebug() << "ID USER: " << userId; - QStringList products; // Список продуктов @@ -269,3 +300,11 @@ bool add_ration_to_favorites(const QString& userId, const QString& rationId) { qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId; return true; // Заглушка, потом заменить на SQL-запрос } + + + + + + + + diff --git a/server/func2serv.h b/server/func2serv.h index 76cb0fb..143ceed 100644 --- a/server/func2serv.h +++ b/server/func2serv.h @@ -7,6 +7,7 @@ QByteArray parsing(QString input, int socdes); QByteArray auth(QStringList ); QByteArray reg(QStringList); +QByteArray add_product(QStringList); QByteArray get_stat(/*QStringList*/); QByteArray check_task(/*QStringList*/); QByteArray menu_export(/*QStringList*/); diff --git a/server/main.cpp b/server/main.cpp index c1efc71..51b4782 100644 --- a/server/main.cpp +++ b/server/main.cpp @@ -1,7 +1,13 @@ #include +#include +#include +#include +#include #include "mytcpserver.h" #include "databasesingleton.h" + + int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); @@ -11,6 +17,7 @@ int main(int argc, char *argv[]) { qFatal("Failed to initialize database"); } + MyTcpServer myserv; return a.exec(); } diff --git a/server/mytcpserver.cpp b/server/mytcpserver.cpp index be276cb..463ae2c 100644 --- a/server/mytcpserver.cpp +++ b/server/mytcpserver.cpp @@ -46,25 +46,16 @@ void MyTcpServer::slotNewConnection() } } -void MyTcpServer::slotServerRead() -{ +void MyTcpServer::slotServerRead() { QTcpSocket *clientSocket = qobject_cast(sender()); - if (!clientSocket) { - return; - } + if (!clientSocket) return; - QString res = ""; - while (clientSocket->bytesAvailable() > 0) { - QByteArray array = clientSocket->readAll(); - qDebug() << array << "\n"; - if (array == "\\x01\r\n") { - clientSocket->write(res.toUtf8()); - res = ""; - } else { - res.append(array); - } - } - clientSocket->write(parsing(res, clientSocket->socketDescriptor())); + QByteArray data = clientSocket->readAll(); + qDebug() << "Received data:" << data; + + // Обрабатываем данные сразу, без накопления + QByteArray response = parsing(QString(data).trimmed(), clientSocket->socketDescriptor()); + clientSocket->write(response); } void MyTcpServer::slotClientDisconnected() From 6f2c3b239740a6642d12006836fc686f6905ed0c Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Sun, 4 May 2025 14:01:10 +0300 Subject: [PATCH 44/58] server 0.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Подвязка каталога к БД --- server/func2serv.cpp | 30 ++++++++++++++++++------------ server/func2serv.h | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/server/func2serv.cpp b/server/func2serv.cpp index 240b0b8..c367c10 100644 --- a/server/func2serv.cpp +++ b/server/func2serv.cpp @@ -4,6 +4,9 @@ #include #include #include +#include +#include +#include // Заглушка для базы данных QMap> mockDatabase = { @@ -37,7 +40,7 @@ QByteArray parsing(QString input, int socdes) return add_product(container); } else if (var == "user" && container[2] == "get_products") { - return get_products(container); + return get_products(container[1]); } else if (var =="reg") { @@ -210,22 +213,25 @@ void fetch_products_from_db(const QString& userId, QStringList& products) { products = mockDatabase[userId]; } } -QByteArray get_products(QStringList params) { - QString userId = params[1]; // ID пользователя - qDebug() << "ID USER: " << userId; - QStringList products; // Список продуктов +QByteArray get_products(QString userId) { + DataBaseSingleton* db = DataBaseSingleton::getInstance(); + int userIdInt = userId.toInt(); + QVector products = db->getProductsByUser(userIdInt); + QJsonArray jsonArray; + for (const QVariantMap& product : products) { + QJsonObject obj = QJsonObject::fromVariantMap(product); + jsonArray.append(obj); + } - fetch_products_from_db(userId, products); + QJsonDocument doc(jsonArray); + QByteArray jsonBytes = doc.toJson(QJsonDocument::Compact); + qDebug() << "Отправляем продукты в виде JSON:" << jsonBytes; - QString response; - for (const QString& product : std::as_const(products)) { - response += product + "\r\n"; - } - - return response.toUtf8(); + return jsonBytes; } + QByteArray get_all_users() { QStringList users; diff --git a/server/func2serv.h b/server/func2serv.h index 143ceed..86f0946 100644 --- a/server/func2serv.h +++ b/server/func2serv.h @@ -11,7 +11,7 @@ QByteArray add_product(QStringList); QByteArray get_stat(/*QStringList*/); QByteArray check_task(/*QStringList*/); QByteArray menu_export(/*QStringList*/); -QByteArray get_products(QStringList params); +QByteArray get_products(QString UserId); QByteArray get_all_users(); QByteArray get_stable_stat(); int get_user_count(); From 68fcfebab05869f615176e24a5b57162d212589a Mon Sep 17 00:00:00 2001 From: Egor Deev <67710823+IGlek@users.noreply.github.com> Date: Sun, 4 May 2025 14:09:44 +0300 Subject: [PATCH 45/58] Delete functions_for_client.cpp --- functions_for_client.cpp | 66 ---------------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 functions_for_client.cpp diff --git a/functions_for_client.cpp b/functions_for_client.cpp deleted file mode 100644 index 114e6fc..0000000 --- a/functions_for_client.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "functions_for_client.h" - -#include -#include -#include - - -bool auth(QString login, QString password) { - - ClientSingleton& client = ClientSingleton::getInstance(); - - QString response = client.send_msg(QStringList{"auth", login, password}); - - qDebug() << "Успешность авторизации: " << response; - - // здесь проверка успешна ли авторизация - if (response == "true") { - return true; - } - return false; -}; - -bool reg(QString login, QString password, QString email) { - - ClientSingleton& client = ClientSingleton::getInstance(); - - QString response = client.send_msg(QStringList{"reg", login, password, email}); - - - // проверка на успешность регистрации - if (response == "true") { - return true; - } - return false; -}; - -QString get_stable_stat() { - - ClientSingleton& client = ClientSingleton::getInstance(); - - QString stat = client.send_msg(QStringList{"admin", "stable_stat"}); - - return stat; - -}; - -QString get_dynamic_stat() { - - ClientSingleton& client = ClientSingleton::getInstance(); - - QString stat = client.send_msg(QStringList{"admin", "dynamic_stat"}); - - return stat; - -}; - - -QByteArray get_all_users() { - - ClientSingleton& client = ClientSingleton::getInstance(); - - QByteArray stat = client.send_msg(QStringList{"admin", "get_all_users"}); - - return stat; -}; - From 290d81822e2b61fd76778fc37ba2fce7d540e5f9 Mon Sep 17 00:00:00 2001 From: Ruslan Starkov Date: Fri, 9 May 2025 16:56:57 +0300 Subject: [PATCH 46/58] server 0.6 Bug fixes From 732ce306dcf5945ea78f984c7a5b62df3d9d1d9b Mon Sep 17 00:00:00 2001 From: Starkcrimea <92050654+Starkcrimea@users.noreply.github.com> Date: Tue, 13 May 2025 19:09:08 +0300 Subject: [PATCH 47/58] Update static.yml --- .github/workflows/static.yml | 53 ++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index c445979..348dbb2 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -1,55 +1,62 @@ -# Simple workflow for deploying static content to GitHub Pages name: Deploy static content to Pages on: - # Runs on pushes targeting the default branch + # Workflow срабатывает при пуше в ветку add-doxygen-docs push: - branches: ["main"] + branches: + - "add-doxygen-docs" # Используем ветку add-doxygen-docs - # Allows you to run this workflow manually from the Actions tab + # Позволяет запускать workflow вручную через интерфейс GitHub Actions workflow_dispatch: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: - contents: read - pages: write - id-token: write + # Права, необходимые для работы с GitHub Pages + contents: read # Чтение содержимого репозитория + pages: write # Запись на GitHub Pages + id-token: write # Токен для аутентификации -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" - cancel-in-progress: false + cancel-in-progress: false # Не отменять текущие деплои, если идет другой jobs: - # Single deploy job since we're just deploying deploy: + # Параметры среды, где будет развернута документация environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} + + # Указание на платформу для выполнения runs-on: ubuntu-latest + steps: - - name: Checkout + # Шаг 1: Скачиваем репозиторий + - name: Checkout repository uses: actions/checkout@v4 + + # Шаг 2: Настройка GitHub Pages - name: Setup Pages uses: actions/configure-pages@v4 - # Install Doxygen + # Шаг 3: Установка Doxygen - name: Install Doxygen - run: sudo apt install doxygen && doxygen --version + run: sudo apt-get install doxygen && doxygen --version + # Шаг 4: Установка Graphviz (если нужно для графиков в документации) - name: Install Graphviz - run: sudo apt install graphviz - - # Create documentation - - name: Create documentation - run: doxygen - + run: sudo apt-get install graphviz + + # Шаг 5: Генерация документации с использованием Doxygen + - name: Create documentation + run: doxygen Doxyfile # Предполагаем, что у вас есть файл Doxyfile в корне репозитория + + # Шаг 6: Загружаем сгенерированную документацию как артефакт - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - # Upload entire repository - path: './html/' + path: './html/' # Папка, где Doxygen генерирует документацию + + # Шаг 7: Деплой документации на GitHub Pages - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 From 3aca7be7bf9cfc635b8c6237b0fee168287ddac4 Mon Sep 17 00:00:00 2001 From: Starkcrimea <92050654+Starkcrimea@users.noreply.github.com> Date: Tue, 13 May 2025 19:10:31 +0300 Subject: [PATCH 48/58] Update static.yml --- .github/workflows/static.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 348dbb2..4816d7c 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -54,7 +54,7 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: './html/' # Папка, где Doxygen генерирует документацию + path: '.docs/build/html/' # Папка, где Doxygen генерирует документацию # Шаг 7: Деплой документации на GitHub Pages - name: Deploy to GitHub Pages From e994c7e597baf93fb61f9242addd2398f33ee16a Mon Sep 17 00:00:00 2001 From: Starkcrimea <92050654+Starkcrimea@users.noreply.github.com> Date: Tue, 13 May 2025 19:16:26 +0300 Subject: [PATCH 49/58] Update static.yml --- .github/workflows/static.yml | 40 ++++++++++++++---------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 4816d7c..fc7650f 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -1,62 +1,52 @@ name: Deploy static content to Pages on: - # Workflow срабатывает при пуше в ветку add-doxygen-docs push: branches: - - "add-doxygen-docs" # Используем ветку add-doxygen-docs - - # Позволяет запускать workflow вручную через интерфейс GitHub Actions + - "add-doxygen-docs" # или ваша основная ветка, например, "main" workflow_dispatch: permissions: - # Права, необходимые для работы с GitHub Pages - contents: read # Чтение содержимого репозитория - pages: write # Запись на GitHub Pages - id-token: write # Токен для аутентификации + contents: read + pages: write + id-token: write concurrency: group: "pages" - cancel-in-progress: false # Не отменять текущие деплои, если идет другой + cancel-in-progress: false jobs: deploy: - # Параметры среды, где будет развернута документация environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} - - # Указание на платформу для выполнения runs-on: ubuntu-latest - steps: - # Шаг 1: Скачиваем репозиторий - - name: Checkout repository + - name: Checkout uses: actions/checkout@v4 - # Шаг 2: Настройка GitHub Pages - name: Setup Pages uses: actions/configure-pages@v4 - # Шаг 3: Установка Doxygen + # Устанавливаем Doxygen - name: Install Doxygen - run: sudo apt-get install doxygen && doxygen --version + run: sudo apt install doxygen && doxygen --version - # Шаг 4: Установка Graphviz (если нужно для графиков в документации) + # Устанавливаем Graphviz (если нужно для генерации графиков в Doxygen) - name: Install Graphviz - run: sudo apt-get install graphviz + run: sudo apt install graphviz - # Шаг 5: Генерация документации с использованием Doxygen + # Создаем документацию - name: Create documentation - run: doxygen Doxyfile # Предполагаем, что у вас есть файл Doxyfile в корне репозитория + run: doxygen - # Шаг 6: Загружаем сгенерированную документацию как артефакт + # Загрузка артефакта (с учетом структуры папок) - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: '.docs/build/html/' # Папка, где Doxygen генерирует документацию + path: './docs/build/html' # Указываем правильный путь к сгенерированной документации - # Шаг 7: Деплой документации на GitHub Pages + # Разворачиваем на GitHub Pages - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 From d2a437f93c67ed401babac7630f20a952f68364c Mon Sep 17 00:00:00 2001 From: Starkcrimea <92050654+Starkcrimea@users.noreply.github.com> Date: Tue, 13 May 2025 19:54:22 +0300 Subject: [PATCH 50/58] Update static.yml --- .github/workflows/static.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index fc7650f..2cdd2b0 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -3,7 +3,7 @@ name: Deploy static content to Pages on: push: branches: - - "add-doxygen-docs" # или ваша основная ветка, например, "main" + - "main" # или ваша основная ветка, например, "main" workflow_dispatch: permissions: @@ -44,7 +44,7 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: './docs/build/html' # Указываем правильный путь к сгенерированной документации + path: './html' # Указываем правильный путь к сгенерированной документации # Разворачиваем на GitHub Pages - name: Deploy to GitHub Pages From 73954b1cb1c8621849164fa47e92b0ad7c9d7f79 Mon Sep 17 00:00:00 2001 From: Starkcrimea Date: Tue, 13 May 2025 20:12:52 +0300 Subject: [PATCH 51/58] doxygen --- server/databasesingleton.h | 154 ++++++++++++++++++++++++++++++++----- 1 file changed, 134 insertions(+), 20 deletions(-) diff --git a/server/databasesingleton.h b/server/databasesingleton.h index db7e7e3..9e3ce2d 100644 --- a/server/databasesingleton.h +++ b/server/databasesingleton.h @@ -10,52 +10,166 @@ class DataBaseSingleton; -// Класс-разрушитель для корректного удаления Singleton +/** + * @brief Класс для разрушения экземпляра Singleton. + * + * Используется для корректного удаления экземпляра DataBaseSingleton. + */ class SingletonDestroyer { private: - DataBaseSingleton* p_instance; // Указатель на экземпляр Singleton + DataBaseSingleton* p_instance; ///< Указатель на экземпляр Singleton public: - ~SingletonDestroyer(); // Деструктор для удаления Singleton - void initialize(DataBaseSingleton* p); // Инициализация указателя + /** + * @brief Деструктор для удаления Singleton. + * + * Уничтожает экземпляр Singleton, если он существует. + */ + ~SingletonDestroyer(); + + /** + * @brief Инициализация указателя на экземпляр Singleton. + * + * @param p Указатель на экземпляр Singleton. + */ + void initialize(DataBaseSingleton* p); }; -// Основной класс для работы с базой данных +/** + * @brief Класс для работы с базой данных. + * + * Реализует паттерн Singleton для подключения к базе данных, выполнения SQL-запросов, + * а также управления данными пользователей, продуктов, избранных рационов и статистики. + */ class DataBaseSingleton { private: - static DataBaseSingleton* p_instance; // Единственный экземпляр класса - static SingletonDestroyer destroyer; // Объект-разрушитель - QSqlDatabase db; // Объект базы данных + static DataBaseSingleton* p_instance; ///< Единственный экземпляр класса + static SingletonDestroyer destroyer; ///< Объект-разрушитель + QSqlDatabase db; ///< Объект базы данных + + /** + * @brief Приватный конструктор. + * + * Запрещает создание экземпляров класса напрямую. + */ + DataBaseSingleton(); + + DataBaseSingleton(const DataBaseSingleton&) = delete; ///< Запрещает копирование экземпляра + DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; ///< Запрещает присваивание + + /** + * @brief Приватный деструктор. + * + * Закрыт для предотвращения удаления экземпляра Singleton извне. + */ + ~DataBaseSingleton() = default; - DataBaseSingleton(); // Приватный конструктор - DataBaseSingleton(const DataBaseSingleton&) = delete; // Запрет копирования - DataBaseSingleton& operator=(const DataBaseSingleton&) = delete; - ~DataBaseSingleton() = default; // Приватный деструктор - friend class SingletonDestroyer; // Дружественный класс для доступа к деструктору + friend class SingletonDestroyer; ///< Дружественный класс для доступа к деструктору public: - // Получение экземпляра Singleton + /** + * @brief Получение единственного экземпляра Singleton. + * + * @return Экземпляр класса DataBaseSingleton. + */ static DataBaseSingleton* getInstance(); - // Инициализация БД: имя файла, создание таблиц + /** + * @brief Инициализация базы данных. + * + * Создает соединение с базой данных и выполняет необходимые операции для создания таблиц. + * + * @param databaseName Имя файла базы данных. + * @return true, если инициализация успешна, иначе false. + */ bool initialize(const QString& databaseName); - // Выполнение параметризованного SQL-запроса + /** + * @brief Выполнение SQL-запроса с параметрами. + * + * @param query SQL-запрос в виде строки. + * @param params Параметры для SQL-запроса. + * @return Результат выполнения запроса в виде QSqlQuery. + */ QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap()); - // Методы для работы с таблицей users + /** + * @brief Проверка учетных данных пользователя. + * + * @param login Логин пользователя. + * @param password Пароль пользователя. + * @return true, если учетные данные корректны, иначе false. + */ bool checkUserCredentials(const QString& login, const QString& password); + + /** + * @brief Добавление нового пользователя в базу данных. + * + * @param name Имя пользователя. + * @param email Электронная почта пользователя. + * @param password Пароль пользователя. + * @param isAdmin Флаг администратора (по умолчанию false). + * @return true, если пользователь добавлен, иначе false. + */ bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false); - // Методы для работы с таблицей products + /** + * @brief Добавление продукта в базу данных. + * + * @param userId Идентификатор пользователя. + * @param name Название продукта. + * @param proteins Количество белков в продукте. + * @param fatness Количество жиров в продукте. + * @param carbs Количество углеводов в продукте. + * @param weight Вес продукта. + * @param cost Стоимость продукта. + * @param type Тип продукта. + * @return true, если продукт добавлен, иначе false. + */ bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type); + + /** + * @brief Получение продуктов для конкретного пользователя. + * + * @param userId Идентификатор пользователя. + * @return Список продуктов, принадлежащих пользователю. + */ QVector getProductsByUser(int userId); - // Методы для работы с таблицей favorites + /** + * @brief Добавление рациона в избранное. + * + * @param userId Идентификатор пользователя. + * @param productIds Список идентификаторов продуктов. + * @param calories Общее количество калорий. + * @param allCost Общая стоимость рациона. + * @param allWeight Общий вес рациона. + * @return true, если рацион добавлен, иначе false. + */ bool addFavoriteRation(int userId, const QVector& productIds, int calories, int allCost, int allWeight); + + /** + * @brief Получение избранных рационов пользователя. + * + * @param userId Идентификатор пользователя. + * @return Список избранных рационов пользователя. + */ QVector getFavoritesByUser(int userId); - // Методы для работы с таблицей statistics + /** + * @brief Обновление статистики. + * + * @param registrations Количество регистраций. + * @param visits Количество посещений. + * @param generations Количество генераций. + * @return true, если статистика обновлена, иначе false. + */ bool updateStatistics(int registrations, int visits, int generations); + + /** + * @brief Получение статистики. + * + * @return Словарь с данными статистики. + */ QVariantMap getStatistics(); }; From ea2f3f2f98b9987ee7782bdae9bcd4a455e414c8 Mon Sep 17 00:00:00 2001 From: Starkcrimea Date: Tue, 13 May 2025 20:17:24 +0300 Subject: [PATCH 52/58] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20main:=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B?= =?UTF-8?q?=20=D1=81=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D1=8F=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doxyfile | 49 +- docs/doxygen/html/annotated.html | 125 + docs/doxygen/html/annotated_dup.js | 6 + .../class_data_base_singleton-members.html | 140 + .../html/class_data_base_singleton.html | 1015 +++++++ .../doxygen/html/class_data_base_singleton.js | 22 + ...class_data_base_singleton__coll__graph.dot | 12 + ...class_data_base_singleton__coll__graph.map | 7 + ...class_data_base_singleton__coll__graph.md5 | 1 + ...class_data_base_singleton__coll__graph.png | Bin 0 -> 4086 bytes .../html/class_my_tcp_server-members.html | 130 + docs/doxygen/html/class_my_tcp_server.html | 465 +++ docs/doxygen/html/class_my_tcp_server.js | 12 + .../html/class_my_tcp_server__coll__graph.dot | 10 + .../html/class_my_tcp_server__coll__graph.map | 5 + .../html/class_my_tcp_server__coll__graph.md5 | 1 + .../html/class_my_tcp_server__coll__graph.png | Bin 0 -> 1354 bytes .../class_my_tcp_server__inherit__graph.dot | 10 + .../class_my_tcp_server__inherit__graph.map | 5 + .../class_my_tcp_server__inherit__graph.md5 | 1 + .../class_my_tcp_server__inherit__graph.png | Bin 0 -> 1354 bytes .../class_singleton_destroyer-members.html | 124 + .../html/class_singleton_destroyer.html | 238 ++ .../doxygen/html/class_singleton_destroyer.js | 6 + ...class_singleton_destroyer__coll__graph.dot | 12 + ...class_singleton_destroyer__coll__graph.map | 7 + ...class_singleton_destroyer__coll__graph.md5 | 1 + ...class_singleton_destroyer__coll__graph.png | Bin 0 -> 4038 bytes docs/doxygen/html/classes.html | 130 + docs/doxygen/html/clipboard.js | 61 + docs/doxygen/html/cookie.js | 58 + docs/doxygen/html/databasesingleton_8cpp.html | 142 + .../html/databasesingleton_8cpp__incl.dot | 22 + .../html/databasesingleton_8cpp__incl.map | 17 + .../html/databasesingleton_8cpp__incl.md5 | 1 + .../html/databasesingleton_8cpp__incl.png | Bin 0 -> 9307 bytes docs/doxygen/html/databasesingleton_8h.html | 173 ++ docs/doxygen/html/databasesingleton_8h.js | 5 + .../html/databasesingleton_8h__dep__incl.dot | 14 + .../html/databasesingleton_8h__dep__incl.map | 9 + .../html/databasesingleton_8h__dep__incl.md5 | 1 + .../html/databasesingleton_8h__dep__incl.png | Bin 0 -> 4714 bytes .../html/databasesingleton_8h__incl.dot | 20 + .../html/databasesingleton_8h__incl.map | 15 + .../html/databasesingleton_8h__incl.md5 | 1 + .../html/databasesingleton_8h__incl.png | Bin 0 -> 7983 bytes .../html/databasesingleton_8h_source.html | 208 ++ .../dir_41e1742e44e2de38b3bc91f993fed282.html | 137 + .../dir_41e1742e44e2de38b3bc91f993fed282.js | 10 + docs/doxygen/html/doc.svg | 12 + docs/doxygen/html/docd.svg | 12 + docs/doxygen/html/doxygen.css | 2255 +++++++++++++++ docs/doxygen/html/doxygen.svg | 28 + docs/doxygen/html/doxygen_crawl.html | 112 + docs/doxygen/html/dynsections.js | 198 ++ docs/doxygen/html/files.html | 130 + docs/doxygen/html/files_dup.js | 4 + docs/doxygen/html/folderclosed.svg | 11 + docs/doxygen/html/folderclosedd.svg | 11 + docs/doxygen/html/folderopen.svg | 17 + docs/doxygen/html/folderopend.svg | 12 + docs/doxygen/html/func2serv_8cpp.html | 862 ++++++ docs/doxygen/html/func2serv_8cpp.js | 22 + docs/doxygen/html/func2serv_8cpp__incl.dot | 40 + docs/doxygen/html/func2serv_8cpp__incl.map | 35 + docs/doxygen/html/func2serv_8cpp__incl.md5 | 1 + docs/doxygen/html/func2serv_8cpp__incl.png | Bin 0 -> 25096 bytes docs/doxygen/html/func2serv_8h.html | 782 +++++ docs/doxygen/html/func2serv_8h.js | 20 + docs/doxygen/html/func2serv_8h__dep__incl.dot | 12 + docs/doxygen/html/func2serv_8h__dep__incl.map | 7 + docs/doxygen/html/func2serv_8h__dep__incl.md5 | 1 + docs/doxygen/html/func2serv_8h__dep__incl.png | Bin 0 -> 3267 bytes docs/doxygen/html/func2serv_8h__incl.dot | 12 + docs/doxygen/html/func2serv_8h__incl.map | 7 + docs/doxygen/html/func2serv_8h__incl.md5 | 1 + docs/doxygen/html/func2serv_8h__incl.png | Bin 0 -> 2834 bytes docs/doxygen/html/func2serv_8h_source.html | 163 ++ docs/doxygen/html/functions.html | 191 ++ docs/doxygen/html/functions_func.html | 137 + docs/doxygen/html/functions_rela.html | 118 + docs/doxygen/html/functions_vars.html | 124 + docs/doxygen/html/globals.html | 163 ++ docs/doxygen/html/globals_func.html | 162 ++ docs/doxygen/html/globals_vars.html | 118 + docs/doxygen/html/graph_legend.dot | 24 + docs/doxygen/html/graph_legend.html | 178 ++ docs/doxygen/html/graph_legend.md5 | 1 + docs/doxygen/html/graph_legend.png | Bin 0 -> 12453 bytes docs/doxygen/html/hierarchy.html | 128 + docs/doxygen/html/hierarchy.js | 8 + docs/doxygen/html/index.html | 119 + docs/doxygen/html/inherit_graph_0.dot | 9 + docs/doxygen/html/inherit_graph_0.map | 3 + docs/doxygen/html/inherit_graph_0.md5 | 1 + docs/doxygen/html/inherit_graph_0.png | Bin 0 -> 562 bytes docs/doxygen/html/inherit_graph_1.dot | 11 + docs/doxygen/html/inherit_graph_1.map | 5 + docs/doxygen/html/inherit_graph_1.md5 | 1 + docs/doxygen/html/inherit_graph_1.png | Bin 0 -> 1126 bytes docs/doxygen/html/inherit_graph_2.dot | 9 + docs/doxygen/html/inherit_graph_2.map | 3 + docs/doxygen/html/inherit_graph_2.md5 | 1 + docs/doxygen/html/inherit_graph_2.png | Bin 0 -> 563 bytes docs/doxygen/html/inherits.html | 139 + docs/doxygen/html/jquery.js | 204 ++ docs/doxygen/html/main_8cpp.html | 217 ++ docs/doxygen/html/main_8cpp.js | 4 + docs/doxygen/html/main_8cpp__incl.dot | 44 + docs/doxygen/html/main_8cpp__incl.map | 39 + docs/doxygen/html/main_8cpp__incl.md5 | 1 + docs/doxygen/html/main_8cpp__incl.png | Bin 0 -> 32344 bytes docs/doxygen/html/minus.svg | 8 + docs/doxygen/html/minusd.svg | 8 + docs/doxygen/html/mytcpserver_8cpp.html | 157 + docs/doxygen/html/mytcpserver_8cpp__incl.dot | 33 + docs/doxygen/html/mytcpserver_8cpp__incl.map | 28 + docs/doxygen/html/mytcpserver_8cpp__incl.md5 | 1 + docs/doxygen/html/mytcpserver_8cpp__incl.png | Bin 0 -> 19849 bytes docs/doxygen/html/mytcpserver_8h.html | 170 ++ docs/doxygen/html/mytcpserver_8h.js | 4 + .../html/mytcpserver_8h__dep__incl.dot | 12 + .../html/mytcpserver_8h__dep__incl.map | 7 + .../html/mytcpserver_8h__dep__incl.md5 | 1 + .../html/mytcpserver_8h__dep__incl.png | Bin 0 -> 2863 bytes docs/doxygen/html/mytcpserver_8h__incl.dot | 22 + docs/doxygen/html/mytcpserver_8h__incl.map | 17 + docs/doxygen/html/mytcpserver_8h__incl.md5 | 1 + docs/doxygen/html/mytcpserver_8h__incl.png | Bin 0 -> 10302 bytes docs/doxygen/html/mytcpserver_8h_source.html | 157 + docs/doxygen/html/nav_g.png | Bin 0 -> 95 bytes docs/doxygen/html/navtree.css | 149 + docs/doxygen/html/navtree.js | 483 ++++ docs/doxygen/html/navtreedata.js | 56 + docs/doxygen/html/navtreeindex0.js | 98 + docs/doxygen/html/plus.svg | 9 + docs/doxygen/html/plusd.svg | 9 + docs/doxygen/html/resize.js | 147 + docs/doxygen/html/search/all_0.js | 10 + docs/doxygen/html/search/all_1.js | 5 + docs/doxygen/html/search/all_2.js | 8 + docs/doxygen/html/search/all_3.js | 4 + docs/doxygen/html/search/all_4.js | 6 + docs/doxygen/html/search/all_5.js | 16 + docs/doxygen/html/search/all_6.js | 4 + docs/doxygen/html/search/all_7.js | 13 + docs/doxygen/html/search/all_8.js | 4 + docs/doxygen/html/search/all_9.js | 5 + docs/doxygen/html/search/all_a.js | 4 + docs/doxygen/html/search/all_b.js | 8 + docs/doxygen/html/search/all_c.js | 4 + docs/doxygen/html/search/all_d.js | 6 + docs/doxygen/html/search/classes_0.js | 4 + docs/doxygen/html/search/classes_1.js | 4 + docs/doxygen/html/search/classes_2.js | 4 + docs/doxygen/html/search/close.svg | 18 + docs/doxygen/html/search/files_0.js | 5 + docs/doxygen/html/search/files_1.js | 5 + docs/doxygen/html/search/files_2.js | 6 + docs/doxygen/html/search/functions_0.js | 10 + docs/doxygen/html/search/functions_1.js | 5 + docs/doxygen/html/search/functions_2.js | 4 + docs/doxygen/html/search/functions_3.js | 4 + docs/doxygen/html/search/functions_4.js | 4 + docs/doxygen/html/search/functions_5.js | 16 + docs/doxygen/html/search/functions_6.js | 4 + docs/doxygen/html/search/functions_7.js | 6 + docs/doxygen/html/search/functions_8.js | 4 + docs/doxygen/html/search/functions_9.js | 4 + docs/doxygen/html/search/functions_a.js | 4 + docs/doxygen/html/search/functions_b.js | 6 + docs/doxygen/html/search/functions_c.js | 4 + docs/doxygen/html/search/functions_d.js | 6 + docs/doxygen/html/search/mag.svg | 24 + docs/doxygen/html/search/mag_d.svg | 24 + docs/doxygen/html/search/mag_sel.svg | 31 + docs/doxygen/html/search/mag_seld.svg | 31 + docs/doxygen/html/search/related_0.js | 4 + docs/doxygen/html/search/search.css | 286 ++ docs/doxygen/html/search/search.js | 694 +++++ docs/doxygen/html/search/searchdata.js | 30 + docs/doxygen/html/search/variables_0.js | 5 + docs/doxygen/html/search/variables_1.js | 7 + docs/doxygen/html/search/variables_2.js | 4 + docs/doxygen/html/search/variables_3.js | 4 + docs/doxygen/html/tabs.css | 1 + docs/doxygen/latex/Makefile | 42 + docs/doxygen/latex/annotated.tex | 6 + .../latex/class_data_base_singleton.tex | 642 +++++ ...class_data_base_singleton__coll__graph.dot | 12 + ...class_data_base_singleton__coll__graph.md5 | 1 + ...class_data_base_singleton__coll__graph.pdf | Bin 0 -> 16129 bytes docs/doxygen/latex/class_my_tcp_server.tex | 214 ++ .../class_my_tcp_server__coll__graph.dot | 10 + .../class_my_tcp_server__coll__graph.md5 | 1 + .../class_my_tcp_server__coll__graph.pdf | Bin 0 -> 13995 bytes .../class_my_tcp_server__inherit__graph.dot | 10 + .../class_my_tcp_server__inherit__graph.md5 | 1 + .../class_my_tcp_server__inherit__graph.pdf | Bin 0 -> 13995 bytes .../latex/class_singleton_destroyer.tex | 98 + ...class_singleton_destroyer__coll__graph.dot | 12 + ...class_singleton_destroyer__coll__graph.md5 | 1 + ...class_singleton_destroyer__coll__graph.pdf | Bin 0 -> 16114 bytes docs/doxygen/latex/databasesingleton_8cpp.tex | 11 + .../latex/databasesingleton_8cpp__incl.dot | 22 + .../latex/databasesingleton_8cpp__incl.md5 | 1 + .../latex/databasesingleton_8cpp__incl.pdf | Bin 0 -> 19662 bytes docs/doxygen/latex/databasesingleton_8h.tex | 31 + .../latex/databasesingleton_8h__dep__incl.dot | 14 + .../latex/databasesingleton_8h__dep__incl.md5 | 1 + .../latex/databasesingleton_8h__dep__incl.pdf | Bin 0 -> 17130 bytes .../latex/databasesingleton_8h__incl.dot | 20 + .../latex/databasesingleton_8h__incl.md5 | 1 + .../latex/databasesingleton_8h__incl.pdf | Bin 0 -> 19338 bytes .../latex/databasesingleton_8h_source.tex | 67 + .../dir_41e1742e44e2de38b3bc91f993fed282.tex | 19 + docs/doxygen/latex/doxygen.sty | 714 +++++ docs/doxygen/latex/etoc_doxygen.sty | 2178 ++++++++++++++ docs/doxygen/latex/files.tex | 10 + docs/doxygen/latex/func2serv_8cpp.tex | 549 ++++ docs/doxygen/latex/func2serv_8cpp__incl.dot | 40 + docs/doxygen/latex/func2serv_8cpp__incl.md5 | 1 + docs/doxygen/latex/func2serv_8cpp__incl.pdf | Bin 0 -> 23594 bytes docs/doxygen/latex/func2serv_8h.tex | 502 ++++ .../doxygen/latex/func2serv_8h__dep__incl.dot | 12 + .../doxygen/latex/func2serv_8h__dep__incl.md5 | 1 + .../doxygen/latex/func2serv_8h__dep__incl.pdf | Bin 0 -> 14666 bytes docs/doxygen/latex/func2serv_8h__incl.dot | 12 + docs/doxygen/latex/func2serv_8h__incl.md5 | 1 + docs/doxygen/latex/func2serv_8h__incl.pdf | Bin 0 -> 16794 bytes docs/doxygen/latex/func2serv_8h_source.tex | 33 + docs/doxygen/latex/hierarchy.tex | 8 + docs/doxygen/latex/longtable_doxygen.sty | 459 +++ docs/doxygen/latex/main_8cpp.tex | 48 + docs/doxygen/latex/main_8cpp__incl.dot | 44 + docs/doxygen/latex/main_8cpp__incl.md5 | 1 + docs/doxygen/latex/main_8cpp__incl.pdf | Bin 0 -> 25097 bytes docs/doxygen/latex/make.bat | 67 + docs/doxygen/latex/mytcpserver_8cpp.tex | 15 + docs/doxygen/latex/mytcpserver_8cpp__incl.dot | 33 + docs/doxygen/latex/mytcpserver_8cpp__incl.md5 | 1 + docs/doxygen/latex/mytcpserver_8cpp__incl.pdf | Bin 0 -> 24010 bytes docs/doxygen/latex/mytcpserver_8h.tex | 30 + .../latex/mytcpserver_8h__dep__incl.dot | 12 + .../latex/mytcpserver_8h__dep__incl.md5 | 1 + .../latex/mytcpserver_8h__dep__incl.pdf | Bin 0 -> 14531 bytes docs/doxygen/latex/mytcpserver_8h__incl.dot | 22 + docs/doxygen/latex/mytcpserver_8h__incl.md5 | 1 + docs/doxygen/latex/mytcpserver_8h__incl.pdf | Bin 0 -> 21205 bytes docs/doxygen/latex/mytcpserver_8h_source.tex | 33 + docs/doxygen/latex/refman.tex | 265 ++ docs/doxygen/latex/tabu_doxygen.sty | 2557 +++++++++++++++++ 252 files changed, 22189 insertions(+), 1 deletion(-) create mode 100644 docs/doxygen/html/annotated.html create mode 100644 docs/doxygen/html/annotated_dup.js create mode 100644 docs/doxygen/html/class_data_base_singleton-members.html create mode 100644 docs/doxygen/html/class_data_base_singleton.html create mode 100644 docs/doxygen/html/class_data_base_singleton.js create mode 100644 docs/doxygen/html/class_data_base_singleton__coll__graph.dot create mode 100644 docs/doxygen/html/class_data_base_singleton__coll__graph.map create mode 100644 docs/doxygen/html/class_data_base_singleton__coll__graph.md5 create mode 100644 docs/doxygen/html/class_data_base_singleton__coll__graph.png create mode 100644 docs/doxygen/html/class_my_tcp_server-members.html create mode 100644 docs/doxygen/html/class_my_tcp_server.html create mode 100644 docs/doxygen/html/class_my_tcp_server.js create mode 100644 docs/doxygen/html/class_my_tcp_server__coll__graph.dot create mode 100644 docs/doxygen/html/class_my_tcp_server__coll__graph.map create mode 100644 docs/doxygen/html/class_my_tcp_server__coll__graph.md5 create mode 100644 docs/doxygen/html/class_my_tcp_server__coll__graph.png create mode 100644 docs/doxygen/html/class_my_tcp_server__inherit__graph.dot create mode 100644 docs/doxygen/html/class_my_tcp_server__inherit__graph.map create mode 100644 docs/doxygen/html/class_my_tcp_server__inherit__graph.md5 create mode 100644 docs/doxygen/html/class_my_tcp_server__inherit__graph.png create mode 100644 docs/doxygen/html/class_singleton_destroyer-members.html create mode 100644 docs/doxygen/html/class_singleton_destroyer.html create mode 100644 docs/doxygen/html/class_singleton_destroyer.js create mode 100644 docs/doxygen/html/class_singleton_destroyer__coll__graph.dot create mode 100644 docs/doxygen/html/class_singleton_destroyer__coll__graph.map create mode 100644 docs/doxygen/html/class_singleton_destroyer__coll__graph.md5 create mode 100644 docs/doxygen/html/class_singleton_destroyer__coll__graph.png create mode 100644 docs/doxygen/html/classes.html create mode 100644 docs/doxygen/html/clipboard.js create mode 100644 docs/doxygen/html/cookie.js create mode 100644 docs/doxygen/html/databasesingleton_8cpp.html create mode 100644 docs/doxygen/html/databasesingleton_8cpp__incl.dot create mode 100644 docs/doxygen/html/databasesingleton_8cpp__incl.map create mode 100644 docs/doxygen/html/databasesingleton_8cpp__incl.md5 create mode 100644 docs/doxygen/html/databasesingleton_8cpp__incl.png create mode 100644 docs/doxygen/html/databasesingleton_8h.html create mode 100644 docs/doxygen/html/databasesingleton_8h.js create mode 100644 docs/doxygen/html/databasesingleton_8h__dep__incl.dot create mode 100644 docs/doxygen/html/databasesingleton_8h__dep__incl.map create mode 100644 docs/doxygen/html/databasesingleton_8h__dep__incl.md5 create mode 100644 docs/doxygen/html/databasesingleton_8h__dep__incl.png create mode 100644 docs/doxygen/html/databasesingleton_8h__incl.dot create mode 100644 docs/doxygen/html/databasesingleton_8h__incl.map create mode 100644 docs/doxygen/html/databasesingleton_8h__incl.md5 create mode 100644 docs/doxygen/html/databasesingleton_8h__incl.png create mode 100644 docs/doxygen/html/databasesingleton_8h_source.html create mode 100644 docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.html create mode 100644 docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.js create mode 100644 docs/doxygen/html/doc.svg create mode 100644 docs/doxygen/html/docd.svg create mode 100644 docs/doxygen/html/doxygen.css create mode 100644 docs/doxygen/html/doxygen.svg create mode 100644 docs/doxygen/html/doxygen_crawl.html create mode 100644 docs/doxygen/html/dynsections.js create mode 100644 docs/doxygen/html/files.html create mode 100644 docs/doxygen/html/files_dup.js create mode 100644 docs/doxygen/html/folderclosed.svg create mode 100644 docs/doxygen/html/folderclosedd.svg create mode 100644 docs/doxygen/html/folderopen.svg create mode 100644 docs/doxygen/html/folderopend.svg create mode 100644 docs/doxygen/html/func2serv_8cpp.html create mode 100644 docs/doxygen/html/func2serv_8cpp.js create mode 100644 docs/doxygen/html/func2serv_8cpp__incl.dot create mode 100644 docs/doxygen/html/func2serv_8cpp__incl.map create mode 100644 docs/doxygen/html/func2serv_8cpp__incl.md5 create mode 100644 docs/doxygen/html/func2serv_8cpp__incl.png create mode 100644 docs/doxygen/html/func2serv_8h.html create mode 100644 docs/doxygen/html/func2serv_8h.js create mode 100644 docs/doxygen/html/func2serv_8h__dep__incl.dot create mode 100644 docs/doxygen/html/func2serv_8h__dep__incl.map create mode 100644 docs/doxygen/html/func2serv_8h__dep__incl.md5 create mode 100644 docs/doxygen/html/func2serv_8h__dep__incl.png create mode 100644 docs/doxygen/html/func2serv_8h__incl.dot create mode 100644 docs/doxygen/html/func2serv_8h__incl.map create mode 100644 docs/doxygen/html/func2serv_8h__incl.md5 create mode 100644 docs/doxygen/html/func2serv_8h__incl.png create mode 100644 docs/doxygen/html/func2serv_8h_source.html create mode 100644 docs/doxygen/html/functions.html create mode 100644 docs/doxygen/html/functions_func.html create mode 100644 docs/doxygen/html/functions_rela.html create mode 100644 docs/doxygen/html/functions_vars.html create mode 100644 docs/doxygen/html/globals.html create mode 100644 docs/doxygen/html/globals_func.html create mode 100644 docs/doxygen/html/globals_vars.html create mode 100644 docs/doxygen/html/graph_legend.dot create mode 100644 docs/doxygen/html/graph_legend.html create mode 100644 docs/doxygen/html/graph_legend.md5 create mode 100644 docs/doxygen/html/graph_legend.png create mode 100644 docs/doxygen/html/hierarchy.html create mode 100644 docs/doxygen/html/hierarchy.js create mode 100644 docs/doxygen/html/index.html create mode 100644 docs/doxygen/html/inherit_graph_0.dot create mode 100644 docs/doxygen/html/inherit_graph_0.map create mode 100644 docs/doxygen/html/inherit_graph_0.md5 create mode 100644 docs/doxygen/html/inherit_graph_0.png create mode 100644 docs/doxygen/html/inherit_graph_1.dot create mode 100644 docs/doxygen/html/inherit_graph_1.map create mode 100644 docs/doxygen/html/inherit_graph_1.md5 create mode 100644 docs/doxygen/html/inherit_graph_1.png create mode 100644 docs/doxygen/html/inherit_graph_2.dot create mode 100644 docs/doxygen/html/inherit_graph_2.map create mode 100644 docs/doxygen/html/inherit_graph_2.md5 create mode 100644 docs/doxygen/html/inherit_graph_2.png create mode 100644 docs/doxygen/html/inherits.html create mode 100644 docs/doxygen/html/jquery.js create mode 100644 docs/doxygen/html/main_8cpp.html create mode 100644 docs/doxygen/html/main_8cpp.js create mode 100644 docs/doxygen/html/main_8cpp__incl.dot create mode 100644 docs/doxygen/html/main_8cpp__incl.map create mode 100644 docs/doxygen/html/main_8cpp__incl.md5 create mode 100644 docs/doxygen/html/main_8cpp__incl.png create mode 100644 docs/doxygen/html/minus.svg create mode 100644 docs/doxygen/html/minusd.svg create mode 100644 docs/doxygen/html/mytcpserver_8cpp.html create mode 100644 docs/doxygen/html/mytcpserver_8cpp__incl.dot create mode 100644 docs/doxygen/html/mytcpserver_8cpp__incl.map create mode 100644 docs/doxygen/html/mytcpserver_8cpp__incl.md5 create mode 100644 docs/doxygen/html/mytcpserver_8cpp__incl.png create mode 100644 docs/doxygen/html/mytcpserver_8h.html create mode 100644 docs/doxygen/html/mytcpserver_8h.js create mode 100644 docs/doxygen/html/mytcpserver_8h__dep__incl.dot create mode 100644 docs/doxygen/html/mytcpserver_8h__dep__incl.map create mode 100644 docs/doxygen/html/mytcpserver_8h__dep__incl.md5 create mode 100644 docs/doxygen/html/mytcpserver_8h__dep__incl.png create mode 100644 docs/doxygen/html/mytcpserver_8h__incl.dot create mode 100644 docs/doxygen/html/mytcpserver_8h__incl.map create mode 100644 docs/doxygen/html/mytcpserver_8h__incl.md5 create mode 100644 docs/doxygen/html/mytcpserver_8h__incl.png create mode 100644 docs/doxygen/html/mytcpserver_8h_source.html create mode 100644 docs/doxygen/html/nav_g.png create mode 100644 docs/doxygen/html/navtree.css create mode 100644 docs/doxygen/html/navtree.js create mode 100644 docs/doxygen/html/navtreedata.js create mode 100644 docs/doxygen/html/navtreeindex0.js create mode 100644 docs/doxygen/html/plus.svg create mode 100644 docs/doxygen/html/plusd.svg create mode 100644 docs/doxygen/html/resize.js create mode 100644 docs/doxygen/html/search/all_0.js create mode 100644 docs/doxygen/html/search/all_1.js create mode 100644 docs/doxygen/html/search/all_2.js create mode 100644 docs/doxygen/html/search/all_3.js create mode 100644 docs/doxygen/html/search/all_4.js create mode 100644 docs/doxygen/html/search/all_5.js create mode 100644 docs/doxygen/html/search/all_6.js create mode 100644 docs/doxygen/html/search/all_7.js create mode 100644 docs/doxygen/html/search/all_8.js create mode 100644 docs/doxygen/html/search/all_9.js create mode 100644 docs/doxygen/html/search/all_a.js create mode 100644 docs/doxygen/html/search/all_b.js create mode 100644 docs/doxygen/html/search/all_c.js create mode 100644 docs/doxygen/html/search/all_d.js create mode 100644 docs/doxygen/html/search/classes_0.js create mode 100644 docs/doxygen/html/search/classes_1.js create mode 100644 docs/doxygen/html/search/classes_2.js create mode 100644 docs/doxygen/html/search/close.svg create mode 100644 docs/doxygen/html/search/files_0.js create mode 100644 docs/doxygen/html/search/files_1.js create mode 100644 docs/doxygen/html/search/files_2.js create mode 100644 docs/doxygen/html/search/functions_0.js create mode 100644 docs/doxygen/html/search/functions_1.js create mode 100644 docs/doxygen/html/search/functions_2.js create mode 100644 docs/doxygen/html/search/functions_3.js create mode 100644 docs/doxygen/html/search/functions_4.js create mode 100644 docs/doxygen/html/search/functions_5.js create mode 100644 docs/doxygen/html/search/functions_6.js create mode 100644 docs/doxygen/html/search/functions_7.js create mode 100644 docs/doxygen/html/search/functions_8.js create mode 100644 docs/doxygen/html/search/functions_9.js create mode 100644 docs/doxygen/html/search/functions_a.js create mode 100644 docs/doxygen/html/search/functions_b.js create mode 100644 docs/doxygen/html/search/functions_c.js create mode 100644 docs/doxygen/html/search/functions_d.js create mode 100644 docs/doxygen/html/search/mag.svg create mode 100644 docs/doxygen/html/search/mag_d.svg create mode 100644 docs/doxygen/html/search/mag_sel.svg create mode 100644 docs/doxygen/html/search/mag_seld.svg create mode 100644 docs/doxygen/html/search/related_0.js create mode 100644 docs/doxygen/html/search/search.css create mode 100644 docs/doxygen/html/search/search.js create mode 100644 docs/doxygen/html/search/searchdata.js create mode 100644 docs/doxygen/html/search/variables_0.js create mode 100644 docs/doxygen/html/search/variables_1.js create mode 100644 docs/doxygen/html/search/variables_2.js create mode 100644 docs/doxygen/html/search/variables_3.js create mode 100644 docs/doxygen/html/tabs.css create mode 100644 docs/doxygen/latex/Makefile create mode 100644 docs/doxygen/latex/annotated.tex create mode 100644 docs/doxygen/latex/class_data_base_singleton.tex create mode 100644 docs/doxygen/latex/class_data_base_singleton__coll__graph.dot create mode 100644 docs/doxygen/latex/class_data_base_singleton__coll__graph.md5 create mode 100644 docs/doxygen/latex/class_data_base_singleton__coll__graph.pdf create mode 100644 docs/doxygen/latex/class_my_tcp_server.tex create mode 100644 docs/doxygen/latex/class_my_tcp_server__coll__graph.dot create mode 100644 docs/doxygen/latex/class_my_tcp_server__coll__graph.md5 create mode 100644 docs/doxygen/latex/class_my_tcp_server__coll__graph.pdf create mode 100644 docs/doxygen/latex/class_my_tcp_server__inherit__graph.dot create mode 100644 docs/doxygen/latex/class_my_tcp_server__inherit__graph.md5 create mode 100644 docs/doxygen/latex/class_my_tcp_server__inherit__graph.pdf create mode 100644 docs/doxygen/latex/class_singleton_destroyer.tex create mode 100644 docs/doxygen/latex/class_singleton_destroyer__coll__graph.dot create mode 100644 docs/doxygen/latex/class_singleton_destroyer__coll__graph.md5 create mode 100644 docs/doxygen/latex/class_singleton_destroyer__coll__graph.pdf create mode 100644 docs/doxygen/latex/databasesingleton_8cpp.tex create mode 100644 docs/doxygen/latex/databasesingleton_8cpp__incl.dot create mode 100644 docs/doxygen/latex/databasesingleton_8cpp__incl.md5 create mode 100644 docs/doxygen/latex/databasesingleton_8cpp__incl.pdf create mode 100644 docs/doxygen/latex/databasesingleton_8h.tex create mode 100644 docs/doxygen/latex/databasesingleton_8h__dep__incl.dot create mode 100644 docs/doxygen/latex/databasesingleton_8h__dep__incl.md5 create mode 100644 docs/doxygen/latex/databasesingleton_8h__dep__incl.pdf create mode 100644 docs/doxygen/latex/databasesingleton_8h__incl.dot create mode 100644 docs/doxygen/latex/databasesingleton_8h__incl.md5 create mode 100644 docs/doxygen/latex/databasesingleton_8h__incl.pdf create mode 100644 docs/doxygen/latex/databasesingleton_8h_source.tex create mode 100644 docs/doxygen/latex/dir_41e1742e44e2de38b3bc91f993fed282.tex create mode 100644 docs/doxygen/latex/doxygen.sty create mode 100644 docs/doxygen/latex/etoc_doxygen.sty create mode 100644 docs/doxygen/latex/files.tex create mode 100644 docs/doxygen/latex/func2serv_8cpp.tex create mode 100644 docs/doxygen/latex/func2serv_8cpp__incl.dot create mode 100644 docs/doxygen/latex/func2serv_8cpp__incl.md5 create mode 100644 docs/doxygen/latex/func2serv_8cpp__incl.pdf create mode 100644 docs/doxygen/latex/func2serv_8h.tex create mode 100644 docs/doxygen/latex/func2serv_8h__dep__incl.dot create mode 100644 docs/doxygen/latex/func2serv_8h__dep__incl.md5 create mode 100644 docs/doxygen/latex/func2serv_8h__dep__incl.pdf create mode 100644 docs/doxygen/latex/func2serv_8h__incl.dot create mode 100644 docs/doxygen/latex/func2serv_8h__incl.md5 create mode 100644 docs/doxygen/latex/func2serv_8h__incl.pdf create mode 100644 docs/doxygen/latex/func2serv_8h_source.tex create mode 100644 docs/doxygen/latex/hierarchy.tex create mode 100644 docs/doxygen/latex/longtable_doxygen.sty create mode 100644 docs/doxygen/latex/main_8cpp.tex create mode 100644 docs/doxygen/latex/main_8cpp__incl.dot create mode 100644 docs/doxygen/latex/main_8cpp__incl.md5 create mode 100644 docs/doxygen/latex/main_8cpp__incl.pdf create mode 100644 docs/doxygen/latex/make.bat create mode 100644 docs/doxygen/latex/mytcpserver_8cpp.tex create mode 100644 docs/doxygen/latex/mytcpserver_8cpp__incl.dot create mode 100644 docs/doxygen/latex/mytcpserver_8cpp__incl.md5 create mode 100644 docs/doxygen/latex/mytcpserver_8cpp__incl.pdf create mode 100644 docs/doxygen/latex/mytcpserver_8h.tex create mode 100644 docs/doxygen/latex/mytcpserver_8h__dep__incl.dot create mode 100644 docs/doxygen/latex/mytcpserver_8h__dep__incl.md5 create mode 100644 docs/doxygen/latex/mytcpserver_8h__dep__incl.pdf create mode 100644 docs/doxygen/latex/mytcpserver_8h__incl.dot create mode 100644 docs/doxygen/latex/mytcpserver_8h__incl.md5 create mode 100644 docs/doxygen/latex/mytcpserver_8h__incl.pdf create mode 100644 docs/doxygen/latex/mytcpserver_8h_source.tex create mode 100644 docs/doxygen/latex/refman.tex create mode 100644 docs/doxygen/latex/tabu_doxygen.sty diff --git a/Doxyfile b/Doxyfile index fd38861..b7f8ef1 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1 +1,48 @@ -+ +# Основные настройки +PROJECT_NAME = "My Project" # Название проекта +PROJECT_BRIEF = "Project description" # Краткое описание проекта +OUTPUT_DIRECTORY = docs/doxygen # Папка для вывода документации +CREATE_SUBDIRS = NO # Не создавать подкаталоги для выходных файлов +EXTRACT_ALL = YES # Извлекать все комментарии (даже если нет тегов Doxygen) +EXTRACT_PRIVATE = YES # Включать приватные члены +EXTRACT_STATIC = YES # Включать статические функции и переменные +INLINE_SOURCES = YES # Включать исходный код в документацию +FILE_PATTERNS = *.h *.cpp # Паттерны для поиска исходных файлов +RECURSIVE = YES # Рекурсивный поиск по каталогам +ENABLE_PREPROCESSING = YES # Разрешить обработку препроцессора +MACRO_EXPANSION = YES # Разрешить расширение макросов +TCL_SUBST = YES # Разрешить обработку команд TCL + +# Формат вывода документации +GENERATE_HTML = YES # Генерация HTML документации +HTML_OUTPUT = html # Папка для вывода HTML файлов +HTML_EXTRA_STYLESHEET = "" # Кастомный файл стилей (если есть) + +# Формат LaTeX (если нужен) +GENERATE_LATEX = YES # Отключить генерацию LaTeX документации + + +# Использование Doxygen комментариев +ALIASES = "myalias=somealias" # Можно настроить пользовательские алиасы (не обязательно) +TEMPLATE_RELATIONS = YES # Включить создание связей между файлами и классами +HAVE_DOT = YES # Использовать Graphviz для генерации графиков и диаграмм + +# Функции и классы +EXTRACT_LOCAL_CLASSES = YES # Включать локальные классы в документацию +EXTRACT_LOCAL_METHODS = YES # Включать локальные методы в документацию + +# Включение/выключение различных типов документации +SHOW_FILES = YES # Показать файлы в документации +SHOW_NAMESPACES = YES # Показать пространства имен +SHOW_INCLUDE_FILES = YES # Показать включаемые файлы + +# Визуальные параметры +HTML_DYNAMIC_MENUS = YES # Включить динамические меню в HTML документации +HTML_COLORSTYLE = "yes" # Включить стилизацию документации + +# Включение тэгов Doxygen в комментариях +JAVADOC_AUTOBRIEF = YES # Автоматически добавлять краткое описание в JavaDoc стиле +DISTRIBUTE_GROUPS = YES # Разрешить группировку документации + +# Путь к исходным файлам +INPUT = ./server # Путь к вашим исходным файлам diff --git a/docs/doxygen/html/annotated.html b/docs/doxygen/html/annotated.html new file mode 100644 index 0000000..5dffe3a --- /dev/null +++ b/docs/doxygen/html/annotated.html @@ -0,0 +1,125 @@ + + + + + + + +My Project: Class List + + + + + + + + + + + + + + + + +

+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + +
 CDataBaseSingletonКласс для работы с базой данных
 CMyTcpServer
 CSingletonDestroyerКласс для разрушения экземпляра Singleton
+
+
+
+ +
+ + diff --git a/docs/doxygen/html/annotated_dup.js b/docs/doxygen/html/annotated_dup.js new file mode 100644 index 0000000..cec5d8b --- /dev/null +++ b/docs/doxygen/html/annotated_dup.js @@ -0,0 +1,6 @@ +var annotated_dup = +[ + [ "DataBaseSingleton", "class_data_base_singleton.html", "class_data_base_singleton" ], + [ "MyTcpServer", "class_my_tcp_server.html", "class_my_tcp_server" ], + [ "SingletonDestroyer", "class_singleton_destroyer.html", "class_singleton_destroyer" ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_data_base_singleton-members.html b/docs/doxygen/html/class_data_base_singleton-members.html new file mode 100644 index 0000000..a9d42a5 --- /dev/null +++ b/docs/doxygen/html/class_data_base_singleton-members.html @@ -0,0 +1,140 @@ + + + + + + + +My Project: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
DataBaseSingleton Member List
+
+
+ +

This is the complete list of members for DataBaseSingleton, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
addFavoriteRation(int userId, const QVector< int > &productIds, int calories, int allCost, int allWeight)DataBaseSingleton
addProduct(int userId, const QString &name, int proteins, int fatness, int carbs, int weight, int cost, int type)DataBaseSingleton
addUser(const QString &name, const QString &email, const QString &password, bool isAdmin=false)DataBaseSingleton
checkUserCredentials(const QString &login, const QString &password)DataBaseSingleton
DataBaseSingleton()DataBaseSingletonprivate
DataBaseSingleton(const DataBaseSingleton &)=deleteDataBaseSingletonprivate
dbDataBaseSingletonprivate
destroyerDataBaseSingletonprivatestatic
executeQuery(const QString &query, const QVariantMap &params=QVariantMap())DataBaseSingleton
getFavoritesByUser(int userId)DataBaseSingleton
getInstance()DataBaseSingletonstatic
getProductsByUser(int userId)DataBaseSingleton
getStatistics()DataBaseSingleton
initialize(const QString &databaseName)DataBaseSingleton
operator=(const DataBaseSingleton &)=deleteDataBaseSingletonprivate
p_instanceDataBaseSingletonprivatestatic
SingletonDestroyer classDataBaseSingletonfriend
updateStatistics(int registrations, int visits, int generations)DataBaseSingleton
~DataBaseSingleton()=defaultDataBaseSingletonprivate
+
+ + + + diff --git a/docs/doxygen/html/class_data_base_singleton.html b/docs/doxygen/html/class_data_base_singleton.html new file mode 100644 index 0000000..cdbee27 --- /dev/null +++ b/docs/doxygen/html/class_data_base_singleton.html @@ -0,0 +1,1015 @@ + + + + + + + +My Project: DataBaseSingleton Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +

Класс для работы с базой данных. + More...

+ +

#include <databasesingleton.h>

+
+Collaboration diagram for DataBaseSingleton:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool initialize (const QString &databaseName)
 Инициализация базы данных.
 
QSqlQuery executeQuery (const QString &query, const QVariantMap &params=QVariantMap())
 Выполнение SQL-запроса с параметрами.
 
bool checkUserCredentials (const QString &login, const QString &password)
 Проверка учетных данных пользователя.
 
bool addUser (const QString &name, const QString &email, const QString &password, bool isAdmin=false)
 Добавление нового пользователя в базу данных.
 
bool addProduct (int userId, const QString &name, int proteins, int fatness, int carbs, int weight, int cost, int type)
 Добавление продукта в базу данных.
 
QVector< QVariantMap > getProductsByUser (int userId)
 Получение продуктов для конкретного пользователя.
 
bool addFavoriteRation (int userId, const QVector< int > &productIds, int calories, int allCost, int allWeight)
 Добавление рациона в избранное.
 
QVector< QVariantMap > getFavoritesByUser (int userId)
 Получение избранных рационов пользователя.
 
bool updateStatistics (int registrations, int visits, int generations)
 Обновление статистики.
 
QVariantMap getStatistics ()
 Получение статистики.
 
+ + + + +

+Static Public Member Functions

static DataBaseSingletongetInstance ()
 Получение единственного экземпляра Singleton.
 
+ + + + + + + + + + + + + +

+Private Member Functions

 DataBaseSingleton ()
 Приватный конструктор.
 
 DataBaseSingleton (const DataBaseSingleton &)=delete
 Запрещает копирование экземпляра
 
DataBaseSingletonoperator= (const DataBaseSingleton &)=delete
 Запрещает присваивание
 
 ~DataBaseSingleton ()=default
 Приватный деструктор.
 
+ + + + +

+Private Attributes

QSqlDatabase db
 Объект базы данных
 
+ + + + + + + +

+Static Private Attributes

static DataBaseSingletonp_instance = nullptr
 Единственный экземпляр класса
 
static SingletonDestroyer destroyer
 Объект-разрушитель
 
+ + + + +

+Friends

class SingletonDestroyer
 Дружественный класс для доступа к деструктору
 
+

Detailed Description

+

Класс для работы с базой данных.

+

Реализует паттерн Singleton для подключения к базе данных, выполнения SQL-запросов, а также управления данными пользователей, продуктов, избранных рационов и статистики.

+

Constructor & Destructor Documentation

+ +

◆ DataBaseSingleton() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
DataBaseSingleton::DataBaseSingleton ()
+
+private
+
+ +

Приватный конструктор.

+

Запрещает создание экземпляров класса напрямую.

+
6 {
+
7 db = QSqlDatabase::addDatabase("QSQLITE");
+
8}
+
QSqlDatabase db
Объект базы данных
Definition databasesingleton.h:47
+
+
+
+ +

◆ DataBaseSingleton() [2/2]

+ +
+
+ + + + + +
+ + + + + + + +
DataBaseSingleton::DataBaseSingleton (const DataBaseSingleton & )
+
+privatedelete
+
+ +

Запрещает копирование экземпляра

+ +
+
+ +

◆ ~DataBaseSingleton()

+ +
+
+ + + + + +
+ + + + + + + +
DataBaseSingleton::~DataBaseSingleton ()
+
+privatedefault
+
+ +

Приватный деструктор.

+

Закрыт для предотвращения удаления экземпляра Singleton извне.

+ +
+
+

Member Function Documentation

+ +

◆ addFavoriteRation()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
bool DataBaseSingleton::addFavoriteRation (int userId,
const QVector< int > & productIds,
int calories,
int allCost,
int allWeight )
+
+ +

Добавление рациона в избранное.

+
Parameters
+ + + + + + +
userIdИдентификатор пользователя.
productIdsСписок идентификаторов продуктов.
caloriesОбщее количество калорий.
allCostОбщая стоимость рациона.
allWeightОбщий вес рациона.
+
+
+
Returns
true, если рацион добавлен, иначе false.
+
154 {
+
155 // Преобразуем QVector<int> в QVector<QString>
+
156 QVector<QString> productIdsStr;
+
157 for (int id : productIds) {
+
158 productIdsStr.append(QString::number(id)); // Преобразуем int в QString
+
159 }
+
160
+
161 // Преобразуем QVector<QString> в QStringList и объединяем в строку через запятую
+
162 QString productsStr = QStringList::fromVector(productIdsStr).join(",");
+
163
+
164 // Выполняем SQL-запрос
+
165 return executeQuery(
+
166 "INSERT INTO favorites (id_user, products, calories, all_cost, all_weight) "
+
167 "VALUES (:id_user, :products, :calories, :all_cost, :all_weight)",
+
168 {{":id_user", userId}, {":products", productsStr}, {":calories", calories},
+
169 {":all_cost", allCost}, {":all_weight", allWeight}}
+
170 ).exec();
+
171}
+
QSqlQuery executeQuery(const QString &query, const QVariantMap &params=QVariantMap())
Выполнение SQL-запроса с параметрами.
Definition databasesingleton.cpp:78
+
+
+
+ +

◆ addProduct()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool DataBaseSingleton::addProduct (int userId,
const QString & name,
int proteins,
int fatness,
int carbs,
int weight,
int cost,
int type )
+
+ +

Добавление продукта в базу данных.

+
Parameters
+ + + + + + + + + +
userIdИдентификатор пользователя.
nameНазвание продукта.
proteinsКоличество белков в продукте.
fatnessКоличество жиров в продукте.
carbsКоличество углеводов в продукте.
weightВес продукта.
costСтоимость продукта.
typeТип продукта.
+
+
+
Returns
true, если продукт добавлен, иначе false.
+
114 {
+
115 QSqlQuery query = executeQuery(
+
116 "INSERT INTO products (id_user, name, proteins, fatness, carbs, weight, cost, type) "
+
117 "VALUES (:id_user, :name, :proteins, :fatness, :carbs, :weight, :cost, :type)",
+
118 {
+
119 {":id_user", userId},
+
120 {":name", name},
+
121 {":proteins", proteins},
+
122 {":fatness", fatness},
+
123 {":carbs", carbs},
+
124 {":weight", weight},
+
125 {":cost", cost},
+
126 {":type", type}
+
127 }
+
128 );
+
129 return !query.lastError().isValid(); // Возвращаем true, если ошибок нет
+
130}
+
+
+
+ +

◆ addUser()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
bool DataBaseSingleton::addUser (const QString & name,
const QString & email,
const QString & password,
bool isAdmin = false )
+
+ +

Добавление нового пользователя в базу данных.

+
Parameters
+ + + + + +
nameИмя пользователя.
emailЭлектронная почта пользователя.
passwordПароль пользователя.
isAdminФлаг администратора (по умолчанию false).
+
+
+
Returns
true, если пользователь добавлен, иначе false.
+
100 {
+
101 QSqlQuery query = executeQuery(
+
102 "INSERT INTO users (name, email, pass, is_admin) VALUES (:name, :email, :pass, :is_admin)",
+
103 {{":name", name}, {":email", email}, {":pass", password}, {":is_admin", isAdmin}}
+
104 );
+
105
+
106 if (query.lastError().isValid()) {
+
107 qDebug() << "Ошибка SQL:" << query.lastError().text();
+
108 return false;
+
109 }
+
110 return true;
+
111}
+
+
+
+ +

◆ checkUserCredentials()

+ +
+
+ + + + + + + + + + + +
bool DataBaseSingleton::checkUserCredentials (const QString & login,
const QString & password )
+
+ +

Проверка учетных данных пользователя.

+
Parameters
+ + + +
loginЛогин пользователя.
passwordПароль пользователя.
+
+
+
Returns
true, если учетные данные корректны, иначе false.
+
92 {
+
93 QSqlQuery query = executeQuery(
+
94 "SELECT * FROM users WHERE email = :email AND pass = :pass",
+
95 {{":email", email}, {":pass", password}}
+
96 );
+
97 return query.next();
+
98}
+
+
+
+ +

◆ executeQuery()

+ +
+
+ + + + + + + + + + + +
QSqlQuery DataBaseSingleton::executeQuery (const QString & query,
const QVariantMap & params = QVariantMap() )
+
+ +

Выполнение SQL-запроса с параметрами.

+
Parameters
+ + + +
querySQL-запрос в виде строки.
paramsПараметры для SQL-запроса.
+
+
+
Returns
Результат выполнения запроса в виде QSqlQuery.
+
78 {
+
79 QSqlQuery query(db);
+
80 query.prepare(queryStr);
+
81 for (auto it = params.begin(); it != params.end(); ++it) {
+
82 query.bindValue(it.key(), it.value());
+
83 }
+
84 if (!query.exec()) {
+
85 qDebug() << "Ошибка запроса:" << query.lastError().text();
+
86 qDebug() << "Текст запроса:" << queryStr;
+
87 }
+
88 return query;
+
89}
+
+
+
+ +

◆ getFavoritesByUser()

+ +
+
+ + + + + + + +
QVector< QVariantMap > DataBaseSingleton::getFavoritesByUser (int userId)
+
+ +

Получение избранных рационов пользователя.

+
Parameters
+ + +
userIdИдентификатор пользователя.
+
+
+
Returns
Список избранных рационов пользователя.
+
173 {
+
174 QSqlQuery query = executeQuery(
+
175 "SELECT * FROM favorites WHERE id_user = :id_user",
+
176 {{":id_user", userId}}
+
177 );
+
178 QVector<QVariantMap> favorites;
+
179 while (query.next()) {
+
180 QVariantMap favorite;
+
181 favorite["products"] = query.value("products").toString();
+
182 favorite["calories"] = query.value("calories").toInt();
+
183 favorite["all_cost"] = query.value("all_cost").toInt();
+
184 favorite["all_weight"] = query.value("all_weight").toInt();
+
185 favorites.append(favorite);
+
186 }
+
187 return favorites;
+
188}
+
+
+
+ +

◆ getInstance()

+ +
+
+ + + + + +
+ + + + + + + +
DataBaseSingleton * DataBaseSingleton::getInstance ()
+
+static
+
+ +

Получение единственного экземпляра Singleton.

+
Returns
Экземпляр класса DataBaseSingleton.
+
10 {
+
11 if (!p_instance) {
+ +
13 destroyer.initialize(p_instance);
+
14 }
+
15 return p_instance;
+
16}
+
static SingletonDestroyer destroyer
Объект-разрушитель
Definition databasesingleton.h:46
+
DataBaseSingleton()
Приватный конструктор.
Definition databasesingleton.cpp:6
+
static DataBaseSingleton * p_instance
Единственный экземпляр класса
Definition databasesingleton.h:45
+
+
+
+ +

◆ getProductsByUser()

+ +
+
+ + + + + + + +
QVector< QVariantMap > DataBaseSingleton::getProductsByUser (int userId)
+
+ +

Получение продуктов для конкретного пользователя.

+
Parameters
+ + +
userIdИдентификатор пользователя.
+
+
+
Returns
Список продуктов, принадлежащих пользователю.
+
132 {
+
133 QSqlQuery query = executeQuery(
+
134 "SELECT * FROM products WHERE id_user = :id_user",
+
135 {{":id_user", userId}}
+
136 );
+
137 QVector<QVariantMap> products;
+
138 while (query.next()) {
+
139 QVariantMap product;
+
140 product["id"] = query.value("id").toInt();
+
141 product["name"] = query.value("name").toString();
+
142 product["proteins"] = query.value("proteins").toInt();
+
143 product["fatness"] = query.value("fatness").toInt();
+
144 product["carbs"] = query.value("carbs").toInt();
+
145 product["weight"] = query.value("weight").toInt();
+
146 product["cost"] = query.value("cost").toInt();
+
147 product["type"] = query.value("type").toInt();
+
148 products.append(product);
+
149 }
+
150 return products;
+
151}
+
+
+
+ +

◆ getStatistics()

+ +
+
+ + + + + + + +
QVariantMap DataBaseSingleton::getStatistics ()
+
+ +

Получение статистики.

+
Returns
Словарь с данными статистики.
+
199 {
+
200 QSqlQuery query = executeQuery("SELECT * FROM statistics");
+
201 QVariantMap stats;
+
202 if (query.next()) {
+
203 stats["registrations"] = query.value("count_registrations").toInt();
+
204 stats["visits"] = query.value("count_visits").toInt();
+
205 stats["generations"] = query.value("count_generations").toInt();
+
206 }
+
207 return stats;
+
208}
+
+
+
+ +

◆ initialize()

+ +
+
+ + + + + + + +
bool DataBaseSingleton::initialize (const QString & databaseName)
+
+ +

Инициализация базы данных.

+

Создает соединение с базой данных и выполняет необходимые операции для создания таблиц.

+
Parameters
+ + +
databaseNameИмя файла базы данных.
+
+
+
Returns
true, если инициализация успешна, иначе false.
+
18 {
+
19 db.setDatabaseName(databaseName);
+
20 if (!db.open()) {
+
21 qDebug() << "Ошибка подключения:" << db.lastError().text();
+
22 return false;
+
23 }
+
24
+
25 // Создание таблицы users
+
26 QSqlQuery query(db);
+
27 bool success = query.exec(
+
28 "CREATE TABLE IF NOT EXISTS users ("
+
29 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+
30 "name VARCHAR(20) NOT NULL, "
+
31 "email VARCHAR(50) NOT NULL , "
+
32 "pass VARCHAR(20) NOT NULL, "
+
33 "is_admin BOOLEAN DEFAULT FALSE)"
+
34 );
+
35
+
36 success &= query.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email)");
+
37
+
38 // Создание таблицы products
+
39 success &= query.exec(
+
40 "CREATE TABLE IF NOT EXISTS products ("
+
41 "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+
42 "id_user INTEGER NOT NULL, "
+
43 "name VARCHAR(50) NOT NULL, "
+
44 "proteins INTEGER NOT NULL, "
+
45 "fatness INTEGER NOT NULL, "
+
46 "carbs INTEGER NOT NULL, "
+
47 "weight INTEGER NOT NULL, "
+
48 "cost INTEGER NOT NULL, "
+
49 "type INTEGER NOT NULL, "
+
50 "FOREIGN KEY(id_user) REFERENCES users(id))"
+
51 );
+
52
+
53 // Создание таблицы favorites
+
54 success &= query.exec(
+
55 "CREATE TABLE IF NOT EXISTS favorites ("
+
56 "id_user INTEGER NOT NULL, "
+
57 "products TEXT NOT NULL, " // Хранение массива ID продуктов в виде строки
+
58 "calories INTEGER NOT NULL, "
+
59 "all_cost INTEGER NOT NULL, "
+
60 "all_weight INTEGER NOT NULL, "
+
61 "FOREIGN KEY(id_user) REFERENCES users(id))"
+
62 );
+
63
+
64 // Создание таблицы statistics
+
65 success &= query.exec(
+
66 "CREATE TABLE IF NOT EXISTS statistics ("
+
67 "count_registrations INTEGER DEFAULT 0, "
+
68 "count_visits INTEGER DEFAULT 0, "
+
69 "count_generations INTEGER DEFAULT 0)"
+
70 );
+
71
+
72 // Инициализация статистики, если таблица пуста
+
73 query.exec("INSERT OR IGNORE INTO statistics (count_registrations, count_visits, count_generations) VALUES (0, 0, 0)");
+
74 query.exec("INSERT OR IGNORE INTO users(name, email, pass, is_admin) VALUES ('NewDev','new@devs.su','admin',true)");
+
75 return success;
+
76}
+
+
+
+ +

◆ operator=()

+ +
+
+ + + + + +
+ + + + + + + +
DataBaseSingleton & DataBaseSingleton::operator= (const DataBaseSingleton & )
+
+privatedelete
+
+ +

Запрещает присваивание

+ +
+
+ +

◆ updateStatistics()

+ +
+
+ + + + + + + + + + + + + + + + +
bool DataBaseSingleton::updateStatistics (int registrations,
int visits,
int generations )
+
+ +

Обновление статистики.

+
Parameters
+ + + + +
registrationsКоличество регистраций.
visitsКоличество посещений.
generationsКоличество генераций.
+
+
+
Returns
true, если статистика обновлена, иначе false.
+
191 {
+
192 return executeQuery(
+
193 "UPDATE statistics SET count_registrations = :registrations, "
+
194 "count_visits = :visits, count_generations = :generations",
+
195 {{":registrations", registrations}, {":visits", visits}, {":generations", generations}}
+
196 ).exec();
+
197}
+
+
+
+

Friends And Related Symbol Documentation

+ +

◆ SingletonDestroyer

+ +
+
+ + + + + +
+ + + + +
friend class SingletonDestroyer
+
+friend
+
+ +

Дружественный класс для доступа к деструктору

+ +
+
+

Member Data Documentation

+ +

◆ db

+ +
+
+ + + + + +
+ + + + +
QSqlDatabase DataBaseSingleton::db
+
+private
+
+ +

Объект базы данных

+ +
+
+ +

◆ destroyer

+ +
+
+ + + + + +
+ + + + +
SingletonDestroyer DataBaseSingleton::destroyer
+
+staticprivate
+
+ +

Объект-разрушитель

+ +
+
+ +

◆ p_instance

+ +
+
+ + + + + +
+ + + + +
DataBaseSingleton * DataBaseSingleton::p_instance = nullptr
+
+staticprivate
+
+ +

Единственный экземпляр класса

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/doxygen/html/class_data_base_singleton.js b/docs/doxygen/html/class_data_base_singleton.js new file mode 100644 index 0000000..e7a80d8 --- /dev/null +++ b/docs/doxygen/html/class_data_base_singleton.js @@ -0,0 +1,22 @@ +var class_data_base_singleton = +[ + [ "DataBaseSingleton", "class_data_base_singleton.html#aa289e69de3195fef9593052246b9b1b0", null ], + [ "DataBaseSingleton", "class_data_base_singleton.html#abe02a9a0f33a2664ba969d20d777d4d9", null ], + [ "~DataBaseSingleton", "class_data_base_singleton.html#aa0d2615a21bdb8d7367a513c802e32c1", null ], + [ "addFavoriteRation", "class_data_base_singleton.html#a515aed6cbbb34fe71f254943a70d504b", null ], + [ "addProduct", "class_data_base_singleton.html#a3fe2a5e1f41a408023066e8caf63b523", null ], + [ "addUser", "class_data_base_singleton.html#af17db97dfc40b0fa48b3ed9abeacca76", null ], + [ "checkUserCredentials", "class_data_base_singleton.html#a51bd7dc4507c5f3d04a2903899e13d42", null ], + [ "executeQuery", "class_data_base_singleton.html#a4aa9edfd87be83120492e7b5c8de6151", null ], + [ "getFavoritesByUser", "class_data_base_singleton.html#afee32779221eaa5f92eb0c8a8666bb50", null ], + [ "getInstance", "class_data_base_singleton.html#ae1a24c20c524fd67554e1ffe66319ede", null ], + [ "getProductsByUser", "class_data_base_singleton.html#a84fe7936dd15c077eff86d7884ce3049", null ], + [ "getStatistics", "class_data_base_singleton.html#aad20b90cdb02aab3df1f27a9e4f882a3", null ], + [ "initialize", "class_data_base_singleton.html#a59bda63308000a018c5bdc1989582e50", null ], + [ "operator=", "class_data_base_singleton.html#af310f74ceebe21ef29454dd7eccac19a", null ], + [ "updateStatistics", "class_data_base_singleton.html#ab2877d5184cd7af28f1ea3b31f523280", null ], + [ "SingletonDestroyer", "class_data_base_singleton.html#aa93ce997b9645496c0e17460fba08432", null ], + [ "db", "class_data_base_singleton.html#a929da7bbfe9e068b4c3bc5a095e6156a", null ], + [ "destroyer", "class_data_base_singleton.html#a414f1ff51603535a839d5fc2e24b65e0", null ], + [ "p_instance", "class_data_base_singleton.html#abf86267afcfebbe05658438ff0ccfdfd", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_data_base_singleton__coll__graph.dot b/docs/doxygen/html/class_data_base_singleton__coll__graph.dot new file mode 100644 index 0000000..9be96b5 --- /dev/null +++ b/docs/doxygen/html/class_data_base_singleton__coll__graph.dot @@ -0,0 +1,12 @@ +digraph "DataBaseSingleton" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="DataBaseSingleton",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Класс для работы с базой данных."]; + Node1 -> Node1 [id="edge1_Node000001_Node000001",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; + Node2 -> Node1 [id="edge2_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" destroyer",fontcolor="grey" ]; + Node2 [id="Node000002",label="SingletonDestroyer",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",URL="$class_singleton_destroyer.html",tooltip="Класс для разрушения экземпляра Singleton."]; + Node1 -> Node2 [id="edge3_Node000002_Node000001",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; +} diff --git a/docs/doxygen/html/class_data_base_singleton__coll__graph.map b/docs/doxygen/html/class_data_base_singleton__coll__graph.map new file mode 100644 index 0000000..d2974af --- /dev/null +++ b/docs/doxygen/html/class_data_base_singleton__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/doxygen/html/class_data_base_singleton__coll__graph.md5 b/docs/doxygen/html/class_data_base_singleton__coll__graph.md5 new file mode 100644 index 0000000..027ec47 --- /dev/null +++ b/docs/doxygen/html/class_data_base_singleton__coll__graph.md5 @@ -0,0 +1 @@ +f51591212ef30ef52da2a8ec5f53a275 \ No newline at end of file diff --git a/docs/doxygen/html/class_data_base_singleton__coll__graph.png b/docs/doxygen/html/class_data_base_singleton__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c5bc9a87f3f2dbdd29dbe806ddff10b78581fa4f GIT binary patch literal 4086 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/class_my_tcp_server-members.html b/docs/doxygen/html/class_my_tcp_server-members.html new file mode 100644 index 0000000..8bbfdd9 --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server-members.html @@ -0,0 +1,130 @@ + + + + + + + +My Project: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
MyTcpServer Member List
+
+
+ +

This is the complete list of members for MyTcpServer, including all inherited members.

+ + + + + + + + + + +
mSocketDescriptorsMyTcpServerprivate
mTcpServerMyTcpServerprivate
mTcpSocketMyTcpServerprivate
MyTcpServer(QObject *parent=nullptr)MyTcpServerexplicit
server_statusMyTcpServerprivate
slotClientDisconnected()MyTcpServerslot
slotNewConnection()MyTcpServerslot
slotServerRead()MyTcpServerslot
~MyTcpServer()MyTcpServer
+
+ + + + diff --git a/docs/doxygen/html/class_my_tcp_server.html b/docs/doxygen/html/class_my_tcp_server.html new file mode 100644 index 0000000..5b5800c --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server.html @@ -0,0 +1,465 @@ + + + + + + + +My Project: MyTcpServer Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
MyTcpServer Class Reference
+
+
+ +

#include <mytcpserver.h>

+
+Inheritance diagram for MyTcpServer:
+
+
Inheritance graph
+ + + + + +
[legend]
+
+Collaboration diagram for MyTcpServer:
+
+
Collaboration graph
+ + + + + +
[legend]
+ + + + + + + + +

+Public Slots

void slotNewConnection ()
 
void slotClientDisconnected ()
 
void slotServerRead ()
 
+ + + + + +

+Public Member Functions

 MyTcpServer (QObject *parent=nullptr)
 
 ~MyTcpServer ()
 
+ + + + + + + + + +

+Private Attributes

QTcpServer * mTcpServer
 
QTcpSocket * mTcpSocket
 
int server_status
 
QMap< int, QTcpSocket * > mSocketDescriptors
 
+

Constructor & Destructor Documentation

+ +

◆ MyTcpServer()

+ +
+
+ + + + + +
+ + + + + + + +
MyTcpServer::MyTcpServer (QObject * parent = nullptr)
+
+explicit
+
+
14 : QObject(parent)
+
15{
+
16 mTcpServer = new QTcpServer(this);
+
17
+
18 connect(mTcpServer, &QTcpServer::newConnection, this, &MyTcpServer::slotNewConnection);
+
19
+
20 if (!mTcpServer->listen(QHostAddress::Any, 33333)) {
+
21 qDebug() << "server is not started";
+
22 } else {
+
23 server_status = 1;
+
24 qDebug() << "server is started";
+
25 }
+
26}
+
void slotNewConnection()
Definition mytcpserver.cpp:28
+
QTcpServer * mTcpServer
Definition mytcpserver.h:22
+
int server_status
Definition mytcpserver.h:24
+
+
+
+ +

◆ ~MyTcpServer()

+ +
+
+ + + + + + + +
MyTcpServer::~MyTcpServer ()
+
+
8{
+
9 mTcpServer->close();
+
10 server_status = 0;
+
11 qDeleteAll(mSocketDescriptors); // Удаляем все сокеты
+
12}
+
QMap< int, QTcpSocket * > mSocketDescriptors
Definition mytcpserver.h:25
+
+
+
+

Member Function Documentation

+ +

◆ slotClientDisconnected

+ +
+
+ + + + + +
+ + + + + + + +
void MyTcpServer::slotClientDisconnected ()
+
+slot
+
+
62{
+
63 QTcpSocket *clientSocket = qobject_cast<QTcpSocket*>(sender());
+
64 if (!clientSocket) {
+
65 return;
+
66 }
+
67
+
68 // Получаем дескриптор сокета из контейнера
+
69 int socketDescriptor = -1;
+
70 for (auto it = mSocketDescriptors.begin(); it != mSocketDescriptors.end(); ++it) {
+
71 if (it.value() == clientSocket) {
+
72 socketDescriptor = it.key();
+
73 break;
+
74 }
+
75 }
+
76
+
77 if (socketDescriptor != -1) {
+
78 mSocketDescriptors.remove(socketDescriptor); // Удаляем сокет из контейнера
+
79 qDebug() << "Client disconnected, socket descriptor:" << socketDescriptor;
+
80 } else {
+
81 qDebug() << "Client disconnected, but socket descriptor not found!";
+
82 }
+
83
+
84 clientSocket->deleteLater(); // Удаляем сокет
+
85}
+
+
+
+ +

◆ slotNewConnection

+ +
+
+ + + + + +
+ + + + + + + +
void MyTcpServer::slotNewConnection ()
+
+slot
+
+
29{
+
30 if (server_status == 1) {
+
31 QTcpSocket *clientSocket = mTcpServer->nextPendingConnection();
+
32 int socketDescriptor = clientSocket->socketDescriptor(); // Получаем дескриптор сокета
+
33
+
34 if (socketDescriptor == -1) {
+
35 qDebug() << "Invalid socket descriptor!";
+
36 clientSocket->deleteLater(); // Удаляем сокет, если дескриптор недействителен
+
37 return;
+
38 }
+
39
+
40 mSocketDescriptors.insert(socketDescriptor, clientSocket); // Сохраняем сокет в контейнере
+
41
+
42 qDebug() << "New connection, socket descriptor:" << socketDescriptor;
+
43
+
44 connect(clientSocket, &QTcpSocket::readyRead, this, &MyTcpServer::slotServerRead);
+
45 connect(clientSocket, &QTcpSocket::disconnected, this, &MyTcpServer::slotClientDisconnected);
+
46 }
+
47}
+
void slotClientDisconnected()
Definition mytcpserver.cpp:61
+
void slotServerRead()
Definition mytcpserver.cpp:49
+
+
+
+ +

◆ slotServerRead

+ +
+
+ + + + + +
+ + + + + + + +
void MyTcpServer::slotServerRead ()
+
+slot
+
+
49 {
+
50 QTcpSocket *clientSocket = qobject_cast<QTcpSocket*>(sender());
+
51 if (!clientSocket) return;
+
52
+
53 QByteArray data = clientSocket->readAll();
+
54 qDebug() << "Received data:" << data;
+
55
+
56 // Обрабатываем данные сразу, без накопления
+
57 QByteArray response = parsing(QString(data).trimmed(), clientSocket->socketDescriptor());
+
58 clientSocket->write(response);
+
59}
+
QByteArray parsing(QString input, int socdes)
Definition func2serv.cpp:18
+
+
+
+

Member Data Documentation

+ +

◆ mSocketDescriptors

+ +
+
+ + + + + +
+ + + + +
QMap<int, QTcpSocket*> MyTcpServer::mSocketDescriptors
+
+private
+
+ +
+
+ +

◆ mTcpServer

+ +
+
+ + + + + +
+ + + + +
QTcpServer* MyTcpServer::mTcpServer
+
+private
+
+ +
+
+ +

◆ mTcpSocket

+ +
+
+ + + + + +
+ + + + +
QTcpSocket* MyTcpServer::mTcpSocket
+
+private
+
+ +
+
+ +

◆ server_status

+ +
+
+ + + + + +
+ + + + +
int MyTcpServer::server_status
+
+private
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/doxygen/html/class_my_tcp_server.js b/docs/doxygen/html/class_my_tcp_server.js new file mode 100644 index 0000000..5bb0ff7 --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server.js @@ -0,0 +1,12 @@ +var class_my_tcp_server = +[ + [ "MyTcpServer", "class_my_tcp_server.html#acf367c4695b4d160c7a2d25c2afaaec4", null ], + [ "~MyTcpServer", "class_my_tcp_server.html#ab39e651ff7c37c152215c02c225e79ef", null ], + [ "slotClientDisconnected", "class_my_tcp_server.html#a3e040c49dbefd65b9a58ab662fc9f7a2", null ], + [ "slotNewConnection", "class_my_tcp_server.html#a0ba7316ffe1a26c57fabde9e74b6c8dc", null ], + [ "slotServerRead", "class_my_tcp_server.html#ab4a64d2eab985d723090963f5c8a2882", null ], + [ "mSocketDescriptors", "class_my_tcp_server.html#aae9c5addbbedcfa39ccbe55204f473a3", null ], + [ "mTcpServer", "class_my_tcp_server.html#a7d854875e1e02887023ec9aac1a1542c", null ], + [ "mTcpSocket", "class_my_tcp_server.html#ab55c030e6eb6cf5d1acfe6d7d2bf0ed1", null ], + [ "server_status", "class_my_tcp_server.html#ae0dc69dfef4f9fc3a5f031f4152e4f91", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_my_tcp_server__coll__graph.dot b/docs/doxygen/html/class_my_tcp_server__coll__graph.dot new file mode 100644 index 0000000..dec6b4d --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server__coll__graph.dot @@ -0,0 +1,10 @@ +digraph "MyTcpServer" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="MyTcpServer",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QObject",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/class_my_tcp_server__coll__graph.map b/docs/doxygen/html/class_my_tcp_server__coll__graph.map new file mode 100644 index 0000000..71cc0a2 --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/doxygen/html/class_my_tcp_server__coll__graph.md5 b/docs/doxygen/html/class_my_tcp_server__coll__graph.md5 new file mode 100644 index 0000000..71b2b49 --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server__coll__graph.md5 @@ -0,0 +1 @@ +53c879b120a1522ccbec99d77f295aa7 \ No newline at end of file diff --git a/docs/doxygen/html/class_my_tcp_server__coll__graph.png b/docs/doxygen/html/class_my_tcp_server__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..628ddc51b02baa597d12c8fdd171bc25ff3372da GIT binary patch literal 1354 zcmb`{YgEz)7zXfvrPT5ksaa}hZHG!r%uAX}lMZO8VJdXWj6(t%OCoY0fGhS_I>C5z3=n&{q*FWLkW!^o6$lMIHTa%_@go0;>dYAwQcWOj zP=9Aa<|ZUn-FTlhJwuI)_f(b-%ZHy>?Qf^1DN~m`cr0p~8Q0VX8DaCQ)$_P|M)NY{ z+Eha8$E@^Z1#b9MeYGSIc$siW3E{NCUf-PFzz)(`0kDDmcx?0*6Lw!8RxFXcHg~Ns z7$_f?mUA>^85(?u_kFL7e>*+2z_Yn49M*Y$$kT!&CKG!n`J*uv)5L9uOLHvF)4{Vc z|LQv?acLsaLhV@_xm*bDE)MJMm$^~gz9=m1@;(?ZaGBU@?1crUHt{YE(`Pmed7(0* zB-i=hyv0W2-o2behe-IyJ<|M|=0e+IJE7rV(^6=265p_uGDMJyY71?rZDyc4as(L1uPCFVv|cKh5@ z%}%+&gXb}awm(YF>#n6CGSUz9)M)1?+k;AkO&QDm~b;f16XY*hP} zJj%J&W-h-x<*|H@bcr;A6qs@@n^rD2x(7O^oW`O_V>e`g19PF#u@!Q!#n*YnIvy2` z_+8kb^=Vqy$^p{y3&A=^>q}srrS*y*u5)`G^$J1nvST(ia&D}ul&^SJm!pEMn~R?H zSbpc{G{EeJ*jbc7xBTC3Jy@-n{@#z8eg0E+0Z}|Z^VxG$udg#XN?p!bH99>;3pc^H zr1TjW>A6naFRL)$|h>8GPJS=#YbiI{f9?P_NfyS*Qo*hsgsjUqpC#}d3AWk`I_FkuI% z$bM0#3xlss;zXF0_toYb7k4{Uun2ACdlsc4beKT%=48v1E|KhzEA~dde|TuDGxnVh zWMC}0fK!{L(#Q_8Aj~`{+V8p==uDBk(o Node1 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QObject",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/class_my_tcp_server__inherit__graph.map b/docs/doxygen/html/class_my_tcp_server__inherit__graph.map new file mode 100644 index 0000000..71cc0a2 --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/doxygen/html/class_my_tcp_server__inherit__graph.md5 b/docs/doxygen/html/class_my_tcp_server__inherit__graph.md5 new file mode 100644 index 0000000..71b2b49 --- /dev/null +++ b/docs/doxygen/html/class_my_tcp_server__inherit__graph.md5 @@ -0,0 +1 @@ +53c879b120a1522ccbec99d77f295aa7 \ No newline at end of file diff --git a/docs/doxygen/html/class_my_tcp_server__inherit__graph.png b/docs/doxygen/html/class_my_tcp_server__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..628ddc51b02baa597d12c8fdd171bc25ff3372da GIT binary patch literal 1354 zcmb`{YgEz)7zXfvrPT5ksaa}hZHG!r%uAX}lMZO8VJdXWj6(t%OCoY0fGhS_I>C5z3=n&{q*FWLkW!^o6$lMIHTa%_@go0;>dYAwQcWOj zP=9Aa<|ZUn-FTlhJwuI)_f(b-%ZHy>?Qf^1DN~m`cr0p~8Q0VX8DaCQ)$_P|M)NY{ z+Eha8$E@^Z1#b9MeYGSIc$siW3E{NCUf-PFzz)(`0kDDmcx?0*6Lw!8RxFXcHg~Ns z7$_f?mUA>^85(?u_kFL7e>*+2z_Yn49M*Y$$kT!&CKG!n`J*uv)5L9uOLHvF)4{Vc z|LQv?acLsaLhV@_xm*bDE)MJMm$^~gz9=m1@;(?ZaGBU@?1crUHt{YE(`Pmed7(0* zB-i=hyv0W2-o2behe-IyJ<|M|=0e+IJE7rV(^6=265p_uGDMJyY71?rZDyc4as(L1uPCFVv|cKh5@ z%}%+&gXb}awm(YF>#n6CGSUz9)M)1?+k;AkO&QDm~b;f16XY*hP} zJj%J&W-h-x<*|H@bcr;A6qs@@n^rD2x(7O^oW`O_V>e`g19PF#u@!Q!#n*YnIvy2` z_+8kb^=Vqy$^p{y3&A=^>q}srrS*y*u5)`G^$J1nvST(ia&D}ul&^SJm!pEMn~R?H zSbpc{G{EeJ*jbc7xBTC3Jy@-n{@#z8eg0E+0Z}|Z^VxG$udg#XN?p!bH99>;3pc^H zr1TjW>A6naFRL)$|h>8GPJS=#YbiI{f9?P_NfyS*Qo*hsgsjUqpC#}d3AWk`I_FkuI% z$bM0#3xlss;zXF0_toYb7k4{Uun2ACdlsc4beKT%=48v1E|KhzEA~dde|TuDGxnVh zWMC}0fK!{L(#Q_8Aj~`{+V8p==uDBk(o + + + + + + +My Project: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SingletonDestroyer Member List
+
+
+ +

This is the complete list of members for SingletonDestroyer, including all inherited members.

+ + + + +
initialize(DataBaseSingleton *p)SingletonDestroyer
p_instanceSingletonDestroyerprivate
~SingletonDestroyer()SingletonDestroyer
+
+ + + + diff --git a/docs/doxygen/html/class_singleton_destroyer.html b/docs/doxygen/html/class_singleton_destroyer.html new file mode 100644 index 0000000..a775e78 --- /dev/null +++ b/docs/doxygen/html/class_singleton_destroyer.html @@ -0,0 +1,238 @@ + + + + + + + +My Project: SingletonDestroyer Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SingletonDestroyer Class Reference
+
+
+ +

Класс для разрушения экземпляра Singleton. + More...

+ +

#include <databasesingleton.h>

+
+Collaboration diagram for SingletonDestroyer:
+
+
Collaboration graph
+ + + + + + + +
[legend]
+ + + + + + + + +

+Public Member Functions

 ~SingletonDestroyer ()
 Деструктор для удаления Singleton.
 
void initialize (DataBaseSingleton *p)
 Инициализация указателя на экземпляр Singleton.
 
+ + + + +

+Private Attributes

DataBaseSingletonp_instance
 Указатель на экземпляр Singleton.
 
+

Detailed Description

+

Класс для разрушения экземпляра Singleton.

+

Используется для корректного удаления экземпляра DataBaseSingleton.

+

Constructor & Destructor Documentation

+ +

◆ ~SingletonDestroyer()

+ +
+
+ + + + + + + +
SingletonDestroyer::~SingletonDestroyer ()
+
+ +

Деструктор для удаления Singleton.

+

Уничтожает экземпляр Singleton, если он существует.

+
211{ delete p_instance; }
+
DataBaseSingleton * p_instance
Указатель на экземпляр Singleton.
Definition databasesingleton.h:20
+
+
+
+

Member Function Documentation

+ +

◆ initialize()

+ +
+
+ + + + + + + +
void SingletonDestroyer::initialize (DataBaseSingleton * p)
+
+ +

Инициализация указателя на экземпляр Singleton.

+
Parameters
+ + +
pУказатель на экземпляр Singleton.
+
+
+
212{ p_instance = p; }
+
+
+
+

Member Data Documentation

+ +

◆ p_instance

+ +
+
+ + + + + +
+ + + + +
DataBaseSingleton* SingletonDestroyer::p_instance
+
+private
+
+ +

Указатель на экземпляр Singleton.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/doxygen/html/class_singleton_destroyer.js b/docs/doxygen/html/class_singleton_destroyer.js new file mode 100644 index 0000000..6b6d4c0 --- /dev/null +++ b/docs/doxygen/html/class_singleton_destroyer.js @@ -0,0 +1,6 @@ +var class_singleton_destroyer = +[ + [ "~SingletonDestroyer", "class_singleton_destroyer.html#a8ac3166871f4c5411edfdb13594dee15", null ], + [ "initialize", "class_singleton_destroyer.html#abcaf525b6af81fbb5717c7dae73af8ec", null ], + [ "p_instance", "class_singleton_destroyer.html#a66a75552c83eb8515e6d458d7a6b0178", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_singleton_destroyer__coll__graph.dot b/docs/doxygen/html/class_singleton_destroyer__coll__graph.dot new file mode 100644 index 0000000..c4aed58 --- /dev/null +++ b/docs/doxygen/html/class_singleton_destroyer__coll__graph.dot @@ -0,0 +1,12 @@ +digraph "SingletonDestroyer" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="SingletonDestroyer",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Класс для разрушения экземпляра Singleton."]; + Node2 -> Node1 [id="edge1_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; + Node2 [id="Node000002",label="DataBaseSingleton",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",URL="$class_data_base_singleton.html",tooltip="Класс для работы с базой данных."]; + Node2 -> Node2 [id="edge2_Node000002_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; + Node1 -> Node2 [id="edge3_Node000002_Node000001",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" destroyer",fontcolor="grey" ]; +} diff --git a/docs/doxygen/html/class_singleton_destroyer__coll__graph.map b/docs/doxygen/html/class_singleton_destroyer__coll__graph.map new file mode 100644 index 0000000..b1eec0b --- /dev/null +++ b/docs/doxygen/html/class_singleton_destroyer__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/doxygen/html/class_singleton_destroyer__coll__graph.md5 b/docs/doxygen/html/class_singleton_destroyer__coll__graph.md5 new file mode 100644 index 0000000..8e94c1f --- /dev/null +++ b/docs/doxygen/html/class_singleton_destroyer__coll__graph.md5 @@ -0,0 +1 @@ +1993e478c3735cf5441f97cd207bd4be \ No newline at end of file diff --git a/docs/doxygen/html/class_singleton_destroyer__coll__graph.png b/docs/doxygen/html/class_singleton_destroyer__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c569cc108164162ef60f267b2d2263997f8261b7 GIT binary patch literal 4038 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/classes.html b/docs/doxygen/html/classes.html new file mode 100644 index 0000000..cc71e04 --- /dev/null +++ b/docs/doxygen/html/classes.html @@ -0,0 +1,130 @@ + + + + + + + +My Project: Class Index + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
D | M | S
+ +
+
+ + + + diff --git a/docs/doxygen/html/clipboard.js b/docs/doxygen/html/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/docs/doxygen/html/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/doxygen/html/cookie.js b/docs/doxygen/html/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs/doxygen/html/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/doxygen/html/databasesingleton_8cpp.html b/docs/doxygen/html/databasesingleton_8cpp.html new file mode 100644 index 0000000..f7c6e67 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8cpp.html @@ -0,0 +1,142 @@ + + + + + + + +My Project: server/databasesingleton.cpp File Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
databasesingleton.cpp File Reference
+
+
+
#include "databasesingleton.h"
+
+Include dependency graph for databasesingleton.cpp:
+
+
+ + + + + + + + + + + + + + + + + +
+
+
+ + + + diff --git a/docs/doxygen/html/databasesingleton_8cpp__incl.dot b/docs/doxygen/html/databasesingleton_8cpp__incl.dot new file mode 100644 index 0000000..3a6e95f --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8cpp__incl.dot @@ -0,0 +1,22 @@ +digraph "server/databasesingleton.cpp" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/databasesingleton.cpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="databasesingleton.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8h.html",tooltip=" "]; + Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node4 [id="edge3_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node5 [id="edge4_Node000002_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node6 [id="edge5_Node000002_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node7 [id="edge6_Node000002_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node8 [id="edge7_Node000002_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/databasesingleton_8cpp__incl.map b/docs/doxygen/html/databasesingleton_8cpp__incl.map new file mode 100644 index 0000000..56210a4 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8cpp__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/databasesingleton_8cpp__incl.md5 b/docs/doxygen/html/databasesingleton_8cpp__incl.md5 new file mode 100644 index 0000000..0d34180 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8cpp__incl.md5 @@ -0,0 +1 @@ +fadf06f05eaec8e7270b251abf5b030a \ No newline at end of file diff --git a/docs/doxygen/html/databasesingleton_8cpp__incl.png b/docs/doxygen/html/databasesingleton_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..63aa4f6bd405c10441588080625fcc6887fc8685 GIT binary patch literal 9307 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 KvenY&pZ*KZ8-dLL literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/databasesingleton_8h.html b/docs/doxygen/html/databasesingleton_8h.html new file mode 100644 index 0000000..22b81eb --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h.html @@ -0,0 +1,173 @@ + + + + + + + +My Project: server/databasesingleton.h File Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
databasesingleton.h File Reference
+
+
+
#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QSqlError>
+#include <QDebug>
+#include <QVariantMap>
+#include <QVector>
+
+Include dependency graph for databasesingleton.h:
+
+
+ + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  SingletonDestroyer
 Класс для разрушения экземпляра Singleton. More...
 
class  DataBaseSingleton
 Класс для работы с базой данных. More...
 
+
+
+ + + + diff --git a/docs/doxygen/html/databasesingleton_8h.js b/docs/doxygen/html/databasesingleton_8h.js new file mode 100644 index 0000000..90d4ab9 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h.js @@ -0,0 +1,5 @@ +var databasesingleton_8h = +[ + [ "SingletonDestroyer", "class_singleton_destroyer.html", "class_singleton_destroyer" ], + [ "DataBaseSingleton", "class_data_base_singleton.html", "class_data_base_singleton" ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/databasesingleton_8h__dep__incl.dot b/docs/doxygen/html/databasesingleton_8h__dep__incl.dot new file mode 100644 index 0000000..0a1d0a6 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h__dep__incl.dot @@ -0,0 +1,14 @@ +digraph "server/databasesingleton.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/databasesingleton.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="server/databasesingleton.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8cpp.html",tooltip=" "]; + Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="server/func2serv.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8cpp.html",tooltip=" "]; + Node1 -> Node4 [id="edge3_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="server/main.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$main_8cpp.html",tooltip=" "]; +} diff --git a/docs/doxygen/html/databasesingleton_8h__dep__incl.map b/docs/doxygen/html/databasesingleton_8h__dep__incl.map new file mode 100644 index 0000000..70f21b1 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/doxygen/html/databasesingleton_8h__dep__incl.md5 b/docs/doxygen/html/databasesingleton_8h__dep__incl.md5 new file mode 100644 index 0000000..f16f087 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h__dep__incl.md5 @@ -0,0 +1 @@ +9f634229c79ba6f7be2187e8d25ca871 \ No newline at end of file diff --git a/docs/doxygen/html/databasesingleton_8h__dep__incl.png b/docs/doxygen/html/databasesingleton_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..4932896075a2a8a8de53b491ed00b5be8f520a99 GIT binary patch literal 4714 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 SEWqUvh0X&Qq+G-L^?v|aM`_Fe literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/databasesingleton_8h__incl.dot b/docs/doxygen/html/databasesingleton_8h__incl.dot new file mode 100644 index 0000000..9dc65ef --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h__incl.dot @@ -0,0 +1,20 @@ +digraph "server/databasesingleton.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/databasesingleton.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge6_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/databasesingleton_8h__incl.map b/docs/doxygen/html/databasesingleton_8h__incl.map new file mode 100644 index 0000000..ae89088 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/databasesingleton_8h__incl.md5 b/docs/doxygen/html/databasesingleton_8h__incl.md5 new file mode 100644 index 0000000..0a7bff7 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h__incl.md5 @@ -0,0 +1 @@ +101d676215380d9a5c0315f93c82dba3 \ No newline at end of file diff --git a/docs/doxygen/html/databasesingleton_8h__incl.png b/docs/doxygen/html/databasesingleton_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee6779c014455e339d831ba0897d9925b089ae3 GIT binary patch literal 7983 zcmai3byQSglqUs-kQ7A1Acsae6$uIH?i!F9x`tLd6^3p`x)h{SQihW5lhr565 zIlE`~%z5w4%z5vAzgxe1zjwow6=m>2lpquo6nxqDlBy^uXfWWr1NI}}99A~>4!Arr zm6wr3xqtX%HRZ>lpwO(yO1@S1NZXzBN>V>fUOe3QDzg9Gj|(=$;w9nTu+Hg`;}Md~ zdKN&zZ#rtLzYC=t<)ZwsO!r#HtBZp1*nBh$O1c3JD`WW8Z(i|y4&Uw|xQ4g5W5b*; zoSf$qKPlmce7gJn29%A!RZzoKF}+A_f8EoArk=fJL2q5t{?>P06f2Uei^A-GIgvaH z6GAalIDEpY%}JI-=}Of_TAZDoy*{pIKlkvfL+ZmQDur1%B6-I_}5N`iN+vy>N1D zgNu*3jr$3ged?5$WwkFzM=VGzkk$r z=2Jhe!0gJH-?Z$mz{+bf6?VVLdmmlS>~mxPt<%pGAGv?c+{uk(gqkV1*lvwe#7&SN zZP=*AHAys&-ZF^JcjJcfF06mvL3}yCw5n8>RcB5J;$jft%du1-JBt1dNi}7a)@Hn0 zAAx3bnZt~-d)X(hKUqkTcTqebD2lg}WGkSfi!^7LxrB5!@@1Zr)$iOyn?Cv_JrT)e ztX9*do|`4z;Y5aUVU?d0$Qb^$N#Yt07FbG}IY*&(Y5PwLJ4&ts<}TCe9?hMlQnY@} zlBM;k&E?*+W{E@t!d~8q^}`vhJP2G#U(?n^0rI5)owJLyytK5mDLZ?~KJTAzS@T?$ z;kLW8b#df|9;h0k(9Pl8K^f{8E=Lmp1BKcPTM(c-M`}H9R}x5N3u$1cuv#fONMQyJ zrFZX2@}3+m{eL5%lcKAmV{y@VSDvGZ)RiJR44tXq(PSRRjG-XTR%ICa){_Or-}*H- zW;}VsKp-iIh=}v>oRsTT+lC26&+R%-Y7+<@zL~qKv^xoB;_i!Ug^}RRbI#h1Z ziW1)5w>%oioOj8%uMw}fEj7TbIW6R%-t=AWD?IwuRkON#?-4PP;T^YYzsm}4CM?{- zQt38UNSjROisTBgGRO_F{`5NFDU&4{7V19wW3}RWYpiV1KE0M>zhUTl1`RaJr^K?e^pf2l3X8VU60l7`- zQr8q`s$p1g-t51AL#+Myg!yDlVL6+gvDcXE_UGAV0G?AJNDDQmt%7ouHj$?%wbM5^ z!LZ4Tj#;#M?aQ_@JhhkyNwr;Ir_v)gFoI zYgl=7sYYIINqL+GGZVy=~``zo71u;CK^kp6+ZmP`#F;O9sX>EZG9uHAd9}r*KfwrV z$ilhY_XE5kpi(IH8)GQn%*@!7K$IYpAC@-(gqlEnE3Ff08e1`LD2kR;*#7GKYkwdA z57;pU6{^ONA3fz<47v|kxKmp6Nk|x-a=@>pi5o`zAHnfKKHO=uqJ%Eo-;Jv>HtO~9 z^+S)qZA!7HtcH9BAaSk!SKpaucyzr^60!5g37l?ro$3FOFs3$~@&wvouAvMv-yAQU z&d!J#1czJk_t(#}g=uZfRL6(drA#CtO#!O2;P3Z=eTy>>_Vvz~Yi_j&48go|37sDh zJhEo;+0W=G(W>>F(cG)s7m0MYSSf9YYfLY>BIA9!PxBjL5aLk9?|FqFdK|&*c5?Sa}>I2InaH?;^BTDga zKlIHG@t7Z%8Hqg*g{yr^N$6vUWS&v*3FT}-sN88$_@L;|ma0*O*oO~;@QMy9vj&V5 zRxeRGNhY6p=*07)`MAnneWGdN=^`B@7Bwr1%tQ-URT%0wDs%nI=+NA{fFi?E;-nAV z5RlKnu3X^Ew{6me{Uo`F9d*#}#+#zDFaq?6)oV8@KA30~Fs=jh0}j2%t}o{qY4qzn zIPa;%&<-?nvy(Xvjkv)BY8m3)JsGY`aEloDTje5vhkyncNU>ESs#enpbb`gaf7i4>EwlqKN zfKbBO5^+;P>LcL+NcPC{d=`LHIAc^1!24E1@tIi#zSD>3BL zGYorKUCj%-_|nUp^Akl_>XH_{YF2kkvJwt>mu(J4BH{e^FcE{3YMt)TOAz9Fx@d=g9`6daVRJsP##3v4lNt z5twJ+Lrws)?b-=0U06E!3AT6T<$6_gO6&#*{TD~Uo3Cc}Y!^8f4FVT}4aV#gcq;(N zAZ2zyoc=H(({T~JD6t4xtZvfZt374ii~;8{<=Hk#C-jnl^+(2-YNUzU3sg0>u9lug zLD9PM6_58+Vf%ve)d@oEX3K2=K%{aoTKKfn9hyQiO&YEU!a-hpqP17%LD$l`>9V#e zg0#k;vKcYlPnhfgRL6AYf&M}JP`ERy6g%@o>ov_mBB&Un z42YimoM<);L4_$;RoRf4<0ZAjI~l|*p{qz?PRZygqE0CW{$dTM?}OF{Lu4<;Q#IxX zppvRGjL0eg+}gs1M`6BBpnY+L_(3mI{#6BYKC@o=8nj6_khZY>XPM5C%jn@Z5(t3q zX`bgbCQT{)wkJvTq40n4Zqn)=2akZW0YUPbn|C-%PGrrfqeXvsd0NHic$MZug{l>h zR><+43MDhKsNg~pVw|nFtBp;RBu@YuzNYSbQzjQHE6}J^`?xFa9CkSZ<6k9Ja>!0X6 z-#!e(SYUvVGIISMrav~9>BwGnInbXe1it7rh}F%Y*<)SjNO|<|LInzB z)X&mCO~KZe-pGwB*_S(#I+i1i40{jV=Hm>sa1OLfc^QfHZM6EU z-K#E!3AC#skW@wIm@>koqT4iO*&vKn-NJ1dy%-uEjMq|0!n)X)w$dKjS%WH?@W1bK zxq=>S%_@RPTItWMu8kT*+b=5g4u1Akz5%Y03lRgGAjfS~%4s;WL>Sx3g`YuG0FxBY zvbZ|SI@@oI1W+zMl^)2Y-adK{C%@s#qX4Q&+)G7F(zX730D-&6XyW$9g8yaVx>Ju=E!+-ScZo`F zoo`KjLyHWrr}J4gOfxS^rHAEhc@WIDW0D>)v>_au@!B_d5B&Ezy`f7--`Y=mEqXFv z5|n<72PlKrX|82~MPz!6j$E2ri4a_j!20BFN5NKtN_)5kn78%Ka@vg{!1 zRmq=AYO6sM7U2hMlMpFC_$L`F=0^5P76H)*>1qsuQho>%Tc9XwwZ4QyFKoi(N-V zzXsbW+3fxi)_?B6=1|gh%Ot*&!WJV#t;gKqh#cPz*U)WgUt)&a>D4%P`K-%wZzajS z_?MF9V<{7Ej>z9Xpo81)V3x;zvE9qQhCgsZfaqccQb+vNx_uRz7CIJci-W-(S6RFd z!1H399mAtT(*jCUFgEQ{#(H+8qNBO8DW?(WpsNi+!mr!blQZW)f^0(0KwPA|z0&`k z>}B@0zzJ(IbGa0Cejy%U+4tY-dM@%0(+c!I0GZ`&7q9ryp_cT5?@yM5WmLO(_oeau zsUfvqdE?_9wC159I(Lbif6;JiuW{+i-D8>9|8-qDJjR#xJ7F!NQkFeJsEf0+2?)R; zD?_bhey2X$_vve6s4(!RSWn(hfMw{vu1O$_P_}l5(WeZ&TNKM2wZFA#_!oTdqh9WU zIGd}D{s^*rTff@hu|3EzhvsCTo98GSG^$A!5R;SQqkGOgSrHW{29b#DrB9>}Z_g}YHJ-N;+_d%5AVNo|s zNvUpY9VU>9Xx=dokwOc=wVyo8a9t@6m`nUk`TIq$9!DSaXA2SZ^0B3JOK_2UNG~PW z>DA@y0-GS|z3VIXov)L4B#%@cVU$sbx^qC+I3_v*alCPtU@DR!`PT0FbVR-*Q*=gQ z&pRqq-skSUkG)93Hro3L=cUK1F&|FD^@+t6RvC|?LD;46-?0uw)B*k?8FdLJQ(noh z)3fhb(pAwXD%<`Df2Nu_=rN#zC<$d+sTi6qHELU0kgTLaV021Rhg2r=A(6zvTEzXL zuyVW@bqK%rWxP+(sm$9VZ?LOg!>OUG04)StAiq*}kHfQ--tF*KNO0)@Gtd)H$!j0? zKkE;fX4fjs^&y1sLena33}wo3{>niDHtz4rmGhc2C$R^w|xR0}b)pa~&MBYU1uO(V)wn6_5Oxy~2BXtzEPSM>Abh$PrvFCMx;DKQz= zYx=>#nU{_^sJ1}qyjb?A+MQJXEvE9)c>8v3UJ96X26mc6cf*2YR3XkNm6!4;L8vH3 zFg1q%Y1Fk0>vi{kEdx#*Nx$C&{p>nz9Q5|^JsCtfGg*;o0kdFgK60e)z3i9!U9XO?uS|R&v$aDLG4!DBFi=1J#}M-Z&V01tPK0@a#&x! zLk;*8?qs!YtE0cX0hV))$-ugia1$59f9W0S^wu)&M3PJo&Td$YKY(&iha`&}r;Q<` zC@Qwh%v4O=9g@<1`mg9=9vsqJiyb*?oW~nPIob4lW>K@s^Bgq35I7&YoSLaVa(IEG zCtt&^4zc(UDU95K*Vo#dQj+c(f6hAi~`fdn|;#Fp{bV_H;vy~Xgi@+8w{ z`=gckZU3yUBDZ6yYxrh0C5babIG`Mo1e)&u4HKFH+q|~f9K&al;k@}Qsa{uV;a8^P zRDmZ=tylL^4-vu`Qu{b0PMNqB#lg!mPM^%xcD1BRhC^$W(f3RPCE$L3h;AZ;S}RxH z%kc)D)1qyEv8sSOtg)}dl$wmBiAz+8~muMC7og9>4iSquEr zShJ=L-`TNvfU_(=K0G>W>&Ruo_ENv#mqtN^=EjSvs>Xo>iZM+x_6=+JUcq0m3{aEp zj;MWG4{l>HJ$_Wm-f=H~M~?qf>MQ=1Q|-m=+A|vFCg3g1-HX1-WjfasatKWuk4WND zQF6ySdBucZm`zunS~}}irtjhXTMj0c2oe1&B|`Cp4UHtJCRl4$1;uLbl=PvOsS@HxQ!WJFJ{1zOA>gZy@^ zW6jz_i>HA~=}N+QgsU;|)bk@2lEHDZ0BKXyxYU~3y1o3}3Y!ml@87Sflb~l)?pDy7 z&`x;)<<%H_vb}um>h$4LgTZP>*;EDVmIrd~W>uFT`VxyFmTDP<^_*&lDQ?V!8=2ku z0)!>}-5%-rh2NdeF=|dKN1$+|F(>UWC`@4@Or4(jASZ6|Cbx2BO0}Dk+>3Qqc(2wh z<*$I23{hl{t)=O5QcX9l&xW$8!d%wq1S82Q{%6H^?Qi-o(#z=1R3~SI>lrz}wNFsV z7sM8jF)R!**~!$r)gUS{1bHZh*v3&!F)G?ZOmMf_NEWr^U5s-?v+ z6}A?Mf~}(r?j{%jhGkQal@jytDaHAQjD z*i|qlg4CK&dG(rv(Lqx_#&B|qjzhPsBL71w-;%(9&zmzz`%xUmG(wnioZqNnI=Sf1mDNqeyJbrLrOEo|;ulwn|U&%S*HW zntp&F1acCAzR$C*j=p{!iKzzJI>w(%df={72mIxa5#B3BuNEbLyBH5_1s;YZ@V;CY z*Gyjs*+B*Yql2EL=VOmSvg(3^dBR3_cZ7FRVHCZ5LYk!p*PZsi1(IT))_EMY75puD z(p*LW{WpRE$NY~$3nnaj9?q=hc6}YMW!Q6>qEOyDdbeQ{VULGiZ$zFkX&k+1=|Iy$XH!8LHGyXws) z*3zzvFcm%ko-d&~GpJ;2nW?h7{>6OygD%wVI81ORro@_P^;}B*+TyudP4Xwd)p#wr zdXxBi@yZ6K>d#J7XW)3YmLv5(*bi4N3h`c%nTjfmh8vA-A@&I8lVQjN0#_&$ef*AHZGgZo0}3;HNeg0zAv_8nVxJCL^X4>$G@3T zY|%-j>tugOyW)cq zBTYrNSV2#r@@F!!#Mp_ISpEmmaOISr|0OhpQvAY1$)0 zF(XAqS{dDr6bx56!e#Ih4?O4Ew}}w-U#a}!)WoNkX3{}onLAGq{*_W|Ye4q{mKe5M z`lSwZeqz%1Nrq{n*68&|L7Z(bx&_yjb!{@2Obew>*7mFfzi;kcOk*5D-UM%gXi6%g zl+B;v{P=9PS^e48R&*twYCO3o#_sR0o_I;jTTx<$8TMgZ8)}&sa7m7l@>`~6(qa6d zM~Bni^NDs$d;>f-IUAK}q?JY* z!*`_bxuok=il66IAI)tzosxI{He|kHB?knUoFvww9GO0X2APi9<%Mn9-Cw*=n5_e%Hay9Vx6BZ@%yTxS-_my+cg2rN;heIiyFkHi zO?M%_ZJ+ymMp~>lH)%Cl$@}tT(?^WplVLZ)@7j}qd!1_2@EQC~KJ+!Uu~So*lJI=@ zvCi}4`9zj^@2lRkY1{p%UZ8P=&%9OkSsT%!il1rT&fmAzw!EZ5fUJ6zp1Iv1{iZH& zX?o6T7S2~kESl{gu##cSrsxPyCFW=|h$HnwuEx_7yz=N$|NOof8db>SnA*jer(CZ7 z>!gm$QTZ$^gIWX+KIo>*?x>EYr+H|(EzoQ`*A?<%j`IJQh5j3tK8@gld3nh{4Pky) zl;VBZN$v?82m*RdNxG*N*V_~2mbX`@CT>LXFNv+Mx5rCyt8PK+v~F0{9Fi8Sy;6~e|Hehlxxxkj(rcEY}R`|;mRL8v{z=(z{khKGYOO3 zzx+;F?ehX=va4oXC&%z&9pitWA)7_Y9^RwAkhF{Q#K>p`Cg3QtQi_sg62_nY1IbOF ACjbBd literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/databasesingleton_8h_source.html b/docs/doxygen/html/databasesingleton_8h_source.html new file mode 100644 index 0000000..d541203 --- /dev/null +++ b/docs/doxygen/html/databasesingleton_8h_source.html @@ -0,0 +1,208 @@ + + + + + + + +My Project: server/databasesingleton.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
databasesingleton.h
+
+
+Go to the documentation of this file.
1#ifndef DATABASESINGLETON_H
+
2#define DATABASESINGLETON_H
+
3
+
4#include <QSqlDatabase>
+
5#include <QSqlQuery>
+
6#include <QSqlError>
+
7#include <QDebug>
+
8#include <QVariantMap>
+
9#include <QVector>
+
10
+ +
12
+
+ +
19private:
+ +
21public:
+ +
28
+ +
35};
+
+
36
+
+ +
44private:
+ + +
47 QSqlDatabase db;
+
48
+ +
55
+ + +
58
+
64 ~DataBaseSingleton() = default;
+
65
+
66 friend class SingletonDestroyer;
+
67
+
68public:
+ +
75
+
84 bool initialize(const QString& databaseName);
+
85
+
93 QSqlQuery executeQuery(const QString& query, const QVariantMap& params = QVariantMap());
+
94
+
102 bool checkUserCredentials(const QString& login, const QString& password);
+
103
+
113 bool addUser(const QString& name, const QString& email, const QString& password, bool isAdmin = false);
+
114
+
128 bool addProduct(int userId, const QString& name, int proteins, int fatness, int carbs, int weight, int cost, int type);
+
129
+
136 QVector<QVariantMap> getProductsByUser(int userId);
+
137
+
148 bool addFavoriteRation(int userId, const QVector<int>& productIds, int calories, int allCost, int allWeight);
+
149
+
156 QVector<QVariantMap> getFavoritesByUser(int userId);
+
157
+
166 bool updateStatistics(int registrations, int visits, int generations);
+
167
+
173 QVariantMap getStatistics();
+
174};
+
+
175
+
176#endif // DATABASESINGLETON_H
+
Класс для работы с базой данных.
Definition databasesingleton.h:43
+
bool addProduct(int userId, const QString &name, int proteins, int fatness, int carbs, int weight, int cost, int type)
Добавление продукта в базу данных.
Definition databasesingleton.cpp:114
+
static SingletonDestroyer destroyer
Объект-разрушитель
Definition databasesingleton.h:46
+
QSqlQuery executeQuery(const QString &query, const QVariantMap &params=QVariantMap())
Выполнение SQL-запроса с параметрами.
Definition databasesingleton.cpp:78
+
bool addFavoriteRation(int userId, const QVector< int > &productIds, int calories, int allCost, int allWeight)
Добавление рациона в избранное.
Definition databasesingleton.cpp:154
+
bool checkUserCredentials(const QString &login, const QString &password)
Проверка учетных данных пользователя.
Definition databasesingleton.cpp:92
+
bool initialize(const QString &databaseName)
Инициализация базы данных.
Definition databasesingleton.cpp:18
+
QVector< QVariantMap > getProductsByUser(int userId)
Получение продуктов для конкретного пользователя.
Definition databasesingleton.cpp:132
+
QSqlDatabase db
Объект базы данных
Definition databasesingleton.h:47
+
~DataBaseSingleton()=default
Приватный деструктор.
+
DataBaseSingleton()
Приватный конструктор.
Definition databasesingleton.cpp:6
+
friend class SingletonDestroyer
Дружественный класс для доступа к деструктору
Definition databasesingleton.h:66
+
QVariantMap getStatistics()
Получение статистики.
Definition databasesingleton.cpp:199
+
bool updateStatistics(int registrations, int visits, int generations)
Обновление статистики.
Definition databasesingleton.cpp:191
+
DataBaseSingleton(const DataBaseSingleton &)=delete
Запрещает копирование экземпляра
+
static DataBaseSingleton * p_instance
Единственный экземпляр класса
Definition databasesingleton.h:45
+
static DataBaseSingleton * getInstance()
Получение единственного экземпляра Singleton.
Definition databasesingleton.cpp:10
+
bool addUser(const QString &name, const QString &email, const QString &password, bool isAdmin=false)
Добавление нового пользователя в базу данных.
Definition databasesingleton.cpp:100
+
DataBaseSingleton & operator=(const DataBaseSingleton &)=delete
Запрещает присваивание
+
QVector< QVariantMap > getFavoritesByUser(int userId)
Получение избранных рационов пользователя.
Definition databasesingleton.cpp:173
+
Класс для разрушения экземпляра Singleton.
Definition databasesingleton.h:18
+
DataBaseSingleton * p_instance
Указатель на экземпляр Singleton.
Definition databasesingleton.h:20
+
~SingletonDestroyer()
Деструктор для удаления Singleton.
Definition databasesingleton.cpp:211
+
void initialize(DataBaseSingleton *p)
Инициализация указателя на экземпляр Singleton.
Definition databasesingleton.cpp:212
+
+
+ + + + diff --git a/docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.html b/docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.html new file mode 100644 index 0000000..14990ce --- /dev/null +++ b/docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.html @@ -0,0 +1,137 @@ + + + + + + + +My Project: server Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
server Directory Reference
+
+
+ + + + + + + + + + + + + + + + +

+Files

 databasesingleton.cpp
 
 databasesingleton.h
 
 func2serv.cpp
 
 func2serv.h
 
 main.cpp
 
 mytcpserver.cpp
 
 mytcpserver.h
 
+
+
+ + + + diff --git a/docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.js b/docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.js new file mode 100644 index 0000000..ed7567c --- /dev/null +++ b/docs/doxygen/html/dir_41e1742e44e2de38b3bc91f993fed282.js @@ -0,0 +1,10 @@ +var dir_41e1742e44e2de38b3bc91f993fed282 = +[ + [ "databasesingleton.cpp", "databasesingleton_8cpp.html", null ], + [ "databasesingleton.h", "databasesingleton_8h.html", "databasesingleton_8h" ], + [ "func2serv.cpp", "func2serv_8cpp.html", "func2serv_8cpp" ], + [ "func2serv.h", "func2serv_8h.html", "func2serv_8h" ], + [ "main.cpp", "main_8cpp.html", "main_8cpp" ], + [ "mytcpserver.cpp", "mytcpserver_8cpp.html", null ], + [ "mytcpserver.h", "mytcpserver_8h.html", "mytcpserver_8h" ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/doc.svg b/docs/doxygen/html/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/doxygen/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/doxygen/html/docd.svg b/docs/doxygen/html/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/doxygen/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/doxygen/html/doxygen.css b/docs/doxygen/html/doxygen.css new file mode 100644 index 0000000..4947e24 --- /dev/null +++ b/docs/doxygen/html/doxygen.css @@ -0,0 +1,2255 @@ +/* The standard CSS for doxygen 1.13.2*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/docs/doxygen/html/doxygen.svg b/docs/doxygen/html/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/doxygen/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/doxygen_crawl.html b/docs/doxygen/html/doxygen_crawl.html new file mode 100644 index 0000000..ca7c0bc --- /dev/null +++ b/docs/doxygen/html/doxygen_crawl.html @@ -0,0 +1,112 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/dynsections.js b/docs/doxygen/html/dynsections.js new file mode 100644 index 0000000..b05f4c8 --- /dev/null +++ b/docs/doxygen/html/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/docs/doxygen/html/files.html b/docs/doxygen/html/files.html new file mode 100644 index 0000000..b084f19 --- /dev/null +++ b/docs/doxygen/html/files.html @@ -0,0 +1,130 @@ + + + + + + + +My Project: File List + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
+
+ + + + diff --git a/docs/doxygen/html/files_dup.js b/docs/doxygen/html/files_dup.js new file mode 100644 index 0000000..617f79a --- /dev/null +++ b/docs/doxygen/html/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "server", "dir_41e1742e44e2de38b3bc91f993fed282.html", "dir_41e1742e44e2de38b3bc91f993fed282" ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/folderclosed.svg b/docs/doxygen/html/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/doxygen/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/doxygen/html/folderclosedd.svg b/docs/doxygen/html/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/doxygen/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/doxygen/html/folderopen.svg b/docs/doxygen/html/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/doxygen/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/doxygen/html/folderopend.svg b/docs/doxygen/html/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/doxygen/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/doxygen/html/func2serv_8cpp.html b/docs/doxygen/html/func2serv_8cpp.html new file mode 100644 index 0000000..bda3ad9 --- /dev/null +++ b/docs/doxygen/html/func2serv_8cpp.html @@ -0,0 +1,862 @@ + + + + + + + +My Project: server/func2serv.cpp File Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
func2serv.cpp File Reference
+
+
+
#include "func2serv.h"
+#include <QString>
+#include <QStringList>
+#include <QMap>
+#include <QDebug>
+#include <databasesingleton.h>
+#include <QJsonArray>
+#include <QJsonObject>
+#include <QJsonDocument>
+
+Include dependency graph for func2serv.cpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

QByteArray parsing (QString input, int socdes)
 
QByteArray auth (QStringList log)
 
QByteArray reg (QStringList params)
 
QByteArray add_product (QStringList params)
 
QByteArray get_stat ()
 
QByteArray check_task ()
 
QByteArray menu_export ()
 
void fetch_products_from_db (const QString &userId, QStringList &products)
 
QByteArray get_products (QString userId)
 
QByteArray get_all_users ()
 
int get_user_count ()
 
int get_product_count ()
 
QByteArray get_stable_stat ()
 
int get_weekly_logins ()
 
int get_monthly_logins ()
 
QByteArray get_dynamic_stat ()
 
QByteArray add_favorite_ration (const QStringList &container)
 
bool add_ration_to_favorites (const QString &userId, const QString &rationId)
 
+ + + +

+Variables

QMap< QString, QList< QString > > mockDatabase
 
+

Function Documentation

+ +

◆ add_favorite_ration()

+ +
+
+ + + + + + + +
QByteArray add_favorite_ration (const QStringList & container)
+
+
293 {
+
294 QString userId = container[1]; // ID пользователя
+
295 QString rationId = container[2]; // ID рациона
+
296
+
297 bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки
+
298
+
299 if (success) {
+
300 return "Ration successfully added to favorites\r\n";
+
301 } else {
+
302 return "Error: failed to add ration to favorites\r\n";
+
303 }
+
304}
+
bool add_ration_to_favorites(const QString &userId, const QString &rationId)
Definition func2serv.cpp:305
+
+
+
+ +

◆ add_product()

+ +
+
+ + + + + + + +
QByteArray add_product (QStringList params)
+
+
165 {
+
166 if (params.size() != 9) {
+
167 return "add_product//failed//Неверные аргументы\r\n";
+
168 }
+
169
+ +
171 int userId = params[1].toInt();
+
172 QString name = params[2];
+
173/*
+
174 // Проверяем, существует ли уже такой продукт
+
175 QSqlQuery checkQuery = db->executeQuery(
+
176 "SELECT id FROM products WHERE id_user = :id_user AND name = :name",
+
177 {{":id_user", userId}, {":name", name}}
+
178 );
+
179
+
180 if (checkQuery.next()) {
+
181 return "add_product//failed//Продукт уже существует\r\n";
+
182 }
+
183*/
+
184 // Добавляем продукт
+
185 bool success = db->addProduct(
+
186 userId,
+
187 name,
+
188 params[3].toInt(), // proteins
+
189 params[4].toInt(), // fatness
+
190 params[5].toInt(), // carbs
+
191 params[6].toInt(), // weight
+
192 params[7].toInt(), // cost
+
193 params[8].toInt() // type
+
194 );
+
195
+
196 return success ? "add_product//success\r\n" : "add_product//failed//Ошибка БД\r\n";
+
197}
+
Класс для работы с базой данных.
Definition databasesingleton.h:43
+
bool addProduct(int userId, const QString &name, int proteins, int fatness, int carbs, int weight, int cost, int type)
Добавление продукта в базу данных.
Definition databasesingleton.cpp:114
+
static DataBaseSingleton * getInstance()
Получение единственного экземпляра Singleton.
Definition databasesingleton.cpp:10
+
+
+
+ +

◆ add_ration_to_favorites()

+ +
+
+ + + + + + + + + + + +
bool add_ration_to_favorites (const QString & userId,
const QString & rationId )
+
+
305 {
+
306 qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId;
+
307 return true; // Заглушка, потом заменить на SQL-запрос
+
308}
+
+
+
+ +

◆ auth()

+ +
+
+ + + + + + + +
QByteArray auth (QStringList log)
+
+
77 {
+
78 // Проверяем количество параметров
+
79 if (log.size() < 3) {
+
80 return "auth_failed//Недостаточно параметров для авторизации\r\n";
+
81 }
+
82
+ +
84 bool authSuccess = db->checkUserCredentials(log[1], log[2]);
+
85
+
86 if (!authSuccess) {
+
87 return "auth_failed//Неверный логин или пароль\r\n";
+
88 }
+
89
+
90
+
91
+
92 QSqlQuery query = db->executeQuery(
+
93 "SELECT id, name, email, pass FROM users WHERE (email = :login OR name = :login) AND pass = :pass",
+
94 {
+
95 {":login", log[1]}, // логин
+
96 {":pass", log[2]} // пароль
+
97 }
+
98 );
+
99
+
100
+
101 if (!query.next()) {
+
102 return "auth_failed//Ошибка при получении данных пользователя\r\n";
+
103 }
+
104
+
105 QString userId = query.value("id").toString();
+
106 QString userLogin = query.value("name").toString();
+
107 QString userEmail = query.value("email").toString();
+
108
+
109 QString response = QString("auth_success//%1//%2//%3\r\n")
+
110 .arg(userId)
+
111 .arg(userLogin)
+
112 .arg(userEmail);
+
113
+
114 return response.toUtf8();
+
115}
+
QSqlQuery executeQuery(const QString &query, const QVariantMap &params=QVariantMap())
Выполнение SQL-запроса с параметрами.
Definition databasesingleton.cpp:78
+
bool checkUserCredentials(const QString &login, const QString &password)
Проверка учетных данных пользователя.
Definition databasesingleton.cpp:92
+
+
+
+ +

◆ check_task()

+ +
+
+ + + + + + + +
QByteArray check_task ()
+
+
203 {
+
204 return "Task was succesful completed\r\n";
+
205}
+
+
+
+ +

◆ fetch_products_from_db()

+ +
+
+ + + + + + + + + + + +
void fetch_products_from_db (const QString & userId,
QStringList & products )
+
+
210 {
+
211
+
212 if (mockDatabase.contains(userId)) {
+
213 products = mockDatabase[userId];
+
214 }
+
215}
+
QMap< QString, QList< QString > > mockDatabase
Definition func2serv.cpp:12
+
+
+
+ +

◆ get_all_users()

+ +
+
+ + + + + + + +
QByteArray get_all_users ()
+
+
235 {
+
236 QStringList users;
+
237
+
238 // fetch_users_from_db(users);
+
239
+
240 QString response;
+
241 for (const QString& user : users) {
+
242 response += user + "\r\n";
+
243 }
+
244
+
245 return response.toUtf8();
+
246}
+
+
+
+ +

◆ get_dynamic_stat()

+ +
+
+ + + + + + + +
QByteArray get_dynamic_stat ()
+
+
279 {
+
280 int weeklyLogins = 0;
+
281 int monthlyLogins = 0;
+
282
+
283 // Получаем данные из БД (пока заглушки)
+
284 weeklyLogins = get_weekly_logins();
+
285 monthlyLogins = get_monthly_logins();
+
286
+
287 // Формируем строку ответа
+
288 QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" +
+
289 "Logins per month: " + QString::number(monthlyLogins) + "\r\n";
+
290
+
291 return response.toUtf8();
+
292}
+
int get_monthly_logins()
Definition func2serv.cpp:275
+
int get_weekly_logins()
Definition func2serv.cpp:270
+
+
+
+ +

◆ get_monthly_logins()

+ +
+
+ + + + + + + +
int get_monthly_logins ()
+
+
275 {
+
276 // Заглушка, пока без БД
+
277 return 312; // Примерное значение
+
278}
+
+
+
+ +

◆ get_product_count()

+ +
+
+ + + + + + + +
int get_product_count ()
+
+
252 {
+
253 // Здесь будет SQL-запрос, пока заглушка
+
254 return 732; // Примерное значение
+
255}
+
+
+
+ +

◆ get_products()

+ +
+
+ + + + + + + +
QByteArray get_products (QString userId)
+
+
216 {
+ +
218 int userIdInt = userId.toInt();
+
219 QVector<QVariantMap> products = db->getProductsByUser(userIdInt);
+
220
+
221 QJsonArray jsonArray;
+
222 for (const QVariantMap& product : products) {
+
223 QJsonObject obj = QJsonObject::fromVariantMap(product);
+
224 jsonArray.append(obj);
+
225 }
+
226
+
227 QJsonDocument doc(jsonArray);
+
228 QByteArray jsonBytes = doc.toJson(QJsonDocument::Compact);
+
229
+
230 qDebug() << "Отправляем продукты в виде JSON:" << jsonBytes;
+
231
+
232 return jsonBytes;
+
233}
+
QVector< QVariantMap > getProductsByUser(int userId)
Получение продуктов для конкретного пользователя.
Definition databasesingleton.cpp:132
+
+
+
+ +

◆ get_stable_stat()

+ +
+
+ + + + + + + +
QByteArray get_stable_stat ()
+
+
256 {
+
257
+
258 int userCount = 0;
+
259 int productCount = 0;
+
260
+
261 userCount = get_user_count();
+
262 productCount = get_product_count();
+
263
+
264 // Формируем строку ответа
+
265 QString response = "Users: " + QString::number(userCount) + "\r\n" +
+
266 "Products: " + QString::number(productCount) + "\r\n";
+
267
+
268 return response.toUtf8();
+
269}
+
int get_product_count()
Definition func2serv.cpp:252
+
int get_user_count()
Definition func2serv.cpp:247
+
+
+
+ +

◆ get_stat()

+ +
+
+ + + + + + + +
QByteArray get_stat ()
+
+
199 {
+
200 return "Your Statistic: null\r\n";
+
201}
+
+
+
+ +

◆ get_user_count()

+ +
+
+ + + + + + + +
int get_user_count ()
+
+
247 {
+
248 // Здесь будет SQL-запрос, пока заглушка
+
249 return 152; // Примерное значение
+
250}
+
+
+
+ +

◆ get_weekly_logins()

+ +
+
+ + + + + + + +
int get_weekly_logins ()
+
+
270 {
+
271 // Заглушка, пока без БД
+
272 return 78; // Примерное значение
+
273}
+
+
+
+ +

◆ menu_export()

+ +
+
+ + + + + + + +
QByteArray menu_export ()
+
+
206 {
+
207 return "Меню успешно экспортировано!\r\n";
+
208}
+
+
+
+ +

◆ parsing()

+ +
+
+ + + + + + + + + + + +
QByteArray parsing (QString input,
int socdes )
+
+
19{
+
20
+
21 QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user
+
22
+
23 if (container.isEmpty()) {
+
24 return "server error: empty command\\n";
+
25 }
+
26
+
27
+
28 qDebug() << socdes << " user command: " << container[0];
+
29 QString var = container[0];
+
30 if (var == "check_task")
+
31 {
+
32 return check_task();
+
33 }
+
34 else if (var =="auth")
+
35 {
+
36 return auth(container);
+
37 }
+
38 else if (var == "add_product")
+
39 {
+
40 return add_product(container);
+
41 }
+
42 else if (var == "user" && container[2] == "get_products") {
+
43 return get_products(container[1]);
+
44 }
+
45 else if (var =="reg")
+
46 {
+
47 return reg(container);
+
48 }
+
49 else if (var == "get_stat")
+
50 {
+
51 return(get_stat());
+
52 }
+
53 else if (var == "admin" && container[1] == "dynamic_stat") {
+
54 return get_dynamic_stat();
+
55 }
+
56 else if (var == "menu_export")
+
57 {
+
58 return menu_export();
+
59 }
+
60 else if (var == "user" && container[2] == "add_favorite_ration") {
+
61 return add_favorite_ration(container);
+
62 }
+
63 else if (var == "admin" && container[1] == "get_all_users") {
+
64 return get_all_users();
+
65 }
+
66 else if (var == "admin" && container[1] == "stable_stat") {
+
67 return get_stable_stat();
+
68 }
+
69 else
+
70 {
+
71 return "server error: unknow command\r\n";
+
72 }
+
73}
+
QByteArray get_stat()
Definition func2serv.cpp:199
+
QByteArray auth(QStringList log)
Definition func2serv.cpp:77
+
QByteArray add_product(QStringList params)
Definition func2serv.cpp:165
+
QByteArray get_stable_stat()
Definition func2serv.cpp:256
+
QByteArray add_favorite_ration(const QStringList &container)
Definition func2serv.cpp:293
+
QByteArray check_task()
Definition func2serv.cpp:203
+
QByteArray get_products(QString userId)
Definition func2serv.cpp:216
+
QByteArray get_dynamic_stat()
Definition func2serv.cpp:279
+
QByteArray menu_export()
Definition func2serv.cpp:206
+
QByteArray get_all_users()
Definition func2serv.cpp:235
+
QByteArray reg(QStringList params)
Definition func2serv.cpp:118
+
+
+
+ +

◆ reg()

+ +
+
+ + + + + + + +
QByteArray reg (QStringList params)
+
+
118 {
+
119 // 1️⃣ Проверка количества параметров
+
120 if (params.size() != 4) {
+
121 return "reg_failed//Недостаточно параметров для регистрации\r\n";
+
122 }
+
123
+
124 // 2️⃣ Извлечение данных из запроса
+
125 QString name = params[1]; // Имя пользователя
+
126 QString email = params[2]; // Email (должен быть уникальным)
+
127 QString password = params[3]; // Пароль
+
128
+ +
130
+
131 // 3️⃣ Проверка, не занят ли email
+
132 QSqlQuery checkQuery = db->executeQuery(
+
133 "SELECT id FROM users WHERE email = :email",
+
134 {{":email", email}}
+
135 );
+
136
+
137 // Если запрос не выполнился (ошибка БД)
+
138 if (!checkQuery.exec()) {
+
139 return "reg_failed//Ошибка при проверке email\r\n";
+
140 }
+
141
+
142 // Если email уже существует (найдена запись)
+
143 if (checkQuery.next()) {
+
144 return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n";
+
145 }
+
146
+
147 // 4️⃣ Попытка добавить пользователя
+
148 bool success = db->addUser(name, email, password, false);
+
149
+
150 if (success) {
+
151 // 5️⃣ Обновление статистики (увеличиваем счетчик регистраций)
+
152 QVariantMap stats = db->getStatistics();
+ +
154 stats["registrations"].toInt() + 1, // +1 новая регистрация
+
155 stats["visits"].toInt(), // Визиты без изменений
+
156 stats["generations"].toInt() // Генерации без изменений
+
157 );
+
158 return "reg_success//Регистрация прошла успешно\r\n";
+
159 } else {
+
160 // Если INSERT не сработал (например, из-за UNIQUE INDEX)
+
161 return "reg_failed//Ошибка при регистрации (возможно, email уже занят)\r\n";
+
162 }
+
163}
+
QVariantMap getStatistics()
Получение статистики.
Definition databasesingleton.cpp:199
+
bool updateStatistics(int registrations, int visits, int generations)
Обновление статистики.
Definition databasesingleton.cpp:191
+
bool addUser(const QString &name, const QString &email, const QString &password, bool isAdmin=false)
Добавление нового пользователя в базу данных.
Definition databasesingleton.cpp:100
+
+
+
+

Variable Documentation

+ +

◆ mockDatabase

+ +
+
+ + + + +
QMap<QString, QList<QString> > mockDatabase
+
+Initial value:
= {
+
{"1", {"orange_11_45_12_24", "banana_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24"}},
+
{"2", {"apple_11_45_12_24", "grape_11_45_12_24"}}
+
}
+
12 {
+
13 {"1", {"orange_11_45_12_24", "banana_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24", "orange_11_45_12_24"}},
+
14 {"2", {"apple_11_45_12_24", "grape_11_45_12_24"}}
+
15 };
+
+
+
+
+
+ + + + diff --git a/docs/doxygen/html/func2serv_8cpp.js b/docs/doxygen/html/func2serv_8cpp.js new file mode 100644 index 0000000..09ac7db --- /dev/null +++ b/docs/doxygen/html/func2serv_8cpp.js @@ -0,0 +1,22 @@ +var func2serv_8cpp = +[ + [ "add_favorite_ration", "func2serv_8cpp.html#a6496e445a644cca89c6252f6e7adecb0", null ], + [ "add_product", "func2serv_8cpp.html#a27ffe3af29c8442de4aa94a5e48d2345", null ], + [ "add_ration_to_favorites", "func2serv_8cpp.html#a064e99d59eaa1d8cccef20b3192df015", null ], + [ "auth", "func2serv_8cpp.html#a173db167f59671d56b49f5d7d11ef531", null ], + [ "check_task", "func2serv_8cpp.html#a6d4386c36a7ed61c61cf3d1bad354f27", null ], + [ "fetch_products_from_db", "func2serv_8cpp.html#af1b6a57c9eed96cee280cce58342bed5", null ], + [ "get_all_users", "func2serv_8cpp.html#ab8bda875989629df9b683e881296b32d", null ], + [ "get_dynamic_stat", "func2serv_8cpp.html#a8a2ae0ff8263d70f4e0f30d6b0d89af7", null ], + [ "get_monthly_logins", "func2serv_8cpp.html#a2d6f70d14e474616a4a16a72485c2f0e", null ], + [ "get_product_count", "func2serv_8cpp.html#a4ddd067c5a29f76aead93c977a05113a", null ], + [ "get_products", "func2serv_8cpp.html#a73b3ae758a8cf3621318d27cd1a17722", null ], + [ "get_stable_stat", "func2serv_8cpp.html#a2d521723770cde0e28bb41544394917b", null ], + [ "get_stat", "func2serv_8cpp.html#a0a88fbccc63c8cc890ded3a20fb71e72", null ], + [ "get_user_count", "func2serv_8cpp.html#a8ebcc70a2024aab70883f094fc35849e", null ], + [ "get_weekly_logins", "func2serv_8cpp.html#a4d269e13002c5cded37bee9ade854d93", null ], + [ "menu_export", "func2serv_8cpp.html#aa70831eddff4b8ed7a04647778a35747", null ], + [ "parsing", "func2serv_8cpp.html#a99bd96103155e73697cc47518a5559a4", null ], + [ "reg", "func2serv_8cpp.html#ac87f1fa2fd8c6ee1a48c3a56a99b3275", null ], + [ "mockDatabase", "func2serv_8cpp.html#aa13aef29ff8f58936aa8f2bd99f70253", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/func2serv_8cpp__incl.dot b/docs/doxygen/html/func2serv_8cpp__incl.dot new file mode 100644 index 0000000..3e553f3 --- /dev/null +++ b/docs/doxygen/html/func2serv_8cpp__incl.dot @@ -0,0 +1,40 @@ +digraph "server/func2serv.cpp" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/func2serv.cpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="func2serv.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8h.html",tooltip=" "]; + Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node4 [id="edge3_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QString",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QStringList",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge6_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge7_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node1 -> Node8 [id="edge8_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="databasesingleton.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8h.html",tooltip=" "]; + Node8 -> Node9 [id="edge9_Node000008_Node000009",color="steelblue1",style="solid",tooltip=" "]; + Node9 [id="Node000009",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node10 [id="edge10_Node000008_Node000010",color="steelblue1",style="solid",tooltip=" "]; + Node10 [id="Node000010",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node11 [id="edge11_Node000008_Node000011",color="steelblue1",style="solid",tooltip=" "]; + Node11 [id="Node000011",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node4 [id="edge12_Node000008_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node8 -> Node12 [id="edge13_Node000008_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node12 [id="Node000012",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node13 [id="edge14_Node000008_Node000013",color="steelblue1",style="solid",tooltip=" "]; + Node13 [id="Node000013",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node14 [id="edge15_Node000001_Node000014",color="steelblue1",style="solid",tooltip=" "]; + Node14 [id="Node000014",label="QJsonArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node15 [id="edge16_Node000001_Node000015",color="steelblue1",style="solid",tooltip=" "]; + Node15 [id="Node000015",label="QJsonObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node16 [id="edge17_Node000001_Node000016",color="steelblue1",style="solid",tooltip=" "]; + Node16 [id="Node000016",label="QJsonDocument",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/func2serv_8cpp__incl.map b/docs/doxygen/html/func2serv_8cpp__incl.map new file mode 100644 index 0000000..73a3ae2 --- /dev/null +++ b/docs/doxygen/html/func2serv_8cpp__incl.map @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/func2serv_8cpp__incl.md5 b/docs/doxygen/html/func2serv_8cpp__incl.md5 new file mode 100644 index 0000000..f59a1ea --- /dev/null +++ b/docs/doxygen/html/func2serv_8cpp__incl.md5 @@ -0,0 +1 @@ +e5514a775297da7fa7a4d34d7f819be3 \ No newline at end of file diff --git a/docs/doxygen/html/func2serv_8cpp__incl.png b/docs/doxygen/html/func2serv_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..94ac8c8856038b2c8aba6b6834753aff38c811c1 GIT binary patch literal 25096 zcma&ObyS;M7e0tXp+IqpwiIh9?(R@14uRlaDDLi3iWi3#r&w@zDHL}oP>Q<*cW2(* zd%xezAG6lXVi8zL-n{$lv(J`iKRe+nO0w9PWS9sD2-tG(rPL4*kY|AZTQJao#{g@z z65tP-$p={}geUkUc>C z>T2KPhwL4amDH&zNVL}0cG$7HxzF3}`|7&4l+}aZ2T8c<7TGdmJo`~l2l|VjV-=K} z8`J4LLza;%E$07G|Yk1SM!=ROmlVMxPS!pZ%EdA)}&gUnoX%u_!|JQ?4 z*fnJUd#@QZ6pJKgZ)b<`LJ%jRN{58iU}4Yw1^n`t%|ac>Y`v)p(-RZy22y?p?iBQ< ziYgvw!>&5gGYX#HVrDIQ9AD-@kw7CMH(hN#R$^z34ka_@5l93LnGk z{wEVBN-~7}eayt%I9U{Y=0#ENTHldI_8xdIxGBD zb8~4e*8MwjxUlLS!_on^+1*UWBK#`b8TgGv$lh}h8}M*=QYc99riSolx?+E9daTdd zdmw1D$u;2wZlK^+Lu?IbD`$sz8WP%y|C*qgp-^Qwhm-u9ugdn+dtt!{jy_S9WqOd|k1rhXwMmKel?5x?a{{ zTMP5T@0D5yC|&{cVtTr%!)`qMPp`@>_is|K5_u|XAD0c-LmNp2gn7lcjPvv%u+;(( zAa#Mp58Wt=JZLw7#^$V4SGK$X#(tT}xIkLADMFSd#an#?waF8=%3UuNGC1Kx!Dv3OvZPJC5L0dPP zTV1ZqPYXKm;5Jgg3%51;!f7t+rTSL{JI1-48sG@j0-AK3sOQY}1gvwPkah6>a*37P zZx!Gn&iei>nCCzy;$NImEOAkA7a^E7r|IHbAq@#&7UG9dVQyK@BQ=j4EKh|;N*PUVErTt-#yZX>(i-? zs;u(DJl}Cszl$j4Oq%(pTY;nY-y(lpDK?H1WOuc*_`@s?pITbm9c8;_$a4ush1JGd zFNNmX4wyafni^d0mX{JQdC||^@uqTQiP0>4VH~@ErdbZ`56#BNy?@0`b3B?hFn?nT zex$(Cf>mB&@g-*>#~(OYU&)E7{#t9JU%H^)rjv?4=7PJ+0c^NS;?M-=WfnPrSPE&< z5z{dh&`twcj5xV^AA%e

a>TP3L7!ARg`NiQQG(< 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 + + + + + + +My Project: server/func2serv.h File Reference + + + + + + + + + + + + + + + + +

+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
func2serv.h File Reference
+
+
+
#include <QByteArray>
+#include <QDebug>
+
+Include dependency graph for func2serv.h:
+
+
+ + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

QByteArray parsing (QString input, int socdes)
 
QByteArray auth (QStringList)
 
QByteArray reg (QStringList)
 
QByteArray add_product (QStringList)
 
QByteArray get_stat ()
 
QByteArray check_task ()
 
QByteArray menu_export ()
 
QByteArray get_products (QString UserId)
 
QByteArray get_all_users ()
 
QByteArray get_stable_stat ()
 
int get_user_count ()
 
int get_product_count ()
 
QByteArray get_dynamic_stat ()
 
int get_weekly_logins ()
 
int get_monthly_logins ()
 
QByteArray add_favorite_ration (const QStringList &container)
 
bool add_ration_to_favorites (const QString &userId, const QString &rationId)
 
+

Function Documentation

+ +

◆ add_favorite_ration()

+ +
+
+ + + + + + + +
QByteArray add_favorite_ration (const QStringList & container)
+
+
293 {
+
294 QString userId = container[1]; // ID пользователя
+
295 QString rationId = container[2]; // ID рациона
+
296
+
297 bool success = add_ration_to_favorites(userId, rationId); // Вызов функции-заглушки
+
298
+
299 if (success) {
+
300 return "Ration successfully added to favorites\r\n";
+
301 } else {
+
302 return "Error: failed to add ration to favorites\r\n";
+
303 }
+
304}
+
bool add_ration_to_favorites(const QString &userId, const QString &rationId)
Definition func2serv.cpp:305
+
+
+
+ +

◆ add_product()

+ +
+
+ + + + + + + +
QByteArray add_product (QStringList params)
+
+
165 {
+
166 if (params.size() != 9) {
+
167 return "add_product//failed//Неверные аргументы\r\n";
+
168 }
+
169
+ +
171 int userId = params[1].toInt();
+
172 QString name = params[2];
+
173/*
+
174 // Проверяем, существует ли уже такой продукт
+
175 QSqlQuery checkQuery = db->executeQuery(
+
176 "SELECT id FROM products WHERE id_user = :id_user AND name = :name",
+
177 {{":id_user", userId}, {":name", name}}
+
178 );
+
179
+
180 if (checkQuery.next()) {
+
181 return "add_product//failed//Продукт уже существует\r\n";
+
182 }
+
183*/
+
184 // Добавляем продукт
+
185 bool success = db->addProduct(
+
186 userId,
+
187 name,
+
188 params[3].toInt(), // proteins
+
189 params[4].toInt(), // fatness
+
190 params[5].toInt(), // carbs
+
191 params[6].toInt(), // weight
+
192 params[7].toInt(), // cost
+
193 params[8].toInt() // type
+
194 );
+
195
+
196 return success ? "add_product//success\r\n" : "add_product//failed//Ошибка БД\r\n";
+
197}
+
Класс для работы с базой данных.
Definition databasesingleton.h:43
+
bool addProduct(int userId, const QString &name, int proteins, int fatness, int carbs, int weight, int cost, int type)
Добавление продукта в базу данных.
Definition databasesingleton.cpp:114
+
static DataBaseSingleton * getInstance()
Получение единственного экземпляра Singleton.
Definition databasesingleton.cpp:10
+
+
+
+ +

◆ add_ration_to_favorites()

+ +
+
+ + + + + + + + + + + +
bool add_ration_to_favorites (const QString & userId,
const QString & rationId )
+
+
305 {
+
306 qDebug() << "Adding ration for user:" << userId << ", ration ID:" << rationId;
+
307 return true; // Заглушка, потом заменить на SQL-запрос
+
308}
+
+
+
+ +

◆ auth()

+ +
+
+ + + + + + + +
QByteArray auth (QStringList log)
+
+
77 {
+
78 // Проверяем количество параметров
+
79 if (log.size() < 3) {
+
80 return "auth_failed//Недостаточно параметров для авторизации\r\n";
+
81 }
+
82
+ +
84 bool authSuccess = db->checkUserCredentials(log[1], log[2]);
+
85
+
86 if (!authSuccess) {
+
87 return "auth_failed//Неверный логин или пароль\r\n";
+
88 }
+
89
+
90
+
91
+
92 QSqlQuery query = db->executeQuery(
+
93 "SELECT id, name, email, pass FROM users WHERE (email = :login OR name = :login) AND pass = :pass",
+
94 {
+
95 {":login", log[1]}, // логин
+
96 {":pass", log[2]} // пароль
+
97 }
+
98 );
+
99
+
100
+
101 if (!query.next()) {
+
102 return "auth_failed//Ошибка при получении данных пользователя\r\n";
+
103 }
+
104
+
105 QString userId = query.value("id").toString();
+
106 QString userLogin = query.value("name").toString();
+
107 QString userEmail = query.value("email").toString();
+
108
+
109 QString response = QString("auth_success//%1//%2//%3\r\n")
+
110 .arg(userId)
+
111 .arg(userLogin)
+
112 .arg(userEmail);
+
113
+
114 return response.toUtf8();
+
115}
+
QSqlQuery executeQuery(const QString &query, const QVariantMap &params=QVariantMap())
Выполнение SQL-запроса с параметрами.
Definition databasesingleton.cpp:78
+
bool checkUserCredentials(const QString &login, const QString &password)
Проверка учетных данных пользователя.
Definition databasesingleton.cpp:92
+
+
+
+ +

◆ check_task()

+ +
+
+ + + + + + + +
QByteArray check_task ()
+
+
203 {
+
204 return "Task was succesful completed\r\n";
+
205}
+
+
+
+ +

◆ get_all_users()

+ +
+
+ + + + + + + +
QByteArray get_all_users ()
+
+
235 {
+
236 QStringList users;
+
237
+
238 // fetch_users_from_db(users);
+
239
+
240 QString response;
+
241 for (const QString& user : users) {
+
242 response += user + "\r\n";
+
243 }
+
244
+
245 return response.toUtf8();
+
246}
+
+
+
+ +

◆ get_dynamic_stat()

+ +
+
+ + + + + + + +
QByteArray get_dynamic_stat ()
+
+
279 {
+
280 int weeklyLogins = 0;
+
281 int monthlyLogins = 0;
+
282
+
283 // Получаем данные из БД (пока заглушки)
+
284 weeklyLogins = get_weekly_logins();
+
285 monthlyLogins = get_monthly_logins();
+
286
+
287 // Формируем строку ответа
+
288 QString response = "Logins per week: " + QString::number(weeklyLogins) + "\r\n" +
+
289 "Logins per month: " + QString::number(monthlyLogins) + "\r\n";
+
290
+
291 return response.toUtf8();
+
292}
+
int get_monthly_logins()
Definition func2serv.cpp:275
+
int get_weekly_logins()
Definition func2serv.cpp:270
+
+
+
+ +

◆ get_monthly_logins()

+ +
+
+ + + + + + + +
int get_monthly_logins ()
+
+
275 {
+
276 // Заглушка, пока без БД
+
277 return 312; // Примерное значение
+
278}
+
+
+
+ +

◆ get_product_count()

+ +
+
+ + + + + + + +
int get_product_count ()
+
+
252 {
+
253 // Здесь будет SQL-запрос, пока заглушка
+
254 return 732; // Примерное значение
+
255}
+
+
+
+ +

◆ get_products()

+ +
+
+ + + + + + + +
QByteArray get_products (QString UserId)
+
+
216 {
+ +
218 int userIdInt = userId.toInt();
+
219 QVector<QVariantMap> products = db->getProductsByUser(userIdInt);
+
220
+
221 QJsonArray jsonArray;
+
222 for (const QVariantMap& product : products) {
+
223 QJsonObject obj = QJsonObject::fromVariantMap(product);
+
224 jsonArray.append(obj);
+
225 }
+
226
+
227 QJsonDocument doc(jsonArray);
+
228 QByteArray jsonBytes = doc.toJson(QJsonDocument::Compact);
+
229
+
230 qDebug() << "Отправляем продукты в виде JSON:" << jsonBytes;
+
231
+
232 return jsonBytes;
+
233}
+
QVector< QVariantMap > getProductsByUser(int userId)
Получение продуктов для конкретного пользователя.
Definition databasesingleton.cpp:132
+
+
+
+ +

◆ get_stable_stat()

+ +
+
+ + + + + + + +
QByteArray get_stable_stat ()
+
+
256 {
+
257
+
258 int userCount = 0;
+
259 int productCount = 0;
+
260
+
261 userCount = get_user_count();
+
262 productCount = get_product_count();
+
263
+
264 // Формируем строку ответа
+
265 QString response = "Users: " + QString::number(userCount) + "\r\n" +
+
266 "Products: " + QString::number(productCount) + "\r\n";
+
267
+
268 return response.toUtf8();
+
269}
+
int get_product_count()
Definition func2serv.cpp:252
+
int get_user_count()
Definition func2serv.cpp:247
+
+
+
+ +

◆ get_stat()

+ +
+
+ + + + + + + +
QByteArray get_stat ()
+
+
199 {
+
200 return "Your Statistic: null\r\n";
+
201}
+
+
+
+ +

◆ get_user_count()

+ +
+
+ + + + + + + +
int get_user_count ()
+
+
247 {
+
248 // Здесь будет SQL-запрос, пока заглушка
+
249 return 152; // Примерное значение
+
250}
+
+
+
+ +

◆ get_weekly_logins()

+ +
+
+ + + + + + + +
int get_weekly_logins ()
+
+
270 {
+
271 // Заглушка, пока без БД
+
272 return 78; // Примерное значение
+
273}
+
+
+
+ +

◆ menu_export()

+ +
+
+ + + + + + + +
QByteArray menu_export ()
+
+
206 {
+
207 return "Меню успешно экспортировано!\r\n";
+
208}
+
+
+
+ +

◆ parsing()

+ +
+
+ + + + + + + + + + + +
QByteArray parsing (QString input,
int socdes )
+
+
19{
+
20
+
21 QStringList container = input.remove("\r\n").split("//"); //пример входящих данных reg//login_user//password_user
+
22
+
23 if (container.isEmpty()) {
+
24 return "server error: empty command\\n";
+
25 }
+
26
+
27
+
28 qDebug() << socdes << " user command: " << container[0];
+
29 QString var = container[0];
+
30 if (var == "check_task")
+
31 {
+
32 return check_task();
+
33 }
+
34 else if (var =="auth")
+
35 {
+
36 return auth(container);
+
37 }
+
38 else if (var == "add_product")
+
39 {
+
40 return add_product(container);
+
41 }
+
42 else if (var == "user" && container[2] == "get_products") {
+
43 return get_products(container[1]);
+
44 }
+
45 else if (var =="reg")
+
46 {
+
47 return reg(container);
+
48 }
+
49 else if (var == "get_stat")
+
50 {
+
51 return(get_stat());
+
52 }
+
53 else if (var == "admin" && container[1] == "dynamic_stat") {
+
54 return get_dynamic_stat();
+
55 }
+
56 else if (var == "menu_export")
+
57 {
+
58 return menu_export();
+
59 }
+
60 else if (var == "user" && container[2] == "add_favorite_ration") {
+
61 return add_favorite_ration(container);
+
62 }
+
63 else if (var == "admin" && container[1] == "get_all_users") {
+
64 return get_all_users();
+
65 }
+
66 else if (var == "admin" && container[1] == "stable_stat") {
+
67 return get_stable_stat();
+
68 }
+
69 else
+
70 {
+
71 return "server error: unknow command\r\n";
+
72 }
+
73}
+
QByteArray get_stat()
Definition func2serv.cpp:199
+
QByteArray auth(QStringList log)
Definition func2serv.cpp:77
+
QByteArray add_product(QStringList params)
Definition func2serv.cpp:165
+
QByteArray get_stable_stat()
Definition func2serv.cpp:256
+
QByteArray add_favorite_ration(const QStringList &container)
Definition func2serv.cpp:293
+
QByteArray check_task()
Definition func2serv.cpp:203
+
QByteArray get_products(QString userId)
Definition func2serv.cpp:216
+
QByteArray get_dynamic_stat()
Definition func2serv.cpp:279
+
QByteArray menu_export()
Definition func2serv.cpp:206
+
QByteArray get_all_users()
Definition func2serv.cpp:235
+
QByteArray reg(QStringList params)
Definition func2serv.cpp:118
+
+
+
+ +

◆ reg()

+ +
+
+ + + + + + + +
QByteArray reg (QStringList params)
+
+
118 {
+
119 // 1️⃣ Проверка количества параметров
+
120 if (params.size() != 4) {
+
121 return "reg_failed//Недостаточно параметров для регистрации\r\n";
+
122 }
+
123
+
124 // 2️⃣ Извлечение данных из запроса
+
125 QString name = params[1]; // Имя пользователя
+
126 QString email = params[2]; // Email (должен быть уникальным)
+
127 QString password = params[3]; // Пароль
+
128
+ +
130
+
131 // 3️⃣ Проверка, не занят ли email
+
132 QSqlQuery checkQuery = db->executeQuery(
+
133 "SELECT id FROM users WHERE email = :email",
+
134 {{":email", email}}
+
135 );
+
136
+
137 // Если запрос не выполнился (ошибка БД)
+
138 if (!checkQuery.exec()) {
+
139 return "reg_failed//Ошибка при проверке email\r\n";
+
140 }
+
141
+
142 // Если email уже существует (найдена запись)
+
143 if (checkQuery.next()) {
+
144 return "reg_failed//Пользователь с таким email уже зарегистрирован\r\n";
+
145 }
+
146
+
147 // 4️⃣ Попытка добавить пользователя
+
148 bool success = db->addUser(name, email, password, false);
+
149
+
150 if (success) {
+
151 // 5️⃣ Обновление статистики (увеличиваем счетчик регистраций)
+
152 QVariantMap stats = db->getStatistics();
+ +
154 stats["registrations"].toInt() + 1, // +1 новая регистрация
+
155 stats["visits"].toInt(), // Визиты без изменений
+
156 stats["generations"].toInt() // Генерации без изменений
+
157 );
+
158 return "reg_success//Регистрация прошла успешно\r\n";
+
159 } else {
+
160 // Если INSERT не сработал (например, из-за UNIQUE INDEX)
+
161 return "reg_failed//Ошибка при регистрации (возможно, email уже занят)\r\n";
+
162 }
+
163}
+
QVariantMap getStatistics()
Получение статистики.
Definition databasesingleton.cpp:199
+
bool updateStatistics(int registrations, int visits, int generations)
Обновление статистики.
Definition databasesingleton.cpp:191
+
bool addUser(const QString &name, const QString &email, const QString &password, bool isAdmin=false)
Добавление нового пользователя в базу данных.
Definition databasesingleton.cpp:100
+
+
+
+
+
+ + + + diff --git a/docs/doxygen/html/func2serv_8h.js b/docs/doxygen/html/func2serv_8h.js new file mode 100644 index 0000000..4af3b2a --- /dev/null +++ b/docs/doxygen/html/func2serv_8h.js @@ -0,0 +1,20 @@ +var func2serv_8h = +[ + [ "add_favorite_ration", "func2serv_8h.html#a6496e445a644cca89c6252f6e7adecb0", null ], + [ "add_product", "func2serv_8h.html#aea4bc93c1f84d34a05a2c25939dcfaac", null ], + [ "add_ration_to_favorites", "func2serv_8h.html#a064e99d59eaa1d8cccef20b3192df015", null ], + [ "auth", "func2serv_8h.html#acbd6ff747a2b100b8f8da4a9b99d43c7", null ], + [ "check_task", "func2serv_8h.html#a6d4386c36a7ed61c61cf3d1bad354f27", null ], + [ "get_all_users", "func2serv_8h.html#ab8bda875989629df9b683e881296b32d", null ], + [ "get_dynamic_stat", "func2serv_8h.html#a8a2ae0ff8263d70f4e0f30d6b0d89af7", null ], + [ "get_monthly_logins", "func2serv_8h.html#a2d6f70d14e474616a4a16a72485c2f0e", null ], + [ "get_product_count", "func2serv_8h.html#a4ddd067c5a29f76aead93c977a05113a", null ], + [ "get_products", "func2serv_8h.html#ab8096a94a4e4aaa7af0852f0ffc11c99", null ], + [ "get_stable_stat", "func2serv_8h.html#a2d521723770cde0e28bb41544394917b", null ], + [ "get_stat", "func2serv_8h.html#a0a88fbccc63c8cc890ded3a20fb71e72", null ], + [ "get_user_count", "func2serv_8h.html#a8ebcc70a2024aab70883f094fc35849e", null ], + [ "get_weekly_logins", "func2serv_8h.html#a4d269e13002c5cded37bee9ade854d93", null ], + [ "menu_export", "func2serv_8h.html#aa70831eddff4b8ed7a04647778a35747", null ], + [ "parsing", "func2serv_8h.html#a99bd96103155e73697cc47518a5559a4", null ], + [ "reg", "func2serv_8h.html#a202f69a507a4e282bb2916fea170686f", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/func2serv_8h__dep__incl.dot b/docs/doxygen/html/func2serv_8h__dep__incl.dot new file mode 100644 index 0000000..b9d30e2 --- /dev/null +++ b/docs/doxygen/html/func2serv_8h__dep__incl.dot @@ -0,0 +1,12 @@ +digraph "server/func2serv.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/func2serv.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="server/func2serv.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8cpp.html",tooltip=" "]; + Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="server/mytcpserver.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8cpp.html",tooltip=" "]; +} diff --git a/docs/doxygen/html/func2serv_8h__dep__incl.map b/docs/doxygen/html/func2serv_8h__dep__incl.map new file mode 100644 index 0000000..02e7751 --- /dev/null +++ b/docs/doxygen/html/func2serv_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/doxygen/html/func2serv_8h__dep__incl.md5 b/docs/doxygen/html/func2serv_8h__dep__incl.md5 new file mode 100644 index 0000000..13ac2c1 --- /dev/null +++ b/docs/doxygen/html/func2serv_8h__dep__incl.md5 @@ -0,0 +1 @@ +933213ff78d4998926050aca5ddfb661 \ No newline at end of file diff --git a/docs/doxygen/html/func2serv_8h__dep__incl.png b/docs/doxygen/html/func2serv_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..e7ec2e24a04af1726bb6213db15cf57acaa42ecb GIT binary patch literal 3267 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 F{t0wIeZ~L) literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/func2serv_8h__incl.dot b/docs/doxygen/html/func2serv_8h__incl.dot new file mode 100644 index 0000000..c62c886 --- /dev/null +++ b/docs/doxygen/html/func2serv_8h__incl.dot @@ -0,0 +1,12 @@ +digraph "server/func2serv.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/func2serv.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/func2serv_8h__incl.map b/docs/doxygen/html/func2serv_8h__incl.map new file mode 100644 index 0000000..374b426 --- /dev/null +++ b/docs/doxygen/html/func2serv_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/doxygen/html/func2serv_8h__incl.md5 b/docs/doxygen/html/func2serv_8h__incl.md5 new file mode 100644 index 0000000..f5b57a6 --- /dev/null +++ b/docs/doxygen/html/func2serv_8h__incl.md5 @@ -0,0 +1 @@ +2c23d8acb0845db404eb554fcb508e08 \ No newline at end of file diff --git a/docs/doxygen/html/func2serv_8h__incl.png b/docs/doxygen/html/func2serv_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..680eb555d8e8811ec4d65d06fd44e9c452ef93e0 GIT binary patch literal 2834 zcmZuzc{mdeA774gMT;ayLXI5GHTMzCo%b{XGFK?K zIg;j{%9*oQ@AJNYywCGK-{bRrzSm#h=lOn;tSpSqvhlM40D!Y5#t@qmY(Ft1%jpw; zYo1_v0;lhq89@Ml{z}0=_*Vb`8^r{oXZI+Vo)?gk>wSR|wU`GtOLlz*ZYW4zWhUlW zNhe^_65V|+o?|V{v4T$KIfdvYCq?hS@9q2@!z2>Z*+gI04=8`xdogjj|BAB?pOs8$ znLT&W8(9@9la$;yHy^ZcNM>Gtf5Z&6FFdllG~)iiCT_E3QGGFVR$J4ZFTvyAN=#&u zD>$dEtsVF^rQiWy4C*ctDNlFwk&Ap_ca{jf=c9tvR`nG!M5>`T6@Lbj_t{It0K~d} zjpVuk9nF&hKu|jj<4Hk(JX{<4Rj1U!BD27f5ThRJ0XV@^Sz>&r-O=uR(dx1It(~3x zjXzUx(0AcXBe*3rLor$Z<8mTj@&NS|*>f0YCdG>XRUA&*6y?JDfd zuzSO`Gk!cdqM{hKBia`R)%~)@sxUB5xWBy=d0_g^Ic! znw{O#B(5Nv*p)>%+M941HbF1llnzd+@sqkv7#ybB`U;F{-7XqS+1jmqUAM+~teO3Bn+G;I7tn@H^NxxlPd*w=ywva6d3_G?b<@dX z^|+E&Or`%w?$s2%$9z3}`|dibIijNs>*Wl(RUBLq4*Bux9RXrWPB&iO+NpP2dvNDd zq5;$MCh;nKWv%d|_DxBfG<< z??jQkO5$%v?{=|W-grlbbqKy^JTLZ+xzH@V7-xw}s7~{gzIO&;Uc4ni-iM!F`&Hf> zH)oKE1+5pw8Zcd4)-97OI%H7W-(hX##-P)CwA*|gLf0B}S85A_mCrA*Tvt>vAh+QS z-YzE*jNQpnq)q?q9@txxueRB$zaypiQt+AW^_g>p_uQ^<3EpgK)8c9h#e7L1A+=V286Q0lqG zR3(n{uG=b4bISLS_m%VL6fCq@uq~9k;mGGRg>#dkFe4mj@4TGvvpZWtiNj@_4Z?$# z8k|qhUFJjg?#7PVK7*J>F-@g+BR}T{d?&W$iYKv~T zuqAVNjdyb3>G7S6i#ArkcOK{;vBxF!UgcaW{hpYQBkQJ&z#^?HD&*9Q z79~%TSAs*$i^XEqg3FO*npK)s7qTi;^zyH#7gQ&iZ)nth0L~b=J9s!_W(qArhb<%YUJ8E3+K-FZxR^zJE>7#t?L63V z5xKu7HDD`x3Fus!RB5+0apx6Z)V7P2an_$V-sDd<%y{pdCa$!{Vrl4to(H1%H(aQ0 zK+dNP<9i9_Pq4Ha++?g5vQDu7%~yu_1AD85dqgH5#GlMV`$f5zW~mKY)x^<}mZZU) zs9SNDFx*m&oDX_pu587}e@Jv=)p}Nwk^2$FDM@vxY52o-O{Gwo=VdaBPd&;>MACiT zyM2gl(O{Ytkf2E$Bl7B;TFaX)3B}j9YIKY1^lqelV=t00nB#Zn&kEO)?kiK2Yo~Vv zPFyT&dO)N4d>}NE;8xP*)Pk+y;j@r0-u>u7e1lC_xg{JYJ{2!MUHH*!oDgoe(2A$ETI{Oj* z(Vz`)7p#tJYkT{juLjh})cM;ox{nrey8j3o2}suP)*htc4bk)UTvYOIHxos&Br-}9sGqThK&T7a%%-K*{NtlPpbhnm3`<_MCyzCeev|esG#Sd!={mt z_0W%#phkF~HR7>95xx#aOib^xk(@Vs^_R`T)Q_+?He;B8St)byyscT-+QRqwa0s7} zkn6^)gBVofQPVF|T5HMv&TSth8^Wil`p}Ls*-W;#@o2~JA?F@j;ncgjmVzF09R~_# z8CcS0In13cenV=mQ%%LRI9MDkjhPwV?5Z6NkTJ3Mk9cQ&4?c9u&suvPx~z`)1`Dq? zh|^bv5}6T&0Wu}S4C8bG#l|DUC@ttU653OQnkj(0OEI08tW*dDgQa09Hk9dm_|*k6+IU$P-Zgj(Q-B3I + + + + + + +My Project: server/func2serv.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
func2serv.h
+
+
+Go to the documentation of this file.
1#ifndef FUNC2SERV_H
+
2#define FUNC2SERV_H
+
3
+
4#include <QByteArray>
+
5
+
6QByteArray parsing(QString input, int socdes);
+
7
+
8QByteArray auth(QStringList );
+
9QByteArray reg(QStringList);
+
10QByteArray add_product(QStringList);
+
11QByteArray get_stat(/*QStringList*/);
+
12QByteArray check_task(/*QStringList*/);
+
13QByteArray menu_export(/*QStringList*/);
+
14QByteArray get_products(QString UserId);
+
15QByteArray get_all_users();
+
16QByteArray get_stable_stat();
+
17int get_user_count();
+ +
19QByteArray get_dynamic_stat();
+ + +
22QByteArray add_favorite_ration(const QStringList& container);
+
23bool add_ration_to_favorites(const QString& userId, const QString& rationId);
+
24
+
25#include <QDebug>
+
26
+
27#endif // FUNC2SERV_H
+
bool add_ration_to_favorites(const QString &userId, const QString &rationId)
Definition func2serv.cpp:305
+
QByteArray get_stat()
Definition func2serv.cpp:199
+
QByteArray reg(QStringList)
Definition func2serv.cpp:118
+
QByteArray get_stable_stat()
Definition func2serv.cpp:256
+
int get_monthly_logins()
Definition func2serv.cpp:275
+
int get_weekly_logins()
Definition func2serv.cpp:270
+
int get_product_count()
Definition func2serv.cpp:252
+
QByteArray add_favorite_ration(const QStringList &container)
Definition func2serv.cpp:293
+
QByteArray check_task()
Definition func2serv.cpp:203
+
QByteArray get_dynamic_stat()
Definition func2serv.cpp:279
+
int get_user_count()
Definition func2serv.cpp:247
+
QByteArray parsing(QString input, int socdes)
Definition func2serv.cpp:18
+
QByteArray menu_export()
Definition func2serv.cpp:206
+
QByteArray get_products(QString UserId)
Definition func2serv.cpp:216
+
QByteArray get_all_users()
Definition func2serv.cpp:235
+
QByteArray auth(QStringList)
Definition func2serv.cpp:77
+
QByteArray add_product(QStringList)
Definition func2serv.cpp:165
+
+
+ + + + diff --git a/docs/doxygen/html/functions.html b/docs/doxygen/html/functions.html new file mode 100644 index 0000000..8ddf604 --- /dev/null +++ b/docs/doxygen/html/functions.html @@ -0,0 +1,191 @@ + + + + + + + +My Project: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- g -

+ + +

- i -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- s -

+ + +

- u -

+ + +

- ~ -

+
+
+ + + + diff --git a/docs/doxygen/html/functions_func.html b/docs/doxygen/html/functions_func.html new file mode 100644 index 0000000..90a33db --- /dev/null +++ b/docs/doxygen/html/functions_func.html @@ -0,0 +1,137 @@ + + + + + + + +My Project: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+
+
+ + + + diff --git a/docs/doxygen/html/functions_rela.html b/docs/doxygen/html/functions_rela.html new file mode 100644 index 0000000..4e40904 --- /dev/null +++ b/docs/doxygen/html/functions_rela.html @@ -0,0 +1,118 @@ + + + + + + + +My Project: Class Members - Related Symbols + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all related symbols with links to the classes they belong to:
+
+
+ + + + diff --git a/docs/doxygen/html/functions_vars.html b/docs/doxygen/html/functions_vars.html new file mode 100644 index 0000000..bda5e10 --- /dev/null +++ b/docs/doxygen/html/functions_vars.html @@ -0,0 +1,124 @@ + + + + + + + +My Project: Class Members - Variables + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+
+
+ + + + diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html new file mode 100644 index 0000000..9c170ed --- /dev/null +++ b/docs/doxygen/html/globals.html @@ -0,0 +1,163 @@ + + + + + + + +My Project: File Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- a -

+ + +

- c -

+ + +

- f -

+ + +

- g -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+
+
+ + + + diff --git a/docs/doxygen/html/globals_func.html b/docs/doxygen/html/globals_func.html new file mode 100644 index 0000000..3985a04 --- /dev/null +++ b/docs/doxygen/html/globals_func.html @@ -0,0 +1,162 @@ + + + + + + + +My Project: File Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the files they belong to:
+ +

- a -

+ + +

- c -

+ + +

- f -

+ + +

- g -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+
+
+ + + + diff --git a/docs/doxygen/html/globals_vars.html b/docs/doxygen/html/globals_vars.html new file mode 100644 index 0000000..e9c5fab --- /dev/null +++ b/docs/doxygen/html/globals_vars.html @@ -0,0 +1,118 @@ + + + + + + + +My Project: File Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the files they belong to:
+
+
+ + + + diff --git a/docs/doxygen/html/graph_legend.dot b/docs/doxygen/html/graph_legend.dot new file mode 100644 index 0000000..97a6d61 --- /dev/null +++ b/docs/doxygen/html/graph_legend.dot @@ -0,0 +1,24 @@ +digraph "Graph Legend" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node9 [id="Node000009",label="Inherited",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node10 -> Node9 [dir="back",color="steelblue1",style="solid" tooltip=" "]; + Node10 [id="Node000010",label="PublicBase",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",tooltip=" "]; + Node11 -> Node10 [dir="back",color="steelblue1",style="solid" tooltip=" "]; + Node11 [id="Node000011",label="Truncated",height=0.2,width=0.4,color="red", fillcolor="#FFF0F0", style="filled",tooltip=" "]; + Node13 -> Node9 [dir="back",color="darkgreen",style="solid" tooltip=" "]; + Node13 [label="ProtectedBase",color="gray40",fillcolor="white",style="filled" tooltip=" "]; + Node14 -> Node9 [dir="back",color="firebrick4",style="solid" tooltip=" "]; + Node14 [label="PrivateBase",color="gray40",fillcolor="white",style="filled" tooltip=" "]; + Node15 -> Node9 [dir="back",color="steelblue1",style="solid" tooltip=" "]; + Node15 [id="Node000015",label="Undocumented",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node16 -> Node9 [dir="back",color="steelblue1",style="solid" tooltip=" "]; + Node16 [label="Templ\< int \>",color="gray40",fillcolor="white",style="filled" tooltip=" "]; + Node17 -> Node16 [dir="back",color="orange",style="dashed",label="< int >",fontcolor="grey" tooltip=" "]; + Node17 [label="Templ\< T \>",color="gray40",fillcolor="white",style="filled" tooltip=" "]; + Node18 -> Node9 [dir="back",color="darkorchid3",style="dashed",label="m_usedClass",fontcolor="grey" tooltip=" "]; + Node18 [label="Used",color="gray40",fillcolor="white",style="filled" tooltip=" "]; +} diff --git a/docs/doxygen/html/graph_legend.html b/docs/doxygen/html/graph_legend.html new file mode 100644 index 0000000..7528b9b --- /dev/null +++ b/docs/doxygen/html/graph_legend.html @@ -0,0 +1,178 @@ + + + + + + + +My Project: Graph Legend + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.
  • +
+
+
+ + + + diff --git a/docs/doxygen/html/graph_legend.md5 b/docs/doxygen/html/graph_legend.md5 new file mode 100644 index 0000000..da515da --- /dev/null +++ b/docs/doxygen/html/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/docs/doxygen/html/graph_legend.png b/docs/doxygen/html/graph_legend.png new file mode 100644 index 0000000000000000000000000000000000000000..feea22ab166bd34aa2a2130ff4c721152ec66803 GIT binary patch literal 12453 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%0D<(%2E zk0uibmU;awl~6mVSQRK?bA^D`9WW{xP*&RH<$1|~gtZ>xj^;zH=hzLfhlL5LDf z#+1OO2@O&Bw?qT^Xz>?xAr7t`e(NC*7Q+FtdtdkKwr9CNRoz&olfe7%mM|Ip_t_GM zTS*}CP?LiJKg7P(@pLOw^VFlI1nIGo3;nw)N@ z@I6LI2j>fk<>r&^96+Smw7AYJhIGS^qI(s!DZrBIO-t&x%3Qt5q#AtXcU19AvYKVCoTDd82RQR$*t5i0l7PY`jHxhzYVPlcpPJk_!)9zP9~p*4 zf*4*t2d%r(drcxzqh|B-JFxmKUh%DOi7c@Fb}-VpoeS+jmf;xNWkO*%2YF?Qsv3N4 zJA5s+ymUb5DJJBYSK&J;V?e3Qf5iS!9>aj|w(d)3*ZA~TshR21IkLJ_p52&m<32d7 zetaBt+JPQxTi}neBptO}p;mZmB*kLH86l1lUj$s&8Up2@-{Od62t zD9t~s!EelROY1W&ajjtJ?NQ!f$fOsDy$uuZR^~7I=*dnOJB_K47sEjF; z+mqgw0yXsaiGGRO=8Lh*_+eX+`q5HiDe2tUj6QMVxFw#4?-LR z?s6N6eKPwCs%=rKb76)N^^;MP(2X9{)^3;{U zh(B(qn(nqL)^lxnj-jfpj1ONyskWDJmrO&gfva@8V7MD4lyu9Q+s;8}R+R6i6uZ zd7J3;F8ovl!cVIc;+Tuj+nc4SKP*TOg4&p~a^`95n!FfJTJNnnRV(vpjRr3@q#T+w zuX#O@OqMoKp`tj)(M3qLTJDHdZ|G)(zds5DH4KhtD#>@z;yEh>k{w_z72_Bm=Kzw) zqsK?7QT*gcVyJJ(fr;`40gtKc#B%=JT4j6lyML5wMOxq1B3sU_^Jix@Qfvtw>POOGX^^u*ok8l@- zc4*y7i9BX~T_*So-k5M?1GRZA9X}J&?uu-QKdF}TO@4uoVFEZH7Js48M<2!BW48u_ zXbjG$>p=xx7JyUAhob00OqxBAy^DYs64#Vo?|XD;5X`x*QriO9+sTrY3x;xj9uc*{ z42R*iS0rvVe)Nu%XXr#pB03ynp@triZuLfPrF2&RLAKvyPLr6AeJK*9nNz+nz2R}@ zJ(r>~Np&(NZoeBX}&bhY*6pJd)TnJ z@EELIJmFE?F9a=(CKF}1kqI>_GF-R7ZzK?<@uY1OG=6PVq3OFvbGy1!zV|@l{JW5q z7ijiU*84HE_nhGCzKA(f)?ymctAzDQ58~@rl0K9z;4Op^R zvu-|soZ93eGD^?2dadURk@z5{H^I-|<@z%b(Cv4-WFchQMv@Rcbto+L) zD}e|oQj+{0u-|0f8TQ}+S!1A0C8I!sC#%QIj2lr;#X5(Qu}uIMdH50#z1M3Wb0Q90 zO*7~CI)Mypc2LoO2{{{vFfa3Z@n`vQG`Q)axLl;?f0+`jYXqt-pVp_*OZb7k7KX;* zq@{%0W|mVNG}oIop4kDt@PLp6&(?eW%HgReiLiR07&);Yhdx=q7f%g#?4&=BUne7FR zZ&@rzVDdm2{!ms`TZvQb5z_t}!8t}_hPm?woq#dw-P8`r^V0*}oqUYs5nH<^K7bkZ zrg;j}%*Vm}CuB}<03?5OJyvGL4sbm`z+{$u?~`eDwVHidy`FfS%fQB@Z>B({ye2VH075G56SxbYH} zEQGHEUz6huqJrLE%H>;4MypoW8jn?bTqVjqU!?zN`3P4->V8KA{0$H|*%Y{CF^&lW zRs)Bpv^1Z7MDEha^l5mLg3FJ1RslLC3hP+P13UAoMdZzO8jbK3a6aNCy35lvz9RQU ztCwYc__sVUcnsHl`l4JKnR)QGdwoO2&QyMaH}y9VIbL?LGvAyN2b~D`NGJ))gmqUA zW=2Y<{dd>g%ME0`3xTqjM_k?H7;s;xgC6)wirqYa`J)TpIw^UW@0{V4>&~Faf~R!9 z?wpp8SChmDrJ;<=_iNED&%0E3aA4_RF_!d;4IYtQ+e}-RLbo=+THMUe-@N?J>Yty+ z`*0{_>P0NtL42B%5vBn&Lm>M5?Kk@pkvT+HB&l6&bl;K{c+zwUJDv0MRiLky>zynr zeYVTb^1||r;F>B!){ak4xJ*jQ>wfc4yZ)OXPGc%C)h8Z|b}D4h=(;!88uIS=il*2xf8oXM1XVuM3!#ddUOwj6U5@q>48v6Fb! z9W$QhCMi7waerKr#&XWhj#62YZmF%M6P0?HgSJ*udfUg4-7s;+$zxqE(UB?xvlpma z*wQkdza+PzG9-L@s*WYznOyMwy0@xS>CMsjyc5AX5|ii#fgs2G`NLjCPg^yMnGtr^ z>cCE6S9gqTQmDi}?bcO*s!SX#vYY6z*2qWAMC&>}u?~=My}m>W3gv4!mEtnx3t zTzofs#h!c$DoNo!N+8A>=4-?hoiWohofytA9V#|d1IiAOLrxF(Y1|AnSL;`QQS@2Y z&T%tt0^y_V7*B%zrq$PMkYXUa@^wK5&J8`IG#&>z5}~g;2G&mg%yA?qrZh&SjU@_-2c>z97$!Bs>{7 zC|FUHjuM$$y#E8_+a(QX-sky2-!YGqY`y&a#TVy5T8tk^i(UCOPhr1r8tfz8f4Yz8 z4L{9uFW>ki@3;6pFmk?;luv~Gu~@_L+1v@_>B0OTqk0Opk4GaqBC#zjJzJZG8VJT#NU_$RN^A_#9oJ;%hhh zLh0gt;FguYfG-HEQV=kFOLiGD+R5hsYp|bHvirci2YTi}m2g zp*)OYFM(z*%jhUAC5d4<`_|8HoO>Xd$PXd~M^ox~r;(w{`VbR$RLBF0!V*Lbkgzb$ z6g21Wod}ry;Qdk4ApeA8$q`8H-zE15V`{kloJ#$7wg&iQ=-IGug1i!&xa$+j2THP~ z#LE-sA{9LDq)?9&H91Dm`v^&$SrgP@I^XHBrTa1`vAklCO6;)I`P6Nx7C5R%jZy2C z2$men;XLb1A(u~5nbjUL+1SUAO{2S<_FPtOf;0`b`zqS0j-)^at!vi|9iyIVBzAWO z=;Les()=e+m7!1K{`%wYGMn<85P2#tWg`} zDNECZrW;(;Pet#C&R5d-`5$-m8uypxC+*-HMu5clD3QL@=W+o^^k|WK4)L#j_N7(; z4dRmq+Q9xbf0kY~$|X$|t%2(rXGvV5uJZ=n%-Ivx+1umeOd$J_(}~gyW`~L{VSmGK zzys>9CqC#fh2;+b>Rzm~_M1R!S791hroB2z`=;wQcvLu@fr#q8a`2*8D0f$A@PlKA z>3u2UUkf)!&~*HWeKpn3GPe@-b!er!7BrQ7`^THZ^L3*sj8IBPA~XDTCEN#Ix8a03 zbSVi3wTvH9@4zz7X#Qi-LTq8Ul)1_W`}Wip$KNIZjSN{jJL>TNkCxi&4vQ&txDzs~)QQL97cU~k`CF6wcn zi@wgH-=48nyWK0#T38_^2~TIKr68gDmYz<%wYBAO*;3f&tzS_J#{h%De%{6#9dfeO z(RZDP*b`!A%BNK~^=S`K;bA{M-8~~w)Jpm=sY(LVx@&M`Oeo>V2b!)EO79xQ6L2(X zpTxiZ5m6MTaBogca?4Xfk5=vVR&myFYq^Q3W)8ewc3kA6frzp& + + + + + + +My Project: Class Hierarchy + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + +
 CDataBaseSingletonКласс для работы с базой данных
 CQObject
 CMyTcpServer
 CSingletonDestroyerКласс для разрушения экземпляра Singleton
+
+
+
+ + + + diff --git a/docs/doxygen/html/hierarchy.js b/docs/doxygen/html/hierarchy.js new file mode 100644 index 0000000..cf24094 --- /dev/null +++ b/docs/doxygen/html/hierarchy.js @@ -0,0 +1,8 @@ +var hierarchy = +[ + [ "DataBaseSingleton", "class_data_base_singleton.html", null ], + [ "QObject", null, [ + [ "MyTcpServer", "class_my_tcp_server.html", null ] + ] ], + [ "SingletonDestroyer", "class_singleton_destroyer.html", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/index.html b/docs/doxygen/html/index.html new file mode 100644 index 0000000..0ba1dcf --- /dev/null +++ b/docs/doxygen/html/index.html @@ -0,0 +1,119 @@ + + + + + + + +My Project: Main Page + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
My Project Documentation
+
+
+ +
+
+ + + + diff --git a/docs/doxygen/html/inherit_graph_0.dot b/docs/doxygen/html/inherit_graph_0.dot new file mode 100644 index 0000000..320fdd4 --- /dev/null +++ b/docs/doxygen/html/inherit_graph_0.dot @@ -0,0 +1,9 @@ +digraph "Graphical Class Hierarchy" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + rankdir="LR"; + Node0 [id="Node000000",label="DataBaseSingleton",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$class_data_base_singleton.html",tooltip="Класс для работы с базой данных."]; +} diff --git a/docs/doxygen/html/inherit_graph_0.map b/docs/doxygen/html/inherit_graph_0.map new file mode 100644 index 0000000..866df6a --- /dev/null +++ b/docs/doxygen/html/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/doxygen/html/inherit_graph_0.md5 b/docs/doxygen/html/inherit_graph_0.md5 new file mode 100644 index 0000000..19418ff --- /dev/null +++ b/docs/doxygen/html/inherit_graph_0.md5 @@ -0,0 +1 @@ +46dd13a91d58f7b8d02db6987dd2c88b \ No newline at end of file diff --git a/docs/doxygen/html/inherit_graph_0.png b/docs/doxygen/html/inherit_graph_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a0675cfe84c11c5ddc961e9de814a9e3acbda9 GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0vp^6M$HigAGWobxf!OQfx`y?k)`fL2$v|<&zm07@vE( zIEGZrc{}@d?qLHSSJ#EfC6jb6vGPHPM;mQU+GSHGO~bKd4D>zE#Wv)K50>0XbOxu^2{&L-HNs_m}J%-~#|IlH)C zXY!I`YxmBsJ#)vKPe0K#$NL@s(q94kMvtx-|5_rt=%%L5wj0XEf#+{*O+GWNcU9_w z3w-9s-%M_Qd-&>xUpcY=f|FXkBF=5Su=!YrZTzX4mIvlPV^(pj*uvR6wO8i$oCrht zIm;~6mz@t^8Ou9==Y#yj<{4{6re69h!uC%hFfWRMk@v}}MTU-?%t#@}^gn_lVh)SS w(i)lLANRih-SM-bb7GL4+j&M%EG4kjF|IP4xsdf_iV2AC>FVdQ&MBb@0B}D9`v3p{ literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/inherit_graph_1.dot b/docs/doxygen/html/inherit_graph_1.dot new file mode 100644 index 0000000..9924430 --- /dev/null +++ b/docs/doxygen/html/inherit_graph_1.dot @@ -0,0 +1,11 @@ +digraph "Graphical Class Hierarchy" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + rankdir="LR"; + Node0 [id="Node000000",label="QObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node0 -> Node1 [id="edge1_Node000000_Node000001",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node1 [id="Node000001",label="MyTcpServer",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$class_my_tcp_server.html",tooltip=" "]; +} diff --git a/docs/doxygen/html/inherit_graph_1.map b/docs/doxygen/html/inherit_graph_1.map new file mode 100644 index 0000000..1c82ef2 --- /dev/null +++ b/docs/doxygen/html/inherit_graph_1.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/doxygen/html/inherit_graph_1.md5 b/docs/doxygen/html/inherit_graph_1.md5 new file mode 100644 index 0000000..035b956 --- /dev/null +++ b/docs/doxygen/html/inherit_graph_1.md5 @@ -0,0 +1 @@ +194cad8a67960d87d1bfa1f4f1293f4c \ No newline at end of file diff --git a/docs/doxygen/html/inherit_graph_1.png b/docs/doxygen/html/inherit_graph_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ad811fe1a7797dd4ac615352d324aeb685c7cc2a GIT binary patch literal 1126 zcmV-s1eyDZP))cnB1V@eNLf3mtZk@$|4m6fxqdZ~_LnodNX`M&?E?mCL_egC_< zYoK>L&)e_yde5W#CgP1$^^&SSsIIJ5nFH{!?jnj15&ldYA_#&t0JG73BS8#JPft59 zs7*FEH|s8;G~f3zH8oXt8Dp*2>tTC)dt|>?LoGxU!ypnh0E0->01P5g12Bk04Zt80 zH9+d?iy}Im&d_$h-!Igz)9GaPO*_^^KW^xI|9F^DU|s~v_on5yx@$5aB2d-B$HO*h z^7`gU8oTV6b+Q)3q=1y!m&Qg2U59!0p`MtW#5bx~H~?m$I0FF?;J&kyI*=B&tbj#D z`}0{bKj~{h?!~?b^zJq!$9<27sHY_yB?75&#f>Z7Ee9nPtN5=&YF5#zb_S ztn-+R7jIK!?4;UF#wj}!H#UeSGig#N)B1$lHfG<&4Lz$KuB&1}-{Nx!4gs730Bw2r zs+1St=yvq`_=UjaHr3>UQnto28XH90x2ZP98=U_1+~TG_R>jvCzEGYr>92zITaRjb zhIxFaP`Bt6Kkb*!q>bshvbNKX9cR{z_b*$!t!L842GLY}1=ghx-~9RVuQOjQOiWkt}Nf48s?OdsPf#?2Jc@5w$ zfV;QW^_-l*_fYr{e4H0b0iNEwA{*6J`@e3tTgPdgFrB$<%~n;c#9DcwA3k?Qx09a5 z;_X7V7EZEeM;9~a>bLT8bw=*2UXf2c;G(Cv4Mq6D;X~^utcl5On~g<__{?K-CdzxK zX+LU>2wJ}Z}tGA|U?+8uy9p|`d+pGY)va}=tfF}T+bbr^M-u{it zqF7MinzNHSkhgGRYf&R_oTB}X+t+kq=(shQYW-qOlPyol5rB07>)l`U{ln9Si#jxR zS`)-77l2$?zA6U*4(hJMg(9yHXjp54*wz4!0~Y}tw@~wAP(%&DAQCkIgGkf>3?fkj zq%PL%?Cexo2UTEeYb)`e+fsG*_VyC@j|4FYf_=~P)&_%t^P<{BL=XhQe%*BxrK)SY sySsIlK>$3@d!FBlh=_=Yh=|73e?;wUbdHb!qyPW_07*qoM6N<$f`P&(Hvj+t literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/inherit_graph_2.dot b/docs/doxygen/html/inherit_graph_2.dot new file mode 100644 index 0000000..d331a60 --- /dev/null +++ b/docs/doxygen/html/inherit_graph_2.dot @@ -0,0 +1,9 @@ +digraph "Graphical Class Hierarchy" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + rankdir="LR"; + Node0 [id="Node000000",label="SingletonDestroyer",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$class_singleton_destroyer.html",tooltip="Класс для разрушения экземпляра Singleton."]; +} diff --git a/docs/doxygen/html/inherit_graph_2.map b/docs/doxygen/html/inherit_graph_2.map new file mode 100644 index 0000000..83ecd10 --- /dev/null +++ b/docs/doxygen/html/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/doxygen/html/inherit_graph_2.md5 b/docs/doxygen/html/inherit_graph_2.md5 new file mode 100644 index 0000000..25466e1 --- /dev/null +++ b/docs/doxygen/html/inherit_graph_2.md5 @@ -0,0 +1 @@ +e30c74526f09d45e3f936ffa233a00d5 \ No newline at end of file diff --git a/docs/doxygen/html/inherit_graph_2.png b/docs/doxygen/html/inherit_graph_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f031b053b21848377e6b07a71a5820f6d7edd1a2 GIT binary patch literal 563 zcmV-30?hr1P)0Kux}6~g^ow)uXP)PWU-uR^BBC1+eYTSY zF2aW~=F6{ma-NN8nyRY-*I*pS-Fn+t2Y4aiJU|Sb2Z(|505NbLAO_9@#6+*^xez^l zZ#2%iKfn8BX&?N7Hue&7cj!RwmB5-4p3QQq_6F zuoXTN(e6U{_1r>j?P9i%+NNkpC1yWIXRMCX&6SVFTZ&593U_15QS2Yt+;htNetFZv zCvQ0 z!tB?V*y66mN8up+#v~0LVgGyYa`tm{=Gf(E6)M$oo}5H5Yu%40x*Cwn{kbc5*fR(0&%(Igc@Lm=t=Lqwc~MxDIe0AO_9@#K3ug82srE zhuo#aeqmTLS<9006)l`~rg>QS>!_z_kDX002ovPDHLkV1n2i B31|QS literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/inherits.html b/docs/doxygen/html/inherits.html new file mode 100644 index 0000000..f368ea4 --- /dev/null +++ b/docs/doxygen/html/inherits.html @@ -0,0 +1,139 @@ + + + + + + + +My Project: Class Hierarchy + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + +
+ + + +
+ + + + + +
+ + + +
+
+
+ + + + diff --git a/docs/doxygen/html/jquery.js b/docs/doxygen/html/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/docs/doxygen/html/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/doxygen/html/main_8cpp.html b/docs/doxygen/html/main_8cpp.html new file mode 100644 index 0000000..cea038f --- /dev/null +++ b/docs/doxygen/html/main_8cpp.html @@ -0,0 +1,217 @@ + + + + + + + +My Project: server/main.cpp File Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
main.cpp File Reference
+
+
+
#include <QCoreApplication>
+#include <QObject>
+#include <QVariant>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include "mytcpserver.h"
+#include "databasesingleton.h"
+
+Include dependency graph for main.cpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +

+Functions

int main (int argc, char *argv[])
 
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + + + + + +
int main (int argc,
char * argv[] )
+
+
11 {
+
12 QCoreApplication a(argc, argv);
+
13
+
14 // Инициализация БД
+ +
16 if (!db->initialize("Easyweek.db")) {
+
17 qFatal("Failed to initialize database");
+
18 }
+
19
+
20
+
21 MyTcpServer myserv;
+
22 return a.exec();
+
23}
+
Класс для работы с базой данных.
Definition databasesingleton.h:43
+
bool initialize(const QString &databaseName)
Инициализация базы данных.
Definition databasesingleton.cpp:18
+
static DataBaseSingleton * getInstance()
Получение единственного экземпляра Singleton.
Definition databasesingleton.cpp:10
+
Definition mytcpserver.h:12
+
+
+
+
+
+ + + + diff --git a/docs/doxygen/html/main_8cpp.js b/docs/doxygen/html/main_8cpp.js new file mode 100644 index 0000000..783c492 --- /dev/null +++ b/docs/doxygen/html/main_8cpp.js @@ -0,0 +1,4 @@ +var main_8cpp = +[ + [ "main", "main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/main_8cpp__incl.dot b/docs/doxygen/html/main_8cpp__incl.dot new file mode 100644 index 0000000..71a0ab6 --- /dev/null +++ b/docs/doxygen/html/main_8cpp__incl.dot @@ -0,0 +1,44 @@ +digraph "server/main.cpp" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/main.cpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QCoreApplication",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QVariant",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge6_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="mytcpserver.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8h.html",tooltip=" "]; + Node7 -> Node3 [id="edge7_Node000007_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node7 -> Node8 [id="edge8_Node000007_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QTcpServer",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node9 [id="edge9_Node000007_Node000009",color="steelblue1",style="solid",tooltip=" "]; + Node9 [id="Node000009",label="QTcpSocket",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node10 [id="edge10_Node000007_Node000010",color="steelblue1",style="solid",tooltip=" "]; + Node10 [id="Node000010",label="QtNetwork",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node11 [id="edge11_Node000007_Node000011",color="steelblue1",style="solid",tooltip=" "]; + Node11 [id="Node000011",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node12 [id="edge12_Node000007_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node12 [id="Node000012",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node13 [id="edge13_Node000007_Node000013",color="steelblue1",style="solid",tooltip=" "]; + Node13 [id="Node000013",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node14 [id="edge14_Node000001_Node000014",color="steelblue1",style="solid",tooltip=" "]; + Node14 [id="Node000014",label="databasesingleton.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8h.html",tooltip=" "]; + Node14 -> Node5 [id="edge15_Node000014_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node14 -> Node6 [id="edge16_Node000014_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node14 -> Node15 [id="edge17_Node000014_Node000015",color="steelblue1",style="solid",tooltip=" "]; + Node15 [id="Node000015",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node14 -> Node12 [id="edge18_Node000014_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node14 -> Node16 [id="edge19_Node000014_Node000016",color="steelblue1",style="solid",tooltip=" "]; + Node16 [id="Node000016",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node14 -> Node17 [id="edge20_Node000014_Node000017",color="steelblue1",style="solid",tooltip=" "]; + Node17 [id="Node000017",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/main_8cpp__incl.map b/docs/doxygen/html/main_8cpp__incl.map new file mode 100644 index 0000000..bf2fbf9 --- /dev/null +++ b/docs/doxygen/html/main_8cpp__incl.map @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/main_8cpp__incl.md5 b/docs/doxygen/html/main_8cpp__incl.md5 new file mode 100644 index 0000000..a48ca6e --- /dev/null +++ b/docs/doxygen/html/main_8cpp__incl.md5 @@ -0,0 +1 @@ +4faa68d62b86d4930b0b92d3536355e2 \ No newline at end of file diff --git a/docs/doxygen/html/main_8cpp__incl.png b/docs/doxygen/html/main_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..ade234dada12d0fe061b394cd60fcd617e6315b6 GIT binary patch literal 32344 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 Ja%t0#{|Ax?q@Dl( literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/minus.svg b/docs/doxygen/html/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs/doxygen/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/doxygen/html/minusd.svg b/docs/doxygen/html/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs/doxygen/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/doxygen/html/mytcpserver_8cpp.html b/docs/doxygen/html/mytcpserver_8cpp.html new file mode 100644 index 0000000..75b7629 --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8cpp.html @@ -0,0 +1,157 @@ + + + + + + + +My Project: server/mytcpserver.cpp File Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
mytcpserver.cpp File Reference
+
+
+
#include "mytcpserver.h"
+#include <QDebug>
+#include <QCoreApplication>
+#include <QString>
+#include "func2serv.h"
+
+Include dependency graph for mytcpserver.cpp:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + diff --git a/docs/doxygen/html/mytcpserver_8cpp__incl.dot b/docs/doxygen/html/mytcpserver_8cpp__incl.dot new file mode 100644 index 0000000..9986274 --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8cpp__incl.dot @@ -0,0 +1,33 @@ +digraph "server/mytcpserver.cpp" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/mytcpserver.cpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="mytcpserver.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8h.html",tooltip=" "]; + Node2 -> Node3 [id="edge2_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node4 [id="edge3_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QTcpServer",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node5 [id="edge4_Node000002_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QTcpSocket",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node6 [id="edge5_Node000002_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QtNetwork",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node7 [id="edge6_Node000002_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node8 [id="edge7_Node000002_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node9 [id="edge8_Node000002_Node000009",color="steelblue1",style="solid",tooltip=" "]; + Node9 [id="Node000009",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node8 [id="edge9_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node1 -> Node10 [id="edge10_Node000001_Node000010",color="steelblue1",style="solid",tooltip=" "]; + Node10 [id="Node000010",label="QCoreApplication",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node11 [id="edge11_Node000001_Node000011",color="steelblue1",style="solid",tooltip=" "]; + Node11 [id="Node000011",label="QString",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node12 [id="edge12_Node000001_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node12 [id="Node000012",label="func2serv.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8h.html",tooltip=" "]; + Node12 -> Node7 [id="edge13_Node000012_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node12 -> Node8 [id="edge14_Node000012_Node000008",color="steelblue1",style="solid",tooltip=" "]; +} diff --git a/docs/doxygen/html/mytcpserver_8cpp__incl.map b/docs/doxygen/html/mytcpserver_8cpp__incl.map new file mode 100644 index 0000000..dddc42a --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8cpp__incl.map @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/mytcpserver_8cpp__incl.md5 b/docs/doxygen/html/mytcpserver_8cpp__incl.md5 new file mode 100644 index 0000000..8bb7f9a --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8cpp__incl.md5 @@ -0,0 +1 @@ +f22f3cd8041d540bced8b0973b81e53e \ No newline at end of file diff --git a/docs/doxygen/html/mytcpserver_8cpp__incl.png b/docs/doxygen/html/mytcpserver_8cpp__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..fb03fd61b6af5ed0a7f22ca595b9db3b61fe0f81 GIT binary patch literal 19849 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/mytcpserver_8h.html b/docs/doxygen/html/mytcpserver_8h.html new file mode 100644 index 0000000..5f31b22 --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h.html @@ -0,0 +1,170 @@ + + + + + + + +My Project: server/mytcpserver.h File Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
mytcpserver.h File Reference
+
+
+
#include <QObject>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QtNetwork>
+#include <QByteArray>
+#include <QDebug>
+#include <QMap>
+
+Include dependency graph for mytcpserver.h:
+
+
+ + + + + + + + + + + + + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  MyTcpServer
 
+
+
+ + + + diff --git a/docs/doxygen/html/mytcpserver_8h.js b/docs/doxygen/html/mytcpserver_8h.js new file mode 100644 index 0000000..bf548a4 --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h.js @@ -0,0 +1,4 @@ +var mytcpserver_8h = +[ + [ "MyTcpServer", "class_my_tcp_server.html", "class_my_tcp_server" ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/mytcpserver_8h__dep__incl.dot b/docs/doxygen/html/mytcpserver_8h__dep__incl.dot new file mode 100644 index 0000000..11cb32c --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h__dep__incl.dot @@ -0,0 +1,12 @@ +digraph "server/mytcpserver.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/mytcpserver.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="server/main.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$main_8cpp.html",tooltip=" "]; + Node1 -> Node3 [id="edge2_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="server/mytcpserver.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8cpp.html",tooltip=" "]; +} diff --git a/docs/doxygen/html/mytcpserver_8h__dep__incl.map b/docs/doxygen/html/mytcpserver_8h__dep__incl.map new file mode 100644 index 0000000..dd474f2 --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/doxygen/html/mytcpserver_8h__dep__incl.md5 b/docs/doxygen/html/mytcpserver_8h__dep__incl.md5 new file mode 100644 index 0000000..7c9c71d --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h__dep__incl.md5 @@ -0,0 +1 @@ +17c4eccf7d9683bd4d8a434b9b476455 \ No newline at end of file diff --git a/docs/doxygen/html/mytcpserver_8h__dep__incl.png b/docs/doxygen/html/mytcpserver_8h__dep__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..7f473534e7ce02fc6856c6a869ea0b25f0760aef GIT binary patch literal 2863 zcmZ`*c{J2*8~zO;d&EfDm$Hn!3_`r3LAFqq!4QKX+nDT??1d4%(PT_0OR^1;T{1D& zA>N6|`WkDDCG^USeDi+i`~LX;`0o3h=ef?gpL3tNw&>13rl3d$c=pXY} zAS0<7#^pM(H}eAc{n(0}{9oQP=Y7o2^{$+ITC%C3VJt7#%;wvq*0;(Yhr^Z3CI10l zB~R;wk7|!R%3Z7OmW-Ah7F|;{DSmb3(?DU{)X$%ZQ>d9KBWPItF2#Uxq@XZEn8a@x zGB&oBCx6a}%E_&05-LFjrKW!DM4G{zJT>IyRBLmE{t$&zQu}xy zD3}ii7&_>yDNYpXqe*)$rtaypv!%q9N-e~=Q3oqK6KYtS(Jra?+9&d^_=X64PkfjZ-% zp2y80*z(Q*M4{A~rxcxBi&JTY#OQj6=z!}_Iksu?te3UhIP*%V^PGN;m)!~DunV5M zQ)uC&BqGg49yD~NNg5vs?32Em#s3UaEUc#G^DH?S~S z5-V==@p4)Y41p5<-)YLdWkUlFn1ya`s!(d5Jh)y{qE~OJb#r!iicvn6@)kEU3+wuZZ>Q39%dGwU6`1_-obPsgkAenBNvEb2Z4T~7rZ812 z!lEQcZC7M{os+{NNj`pKF`edh4CD-r1fMZYzAe9IVS<6Gk6rBUCfl71gtEsw?C5}cMEw)zx9s+o2%`+W@?ZX-*}M?7E8onMThGHjBNZURC)L=tH8_>Ol> zwSkNr2?&b&3$=K-TycVHUO=!d3p>9bgorE<9mClZd-^P z1C|cS>uW+$J}2nFFTl9EEkXGUIjXpC=~;913B^H*1p{%^G3y`F!wJ@`NG4O*?v3}C z)}60PT#zhBjP#tCpw6A|mE(8r8rS(LFLF;6j3ni@>OyUvJV3SFKZP-{JOzeYwbz== zo)#N)#E5s6REmMRF*~vBqXEKPS-6>(p|8#ivJVzm4StZ%H0AC>qSAiMah{X*`G*(Qg0*CbUdt6YP0Zt~xQ*;pUe| zxwg}T#D$)F6uxQ7m1I|S%F|az?Os#O(_*`6E|82JM?th#O1qzap!TO(nY+&D*&4^|SSq3nu(cRa+asw9}cqqTA5=+`zf&a=rRG(}W?O`}H3j z3!wSRA?JzkCY4%RD=M78q?-8%U|li{!|e#_uWQ-UwdI=C3Ap#Kp=3uEMft>hfYaP8 z)VBB{>6|#$#d?RBANTnF^XG61GVREL6hr?Y&)5z@QNsDZnP4z{om$Sd$tje=4a=W_ zJa9HoNMUas@#>)->oR8{D2=zuWmxSjXIb6svt7dAI{dWFDj*(Bxu0_H@e_EgK2TmGvd@f>@Be{B?1DhNAp6 z+zyR|R=u|*1YYLc15@#D48Zlu6FF3JW>Rs`!v;4@ST%4pi1_#dxITV@Zwmg;LBZQ? zYu0z=8D*^yCLdw0pNz>K-K+KY|rs;RarShTro}-`SmcovroMa`)~H z4b?s$%?Lr$eNl2?UyO-;rPfL`dwgou|1|`aSp2o-xWAM(X!Zu%5e-RWWJpj&fIgcd zfGrju2SbItc3$P_+HMHBYMlN<@Hl41DH;(>n4>uiIBgmj?~V_6C|@1X*uI;oQ0rUp zSwFIcZtOwR&HCa1O*X7i{iUBRU1~IwF6}(!#B3hFw6w45QE*Gwxh3O4rW-xRxSlbI z)6yBrw&W2%@_C~rfRV0g9$IgOK#xwSZnzn28+Ww0s$Z$@ZRq%YEH=ppKcM$iW^Gr& zU%;p)?#WU5-~3_i%*}KA?E*^!ReKk%+#adDs95Y8F!{Cwdv0pk;ytFF$z7TY8jD*< zaZD+0wp5PNv;M2jw*ZzxTXI(#v^GK?1Tb)ncG4E+BNI{XkwO`K^mc#PGckC#+cq-* zU*XGlmxA=laDKvP|7pEd9UADa@(7dpn`mM0AlI9v90s?m+PyWs_aRni3Ck90>yv7|y$A>Be9Ne;@p@L*VaZ$E1=nnN#SWS7%7 zmDR?5ZpZ5j!-_ZFf-D0i@jIMO+upBU8VR{`#H1SOQ E7iuVZYXATM literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/mytcpserver_8h__incl.dot b/docs/doxygen/html/mytcpserver_8h__incl.dot new file mode 100644 index 0000000..fe119db --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h__incl.dot @@ -0,0 +1,22 @@ +digraph "server/mytcpserver.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/mytcpserver.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge1_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge2_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QTcpServer",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge3_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QTcpSocket",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge4_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QtNetwork",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge5_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge6_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node8 [id="edge7_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/html/mytcpserver_8h__incl.map b/docs/doxygen/html/mytcpserver_8h__incl.map new file mode 100644 index 0000000..f7f291f --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen/html/mytcpserver_8h__incl.md5 b/docs/doxygen/html/mytcpserver_8h__incl.md5 new file mode 100644 index 0000000..f1edb9e --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h__incl.md5 @@ -0,0 +1 @@ +b3c7bd6c6d2471a43b651b34423c262c \ No newline at end of file diff --git a/docs/doxygen/html/mytcpserver_8h__incl.png b/docs/doxygen/html/mytcpserver_8h__incl.png new file mode 100644 index 0000000000000000000000000000000000000000..b6849c8d5c28e24d00596abb50fb493e30eb4745 GIT binary patch literal 10302 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 A`2YX_ literal 0 HcmV?d00001 diff --git a/docs/doxygen/html/mytcpserver_8h_source.html b/docs/doxygen/html/mytcpserver_8h_source.html new file mode 100644 index 0000000..2dc2c1b --- /dev/null +++ b/docs/doxygen/html/mytcpserver_8h_source.html @@ -0,0 +1,157 @@ + + + + + + + +My Project: server/mytcpserver.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
My Project +
+
Project description
+
+ +   + + + + +
+
+
+ + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
mytcpserver.h
+
+
+Go to the documentation of this file.
1#ifndef MYTCPSERVER_H
+
2#define MYTCPSERVER_H
+
3#include <QObject>
+
4#include <QTcpServer>
+
5#include <QTcpSocket>
+
6#include <QtNetwork>
+
7#include <QByteArray>
+
8#include <QDebug>
+
9#include <QMap>
+
10
+
+
11class MyTcpServer : public QObject
+
12{
+
13 Q_OBJECT
+
14public:
+
15 explicit MyTcpServer(QObject *parent = nullptr);
+ +
17public slots:
+
18 void slotNewConnection();
+ +
20 void slotServerRead();
+
21private:
+
22 QTcpServer * mTcpServer;
+
23 QTcpSocket * mTcpSocket;
+ +
25 QMap<int, QTcpSocket*> mSocketDescriptors; // Хранение дескрипторов сокетов
+
26};
+
+
27#endif // MYTCPSERVER_H
+
void slotNewConnection()
Definition mytcpserver.cpp:28
+
void slotClientDisconnected()
Definition mytcpserver.cpp:61
+
QTcpServer * mTcpServer
Definition mytcpserver.h:22
+
QMap< int, QTcpSocket * > mSocketDescriptors
Definition mytcpserver.h:25
+
~MyTcpServer()
Definition mytcpserver.cpp:7
+
void slotServerRead()
Definition mytcpserver.cpp:49
+
QTcpSocket * mTcpSocket
Definition mytcpserver.h:23
+
MyTcpServer(QObject *parent=nullptr)
Definition mytcpserver.cpp:14
+
int server_status
Definition mytcpserver.h:24
+
+
+ + + + diff --git a/docs/doxygen/html/nav_g.png b/docs/doxygen/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!K=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + + + diff --git a/docs/doxygen/html/plusd.svg b/docs/doxygen/html/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs/doxygen/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/doxygen/html/resize.js b/docs/doxygen/html/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/docs/doxygen/html/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/docs/doxygen/html/search/all_0.js b/docs/doxygen/html/search/all_0.js new file mode 100644 index 0000000..bbade82 --- /dev/null +++ b/docs/doxygen/html/search/all_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['add_5ffavorite_5fration_0',['add_favorite_ration',['../func2serv_8cpp.html#a6496e445a644cca89c6252f6e7adecb0',1,'add_favorite_ration(const QStringList &container): func2serv.cpp'],['../func2serv_8h.html#a6496e445a644cca89c6252f6e7adecb0',1,'add_favorite_ration(const QStringList &container): func2serv.cpp']]], + ['add_5fproduct_1',['add_product',['../func2serv_8cpp.html#a27ffe3af29c8442de4aa94a5e48d2345',1,'add_product(QStringList params): func2serv.cpp'],['../func2serv_8h.html#aea4bc93c1f84d34a05a2c25939dcfaac',1,'add_product(QStringList): func2serv.cpp']]], + ['add_5fration_5fto_5ffavorites_2',['add_ration_to_favorites',['../func2serv_8cpp.html#a064e99d59eaa1d8cccef20b3192df015',1,'add_ration_to_favorites(const QString &userId, const QString &rationId): func2serv.cpp'],['../func2serv_8h.html#a064e99d59eaa1d8cccef20b3192df015',1,'add_ration_to_favorites(const QString &userId, const QString &rationId): func2serv.cpp']]], + ['addfavoriteration_3',['addFavoriteRation',['../class_data_base_singleton.html#a515aed6cbbb34fe71f254943a70d504b',1,'DataBaseSingleton']]], + ['addproduct_4',['addProduct',['../class_data_base_singleton.html#a3fe2a5e1f41a408023066e8caf63b523',1,'DataBaseSingleton']]], + ['adduser_5',['addUser',['../class_data_base_singleton.html#af17db97dfc40b0fa48b3ed9abeacca76',1,'DataBaseSingleton']]], + ['auth_6',['auth',['../func2serv_8cpp.html#a173db167f59671d56b49f5d7d11ef531',1,'auth(QStringList log): func2serv.cpp'],['../func2serv_8h.html#acbd6ff747a2b100b8f8da4a9b99d43c7',1,'auth(QStringList): func2serv.cpp']]] +]; diff --git a/docs/doxygen/html/search/all_1.js b/docs/doxygen/html/search/all_1.js new file mode 100644 index 0000000..5903e0e --- /dev/null +++ b/docs/doxygen/html/search/all_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['check_5ftask_0',['check_task',['../func2serv_8cpp.html#a6d4386c36a7ed61c61cf3d1bad354f27',1,'check_task(): func2serv.cpp'],['../func2serv_8h.html#a6d4386c36a7ed61c61cf3d1bad354f27',1,'check_task(): func2serv.cpp']]], + ['checkusercredentials_1',['checkUserCredentials',['../class_data_base_singleton.html#a51bd7dc4507c5f3d04a2903899e13d42',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/all_2.js b/docs/doxygen/html/search/all_2.js new file mode 100644 index 0000000..c07d742 --- /dev/null +++ b/docs/doxygen/html/search/all_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['databasesingleton_0',['DataBaseSingleton',['../class_data_base_singleton.html',1,'DataBaseSingleton'],['../class_data_base_singleton.html#aa289e69de3195fef9593052246b9b1b0',1,'DataBaseSingleton::DataBaseSingleton()'],['../class_data_base_singleton.html#abe02a9a0f33a2664ba969d20d777d4d9',1,'DataBaseSingleton::DataBaseSingleton(const DataBaseSingleton &)=delete']]], + ['databasesingleton_2ecpp_1',['databasesingleton.cpp',['../databasesingleton_8cpp.html',1,'']]], + ['databasesingleton_2eh_2',['databasesingleton.h',['../databasesingleton_8h.html',1,'']]], + ['db_3',['db',['../class_data_base_singleton.html#a929da7bbfe9e068b4c3bc5a095e6156a',1,'DataBaseSingleton']]], + ['destroyer_4',['destroyer',['../class_data_base_singleton.html#a414f1ff51603535a839d5fc2e24b65e0',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/all_3.js b/docs/doxygen/html/search/all_3.js new file mode 100644 index 0000000..3099ddb --- /dev/null +++ b/docs/doxygen/html/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['executequery_0',['executeQuery',['../class_data_base_singleton.html#a4aa9edfd87be83120492e7b5c8de6151',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/all_4.js b/docs/doxygen/html/search/all_4.js new file mode 100644 index 0000000..d3ea692 --- /dev/null +++ b/docs/doxygen/html/search/all_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['fetch_5fproducts_5ffrom_5fdb_0',['fetch_products_from_db',['../func2serv_8cpp.html#af1b6a57c9eed96cee280cce58342bed5',1,'func2serv.cpp']]], + ['func2serv_2ecpp_1',['func2serv.cpp',['../func2serv_8cpp.html',1,'']]], + ['func2serv_2eh_2',['func2serv.h',['../func2serv_8h.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/all_5.js b/docs/doxygen/html/search/all_5.js new file mode 100644 index 0000000..61d8d1e --- /dev/null +++ b/docs/doxygen/html/search/all_5.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['get_5fall_5fusers_0',['get_all_users',['../func2serv_8cpp.html#ab8bda875989629df9b683e881296b32d',1,'get_all_users(): func2serv.cpp'],['../func2serv_8h.html#ab8bda875989629df9b683e881296b32d',1,'get_all_users(): func2serv.cpp']]], + ['get_5fdynamic_5fstat_1',['get_dynamic_stat',['../func2serv_8cpp.html#a8a2ae0ff8263d70f4e0f30d6b0d89af7',1,'get_dynamic_stat(): func2serv.cpp'],['../func2serv_8h.html#a8a2ae0ff8263d70f4e0f30d6b0d89af7',1,'get_dynamic_stat(): func2serv.cpp']]], + ['get_5fmonthly_5flogins_2',['get_monthly_logins',['../func2serv_8cpp.html#a2d6f70d14e474616a4a16a72485c2f0e',1,'get_monthly_logins(): func2serv.cpp'],['../func2serv_8h.html#a2d6f70d14e474616a4a16a72485c2f0e',1,'get_monthly_logins(): func2serv.cpp']]], + ['get_5fproduct_5fcount_3',['get_product_count',['../func2serv_8cpp.html#a4ddd067c5a29f76aead93c977a05113a',1,'get_product_count(): func2serv.cpp'],['../func2serv_8h.html#a4ddd067c5a29f76aead93c977a05113a',1,'get_product_count(): func2serv.cpp']]], + ['get_5fproducts_4',['get_products',['../func2serv_8cpp.html#a73b3ae758a8cf3621318d27cd1a17722',1,'get_products(QString userId): func2serv.cpp'],['../func2serv_8h.html#ab8096a94a4e4aaa7af0852f0ffc11c99',1,'get_products(QString UserId): func2serv.cpp']]], + ['get_5fstable_5fstat_5',['get_stable_stat',['../func2serv_8cpp.html#a2d521723770cde0e28bb41544394917b',1,'get_stable_stat(): func2serv.cpp'],['../func2serv_8h.html#a2d521723770cde0e28bb41544394917b',1,'get_stable_stat(): func2serv.cpp']]], + ['get_5fstat_6',['get_stat',['../func2serv_8cpp.html#a0a88fbccc63c8cc890ded3a20fb71e72',1,'get_stat(): func2serv.cpp'],['../func2serv_8h.html#a0a88fbccc63c8cc890ded3a20fb71e72',1,'get_stat(): func2serv.cpp']]], + ['get_5fuser_5fcount_7',['get_user_count',['../func2serv_8cpp.html#a8ebcc70a2024aab70883f094fc35849e',1,'get_user_count(): func2serv.cpp'],['../func2serv_8h.html#a8ebcc70a2024aab70883f094fc35849e',1,'get_user_count(): func2serv.cpp']]], + ['get_5fweekly_5flogins_8',['get_weekly_logins',['../func2serv_8cpp.html#a4d269e13002c5cded37bee9ade854d93',1,'get_weekly_logins(): func2serv.cpp'],['../func2serv_8h.html#a4d269e13002c5cded37bee9ade854d93',1,'get_weekly_logins(): func2serv.cpp']]], + ['getfavoritesbyuser_9',['getFavoritesByUser',['../class_data_base_singleton.html#afee32779221eaa5f92eb0c8a8666bb50',1,'DataBaseSingleton']]], + ['getinstance_10',['getInstance',['../class_data_base_singleton.html#ae1a24c20c524fd67554e1ffe66319ede',1,'DataBaseSingleton']]], + ['getproductsbyuser_11',['getProductsByUser',['../class_data_base_singleton.html#a84fe7936dd15c077eff86d7884ce3049',1,'DataBaseSingleton']]], + ['getstatistics_12',['getStatistics',['../class_data_base_singleton.html#aad20b90cdb02aab3df1f27a9e4f882a3',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/all_6.js b/docs/doxygen/html/search/all_6.js new file mode 100644 index 0000000..ffaba99 --- /dev/null +++ b/docs/doxygen/html/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['initialize_0',['initialize',['../class_singleton_destroyer.html#abcaf525b6af81fbb5717c7dae73af8ec',1,'SingletonDestroyer::initialize()'],['../class_data_base_singleton.html#a59bda63308000a018c5bdc1989582e50',1,'DataBaseSingleton::initialize()']]] +]; diff --git a/docs/doxygen/html/search/all_7.js b/docs/doxygen/html/search/all_7.js new file mode 100644 index 0000000..e85d271 --- /dev/null +++ b/docs/doxygen/html/search/all_7.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['main_0',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], + ['main_2ecpp_1',['main.cpp',['../main_8cpp.html',1,'']]], + ['menu_5fexport_2',['menu_export',['../func2serv_8cpp.html#aa70831eddff4b8ed7a04647778a35747',1,'menu_export(): func2serv.cpp'],['../func2serv_8h.html#aa70831eddff4b8ed7a04647778a35747',1,'menu_export(): func2serv.cpp']]], + ['mockdatabase_3',['mockDatabase',['../func2serv_8cpp.html#aa13aef29ff8f58936aa8f2bd99f70253',1,'func2serv.cpp']]], + ['msocketdescriptors_4',['mSocketDescriptors',['../class_my_tcp_server.html#aae9c5addbbedcfa39ccbe55204f473a3',1,'MyTcpServer']]], + ['mtcpserver_5',['mTcpServer',['../class_my_tcp_server.html#a7d854875e1e02887023ec9aac1a1542c',1,'MyTcpServer']]], + ['mtcpsocket_6',['mTcpSocket',['../class_my_tcp_server.html#ab55c030e6eb6cf5d1acfe6d7d2bf0ed1',1,'MyTcpServer']]], + ['mytcpserver_7',['MyTcpServer',['../class_my_tcp_server.html',1,'MyTcpServer'],['../class_my_tcp_server.html#acf367c4695b4d160c7a2d25c2afaaec4',1,'MyTcpServer::MyTcpServer()']]], + ['mytcpserver_2ecpp_8',['mytcpserver.cpp',['../mytcpserver_8cpp.html',1,'']]], + ['mytcpserver_2eh_9',['mytcpserver.h',['../mytcpserver_8h.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/all_8.js b/docs/doxygen/html/search/all_8.js new file mode 100644 index 0000000..f7ce3c0 --- /dev/null +++ b/docs/doxygen/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3d_0',['operator=',['../class_data_base_singleton.html#af310f74ceebe21ef29454dd7eccac19a',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/all_9.js b/docs/doxygen/html/search/all_9.js new file mode 100644 index 0000000..77c7768 --- /dev/null +++ b/docs/doxygen/html/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['p_5finstance_0',['p_instance',['../class_singleton_destroyer.html#a66a75552c83eb8515e6d458d7a6b0178',1,'SingletonDestroyer::p_instance'],['../class_data_base_singleton.html#abf86267afcfebbe05658438ff0ccfdfd',1,'DataBaseSingleton::p_instance']]], + ['parsing_1',['parsing',['../func2serv_8cpp.html#a99bd96103155e73697cc47518a5559a4',1,'parsing(QString input, int socdes): func2serv.cpp'],['../func2serv_8h.html#a99bd96103155e73697cc47518a5559a4',1,'parsing(QString input, int socdes): func2serv.cpp']]] +]; diff --git a/docs/doxygen/html/search/all_a.js b/docs/doxygen/html/search/all_a.js new file mode 100644 index 0000000..139bd7e --- /dev/null +++ b/docs/doxygen/html/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['reg_0',['reg',['../func2serv_8cpp.html#ac87f1fa2fd8c6ee1a48c3a56a99b3275',1,'reg(QStringList params): func2serv.cpp'],['../func2serv_8h.html#a202f69a507a4e282bb2916fea170686f',1,'reg(QStringList): func2serv.cpp']]] +]; diff --git a/docs/doxygen/html/search/all_b.js b/docs/doxygen/html/search/all_b.js new file mode 100644 index 0000000..1c8f401 --- /dev/null +++ b/docs/doxygen/html/search/all_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['server_5fstatus_0',['server_status',['../class_my_tcp_server.html#ae0dc69dfef4f9fc3a5f031f4152e4f91',1,'MyTcpServer']]], + ['singletondestroyer_1',['SingletonDestroyer',['../class_singleton_destroyer.html',1,'SingletonDestroyer'],['../class_data_base_singleton.html#aa93ce997b9645496c0e17460fba08432',1,'DataBaseSingleton::SingletonDestroyer()']]], + ['slotclientdisconnected_2',['slotClientDisconnected',['../class_my_tcp_server.html#a3e040c49dbefd65b9a58ab662fc9f7a2',1,'MyTcpServer']]], + ['slotnewconnection_3',['slotNewConnection',['../class_my_tcp_server.html#a0ba7316ffe1a26c57fabde9e74b6c8dc',1,'MyTcpServer']]], + ['slotserverread_4',['slotServerRead',['../class_my_tcp_server.html#ab4a64d2eab985d723090963f5c8a2882',1,'MyTcpServer']]] +]; diff --git a/docs/doxygen/html/search/all_c.js b/docs/doxygen/html/search/all_c.js new file mode 100644 index 0000000..9a4d658 --- /dev/null +++ b/docs/doxygen/html/search/all_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['updatestatistics_0',['updateStatistics',['../class_data_base_singleton.html#ab2877d5184cd7af28f1ea3b31f523280',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/all_d.js b/docs/doxygen/html/search/all_d.js new file mode 100644 index 0000000..d3aa52b --- /dev/null +++ b/docs/doxygen/html/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_7edatabasesingleton_0',['~DataBaseSingleton',['../class_data_base_singleton.html#aa0d2615a21bdb8d7367a513c802e32c1',1,'DataBaseSingleton']]], + ['_7emytcpserver_1',['~MyTcpServer',['../class_my_tcp_server.html#ab39e651ff7c37c152215c02c225e79ef',1,'MyTcpServer']]], + ['_7esingletondestroyer_2',['~SingletonDestroyer',['../class_singleton_destroyer.html#a8ac3166871f4c5411edfdb13594dee15',1,'SingletonDestroyer']]] +]; diff --git a/docs/doxygen/html/search/classes_0.js b/docs/doxygen/html/search/classes_0.js new file mode 100644 index 0000000..c9d7519 --- /dev/null +++ b/docs/doxygen/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['databasesingleton_0',['DataBaseSingleton',['../class_data_base_singleton.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/classes_1.js b/docs/doxygen/html/search/classes_1.js new file mode 100644 index 0000000..b6ad0c4 --- /dev/null +++ b/docs/doxygen/html/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mytcpserver_0',['MyTcpServer',['../class_my_tcp_server.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/classes_2.js b/docs/doxygen/html/search/classes_2.js new file mode 100644 index 0000000..01f872c --- /dev/null +++ b/docs/doxygen/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['singletondestroyer_0',['SingletonDestroyer',['../class_singleton_destroyer.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/close.svg b/docs/doxygen/html/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs/doxygen/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/doxygen/html/search/files_0.js b/docs/doxygen/html/search/files_0.js new file mode 100644 index 0000000..99befed --- /dev/null +++ b/docs/doxygen/html/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['databasesingleton_2ecpp_0',['databasesingleton.cpp',['../databasesingleton_8cpp.html',1,'']]], + ['databasesingleton_2eh_1',['databasesingleton.h',['../databasesingleton_8h.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/files_1.js b/docs/doxygen/html/search/files_1.js new file mode 100644 index 0000000..c777b6d --- /dev/null +++ b/docs/doxygen/html/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['func2serv_2ecpp_0',['func2serv.cpp',['../func2serv_8cpp.html',1,'']]], + ['func2serv_2eh_1',['func2serv.h',['../func2serv_8h.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/files_2.js b/docs/doxygen/html/search/files_2.js new file mode 100644 index 0000000..843cf42 --- /dev/null +++ b/docs/doxygen/html/search/files_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]], + ['mytcpserver_2ecpp_1',['mytcpserver.cpp',['../mytcpserver_8cpp.html',1,'']]], + ['mytcpserver_2eh_2',['mytcpserver.h',['../mytcpserver_8h.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/functions_0.js b/docs/doxygen/html/search/functions_0.js new file mode 100644 index 0000000..bbade82 --- /dev/null +++ b/docs/doxygen/html/search/functions_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['add_5ffavorite_5fration_0',['add_favorite_ration',['../func2serv_8cpp.html#a6496e445a644cca89c6252f6e7adecb0',1,'add_favorite_ration(const QStringList &container): func2serv.cpp'],['../func2serv_8h.html#a6496e445a644cca89c6252f6e7adecb0',1,'add_favorite_ration(const QStringList &container): func2serv.cpp']]], + ['add_5fproduct_1',['add_product',['../func2serv_8cpp.html#a27ffe3af29c8442de4aa94a5e48d2345',1,'add_product(QStringList params): func2serv.cpp'],['../func2serv_8h.html#aea4bc93c1f84d34a05a2c25939dcfaac',1,'add_product(QStringList): func2serv.cpp']]], + ['add_5fration_5fto_5ffavorites_2',['add_ration_to_favorites',['../func2serv_8cpp.html#a064e99d59eaa1d8cccef20b3192df015',1,'add_ration_to_favorites(const QString &userId, const QString &rationId): func2serv.cpp'],['../func2serv_8h.html#a064e99d59eaa1d8cccef20b3192df015',1,'add_ration_to_favorites(const QString &userId, const QString &rationId): func2serv.cpp']]], + ['addfavoriteration_3',['addFavoriteRation',['../class_data_base_singleton.html#a515aed6cbbb34fe71f254943a70d504b',1,'DataBaseSingleton']]], + ['addproduct_4',['addProduct',['../class_data_base_singleton.html#a3fe2a5e1f41a408023066e8caf63b523',1,'DataBaseSingleton']]], + ['adduser_5',['addUser',['../class_data_base_singleton.html#af17db97dfc40b0fa48b3ed9abeacca76',1,'DataBaseSingleton']]], + ['auth_6',['auth',['../func2serv_8cpp.html#a173db167f59671d56b49f5d7d11ef531',1,'auth(QStringList log): func2serv.cpp'],['../func2serv_8h.html#acbd6ff747a2b100b8f8da4a9b99d43c7',1,'auth(QStringList): func2serv.cpp']]] +]; diff --git a/docs/doxygen/html/search/functions_1.js b/docs/doxygen/html/search/functions_1.js new file mode 100644 index 0000000..5903e0e --- /dev/null +++ b/docs/doxygen/html/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['check_5ftask_0',['check_task',['../func2serv_8cpp.html#a6d4386c36a7ed61c61cf3d1bad354f27',1,'check_task(): func2serv.cpp'],['../func2serv_8h.html#a6d4386c36a7ed61c61cf3d1bad354f27',1,'check_task(): func2serv.cpp']]], + ['checkusercredentials_1',['checkUserCredentials',['../class_data_base_singleton.html#a51bd7dc4507c5f3d04a2903899e13d42',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/functions_2.js b/docs/doxygen/html/search/functions_2.js new file mode 100644 index 0000000..2fdc883 --- /dev/null +++ b/docs/doxygen/html/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['databasesingleton_0',['DataBaseSingleton',['../class_data_base_singleton.html#aa289e69de3195fef9593052246b9b1b0',1,'DataBaseSingleton::DataBaseSingleton()'],['../class_data_base_singleton.html#abe02a9a0f33a2664ba969d20d777d4d9',1,'DataBaseSingleton::DataBaseSingleton(const DataBaseSingleton &)=delete']]] +]; diff --git a/docs/doxygen/html/search/functions_3.js b/docs/doxygen/html/search/functions_3.js new file mode 100644 index 0000000..3099ddb --- /dev/null +++ b/docs/doxygen/html/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['executequery_0',['executeQuery',['../class_data_base_singleton.html#a4aa9edfd87be83120492e7b5c8de6151',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/functions_4.js b/docs/doxygen/html/search/functions_4.js new file mode 100644 index 0000000..d1af3da --- /dev/null +++ b/docs/doxygen/html/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fetch_5fproducts_5ffrom_5fdb_0',['fetch_products_from_db',['../func2serv_8cpp.html#af1b6a57c9eed96cee280cce58342bed5',1,'func2serv.cpp']]] +]; diff --git a/docs/doxygen/html/search/functions_5.js b/docs/doxygen/html/search/functions_5.js new file mode 100644 index 0000000..61d8d1e --- /dev/null +++ b/docs/doxygen/html/search/functions_5.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['get_5fall_5fusers_0',['get_all_users',['../func2serv_8cpp.html#ab8bda875989629df9b683e881296b32d',1,'get_all_users(): func2serv.cpp'],['../func2serv_8h.html#ab8bda875989629df9b683e881296b32d',1,'get_all_users(): func2serv.cpp']]], + ['get_5fdynamic_5fstat_1',['get_dynamic_stat',['../func2serv_8cpp.html#a8a2ae0ff8263d70f4e0f30d6b0d89af7',1,'get_dynamic_stat(): func2serv.cpp'],['../func2serv_8h.html#a8a2ae0ff8263d70f4e0f30d6b0d89af7',1,'get_dynamic_stat(): func2serv.cpp']]], + ['get_5fmonthly_5flogins_2',['get_monthly_logins',['../func2serv_8cpp.html#a2d6f70d14e474616a4a16a72485c2f0e',1,'get_monthly_logins(): func2serv.cpp'],['../func2serv_8h.html#a2d6f70d14e474616a4a16a72485c2f0e',1,'get_monthly_logins(): func2serv.cpp']]], + ['get_5fproduct_5fcount_3',['get_product_count',['../func2serv_8cpp.html#a4ddd067c5a29f76aead93c977a05113a',1,'get_product_count(): func2serv.cpp'],['../func2serv_8h.html#a4ddd067c5a29f76aead93c977a05113a',1,'get_product_count(): func2serv.cpp']]], + ['get_5fproducts_4',['get_products',['../func2serv_8cpp.html#a73b3ae758a8cf3621318d27cd1a17722',1,'get_products(QString userId): func2serv.cpp'],['../func2serv_8h.html#ab8096a94a4e4aaa7af0852f0ffc11c99',1,'get_products(QString UserId): func2serv.cpp']]], + ['get_5fstable_5fstat_5',['get_stable_stat',['../func2serv_8cpp.html#a2d521723770cde0e28bb41544394917b',1,'get_stable_stat(): func2serv.cpp'],['../func2serv_8h.html#a2d521723770cde0e28bb41544394917b',1,'get_stable_stat(): func2serv.cpp']]], + ['get_5fstat_6',['get_stat',['../func2serv_8cpp.html#a0a88fbccc63c8cc890ded3a20fb71e72',1,'get_stat(): func2serv.cpp'],['../func2serv_8h.html#a0a88fbccc63c8cc890ded3a20fb71e72',1,'get_stat(): func2serv.cpp']]], + ['get_5fuser_5fcount_7',['get_user_count',['../func2serv_8cpp.html#a8ebcc70a2024aab70883f094fc35849e',1,'get_user_count(): func2serv.cpp'],['../func2serv_8h.html#a8ebcc70a2024aab70883f094fc35849e',1,'get_user_count(): func2serv.cpp']]], + ['get_5fweekly_5flogins_8',['get_weekly_logins',['../func2serv_8cpp.html#a4d269e13002c5cded37bee9ade854d93',1,'get_weekly_logins(): func2serv.cpp'],['../func2serv_8h.html#a4d269e13002c5cded37bee9ade854d93',1,'get_weekly_logins(): func2serv.cpp']]], + ['getfavoritesbyuser_9',['getFavoritesByUser',['../class_data_base_singleton.html#afee32779221eaa5f92eb0c8a8666bb50',1,'DataBaseSingleton']]], + ['getinstance_10',['getInstance',['../class_data_base_singleton.html#ae1a24c20c524fd67554e1ffe66319ede',1,'DataBaseSingleton']]], + ['getproductsbyuser_11',['getProductsByUser',['../class_data_base_singleton.html#a84fe7936dd15c077eff86d7884ce3049',1,'DataBaseSingleton']]], + ['getstatistics_12',['getStatistics',['../class_data_base_singleton.html#aad20b90cdb02aab3df1f27a9e4f882a3',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/functions_6.js b/docs/doxygen/html/search/functions_6.js new file mode 100644 index 0000000..ffaba99 --- /dev/null +++ b/docs/doxygen/html/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['initialize_0',['initialize',['../class_singleton_destroyer.html#abcaf525b6af81fbb5717c7dae73af8ec',1,'SingletonDestroyer::initialize()'],['../class_data_base_singleton.html#a59bda63308000a018c5bdc1989582e50',1,'DataBaseSingleton::initialize()']]] +]; diff --git a/docs/doxygen/html/search/functions_7.js b/docs/doxygen/html/search/functions_7.js new file mode 100644 index 0000000..b413e8f --- /dev/null +++ b/docs/doxygen/html/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['main_0',['main',['../main_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main.cpp']]], + ['menu_5fexport_1',['menu_export',['../func2serv_8cpp.html#aa70831eddff4b8ed7a04647778a35747',1,'menu_export(): func2serv.cpp'],['../func2serv_8h.html#aa70831eddff4b8ed7a04647778a35747',1,'menu_export(): func2serv.cpp']]], + ['mytcpserver_2',['MyTcpServer',['../class_my_tcp_server.html#acf367c4695b4d160c7a2d25c2afaaec4',1,'MyTcpServer']]] +]; diff --git a/docs/doxygen/html/search/functions_8.js b/docs/doxygen/html/search/functions_8.js new file mode 100644 index 0000000..f7ce3c0 --- /dev/null +++ b/docs/doxygen/html/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3d_0',['operator=',['../class_data_base_singleton.html#af310f74ceebe21ef29454dd7eccac19a',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/functions_9.js b/docs/doxygen/html/search/functions_9.js new file mode 100644 index 0000000..88d659b --- /dev/null +++ b/docs/doxygen/html/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parsing_0',['parsing',['../func2serv_8cpp.html#a99bd96103155e73697cc47518a5559a4',1,'parsing(QString input, int socdes): func2serv.cpp'],['../func2serv_8h.html#a99bd96103155e73697cc47518a5559a4',1,'parsing(QString input, int socdes): func2serv.cpp']]] +]; diff --git a/docs/doxygen/html/search/functions_a.js b/docs/doxygen/html/search/functions_a.js new file mode 100644 index 0000000..139bd7e --- /dev/null +++ b/docs/doxygen/html/search/functions_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['reg_0',['reg',['../func2serv_8cpp.html#ac87f1fa2fd8c6ee1a48c3a56a99b3275',1,'reg(QStringList params): func2serv.cpp'],['../func2serv_8h.html#a202f69a507a4e282bb2916fea170686f',1,'reg(QStringList): func2serv.cpp']]] +]; diff --git a/docs/doxygen/html/search/functions_b.js b/docs/doxygen/html/search/functions_b.js new file mode 100644 index 0000000..2d87ed8 --- /dev/null +++ b/docs/doxygen/html/search/functions_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['slotclientdisconnected_0',['slotClientDisconnected',['../class_my_tcp_server.html#a3e040c49dbefd65b9a58ab662fc9f7a2',1,'MyTcpServer']]], + ['slotnewconnection_1',['slotNewConnection',['../class_my_tcp_server.html#a0ba7316ffe1a26c57fabde9e74b6c8dc',1,'MyTcpServer']]], + ['slotserverread_2',['slotServerRead',['../class_my_tcp_server.html#ab4a64d2eab985d723090963f5c8a2882',1,'MyTcpServer']]] +]; diff --git a/docs/doxygen/html/search/functions_c.js b/docs/doxygen/html/search/functions_c.js new file mode 100644 index 0000000..9a4d658 --- /dev/null +++ b/docs/doxygen/html/search/functions_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['updatestatistics_0',['updateStatistics',['../class_data_base_singleton.html#ab2877d5184cd7af28f1ea3b31f523280',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/functions_d.js b/docs/doxygen/html/search/functions_d.js new file mode 100644 index 0000000..d3aa52b --- /dev/null +++ b/docs/doxygen/html/search/functions_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_7edatabasesingleton_0',['~DataBaseSingleton',['../class_data_base_singleton.html#aa0d2615a21bdb8d7367a513c802e32c1',1,'DataBaseSingleton']]], + ['_7emytcpserver_1',['~MyTcpServer',['../class_my_tcp_server.html#ab39e651ff7c37c152215c02c225e79ef',1,'MyTcpServer']]], + ['_7esingletondestroyer_2',['~SingletonDestroyer',['../class_singleton_destroyer.html#a8ac3166871f4c5411edfdb13594dee15',1,'SingletonDestroyer']]] +]; diff --git a/docs/doxygen/html/search/mag.svg b/docs/doxygen/html/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs/doxygen/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/doxygen/html/search/mag_d.svg b/docs/doxygen/html/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs/doxygen/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/doxygen/html/search/mag_sel.svg b/docs/doxygen/html/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs/doxygen/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/doxygen/html/search/mag_seld.svg b/docs/doxygen/html/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs/doxygen/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/doxygen/html/search/related_0.js b/docs/doxygen/html/search/related_0.js new file mode 100644 index 0000000..04e9076 --- /dev/null +++ b/docs/doxygen/html/search/related_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['singletondestroyer_0',['SingletonDestroyer',['../class_data_base_singleton.html#aa93ce997b9645496c0e17460fba08432',1,'DataBaseSingleton']]] +]; diff --git a/docs/doxygen/html/search/search.css b/docs/doxygen/html/search/search.css new file mode 100644 index 0000000..a53214f --- /dev/null +++ b/docs/doxygen/html/search/search.css @@ -0,0 +1,286 @@ +/*---------------- Search Box */ + +#MSearchBox { + position: absolute; + right: 5px; +} +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/doxygen/html/search/search.js b/docs/doxygen/html/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/docs/doxygen/html/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; cli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/docs/doxygen/latex/Makefile b/docs/doxygen/latex/Makefile new file mode 100644 index 0000000..8e14614 --- /dev/null +++ b/docs/doxygen/latex/Makefile @@ -0,0 +1,42 @@ +LATEX_CMD?=pdflatex +MKIDX_CMD?=makeindex +BIBTEX_CMD?=bibtex +LATEX_COUNT?=8 +MANUAL_FILE?=refman + +all: $(MANUAL_FILE).pdf + +pdf: $(MANUAL_FILE).pdf + +$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi + latex_count=$(LATEX_COUNT) ; \ + while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi; \ + latex_count=`expr $$latex_count - 1` ;\ + done + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) || \ + if [ $$? != 0 ] ; then \ + \echo "Please consult $(MANUAL_FILE).log to see the error messages" ; \ + false; \ + fi + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf diff --git a/docs/doxygen/latex/annotated.tex b/docs/doxygen/latex/annotated.tex new file mode 100644 index 0000000..09d0e74 --- /dev/null +++ b/docs/doxygen/latex/annotated.tex @@ -0,0 +1,6 @@ +\doxysection{Class List} +Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \\*Класс для работы с базой данных }{\pageref{class_data_base_singleton}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_my_tcp_server}{My\+Tcp\+Server}} }{\pageref{class_my_tcp_server}}{} +\item\contentsline{section}{\mbox{\hyperlink{class_singleton_destroyer}{Singleton\+Destroyer}} \\*Класс для разрушения экземпляра Singleton }{\pageref{class_singleton_destroyer}}{} +\end{DoxyCompactList} diff --git a/docs/doxygen/latex/class_data_base_singleton.tex b/docs/doxygen/latex/class_data_base_singleton.tex new file mode 100644 index 0000000..3a7785b --- /dev/null +++ b/docs/doxygen/latex/class_data_base_singleton.tex @@ -0,0 +1,642 @@ +\doxysection{Data\+Base\+Singleton Class Reference} +\hypertarget{class_data_base_singleton}{}\label{class_data_base_singleton}\index{DataBaseSingleton@{DataBaseSingleton}} + + +Класс для работы с базой данных. + + + + +{\ttfamily \#include $<$databasesingleton.\+h$>$} + + + +Collaboration diagram for Data\+Base\+Singleton\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=248pt]{class_data_base_singleton__coll__graph} +\end{center} +\end{figure} +\doxysubsubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +bool \mbox{\hyperlink{class_data_base_singleton_a59bda63308000a018c5bdc1989582e50}{initialize}} (const QString \&database\+Name) +\begin{DoxyCompactList}\small\item\em Инициализация базы данных. \end{DoxyCompactList}\item +QSql\+Query \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{execute\+Query}} (const QString \&query, const QVariant\+Map \¶ms=QVariant\+Map()) +\begin{DoxyCompactList}\small\item\em Выполнение SQL-\/запроса с параметрами. \end{DoxyCompactList}\item +bool \mbox{\hyperlink{class_data_base_singleton_a51bd7dc4507c5f3d04a2903899e13d42}{check\+User\+Credentials}} (const QString \&login, const QString \&password) +\begin{DoxyCompactList}\small\item\em Проверка учетных данных пользователя. \end{DoxyCompactList}\item +bool \mbox{\hyperlink{class_data_base_singleton_af17db97dfc40b0fa48b3ed9abeacca76}{add\+User}} (const QString \&name, const QString \&email, const QString \&password, bool is\+Admin=false) +\begin{DoxyCompactList}\small\item\em Добавление нового пользователя в базу данных. \end{DoxyCompactList}\item +bool \mbox{\hyperlink{class_data_base_singleton_a3fe2a5e1f41a408023066e8caf63b523}{add\+Product}} (int user\+Id, const QString \&name, int proteins, int fatness, int carbs, int weight, int cost, int type) +\begin{DoxyCompactList}\small\item\em Добавление продукта в базу данных. \end{DoxyCompactList}\item +QVector$<$ QVariant\+Map $>$ \mbox{\hyperlink{class_data_base_singleton_a84fe7936dd15c077eff86d7884ce3049}{get\+Products\+By\+User}} (int user\+Id) +\begin{DoxyCompactList}\small\item\em Получение продуктов для конкретного пользователя. \end{DoxyCompactList}\item +bool \mbox{\hyperlink{class_data_base_singleton_a515aed6cbbb34fe71f254943a70d504b}{add\+Favorite\+Ration}} (int user\+Id, const QVector$<$ int $>$ \&product\+Ids, int calories, int all\+Cost, int all\+Weight) +\begin{DoxyCompactList}\small\item\em Добавление рациона в избранное. \end{DoxyCompactList}\item +QVector$<$ QVariant\+Map $>$ \mbox{\hyperlink{class_data_base_singleton_afee32779221eaa5f92eb0c8a8666bb50}{get\+Favorites\+By\+User}} (int user\+Id) +\begin{DoxyCompactList}\small\item\em Получение избранных рационов пользователя. \end{DoxyCompactList}\item +bool \mbox{\hyperlink{class_data_base_singleton_ab2877d5184cd7af28f1ea3b31f523280}{update\+Statistics}} (int registrations, int visits, int generations) +\begin{DoxyCompactList}\small\item\em Обновление статистики. \end{DoxyCompactList}\item +QVariant\+Map \mbox{\hyperlink{class_data_base_singleton_aad20b90cdb02aab3df1f27a9e4f882a3}{get\+Statistics}} () +\begin{DoxyCompactList}\small\item\em Получение статистики. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Static Public Member Functions} +\begin{DoxyCompactItemize} +\item +static \mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \texorpdfstring{$\ast$}{*} \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{get\+Instance}} () +\begin{DoxyCompactList}\small\item\em Получение единственного экземпляра Singleton. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Private Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{Data\+Base\+Singleton}} () +\begin{DoxyCompactList}\small\item\em Приватный конструктор. \end{DoxyCompactList}\item +\mbox{\hyperlink{class_data_base_singleton_abe02a9a0f33a2664ba969d20d777d4d9}{Data\+Base\+Singleton}} (const \mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \&)=delete +\begin{DoxyCompactList}\small\item\em Запрещает копирование экземпляра \end{DoxyCompactList}\item +\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \& \mbox{\hyperlink{class_data_base_singleton_af310f74ceebe21ef29454dd7eccac19a}{operator=}} (const \mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \&)=delete +\begin{DoxyCompactList}\small\item\em Запрещает присваивание \end{DoxyCompactList}\item +\mbox{\hyperlink{class_data_base_singleton_aa0d2615a21bdb8d7367a513c802e32c1}{\texorpdfstring{$\sim$}{\string~}\+Data\+Base\+Singleton}} ()=default +\begin{DoxyCompactList}\small\item\em Приватный деструктор. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Private Attributes} +\begin{DoxyCompactItemize} +\item +QSql\+Database \mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}} +\begin{DoxyCompactList}\small\item\em Объект базы данных \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Static Private Attributes} +\begin{DoxyCompactItemize} +\item +static \mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \texorpdfstring{$\ast$}{*} \mbox{\hyperlink{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd}{p\+\_\+instance}} = nullptr +\begin{DoxyCompactList}\small\item\em Единственный экземпляр класса \end{DoxyCompactList}\item +static \mbox{\hyperlink{class_singleton_destroyer}{Singleton\+Destroyer}} \mbox{\hyperlink{class_data_base_singleton_a414f1ff51603535a839d5fc2e24b65e0}{destroyer}} +\begin{DoxyCompactList}\small\item\em Объект-\/разрушитель \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Friends} +\begin{DoxyCompactItemize} +\item +class \mbox{\hyperlink{class_data_base_singleton_aa93ce997b9645496c0e17460fba08432}{Singleton\+Destroyer}} +\begin{DoxyCompactList}\small\item\em Дружественный класс для доступа к деструктору \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Класс для работы с базой данных. + +Реализует паттерн Singleton для подключения к базе данных, выполнения SQL-\/запросов, а также управления данными пользователей, продуктов, избранных рационов и статистики. + +\doxysubsection{Constructor \& Destructor Documentation} +\Hypertarget{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}\index{DataBaseSingleton@{DataBaseSingleton}!DataBaseSingleton@{DataBaseSingleton}} +\index{DataBaseSingleton@{DataBaseSingleton}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{DataBaseSingleton()}{DataBaseSingleton()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} +{\footnotesize\ttfamily \label{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0} +Data\+Base\+Singleton\+::\+Data\+Base\+Singleton (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}} + + + +Приватный конструктор. + +Запрещает создание экземпляров класса напрямую. +\begin{DoxyCode}{0} +\DoxyCodeLine{00006\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00007\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}}\ =\ QSqlDatabase::addDatabase(\textcolor{stringliteral}{"{}QSQLITE"{}});} +\DoxyCodeLine{00008\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_abe02a9a0f33a2664ba969d20d777d4d9}\index{DataBaseSingleton@{DataBaseSingleton}!DataBaseSingleton@{DataBaseSingleton}} +\index{DataBaseSingleton@{DataBaseSingleton}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{DataBaseSingleton()}{DataBaseSingleton()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} +{\footnotesize\ttfamily \label{class_data_base_singleton_abe02a9a0f33a2664ba969d20d777d4d9} +Data\+Base\+Singleton\+::\+Data\+Base\+Singleton (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \&}]{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}, {\ttfamily [delete]}} + + + +Запрещает копирование экземпляра + +\Hypertarget{class_data_base_singleton_aa0d2615a21bdb8d7367a513c802e32c1}\index{DataBaseSingleton@{DataBaseSingleton}!````~DataBaseSingleton@{\texorpdfstring{$\sim$}{\string~}DataBaseSingleton}} +\index{````~DataBaseSingleton@{\texorpdfstring{$\sim$}{\string~}DataBaseSingleton}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{\texorpdfstring{$\sim$}{\string~}DataBaseSingleton()}{\string~DataBaseSingleton()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_aa0d2615a21bdb8d7367a513c802e32c1} +Data\+Base\+Singleton\+::\texorpdfstring{$\sim$}{\string~}\+Data\+Base\+Singleton (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}, {\ttfamily [default]}} + + + +Приватный деструктор. + +Закрыт для предотвращения удаления экземпляра Singleton извне. + +\doxysubsection{Member Function Documentation} +\Hypertarget{class_data_base_singleton_a515aed6cbbb34fe71f254943a70d504b}\index{DataBaseSingleton@{DataBaseSingleton}!addFavoriteRation@{addFavoriteRation}} +\index{addFavoriteRation@{addFavoriteRation}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{addFavoriteRation()}{addFavoriteRation()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a515aed6cbbb34fe71f254943a70d504b} +bool Data\+Base\+Singleton\+::add\+Favorite\+Ration (\begin{DoxyParamCaption}\item[{int}]{user\+Id}{, }\item[{const QVector$<$ int $>$ \&}]{product\+Ids}{, }\item[{int}]{calories}{, }\item[{int}]{all\+Cost}{, }\item[{int}]{all\+Weight}{}\end{DoxyParamCaption})} + + + +Добавление рациона в избранное. + + +\begin{DoxyParams}{Parameters} +{\em user\+Id} & Идентификатор пользователя. \\ +\hline +{\em product\+Ids} & Список идентификаторов продуктов. \\ +\hline +{\em calories} & Общее количество калорий. \\ +\hline +{\em all\+Cost} & Общая стоимость рациона. \\ +\hline +{\em all\+Weight} & Общий вес рациона. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true, если рацион добавлен, иначе false. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00154\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00155\ \ \ \ \ \textcolor{comment}{//\ Преобразуем\ QVector\ в\ QVector}} +\DoxyCodeLine{00156\ \ \ \ \ QVector\ productIdsStr;} +\DoxyCodeLine{00157\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keywordtype}{int}\ \textcolor{keywordtype}{id}\ :\ productIds)\ \{} +\DoxyCodeLine{00158\ \ \ \ \ \ \ \ \ productIdsStr.append(QString::number(\textcolor{keywordtype}{id}));\ \textcolor{comment}{//\ Преобразуем\ int\ в\ QString}} +\DoxyCodeLine{00159\ \ \ \ \ \}} +\DoxyCodeLine{00160\ } +\DoxyCodeLine{00161\ \ \ \ \ \textcolor{comment}{//\ Преобразуем\ QVector\ в\ QStringList\ и\ объединяем\ в\ строку\ через\ запятую}} +\DoxyCodeLine{00162\ \ \ \ \ QString\ productsStr\ =\ QStringList::fromVector(productIdsStr).join(\textcolor{stringliteral}{"{},"{}});} +\DoxyCodeLine{00163\ } +\DoxyCodeLine{00164\ \ \ \ \ \textcolor{comment}{//\ Выполняем\ SQL-\/запрос}} +\DoxyCodeLine{00165\ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00166\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}INSERT\ INTO\ favorites\ (id\_user,\ products,\ calories,\ all\_cost,\ all\_weight)\ "{}}} +\DoxyCodeLine{00167\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}VALUES\ (:id\_user,\ :products,\ :calories,\ :all\_cost,\ :all\_weight)"{}},} +\DoxyCodeLine{00168\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:id\_user"{}},\ userId\},\ \{\textcolor{stringliteral}{"{}:products"{}},\ productsStr\},\ \{\textcolor{stringliteral}{"{}:calories"{}},\ calories\},} +\DoxyCodeLine{00169\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:all\_cost"{}},\ allCost\},\ \{\textcolor{stringliteral}{"{}:all\_weight"{}},\ allWeight\}\}} +\DoxyCodeLine{00170\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ).exec();} +\DoxyCodeLine{00171\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_a3fe2a5e1f41a408023066e8caf63b523}\index{DataBaseSingleton@{DataBaseSingleton}!addProduct@{addProduct}} +\index{addProduct@{addProduct}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{addProduct()}{addProduct()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a3fe2a5e1f41a408023066e8caf63b523} +bool Data\+Base\+Singleton\+::add\+Product (\begin{DoxyParamCaption}\item[{int}]{user\+Id}{, }\item[{const QString \&}]{name}{, }\item[{int}]{proteins}{, }\item[{int}]{fatness}{, }\item[{int}]{carbs}{, }\item[{int}]{weight}{, }\item[{int}]{cost}{, }\item[{int}]{type}{}\end{DoxyParamCaption})} + + + +Добавление продукта в базу данных. + + +\begin{DoxyParams}{Parameters} +{\em user\+Id} & Идентификатор пользователя. \\ +\hline +{\em name} & Название продукта. \\ +\hline +{\em proteins} & Количество белков в продукте. \\ +\hline +{\em fatness} & Количество жиров в продукте. \\ +\hline +{\em carbs} & Количество углеводов в продукте. \\ +\hline +{\em weight} & Вес продукта. \\ +\hline +{\em cost} & Стоимость продукта. \\ +\hline +{\em type} & Тип продукта. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true, если продукт добавлен, иначе false. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00114\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00115\ \ \ \ \ QSqlQuery\ query\ =\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00116\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}INSERT\ INTO\ products\ (id\_user,\ name,\ proteins,\ fatness,\ carbs,\ weight,\ cost,\ type)\ "{}}} +\DoxyCodeLine{00117\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}VALUES\ (:id\_user,\ :name,\ :proteins,\ :fatness,\ :carbs,\ :weight,\ :cost,\ :type)"{}},} +\DoxyCodeLine{00118\ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00119\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:id\_user"{}},\ userId\},} +\DoxyCodeLine{00120\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:name"{}},\ name\},} +\DoxyCodeLine{00121\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:proteins"{}},\ proteins\},} +\DoxyCodeLine{00122\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:fatness"{}},\ fatness\},} +\DoxyCodeLine{00123\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:carbs"{}},\ carbs\},} +\DoxyCodeLine{00124\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:weight"{}},\ weight\},} +\DoxyCodeLine{00125\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:cost"{}},\ cost\},} +\DoxyCodeLine{00126\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:type"{}},\ type\}} +\DoxyCodeLine{00127\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{00128\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00129\ \ \ \ \ \textcolor{keywordflow}{return}\ !query.lastError().isValid();\ \textcolor{comment}{//\ Возвращаем\ true,\ если\ ошибок\ нет}} +\DoxyCodeLine{00130\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_af17db97dfc40b0fa48b3ed9abeacca76}\index{DataBaseSingleton@{DataBaseSingleton}!addUser@{addUser}} +\index{addUser@{addUser}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{addUser()}{addUser()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_af17db97dfc40b0fa48b3ed9abeacca76} +bool Data\+Base\+Singleton\+::add\+User (\begin{DoxyParamCaption}\item[{const QString \&}]{name}{, }\item[{const QString \&}]{email}{, }\item[{const QString \&}]{password}{, }\item[{bool}]{is\+Admin}{ = {\ttfamily false}}\end{DoxyParamCaption})} + + + +Добавление нового пользователя в базу данных. + + +\begin{DoxyParams}{Parameters} +{\em name} & Имя пользователя. \\ +\hline +{\em email} & Электронная почта пользователя. \\ +\hline +{\em password} & Пароль пользователя. \\ +\hline +{\em is\+Admin} & Флаг администратора (по умолчанию false). \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true, если пользователь добавлен, иначе false. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00100\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00101\ \ \ \ \ QSqlQuery\ query\ =\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00102\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}INSERT\ INTO\ users\ (name,\ email,\ pass,\ is\_admin)\ VALUES\ (:name,\ :email,\ :pass,\ :is\_admin)"{}},} +\DoxyCodeLine{00103\ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:name"{}},\ name\},\ \{\textcolor{stringliteral}{"{}:email"{}},\ email\},\ \{\textcolor{stringliteral}{"{}:pass"{}},\ password\},\ \{\textcolor{stringliteral}{"{}:is\_admin"{}},\ isAdmin\}\}} +\DoxyCodeLine{00104\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00105\ } +\DoxyCodeLine{00106\ \ \ \ \ \textcolor{keywordflow}{if}\ (query.lastError().isValid())\ \{} +\DoxyCodeLine{00107\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Ошибка\ SQL:"{}}\ <<\ query.lastError().text();} +\DoxyCodeLine{00108\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{false};} +\DoxyCodeLine{00109\ \ \ \ \ \}} +\DoxyCodeLine{00110\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{true};} +\DoxyCodeLine{00111\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_a51bd7dc4507c5f3d04a2903899e13d42}\index{DataBaseSingleton@{DataBaseSingleton}!checkUserCredentials@{checkUserCredentials}} +\index{checkUserCredentials@{checkUserCredentials}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{checkUserCredentials()}{checkUserCredentials()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a51bd7dc4507c5f3d04a2903899e13d42} +bool Data\+Base\+Singleton\+::check\+User\+Credentials (\begin{DoxyParamCaption}\item[{const QString \&}]{login}{, }\item[{const QString \&}]{password}{}\end{DoxyParamCaption})} + + + +Проверка учетных данных пользователя. + + +\begin{DoxyParams}{Parameters} +{\em login} & Логин пользователя. \\ +\hline +{\em password} & Пароль пользователя. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true, если учетные данные корректны, иначе false. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00092\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00093\ \ \ \ \ QSqlQuery\ query\ =\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00094\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}SELECT\ *\ FROM\ users\ WHERE\ email\ =\ :email\ AND\ pass\ =\ :pass"{}},} +\DoxyCodeLine{00095\ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:email"{}},\ email\},\ \{\textcolor{stringliteral}{"{}:pass"{}},\ password\}\}} +\DoxyCodeLine{00096\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00097\ \ \ \ \ \textcolor{keywordflow}{return}\ query.next();} +\DoxyCodeLine{00098\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}\index{DataBaseSingleton@{DataBaseSingleton}!executeQuery@{executeQuery}} +\index{executeQuery@{executeQuery}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{executeQuery()}{executeQuery()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151} +QSql\+Query Data\+Base\+Singleton\+::execute\+Query (\begin{DoxyParamCaption}\item[{const QString \&}]{query}{, }\item[{const QVariant\+Map \&}]{params}{ = {\ttfamily QVariantMap()}}\end{DoxyParamCaption})} + + + +Выполнение SQL-\/запроса с параметрами. + + +\begin{DoxyParams}{Parameters} +{\em query} & SQL-\/запрос в виде строки. \\ +\hline +{\em params} & Параметры для SQL-\/запроса. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Результат выполнения запроса в виде QSql\+Query. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00078\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00079\ \ \ \ \ QSqlQuery\ query(\mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}});} +\DoxyCodeLine{00080\ \ \ \ \ query.prepare(queryStr);} +\DoxyCodeLine{00081\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{auto}\ it\ =\ params.begin();\ it\ !=\ params.end();\ ++it)\ \{} +\DoxyCodeLine{00082\ \ \ \ \ \ \ \ \ query.bindValue(it.key(),\ it.value());} +\DoxyCodeLine{00083\ \ \ \ \ \}} +\DoxyCodeLine{00084\ \ \ \ \ \textcolor{keywordflow}{if}\ (!query.exec())\ \{} +\DoxyCodeLine{00085\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Ошибка\ запроса:"{}}\ <<\ query.lastError().text();} +\DoxyCodeLine{00086\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Текст\ запроса:"{}}\ <<\ queryStr;} +\DoxyCodeLine{00087\ \ \ \ \ \}} +\DoxyCodeLine{00088\ \ \ \ \ \textcolor{keywordflow}{return}\ query;} +\DoxyCodeLine{00089\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_afee32779221eaa5f92eb0c8a8666bb50}\index{DataBaseSingleton@{DataBaseSingleton}!getFavoritesByUser@{getFavoritesByUser}} +\index{getFavoritesByUser@{getFavoritesByUser}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{getFavoritesByUser()}{getFavoritesByUser()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_afee32779221eaa5f92eb0c8a8666bb50} +QVector$<$ QVariant\+Map $>$ Data\+Base\+Singleton\+::get\+Favorites\+By\+User (\begin{DoxyParamCaption}\item[{int}]{user\+Id}{}\end{DoxyParamCaption})} + + + +Получение избранных рационов пользователя. + + +\begin{DoxyParams}{Parameters} +{\em user\+Id} & Идентификатор пользователя. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Список избранных рационов пользователя. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00173\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00174\ \ \ \ \ QSqlQuery\ query\ =\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00175\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}SELECT\ *\ FROM\ favorites\ WHERE\ id\_user\ =\ :id\_user"{}},} +\DoxyCodeLine{00176\ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:id\_user"{}},\ userId\}\}} +\DoxyCodeLine{00177\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00178\ \ \ \ \ QVector\ favorites;} +\DoxyCodeLine{00179\ \ \ \ \ \textcolor{keywordflow}{while}\ (query.next())\ \{} +\DoxyCodeLine{00180\ \ \ \ \ \ \ \ \ QVariantMap\ favorite;} +\DoxyCodeLine{00181\ \ \ \ \ \ \ \ \ favorite[\textcolor{stringliteral}{"{}products"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}products"{}}).toString();} +\DoxyCodeLine{00182\ \ \ \ \ \ \ \ \ favorite[\textcolor{stringliteral}{"{}calories"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}calories"{}}).toInt();} +\DoxyCodeLine{00183\ \ \ \ \ \ \ \ \ favorite[\textcolor{stringliteral}{"{}all\_cost"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}all\_cost"{}}).toInt();} +\DoxyCodeLine{00184\ \ \ \ \ \ \ \ \ favorite[\textcolor{stringliteral}{"{}all\_weight"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}all\_weight"{}}).toInt();} +\DoxyCodeLine{00185\ \ \ \ \ \ \ \ \ favorites.append(favorite);} +\DoxyCodeLine{00186\ \ \ \ \ \}} +\DoxyCodeLine{00187\ \ \ \ \ \textcolor{keywordflow}{return}\ favorites;} +\DoxyCodeLine{00188\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}\index{DataBaseSingleton@{DataBaseSingleton}!getInstance@{getInstance}} +\index{getInstance@{getInstance}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{getInstance()}{getInstance()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede} +\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \texorpdfstring{$\ast$}{*} Data\+Base\+Singleton\+::get\+Instance (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + + + +Получение единственного экземпляра Singleton. + +\begin{DoxyReturn}{Returns} +Экземпляр класса \doxylink{class_data_base_singleton}{Data\+Base\+Singleton}. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00010\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00011\ \ \ \ \ \textcolor{keywordflow}{if}\ (!\mbox{\hyperlink{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd}{p\_instance}})\ \{} +\DoxyCodeLine{00012\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd}{p\_instance}}\ =\ \textcolor{keyword}{new}\ \mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}();} +\DoxyCodeLine{00013\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_a414f1ff51603535a839d5fc2e24b65e0}{destroyer}}.initialize(\mbox{\hyperlink{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd}{p\_instance}});} +\DoxyCodeLine{00014\ \ \ \ \ \}} +\DoxyCodeLine{00015\ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd}{p\_instance}};} +\DoxyCodeLine{00016\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_a84fe7936dd15c077eff86d7884ce3049}\index{DataBaseSingleton@{DataBaseSingleton}!getProductsByUser@{getProductsByUser}} +\index{getProductsByUser@{getProductsByUser}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{getProductsByUser()}{getProductsByUser()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a84fe7936dd15c077eff86d7884ce3049} +QVector$<$ QVariant\+Map $>$ Data\+Base\+Singleton\+::get\+Products\+By\+User (\begin{DoxyParamCaption}\item[{int}]{user\+Id}{}\end{DoxyParamCaption})} + + + +Получение продуктов для конкретного пользователя. + + +\begin{DoxyParams}{Parameters} +{\em user\+Id} & Идентификатор пользователя. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Список продуктов, принадлежащих пользователю. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00132\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00133\ \ \ \ \ QSqlQuery\ query\ =\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00134\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}SELECT\ *\ FROM\ products\ WHERE\ id\_user\ =\ :id\_user"{}},} +\DoxyCodeLine{00135\ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:id\_user"{}},\ userId\}\}} +\DoxyCodeLine{00136\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00137\ \ \ \ \ QVector\ products;} +\DoxyCodeLine{00138\ \ \ \ \ \textcolor{keywordflow}{while}\ (query.next())\ \{} +\DoxyCodeLine{00139\ \ \ \ \ \ \ \ \ QVariantMap\ product;} +\DoxyCodeLine{00140\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}id"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}id"{}}).toInt();} +\DoxyCodeLine{00141\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}name"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}name"{}}).toString();} +\DoxyCodeLine{00142\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}proteins"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}proteins"{}}).toInt();} +\DoxyCodeLine{00143\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}fatness"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}fatness"{}}).toInt();} +\DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}carbs"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}carbs"{}}).toInt();} +\DoxyCodeLine{00145\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}weight"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}weight"{}}).toInt();} +\DoxyCodeLine{00146\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}cost"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}cost"{}}).toInt();} +\DoxyCodeLine{00147\ \ \ \ \ \ \ \ \ product[\textcolor{stringliteral}{"{}type"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}type"{}}).toInt();} +\DoxyCodeLine{00148\ \ \ \ \ \ \ \ \ products.append(product);} +\DoxyCodeLine{00149\ \ \ \ \ \}} +\DoxyCodeLine{00150\ \ \ \ \ \textcolor{keywordflow}{return}\ products;} +\DoxyCodeLine{00151\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_aad20b90cdb02aab3df1f27a9e4f882a3}\index{DataBaseSingleton@{DataBaseSingleton}!getStatistics@{getStatistics}} +\index{getStatistics@{getStatistics}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{getStatistics()}{getStatistics()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_aad20b90cdb02aab3df1f27a9e4f882a3} +QVariant\+Map Data\+Base\+Singleton\+::get\+Statistics (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + + +Получение статистики. + +\begin{DoxyReturn}{Returns} +Словарь с данными статистики. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00199\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00200\ \ \ \ \ QSqlQuery\ query\ =\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(\textcolor{stringliteral}{"{}SELECT\ *\ FROM\ statistics"{}});} +\DoxyCodeLine{00201\ \ \ \ \ QVariantMap\ stats;} +\DoxyCodeLine{00202\ \ \ \ \ \textcolor{keywordflow}{if}\ (query.next())\ \{} +\DoxyCodeLine{00203\ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}registrations"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}count\_registrations"{}}).toInt();} +\DoxyCodeLine{00204\ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}visits"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}count\_visits"{}}).toInt();} +\DoxyCodeLine{00205\ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}generations"{}}]\ =\ query.value(\textcolor{stringliteral}{"{}count\_generations"{}}).toInt();} +\DoxyCodeLine{00206\ \ \ \ \ \}} +\DoxyCodeLine{00207\ \ \ \ \ \textcolor{keywordflow}{return}\ stats;} +\DoxyCodeLine{00208\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_a59bda63308000a018c5bdc1989582e50}\index{DataBaseSingleton@{DataBaseSingleton}!initialize@{initialize}} +\index{initialize@{initialize}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{initialize()}{initialize()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a59bda63308000a018c5bdc1989582e50} +bool Data\+Base\+Singleton\+::initialize (\begin{DoxyParamCaption}\item[{const QString \&}]{database\+Name}{}\end{DoxyParamCaption})} + + + +Инициализация базы данных. + +Создает соединение с базой данных и выполняет необходимые операции для создания таблиц. + + +\begin{DoxyParams}{Parameters} +{\em database\+Name} & Имя файла базы данных. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true, если инициализация успешна, иначе false. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00018\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00019\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}}.setDatabaseName(databaseName);} +\DoxyCodeLine{00020\ \ \ \ \ \textcolor{keywordflow}{if}\ (!\mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}}.open())\ \{} +\DoxyCodeLine{00021\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Ошибка\ подключения:"{}}\ <<\ \mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}}.lastError().text();} +\DoxyCodeLine{00022\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{false};} +\DoxyCodeLine{00023\ \ \ \ \ \}} +\DoxyCodeLine{00024\ } +\DoxyCodeLine{00025\ \ \ \ \ \textcolor{comment}{//\ Создание\ таблицы\ users}} +\DoxyCodeLine{00026\ \ \ \ \ QSqlQuery\ query(\mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}});} +\DoxyCodeLine{00027\ \ \ \ \ \textcolor{keywordtype}{bool}\ success\ =\ query.exec(} +\DoxyCodeLine{00028\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}CREATE\ TABLE\ IF\ NOT\ EXISTS\ users\ ("{}}} +\DoxyCodeLine{00029\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}id\ INTEGER\ PRIMARY\ KEY\ AUTOINCREMENT,\ "{}}} +\DoxyCodeLine{00030\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}name\ VARCHAR(20)\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00031\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}email\ VARCHAR(50)\ NOT\ NULL\ ,\ "{}}} +\DoxyCodeLine{00032\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}pass\ VARCHAR(20)\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00033\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}is\_admin\ BOOLEAN\ DEFAULT\ FALSE)"{}}} +\DoxyCodeLine{00034\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00035\ } +\DoxyCodeLine{00036\ \ \ \ \ \ success\ \&=\ query.exec(\textcolor{stringliteral}{"{}CREATE\ UNIQUE\ INDEX\ IF\ NOT\ EXISTS\ idx\_users\_email\ ON\ users(email)"{}});} +\DoxyCodeLine{00037\ } +\DoxyCodeLine{00038\ \ \ \ \ \textcolor{comment}{//\ Создание\ таблицы\ products}} +\DoxyCodeLine{00039\ \ \ \ \ success\ \&=\ query.exec(} +\DoxyCodeLine{00040\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}CREATE\ TABLE\ IF\ NOT\ EXISTS\ products\ ("{}}} +\DoxyCodeLine{00041\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}id\ INTEGER\ PRIMARY\ KEY\ AUTOINCREMENT,\ "{}}} +\DoxyCodeLine{00042\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}id\_user\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00043\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}name\ VARCHAR(50)\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00044\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}proteins\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00045\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}fatness\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00046\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}carbs\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00047\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}weight\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00048\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}cost\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00049\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}type\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00050\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}FOREIGN\ KEY(id\_user)\ REFERENCES\ users(id))"{}}} +\DoxyCodeLine{00051\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00052\ } +\DoxyCodeLine{00053\ \ \ \ \ \textcolor{comment}{//\ Создание\ таблицы\ favorites}} +\DoxyCodeLine{00054\ \ \ \ \ success\ \&=\ query.exec(} +\DoxyCodeLine{00055\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}CREATE\ TABLE\ IF\ NOT\ EXISTS\ favorites\ ("{}}} +\DoxyCodeLine{00056\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}id\_user\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00057\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}products\ TEXT\ NOT\ NULL,\ "{}}\ \ \textcolor{comment}{//\ Хранение\ массива\ ID\ продуктов\ в\ виде\ строки}} +\DoxyCodeLine{00058\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}calories\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00059\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}all\_cost\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00060\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}all\_weight\ INTEGER\ NOT\ NULL,\ "{}}} +\DoxyCodeLine{00061\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}FOREIGN\ KEY(id\_user)\ REFERENCES\ users(id))"{}}} +\DoxyCodeLine{00062\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00063\ } +\DoxyCodeLine{00064\ \ \ \ \ \textcolor{comment}{//\ Создание\ таблицы\ statistics}} +\DoxyCodeLine{00065\ \ \ \ \ success\ \&=\ query.exec(} +\DoxyCodeLine{00066\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}CREATE\ TABLE\ IF\ NOT\ EXISTS\ statistics\ ("{}}} +\DoxyCodeLine{00067\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}count\_registrations\ INTEGER\ DEFAULT\ 0,\ "{}}} +\DoxyCodeLine{00068\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}count\_visits\ INTEGER\ DEFAULT\ 0,\ "{}}} +\DoxyCodeLine{00069\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}count\_generations\ INTEGER\ DEFAULT\ 0)"{}}} +\DoxyCodeLine{00070\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00071\ } +\DoxyCodeLine{00072\ \ \ \ \ \textcolor{comment}{//\ Инициализация\ статистики,\ если\ таблица\ пуста}} +\DoxyCodeLine{00073\ \ \ \ \ query.exec(\textcolor{stringliteral}{"{}INSERT\ OR\ IGNORE\ INTO\ statistics\ (count\_registrations,\ count\_visits,\ count\_generations)\ VALUES\ (0,\ 0,\ 0)"{}});} +\DoxyCodeLine{00074\ \ \ \ \ query.exec(\textcolor{stringliteral}{"{}INSERT\ OR\ IGNORE\ INTO\ users(name,\ email,\ pass,\ is\_admin)\ VALUES\ ('NewDev','new@devs.su','admin',true)"{}});} +\DoxyCodeLine{00075\ \ \ \ \ \textcolor{keywordflow}{return}\ success;} +\DoxyCodeLine{00076\ \}} + +\end{DoxyCode} +\Hypertarget{class_data_base_singleton_af310f74ceebe21ef29454dd7eccac19a}\index{DataBaseSingleton@{DataBaseSingleton}!operator=@{operator=}} +\index{operator=@{operator=}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{operator=()}{operator=()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_af310f74ceebe21ef29454dd7eccac19a} +\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \& Data\+Base\+Singleton\+::operator= (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \&}]{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [private]}, {\ttfamily [delete]}} + + + +Запрещает присваивание + +\Hypertarget{class_data_base_singleton_ab2877d5184cd7af28f1ea3b31f523280}\index{DataBaseSingleton@{DataBaseSingleton}!updateStatistics@{updateStatistics}} +\index{updateStatistics@{updateStatistics}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{updateStatistics()}{updateStatistics()}} +{\footnotesize\ttfamily \label{class_data_base_singleton_ab2877d5184cd7af28f1ea3b31f523280} +bool Data\+Base\+Singleton\+::update\+Statistics (\begin{DoxyParamCaption}\item[{int}]{registrations}{, }\item[{int}]{visits}{, }\item[{int}]{generations}{}\end{DoxyParamCaption})} + + + +Обновление статистики. + + +\begin{DoxyParams}{Parameters} +{\em registrations} & Количество регистраций. \\ +\hline +{\em visits} & Количество посещений. \\ +\hline +{\em generations} & Количество генераций. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +true, если статистика обновлена, иначе false. +\end{DoxyReturn} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00191\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00192\ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00193\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}UPDATE\ statistics\ SET\ count\_registrations\ =\ :registrations,\ "{}}} +\DoxyCodeLine{00194\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}count\_visits\ =\ :visits,\ count\_generations\ =\ :generations"{}},} +\DoxyCodeLine{00195\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:registrations"{}},\ registrations\},\ \{\textcolor{stringliteral}{"{}:visits"{}},\ visits\},\ \{\textcolor{stringliteral}{"{}:generations"{}},\ generations\}\}} +\DoxyCodeLine{00196\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ).exec();} +\DoxyCodeLine{00197\ \}} + +\end{DoxyCode} + + +\doxysubsection{Friends And Related Symbol Documentation} +\Hypertarget{class_data_base_singleton_aa93ce997b9645496c0e17460fba08432}\index{DataBaseSingleton@{DataBaseSingleton}!SingletonDestroyer@{SingletonDestroyer}} +\index{SingletonDestroyer@{SingletonDestroyer}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{SingletonDestroyer}{SingletonDestroyer}} +{\footnotesize\ttfamily \label{class_data_base_singleton_aa93ce997b9645496c0e17460fba08432} +friend class \mbox{\hyperlink{class_singleton_destroyer}{Singleton\+Destroyer}}\hspace{0.3cm}{\ttfamily [friend]}} + + + +Дружественный класс для доступа к деструктору + + + +\doxysubsection{Member Data Documentation} +\Hypertarget{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}\index{DataBaseSingleton@{DataBaseSingleton}!db@{db}} +\index{db@{db}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{db}{db}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a} +QSql\+Database Data\+Base\+Singleton\+::db\hspace{0.3cm}{\ttfamily [private]}} + + + +Объект базы данных + +\Hypertarget{class_data_base_singleton_a414f1ff51603535a839d5fc2e24b65e0}\index{DataBaseSingleton@{DataBaseSingleton}!destroyer@{destroyer}} +\index{destroyer@{destroyer}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{destroyer}{destroyer}} +{\footnotesize\ttfamily \label{class_data_base_singleton_a414f1ff51603535a839d5fc2e24b65e0} +\mbox{\hyperlink{class_singleton_destroyer}{Singleton\+Destroyer}} Data\+Base\+Singleton\+::destroyer\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [private]}} + + + +Объект-\/разрушитель + +\Hypertarget{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd}\index{DataBaseSingleton@{DataBaseSingleton}!p\_instance@{p\_instance}} +\index{p\_instance@{p\_instance}!DataBaseSingleton@{DataBaseSingleton}} +\doxysubsubsection{\texorpdfstring{p\_instance}{p\_instance}} +{\footnotesize\ttfamily \label{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd} +\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \texorpdfstring{$\ast$}{*} Data\+Base\+Singleton\+::p\+\_\+instance = nullptr\hspace{0.3cm}{\ttfamily [static]}, {\ttfamily [private]}} + + + +Единственный экземпляр класса + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +server/\mbox{\hyperlink{databasesingleton_8h}{databasesingleton.\+h}}\item +server/\mbox{\hyperlink{databasesingleton_8cpp}{databasesingleton.\+cpp}}\end{DoxyCompactItemize} diff --git a/docs/doxygen/latex/class_data_base_singleton__coll__graph.dot b/docs/doxygen/latex/class_data_base_singleton__coll__graph.dot new file mode 100644 index 0000000..e02d38d --- /dev/null +++ b/docs/doxygen/latex/class_data_base_singleton__coll__graph.dot @@ -0,0 +1,12 @@ +digraph "DataBaseSingleton" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="DataBaseSingleton",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Класс для работы с базой данных."]; + Node1 -> Node1 [id="edge4_Node000001_Node000001",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; + Node2 -> Node1 [id="edge5_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" destroyer",fontcolor="grey" ]; + Node2 [id="Node000002",label="SingletonDestroyer",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",URL="$class_singleton_destroyer.html",tooltip="Класс для разрушения экземпляра Singleton."]; + Node1 -> Node2 [id="edge6_Node000002_Node000001",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; +} diff --git a/docs/doxygen/latex/class_data_base_singleton__coll__graph.md5 b/docs/doxygen/latex/class_data_base_singleton__coll__graph.md5 new file mode 100644 index 0000000..a51b0d0 --- /dev/null +++ b/docs/doxygen/latex/class_data_base_singleton__coll__graph.md5 @@ -0,0 +1 @@ +44ef20774752749ea9a8c5def98e9179 \ No newline at end of file diff --git a/docs/doxygen/latex/class_data_base_singleton__coll__graph.pdf b/docs/doxygen/latex/class_data_base_singleton__coll__graph.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dcdb1d8fc548807d47a6c63a3ede63b87f980abc GIT binary patch literal 16129 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 + + + +Inheritance diagram for My\+Tcp\+Server\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=154pt]{class_my_tcp_server__inherit__graph} +\end{center} +\end{figure} + + +Collaboration diagram for My\+Tcp\+Server\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=154pt]{class_my_tcp_server__coll__graph} +\end{center} +\end{figure} +\doxysubsubsection*{Public Slots} +\begin{DoxyCompactItemize} +\item +void \mbox{\hyperlink{class_my_tcp_server_a0ba7316ffe1a26c57fabde9e74b6c8dc}{slot\+New\+Connection}} () +\item +void \mbox{\hyperlink{class_my_tcp_server_a3e040c49dbefd65b9a58ab662fc9f7a2}{slot\+Client\+Disconnected}} () +\item +void \mbox{\hyperlink{class_my_tcp_server_ab4a64d2eab985d723090963f5c8a2882}{slot\+Server\+Read}} () +\end{DoxyCompactItemize} +\doxysubsubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{class_my_tcp_server_acf367c4695b4d160c7a2d25c2afaaec4}{My\+Tcp\+Server}} (QObject \texorpdfstring{$\ast$}{*}parent=nullptr) +\item +\mbox{\hyperlink{class_my_tcp_server_ab39e651ff7c37c152215c02c225e79ef}{\texorpdfstring{$\sim$}{\string~}\+My\+Tcp\+Server}} () +\end{DoxyCompactItemize} +\doxysubsubsection*{Private Attributes} +\begin{DoxyCompactItemize} +\item +QTcp\+Server \texorpdfstring{$\ast$}{*} \mbox{\hyperlink{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}{m\+Tcp\+Server}} +\item +QTcp\+Socket \texorpdfstring{$\ast$}{*} \mbox{\hyperlink{class_my_tcp_server_ab55c030e6eb6cf5d1acfe6d7d2bf0ed1}{m\+Tcp\+Socket}} +\item +int \mbox{\hyperlink{class_my_tcp_server_ae0dc69dfef4f9fc3a5f031f4152e4f91}{server\+\_\+status}} +\item +QMap$<$ int, QTcp\+Socket \texorpdfstring{$\ast$}{*} $>$ \mbox{\hyperlink{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}{m\+Socket\+Descriptors}} +\end{DoxyCompactItemize} + + +\doxysubsection{Constructor \& Destructor Documentation} +\Hypertarget{class_my_tcp_server_acf367c4695b4d160c7a2d25c2afaaec4}\index{MyTcpServer@{MyTcpServer}!MyTcpServer@{MyTcpServer}} +\index{MyTcpServer@{MyTcpServer}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{MyTcpServer()}{MyTcpServer()}} +{\footnotesize\ttfamily \label{class_my_tcp_server_acf367c4695b4d160c7a2d25c2afaaec4} +My\+Tcp\+Server\+::\+My\+Tcp\+Server (\begin{DoxyParamCaption}\item[{QObject \texorpdfstring{$\ast$}{*}}]{parent}{ = {\ttfamily nullptr}}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [explicit]}} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00014\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ QObject(parent) } +\DoxyCodeLine{00015\ \{} +\DoxyCodeLine{00016\ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}{mTcpServer}}\ =\ \textcolor{keyword}{new}\ QTcpServer(\textcolor{keyword}{this});} +\DoxyCodeLine{00017\ } +\DoxyCodeLine{00018\ \ \ \ \ connect(\mbox{\hyperlink{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}{mTcpServer}},\ \&QTcpServer::newConnection,\ \textcolor{keyword}{this},\ \&\mbox{\hyperlink{class_my_tcp_server_a0ba7316ffe1a26c57fabde9e74b6c8dc}{MyTcpServer::slotNewConnection}});} +\DoxyCodeLine{00019\ } +\DoxyCodeLine{00020\ \ \ \ \ \textcolor{keywordflow}{if}\ (!\mbox{\hyperlink{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}{mTcpServer}}-\/>listen(QHostAddress::Any,\ 33333))\ \{} +\DoxyCodeLine{00021\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}server\ is\ not\ started"{}};} +\DoxyCodeLine{00022\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{00023\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server_ae0dc69dfef4f9fc3a5f031f4152e4f91}{server\_status}}\ =\ 1;} +\DoxyCodeLine{00024\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}server\ is\ started"{}};} +\DoxyCodeLine{00025\ \ \ \ \ \}} +\DoxyCodeLine{00026\ \}} + +\end{DoxyCode} +\Hypertarget{class_my_tcp_server_ab39e651ff7c37c152215c02c225e79ef}\index{MyTcpServer@{MyTcpServer}!````~MyTcpServer@{\texorpdfstring{$\sim$}{\string~}MyTcpServer}} +\index{````~MyTcpServer@{\texorpdfstring{$\sim$}{\string~}MyTcpServer}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{\texorpdfstring{$\sim$}{\string~}MyTcpServer()}{\string~MyTcpServer()}} +{\footnotesize\ttfamily \label{class_my_tcp_server_ab39e651ff7c37c152215c02c225e79ef} +My\+Tcp\+Server\+::\texorpdfstring{$\sim$}{\string~}\+My\+Tcp\+Server (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00008\ \{} +\DoxyCodeLine{00009\ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}{mTcpServer}}-\/>close();} +\DoxyCodeLine{00010\ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server_ae0dc69dfef4f9fc3a5f031f4152e4f91}{server\_status}}\ =\ 0;} +\DoxyCodeLine{00011\ \ \ \ \ qDeleteAll(\mbox{\hyperlink{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}{mSocketDescriptors}});\ \textcolor{comment}{//\ Удаляем\ все\ сокеты}} +\DoxyCodeLine{00012\ \}} + +\end{DoxyCode} + + +\doxysubsection{Member Function Documentation} +\Hypertarget{class_my_tcp_server_a3e040c49dbefd65b9a58ab662fc9f7a2}\index{MyTcpServer@{MyTcpServer}!slotClientDisconnected@{slotClientDisconnected}} +\index{slotClientDisconnected@{slotClientDisconnected}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{slotClientDisconnected}{slotClientDisconnected}} +{\footnotesize\ttfamily \label{class_my_tcp_server_a3e040c49dbefd65b9a58ab662fc9f7a2} +void My\+Tcp\+Server\+::slot\+Client\+Disconnected (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [slot]}} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00062\ \{} +\DoxyCodeLine{00063\ \ \ \ \ QTcpSocket\ *clientSocket\ =\ qobject\_cast(sender());} +\DoxyCodeLine{00064\ \ \ \ \ \textcolor{keywordflow}{if}\ (!clientSocket)\ \{} +\DoxyCodeLine{00065\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return};} +\DoxyCodeLine{00066\ \ \ \ \ \}} +\DoxyCodeLine{00067\ } +\DoxyCodeLine{00068\ \ \ \ \ \textcolor{comment}{//\ Получаем\ дескриптор\ сокета\ из\ контейнера}} +\DoxyCodeLine{00069\ \ \ \ \ \textcolor{keywordtype}{int}\ socketDescriptor\ =\ -\/1;} +\DoxyCodeLine{00070\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{auto}\ it\ =\ \mbox{\hyperlink{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}{mSocketDescriptors}}.begin();\ it\ !=\ \mbox{\hyperlink{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}{mSocketDescriptors}}.end();\ ++it)\ \{} +\DoxyCodeLine{00071\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (it.value()\ ==\ clientSocket)\ \{} +\DoxyCodeLine{00072\ \ \ \ \ \ \ \ \ \ \ \ \ socketDescriptor\ =\ it.key();} +\DoxyCodeLine{00073\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{break};} +\DoxyCodeLine{00074\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{00075\ \ \ \ \ \}} +\DoxyCodeLine{00076\ } +\DoxyCodeLine{00077\ \ \ \ \ \textcolor{keywordflow}{if}\ (socketDescriptor\ !=\ -\/1)\ \{} +\DoxyCodeLine{00078\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}{mSocketDescriptors}}.remove(socketDescriptor);\ \textcolor{comment}{//\ Удаляем\ сокет\ из\ контейнера}} +\DoxyCodeLine{00079\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Client\ disconnected,\ socket\ descriptor:"{}}\ <<\ socketDescriptor;} +\DoxyCodeLine{00080\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{00081\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Client\ disconnected,\ but\ socket\ descriptor\ not\ found!"{}};} +\DoxyCodeLine{00082\ \ \ \ \ \}} +\DoxyCodeLine{00083\ } +\DoxyCodeLine{00084\ \ \ \ \ clientSocket-\/>deleteLater();\ \textcolor{comment}{//\ Удаляем\ сокет}} +\DoxyCodeLine{00085\ \}} + +\end{DoxyCode} +\Hypertarget{class_my_tcp_server_a0ba7316ffe1a26c57fabde9e74b6c8dc}\index{MyTcpServer@{MyTcpServer}!slotNewConnection@{slotNewConnection}} +\index{slotNewConnection@{slotNewConnection}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{slotNewConnection}{slotNewConnection}} +{\footnotesize\ttfamily \label{class_my_tcp_server_a0ba7316ffe1a26c57fabde9e74b6c8dc} +void My\+Tcp\+Server\+::slot\+New\+Connection (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [slot]}} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00029\ \{} +\DoxyCodeLine{00030\ \ \ \ \ \textcolor{keywordflow}{if}\ (\mbox{\hyperlink{class_my_tcp_server_ae0dc69dfef4f9fc3a5f031f4152e4f91}{server\_status}}\ ==\ 1)\ \{} +\DoxyCodeLine{00031\ \ \ \ \ \ \ \ \ QTcpSocket\ *clientSocket\ =\ \mbox{\hyperlink{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}{mTcpServer}}-\/>nextPendingConnection();} +\DoxyCodeLine{00032\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ socketDescriptor\ =\ clientSocket-\/>socketDescriptor();\ \textcolor{comment}{//\ Получаем\ дескриптор\ сокета}} +\DoxyCodeLine{00033\ } +\DoxyCodeLine{00034\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (socketDescriptor\ ==\ -\/1)\ \{} +\DoxyCodeLine{00035\ \ \ \ \ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Invalid\ socket\ descriptor!"{}};} +\DoxyCodeLine{00036\ \ \ \ \ \ \ \ \ \ \ \ \ clientSocket-\/>deleteLater();\ \textcolor{comment}{//\ Удаляем\ сокет,\ если\ дескриптор\ недействителен}} +\DoxyCodeLine{00037\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return};} +\DoxyCodeLine{00038\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{00039\ } +\DoxyCodeLine{00040\ \ \ \ \ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}{mSocketDescriptors}}.insert(socketDescriptor,\ clientSocket);\ \textcolor{comment}{//\ Сохраняем\ сокет\ в\ контейнере}} +\DoxyCodeLine{00041\ } +\DoxyCodeLine{00042\ \ \ \ \ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}New\ connection,\ socket\ descriptor:"{}}\ <<\ socketDescriptor;} +\DoxyCodeLine{00043\ } +\DoxyCodeLine{00044\ \ \ \ \ \ \ \ \ connect(clientSocket,\ \&QTcpSocket::readyRead,\ \textcolor{keyword}{this},\ \&\mbox{\hyperlink{class_my_tcp_server_ab4a64d2eab985d723090963f5c8a2882}{MyTcpServer::slotServerRead}});} +\DoxyCodeLine{00045\ \ \ \ \ \ \ \ \ connect(clientSocket,\ \&QTcpSocket::disconnected,\ \textcolor{keyword}{this},\ \&\mbox{\hyperlink{class_my_tcp_server_a3e040c49dbefd65b9a58ab662fc9f7a2}{MyTcpServer::slotClientDisconnected}});} +\DoxyCodeLine{00046\ \ \ \ \ \}} +\DoxyCodeLine{00047\ \}} + +\end{DoxyCode} +\Hypertarget{class_my_tcp_server_ab4a64d2eab985d723090963f5c8a2882}\index{MyTcpServer@{MyTcpServer}!slotServerRead@{slotServerRead}} +\index{slotServerRead@{slotServerRead}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{slotServerRead}{slotServerRead}} +{\footnotesize\ttfamily \label{class_my_tcp_server_ab4a64d2eab985d723090963f5c8a2882} +void My\+Tcp\+Server\+::slot\+Server\+Read (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [slot]}} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00049\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00050\ \ \ \ \ QTcpSocket\ *clientSocket\ =\ qobject\_cast(sender());} +\DoxyCodeLine{00051\ \ \ \ \ \textcolor{keywordflow}{if}\ (!clientSocket)\ \textcolor{keywordflow}{return};} +\DoxyCodeLine{00052\ } +\DoxyCodeLine{00053\ \ \ \ \ QByteArray\ data\ =\ clientSocket-\/>readAll();} +\DoxyCodeLine{00054\ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Received\ data:"{}}\ <<\ data;} +\DoxyCodeLine{00055\ } +\DoxyCodeLine{00056\ \ \ \ \ \textcolor{comment}{//\ Обрабатываем\ данные\ сразу,\ без\ накопления}} +\DoxyCodeLine{00057\ \ \ \ \ QByteArray\ response\ =\ \mbox{\hyperlink{func2serv_8cpp_a99bd96103155e73697cc47518a5559a4}{parsing}}(QString(data).trimmed(),\ clientSocket-\/>socketDescriptor());} +\DoxyCodeLine{00058\ \ \ \ \ clientSocket-\/>write(response);} +\DoxyCodeLine{00059\ \}} + +\end{DoxyCode} + + +\doxysubsection{Member Data Documentation} +\Hypertarget{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}\index{MyTcpServer@{MyTcpServer}!mSocketDescriptors@{mSocketDescriptors}} +\index{mSocketDescriptors@{mSocketDescriptors}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{mSocketDescriptors}{mSocketDescriptors}} +{\footnotesize\ttfamily \label{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3} +QMap$<$int, QTcp\+Socket\texorpdfstring{$\ast$}{*}$>$ My\+Tcp\+Server\+::m\+Socket\+Descriptors\hspace{0.3cm}{\ttfamily [private]}} + +\Hypertarget{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}\index{MyTcpServer@{MyTcpServer}!mTcpServer@{mTcpServer}} +\index{mTcpServer@{mTcpServer}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{mTcpServer}{mTcpServer}} +{\footnotesize\ttfamily \label{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c} +QTcp\+Server\texorpdfstring{$\ast$}{*} My\+Tcp\+Server\+::m\+Tcp\+Server\hspace{0.3cm}{\ttfamily [private]}} + +\Hypertarget{class_my_tcp_server_ab55c030e6eb6cf5d1acfe6d7d2bf0ed1}\index{MyTcpServer@{MyTcpServer}!mTcpSocket@{mTcpSocket}} +\index{mTcpSocket@{mTcpSocket}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{mTcpSocket}{mTcpSocket}} +{\footnotesize\ttfamily \label{class_my_tcp_server_ab55c030e6eb6cf5d1acfe6d7d2bf0ed1} +QTcp\+Socket\texorpdfstring{$\ast$}{*} My\+Tcp\+Server\+::m\+Tcp\+Socket\hspace{0.3cm}{\ttfamily [private]}} + +\Hypertarget{class_my_tcp_server_ae0dc69dfef4f9fc3a5f031f4152e4f91}\index{MyTcpServer@{MyTcpServer}!server\_status@{server\_status}} +\index{server\_status@{server\_status}!MyTcpServer@{MyTcpServer}} +\doxysubsubsection{\texorpdfstring{server\_status}{server\_status}} +{\footnotesize\ttfamily \label{class_my_tcp_server_ae0dc69dfef4f9fc3a5f031f4152e4f91} +int My\+Tcp\+Server\+::server\+\_\+status\hspace{0.3cm}{\ttfamily [private]}} + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +server/\mbox{\hyperlink{mytcpserver_8h}{mytcpserver.\+h}}\item +server/\mbox{\hyperlink{mytcpserver_8cpp}{mytcpserver.\+cpp}}\end{DoxyCompactItemize} diff --git a/docs/doxygen/latex/class_my_tcp_server__coll__graph.dot b/docs/doxygen/latex/class_my_tcp_server__coll__graph.dot new file mode 100644 index 0000000..ea21642 --- /dev/null +++ b/docs/doxygen/latex/class_my_tcp_server__coll__graph.dot @@ -0,0 +1,10 @@ +digraph "MyTcpServer" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="MyTcpServer",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node2 -> Node1 [id="edge2_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QObject",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/class_my_tcp_server__coll__graph.md5 b/docs/doxygen/latex/class_my_tcp_server__coll__graph.md5 new file mode 100644 index 0000000..ffc2c98 --- /dev/null +++ b/docs/doxygen/latex/class_my_tcp_server__coll__graph.md5 @@ -0,0 +1 @@ +c9fd94764ac24ff5ecd3a0ac4fb20286 \ No newline at end of file diff --git a/docs/doxygen/latex/class_my_tcp_server__coll__graph.pdf b/docs/doxygen/latex/class_my_tcp_server__coll__graph.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1f7c425377634700dd8df2d2ac332ec971658780 GIT binary patch literal 13995 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

~ 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 SQXp1NHV#B8Dse>##QzT)qNc$B literal 0 HcmV?d00001 diff --git a/docs/doxygen/latex/class_my_tcp_server__inherit__graph.dot b/docs/doxygen/latex/class_my_tcp_server__inherit__graph.dot new file mode 100644 index 0000000..ea21642 --- /dev/null +++ b/docs/doxygen/latex/class_my_tcp_server__inherit__graph.dot @@ -0,0 +1,10 @@ +digraph "MyTcpServer" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="MyTcpServer",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node2 -> Node1 [id="edge2_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QObject",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/class_my_tcp_server__inherit__graph.md5 b/docs/doxygen/latex/class_my_tcp_server__inherit__graph.md5 new file mode 100644 index 0000000..ffc2c98 --- /dev/null +++ b/docs/doxygen/latex/class_my_tcp_server__inherit__graph.md5 @@ -0,0 +1 @@ +c9fd94764ac24ff5ecd3a0ac4fb20286 \ No newline at end of file diff --git a/docs/doxygen/latex/class_my_tcp_server__inherit__graph.pdf b/docs/doxygen/latex/class_my_tcp_server__inherit__graph.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6b14a70d85fcd38e9443b9a774150048f3675b7a GIT binary patch literal 13995 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 Rkd>2-1A&rKTu}ny{{zaKoSy&y literal 0 HcmV?d00001 diff --git a/docs/doxygen/latex/class_singleton_destroyer.tex b/docs/doxygen/latex/class_singleton_destroyer.tex new file mode 100644 index 0000000..cc8e1e6 --- /dev/null +++ b/docs/doxygen/latex/class_singleton_destroyer.tex @@ -0,0 +1,98 @@ +\doxysection{Singleton\+Destroyer Class Reference} +\hypertarget{class_singleton_destroyer}{}\label{class_singleton_destroyer}\index{SingletonDestroyer@{SingletonDestroyer}} + + +Класс для разрушения экземпляра Singleton. + + + + +{\ttfamily \#include $<$databasesingleton.\+h$>$} + + + +Collaboration diagram for Singleton\+Destroyer\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=248pt]{class_singleton_destroyer__coll__graph} +\end{center} +\end{figure} +\doxysubsubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{class_singleton_destroyer_a8ac3166871f4c5411edfdb13594dee15}{\texorpdfstring{$\sim$}{\string~}\+Singleton\+Destroyer}} () +\begin{DoxyCompactList}\small\item\em Деструктор для удаления Singleton. \end{DoxyCompactList}\item +void \mbox{\hyperlink{class_singleton_destroyer_abcaf525b6af81fbb5717c7dae73af8ec}{initialize}} (\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \texorpdfstring{$\ast$}{*}p) +\begin{DoxyCompactList}\small\item\em Инициализация указателя на экземпляр Singleton. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsubsection*{Private Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \texorpdfstring{$\ast$}{*} \mbox{\hyperlink{class_singleton_destroyer_a66a75552c83eb8515e6d458d7a6b0178}{p\+\_\+instance}} +\begin{DoxyCompactList}\small\item\em Указатель на экземпляр Singleton. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Класс для разрушения экземпляра Singleton. + +Используется для корректного удаления экземпляра \doxylink{class_data_base_singleton}{Data\+Base\+Singleton}. + +\doxysubsection{Constructor \& Destructor Documentation} +\Hypertarget{class_singleton_destroyer_a8ac3166871f4c5411edfdb13594dee15}\index{SingletonDestroyer@{SingletonDestroyer}!````~SingletonDestroyer@{\texorpdfstring{$\sim$}{\string~}SingletonDestroyer}} +\index{````~SingletonDestroyer@{\texorpdfstring{$\sim$}{\string~}SingletonDestroyer}!SingletonDestroyer@{SingletonDestroyer}} +\doxysubsubsection{\texorpdfstring{\texorpdfstring{$\sim$}{\string~}SingletonDestroyer()}{\string~SingletonDestroyer()}} +{\footnotesize\ttfamily \label{class_singleton_destroyer_a8ac3166871f4c5411edfdb13594dee15} +Singleton\+Destroyer\+::\texorpdfstring{$\sim$}{\string~}\+Singleton\+Destroyer (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + + +Деструктор для удаления Singleton. + +Уничтожает экземпляр Singleton, если он существует. +\begin{DoxyCode}{0} +\DoxyCodeLine{00211\ \{\ \textcolor{keyword}{delete}\ \mbox{\hyperlink{class_singleton_destroyer_a66a75552c83eb8515e6d458d7a6b0178}{p\_instance}};\ \}} + +\end{DoxyCode} + + +\doxysubsection{Member Function Documentation} +\Hypertarget{class_singleton_destroyer_abcaf525b6af81fbb5717c7dae73af8ec}\index{SingletonDestroyer@{SingletonDestroyer}!initialize@{initialize}} +\index{initialize@{initialize}!SingletonDestroyer@{SingletonDestroyer}} +\doxysubsubsection{\texorpdfstring{initialize()}{initialize()}} +{\footnotesize\ttfamily \label{class_singleton_destroyer_abcaf525b6af81fbb5717c7dae73af8ec} +void Singleton\+Destroyer\+::initialize (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} \texorpdfstring{$\ast$}{*}}]{p}{}\end{DoxyParamCaption})} + + + +Инициализация указателя на экземпляр Singleton. + + +\begin{DoxyParams}{Parameters} +{\em p} & Указатель на экземпляр Singleton. \\ +\hline +\end{DoxyParams} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00212\ \{\ \mbox{\hyperlink{class_singleton_destroyer_a66a75552c83eb8515e6d458d7a6b0178}{p\_instance}}\ =\ p;\ \}} + +\end{DoxyCode} + + +\doxysubsection{Member Data Documentation} +\Hypertarget{class_singleton_destroyer_a66a75552c83eb8515e6d458d7a6b0178}\index{SingletonDestroyer@{SingletonDestroyer}!p\_instance@{p\_instance}} +\index{p\_instance@{p\_instance}!SingletonDestroyer@{SingletonDestroyer}} +\doxysubsubsection{\texorpdfstring{p\_instance}{p\_instance}} +{\footnotesize\ttfamily \label{class_singleton_destroyer_a66a75552c83eb8515e6d458d7a6b0178} +\mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}}\texorpdfstring{$\ast$}{*} Singleton\+Destroyer\+::p\+\_\+instance\hspace{0.3cm}{\ttfamily [private]}} + + + +Указатель на экземпляр Singleton. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +server/\mbox{\hyperlink{databasesingleton_8h}{databasesingleton.\+h}}\item +server/\mbox{\hyperlink{databasesingleton_8cpp}{databasesingleton.\+cpp}}\end{DoxyCompactItemize} diff --git a/docs/doxygen/latex/class_singleton_destroyer__coll__graph.dot b/docs/doxygen/latex/class_singleton_destroyer__coll__graph.dot new file mode 100644 index 0000000..e54d129 --- /dev/null +++ b/docs/doxygen/latex/class_singleton_destroyer__coll__graph.dot @@ -0,0 +1,12 @@ +digraph "SingletonDestroyer" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="SingletonDestroyer",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip="Класс для разрушения экземпляра Singleton."]; + Node2 -> Node1 [id="edge4_Node000001_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; + Node2 [id="Node000002",label="DataBaseSingleton",height=0.2,width=0.4,color="gray40", fillcolor="white", style="filled",URL="$class_data_base_singleton.html",tooltip="Класс для работы с базой данных."]; + Node2 -> Node2 [id="edge5_Node000002_Node000002",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" p_instance",fontcolor="grey" ]; + Node1 -> Node2 [id="edge6_Node000002_Node000001",dir="back",color="darkorchid3",style="dashed",tooltip=" ",label=" destroyer",fontcolor="grey" ]; +} diff --git a/docs/doxygen/latex/class_singleton_destroyer__coll__graph.md5 b/docs/doxygen/latex/class_singleton_destroyer__coll__graph.md5 new file mode 100644 index 0000000..4dbc36c --- /dev/null +++ b/docs/doxygen/latex/class_singleton_destroyer__coll__graph.md5 @@ -0,0 +1 @@ +31edfa26cde3525c1592e47d1cac70a6 \ No newline at end of file diff --git a/docs/doxygen/latex/class_singleton_destroyer__coll__graph.pdf b/docs/doxygen/latex/class_singleton_destroyer__coll__graph.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a62e6264856d8883a9ae6efa485eda3c713b37da GIT binary patch literal 16114 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%0A<5M@FTWeC< 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 z Node2 [id="edge8_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="databasesingleton.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8h.html",tooltip=" "]; + Node2 -> Node3 [id="edge9_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node4 [id="edge10_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node5 [id="edge11_Node000002_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node6 [id="edge12_Node000002_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node7 [id="edge13_Node000002_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node8 [id="edge14_Node000002_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/databasesingleton_8cpp__incl.md5 b/docs/doxygen/latex/databasesingleton_8cpp__incl.md5 new file mode 100644 index 0000000..265733e --- /dev/null +++ b/docs/doxygen/latex/databasesingleton_8cpp__incl.md5 @@ -0,0 +1 @@ +e8684dcf8ba1a393668ff29c2bffff54 \ No newline at end of file diff --git a/docs/doxygen/latex/databasesingleton_8cpp__incl.pdf b/docs/doxygen/latex/databasesingleton_8cpp__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4cf7627be7dede510e6e9a8ea886d7b4ff788230 GIT binary patch literal 19662 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\newline +{\ttfamily \#include $<$QSql\+Query$>$}\newline +{\ttfamily \#include $<$QSql\+Error$>$}\newline +{\ttfamily \#include $<$QDebug$>$}\newline +{\ttfamily \#include $<$QVariant\+Map$>$}\newline +{\ttfamily \#include $<$QVector$>$}\newline +Include dependency graph for databasesingleton.\+h\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{databasesingleton_8h__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{databasesingleton_8h__dep__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Classes} +\begin{DoxyCompactItemize} +\item +class \mbox{\hyperlink{class_singleton_destroyer}{Singleton\+Destroyer}} +\begin{DoxyCompactList}\small\item\em Класс для разрушения экземпляра Singleton. \end{DoxyCompactList}\item +class \mbox{\hyperlink{class_data_base_singleton}{Data\+Base\+Singleton}} +\begin{DoxyCompactList}\small\item\em Класс для работы с базой данных. \end{DoxyCompactList}\end{DoxyCompactItemize} diff --git a/docs/doxygen/latex/databasesingleton_8h__dep__incl.dot b/docs/doxygen/latex/databasesingleton_8h__dep__incl.dot new file mode 100644 index 0000000..c423967 --- /dev/null +++ b/docs/doxygen/latex/databasesingleton_8h__dep__incl.dot @@ -0,0 +1,14 @@ +digraph "server/databasesingleton.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/databasesingleton.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge4_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="server/databasesingleton.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8cpp.html",tooltip=" "]; + Node1 -> Node3 [id="edge5_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="server/func2serv.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8cpp.html",tooltip=" "]; + Node1 -> Node4 [id="edge6_Node000001_Node000004",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="server/main.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$main_8cpp.html",tooltip=" "]; +} diff --git a/docs/doxygen/latex/databasesingleton_8h__dep__incl.md5 b/docs/doxygen/latex/databasesingleton_8h__dep__incl.md5 new file mode 100644 index 0000000..27dec51 --- /dev/null +++ b/docs/doxygen/latex/databasesingleton_8h__dep__incl.md5 @@ -0,0 +1 @@ +60c7d49a1b1dad42c311bda21a49403c \ No newline at end of file diff --git a/docs/doxygen/latex/databasesingleton_8h__dep__incl.pdf b/docs/doxygen/latex/databasesingleton_8h__dep__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..20158b04f2a5de83aa6c839ed6ea1973f7bf7ea0 GIT binary patch literal 17130 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 v-=pJP Node2 [id="edge7_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge8_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge9_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge10_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge11_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge12_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/databasesingleton_8h__incl.md5 b/docs/doxygen/latex/databasesingleton_8h__incl.md5 new file mode 100644 index 0000000..01a7330 --- /dev/null +++ b/docs/doxygen/latex/databasesingleton_8h__incl.md5 @@ -0,0 +1 @@ +b83af22251153875a6379b18a8eac25c \ No newline at end of file diff --git a/docs/doxygen/latex/databasesingleton_8h__incl.pdf b/docs/doxygen/latex/databasesingleton_8h__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..88c0e980729874de81e563caf50e2ba22561dfd4 GIT binary patch literal 19338 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/latex/databasesingleton_8h_source.tex b/docs/doxygen/latex/databasesingleton_8h_source.tex new file mode 100644 index 0000000..f421419 --- /dev/null +++ b/docs/doxygen/latex/databasesingleton_8h_source.tex @@ -0,0 +1,67 @@ +\doxysection{databasesingleton.\+h} +\hypertarget{databasesingleton_8h_source}{}\label{databasesingleton_8h_source}\index{server/databasesingleton.h@{server/databasesingleton.h}} +\mbox{\hyperlink{databasesingleton_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ \textcolor{preprocessor}{\#ifndef\ DATABASESINGLETON\_H}} +\DoxyCodeLine{00002\ \textcolor{preprocessor}{\#define\ DATABASESINGLETON\_H}} +\DoxyCodeLine{00003\ } +\DoxyCodeLine{00004\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00007\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00008\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00010\ } +\DoxyCodeLine{00011\ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}};} +\DoxyCodeLine{00012\ } +\DoxyCodeLine{00018\ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_singleton_destroyer}{SingletonDestroyer}}\ \{} +\DoxyCodeLine{00019\ \textcolor{keyword}{private}:} +\DoxyCodeLine{00020\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ \mbox{\hyperlink{class_singleton_destroyer_a66a75552c83eb8515e6d458d7a6b0178}{p\_instance}};\ } +\DoxyCodeLine{00021\ \textcolor{keyword}{public}:} +\DoxyCodeLine{00027\ \ \ \ \ \mbox{\hyperlink{class_singleton_destroyer_a8ac3166871f4c5411edfdb13594dee15}{\string~SingletonDestroyer}}();} +\DoxyCodeLine{00028\ } +\DoxyCodeLine{00034\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_singleton_destroyer_abcaf525b6af81fbb5717c7dae73af8ec}{initialize}}(\mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ p);} +\DoxyCodeLine{00035\ \};} +\DoxyCodeLine{00036\ } +\DoxyCodeLine{00043\ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}\ \{} +\DoxyCodeLine{00044\ \textcolor{keyword}{private}:} +\DoxyCodeLine{00045\ \ \ \ \ \textcolor{keyword}{static}\ \mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}*\ \mbox{\hyperlink{class_data_base_singleton_abf86267afcfebbe05658438ff0ccfdfd}{p\_instance}};\ \ \ } +\DoxyCodeLine{00046\ \ \ \ \ \textcolor{keyword}{static}\ \mbox{\hyperlink{class_data_base_singleton_aa93ce997b9645496c0e17460fba08432}{SingletonDestroyer}}\ \mbox{\hyperlink{class_data_base_singleton_a414f1ff51603535a839d5fc2e24b65e0}{destroyer}};\ \ \ \ } +\DoxyCodeLine{00047\ \ \ \ \ QSqlDatabase\ \mbox{\hyperlink{class_data_base_singleton_a929da7bbfe9e068b4c3bc5a095e6156a}{db}};\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ } +\DoxyCodeLine{00048\ } +\DoxyCodeLine{00054\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}();} +\DoxyCodeLine{00055\ } +\DoxyCodeLine{00056\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_abe02a9a0f33a2664ba969d20d777d4d9}{DataBaseSingleton}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}\&)\ =\ \textcolor{keyword}{delete};\ } +\DoxyCodeLine{00057\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}\&\ \mbox{\hyperlink{class_data_base_singleton_af310f74ceebe21ef29454dd7eccac19a}{operator=}}(\textcolor{keyword}{const}\ \mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}\&)\ =\ \textcolor{keyword}{delete};\ } +\DoxyCodeLine{00058\ } +\DoxyCodeLine{00064\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton_aa0d2615a21bdb8d7367a513c802e32c1}{\string~DataBaseSingleton}}()\ =\ \textcolor{keywordflow}{default};} +\DoxyCodeLine{00065\ } +\DoxyCodeLine{00066\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_data_base_singleton_aa93ce997b9645496c0e17460fba08432}{SingletonDestroyer}};\ \ \ \ \ \ \ \ } +\DoxyCodeLine{00067\ } +\DoxyCodeLine{00068\ \textcolor{keyword}{public}:} +\DoxyCodeLine{00074\ \ \ \ \ \textcolor{keyword}{static}\ \mbox{\hyperlink{class_data_base_singleton_aa289e69de3195fef9593052246b9b1b0}{DataBaseSingleton}}*\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{getInstance}}();} +\DoxyCodeLine{00075\ } +\DoxyCodeLine{00084\ \ \ \ \ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{class_data_base_singleton_a59bda63308000a018c5bdc1989582e50}{initialize}}(\textcolor{keyword}{const}\ QString\&\ databaseName);} +\DoxyCodeLine{00085\ } +\DoxyCodeLine{00093\ \ \ \ \ QSqlQuery\ \mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(\textcolor{keyword}{const}\ QString\&\ query,\ \textcolor{keyword}{const}\ QVariantMap\&\ params\ =\ QVariantMap());} +\DoxyCodeLine{00094\ } +\DoxyCodeLine{00102\ \ \ \ \ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{class_data_base_singleton_a51bd7dc4507c5f3d04a2903899e13d42}{checkUserCredentials}}(\textcolor{keyword}{const}\ QString\&\ login,\ \textcolor{keyword}{const}\ QString\&\ password);} +\DoxyCodeLine{00103\ } +\DoxyCodeLine{00113\ \ \ \ \ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{class_data_base_singleton_af17db97dfc40b0fa48b3ed9abeacca76}{addUser}}(\textcolor{keyword}{const}\ QString\&\ name,\ \textcolor{keyword}{const}\ QString\&\ email,\ \textcolor{keyword}{const}\ QString\&\ password,\ \textcolor{keywordtype}{bool}\ isAdmin\ =\ \textcolor{keyword}{false});} +\DoxyCodeLine{00114\ } +\DoxyCodeLine{00128\ \ \ \ \ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{class_data_base_singleton_a3fe2a5e1f41a408023066e8caf63b523}{addProduct}}(\textcolor{keywordtype}{int}\ userId,\ \textcolor{keyword}{const}\ QString\&\ name,\ \textcolor{keywordtype}{int}\ proteins,\ \textcolor{keywordtype}{int}\ fatness,\ \textcolor{keywordtype}{int}\ carbs,\ \textcolor{keywordtype}{int}\ weight,\ \textcolor{keywordtype}{int}\ cost,\ \textcolor{keywordtype}{int}\ type);} +\DoxyCodeLine{00129\ } +\DoxyCodeLine{00136\ \ \ \ \ QVector\ \mbox{\hyperlink{class_data_base_singleton_a84fe7936dd15c077eff86d7884ce3049}{getProductsByUser}}(\textcolor{keywordtype}{int}\ userId);} +\DoxyCodeLine{00137\ } +\DoxyCodeLine{00148\ \ \ \ \ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{class_data_base_singleton_a515aed6cbbb34fe71f254943a70d504b}{addFavoriteRation}}(\textcolor{keywordtype}{int}\ userId,\ \textcolor{keyword}{const}\ QVector\&\ productIds,\ \textcolor{keywordtype}{int}\ calories,\ \textcolor{keywordtype}{int}\ allCost,\ \textcolor{keywordtype}{int}\ allWeight);} +\DoxyCodeLine{00149\ } +\DoxyCodeLine{00156\ \ \ \ \ QVector\ \mbox{\hyperlink{class_data_base_singleton_afee32779221eaa5f92eb0c8a8666bb50}{getFavoritesByUser}}(\textcolor{keywordtype}{int}\ userId);} +\DoxyCodeLine{00157\ } +\DoxyCodeLine{00166\ \ \ \ \ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{class_data_base_singleton_ab2877d5184cd7af28f1ea3b31f523280}{updateStatistics}}(\textcolor{keywordtype}{int}\ registrations,\ \textcolor{keywordtype}{int}\ visits,\ \textcolor{keywordtype}{int}\ generations);} +\DoxyCodeLine{00167\ } +\DoxyCodeLine{00173\ \ \ \ \ QVariantMap\ \mbox{\hyperlink{class_data_base_singleton_aad20b90cdb02aab3df1f27a9e4f882a3}{getStatistics}}();} +\DoxyCodeLine{00174\ \};} +\DoxyCodeLine{00175\ } +\DoxyCodeLine{00176\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ DATABASESINGLETON\_H}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/dir_41e1742e44e2de38b3bc91f993fed282.tex b/docs/doxygen/latex/dir_41e1742e44e2de38b3bc91f993fed282.tex new file mode 100644 index 0000000..c7cd515 --- /dev/null +++ b/docs/doxygen/latex/dir_41e1742e44e2de38b3bc91f993fed282.tex @@ -0,0 +1,19 @@ +\doxysection{server Directory Reference} +\hypertarget{dir_41e1742e44e2de38b3bc91f993fed282}{}\label{dir_41e1742e44e2de38b3bc91f993fed282}\index{server Directory Reference@{server Directory Reference}} +\doxysubsubsection*{Files} +\begin{DoxyCompactItemize} +\item +file \mbox{\hyperlink{databasesingleton_8cpp}{databasesingleton.\+cpp}} +\item +file \mbox{\hyperlink{databasesingleton_8h}{databasesingleton.\+h}} +\item +file \mbox{\hyperlink{func2serv_8cpp}{func2serv.\+cpp}} +\item +file \mbox{\hyperlink{func2serv_8h}{func2serv.\+h}} +\item +file \mbox{\hyperlink{main_8cpp}{main.\+cpp}} +\item +file \mbox{\hyperlink{mytcpserver_8cpp}{mytcpserver.\+cpp}} +\item +file \mbox{\hyperlink{mytcpserver_8h}{mytcpserver.\+h}} +\end{DoxyCompactItemize} diff --git a/docs/doxygen/latex/doxygen.sty b/docs/doxygen/latex/doxygen.sty new file mode 100644 index 0000000..66a07a5 --- /dev/null +++ b/docs/doxygen/latex/doxygen.sty @@ -0,0 +1,714 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multicol} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage{enumitem} +\RequirePackage{alphalph} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}[1]{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{#1=0}% + {% + \hrule% + }% + {% + \hrulefilll% + }% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by

 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{ + \ifthenelse{\equal{\detokenize{#1}}{}} + { + \vspace*{\baselineskip} + } + { + \hangpara{\DoxyCodeWidth}{1}{#1}\par + } +} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \vspace{2pt}% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}}% + {% + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + }% + {% + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + }% + \vspace{2pt}% +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \par% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\setlistdepth{12} +\newlist{DoxyEnumerate}{enumerate}{12} +\setlist[DoxyEnumerate,1]{label=\arabic*.} +\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,3]{label=\roman*.} +\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,5]{label=\arabic*.} +\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,7]{label=\roman*.} +\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,9]{label=\arabic*.} +\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,11]{label=\roman*.} +\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\setlistdepth{12} +\newlist{DoxyItemize}{itemize}{12} +\setlist[DoxyItemize]{label=\textperiodcentered} + +\setlist[DoxyItemize,1]{label=\textbullet} +\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} +\setlist[DoxyItemize,3]{label=\textasteriskcentered} +\setlist[DoxyItemize,4]{label=\textperiodcentered} + +% Used for check boxes +\newcommand{\DoxyUnchecked}{$\square$} +\newcommand{\DoxyChecked}{\rlap{\raisebox{0.3ex}{\hspace{0.4ex}\tiny \checkmark}}$\square$} + +% Used by description lists (using
...
) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \centering% +}{% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @important +\newenvironment{DoxyImportant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{2}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,r]|X[-1,l]|}}% with init value + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[3][]{\\ \hspace*{2.0cm} ##1 {\em ##2}##3}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned on +\newcommand{\doxylink}[2]{% + \mbox{\hyperlink{#1}{#2}}% +} + +% Used when hyperlinks are turned on +% Third argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectlink}[3]{% + \mbox{\hyperlink{#1}{#2}}% +} +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used when hyperlinks are turned off +% Fourth argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectref}[4]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{xmlcdata}{rgb}{0.0,0.0,0.0} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcounter{subsubsubsection}[subsubsection] +\newcounter{subsubsubsubsection}[subsubsubsection] +\newcounter{subsubsubsubsubsection}[subsubsubsubsection] +\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection] +\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}} +\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}} +\newcommand{\subsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsubsectionmark}[1]{} +\def\toclevel@subsubsubsection{4} +\def\toclevel@subsubsubsubsection{5} +\def\toclevel@subsubsubsubsubsection{6} +\def\toclevel@subsubsubsubsubsubsection{7} +\def\toclevel@paragraph{8} +\def\toclevel@subparagraph{9} + +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} + +\newcommand\l@subsubsubsection{\@dottedtocline{4}{10.0em}{7.8em}} +\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{13.0em}{9.4em}} +\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{15.0em}{11em}} +\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{18.0em}{12.6em}} +\renewcommand\l@paragraph{\@dottedtocline{8}{21.0em}{14.2em}} +\renewcommand\l@subparagraph{\@dottedtocline{9}{24.0em}{15.8em}} +\makeatother +% the sectsty doesn't look to be maintained but gives, in our case, some warning like: +% LaTeX Warning: Command \underline has changed. +% Check if current package is valid. +% unfortunately had to copy the relevant part +\newcommand*{\doxypartfont} [1] + {\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxychapterfont} [1] + {\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxysectionfont} [1] + {\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsectionfont} [1] + {\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsubsectionfont} [1] + {\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyparagraphfont} [1] + {\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubparagraphfont} [1] + {\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyminisecfont} [1] + {\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}} +\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}% + \doxychapterfont{#1}% + \doxysectionfont{#1}% + \doxysubsectionfont{#1}% + \doxysubsubsectionfont{#1}% + \doxyparagraphfont{#1}% + \doxysubparagraphfont{#1}% + \doxyminisecfont{#1}}% +% Define caption that is also suitable in a table +% for usage with hyperlinks +\makeatletter +\def\doxyfigcaption{% +\H@refstepcounter{figure}% +\@dblarg{\@caption{figure}}} + +% for usage without hyperlinks +\def\doxyfigcaptionnolink{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + +% Define alpha enumarative names for counters > 26 +\makeatletter +\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} +\def\@enumalphalphcnt#1{\alphalph{#1}} +\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} +\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} +\makeatother +\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} +\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/docs/doxygen/latex/etoc_doxygen.sty b/docs/doxygen/latex/etoc_doxygen.sty new file mode 100644 index 0000000..5f7e127 --- /dev/null +++ b/docs/doxygen/latex/etoc_doxygen.sty @@ -0,0 +1,2178 @@ +%% +%% This is file etoc_doxygen.sty +%% +%% Apart from this header notice and the renaming from etoc to +%% etoc_doxygen (also in \ProvidesPackage) it is an identical +%% copy of +%% +%% etoc.sty +%% +%% at version 1.2b of 2023/07/01. +%% +%% This file has been provided to Doxygen team courtesy of the +%% author for benefit of users having a LaTeX installation not +%% yet providing version 1.2a or later of etoc, whose +%% deeplevels feature is required. +%% +%% The original source etoc.dtx (only of the latest version at +%% any given time) is available at +%% +%% https://ctan.org/pkg/etoc +%% +%% and contains the terms for copying and modification as well +%% as author contact information. +%% +%% In brief any modified versions of this file must be renamed +%% with new filenames distinct from etoc.sty. +%% +%% Package: etoc +%% Version: 1.2b +%% License: LPPL 1.3c +%% Copyright (C) 2012-2023 Jean-Francois B. +\NeedsTeXFormat{LaTeX2e}[2003/12/01] +\ProvidesPackage{etoc_doxygen}[2023/07/01 v1.2b Completely customisable TOCs (JFB)] +\newif\ifEtoc@oldLaTeX +\@ifl@t@r\fmtversion{2020/10/01} + {} + {\Etoc@oldLaTeXtrue + \PackageInfo{etoc}{Old LaTeX (\fmtversion) detected!\MessageBreak + Since 1.1a (2023/01/14), etoc prefers LaTeX at least\MessageBreak + as recent as 2020-10-01, for reasons of the .toc file,\MessageBreak + and used to require it (from 1.1a to 1.2).\MessageBreak + This etoc (1.2b) does not *require* it, but has not been\MessageBreak + tested thoroughly on old LaTeX (especially if document\MessageBreak + does not use hyperref) and retrofitting was done only\MessageBreak + on basis of author partial remembrances of old context.\MessageBreak + Reported}} +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=Etoc@} +\newif\ifEtoc@lof +\DeclareVoidOption{lof}{\Etoc@loftrue + \PackageInfo{etoc}{Experimental support for \string\locallistoffigures.\MessageBreak + Barely tested, use at own risk}% +} +\newif\ifEtoc@lot +\DeclareVoidOption{lot}{\Etoc@lottrue + \PackageInfo{etoc}{Experimental support for \string\locallistoftables.\MessageBreak + Barely tested, use at own risk}% +} +\@ifclassloaded{memoir}{ +\PackageInfo{etoc} + {As this is with memoir class, all `...totoc' options\MessageBreak + are set true by default. Reported} +\DeclareBoolOption[true]{maintoctotoc} +\DeclareBoolOption[true]{localtoctotoc} +\DeclareBoolOption[true]{localloftotoc} +\DeclareBoolOption[true]{locallottotoc} +}{ +\DeclareBoolOption[false]{maintoctotoc} +\DeclareBoolOption[false]{localtoctotoc} +\DeclareBoolOption[false]{localloftotoc} +\DeclareBoolOption[false]{locallottotoc} +} +\DeclareBoolOption[true]{ouroboros} +\DeclareBoolOption[false]{deeplevels} +\DeclareDefaultOption{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} +\ProcessKeyvalOptions* +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lof} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lot} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{deeplevels} +\def\etocsetup#1{\setkeys{etoc}{#1}} +\def\etocifmaintoctotoc{\ifEtoc@maintoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocaltoctotoc{\ifEtoc@localtoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocalloftotoc{\ifEtoc@localloftotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocallottotoc{\ifEtoc@locallottotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\RequirePackage{multicol} +\def\etoc@{\etoc@} +\long\def\Etoc@gobtoetoc@ #1\etoc@{} +\newtoks\Etoc@toctoks +\def\Etoc@par{\par} +\def\etocinline{\def\Etoc@par{}} +\let\etocnopar\etocinline +\def\etocdisplay{\def\Etoc@par{\par}} +\let\Etoc@global\@empty +\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} +\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} +\newif\ifEtoc@numbered +\newif\ifEtoc@hyperref +\newif\ifEtoc@parskip +\newif\ifEtoc@tocwithid +\newif\ifEtoc@standardlines +\newif\ifEtoc@etocstyle +\newif\ifEtoc@classstyle +\newif\ifEtoc@keeporiginaltoc +\newif\ifEtoc@skipprefix +\newif\ifEtoc@isfirst +\newif\ifEtoc@localtoc +\newif\ifEtoc@skipthisone +\newif\ifEtoc@stoptoc +\newif\ifEtoc@notactive +\newif\ifEtoc@mustclosegroup +\newif\ifEtoc@isemptytoc +\newif\ifEtoc@checksemptiness +\def\etocchecksemptiness {\Etoc@checksemptinesstrue } +\def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse } +\newif\ifEtoc@notocifnotoc +\def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue } +\newcounter{etoc@tocid} +\def\Etoc@tocext{toc} +\def\Etoc@lofext{lof} +\def\Etoc@lotext{lot} +\let\Etoc@currext\Etoc@tocext +\def\etocifislocal{\ifEtoc@localtoc\expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi + } +\def\etocifislocaltoc{\etocifislocal{\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallof{\etocifislocal{\ifx\Etoc@currext\Etoc@lofext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallot{\etocifislocal{\ifx\Etoc@currext\Etoc@lotext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} +\expandafter\def\csname Etoc@-2@@\endcsname {-\tw@} +\expandafter\let\csname Etoc@-1@@\endcsname \m@ne +\expandafter\let\csname Etoc@0@@\endcsname \z@ +\expandafter\let\csname Etoc@1@@\endcsname \@ne +\expandafter\let\csname Etoc@2@@\endcsname \tw@ +\expandafter\let\csname Etoc@3@@\endcsname \thr@@ +\expandafter\chardef\csname Etoc@4@@\endcsname 4 +\expandafter\chardef\csname Etoc@5@@\endcsname 5 +\expandafter\chardef\csname Etoc@6@@\endcsname 6 +\ifEtoc@deeplevels + \expandafter\chardef\csname Etoc@7@@\endcsname 7 + \expandafter\chardef\csname Etoc@8@@\endcsname 8 + \expandafter\chardef\csname Etoc@9@@\endcsname 9 + \expandafter\chardef\csname Etoc@10@@\endcsname 10 + \expandafter\chardef\csname Etoc@11@@\endcsname 11 + \expandafter\chardef\csname Etoc@12@@\endcsname 12 +\fi +\expandafter\let\expandafter\Etoc@maxlevel + \csname Etoc@\ifEtoc@deeplevels12\else6\fi @@\endcsname +\edef\etocthemaxlevel{\number\Etoc@maxlevel} +\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} +\let\Etoc@none@@ \Etoc@minf +\expandafter\let\expandafter\Etoc@all@@ + \csname Etoc@\ifEtoc@deeplevels11\else5\fi @@\endcsname +\let\Etoc@dolevels\@empty +\def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@dolevels\expandafter + {\Etoc@dolevels\Etoc@do{#1}}} +\ifdefined\expanded + \def\etocsetlevel#1#2{\expanded{\noexpand\etoc@setlevel{#1}{#2}}}% +\else + \def\etocsetlevel#1#2{{\edef\Etoc@tmp{\noexpand\etoc@setlevel{#1}{#2}}\expandafter}\Etoc@tmp}% +\fi +\def\etoc@setlevel#1#2{% + \edef\Etoc@tmp{\the\numexpr#2}% + \if1\ifnum\Etoc@tmp>\Etoc@maxlevel0\fi\unless\ifnum\Etoc@minf<\Etoc@tmp;\fi1% + \ifEtoc@deeplevels + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,% + .7,.8,.9,.10,.11,.12,}% + \else + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,}% + \fi + \ifin@\else\if\@car#1\@nil @\in@true\fi\fi + \ifin@ + \PackageWarning{etoc} + {Sorry, but `#1' is forbidden as level name.\MessageBreak + \if\@car#1\@nil @% + (because of the @ as first character)\MessageBreak\fi + Reported}% + \else + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\Etoc@tmp @@\endcsname + \expandafter\edef\csname Etoc@@#1@@\endcsname + {\expandafter\noexpand\csname Etoc@#1@@\endcsname}% + \expandafter\edef\csname toclevel@@#1\endcsname + {\expandafter\noexpand\csname toclevel@#1\endcsname}% + \fi + \else + \PackageWarning{etoc} + {Argument `\detokenize{#2}' of \string\etocsetlevel\space should + represent one of\MessageBreak + \ifnum\Etoc@minf=-\thr@@-2, \fi-1, 0, 1, 2, \ifEtoc@deeplevels ...\else3, 4\fi, + \the\numexpr\Etoc@maxlevel-1, or \number\Etoc@maxlevel\space + but evaluates to \Etoc@tmp.\MessageBreak + The level of `#1' will be set to \number\Etoc@maxlevel.\MessageBreak + Tables of contents will ignore `#1' as long\MessageBreak + as its level is \number\Etoc@maxlevel\space (=\string\etocthemaxlevel).% + \MessageBreak + Reported}% + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@maxlevel + \fi +} +\def\etoclevel#1{\csname Etoc@#1@@\endcsname} +\def\etocthelevel#1{\number\csname Etoc@#1@@\endcsname} +\def\etocifunknownlevelTF#1{\@ifundefined{Etoc@#1@@}} +\@ifclassloaded{memoir}{\etocsetlevel{book}{-2}}{} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\ifdefined\c@chapter + \etocsetlevel{appendix}{0} +\else + \etocsetlevel{appendix}{1} +\fi +\def\Etoc@do#1{\@namedef{l@@#1}{\csname l@#1\endcsname}} +\Etoc@dolevels +\let\Etoc@figure@@\Etoc@maxlevel +\let\Etoc@table@@ \Etoc@maxlevel +\let\Etoc@gobblethreeorfour\@gobblefour +\ifdefined\@gobblethree + \let\Etoc@gobblethree\@gobblethree +\else + \long\def\Etoc@gobblethree#1#2#3{}% +\fi +\AtBeginDocument{% +\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% +\@ifpackageloaded{hyperref} + {\Etoc@hyperreftrue} + {\ifEtoc@oldLaTeX + \let\Etoc@gobblethreeorfour\Etoc@gobblethree + \let\Etoc@etoccontentsline@fourargs\Etoc@etoccontentsline@ + \long\def\Etoc@etoccontentsline@#1#2#3{% + \Etoc@etoccontentsline@fourargs{#1}{#2}{#3}{}% + }% + \fi + }% +} +\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } +\def\Etoc@updatestackofends#1\etoc@{\gdef\Etoc@stackofends{#1}} +\def\Etoc@stackofends{{-3}{}} +\def\Etoc@doendsandbegin{% + \expandafter\Etoc@traversestackofends\Etoc@stackofends\etoc@ +} +\def\Etoc@traversestackofends#1{% + \ifnum#1>\Etoc@level + \csname Etoc@end@#1\endcsname + \expandafter\Etoc@traversestackofends + \else + \Etoc@traversestackofends@done{#1}% + \fi +} +\def\Etoc@traversestackofends@done#1#2{#2% + \ifnum#1<\Etoc@level + \csname Etoc@begin@\the\numexpr\Etoc@level\endcsname + \Etoc@global\Etoc@isfirsttrue + \edef\Etoc@tmp{{\the\numexpr\Etoc@level}}% + \else + \Etoc@global\Etoc@isfirstfalse + \let\Etoc@tmp\@empty + \fi + \expandafter\Etoc@updatestackofends\Etoc@tmp{#1}% +} +\def\Etoc@etoccontentsline #1{% + \let\Etoc@next\Etoc@gobblethreeorfour + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \Etoc@skipthisonefalse + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \ifEtoc@skipthisone + \else + \unless\ifnum\Etoc@level>\c@tocdepth + \ifEtoc@standardlines + \let\Etoc@next\Etoc@savedcontentsline + \else + \let\Etoc@next\Etoc@etoccontentsline@ + \fi + \fi + \fi + \fi + \Etoc@next{#1}% +} +\def\Etoc@etoccontentsline@ #1#2#3#4{% + \Etoc@doendsandbegin + \Etoc@global\edef\Etoc@prefix {\expandafter\noexpand + \csname Etoc@prefix@\the\numexpr\Etoc@level\endcsname }% + \Etoc@global\edef\Etoc@contents{\expandafter\noexpand + \csname Etoc@contents@\the\numexpr\Etoc@level\endcsname }% + \ifEtoc@skipprefix \Etoc@global\def\Etoc@prefix{\@empty}\fi + \global\Etoc@skipprefixfalse + \Etoc@lxyz{#2}{#3}{#4}% + \Etoc@prefix + \Etoc@contents +} +\def\Etoc@lxyz #1#2#3{% + \ifEtoc@hyperref + \Etoc@global\def\etocthelink##1{\hyperlink{#3}{##1}}% + \else + \Etoc@global\let\etocthelink\@firstofone + \fi + \Etoc@global\def\etocthepage {#2}% + \ifEtoc@hyperref + \ifx\etocthepage\@empty + \Etoc@global\let\etocthelinkedpage\@empty + \else + \Etoc@global\def\etocthelinkedpage{\hyperlink {#3}{#2}}% + \fi + \else + \Etoc@global\let\etocthelinkedpage\etocthepage + \fi + \Etoc@global\def\etocthename{#1}% + \futurelet\Etoc@getnb@token\Etoc@@getnb #1\hspace\etoc@ + \ifEtoc@hyperref + \def\Etoc@tmp##1##2{\Etoc@global\def##2{\hyperlink{#3}{##1}}}% + \expandafter\Etoc@tmp\expandafter{\etocthename}\etocthelinkedname + \ifEtoc@numbered + \expandafter\Etoc@tmp\expandafter{\etocthenumber}\etocthelinkednumber + \else + \Etoc@global\let\etocthelinkednumber\@empty + \fi + \else + \Etoc@global\let\etocthelinkedname \etocthename + \Etoc@global\let\etocthelinkednumber\etocthenumber + \fi + \Etoc@global\expandafter\let\csname etoclink \endcsname \etocthelink + \Etoc@global\expandafter\let\csname etocname \endcsname \etocthename + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthenumber + \Etoc@global\expandafter\let\csname etocpage \endcsname \etocthepage + \ifEtoc@hyperref + \Etoc@lxyz@linktoc + \fi +} +\def\Etoc@lxyz@linktoc{% + \ifcase\Hy@linktoc + \or + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \or % page + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \else % all + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \fi +} +\def\Etoc@@getnb {% + \let\Etoc@next\Etoc@getnb + \ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nonbr\fi + \ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@nonbr\fi + \Etoc@next +} +\def\Etoc@getnb #1{% + \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nmbrd + \else + \ifnum\Etoc@level=\m@ne + \let\Etoc@next\Etoc@@getit + \else + \let\Etoc@next\Etoc@getnb@nonbr + \fi + \in@{#1}{\nonumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nonumberline + \fi + \fi + \Etoc@next #1% +} +\def\Etoc@getnb@nmbrd #1#2{% + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#2}% + \Etoc@getnb@nmbrd@getname\@empty +}% +\def\Etoc@getnb@nmbrd@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\def\Etoc@getnb@nonbr #1\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty +} +\def\Etoc@getnb@nonumberline #1\hspace\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{\@gobble#1}% +} +\def\Etoc@@getit #1\hspace#2{% + \ifx\etoc@#2% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \else + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#1}% + \expandafter\Etoc@getit@getname \expandafter\@empty + \fi +} +\def\Etoc@getit@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\let\etocthename \@empty +\let\etocthenumber \@empty +\let\etocthepage \@empty +\let\etocthelinkedname \@empty +\let\etocthelinkednumber \@empty +\let\etocthelinkedpage \@empty +\let\etocthelink \@firstofone +\DeclareRobustCommand*{\etocname} {} +\DeclareRobustCommand*{\etocnumber}{} +\DeclareRobustCommand*{\etocpage} {} +\DeclareRobustCommand*{\etoclink} {\@firstofone} +\DeclareRobustCommand*{\etocifnumbered} + {\ifEtoc@numbered\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname +\DeclareRobustCommand*{\etociffirst} + {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname +\def\Etoc@readtoc {% + \ifeof \Etoc@tf + \else + \read \Etoc@tf to \Etoc@buffer + \Etoc@toctoks=\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% + \expandafter\Etoc@readtoc + \fi +} +\Etoc@toctoks {}% (superfluous, but for clarity) +\AtBeginDocument{\IfFileExists{\jobname.toc} + {{\endlinechar=\m@ne + \makeatletter + \newread\Etoc@tf + \openin\Etoc@tf\@filef@und + \Etoc@readtoc + \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% + \closein\Etoc@tf}} + {\typeout{No file \jobname.toc.}}} +\def\Etoc@openouttoc{% + \ifEtoc@hyperref + \ifx\hyper@last\@undefined + \IfFileExists{\jobname .toc} + {\Hy@WarningNoLine + {old toc file detected; run LaTeX again (cheers from `etoc')}% + \global\Etoc@toctoks={}% + } + {}% + \fi + \fi + \if@filesw + \newwrite \tf@toc + \immediate \openout \tf@toc \jobname .toc\relax + \fi + \global\let\Etoc@openouttoc\empty +} +\def\Etoc@toctoc{% + \gdef\Etoc@stackofends{{-3}{}}% + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \the\Etoc@toctoks + \ifEtoc@notactive + \else + \gdef\Etoc@level{-\thr@@}% + \Etoc@doendsandbegin + \fi +} +\def\Etoc@@startlocaltoc#1#2{% + \ifEtoc@localtoc + \ifnum #1=#2\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \etoclocaltableofcontentshook + \ifEtoc@etocstyle + \etocetoclocaltocmaketitle + \fi + \ifx\Etoc@aftertitlehook\@empty + \else + \ifEtoc@localtoctotoc + \ifEtoc@ouroboros + \else + \let\Etoc@tmp\contentsline + \def\contentsline{\let\contentsline\Etoc@tmp\Etoc@gobblethreeorfour}% + \fi + \fi + \fi + \global\Etoc@notactivefalse + \fi + \fi +} +\let\etoc@startlocaltoc\@gobble +\let\Etoc@@startlocaltoc@toc\Etoc@@startlocaltoc +\let\Etoc@@startlocaltochook\@empty +\unless\ifEtoc@deeplevels + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or paragraph% + \or subparagraph% + \or empty% + \else\ifnum\numexpr#1<\m@ne + book% + \else + part% + \fi + \fi + } +\else + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or subsubsubsection% + \or subsubsubsubsection% + \or subsubsubsubsubsection% + \or subsubsubsubsubsubsection% + \or paragraph% + \or subparagraph% + \else\ifnum\numexpr#1>\z@ + empty% + \else\ifnum\numexpr#1=\m@ne + part% + \else + book% + \fi\fi + \fi + } +\fi +\def\etoclocalheadtotoc#1#2{\addcontentsline{toc}{@#1}{#2}} +\def\etocglobalheadtotoc{\addcontentsline{toc}} +\providecommand*\UseName{\@nameuse} +\def\etocetoclocaltocmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\localcontentsname}% + \if@noskipsec\leavevmode\par\fi + \etociflocaltoctotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\localcontentsname}% + }% + }% + {}% +}% +\def\localcontentsname {\contentsname}% +\let\etoclocaltableofcontentshook\@empty +\if1\ifEtoc@lof0\fi\ifEtoc@lot0\fi1% +\else +\AtBeginDocument{% + \let\Etoc@originaladdcontentsline\addcontentsline + \def\addcontentsline{\Etoc@hackedaddcontentsline}% +}% +\fi +\ifEtoc@lof + \ifEtoc@lot + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \fi +\else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} +\fi +\def\Etoc@hackedaddcontentsline@i#1#2#3{% + \expanded{\noexpand\in@{.#1;#2,}}{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% +} +\unless\ifdefined\expanded + \def\Etoc@hackedaddcontentsline#1{% + {\edef\Etoc@tmp{\noexpand\in@{.#1,}{\ifEtoc@lof.lof,\fi\ifEtoc@lot.lot,\fi}}\expandafter}% + \Etoc@tmp + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}% + } + \def\Etoc@hackedaddcontentsline@i#1#2#3{% + {\edef\Etoc@tmp{\noexpand\in@{.#1;#2,}}\expandafter}% + \Etoc@tmp{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% + } +\fi +\def\Etoc@@startlocallistof#1#2#3{% + \ifEtoc@localtoc + \ifnum #2=#3\relax + \global\let\etoclocaltop\Etoc@virtualtop + \global\Etoc@notactivefalse + \Etoc@@startlocaltochook + \csname etoclocallistof#1shook\endcsname + \ifEtoc@etocstyle + \csname etocetoclistof#1smaketitle\endcsname + \fi + \fi + \fi +} +\def\Etoc@@startlocallistof@setlevels#1{% + \ifnum\etoclocaltop<\z@ + \expandafter\let\csname Etoc@#1@@\endcsname\@ne + \else + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\the\numexpr\etoclocaltop+\@ne @@\endcsname + \fi + \def\Etoc@do##1{% + \ifnum\etoclevel{##1}>\etoclocaltop + \expandafter\let\csname Etoc@##1@@\endcsname\Etoc@maxlevel + \fi}% + \Etoc@dolevels +} +\def\etoclocallistoffigureshook{\etocstandardlines} +\def\etoclocallistoftableshook {\etocstandardlines} +\def\locallistfigurename{\listfigurename} +\def\locallisttablename {\listtablename} +\def\etocetoclistoffiguresmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallistfigurename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocalloftotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallistfigurename}% + }% + }% + {}% +}% +\def\etocetoclistoftablesmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallisttablename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocallottotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallisttablename}% + }% + }% + {}% +}% +\let\Etoc@listofreset\@empty +\ifEtoc@lof + \def\locallistoffigures{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lofext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{figure}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{figure}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoffigures{% + \PackageError{etoc}{% + \string\locallistoffigures \on@line\space but\MessageBreak + package was loaded without `lof' option}% + {Try again with \string\usepackage[lof]{etoc}}% + } +\fi +\ifEtoc@lot + \def\locallistoftables{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lotext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{table}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{table}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoftables{% + \PackageError{etoc}{% + \string\locallistoftable \on@line\space but\MessageBreak + package was loaded without `lot' option}% + {Try again with \string\usepackage[lot]{etoc}}% + } +\fi +\def\Etoc@checkifempty {% + \global\Etoc@isemptytoctrue + \global\Etoc@stoptocfalse + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \gdef\Etoc@stackofends{{-3}{}}% + \begingroup + \ifEtoc@localtoc + \def\etoc@startlocaltoc##1{% + \ifnum##1=\Etoc@tocid\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \global\Etoc@notactivefalse + \fi + }% + \let\contentsline\Etoc@testingcontentslinelocal + \else + \let\contentsline\Etoc@testingcontentsline + \fi + \Etoc@storetocdepth + \let\Etoc@setlocaltop@doendsandbegin\@empty + \the\Etoc@toctoks + \Etoc@restoretocdepth + \endgroup +} +\DeclareRobustCommand*\etocifwasempty + {\ifEtoc@isemptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi } +\expandafter\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname +\def\Etoc@testingcontentslinelocal #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@notactive + \else + \ifnum\Etoc@level>\etoclocaltop + \unless\ifnum\Etoc@level>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \else + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@testingcontentsline #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@localtableofcontents#1{% + \gdef\etoclocaltop{-\@m}% + \Etoc@localtoctrue + \global\Etoc@isemptytocfalse + \edef\Etoc@tocid{#1}% + \ifnum\Etoc@tocid<\@ne + \setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. \space Rerun LaTeX}}% + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\Etoc@gobtoetoc@ + \fi + \global\Etoc@notactivetrue + \ifEtoc@checksemptiness + \Etoc@checkifempty + \fi + \ifEtoc@isemptytoc + \ifEtoc@notactive + \setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. \space Rerun LaTeX}}% + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\expandafter\expandafter\Etoc@gobtoetoc@ + \fi + \else + \global\Etoc@stoptocfalse + \global\Etoc@notactivetrue + \edef\etoc@startlocaltoc##1% + {\noexpand\Etoc@@startlocaltoc{##1}{\Etoc@tocid}}% + \Etoc@tableofcontents + \fi + \@gobble\etoc@ + \endgroup\ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook +}% \Etoc@localtableofcontents +\def\Etoc@getref #1{% + \@ifundefined{r@#1} + {0} + {\expandafter\Etoc@getref@i\romannumeral-`0% + \expandafter\expandafter\expandafter + \@car\csname r@#1\endcsname0\@nil\@etoc + }% +} +\def\Etoc@getref@i#1#2\@etoc{\ifnum9<1\string#1 #1#2\else 0\fi} +\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} +\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@dothis #1#2\etoc@ {\fi #1} +\def\Etoc@t@bleofcontents{% + \gdef\etoclocaltop{-\@M}% + \ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi + \ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi + \ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi + \ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi + \global\Etoc@isemptytocfalse + \ifEtoc@checksemptiness\Etoc@checkifempty\fi + \ifEtoc@isemptytoc + \ifEtoc@notocifnotoc + \expandafter\expandafter\expandafter\@gobble + \fi + \fi + \Etoc@tableofcontents + \endgroup + \ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook + \@gobble\etoc@ + }% \Etoc@t@bleofcontents +\def\Etoc@table@fcontents{% + \refstepcounter{etoc@tocid}% + \Etoc@tocwithidfalse + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\Etoc@localtable@fcontents{% + \refstepcounter{etoc@tocid}% + \addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}% + \Etoc@tocwithidtrue + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\etoctableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@table@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@table@fcontents}% +}% \etoctableofcontents +\def\etocifisstarred{\ifx\Etoc@aftertitlehook\@empty + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo + \fi} +\let\etocoriginaltableofcontents\tableofcontents +\let\tableofcontents\etoctableofcontents +\let\Etoc@listofhook\@empty +\newcommand*\localtableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \Etoc@listofhook + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@localtable@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@localtable@fcontents}% +}% \localtableofcontents +\newcommand*\localtableofcontentswithrelativedepth[1]{% + \def\Etoc@@startlocaltochook{% + \global\c@tocdepth\numexpr\etoclocaltop+#1\relax + }% + \def\Etoc@listofreset{\let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty}% + \localtableofcontents +}% \localtableofcontentswithrelativedepth +\newcommand\etocsettocstyle[2]{% + \Etoc@etocstylefalse + \Etoc@classstylefalse + \def\Etoc@tableofcontents@user@before{#1}% + \def\Etoc@tableofcontents@user@after {#2}% +}% +\def\etocstoretocstyleinto#1{% +%% \@ifdefinable#1{% + \edef#1{\noexpand\Etoc@etocstylefalse\noexpand\Etoc@classstylefalse + \def\noexpand\Etoc@tableofcontents@user@before{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@before}% + }% + \def\noexpand\Etoc@tableofcontents@user@after{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@after}% + }% + }% +%% }% +}% +\def\Etoc@tableofcontents {% + \Etoc@tableofcontents@etoc@before + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@before + \Etoc@tableofcontents@contents + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@after + \Etoc@tableofcontents@etoc@after + \@gobble\etoc@ +} +\def\Etoc@tableofcontents@etoc@before{% + \ifnum\c@tocdepth>\Etoc@minf + \else + \expandafter\Etoc@gobtoetoc@ + \fi + \Etoc@par + \Etoc@beforetitlehook + \etocbeforetitlehook + \Etoc@storetocdepth + \let\Etoc@savedcontentsline\contentsline + \let\contentsline\Etoc@etoccontentsline + \ifEtoc@standardlines + \else + \def\Etoc@do##1{% + \expandafter\def\csname etocsaved##1tocline\endcsname + {\PackageError{etoc}{% + \expandafter\string\csname etocsaved##1tocline\endcsname\space + has been deprecated\MessageBreak + at 1.1a and is removed at 1.2.\MessageBreak + Use \expandafter\string\csname l@##1\endcsname\space directly.\MessageBreak + Reported \on@line}% + {I will use \expandafter\string + \csname l@##1\endcsname\space myself for this time.% + }% + \csname l@##1\endcsname + }% + }% + \Etoc@dolevels + \fi +}% +\def\Etoc@tableofcontents@contents{% + \Etoc@tocdepthset + \ifEtoc@parskip\parskip\z@skip\fi + \Etoc@aftertitlehook + \gdef\etoclocaltop{-\thr@@}% + \Etoc@toctoc + \etocaftercontentshook +}% +\def\Etoc@tableofcontents@etoc@after{% + \@nobreakfalse + \Etoc@restoretocdepth + \ifx\Etoc@global\global + \@ifundefined{tof@finish} + {} + {\ifx\tof@finish\@empty + \else + \global\let\contentsline\Etoc@savedcontentsline + \fi + }% + \fi +} +\def\etocsetstyle#1{\ifcsname Etoc@#1@@\endcsname + \expandafter\Etoc@setstyle@a + \else + \expandafter\Etoc@setstyle@error + \fi {#1}% +} +\def\Etoc@setstyle@error #1{% + \PackageWarning{etoc}{`#1' is unknown to etoc. \space Did you\MessageBreak + forget some \string\etocsetlevel{#1}{}?\MessageBreak + Reported}% + \@gobblefour +} +\def\Etoc@setstyle@a #1{% + \edef\Etoc@tmp{\the\numexpr\csname Etoc@#1@@\endcsname}% + \if1\unless\ifnum\Etoc@tmp<\Etoc@maxlevel 0\fi + \unless\ifnum\Etoc@tmp>\Etoc@minf 0\fi1% + \Etoc@standardlinesfalse + \expandafter\Etoc@setstyle@b\expandafter\Etoc@tmp + \else + \ifnum\Etoc@tmp=\Etoc@maxlevel + \in@{.#1,}{.figure,.table,}% + \ifin@ + \PackageWarning{etoc} + {You can not use \string\etocsetstyle\space with `#1'.\MessageBreak + Check the package documentation (in particular about\MessageBreak + \string\etoclocallistoffigureshook/\string\etoclocallistoftableshook)% + \MessageBreak on how to customize + figure and table entries in local\MessageBreak lists. Reported}% + \else + \PackageInfo{etoc} + {Attempt to set the style of `#1',\MessageBreak + whose level is currently the maximal one \etocthemaxlevel,\MessageBreak + which is never displayed. \space This will be ignored\MessageBreak + but note that we do quit compatibility mode.\MessageBreak + Reported}% + \Etoc@standardlinesfalse + \fi + \else + \PackageWarning{etoc}{This should not happen. Reported}% + \fi + \expandafter\@gobblefour + \fi +} +\long\def\Etoc@setstyle@b#1#2#3#4#5{% + \expandafter\def\csname Etoc@begin@#1\endcsname {#2}% + \expandafter\def\csname Etoc@prefix@#1\endcsname {#3}% + \expandafter\def\csname Etoc@contents@#1\endcsname {#4}% + \expandafter\def\csname Etoc@end@#1\endcsname {#5}% +} +\def\Etoc@setstyle@e#1{% + \expandafter\let\csname Etoc@begin@#1\endcsname \@empty + \expandafter\let\csname Etoc@prefix@#1\endcsname \@empty + \expandafter\let\csname Etoc@contents@#1\endcsname \@empty + \expandafter\let\csname Etoc@end@#1\endcsname \@empty +} +\def\Etoc@storelines@a#1{% + \noexpand\Etoc@setstyle@b{#1}% + {\expandafter\Etoc@expandonce\csname Etoc@begin@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@prefix@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@contents@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@end@#1\endcsname}% +} +\def\Etoc@expandonce#1{\unexpanded\expandafter{#1}} +\def\etocstorelinestylesinto#1{% + \edef#1{\Etoc@storelines@a{-2}\Etoc@storelines@a{-1}\Etoc@storelines@a{0}% + \Etoc@storelines@a {1}\Etoc@storelines@a {2}\Etoc@storelines@a{3}% + \Etoc@storelines@a {4}\Etoc@storelines@a {5}% + \ifEtoc@deeplevels + \Etoc@storelines@a{6}\Etoc@storelines@a{7}\Etoc@storelines@a{8}% + \Etoc@storelines@a{9}\Etoc@storelines@a{10}\Etoc@storelines@a{11}% + \fi + }% +} +\def\etocstorethislinestyleinto#1#2{% + \edef#2{\expandafter\Etoc@storelines@a\expandafter{\number\etoclevel{#1}}}% +}% +\def\etocfontminustwo {\normalfont \LARGE \bfseries} +\def\etocfontminusone {\normalfont \large \bfseries} +\def\etocfontzero {\normalfont \large \bfseries} +\def\etocfontone {\normalfont \normalsize \bfseries} +\def\etocfonttwo {\normalfont \normalsize} +\def\etocfontthree {\normalfont \footnotesize} +\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} +\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} +\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} +\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} +\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} +\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} +\def\etocbaselinespreadminustwo {1} +\def\etocbaselinespreadminusone {1} +\def\etocbaselinespreadzero {1} +\def\etocbaselinespreadone {1} +\def\etocbaselinespreadtwo {1} +\def\etocbaselinespreadthree {.9} +\def\etocminustwoleftmargin {1.5em plus 0.5fil} +\def\etocminustworightmargin {1.5em plus -0.5fil} +\def\etocminusoneleftmargin {1em} +\def\etocminusonerightmargin {1em} +\def\etoctoclineleaders + {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} +\def\etocabbrevpagename {p.~} +\def\etocpartname {Part} +\def\etocbookname {Book} +\def\etocdefaultlines{% + \Etoc@standardlinesfalse + \etocdefaultlines@setbook + \etocdefaultlines@setpart + \etocdefaultlines@setchapter + \etocdefaultlines@setsection + \etocdefaultlines@setsubsection + \etocdefaultlines@setsubsubsection + \etocdefaultlines@setdeeperones +} +\def\etocnoprotrusion{\leavevmode\kern-\p@\kern\p@} +\@ifclassloaded{memoir}{% + \def\etocdefaultlines@setbook{% + \Etoc@setstyle@b + {-2}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminustwo + \addvspace{\etocsepminustwo}% + \parindent \z@ + \leftskip \etocminustwoleftmargin + \rightskip \etocminustworightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepminusone}% + \endgroup} + {}% + } + }{\let\etocdefaultlines@setbook\@empty} +\def\etocdefaultlines@setpart{% +\Etoc@setstyle@b + {-1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminusone + \addvspace{\etocsepminusone}% + \parindent \z@ + \leftskip \etocminusoneleftmargin + \rightskip \etocminusonerightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminusone\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepzero}% + \endgroup} + {}% +} +\def\etocdefaultlines@setchapter{% +\Etoc@setstyle@b + {0}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontzero + \addvspace{\etocsepzero}% + \parindent \z@ \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname + \baselineskip\etocbaselinespreadzero\baselineskip + \par}% + \endgroup} + {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% +} +\def\etocdefaultlines@setsection{% +\Etoc@setstyle@b + {1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontone + \addvspace{\etocsepone}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par + \setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@\ }}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% +} +\def\etocdefaultlines@setsubsection{% +\Etoc@setstyle@b + {2}% + {\addpenalty\@medpenalty\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfonttwo + \addvspace{\etocseptwo}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par\setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@}}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepone}}% +} +\def\etocdefaultlines@setsubsubsection{% +\Etoc@setstyle@b + {3}% + {\addpenalty\@M + \etocfontthree + \vspace{\etocsepthree}% + \noindent + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname} + {.\hfil + \begingroup + \baselineskip\etocbaselinespreadthree\baselineskip + \par + \endgroup + \addpenalty{-\@highpenalty}} +} +\def\etocdefaultlines@setdeeperones{% +\Etoc@setstyle@e{4}% +\Etoc@setstyle@e{5}% +\ifEtoc@deeplevels + \Etoc@setstyle@e{6}% + \Etoc@setstyle@e{7}% + \Etoc@setstyle@e{8}% + \Etoc@setstyle@e{9}% + \Etoc@setstyle@e{10}% + \Etoc@setstyle@e{11}% +\fi +} +\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etoccolumnsep{2em} +\def\etocmulticolsep{0ex} +\def\etocmulticolpretolerance{-1} +\def\etocmulticoltolerance{200} +\def\etocdefaultnbcol{2} +\def\etocinnertopsep{2ex} +\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\let\etocoldpar\par + \addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} + {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip + \@@par\endgroup + \fi + \nobreak\addvspace{\etocinnertopsep}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}% + }% + {\ifnum #1>\@ne + \expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}% +} +\def\etocinnerbottomsep{3.5ex} +\def\etocinnerleftsep{2em} +\def\etocinnerrightsep{2em} +\def\etoctoprule{\hrule} +\def\etocleftrule{\vrule} +\def\etocrightrule{\vrule} +\def\etocbottomrule{\hrule} +\def\etoctoprulecolorcmd{\relax} +\def\etocbottomrulecolorcmd{\relax} +\def\etocleftrulecolorcmd{\relax} +\def\etocrightrulecolorcmd{\relax} +\def\etoc@ruledheading #1{% + \hb@xt@\linewidth{\color@begingroup + \hss #1\hss\hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \phantom{#1}% + \leaders\etoctoprule\hss\color@endgroup}% + \nointerlineskip\nobreak\vskip\etocinnertopsep} +\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[\etoc@ruledheading{#2}]} + {\etoc@ruledheading{#2}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +\def\etocframedmphook{\relax} +\long\def\etocbkgcolorcmd{\relax} +\long\def\Etoc@relax{\relax} +\newbox\etoc@framed@titlebox +\newbox\etoc@framed@contentsbox +\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle{% + \addvspace{\etocabovetocskip}% + \sbox\z@{#2}% + \dimen\z@\dp\z@ + \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi + \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup + \hss + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \sbox\tw@{\color{white}% + \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% + \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi + \box\tw@ + \hskip-\wd\z@ + \fi + \copy\z@ + \hss + \hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \hskip\wd\z@ + \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% + \setbox\z@\hbox{\etocleftrule\etocrightrule}% + \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ + \advance\dimen\tw@-\etocinnerleftsep + \advance\dimen\tw@-\etocinnerrightsep + \setbox\etoc@framed@contentsbox=\vbox\bgroup + \hsize\dimen\tw@ + \kern\dimen\z@ + \vskip\etocinnertopsep + \hbox\bgroup + \begin{minipage}{\hsize}% + \etocframedmphook + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}} + {\pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}\unskip }% + \end{minipage}% + \egroup + \vskip\etocinnerbottomsep + \egroup + \vbox{\hsize\linewidth + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \kern\ht\etoc@framed@titlebox + \kern\dp\etoc@framed@titlebox + \hb@xt@\linewidth{\color@begingroup + \etocleftrulecolorcmd\etocleftrule + \etocbkgcolorcmd + \leaders\vrule + \@height\ht\etoc@framed@contentsbox + \@depth\dp\etoc@framed@contentsbox + \hss + \etocrightrulecolorcmd\etocrightrule + \color@endgroup}\nointerlineskip + \vskip-\dp\etoc@framed@contentsbox + \vskip-\ht\etoc@framed@contentsbox + \vskip-\dp\etoc@framed@titlebox + \vskip-\ht\etoc@framed@titlebox + \fi + \box\etoc@framed@titlebox\nointerlineskip + \hb@xt@\linewidth{\color@begingroup + {\etocleftrulecolorcmd\etocleftrule}% + \hss\box\etoc@framed@contentsbox\hss + \etocrightrulecolorcmd\etocrightrule\color@endgroup} + \nointerlineskip + \vskip\ht\etoc@framed@contentsbox + \vskip\dp\etoc@framed@contentsbox + \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd + \leaders\etocbottomrule\hss\color@endgroup}} + \addvspace{\etocbelowtocskip}}} +\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents} +\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents*} +\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents} +\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents*} +\def\etocmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@multicoltoci} + {\etoc@multicoltoc}} +\def\etocruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@ruledtoci} + {\etoc@ruledtoc}} +\def\etocframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@framedtoci} + {\etoc@framedtoc}} +\def\etoclocalmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@multicoltoci} + {\etoc@local@multicoltoc}} +\def\etoclocalruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@ruledtoci} + {\etoc@local@ruledtoc}} +\def\etoclocalframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@framedtoci} + {\etoc@local@framedtoc}} +\def\etocmemoirtoctotocfmt #1#2{% + \PackageWarning{etoc} + {\string\etocmemoirtoctotocfmt\space is deprecated.\MessageBreak + Use in its place \string\etocsettoclineforclasstoc,\MessageBreak + and \string\etocsettoclineforclasslistof{toc} (or {lof}, {lot}). + I will do this now.\MessageBreak + Reported}% + \etocsettoclineforclasstoc{#1}{#2}% + \etocsettoclineforclasslistof{toc}{#1}{#2}% +} +\def\etocsettoclineforclasstoc #1#2{% + \def\etocclassmaintocaddtotoc{\etocglobalheadtotoc{#1}{#2}}% +} +\def\etocsettoclineforclasslistof #1#2#3{% + \@namedef{etocclasslocal#1addtotoc}{\etoclocalheadtotoc{#2}{#3}}% +} +\let\etocclasslocaltocaddtotoc\@empty +\let\etocclasslocallofaddtotoc\@empty +\let\etocclasslocallotaddtotoc\@empty +\ifdefined\c@chapter + \def\etocclasslocaltocmaketitle{\section*{\localcontentsname}} + \def\etocclasslocallofmaketitle{\section*{\locallistfigurename}} + \def\etocclasslocallotmaketitle{\section*{\locallisttablename}} + \etocsettoclineforclasstoc {chapter}{\contentsname} + \etocsettoclineforclasslistof{toc}{section}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{section}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{section}{\locallisttablename} +\else + \def\etocclasslocaltocmaketitle{\subsection*{\localcontentsname}}% + \def\etocclasslocallofmaketitle{\subsection*{\locallistfigurename}}% + \def\etocclasslocallotmaketitle{\subsection*{\locallisttablename}}% + \etocsettoclineforclasstoc {section}{\contentsname} + \etocsettoclineforclasslistof{toc}{subsection}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{subsection}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{subsection}{\locallisttablename} +\fi +\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {} + {\csname ifEtoc@local#1totoc\endcsname + \csname etocclasslocal#1addtotoc\endcsname + \fi + }% +} +\def\etocarticlestyle{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocarticlestylenomarks{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocbookstyle{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\def\etocbookstylenomarks{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\let\etocreportstyle\etocbookstyle +\let\etocreportstylenomarks\etocbookstylenomarks +\def\etocmemoirstyle{% + \etocsettocstyle + {\ensureonecol \par \begingroup \phantomsection + \ifx\Etoc@aftertitlehook\@empty + \else + \ifmem@em@starred@listof + \else + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \ifEtoc@maintoctotoc + \etocclassmaintocaddtotoc + \fi + \fi + \fi + \fi + \ifEtoc@localtoc + \@namedef{@\Etoc@currext maketitle}{% + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + }% + \fi + \@nameuse {@\Etoc@currext maketitle} %<< space token here from memoir code + \ifx\Etoc@aftertitlehook\@empty + \else + \Etoc@aftertitlehook \let \Etoc@aftertitlehook \relax + \fi + \parskip \cftparskip \@nameuse {cft\Etoc@currext beforelisthook}% + }% + {\@nameuse {cft\Etoc@currext afterlisthook}% + \endgroup\restorefromonecol + }% +} +\let\Etoc@beforetitlehook\@empty +\if1\@ifclassloaded{scrartcl}0{\@ifclassloaded{scrbook}0{\@ifclassloaded{scrreprt}01}}% +\expandafter\@gobble +\else + \ifdefined\setuptoc + \def\Etoc@beforetitlehook{% + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \setuptoc{\Etoc@currext}{leveldown}% + \else + \etocifisstarred{}{\etocifmaintoctotoc{\setuptoc{toc}{totoc}}}% + \fi + }% + \fi +\expandafter\@firstofone +\fi +{\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \setuptoc{\Etoc@currext}{totoc}% + \fi + }% + }% +} +\ifdefined\Iftocfeature + \def\etoc@Iftocfeature{\Iftocfeature}% +\else + \def\etoc@Iftocfeature{\iftocfeature}% +\fi +\def\etocscrartclstyle{% + \etocsettocstyle + {\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstofone + \else + \expandafter\@gobble + \fi + {\let\if@dynlist\if@tocleft}% + \edef\@currext{\Etoc@currext}% + \@ifundefined{listof\@currext name}% + {\def\list@fname{\listofname~\@currext}}% + {\expandafter\let\expandafter\list@fname + \csname listof\@currext name\endcsname}% + \etoc@Iftocfeature {\@currext}{onecolumn} + {\etoc@Iftocfeature {\@currext}{leveldown} + {} + {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} + {}% + \etoc@Iftocfeature {\@currext}{numberline}% + {\def \nonumberline {\numberline {}}}{}% + \expandafter\tocbasic@listhead\expandafter {\list@fname}% + \begingroup \expandafter \expandafter \expandafter + \endgroup \expandafter + \ifx + \csname microtypesetup\endcsname \relax + \else + \etoc@Iftocfeature {\@currext}{noprotrusion}{} + {\microtypesetup {protrusion=false}% + \PackageInfo {tocbasic}% + {character protrusion at \@currext\space deactivated}}% + \fi + \etoc@Iftocfeature{\@currext}{noparskipfake}{}{% + \ifvmode \@tempskipa\lastskip \vskip-\lastskip + \addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\fi + }% + \setlength {\parskip }{\z@ }% + \setlength {\parindent }{\z@ }% + \setlength {\parfillskip }{\z@ \@plus 1fil}% + \csname tocbasic@@before@hook\endcsname + \csname tb@\@currext @before@hook\endcsname + }% end of before_toc + {% start of after_toc + \providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file + \edef\@currext{\Etoc@currext}% + \csname tb@\@currext @after@hook\endcsname + \csname tocbasic@@after@hook\endcsname + }% end of after_toc +} +\let\etocscrbookstyle\etocscrartclstyle +\let\etocscrreprtstyle\etocscrartclstyle +\def\etocclasstocstyle{\etocarticlestyle} +\newcommand*\etocmarkboth[1]{% + \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} +\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} +\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3}}} +\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} +\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} +\def\Etoc@redefetocstylesforchapters{% + \renewcommand\etoctocstylewithmarks[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkboth{##4}}}% + } + \renewcommand\etoctocstylewithmarksnouc[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}% + } + \renewcommand\etoctocstyle[3][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}} + } +} +\@ifclassloaded{scrartcl} + {\renewcommand*\etocclasstocstyle{\etocscrartclstyle}}{} +\@ifclassloaded{book} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{report} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocreportstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrbook} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrreprt} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrreprtstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{memoir} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocmemoirstyle} + \Etoc@redefetocstylesforchapters}{} +\def\etoctocloftstyle {% + \etocsettocstyle{% + \@cfttocstart + \par + \begingroup + \parindent\z@ \parskip\cftparskip + \@nameuse{@cftmake\Etoc@currext title}% + \ifEtoc@localtoc + \etoctocloftlocalperhapsaddtotoc\Etoc@currext + \else + \etocifisstarred {}{\ifEtoc@maintoctotoc\@cftdobibtoc\fi}% + \fi + }% + {% + \endgroup + \@cfttocfinish + }% +} +\def\etoctocloftlocalperhapsaddtotoc#1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \ifdefined\c@chapter\def\@tocextra{@section}\else\def\@tocextra{@subsection}\fi + \csname @cftdobib#1\endcsname + \fi + }% +} +\def\etoctocbibindstyle {% + \etocsettocstyle {% + \toc@start + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \etoc@tocbibind@dotoctitle + \fi + }% + {\toc@finish}% +} +\def\etoc@tocbibind@dotoctitle {% + \if@bibchapter + \etocifisstarred + {\chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + }% + {\ifEtoc@maintoctotoc + \toc@chapter{\contentsname} %<-space from original + \else + \chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + \fi + }% + \else + \etocifisstarred + {\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} %<-space + } + {\ifEtoc@maintoctotoc + \toc@section{\@tocextra}{\contentsname} %<-space from original + \else + \@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} % id. + \fi + }% + \fi +}% +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \ifEtoc@keeporiginaltoc + \else + \AtBeginDocument{\let\tableofcontents\etoctableofcontents}% + \fi + \fi } + {\AtBeginDocument + {\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \PackageWarningNoLine {etoc} + {Package `tocloft' was loaded after `etoc'.\MessageBreak + To prevent it from overwriting \protect\tableofcontents, it will\MessageBreak + be tricked into believing to have been loaded with its\MessageBreak + option `titles'. \space But this will cause the `tocloft'\MessageBreak + customization of the titles of the main list of figures\MessageBreak + and list of tables to not apply either.\MessageBreak + You should load `tocloft' before `etoc'.}% + \AtEndDocument{\PackageWarning{etoc} + {Please load `tocloft' before `etoc'!\@gobbletwo}}% + \fi + \@cftnctoctrue }% + {}% + }% + }% +} +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \AtBeginDocument{% + \@ifpackageloaded{tocloft} + {% + \def\etocclasstocstyle{% + \etoctocloftstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + }% + {% no tocloft + \@ifpackageloaded {tocbibind} + {\if@dotoctoc + \def\etocclasstocstyle{% + \etoctocbibindstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + }% + {}% + }% + \@ifpackageloaded{tocbibind} + {% tocbibind, perhaps with tocloft + \if@dotoctoc + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + \etocsetup{maintoctotoc,localtoctotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) the options `maintoctotoc' and\MessageBreak + `localtoctotoc' to true as tocbibind was detected and\MessageBreak + found to be configured for `TOC to toc'.\MessageBreak + Reported at begin document}% + \fi + \if@dotoclof + \ifEtoc@lof + \etocsetup{localloftotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `localloftotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOF to toc'. Reported at begin document}% + \fi + \fi + \if@dotoclot + \ifEtoc@lot + \etocsetup{locallottotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `locallottotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOT to toc'. Reported at begin document}% + \fi + \fi + }% end of tocbibind branch + {}% + }% end of at begin document +}% end of not with memoir branch +\def\Etoc@addtocontents #1#2{% + \addtocontents {toc}{% + \protect\contentsline{#1}{#2}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% +} +\def\Etoc@addcontentsline@ #1#2#3{% + \@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}% +} +\DeclareRobustCommand*{\etoctoccontentsline} + {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} +\def\Etoc@addtocontents@immediately#1#2{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addtocontents{#1}{#2}% + \endgroup +} +\def\Etoc@addcontentsline@@immediately#1#2#3{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addcontentsline@{#1}{#2}{#3}% + \endgoroup +} +\DeclareRobustCommand*{\etocimmediatetoccontentsline} + {\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}} +\def\Etoc@storetocdepth {\xdef\Etoc@savedtocdepth{\number\c@tocdepth}} +\def\Etoc@restoretocdepth {\global\c@tocdepth\Etoc@savedtocdepth\relax} +\def\etocobeytoctocdepth {\def\etoc@settocdepth + {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} +\def\Etoc@@nottoodeep {\ifnum\Etoc@savedtocdepth<\c@tocdepth + \global\c@tocdepth\Etoc@savedtocdepth\relax\fi } +\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } +\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } +\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup + \expandafter\Etoc@set@tocdepth@ + \else\expandafter\Etoc@set@toctocdepth + \fi } +\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} + {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% +} +\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } +\def\Etoc@set@toctocdepth@ #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% +} +\def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately} +\def\Etoc@set@toctocdepth@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +} +\def\etocdepthtag #1#{\Etoc@depthtag } +\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +\def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately } +\def\Etoc@depthtag@immediately #1{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc}{\protect\etoc@depthtag {#1}}% + \endgroup +} +\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } +\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } +\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% + {}% ignore in silence if tag has no associated depth + {\afterassignment\Etoc@@nottoodeep + \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% +} +\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% + {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% +} +\def\Etoc@tocvsec@err #1{\PackageError {etoc} + {The command \protect#1\space is incompatible with `etoc'} + {Use \protect\etocsettocdepth.toc as replacement}% +}% +\AtBeginDocument {% + \@ifclassloaded{memoir} + {\PackageInfo {etoc} + {Regarding `memoir' class command \protect\settocdepth, consider\MessageBreak + \protect\etocsettocdepth.toc as a drop-in replacement with more\MessageBreak + capabilities (see `etoc' manual). \space + Also, \protect\etocsettocdepth\MessageBreak + and \protect\etocsetnexttocdepth\space should be used in place of\MessageBreak + `memoir' command \protect\maxtocdepth\@gobble}% + }% + {\@ifpackageloaded {tocvsec2}{% + \def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% + \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% + \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% + {\Etoc@tocvsec@err \resettocdepth }% + }% + \def\save@tocdepth #1#2#3{}% + \let\reset@tocdepth\relax + \let\remax@tocdepth\relax + \let\tableofcontents\etoctableofcontents + \PackageWarningNoLine {etoc} + {Package `tocvsec2' detected and its modification of\MessageBreak + \protect\tableofcontents\space reverted. \space Use + \protect\etocsettocdepth.toc\MessageBreak as a replacement + for `tocvsec2' toc-related commands}% + }% tocvsec2 loaded + {}% tocvsec2 not loaded + }% +}% +\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% +\def\invisiblelocaltableofcontents + {\etocsetnexttocdepth {-3}\localtableofcontents }% +\def\etocsetnexttocdepth #1{% + \@ifundefined{Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} + {\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}% +}% +\def\Etoc@setnexttocdepth#1{% + \def\Etoc@tocdepthset{% + \Etoc@tocdepthreset + \edef\Etoc@tocdepthreset {% + \global\c@tocdepth\the\c@tocdepth\space + \global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty + }% + \global\c@tocdepth#1% + \global\let\Etoc@tocdepthset\@empty + }% +}% +\let\Etoc@tocdepthreset\@empty +\let\Etoc@tocdepthset \@empty +\def\etocsetlocaltop #1#{\Etoc@set@localtop}% +\def\Etoc@set@localtop #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}% +}% +\def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}% +\def\Etoc@set@localtop@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +}% +\def\etoc@setlocaltop #1{% + \ifnum#1=\Etoc@maxlevel + \Etoc@skipthisonetrue + \else + \Etoc@skipthisonefalse + \global\let\Etoc@level #1% + \global\let\Etoc@virtualtop #1% + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \fi + \let\Etoc@next\@empty + \ifEtoc@skipthisone + \else + \ifnum\Etoc@level>\c@tocdepth + \else + \ifEtoc@standardlines + \else + \let\Etoc@next\Etoc@setlocaltop@doendsandbegin + \fi + \fi + \fi + \Etoc@next +}% +\def\Etoc@setlocaltop@doendsandbegin{% + \Etoc@doendsandbegin + \global\Etoc@skipprefixfalse +} +\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% + {\let\protect\etoc@startlocaltoc\protect\@gobble + \let\protect\etoc@settocdepth\protect\@gobble + \let\protect\etoc@depthtag\protect\@gobble + \let\protect\etoc@setlocaltop\protect\@gobble}{}}% +\def\etocstandardlines {\Etoc@standardlinestrue} +\def\etoctoclines {\Etoc@standardlinesfalse} +\etocdefaultlines +\etocstandardlines +\def\etocstandarddisplaystyle{% + \PackageWarningNoLine{etoc}{% + \string\etocstandarddisplaystyle \on@line\MessageBreak + is deprecated. \space Please use \string\etocclasstocstyle}% +} +\expandafter\def\expandafter\etocclasstocstyle\expandafter{% + \etocclasstocstyle + \Etoc@classstyletrue +} +\def\etocetoclocaltocstyle{\Etoc@etocstyletrue} +\def\etocusertocstyle{\Etoc@etocstylefalse} +\etocclasstocstyle +\etocetoclocaltocstyle +\etocobeytoctocdepth +\etocobeydepthtags +\let\etocbeforetitlehook \@empty +\let\etocaftertitlehook \@empty +\let\etocaftercontentshook \@empty +\let\etocaftertochook \@empty +\def\etockeeporiginaltableofcontents + {\Etoc@keeporiginaltoctrue\let\tableofcontents\etocoriginaltableofcontents}% +\endinput +%% +%% End of file `etoc.sty'. diff --git a/docs/doxygen/latex/files.tex b/docs/doxygen/latex/files.tex new file mode 100644 index 0000000..6a30e39 --- /dev/null +++ b/docs/doxygen/latex/files.tex @@ -0,0 +1,10 @@ +\doxysection{File List} +Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{server/\mbox{\hyperlink{databasesingleton_8cpp}{databasesingleton.\+cpp}} }{\pageref{databasesingleton_8cpp}}{} +\item\contentsline{section}{server/\mbox{\hyperlink{databasesingleton_8h}{databasesingleton.\+h}} }{\pageref{databasesingleton_8h}}{} +\item\contentsline{section}{server/\mbox{\hyperlink{func2serv_8cpp}{func2serv.\+cpp}} }{\pageref{func2serv_8cpp}}{} +\item\contentsline{section}{server/\mbox{\hyperlink{func2serv_8h}{func2serv.\+h}} }{\pageref{func2serv_8h}}{} +\item\contentsline{section}{server/\mbox{\hyperlink{main_8cpp}{main.\+cpp}} }{\pageref{main_8cpp}}{} +\item\contentsline{section}{server/\mbox{\hyperlink{mytcpserver_8cpp}{mytcpserver.\+cpp}} }{\pageref{mytcpserver_8cpp}}{} +\item\contentsline{section}{server/\mbox{\hyperlink{mytcpserver_8h}{mytcpserver.\+h}} }{\pageref{mytcpserver_8h}}{} +\end{DoxyCompactList} diff --git a/docs/doxygen/latex/func2serv_8cpp.tex b/docs/doxygen/latex/func2serv_8cpp.tex new file mode 100644 index 0000000..8de7c75 --- /dev/null +++ b/docs/doxygen/latex/func2serv_8cpp.tex @@ -0,0 +1,549 @@ +\doxysection{server/func2serv.cpp File Reference} +\hypertarget{func2serv_8cpp}{}\label{func2serv_8cpp}\index{server/func2serv.cpp@{server/func2serv.cpp}} +{\ttfamily \#include "{}func2serv.\+h"{}}\newline +{\ttfamily \#include $<$QString$>$}\newline +{\ttfamily \#include $<$QString\+List$>$}\newline +{\ttfamily \#include $<$QMap$>$}\newline +{\ttfamily \#include $<$QDebug$>$}\newline +{\ttfamily \#include $<$databasesingleton.\+h$>$}\newline +{\ttfamily \#include $<$QJson\+Array$>$}\newline +{\ttfamily \#include $<$QJson\+Object$>$}\newline +{\ttfamily \#include $<$QJson\+Document$>$}\newline +Include dependency graph for func2serv.\+cpp\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{func2serv_8cpp__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a99bd96103155e73697cc47518a5559a4}{parsing}} (QString input, int socdes) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a173db167f59671d56b49f5d7d11ef531}{auth}} (QString\+List log) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_ac87f1fa2fd8c6ee1a48c3a56a99b3275}{reg}} (QString\+List params) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a27ffe3af29c8442de4aa94a5e48d2345}{add\+\_\+product}} (QString\+List params) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a0a88fbccc63c8cc890ded3a20fb71e72}{get\+\_\+stat}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a6d4386c36a7ed61c61cf3d1bad354f27}{check\+\_\+task}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_aa70831eddff4b8ed7a04647778a35747}{menu\+\_\+export}} () +\item +void \mbox{\hyperlink{func2serv_8cpp_af1b6a57c9eed96cee280cce58342bed5}{fetch\+\_\+products\+\_\+from\+\_\+db}} (const QString \&user\+Id, QString\+List \&products) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a73b3ae758a8cf3621318d27cd1a17722}{get\+\_\+products}} (QString user\+Id) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_ab8bda875989629df9b683e881296b32d}{get\+\_\+all\+\_\+users}} () +\item +int \mbox{\hyperlink{func2serv_8cpp_a8ebcc70a2024aab70883f094fc35849e}{get\+\_\+user\+\_\+count}} () +\item +int \mbox{\hyperlink{func2serv_8cpp_a4ddd067c5a29f76aead93c977a05113a}{get\+\_\+product\+\_\+count}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a2d521723770cde0e28bb41544394917b}{get\+\_\+stable\+\_\+stat}} () +\item +int \mbox{\hyperlink{func2serv_8cpp_a4d269e13002c5cded37bee9ade854d93}{get\+\_\+weekly\+\_\+logins}} () +\item +int \mbox{\hyperlink{func2serv_8cpp_a2d6f70d14e474616a4a16a72485c2f0e}{get\+\_\+monthly\+\_\+logins}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a8a2ae0ff8263d70f4e0f30d6b0d89af7}{get\+\_\+dynamic\+\_\+stat}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8cpp_a6496e445a644cca89c6252f6e7adecb0}{add\+\_\+favorite\+\_\+ration}} (const QString\+List \&container) +\item +bool \mbox{\hyperlink{func2serv_8cpp_a064e99d59eaa1d8cccef20b3192df015}{add\+\_\+ration\+\_\+to\+\_\+favorites}} (const QString \&user\+Id, const QString \&ration\+Id) +\end{DoxyCompactItemize} +\doxysubsubsection*{Variables} +\begin{DoxyCompactItemize} +\item +QMap$<$ QString, QList$<$ QString $>$ $>$ \mbox{\hyperlink{func2serv_8cpp_aa13aef29ff8f58936aa8f2bd99f70253}{mock\+Database}} +\end{DoxyCompactItemize} + + +\doxysubsection{Function Documentation} +\Hypertarget{func2serv_8cpp_a6496e445a644cca89c6252f6e7adecb0}\index{func2serv.cpp@{func2serv.cpp}!add\_favorite\_ration@{add\_favorite\_ration}} +\index{add\_favorite\_ration@{add\_favorite\_ration}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{add\_favorite\_ration()}{add\_favorite\_ration()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a6496e445a644cca89c6252f6e7adecb0} +QByte\+Array add\+\_\+favorite\+\_\+ration (\begin{DoxyParamCaption}\item[{const QString\+List \&}]{container}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00293\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00294\ \ \ \ \ QString\ userId\ =\ container[1];\ \textcolor{comment}{//\ ID\ пользователя}} +\DoxyCodeLine{00295\ \ \ \ \ QString\ rationId\ =\ container[2];\ \textcolor{comment}{//\ ID\ рациона}} +\DoxyCodeLine{00296\ } +\DoxyCodeLine{00297\ \ \ \ \ \textcolor{keywordtype}{bool}\ success\ =\ \mbox{\hyperlink{func2serv_8cpp_a064e99d59eaa1d8cccef20b3192df015}{add\_ration\_to\_favorites}}(userId,\ rationId);\ \textcolor{comment}{//\ Вызов\ функции-\/заглушки}} +\DoxyCodeLine{00298\ } +\DoxyCodeLine{00299\ \ \ \ \ \textcolor{keywordflow}{if}\ (success)\ \{} +\DoxyCodeLine{00300\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Ration\ successfully\ added\ to\ favorites\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00301\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{00302\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Error:\ failed\ to\ add\ ration\ to\ favorites\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00303\ \ \ \ \ \}} +\DoxyCodeLine{00304\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a27ffe3af29c8442de4aa94a5e48d2345}\index{func2serv.cpp@{func2serv.cpp}!add\_product@{add\_product}} +\index{add\_product@{add\_product}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{add\_product()}{add\_product()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a27ffe3af29c8442de4aa94a5e48d2345} +QByte\+Array add\+\_\+product (\begin{DoxyParamCaption}\item[{QString\+List}]{params}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00165\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00166\ \ \ \ \ \textcolor{keywordflow}{if}\ (params.size()\ !=\ 9)\ \{} +\DoxyCodeLine{00167\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}add\_product//failed//Неверные\ аргументы\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00168\ \ \ \ \ \}} +\DoxyCodeLine{00169\ } +\DoxyCodeLine{00170\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}\ *db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00171\ \ \ \ \ \textcolor{keywordtype}{int}\ userId\ =\ params[1].toInt();} +\DoxyCodeLine{00172\ \ \ \ \ QString\ name\ =\ params[2];} +\DoxyCodeLine{00173\ \textcolor{comment}{/*}} +\DoxyCodeLine{00174\ \textcolor{comment}{\ \ \ \ //\ Проверяем,\ существует\ ли\ уже\ такой\ продукт }} +\DoxyCodeLine{00175\ \textcolor{comment}{\ \ \ \ QSqlQuery\ checkQuery\ =\ db-\/>executeQuery( }} +\DoxyCodeLine{00176\ \textcolor{comment}{\ \ \ \ \ \ \ \ "{}SELECT\ id\ FROM\ products\ WHERE\ id\_user\ =\ :id\_user\ AND\ name\ =\ :name"{}, }} +\DoxyCodeLine{00177\ \textcolor{comment}{\ \ \ \ \ \ \ \ \{\{"{}:id\_user"{},\ userId\},\ \{"{}:name"{},\ name\}\} }} +\DoxyCodeLine{00178\ \textcolor{comment}{\ \ \ \ \ \ \ \ ); }} +\DoxyCodeLine{00179\ \textcolor{comment}{}} +\DoxyCodeLine{00180\ \textcolor{comment}{\ \ \ \ if\ (checkQuery.next())\ \{ }} +\DoxyCodeLine{00181\ \textcolor{comment}{\ \ \ \ \ \ \ \ return\ "{}add\_product//failed//Продукт\ уже\ существует\(\backslash\)r\(\backslash\)n"{}; }} +\DoxyCodeLine{00182\ \textcolor{comment}{\ \ \ \ \} }} +\DoxyCodeLine{00183\ \textcolor{comment}{*/}} +\DoxyCodeLine{00184\ \ \ \ \ \textcolor{comment}{//\ Добавляем\ продукт}} +\DoxyCodeLine{00185\ \ \ \ \ \textcolor{keywordtype}{bool}\ success\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a3fe2a5e1f41a408023066e8caf63b523}{addProduct}}(} +\DoxyCodeLine{00186\ \ \ \ \ \ \ \ \ userId,} +\DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ name,} +\DoxyCodeLine{00188\ \ \ \ \ \ \ \ \ params[3].toInt(),\ \textcolor{comment}{//\ proteins}} +\DoxyCodeLine{00189\ \ \ \ \ \ \ \ \ params[4].toInt(),\ \textcolor{comment}{//\ fatness}} +\DoxyCodeLine{00190\ \ \ \ \ \ \ \ \ params[5].toInt(),\ \textcolor{comment}{//\ carbs}} +\DoxyCodeLine{00191\ \ \ \ \ \ \ \ \ params[6].toInt(),\ \textcolor{comment}{//\ weight}} +\DoxyCodeLine{00192\ \ \ \ \ \ \ \ \ params[7].toInt(),\ \textcolor{comment}{//\ cost}} +\DoxyCodeLine{00193\ \ \ \ \ \ \ \ \ params[8].toInt()\ \ \textcolor{comment}{//\ type}} +\DoxyCodeLine{00194\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00195\ } +\DoxyCodeLine{00196\ \ \ \ \ \textcolor{keywordflow}{return}\ success\ ?\ \textcolor{stringliteral}{"{}add\_product//success\(\backslash\)r\(\backslash\)n"{}}\ :\ \textcolor{stringliteral}{"{}add\_product//failed//Ошибка\ БД\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00197\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a064e99d59eaa1d8cccef20b3192df015}\index{func2serv.cpp@{func2serv.cpp}!add\_ration\_to\_favorites@{add\_ration\_to\_favorites}} +\index{add\_ration\_to\_favorites@{add\_ration\_to\_favorites}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{add\_ration\_to\_favorites()}{add\_ration\_to\_favorites()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a064e99d59eaa1d8cccef20b3192df015} +bool add\+\_\+ration\+\_\+to\+\_\+favorites (\begin{DoxyParamCaption}\item[{const QString \&}]{user\+Id}{, }\item[{const QString \&}]{ration\+Id}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00305\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00306\ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Adding\ ration\ for\ user:"{}}\ <<\ userId\ <<\ \textcolor{stringliteral}{"{},\ ration\ ID:"{}}\ <<\ rationId;} +\DoxyCodeLine{00307\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{true};\ \textcolor{comment}{//\ Заглушка,\ потом\ заменить\ на\ SQL-\/запрос}} +\DoxyCodeLine{00308\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a173db167f59671d56b49f5d7d11ef531}\index{func2serv.cpp@{func2serv.cpp}!auth@{auth}} +\index{auth@{auth}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{auth()}{auth()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a173db167f59671d56b49f5d7d11ef531} +QByte\+Array auth (\begin{DoxyParamCaption}\item[{QString\+List}]{log}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00077\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00078\ \ \ \ \ \textcolor{comment}{//\ Проверяем\ количество\ параметров}} +\DoxyCodeLine{00079\ \ \ \ \ \textcolor{keywordflow}{if}\ (log.size()\ <\ 3)\ \{} +\DoxyCodeLine{00080\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}auth\_failed//Недостаточно\ параметров\ для\ авторизации\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00081\ \ \ \ \ \}} +\DoxyCodeLine{00082\ } +\DoxyCodeLine{00083\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00084\ \ \ \ \ \textcolor{keywordtype}{bool}\ authSuccess\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a51bd7dc4507c5f3d04a2903899e13d42}{checkUserCredentials}}(log[1],\ log[2]);} +\DoxyCodeLine{00085\ } +\DoxyCodeLine{00086\ \ \ \ \ \textcolor{keywordflow}{if}\ (!authSuccess)\ \{} +\DoxyCodeLine{00087\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}auth\_failed//Неверный\ логин\ или\ пароль\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00088\ \ \ \ \ \}} +\DoxyCodeLine{00089\ } +\DoxyCodeLine{00090\ } +\DoxyCodeLine{00091\ } +\DoxyCodeLine{00092\ \ \ \ \ QSqlQuery\ query\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00093\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}SELECT\ id,\ name,\ email,\ pass\ FROM\ users\ WHERE\ (email\ =\ :login\ OR\ name\ =\ :login)\ AND\ pass\ =\ :pass"{}},} +\DoxyCodeLine{00094\ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00095\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:login"{}},\ log[1]\},\ \textcolor{comment}{//\ логин}} +\DoxyCodeLine{00096\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:pass"{}},\ log[2]\}\ \ \ \textcolor{comment}{//\ пароль}} +\DoxyCodeLine{00097\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{00098\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00099\ } +\DoxyCodeLine{00100\ } +\DoxyCodeLine{00101\ \ \ \ \ \textcolor{keywordflow}{if}\ (!query.next())\ \{} +\DoxyCodeLine{00102\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}auth\_failed//Ошибка\ при\ получении\ данных\ пользователя\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00103\ \ \ \ \ \}} +\DoxyCodeLine{00104\ } +\DoxyCodeLine{00105\ \ \ \ \ QString\ userId\ =\ query.value(\textcolor{stringliteral}{"{}id"{}}).toString();} +\DoxyCodeLine{00106\ \ \ \ \ QString\ userLogin\ =\ query.value(\textcolor{stringliteral}{"{}name"{}}).toString();} +\DoxyCodeLine{00107\ \ \ \ \ QString\ userEmail\ =\ query.value(\textcolor{stringliteral}{"{}email"{}}).toString();} +\DoxyCodeLine{00108\ } +\DoxyCodeLine{00109\ \ \ \ \ QString\ response\ =\ QString(\textcolor{stringliteral}{"{}auth\_success//\%1//\%2//\%3\(\backslash\)r\(\backslash\)n"{}})} +\DoxyCodeLine{00110\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .arg(userId)} +\DoxyCodeLine{00111\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .arg(userLogin)} +\DoxyCodeLine{00112\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .arg(userEmail);} +\DoxyCodeLine{00113\ } +\DoxyCodeLine{00114\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00115\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a6d4386c36a7ed61c61cf3d1bad354f27}\index{func2serv.cpp@{func2serv.cpp}!check\_task@{check\_task}} +\index{check\_task@{check\_task}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{check\_task()}{check\_task()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a6d4386c36a7ed61c61cf3d1bad354f27} +QByte\+Array check\+\_\+task (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00203\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00204\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Task\ was\ succesful\ completed\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00205\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_af1b6a57c9eed96cee280cce58342bed5}\index{func2serv.cpp@{func2serv.cpp}!fetch\_products\_from\_db@{fetch\_products\_from\_db}} +\index{fetch\_products\_from\_db@{fetch\_products\_from\_db}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{fetch\_products\_from\_db()}{fetch\_products\_from\_db()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_af1b6a57c9eed96cee280cce58342bed5} +void fetch\+\_\+products\+\_\+from\+\_\+db (\begin{DoxyParamCaption}\item[{const QString \&}]{user\+Id}{, }\item[{QString\+List \&}]{products}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00210\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00211\ } +\DoxyCodeLine{00212\ \ \ \ \ \textcolor{keywordflow}{if}\ (\mbox{\hyperlink{func2serv_8cpp_aa13aef29ff8f58936aa8f2bd99f70253}{mockDatabase}}.contains(userId))\ \{} +\DoxyCodeLine{00213\ \ \ \ \ \ \ \ \ products\ =\ \mbox{\hyperlink{func2serv_8cpp_aa13aef29ff8f58936aa8f2bd99f70253}{mockDatabase}}[userId];} +\DoxyCodeLine{00214\ \ \ \ \ \}} +\DoxyCodeLine{00215\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_ab8bda875989629df9b683e881296b32d}\index{func2serv.cpp@{func2serv.cpp}!get\_all\_users@{get\_all\_users}} +\index{get\_all\_users@{get\_all\_users}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_all\_users()}{get\_all\_users()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_ab8bda875989629df9b683e881296b32d} +QByte\+Array get\+\_\+all\+\_\+users (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00235\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00236\ \ \ \ \ QStringList\ users;} +\DoxyCodeLine{00237\ } +\DoxyCodeLine{00238\ \ \ \ \ \textcolor{comment}{//\ fetch\_users\_from\_db(users);}} +\DoxyCodeLine{00239\ } +\DoxyCodeLine{00240\ \ \ \ \ QString\ response;} +\DoxyCodeLine{00241\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{const}\ QString\&\ user\ :\ users)\ \{} +\DoxyCodeLine{00242\ \ \ \ \ \ \ \ \ response\ +=\ user\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00243\ \ \ \ \ \}} +\DoxyCodeLine{00244\ } +\DoxyCodeLine{00245\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00246\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a8a2ae0ff8263d70f4e0f30d6b0d89af7}\index{func2serv.cpp@{func2serv.cpp}!get\_dynamic\_stat@{get\_dynamic\_stat}} +\index{get\_dynamic\_stat@{get\_dynamic\_stat}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_dynamic\_stat()}{get\_dynamic\_stat()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a8a2ae0ff8263d70f4e0f30d6b0d89af7} +QByte\+Array get\+\_\+dynamic\+\_\+stat (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00279\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00280\ \ \ \ \ \textcolor{keywordtype}{int}\ weeklyLogins\ =\ 0;} +\DoxyCodeLine{00281\ \ \ \ \ \textcolor{keywordtype}{int}\ monthlyLogins\ =\ 0;} +\DoxyCodeLine{00282\ } +\DoxyCodeLine{00283\ \ \ \ \ \textcolor{comment}{//\ Получаем\ данные\ из\ БД\ (пока\ заглушки)}} +\DoxyCodeLine{00284\ \ \ \ \ weeklyLogins\ =\ \mbox{\hyperlink{func2serv_8cpp_a4d269e13002c5cded37bee9ade854d93}{get\_weekly\_logins}}();} +\DoxyCodeLine{00285\ \ \ \ \ monthlyLogins\ =\ \mbox{\hyperlink{func2serv_8cpp_a2d6f70d14e474616a4a16a72485c2f0e}{get\_monthly\_logins}}();} +\DoxyCodeLine{00286\ } +\DoxyCodeLine{00287\ \ \ \ \ \textcolor{comment}{//\ Формируем\ строку\ ответа}} +\DoxyCodeLine{00288\ \ \ \ \ QString\ response\ =\ \textcolor{stringliteral}{"{}Logins\ per\ week:\ "{}}\ +\ QString::number(weeklyLogins)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}}\ +} +\DoxyCodeLine{00289\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Logins\ per\ month:\ "{}}\ +\ QString::number(monthlyLogins)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00290\ } +\DoxyCodeLine{00291\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00292\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a2d6f70d14e474616a4a16a72485c2f0e}\index{func2serv.cpp@{func2serv.cpp}!get\_monthly\_logins@{get\_monthly\_logins}} +\index{get\_monthly\_logins@{get\_monthly\_logins}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_monthly\_logins()}{get\_monthly\_logins()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a2d6f70d14e474616a4a16a72485c2f0e} +int get\+\_\+monthly\+\_\+logins (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00275\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00276\ \ \ \ \ \textcolor{comment}{//\ Заглушка,\ пока\ без\ БД}} +\DoxyCodeLine{00277\ \ \ \ \ \textcolor{keywordflow}{return}\ 312;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00278\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a4ddd067c5a29f76aead93c977a05113a}\index{func2serv.cpp@{func2serv.cpp}!get\_product\_count@{get\_product\_count}} +\index{get\_product\_count@{get\_product\_count}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_product\_count()}{get\_product\_count()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a4ddd067c5a29f76aead93c977a05113a} +int get\+\_\+product\+\_\+count (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00252\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00253\ \ \ \ \ \textcolor{comment}{//\ Здесь\ будет\ SQL-\/запрос,\ пока\ заглушка}} +\DoxyCodeLine{00254\ \ \ \ \ \textcolor{keywordflow}{return}\ 732;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00255\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a73b3ae758a8cf3621318d27cd1a17722}\index{func2serv.cpp@{func2serv.cpp}!get\_products@{get\_products}} +\index{get\_products@{get\_products}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_products()}{get\_products()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a73b3ae758a8cf3621318d27cd1a17722} +QByte\+Array get\+\_\+products (\begin{DoxyParamCaption}\item[{QString}]{user\+Id}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00216\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00217\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00218\ \ \ \ \ \textcolor{keywordtype}{int}\ userIdInt\ =\ userId.toInt();} +\DoxyCodeLine{00219\ \ \ \ \ QVector\ products\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a84fe7936dd15c077eff86d7884ce3049}{getProductsByUser}}(userIdInt);} +\DoxyCodeLine{00220\ } +\DoxyCodeLine{00221\ \ \ \ \ QJsonArray\ jsonArray;} +\DoxyCodeLine{00222\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{const}\ QVariantMap\&\ product\ :\ products)\ \{} +\DoxyCodeLine{00223\ \ \ \ \ \ \ \ \ QJsonObject\ obj\ =\ QJsonObject::fromVariantMap(product);} +\DoxyCodeLine{00224\ \ \ \ \ \ \ \ \ jsonArray.append(obj);} +\DoxyCodeLine{00225\ \ \ \ \ \}} +\DoxyCodeLine{00226\ } +\DoxyCodeLine{00227\ \ \ \ \ QJsonDocument\ doc(jsonArray);} +\DoxyCodeLine{00228\ \ \ \ \ QByteArray\ jsonBytes\ =\ doc.toJson(QJsonDocument::Compact);} +\DoxyCodeLine{00229\ } +\DoxyCodeLine{00230\ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Отправляем\ продукты\ в\ виде\ JSON:"{}}\ <<\ jsonBytes;} +\DoxyCodeLine{00231\ } +\DoxyCodeLine{00232\ \ \ \ \ \textcolor{keywordflow}{return}\ jsonBytes;} +\DoxyCodeLine{00233\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a2d521723770cde0e28bb41544394917b}\index{func2serv.cpp@{func2serv.cpp}!get\_stable\_stat@{get\_stable\_stat}} +\index{get\_stable\_stat@{get\_stable\_stat}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_stable\_stat()}{get\_stable\_stat()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a2d521723770cde0e28bb41544394917b} +QByte\+Array get\+\_\+stable\+\_\+stat (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00256\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00257\ } +\DoxyCodeLine{00258\ \ \ \ \ \textcolor{keywordtype}{int}\ userCount\ =\ 0;} +\DoxyCodeLine{00259\ \ \ \ \ \textcolor{keywordtype}{int}\ productCount\ =\ 0;} +\DoxyCodeLine{00260\ } +\DoxyCodeLine{00261\ \ \ \ \ userCount\ =\ \mbox{\hyperlink{func2serv_8cpp_a8ebcc70a2024aab70883f094fc35849e}{get\_user\_count}}();} +\DoxyCodeLine{00262\ \ \ \ \ productCount\ =\ \mbox{\hyperlink{func2serv_8cpp_a4ddd067c5a29f76aead93c977a05113a}{get\_product\_count}}();} +\DoxyCodeLine{00263\ } +\DoxyCodeLine{00264\ \ \ \ \ \textcolor{comment}{//\ Формируем\ строку\ ответа}} +\DoxyCodeLine{00265\ \ \ \ \ QString\ response\ =\ \textcolor{stringliteral}{"{}Users:\ "{}}\ +\ QString::number(userCount)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}}\ +} +\DoxyCodeLine{00266\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Products:\ "{}}\ +\ QString::number(productCount)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00267\ } +\DoxyCodeLine{00268\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00269\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a0a88fbccc63c8cc890ded3a20fb71e72}\index{func2serv.cpp@{func2serv.cpp}!get\_stat@{get\_stat}} +\index{get\_stat@{get\_stat}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_stat()}{get\_stat()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a0a88fbccc63c8cc890ded3a20fb71e72} +QByte\+Array get\+\_\+stat (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00199\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00200\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Your\ Statistic:\ null\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00201\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a8ebcc70a2024aab70883f094fc35849e}\index{func2serv.cpp@{func2serv.cpp}!get\_user\_count@{get\_user\_count}} +\index{get\_user\_count@{get\_user\_count}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_user\_count()}{get\_user\_count()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a8ebcc70a2024aab70883f094fc35849e} +int get\+\_\+user\+\_\+count (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00247\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00248\ \ \ \ \ \textcolor{comment}{//\ Здесь\ будет\ SQL-\/запрос,\ пока\ заглушка}} +\DoxyCodeLine{00249\ \ \ \ \ \textcolor{keywordflow}{return}\ 152;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00250\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a4d269e13002c5cded37bee9ade854d93}\index{func2serv.cpp@{func2serv.cpp}!get\_weekly\_logins@{get\_weekly\_logins}} +\index{get\_weekly\_logins@{get\_weekly\_logins}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{get\_weekly\_logins()}{get\_weekly\_logins()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a4d269e13002c5cded37bee9ade854d93} +int get\+\_\+weekly\+\_\+logins (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00270\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00271\ \ \ \ \ \textcolor{comment}{//\ Заглушка,\ пока\ без\ БД}} +\DoxyCodeLine{00272\ \ \ \ \ \textcolor{keywordflow}{return}\ 78;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00273\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_aa70831eddff4b8ed7a04647778a35747}\index{func2serv.cpp@{func2serv.cpp}!menu\_export@{menu\_export}} +\index{menu\_export@{menu\_export}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{menu\_export()}{menu\_export()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_aa70831eddff4b8ed7a04647778a35747} +QByte\+Array menu\+\_\+export (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00206\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00207\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Меню\ успешно\ экспортировано!\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00208\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_a99bd96103155e73697cc47518a5559a4}\index{func2serv.cpp@{func2serv.cpp}!parsing@{parsing}} +\index{parsing@{parsing}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{parsing()}{parsing()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_a99bd96103155e73697cc47518a5559a4} +QByte\+Array parsing (\begin{DoxyParamCaption}\item[{QString}]{input}{, }\item[{int}]{socdes}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00019\ \{} +\DoxyCodeLine{00020\ } +\DoxyCodeLine{00021\ \ \ \ \ QStringList\ container\ =\ input.remove(\textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}}).split(\textcolor{stringliteral}{"{}//"{}});\ \textcolor{comment}{//пример\ входящих\ данных\ reg//login\_user//password\_user}} +\DoxyCodeLine{00022\ } +\DoxyCodeLine{00023\ \ \ \ \ \textcolor{keywordflow}{if}\ (container.isEmpty())\ \{} +\DoxyCodeLine{00024\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}server\ error:\ empty\ command\(\backslash\)\(\backslash\)n"{}};} +\DoxyCodeLine{00025\ \ \ \ \ \}} +\DoxyCodeLine{00026\ } +\DoxyCodeLine{00027\ } +\DoxyCodeLine{00028\ \ \ \ \ qDebug()\ <<\ socdes\ <<\ \textcolor{stringliteral}{"{}\ user\ command:\ "{}}\ <<\ container[0];} +\DoxyCodeLine{00029\ \ \ \ \ QString\ var\ =\ container[0];} +\DoxyCodeLine{00030\ \ \ \ \ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}check\_task"{}})} +\DoxyCodeLine{00031\ \ \ \ \ \{} +\DoxyCodeLine{00032\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a6d4386c36a7ed61c61cf3d1bad354f27}{check\_task}}();} +\DoxyCodeLine{00033\ \ \ \ \ \}} +\DoxyCodeLine{00034\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\textcolor{stringliteral}{"{}auth"{}})} +\DoxyCodeLine{00035\ \ \ \ \ \{} +\DoxyCodeLine{00036\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a173db167f59671d56b49f5d7d11ef531}{auth}}(container);} +\DoxyCodeLine{00037\ \ \ \ \ \}} +\DoxyCodeLine{00038\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}add\_product"{}})} +\DoxyCodeLine{00039\ \ \ \ \ \{} +\DoxyCodeLine{00040\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a27ffe3af29c8442de4aa94a5e48d2345}{add\_product}}(container);} +\DoxyCodeLine{00041\ \ \ \ \ \}} +\DoxyCodeLine{00042\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}user"{}}\ \&\&\ container[2]\ ==\ \textcolor{stringliteral}{"{}get\_products"{}})\ \{} +\DoxyCodeLine{00043\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a73b3ae758a8cf3621318d27cd1a17722}{get\_products}}(container[1]);} +\DoxyCodeLine{00044\ \ \ \ \ \}} +\DoxyCodeLine{00045\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\textcolor{stringliteral}{"{}reg"{}})} +\DoxyCodeLine{00046\ \ \ \ \ \{} +\DoxyCodeLine{00047\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_ac87f1fa2fd8c6ee1a48c3a56a99b3275}{reg}}(container);} +\DoxyCodeLine{00048\ \ \ \ \ \}} +\DoxyCodeLine{00049\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}get\_stat"{}})} +\DoxyCodeLine{00050\ \ \ \ \ \{} +\DoxyCodeLine{00051\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}(\mbox{\hyperlink{func2serv_8cpp_a0a88fbccc63c8cc890ded3a20fb71e72}{get\_stat}}());} +\DoxyCodeLine{00052\ \ \ \ \ \}} +\DoxyCodeLine{00053\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}admin"{}}\ \&\&\ container[1]\ ==\ \textcolor{stringliteral}{"{}dynamic\_stat"{}})\ \{} +\DoxyCodeLine{00054\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a8a2ae0ff8263d70f4e0f30d6b0d89af7}{get\_dynamic\_stat}}();} +\DoxyCodeLine{00055\ \ \ \ \ \}} +\DoxyCodeLine{00056\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}menu\_export"{}})} +\DoxyCodeLine{00057\ \ \ \ \ \{} +\DoxyCodeLine{00058\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_aa70831eddff4b8ed7a04647778a35747}{menu\_export}}();} +\DoxyCodeLine{00059\ \ \ \ \ \}} +\DoxyCodeLine{00060\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}user"{}}\ \&\&\ container[2]\ ==\ \textcolor{stringliteral}{"{}add\_favorite\_ration"{}})\ \{} +\DoxyCodeLine{00061\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a6496e445a644cca89c6252f6e7adecb0}{add\_favorite\_ration}}(container);} +\DoxyCodeLine{00062\ \ \ \ \ \}} +\DoxyCodeLine{00063\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}admin"{}}\ \&\&\ container[1]\ ==\ \textcolor{stringliteral}{"{}get\_all\_users"{}})\ \{} +\DoxyCodeLine{00064\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_ab8bda875989629df9b683e881296b32d}{get\_all\_users}}();} +\DoxyCodeLine{00065\ \ \ \ \ \}} +\DoxyCodeLine{00066\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}admin"{}}\ \&\&\ container[1]\ ==\ \textcolor{stringliteral}{"{}stable\_stat"{}})\ \{} +\DoxyCodeLine{00067\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a2d521723770cde0e28bb41544394917b}{get\_stable\_stat}}();} +\DoxyCodeLine{00068\ \ \ \ \ \}} +\DoxyCodeLine{00069\ \ \ \ \ \textcolor{keywordflow}{else}} +\DoxyCodeLine{00070\ \ \ \ \ \{} +\DoxyCodeLine{00071\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}server\ error:\ unknow\ command\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00072\ \ \ \ \ \}} +\DoxyCodeLine{00073\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8cpp_ac87f1fa2fd8c6ee1a48c3a56a99b3275}\index{func2serv.cpp@{func2serv.cpp}!reg@{reg}} +\index{reg@{reg}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{reg()}{reg()}} +{\footnotesize\ttfamily \label{func2serv_8cpp_ac87f1fa2fd8c6ee1a48c3a56a99b3275} +QByte\+Array reg (\begin{DoxyParamCaption}\item[{QString\+List}]{params}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00118\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00119\ \ \ \ \ \textcolor{comment}{//\ 1️⃣\ Проверка\ количества\ параметров}} +\DoxyCodeLine{00120\ \ \ \ \ \textcolor{keywordflow}{if}\ (params.size()\ !=\ 4)\ \{} +\DoxyCodeLine{00121\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Недостаточно\ параметров\ для\ регистрации\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00122\ \ \ \ \ \}} +\DoxyCodeLine{00123\ } +\DoxyCodeLine{00124\ \ \ \ \ \textcolor{comment}{//\ 2️⃣\ Извлечение\ данных\ из\ запроса}} +\DoxyCodeLine{00125\ \ \ \ \ QString\ name\ =\ params[1];\ \ \ \ \ \ \textcolor{comment}{//\ Имя\ пользователя}} +\DoxyCodeLine{00126\ \ \ \ \ QString\ email\ =\ params[2];\ \ \ \ \ \textcolor{comment}{//\ Email\ (должен\ быть\ уникальным)}} +\DoxyCodeLine{00127\ \ \ \ \ QString\ password\ =\ params[3];\ \ \textcolor{comment}{//\ Пароль}} +\DoxyCodeLine{00128\ } +\DoxyCodeLine{00129\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00130\ } +\DoxyCodeLine{00131\ \ \ \ \ \textcolor{comment}{//\ 3️⃣\ Проверка,\ не\ занят\ ли\ email}} +\DoxyCodeLine{00132\ \ \ \ \ QSqlQuery\ checkQuery\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00133\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}SELECT\ id\ FROM\ users\ WHERE\ email\ =\ :email"{}},} +\DoxyCodeLine{00134\ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:email"{}},\ email\}\}} +\DoxyCodeLine{00135\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00136\ } +\DoxyCodeLine{00137\ \ \ \ \ \textcolor{comment}{//\ Если\ запрос\ не\ выполнился\ (ошибка\ БД)}} +\DoxyCodeLine{00138\ \ \ \ \ \textcolor{keywordflow}{if}\ (!checkQuery.exec())\ \{} +\DoxyCodeLine{00139\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Ошибка\ при\ проверке\ email\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00140\ \ \ \ \ \}} +\DoxyCodeLine{00141\ } +\DoxyCodeLine{00142\ \ \ \ \ \textcolor{comment}{//\ Если\ email\ уже\ существует\ (найдена\ запись)}} +\DoxyCodeLine{00143\ \ \ \ \ \textcolor{keywordflow}{if}\ (checkQuery.next())\ \{} +\DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Пользователь\ с\ таким\ email\ уже\ зарегистрирован\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00145\ \ \ \ \ \}} +\DoxyCodeLine{00146\ } +\DoxyCodeLine{00147\ \ \ \ \ \textcolor{comment}{//\ 4️⃣\ Попытка\ добавить\ пользователя}} +\DoxyCodeLine{00148\ \ \ \ \ \textcolor{keywordtype}{bool}\ success\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_af17db97dfc40b0fa48b3ed9abeacca76}{addUser}}(name,\ email,\ password,\ \textcolor{keyword}{false});} +\DoxyCodeLine{00149\ } +\DoxyCodeLine{00150\ \ \ \ \ \textcolor{keywordflow}{if}\ (success)\ \{} +\DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ 5️⃣\ Обновление\ статистики\ (увеличиваем\ счетчик\ регистраций)}} +\DoxyCodeLine{00152\ \ \ \ \ \ \ \ \ QVariantMap\ stats\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_aad20b90cdb02aab3df1f27a9e4f882a3}{getStatistics}}();} +\DoxyCodeLine{00153\ \ \ \ \ \ \ \ \ db-\/>\mbox{\hyperlink{class_data_base_singleton_ab2877d5184cd7af28f1ea3b31f523280}{updateStatistics}}(} +\DoxyCodeLine{00154\ \ \ \ \ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}registrations"{}}].toInt()\ +\ 1,\ \ \textcolor{comment}{//\ +1\ новая\ регистрация}} +\DoxyCodeLine{00155\ \ \ \ \ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}visits"{}}].toInt(),\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Визиты\ без\ изменений}} +\DoxyCodeLine{00156\ \ \ \ \ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}generations"{}}].toInt()\ \ \ \ \ \ \ \ \textcolor{comment}{//\ Генерации\ без\ изменений}} +\DoxyCodeLine{00157\ \ \ \ \ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00158\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_success//Регистрация\ прошла\ успешно\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00159\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{00160\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Если\ INSERT\ не\ сработал\ (например,\ из-\/за\ UNIQUE\ INDEX)}} +\DoxyCodeLine{00161\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Ошибка\ при\ регистрации\ (возможно,\ email\ уже\ занят)\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00162\ \ \ \ \ \}} +\DoxyCodeLine{00163\ \}} + +\end{DoxyCode} + + +\doxysubsection{Variable Documentation} +\Hypertarget{func2serv_8cpp_aa13aef29ff8f58936aa8f2bd99f70253}\index{func2serv.cpp@{func2serv.cpp}!mockDatabase@{mockDatabase}} +\index{mockDatabase@{mockDatabase}!func2serv.cpp@{func2serv.cpp}} +\doxysubsubsection{\texorpdfstring{mockDatabase}{mockDatabase}} +{\footnotesize\ttfamily \label{func2serv_8cpp_aa13aef29ff8f58936aa8f2bd99f70253} +QMap$<$QString, QList$<$QString$>$ $>$ mock\+Database} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{=\ \{} +\DoxyCodeLine{\ \ \ \ \{\textcolor{stringliteral}{"{}1"{}},\ \{\textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}banana\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}}\}\},} +\DoxyCodeLine{\ \ \ \ \{\textcolor{stringliteral}{"{}2"{}},\ \{\textcolor{stringliteral}{"{}apple\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}grape\_11\_45\_12\_24"{}}\}\}} +\DoxyCodeLine{\ \ \ \ \}} + +\end{DoxyCode} + +\begin{DoxyCode}{0} +\DoxyCodeLine{00012\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00013\ \ \ \ \ \{\textcolor{stringliteral}{"{}1"{}},\ \{\textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}banana\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}orange\_11\_45\_12\_24"{}}\}\},} +\DoxyCodeLine{00014\ \ \ \ \ \{\textcolor{stringliteral}{"{}2"{}},\ \{\textcolor{stringliteral}{"{}apple\_11\_45\_12\_24"{}},\ \textcolor{stringliteral}{"{}grape\_11\_45\_12\_24"{}}\}\}} +\DoxyCodeLine{00015\ \ \ \ \ \};} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/func2serv_8cpp__incl.dot b/docs/doxygen/latex/func2serv_8cpp__incl.dot new file mode 100644 index 0000000..aadd797 --- /dev/null +++ b/docs/doxygen/latex/func2serv_8cpp__incl.dot @@ -0,0 +1,40 @@ +digraph "server/func2serv.cpp" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/func2serv.cpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge18_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="func2serv.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8h.html",tooltip=" "]; + Node2 -> Node3 [id="edge19_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node4 [id="edge20_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge21_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QString",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge22_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QStringList",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge23_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge24_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node1 -> Node8 [id="edge25_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="databasesingleton.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8h.html",tooltip=" "]; + Node8 -> Node9 [id="edge26_Node000008_Node000009",color="steelblue1",style="solid",tooltip=" "]; + Node9 [id="Node000009",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node10 [id="edge27_Node000008_Node000010",color="steelblue1",style="solid",tooltip=" "]; + Node10 [id="Node000010",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node11 [id="edge28_Node000008_Node000011",color="steelblue1",style="solid",tooltip=" "]; + Node11 [id="Node000011",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node4 [id="edge29_Node000008_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node8 -> Node12 [id="edge30_Node000008_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node12 [id="Node000012",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node8 -> Node13 [id="edge31_Node000008_Node000013",color="steelblue1",style="solid",tooltip=" "]; + Node13 [id="Node000013",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node14 [id="edge32_Node000001_Node000014",color="steelblue1",style="solid",tooltip=" "]; + Node14 [id="Node000014",label="QJsonArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node15 [id="edge33_Node000001_Node000015",color="steelblue1",style="solid",tooltip=" "]; + Node15 [id="Node000015",label="QJsonObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node16 [id="edge34_Node000001_Node000016",color="steelblue1",style="solid",tooltip=" "]; + Node16 [id="Node000016",label="QJsonDocument",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/func2serv_8cpp__incl.md5 b/docs/doxygen/latex/func2serv_8cpp__incl.md5 new file mode 100644 index 0000000..897a219 --- /dev/null +++ b/docs/doxygen/latex/func2serv_8cpp__incl.md5 @@ -0,0 +1 @@ +53a58a13af3183f5de66a3bb37754294 \ No newline at end of file diff --git a/docs/doxygen/latex/func2serv_8cpp__incl.pdf b/docs/doxygen/latex/func2serv_8cpp__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..af8005498627de6410323bac107f5ec962040195 GIT binary patch literal 23594 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\newline +{\ttfamily \#include $<$QDebug$>$}\newline +Include dependency graph for func2serv.\+h\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=218pt]{func2serv_8h__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=324pt]{func2serv_8h__dep__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_a99bd96103155e73697cc47518a5559a4}{parsing}} (QString input, int socdes) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_acbd6ff747a2b100b8f8da4a9b99d43c7}{auth}} (QString\+List) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_a202f69a507a4e282bb2916fea170686f}{reg}} (QString\+List) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_aea4bc93c1f84d34a05a2c25939dcfaac}{add\+\_\+product}} (QString\+List) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_a0a88fbccc63c8cc890ded3a20fb71e72}{get\+\_\+stat}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_a6d4386c36a7ed61c61cf3d1bad354f27}{check\+\_\+task}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_aa70831eddff4b8ed7a04647778a35747}{menu\+\_\+export}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_ab8096a94a4e4aaa7af0852f0ffc11c99}{get\+\_\+products}} (QString User\+Id) +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_ab8bda875989629df9b683e881296b32d}{get\+\_\+all\+\_\+users}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_a2d521723770cde0e28bb41544394917b}{get\+\_\+stable\+\_\+stat}} () +\item +int \mbox{\hyperlink{func2serv_8h_a8ebcc70a2024aab70883f094fc35849e}{get\+\_\+user\+\_\+count}} () +\item +int \mbox{\hyperlink{func2serv_8h_a4ddd067c5a29f76aead93c977a05113a}{get\+\_\+product\+\_\+count}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_a8a2ae0ff8263d70f4e0f30d6b0d89af7}{get\+\_\+dynamic\+\_\+stat}} () +\item +int \mbox{\hyperlink{func2serv_8h_a4d269e13002c5cded37bee9ade854d93}{get\+\_\+weekly\+\_\+logins}} () +\item +int \mbox{\hyperlink{func2serv_8h_a2d6f70d14e474616a4a16a72485c2f0e}{get\+\_\+monthly\+\_\+logins}} () +\item +QByte\+Array \mbox{\hyperlink{func2serv_8h_a6496e445a644cca89c6252f6e7adecb0}{add\+\_\+favorite\+\_\+ration}} (const QString\+List \&container) +\item +bool \mbox{\hyperlink{func2serv_8h_a064e99d59eaa1d8cccef20b3192df015}{add\+\_\+ration\+\_\+to\+\_\+favorites}} (const QString \&user\+Id, const QString \&ration\+Id) +\end{DoxyCompactItemize} + + +\doxysubsection{Function Documentation} +\Hypertarget{func2serv_8h_a6496e445a644cca89c6252f6e7adecb0}\index{func2serv.h@{func2serv.h}!add\_favorite\_ration@{add\_favorite\_ration}} +\index{add\_favorite\_ration@{add\_favorite\_ration}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{add\_favorite\_ration()}{add\_favorite\_ration()}} +{\footnotesize\ttfamily \label{func2serv_8h_a6496e445a644cca89c6252f6e7adecb0} +QByte\+Array add\+\_\+favorite\+\_\+ration (\begin{DoxyParamCaption}\item[{const QString\+List \&}]{container}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00293\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00294\ \ \ \ \ QString\ userId\ =\ container[1];\ \textcolor{comment}{//\ ID\ пользователя}} +\DoxyCodeLine{00295\ \ \ \ \ QString\ rationId\ =\ container[2];\ \textcolor{comment}{//\ ID\ рациона}} +\DoxyCodeLine{00296\ } +\DoxyCodeLine{00297\ \ \ \ \ \textcolor{keywordtype}{bool}\ success\ =\ \mbox{\hyperlink{func2serv_8cpp_a064e99d59eaa1d8cccef20b3192df015}{add\_ration\_to\_favorites}}(userId,\ rationId);\ \textcolor{comment}{//\ Вызов\ функции-\/заглушки}} +\DoxyCodeLine{00298\ } +\DoxyCodeLine{00299\ \ \ \ \ \textcolor{keywordflow}{if}\ (success)\ \{} +\DoxyCodeLine{00300\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Ration\ successfully\ added\ to\ favorites\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00301\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{00302\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Error:\ failed\ to\ add\ ration\ to\ favorites\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00303\ \ \ \ \ \}} +\DoxyCodeLine{00304\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_aea4bc93c1f84d34a05a2c25939dcfaac}\index{func2serv.h@{func2serv.h}!add\_product@{add\_product}} +\index{add\_product@{add\_product}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{add\_product()}{add\_product()}} +{\footnotesize\ttfamily \label{func2serv_8h_aea4bc93c1f84d34a05a2c25939dcfaac} +QByte\+Array add\+\_\+product (\begin{DoxyParamCaption}\item[{QString\+List}]{params}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00165\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00166\ \ \ \ \ \textcolor{keywordflow}{if}\ (params.size()\ !=\ 9)\ \{} +\DoxyCodeLine{00167\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}add\_product//failed//Неверные\ аргументы\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00168\ \ \ \ \ \}} +\DoxyCodeLine{00169\ } +\DoxyCodeLine{00170\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}\ *db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00171\ \ \ \ \ \textcolor{keywordtype}{int}\ userId\ =\ params[1].toInt();} +\DoxyCodeLine{00172\ \ \ \ \ QString\ name\ =\ params[2];} +\DoxyCodeLine{00173\ \textcolor{comment}{/*}} +\DoxyCodeLine{00174\ \textcolor{comment}{\ \ \ \ //\ Проверяем,\ существует\ ли\ уже\ такой\ продукт }} +\DoxyCodeLine{00175\ \textcolor{comment}{\ \ \ \ QSqlQuery\ checkQuery\ =\ db-\/>executeQuery( }} +\DoxyCodeLine{00176\ \textcolor{comment}{\ \ \ \ \ \ \ \ "{}SELECT\ id\ FROM\ products\ WHERE\ id\_user\ =\ :id\_user\ AND\ name\ =\ :name"{}, }} +\DoxyCodeLine{00177\ \textcolor{comment}{\ \ \ \ \ \ \ \ \{\{"{}:id\_user"{},\ userId\},\ \{"{}:name"{},\ name\}\} }} +\DoxyCodeLine{00178\ \textcolor{comment}{\ \ \ \ \ \ \ \ ); }} +\DoxyCodeLine{00179\ \textcolor{comment}{}} +\DoxyCodeLine{00180\ \textcolor{comment}{\ \ \ \ if\ (checkQuery.next())\ \{ }} +\DoxyCodeLine{00181\ \textcolor{comment}{\ \ \ \ \ \ \ \ return\ "{}add\_product//failed//Продукт\ уже\ существует\(\backslash\)r\(\backslash\)n"{}; }} +\DoxyCodeLine{00182\ \textcolor{comment}{\ \ \ \ \} }} +\DoxyCodeLine{00183\ \textcolor{comment}{*/}} +\DoxyCodeLine{00184\ \ \ \ \ \textcolor{comment}{//\ Добавляем\ продукт}} +\DoxyCodeLine{00185\ \ \ \ \ \textcolor{keywordtype}{bool}\ success\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a3fe2a5e1f41a408023066e8caf63b523}{addProduct}}(} +\DoxyCodeLine{00186\ \ \ \ \ \ \ \ \ userId,} +\DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ name,} +\DoxyCodeLine{00188\ \ \ \ \ \ \ \ \ params[3].toInt(),\ \textcolor{comment}{//\ proteins}} +\DoxyCodeLine{00189\ \ \ \ \ \ \ \ \ params[4].toInt(),\ \textcolor{comment}{//\ fatness}} +\DoxyCodeLine{00190\ \ \ \ \ \ \ \ \ params[5].toInt(),\ \textcolor{comment}{//\ carbs}} +\DoxyCodeLine{00191\ \ \ \ \ \ \ \ \ params[6].toInt(),\ \textcolor{comment}{//\ weight}} +\DoxyCodeLine{00192\ \ \ \ \ \ \ \ \ params[7].toInt(),\ \textcolor{comment}{//\ cost}} +\DoxyCodeLine{00193\ \ \ \ \ \ \ \ \ params[8].toInt()\ \ \textcolor{comment}{//\ type}} +\DoxyCodeLine{00194\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00195\ } +\DoxyCodeLine{00196\ \ \ \ \ \textcolor{keywordflow}{return}\ success\ ?\ \textcolor{stringliteral}{"{}add\_product//success\(\backslash\)r\(\backslash\)n"{}}\ :\ \textcolor{stringliteral}{"{}add\_product//failed//Ошибка\ БД\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00197\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a064e99d59eaa1d8cccef20b3192df015}\index{func2serv.h@{func2serv.h}!add\_ration\_to\_favorites@{add\_ration\_to\_favorites}} +\index{add\_ration\_to\_favorites@{add\_ration\_to\_favorites}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{add\_ration\_to\_favorites()}{add\_ration\_to\_favorites()}} +{\footnotesize\ttfamily \label{func2serv_8h_a064e99d59eaa1d8cccef20b3192df015} +bool add\+\_\+ration\+\_\+to\+\_\+favorites (\begin{DoxyParamCaption}\item[{const QString \&}]{user\+Id}{, }\item[{const QString \&}]{ration\+Id}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00305\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00306\ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Adding\ ration\ for\ user:"{}}\ <<\ userId\ <<\ \textcolor{stringliteral}{"{},\ ration\ ID:"{}}\ <<\ rationId;} +\DoxyCodeLine{00307\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{keyword}{true};\ \textcolor{comment}{//\ Заглушка,\ потом\ заменить\ на\ SQL-\/запрос}} +\DoxyCodeLine{00308\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_acbd6ff747a2b100b8f8da4a9b99d43c7}\index{func2serv.h@{func2serv.h}!auth@{auth}} +\index{auth@{auth}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{auth()}{auth()}} +{\footnotesize\ttfamily \label{func2serv_8h_acbd6ff747a2b100b8f8da4a9b99d43c7} +QByte\+Array auth (\begin{DoxyParamCaption}\item[{QString\+List}]{log}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00077\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00078\ \ \ \ \ \textcolor{comment}{//\ Проверяем\ количество\ параметров}} +\DoxyCodeLine{00079\ \ \ \ \ \textcolor{keywordflow}{if}\ (log.size()\ <\ 3)\ \{} +\DoxyCodeLine{00080\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}auth\_failed//Недостаточно\ параметров\ для\ авторизации\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00081\ \ \ \ \ \}} +\DoxyCodeLine{00082\ } +\DoxyCodeLine{00083\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00084\ \ \ \ \ \textcolor{keywordtype}{bool}\ authSuccess\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a51bd7dc4507c5f3d04a2903899e13d42}{checkUserCredentials}}(log[1],\ log[2]);} +\DoxyCodeLine{00085\ } +\DoxyCodeLine{00086\ \ \ \ \ \textcolor{keywordflow}{if}\ (!authSuccess)\ \{} +\DoxyCodeLine{00087\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}auth\_failed//Неверный\ логин\ или\ пароль\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00088\ \ \ \ \ \}} +\DoxyCodeLine{00089\ } +\DoxyCodeLine{00090\ } +\DoxyCodeLine{00091\ } +\DoxyCodeLine{00092\ \ \ \ \ QSqlQuery\ query\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00093\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}SELECT\ id,\ name,\ email,\ pass\ FROM\ users\ WHERE\ (email\ =\ :login\ OR\ name\ =\ :login)\ AND\ pass\ =\ :pass"{}},} +\DoxyCodeLine{00094\ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00095\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:login"{}},\ log[1]\},\ \textcolor{comment}{//\ логин}} +\DoxyCodeLine{00096\ \ \ \ \ \ \ \ \ \ \ \ \ \{\textcolor{stringliteral}{"{}:pass"{}},\ log[2]\}\ \ \ \textcolor{comment}{//\ пароль}} +\DoxyCodeLine{00097\ \ \ \ \ \ \ \ \ \}} +\DoxyCodeLine{00098\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00099\ } +\DoxyCodeLine{00100\ } +\DoxyCodeLine{00101\ \ \ \ \ \textcolor{keywordflow}{if}\ (!query.next())\ \{} +\DoxyCodeLine{00102\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}auth\_failed//Ошибка\ при\ получении\ данных\ пользователя\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00103\ \ \ \ \ \}} +\DoxyCodeLine{00104\ } +\DoxyCodeLine{00105\ \ \ \ \ QString\ userId\ =\ query.value(\textcolor{stringliteral}{"{}id"{}}).toString();} +\DoxyCodeLine{00106\ \ \ \ \ QString\ userLogin\ =\ query.value(\textcolor{stringliteral}{"{}name"{}}).toString();} +\DoxyCodeLine{00107\ \ \ \ \ QString\ userEmail\ =\ query.value(\textcolor{stringliteral}{"{}email"{}}).toString();} +\DoxyCodeLine{00108\ } +\DoxyCodeLine{00109\ \ \ \ \ QString\ response\ =\ QString(\textcolor{stringliteral}{"{}auth\_success//\%1//\%2//\%3\(\backslash\)r\(\backslash\)n"{}})} +\DoxyCodeLine{00110\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .arg(userId)} +\DoxyCodeLine{00111\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .arg(userLogin)} +\DoxyCodeLine{00112\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .arg(userEmail);} +\DoxyCodeLine{00113\ } +\DoxyCodeLine{00114\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00115\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a6d4386c36a7ed61c61cf3d1bad354f27}\index{func2serv.h@{func2serv.h}!check\_task@{check\_task}} +\index{check\_task@{check\_task}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{check\_task()}{check\_task()}} +{\footnotesize\ttfamily \label{func2serv_8h_a6d4386c36a7ed61c61cf3d1bad354f27} +QByte\+Array check\+\_\+task (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00203\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00204\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Task\ was\ succesful\ completed\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00205\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_ab8bda875989629df9b683e881296b32d}\index{func2serv.h@{func2serv.h}!get\_all\_users@{get\_all\_users}} +\index{get\_all\_users@{get\_all\_users}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_all\_users()}{get\_all\_users()}} +{\footnotesize\ttfamily \label{func2serv_8h_ab8bda875989629df9b683e881296b32d} +QByte\+Array get\+\_\+all\+\_\+users (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00235\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00236\ \ \ \ \ QStringList\ users;} +\DoxyCodeLine{00237\ } +\DoxyCodeLine{00238\ \ \ \ \ \textcolor{comment}{//\ fetch\_users\_from\_db(users);}} +\DoxyCodeLine{00239\ } +\DoxyCodeLine{00240\ \ \ \ \ QString\ response;} +\DoxyCodeLine{00241\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{const}\ QString\&\ user\ :\ users)\ \{} +\DoxyCodeLine{00242\ \ \ \ \ \ \ \ \ response\ +=\ user\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00243\ \ \ \ \ \}} +\DoxyCodeLine{00244\ } +\DoxyCodeLine{00245\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00246\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a8a2ae0ff8263d70f4e0f30d6b0d89af7}\index{func2serv.h@{func2serv.h}!get\_dynamic\_stat@{get\_dynamic\_stat}} +\index{get\_dynamic\_stat@{get\_dynamic\_stat}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_dynamic\_stat()}{get\_dynamic\_stat()}} +{\footnotesize\ttfamily \label{func2serv_8h_a8a2ae0ff8263d70f4e0f30d6b0d89af7} +QByte\+Array get\+\_\+dynamic\+\_\+stat (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00279\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00280\ \ \ \ \ \textcolor{keywordtype}{int}\ weeklyLogins\ =\ 0;} +\DoxyCodeLine{00281\ \ \ \ \ \textcolor{keywordtype}{int}\ monthlyLogins\ =\ 0;} +\DoxyCodeLine{00282\ } +\DoxyCodeLine{00283\ \ \ \ \ \textcolor{comment}{//\ Получаем\ данные\ из\ БД\ (пока\ заглушки)}} +\DoxyCodeLine{00284\ \ \ \ \ weeklyLogins\ =\ \mbox{\hyperlink{func2serv_8cpp_a4d269e13002c5cded37bee9ade854d93}{get\_weekly\_logins}}();} +\DoxyCodeLine{00285\ \ \ \ \ monthlyLogins\ =\ \mbox{\hyperlink{func2serv_8cpp_a2d6f70d14e474616a4a16a72485c2f0e}{get\_monthly\_logins}}();} +\DoxyCodeLine{00286\ } +\DoxyCodeLine{00287\ \ \ \ \ \textcolor{comment}{//\ Формируем\ строку\ ответа}} +\DoxyCodeLine{00288\ \ \ \ \ QString\ response\ =\ \textcolor{stringliteral}{"{}Logins\ per\ week:\ "{}}\ +\ QString::number(weeklyLogins)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}}\ +} +\DoxyCodeLine{00289\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Logins\ per\ month:\ "{}}\ +\ QString::number(monthlyLogins)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00290\ } +\DoxyCodeLine{00291\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00292\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a2d6f70d14e474616a4a16a72485c2f0e}\index{func2serv.h@{func2serv.h}!get\_monthly\_logins@{get\_monthly\_logins}} +\index{get\_monthly\_logins@{get\_monthly\_logins}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_monthly\_logins()}{get\_monthly\_logins()}} +{\footnotesize\ttfamily \label{func2serv_8h_a2d6f70d14e474616a4a16a72485c2f0e} +int get\+\_\+monthly\+\_\+logins (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00275\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00276\ \ \ \ \ \textcolor{comment}{//\ Заглушка,\ пока\ без\ БД}} +\DoxyCodeLine{00277\ \ \ \ \ \textcolor{keywordflow}{return}\ 312;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00278\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a4ddd067c5a29f76aead93c977a05113a}\index{func2serv.h@{func2serv.h}!get\_product\_count@{get\_product\_count}} +\index{get\_product\_count@{get\_product\_count}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_product\_count()}{get\_product\_count()}} +{\footnotesize\ttfamily \label{func2serv_8h_a4ddd067c5a29f76aead93c977a05113a} +int get\+\_\+product\+\_\+count (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00252\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00253\ \ \ \ \ \textcolor{comment}{//\ Здесь\ будет\ SQL-\/запрос,\ пока\ заглушка}} +\DoxyCodeLine{00254\ \ \ \ \ \textcolor{keywordflow}{return}\ 732;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00255\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_ab8096a94a4e4aaa7af0852f0ffc11c99}\index{func2serv.h@{func2serv.h}!get\_products@{get\_products}} +\index{get\_products@{get\_products}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_products()}{get\_products()}} +{\footnotesize\ttfamily \label{func2serv_8h_ab8096a94a4e4aaa7af0852f0ffc11c99} +QByte\+Array get\+\_\+products (\begin{DoxyParamCaption}\item[{QString}]{User\+Id}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00216\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00217\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00218\ \ \ \ \ \textcolor{keywordtype}{int}\ userIdInt\ =\ userId.toInt();} +\DoxyCodeLine{00219\ \ \ \ \ QVector\ products\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a84fe7936dd15c077eff86d7884ce3049}{getProductsByUser}}(userIdInt);} +\DoxyCodeLine{00220\ } +\DoxyCodeLine{00221\ \ \ \ \ QJsonArray\ jsonArray;} +\DoxyCodeLine{00222\ \ \ \ \ \textcolor{keywordflow}{for}\ (\textcolor{keyword}{const}\ QVariantMap\&\ product\ :\ products)\ \{} +\DoxyCodeLine{00223\ \ \ \ \ \ \ \ \ QJsonObject\ obj\ =\ QJsonObject::fromVariantMap(product);} +\DoxyCodeLine{00224\ \ \ \ \ \ \ \ \ jsonArray.append(obj);} +\DoxyCodeLine{00225\ \ \ \ \ \}} +\DoxyCodeLine{00226\ } +\DoxyCodeLine{00227\ \ \ \ \ QJsonDocument\ doc(jsonArray);} +\DoxyCodeLine{00228\ \ \ \ \ QByteArray\ jsonBytes\ =\ doc.toJson(QJsonDocument::Compact);} +\DoxyCodeLine{00229\ } +\DoxyCodeLine{00230\ \ \ \ \ qDebug()\ <<\ \textcolor{stringliteral}{"{}Отправляем\ продукты\ в\ виде\ JSON:"{}}\ <<\ jsonBytes;} +\DoxyCodeLine{00231\ } +\DoxyCodeLine{00232\ \ \ \ \ \textcolor{keywordflow}{return}\ jsonBytes;} +\DoxyCodeLine{00233\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a2d521723770cde0e28bb41544394917b}\index{func2serv.h@{func2serv.h}!get\_stable\_stat@{get\_stable\_stat}} +\index{get\_stable\_stat@{get\_stable\_stat}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_stable\_stat()}{get\_stable\_stat()}} +{\footnotesize\ttfamily \label{func2serv_8h_a2d521723770cde0e28bb41544394917b} +QByte\+Array get\+\_\+stable\+\_\+stat (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00256\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00257\ } +\DoxyCodeLine{00258\ \ \ \ \ \textcolor{keywordtype}{int}\ userCount\ =\ 0;} +\DoxyCodeLine{00259\ \ \ \ \ \textcolor{keywordtype}{int}\ productCount\ =\ 0;} +\DoxyCodeLine{00260\ } +\DoxyCodeLine{00261\ \ \ \ \ userCount\ =\ \mbox{\hyperlink{func2serv_8cpp_a8ebcc70a2024aab70883f094fc35849e}{get\_user\_count}}();} +\DoxyCodeLine{00262\ \ \ \ \ productCount\ =\ \mbox{\hyperlink{func2serv_8cpp_a4ddd067c5a29f76aead93c977a05113a}{get\_product\_count}}();} +\DoxyCodeLine{00263\ } +\DoxyCodeLine{00264\ \ \ \ \ \textcolor{comment}{//\ Формируем\ строку\ ответа}} +\DoxyCodeLine{00265\ \ \ \ \ QString\ response\ =\ \textcolor{stringliteral}{"{}Users:\ "{}}\ +\ QString::number(userCount)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}}\ +} +\DoxyCodeLine{00266\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Products:\ "{}}\ +\ QString::number(productCount)\ +\ \textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00267\ } +\DoxyCodeLine{00268\ \ \ \ \ \textcolor{keywordflow}{return}\ response.toUtf8();} +\DoxyCodeLine{00269\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a0a88fbccc63c8cc890ded3a20fb71e72}\index{func2serv.h@{func2serv.h}!get\_stat@{get\_stat}} +\index{get\_stat@{get\_stat}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_stat()}{get\_stat()}} +{\footnotesize\ttfamily \label{func2serv_8h_a0a88fbccc63c8cc890ded3a20fb71e72} +QByte\+Array get\+\_\+stat (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00199\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00200\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Your\ Statistic:\ null\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00201\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a8ebcc70a2024aab70883f094fc35849e}\index{func2serv.h@{func2serv.h}!get\_user\_count@{get\_user\_count}} +\index{get\_user\_count@{get\_user\_count}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_user\_count()}{get\_user\_count()}} +{\footnotesize\ttfamily \label{func2serv_8h_a8ebcc70a2024aab70883f094fc35849e} +int get\+\_\+user\+\_\+count (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00247\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00248\ \ \ \ \ \textcolor{comment}{//\ Здесь\ будет\ SQL-\/запрос,\ пока\ заглушка}} +\DoxyCodeLine{00249\ \ \ \ \ \textcolor{keywordflow}{return}\ 152;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00250\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a4d269e13002c5cded37bee9ade854d93}\index{func2serv.h@{func2serv.h}!get\_weekly\_logins@{get\_weekly\_logins}} +\index{get\_weekly\_logins@{get\_weekly\_logins}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{get\_weekly\_logins()}{get\_weekly\_logins()}} +{\footnotesize\ttfamily \label{func2serv_8h_a4d269e13002c5cded37bee9ade854d93} +int get\+\_\+weekly\+\_\+logins (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00270\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00271\ \ \ \ \ \textcolor{comment}{//\ Заглушка,\ пока\ без\ БД}} +\DoxyCodeLine{00272\ \ \ \ \ \textcolor{keywordflow}{return}\ 78;\ \textcolor{comment}{//\ Примерное\ значение}} +\DoxyCodeLine{00273\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_aa70831eddff4b8ed7a04647778a35747}\index{func2serv.h@{func2serv.h}!menu\_export@{menu\_export}} +\index{menu\_export@{menu\_export}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{menu\_export()}{menu\_export()}} +{\footnotesize\ttfamily \label{func2serv_8h_aa70831eddff4b8ed7a04647778a35747} +QByte\+Array menu\+\_\+export (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00206\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00207\ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Меню\ успешно\ экспортировано!\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00208\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a99bd96103155e73697cc47518a5559a4}\index{func2serv.h@{func2serv.h}!parsing@{parsing}} +\index{parsing@{parsing}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{parsing()}{parsing()}} +{\footnotesize\ttfamily \label{func2serv_8h_a99bd96103155e73697cc47518a5559a4} +QByte\+Array parsing (\begin{DoxyParamCaption}\item[{QString}]{input}{, }\item[{int}]{socdes}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00019\ \{} +\DoxyCodeLine{00020\ } +\DoxyCodeLine{00021\ \ \ \ \ QStringList\ container\ =\ input.remove(\textcolor{stringliteral}{"{}\(\backslash\)r\(\backslash\)n"{}}).split(\textcolor{stringliteral}{"{}//"{}});\ \textcolor{comment}{//пример\ входящих\ данных\ reg//login\_user//password\_user}} +\DoxyCodeLine{00022\ } +\DoxyCodeLine{00023\ \ \ \ \ \textcolor{keywordflow}{if}\ (container.isEmpty())\ \{} +\DoxyCodeLine{00024\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}server\ error:\ empty\ command\(\backslash\)\(\backslash\)n"{}};} +\DoxyCodeLine{00025\ \ \ \ \ \}} +\DoxyCodeLine{00026\ } +\DoxyCodeLine{00027\ } +\DoxyCodeLine{00028\ \ \ \ \ qDebug()\ <<\ socdes\ <<\ \textcolor{stringliteral}{"{}\ user\ command:\ "{}}\ <<\ container[0];} +\DoxyCodeLine{00029\ \ \ \ \ QString\ var\ =\ container[0];} +\DoxyCodeLine{00030\ \ \ \ \ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}check\_task"{}})} +\DoxyCodeLine{00031\ \ \ \ \ \{} +\DoxyCodeLine{00032\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a6d4386c36a7ed61c61cf3d1bad354f27}{check\_task}}();} +\DoxyCodeLine{00033\ \ \ \ \ \}} +\DoxyCodeLine{00034\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\textcolor{stringliteral}{"{}auth"{}})} +\DoxyCodeLine{00035\ \ \ \ \ \{} +\DoxyCodeLine{00036\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a173db167f59671d56b49f5d7d11ef531}{auth}}(container);} +\DoxyCodeLine{00037\ \ \ \ \ \}} +\DoxyCodeLine{00038\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}add\_product"{}})} +\DoxyCodeLine{00039\ \ \ \ \ \{} +\DoxyCodeLine{00040\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a27ffe3af29c8442de4aa94a5e48d2345}{add\_product}}(container);} +\DoxyCodeLine{00041\ \ \ \ \ \}} +\DoxyCodeLine{00042\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}user"{}}\ \&\&\ container[2]\ ==\ \textcolor{stringliteral}{"{}get\_products"{}})\ \{} +\DoxyCodeLine{00043\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a73b3ae758a8cf3621318d27cd1a17722}{get\_products}}(container[1]);} +\DoxyCodeLine{00044\ \ \ \ \ \}} +\DoxyCodeLine{00045\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\textcolor{stringliteral}{"{}reg"{}})} +\DoxyCodeLine{00046\ \ \ \ \ \{} +\DoxyCodeLine{00047\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_ac87f1fa2fd8c6ee1a48c3a56a99b3275}{reg}}(container);} +\DoxyCodeLine{00048\ \ \ \ \ \}} +\DoxyCodeLine{00049\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}get\_stat"{}})} +\DoxyCodeLine{00050\ \ \ \ \ \{} +\DoxyCodeLine{00051\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}(\mbox{\hyperlink{func2serv_8cpp_a0a88fbccc63c8cc890ded3a20fb71e72}{get\_stat}}());} +\DoxyCodeLine{00052\ \ \ \ \ \}} +\DoxyCodeLine{00053\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}admin"{}}\ \&\&\ container[1]\ ==\ \textcolor{stringliteral}{"{}dynamic\_stat"{}})\ \{} +\DoxyCodeLine{00054\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a8a2ae0ff8263d70f4e0f30d6b0d89af7}{get\_dynamic\_stat}}();} +\DoxyCodeLine{00055\ \ \ \ \ \}} +\DoxyCodeLine{00056\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}menu\_export"{}})} +\DoxyCodeLine{00057\ \ \ \ \ \{} +\DoxyCodeLine{00058\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_aa70831eddff4b8ed7a04647778a35747}{menu\_export}}();} +\DoxyCodeLine{00059\ \ \ \ \ \}} +\DoxyCodeLine{00060\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}user"{}}\ \&\&\ container[2]\ ==\ \textcolor{stringliteral}{"{}add\_favorite\_ration"{}})\ \{} +\DoxyCodeLine{00061\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a6496e445a644cca89c6252f6e7adecb0}{add\_favorite\_ration}}(container);} +\DoxyCodeLine{00062\ \ \ \ \ \}} +\DoxyCodeLine{00063\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}admin"{}}\ \&\&\ container[1]\ ==\ \textcolor{stringliteral}{"{}get\_all\_users"{}})\ \{} +\DoxyCodeLine{00064\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_ab8bda875989629df9b683e881296b32d}{get\_all\_users}}();} +\DoxyCodeLine{00065\ \ \ \ \ \}} +\DoxyCodeLine{00066\ \ \ \ \ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (var\ ==\ \textcolor{stringliteral}{"{}admin"{}}\ \&\&\ container[1]\ ==\ \textcolor{stringliteral}{"{}stable\_stat"{}})\ \{} +\DoxyCodeLine{00067\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{func2serv_8cpp_a2d521723770cde0e28bb41544394917b}{get\_stable\_stat}}();} +\DoxyCodeLine{00068\ \ \ \ \ \}} +\DoxyCodeLine{00069\ \ \ \ \ \textcolor{keywordflow}{else}} +\DoxyCodeLine{00070\ \ \ \ \ \{} +\DoxyCodeLine{00071\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}server\ error:\ unknow\ command\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00072\ \ \ \ \ \}} +\DoxyCodeLine{00073\ \}} + +\end{DoxyCode} +\Hypertarget{func2serv_8h_a202f69a507a4e282bb2916fea170686f}\index{func2serv.h@{func2serv.h}!reg@{reg}} +\index{reg@{reg}!func2serv.h@{func2serv.h}} +\doxysubsubsection{\texorpdfstring{reg()}{reg()}} +{\footnotesize\ttfamily \label{func2serv_8h_a202f69a507a4e282bb2916fea170686f} +QByte\+Array reg (\begin{DoxyParamCaption}\item[{QString\+List}]{params}{}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00118\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00119\ \ \ \ \ \textcolor{comment}{//\ 1️⃣\ Проверка\ количества\ параметров}} +\DoxyCodeLine{00120\ \ \ \ \ \textcolor{keywordflow}{if}\ (params.size()\ !=\ 4)\ \{} +\DoxyCodeLine{00121\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Недостаточно\ параметров\ для\ регистрации\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00122\ \ \ \ \ \}} +\DoxyCodeLine{00123\ } +\DoxyCodeLine{00124\ \ \ \ \ \textcolor{comment}{//\ 2️⃣\ Извлечение\ данных\ из\ запроса}} +\DoxyCodeLine{00125\ \ \ \ \ QString\ name\ =\ params[1];\ \ \ \ \ \ \textcolor{comment}{//\ Имя\ пользователя}} +\DoxyCodeLine{00126\ \ \ \ \ QString\ email\ =\ params[2];\ \ \ \ \ \textcolor{comment}{//\ Email\ (должен\ быть\ уникальным)}} +\DoxyCodeLine{00127\ \ \ \ \ QString\ password\ =\ params[3];\ \ \textcolor{comment}{//\ Пароль}} +\DoxyCodeLine{00128\ } +\DoxyCodeLine{00129\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00130\ } +\DoxyCodeLine{00131\ \ \ \ \ \textcolor{comment}{//\ 3️⃣\ Проверка,\ не\ занят\ ли\ email}} +\DoxyCodeLine{00132\ \ \ \ \ QSqlQuery\ checkQuery\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_a4aa9edfd87be83120492e7b5c8de6151}{executeQuery}}(} +\DoxyCodeLine{00133\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}SELECT\ id\ FROM\ users\ WHERE\ email\ =\ :email"{}},} +\DoxyCodeLine{00134\ \ \ \ \ \ \ \ \ \{\{\textcolor{stringliteral}{"{}:email"{}},\ email\}\}} +\DoxyCodeLine{00135\ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00136\ } +\DoxyCodeLine{00137\ \ \ \ \ \textcolor{comment}{//\ Если\ запрос\ не\ выполнился\ (ошибка\ БД)}} +\DoxyCodeLine{00138\ \ \ \ \ \textcolor{keywordflow}{if}\ (!checkQuery.exec())\ \{} +\DoxyCodeLine{00139\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Ошибка\ при\ проверке\ email\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00140\ \ \ \ \ \}} +\DoxyCodeLine{00141\ } +\DoxyCodeLine{00142\ \ \ \ \ \textcolor{comment}{//\ Если\ email\ уже\ существует\ (найдена\ запись)}} +\DoxyCodeLine{00143\ \ \ \ \ \textcolor{keywordflow}{if}\ (checkQuery.next())\ \{} +\DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Пользователь\ с\ таким\ email\ уже\ зарегистрирован\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00145\ \ \ \ \ \}} +\DoxyCodeLine{00146\ } +\DoxyCodeLine{00147\ \ \ \ \ \textcolor{comment}{//\ 4️⃣\ Попытка\ добавить\ пользователя}} +\DoxyCodeLine{00148\ \ \ \ \ \textcolor{keywordtype}{bool}\ success\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_af17db97dfc40b0fa48b3ed9abeacca76}{addUser}}(name,\ email,\ password,\ \textcolor{keyword}{false});} +\DoxyCodeLine{00149\ } +\DoxyCodeLine{00150\ \ \ \ \ \textcolor{keywordflow}{if}\ (success)\ \{} +\DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ 5️⃣\ Обновление\ статистики\ (увеличиваем\ счетчик\ регистраций)}} +\DoxyCodeLine{00152\ \ \ \ \ \ \ \ \ QVariantMap\ stats\ =\ db-\/>\mbox{\hyperlink{class_data_base_singleton_aad20b90cdb02aab3df1f27a9e4f882a3}{getStatistics}}();} +\DoxyCodeLine{00153\ \ \ \ \ \ \ \ \ db-\/>\mbox{\hyperlink{class_data_base_singleton_ab2877d5184cd7af28f1ea3b31f523280}{updateStatistics}}(} +\DoxyCodeLine{00154\ \ \ \ \ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}registrations"{}}].toInt()\ +\ 1,\ \ \textcolor{comment}{//\ +1\ новая\ регистрация}} +\DoxyCodeLine{00155\ \ \ \ \ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}visits"{}}].toInt(),\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Визиты\ без\ изменений}} +\DoxyCodeLine{00156\ \ \ \ \ \ \ \ \ \ \ \ \ stats[\textcolor{stringliteral}{"{}generations"{}}].toInt()\ \ \ \ \ \ \ \ \textcolor{comment}{//\ Генерации\ без\ изменений}} +\DoxyCodeLine{00157\ \ \ \ \ \ \ \ \ \ \ \ \ );} +\DoxyCodeLine{00158\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_success//Регистрация\ прошла\ успешно\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00159\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{} +\DoxyCodeLine{00160\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Если\ INSERT\ не\ сработал\ (например,\ из-\/за\ UNIQUE\ INDEX)}} +\DoxyCodeLine{00161\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}reg\_failed//Ошибка\ при\ регистрации\ (возможно,\ email\ уже\ занят)\(\backslash\)r\(\backslash\)n"{}};} +\DoxyCodeLine{00162\ \ \ \ \ \}} +\DoxyCodeLine{00163\ \}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/func2serv_8h__dep__incl.dot b/docs/doxygen/latex/func2serv_8h__dep__incl.dot new file mode 100644 index 0000000..4882592 --- /dev/null +++ b/docs/doxygen/latex/func2serv_8h__dep__incl.dot @@ -0,0 +1,12 @@ +digraph "server/func2serv.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/func2serv.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge3_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="server/func2serv.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8cpp.html",tooltip=" "]; + Node1 -> Node3 [id="edge4_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="server/mytcpserver.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8cpp.html",tooltip=" "]; +} diff --git a/docs/doxygen/latex/func2serv_8h__dep__incl.md5 b/docs/doxygen/latex/func2serv_8h__dep__incl.md5 new file mode 100644 index 0000000..b989e6b --- /dev/null +++ b/docs/doxygen/latex/func2serv_8h__dep__incl.md5 @@ -0,0 +1 @@ +e9af482e3c4678cad447920919cd1620 \ No newline at end of file diff --git a/docs/doxygen/latex/func2serv_8h__dep__incl.pdf b/docs/doxygen/latex/func2serv_8h__dep__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2cfb29384250e7c97f966115ac4cc4b4e8c1c9ec GIT binary patch literal 14666 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

XPi7m{qaeR?Iv%ENx zByYzF#{|yS=L#s~UTCc>=Dd?9_1skV_c^}D9kBwYbC4y!PoK33nd3f_Lbto?c8m@zBlOMj^CFg4DWvUtN zNOX{xuci~2Cl%UZuB_F^E}WID(I|{B?d}Q38xuMinfs^W^6K;a%3);YHd;s^|I&|4 z+`Pe12s%$x5KR-tyCvqtMV5}JOWqN5lwmhf`3#iHGwdj6L$rl(el+FUAf^E+>Q3qg zn%r^5b;34UVgwOKs74OfyPk#*6~z+WR3XY*)2j)QT39qlhBCDt58H^CRXRiCkgRgM04j9FdAfSY2|3iDd1^ z5FMJlznV-Tl8sYeUnUf$uP!LfN?8)GG`EVP8D#G1&scJH? zPv&U5>yxtSZp%J9HO$v;I#zok+e*l-%Sbez(Z!NPEP{={UnknVC9X4;Pr*NCZ(|*s zPj171|GuydhRcWGn3kpPODoY`1}U8iR_82{-`Ho=@8+$zoJmIPA$Vk+6J7B?OsCd4 z^?umE{i^y{ly>)3?Oe3a++5S;B}!C-U49LtCP6M|OmFB6oDmZvhtfwN@~s}{acQL` zYQK0~{P^`|sr=_yP@#Trg604iVBNcScYkRqqlUxIKEu0~7>YMi$1eN)Xv5Dlvt>y8 zhN;6~LID@WS5viT8l}&E;+NUPWFhO}0a$x1*$dLo=H<5GUN%r9;>PLYz7^i|p1B|= zL(MPG5N$_(_9-eux@iG7^}fw-bp*^dy>&}z^M*_Bat8B!gHjKSwLoo^b6^=@_bmuw zp5WhF@Os_B_SeAX4U9D|z_>4<9LT!7Ap)8SzU6|!o`X?K*8C#aE2y99@Ywc;a-oJx z&o%$B!v?iN68NiG*4-6x{?Fp2Bx|)liuFJk}# z0~PAsHPF5Ch=W=&adePRNqM>&QhU<9Y! z)FyD?Rt-A9_R{DVz@K;W(m9--cj|afcR9HNC)~c&Roe2c_$$#Te@{!4Cit#UD<@kU zQz?rTTcuDaR#-awp7Fx0)Pzw`_W)g&TM7r+hhZS36INaLlCVQ&D3BYP)?$XD%#Hr;m56Ar1RU6B#YlLwgcfvyL!GcgX zGl2+iSR-zOWXH$Z%*hxKOqd?-HZH0u?kFzi6MUGUp$Eo*p(4xJKwk0SQ%xo$|1wS~ z%6#h~@sWQ30fk@4&zxfaJf^E#wI|-3&S=Z`Mb(q3PuD?;=6zn@+)ZRnWk+lDMf_I` zEKn#A-pwAYEggl^}Gu)loY=XG_*nJMFlA(Zp=^LQtlUtmp)%!4^xY5{(p# z4~>d5QZkwM`NAwcX&|7YiCK}+7)kA_?nNPeB%L&!OkGGP^hKi%rW1Q<(QjQtIS9So zASOox{ZyRzLTj2o)kRRWjaTZy^@}&cQ5DHrYTP;X5pvu)-*jcdd9Vq1WPWA|#DPh< z8p@GhsEeRj+d|?w>=AO}x$tyl94&{?&GYx_O(`;kr<28^-dl-8rDsh`0cmz(mfTpL zEz|)C7IIH{G0H+f|LM4~rI5drEv=xJ(Ift<0Mlj^(##8Xl`SVMKA(g}!*77l@Yd5JtGzG-(0VEFf6yb6 z`o1G}L&#FNnbQRVB=(Mah~62Elht1*cs9W6GS2S1Wv-_H_I(X9x}K&H!+0P%ve&y+ zxz^(4FAksa)wo)lnVgt4Q$@}L`OxAe%1DHJ(&Pi~_ym!`y;9VL0|Y)=dK%>68Pwm4 zNe9D3gmyGC{cznBy(A8V6uUOrG`yUU7AE)Y=Bn8p_U&GPXofUklsT;3U6Kqkbo#JW z@eF|xq|ni$)oj@R>f3#yS;ypIYpCs@7NFr$M9ZiZ3!KBxBGAIk`gFzti48M%x47SF zXuFwUC>Lo>=xuJ`fQU?zK`P@=a{%R0{F#p)5B8HzO&+aKN_k;hyDLMRR@+sZlU^yK z0nY5+@e5D!dR6Kjc83(x(VbVN{;UfBVfJY?ZNXRsZ{uo;wHS6(Rtim&<;by0ezC*5 zJ|bZZ+YAkbjP3B$4>Lv-erEdALgaj4*1~s?{D>AA2E@6jw$g_Q&O2&TMJ;ys{R|x; ztM7ZKxjXP;9d2~c$%iAGo|e>R`~ZDTZ~vvsL^ZEtM+FYLid7cR3oNPgH*R_7-@9bp zowOei@-z$hxzBt}>2y@!i`OBJN_FN*7j2{Ysp3Y_nCtWQ(;w$4)h`pN3ezs;be}2i z)MSK20;Ad@NXvbnyf}YSV&Q|_EQMJ0jH|%>37M<4+--!N=OK+D^j$Vwz}RCCG{gZ0 z+|G%f!Q$eij^>c(DtyHO-^rRZ=L8*S7cLwaTTYD*^>P zi{gV%R^cPPj8?{83R;SehXOco6hrbVE!Ny)Y%u;H{HN$)moLvrfzq@fP1BcTy@SSZ zd|sA@LHiD)*6?iEq;-ngTYiHtzE=r*^kN%)*vB>zOmH039f{gq#cj!I3h*4a!qz)4 zDeLNu^`Gq%cuHAjr%+FFIos=wvpVhYj>?_xAJ{oFIn;-rGSu(*=hP~^@K4Gk@6`IA zGK%DPeBXsXou=sX&khzf6ixeCC80K*dE}J34_i|?BPxtM=pG0LRE-)NMh|Qkz1`|W z2dc%C5vUE8Iat@yBDB}bX?Rv;CS3@AcrT+dtZ9QVC*smOa7WNR(~?herx#01zg!a! z$A=}c@M{w01b@d$qSxy-B6FMKCS$wN8N2EB*hO>sdl6=C8Vwsh0mg7|Y0s1zhh)2OtcM&xr@Tk|#nwn4HiDK5L z4(7Sd9yH{EpHWInG1g{GD!rFf%u^Ez?xeLy!VluH6=9ySqKE$lbo@gHize^+?_ zT?@{_$qD>tIr#q+#{XU9{Z`}sU(3PY%H02nLFg%s+VuiZzusVZ%c8^+B_xQ}(W@Qx zhYP4S6K{S?Af3YnIbCj~nii-YcblbU%lzK?}#$!+VeTKs-giSvS zhX8Ki$fZ5G>wP$&%;r25xV7lX`>`nSm<;Ct6GxLj{U{m*9IUL_f|UW!gmE|vhK?LL=X=-V1;qqshKT}j(Ol{Qx+<(pg-H`md@!N(s-oTUYUJ_F%G zW@BY$V*&ij>F*gF9Gr|S9IR~Y?Ehu@e_Q(hzmMZBw*RK^-%R-rhH$g7F)}lAalgSV z|JM6&4Yq$7^rqln*8G=Yf2n>`{x;%IX1!&$y_%inZ>kEw@_PsRx7h#o#lOd1;eWw1 zZ`t}cs`UoX{FPjP(KDR?Nbvs$z*VU#7q!BS`SnEOtB4E+d@Z?7U3*BVoN|ik$~F%T ze^OydWJVfgO8j2o<3q9uuj^1LF=~&;t;smwINQ5ubVFRnJgp$=cjCsF5Hfg1-%1OZ zFWJSDgfo~$No2V5Sx{fX3LXjb$4k{w_l%11A;G4MTWvQH6u&8cQ^`wdtE5MD@#bB2 z)KFUv+jD&$hd$QRdOgIo*0yv8sV*Lr##S!ww^da5dj`G6lKZ68p=}4c{aULHO=zOq z?zhmybr$m;X=NZsF`Ip(fM_t{$S@I)9JMnVC%;`cl&nd(v zOQ1&prY1@*qt0yO)|n8I64TM@XF`jIvR}0z<0M)ae*(P)ekjI=j=saGMi$ufhM(#g z1Rb`8tjzKG?D#{`CTxg_9gVKe7-E5IcuE&COJfa7a>aU2G3cEebRaBQbuLVmFuad6 zl+lINjxX>#M}?Y#a+h@qKbfJ;Loeo(cS4vtF1DLYf-Bf=#Z&F96gRXRuMeJzzN+tqYiMf zrx-Lft2AP&6W&&Fop;iZZKP^&x9u4~>CzGY@6Gv7di~>i$-&C`_tld1U*W00HfK#` zQ?oxi!QTiW`=8eTjiXYr^fCp!E%;EueQg&wc0M_3i z*`F`RKQFlyW9@JOA8;WyU)*z0P;FOx24H&TKJ75ukzk*jo`At;7~Y^s!UjCJmVm`a ziKfB!r1J-SrgXE?V2y!sjA|Kbz#x`%PwXV=rEU5J#L_p(uUV{%VY__C(Sor4za8Q1 Z0&;TkaC-ZUEbQ#etnd^RVhZB${|Avw@lyZ* literal 0 HcmV?d00001 diff --git a/docs/doxygen/latex/func2serv_8h__incl.dot b/docs/doxygen/latex/func2serv_8h__incl.dot new file mode 100644 index 0000000..9a005d4 --- /dev/null +++ b/docs/doxygen/latex/func2serv_8h__incl.dot @@ -0,0 +1,12 @@ +digraph "server/func2serv.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/func2serv.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge3_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge4_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/func2serv_8h__incl.md5 b/docs/doxygen/latex/func2serv_8h__incl.md5 new file mode 100644 index 0000000..2ba05d1 --- /dev/null +++ b/docs/doxygen/latex/func2serv_8h__incl.md5 @@ -0,0 +1 @@ +03af0dbef455092a708ef18e0ad63817 \ No newline at end of file diff --git a/docs/doxygen/latex/func2serv_8h__incl.pdf b/docs/doxygen/latex/func2serv_8h__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8c082b5ce29c70bbb1b548c3c06bbc0635b9a8d2 GIT binary patch literal 16794 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 Ic`>;E1DibX?*IS* literal 0 HcmV?d00001 diff --git a/docs/doxygen/latex/func2serv_8h_source.tex b/docs/doxygen/latex/func2serv_8h_source.tex new file mode 100644 index 0000000..960e260 --- /dev/null +++ b/docs/doxygen/latex/func2serv_8h_source.tex @@ -0,0 +1,33 @@ +\doxysection{func2serv.\+h} +\hypertarget{func2serv_8h_source}{}\label{func2serv_8h_source}\index{server/func2serv.h@{server/func2serv.h}} +\mbox{\hyperlink{func2serv_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ \textcolor{preprocessor}{\#ifndef\ FUNC2SERV\_H}} +\DoxyCodeLine{00002\ \textcolor{preprocessor}{\#define\ FUNC2SERV\_H}} +\DoxyCodeLine{00003\ } +\DoxyCodeLine{00004\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00005\ } +\DoxyCodeLine{00006\ QByteArray\ \mbox{\hyperlink{func2serv_8h_a99bd96103155e73697cc47518a5559a4}{parsing}}(QString\ input,\ \textcolor{keywordtype}{int}\ socdes);} +\DoxyCodeLine{00007\ } +\DoxyCodeLine{00008\ QByteArray\ \mbox{\hyperlink{func2serv_8h_acbd6ff747a2b100b8f8da4a9b99d43c7}{auth}}(QStringList\ );} +\DoxyCodeLine{00009\ QByteArray\ \mbox{\hyperlink{func2serv_8h_a202f69a507a4e282bb2916fea170686f}{reg}}(QStringList);} +\DoxyCodeLine{00010\ QByteArray\ \mbox{\hyperlink{func2serv_8h_aea4bc93c1f84d34a05a2c25939dcfaac}{add\_product}}(QStringList);} +\DoxyCodeLine{00011\ QByteArray\ \mbox{\hyperlink{func2serv_8h_a0a88fbccc63c8cc890ded3a20fb71e72}{get\_stat}}(\textcolor{comment}{/*QStringList*/});} +\DoxyCodeLine{00012\ QByteArray\ \mbox{\hyperlink{func2serv_8h_a6d4386c36a7ed61c61cf3d1bad354f27}{check\_task}}(\textcolor{comment}{/*QStringList*/});} +\DoxyCodeLine{00013\ QByteArray\ \mbox{\hyperlink{func2serv_8h_aa70831eddff4b8ed7a04647778a35747}{menu\_export}}(\textcolor{comment}{/*QStringList*/});} +\DoxyCodeLine{00014\ QByteArray\ \mbox{\hyperlink{func2serv_8h_ab8096a94a4e4aaa7af0852f0ffc11c99}{get\_products}}(QString\ UserId);} +\DoxyCodeLine{00015\ QByteArray\ \mbox{\hyperlink{func2serv_8h_ab8bda875989629df9b683e881296b32d}{get\_all\_users}}();} +\DoxyCodeLine{00016\ QByteArray\ \mbox{\hyperlink{func2serv_8h_a2d521723770cde0e28bb41544394917b}{get\_stable\_stat}}();} +\DoxyCodeLine{00017\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{func2serv_8h_a8ebcc70a2024aab70883f094fc35849e}{get\_user\_count}}();} +\DoxyCodeLine{00018\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{func2serv_8h_a4ddd067c5a29f76aead93c977a05113a}{get\_product\_count}}();} +\DoxyCodeLine{00019\ QByteArray\ \mbox{\hyperlink{func2serv_8h_a8a2ae0ff8263d70f4e0f30d6b0d89af7}{get\_dynamic\_stat}}();} +\DoxyCodeLine{00020\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{func2serv_8h_a4d269e13002c5cded37bee9ade854d93}{get\_weekly\_logins}}();} +\DoxyCodeLine{00021\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{func2serv_8h_a2d6f70d14e474616a4a16a72485c2f0e}{get\_monthly\_logins}}();} +\DoxyCodeLine{00022\ QByteArray\ \mbox{\hyperlink{func2serv_8h_a6496e445a644cca89c6252f6e7adecb0}{add\_favorite\_ration}}(\textcolor{keyword}{const}\ QStringList\&\ container);} +\DoxyCodeLine{00023\ \textcolor{keywordtype}{bool}\ \mbox{\hyperlink{func2serv_8h_a064e99d59eaa1d8cccef20b3192df015}{add\_ration\_to\_favorites}}(\textcolor{keyword}{const}\ QString\&\ userId,\ \textcolor{keyword}{const}\ QString\&\ rationId);} +\DoxyCodeLine{00024\ } +\DoxyCodeLine{00025\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00026\ } +\DoxyCodeLine{00027\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ FUNC2SERV\_H}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/hierarchy.tex b/docs/doxygen/latex/hierarchy.tex new file mode 100644 index 0000000..3860e64 --- /dev/null +++ b/docs/doxygen/latex/hierarchy.tex @@ -0,0 +1,8 @@ +\doxysection{Class Hierarchy} +This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList} +\item \contentsline{section}{Data\+Base\+Singleton}{\pageref{class_data_base_singleton}}{} +\item QObject\begin{DoxyCompactList} +\item \contentsline{section}{My\+Tcp\+Server}{\pageref{class_my_tcp_server}}{} +\end{DoxyCompactList} +\item \contentsline{section}{Singleton\+Destroyer}{\pageref{class_singleton_destroyer}}{} +\end{DoxyCompactList} diff --git a/docs/doxygen/latex/longtable_doxygen.sty b/docs/doxygen/latex/longtable_doxygen.sty new file mode 100644 index 0000000..39a44b8 --- /dev/null +++ b/docs/doxygen/latex/longtable_doxygen.sty @@ -0,0 +1,459 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \global\advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \ifvoid\LT@foot\else + \global\advance\vsize\ht\LT@foot + \global\advance\@colroom\ht\LT@foot + \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@ + \fi + \endgroup + \global\@mparbottom\z@ + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@\ht\LT@foot + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \unvbox\z@\ifvoid\LT@lastfoot\copy\LT@foot\else\box\LT@lastfoot\fi + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +%% added \long to prevent: +% LaTeX Warning: Command \LT@p@ftntext has changed. +% +% from the original repository (https://github.com/latex3/latex2e/blob/develop/required/tools/longtable.dtx): +% \changes{v4.15}{2021/03/28} +% {make long for gh/364} +% Inside the `p' column, just save up the footnote text in a token +% register. +\long\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/docs/doxygen/latex/main_8cpp.tex b/docs/doxygen/latex/main_8cpp.tex new file mode 100644 index 0000000..2253d64 --- /dev/null +++ b/docs/doxygen/latex/main_8cpp.tex @@ -0,0 +1,48 @@ +\doxysection{server/main.cpp File Reference} +\hypertarget{main_8cpp}{}\label{main_8cpp}\index{server/main.cpp@{server/main.cpp}} +{\ttfamily \#include $<$QCore\+Application$>$}\newline +{\ttfamily \#include $<$QObject$>$}\newline +{\ttfamily \#include $<$QVariant$>$}\newline +{\ttfamily \#include $<$QSql\+Database$>$}\newline +{\ttfamily \#include $<$QSql\+Query$>$}\newline +{\ttfamily \#include "{}mytcpserver.\+h"{}}\newline +{\ttfamily \#include "{}databasesingleton.\+h"{}}\newline +Include dependency graph for main.\+cpp\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{main_8cpp__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \mbox{\hyperlink{main_8cpp_a0ddf1224851353fc92bfbff6f499fa97}{main}} (int argc, char \texorpdfstring{$\ast$}{*}argv\mbox{[}$\,$\mbox{]}) +\end{DoxyCompactItemize} + + +\doxysubsection{Function Documentation} +\Hypertarget{main_8cpp_a0ddf1224851353fc92bfbff6f499fa97}\index{main.cpp@{main.cpp}!main@{main}} +\index{main@{main}!main.cpp@{main.cpp}} +\doxysubsubsection{\texorpdfstring{main()}{main()}} +{\footnotesize\ttfamily \label{main_8cpp_a0ddf1224851353fc92bfbff6f499fa97} +int main (\begin{DoxyParamCaption}\item[{int}]{argc}{, }\item[{char \texorpdfstring{$\ast$}{*}}]{argv}{\mbox{[}$\,$\mbox{]}}\end{DoxyParamCaption})} + + +\begin{DoxyCode}{0} +\DoxyCodeLine{00011\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \{} +\DoxyCodeLine{00012\ \ \ \ \ QCoreApplication\ a(argc,\ argv);} +\DoxyCodeLine{00013\ } +\DoxyCodeLine{00014\ \ \ \ \ \textcolor{comment}{//\ Инициализация\ БД}} +\DoxyCodeLine{00015\ \ \ \ \ \mbox{\hyperlink{class_data_base_singleton}{DataBaseSingleton}}*\ db\ =\ \mbox{\hyperlink{class_data_base_singleton_ae1a24c20c524fd67554e1ffe66319ede}{DataBaseSingleton::getInstance}}();} +\DoxyCodeLine{00016\ \ \ \ \ \textcolor{keywordflow}{if}\ (!db-\/>\mbox{\hyperlink{class_data_base_singleton_a59bda63308000a018c5bdc1989582e50}{initialize}}(\textcolor{stringliteral}{"{}Easyweek.db"{}}))\ \{} +\DoxyCodeLine{00017\ \ \ \ \ \ \ \ \ qFatal(\textcolor{stringliteral}{"{}Failed\ to\ initialize\ database"{}});} +\DoxyCodeLine{00018\ \ \ \ \ \}} +\DoxyCodeLine{00019\ } +\DoxyCodeLine{00020\ } +\DoxyCodeLine{00021\ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server}{MyTcpServer}}\ myserv;} +\DoxyCodeLine{00022\ \ \ \ \ \textcolor{keywordflow}{return}\ a.exec();} +\DoxyCodeLine{00023\ \}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/main_8cpp__incl.dot b/docs/doxygen/latex/main_8cpp__incl.dot new file mode 100644 index 0000000..3613b35 --- /dev/null +++ b/docs/doxygen/latex/main_8cpp__incl.dot @@ -0,0 +1,44 @@ +digraph "server/main.cpp" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/main.cpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge21_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QCoreApplication",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge22_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge23_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QVariant",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge24_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QSqlDatabase",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge25_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QSqlQuery",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge26_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="mytcpserver.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8h.html",tooltip=" "]; + Node7 -> Node3 [id="edge27_Node000007_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node7 -> Node8 [id="edge28_Node000007_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QTcpServer",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node9 [id="edge29_Node000007_Node000009",color="steelblue1",style="solid",tooltip=" "]; + Node9 [id="Node000009",label="QTcpSocket",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node10 [id="edge30_Node000007_Node000010",color="steelblue1",style="solid",tooltip=" "]; + Node10 [id="Node000010",label="QtNetwork",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node11 [id="edge31_Node000007_Node000011",color="steelblue1",style="solid",tooltip=" "]; + Node11 [id="Node000011",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node12 [id="edge32_Node000007_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node12 [id="Node000012",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node7 -> Node13 [id="edge33_Node000007_Node000013",color="steelblue1",style="solid",tooltip=" "]; + Node13 [id="Node000013",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node14 [id="edge34_Node000001_Node000014",color="steelblue1",style="solid",tooltip=" "]; + Node14 [id="Node000014",label="databasesingleton.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$databasesingleton_8h.html",tooltip=" "]; + Node14 -> Node5 [id="edge35_Node000014_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node14 -> Node6 [id="edge36_Node000014_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node14 -> Node15 [id="edge37_Node000014_Node000015",color="steelblue1",style="solid",tooltip=" "]; + Node15 [id="Node000015",label="QSqlError",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node14 -> Node12 [id="edge38_Node000014_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node14 -> Node16 [id="edge39_Node000014_Node000016",color="steelblue1",style="solid",tooltip=" "]; + Node16 [id="Node000016",label="QVariantMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node14 -> Node17 [id="edge40_Node000014_Node000017",color="steelblue1",style="solid",tooltip=" "]; + Node17 [id="Node000017",label="QVector",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/main_8cpp__incl.md5 b/docs/doxygen/latex/main_8cpp__incl.md5 new file mode 100644 index 0000000..145ef3f --- /dev/null +++ b/docs/doxygen/latex/main_8cpp__incl.md5 @@ -0,0 +1 @@ +4e0b82e733d180a5ef38fec20b2c5087 \ No newline at end of file diff --git a/docs/doxygen/latex/main_8cpp__incl.pdf b/docs/doxygen/latex/main_8cpp__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c2b0affb8c95f212427502b8e286dcbc8be28f37 GIT binary patch literal 25097 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\newline +{\ttfamily \#include $<$QCore\+Application$>$}\newline +{\ttfamily \#include $<$QString$>$}\newline +{\ttfamily \#include "{}func2serv.\+h"{}}\newline +Include dependency graph for mytcpserver.\+cpp\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{mytcpserver_8cpp__incl} +\end{center} +\end{figure} diff --git a/docs/doxygen/latex/mytcpserver_8cpp__incl.dot b/docs/doxygen/latex/mytcpserver_8cpp__incl.dot new file mode 100644 index 0000000..a4fcde4 --- /dev/null +++ b/docs/doxygen/latex/mytcpserver_8cpp__incl.dot @@ -0,0 +1,33 @@ +digraph "server/mytcpserver.cpp" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/mytcpserver.cpp",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge15_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="mytcpserver.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8h.html",tooltip=" "]; + Node2 -> Node3 [id="edge16_Node000002_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node4 [id="edge17_Node000002_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QTcpServer",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node5 [id="edge18_Node000002_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QTcpSocket",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node6 [id="edge19_Node000002_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QtNetwork",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node7 [id="edge20_Node000002_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node8 [id="edge21_Node000002_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node2 -> Node9 [id="edge22_Node000002_Node000009",color="steelblue1",style="solid",tooltip=" "]; + Node9 [id="Node000009",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node8 [id="edge23_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node1 -> Node10 [id="edge24_Node000001_Node000010",color="steelblue1",style="solid",tooltip=" "]; + Node10 [id="Node000010",label="QCoreApplication",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node11 [id="edge25_Node000001_Node000011",color="steelblue1",style="solid",tooltip=" "]; + Node11 [id="Node000011",label="QString",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node12 [id="edge26_Node000001_Node000012",color="steelblue1",style="solid",tooltip=" "]; + Node12 [id="Node000012",label="func2serv.h",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$func2serv_8h.html",tooltip=" "]; + Node12 -> Node7 [id="edge27_Node000012_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node12 -> Node8 [id="edge28_Node000012_Node000008",color="steelblue1",style="solid",tooltip=" "]; +} diff --git a/docs/doxygen/latex/mytcpserver_8cpp__incl.md5 b/docs/doxygen/latex/mytcpserver_8cpp__incl.md5 new file mode 100644 index 0000000..a363a97 --- /dev/null +++ b/docs/doxygen/latex/mytcpserver_8cpp__incl.md5 @@ -0,0 +1 @@ +412db3576bfa7528cb375a0db2048945 \ No newline at end of file diff --git a/docs/doxygen/latex/mytcpserver_8cpp__incl.pdf b/docs/doxygen/latex/mytcpserver_8cpp__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d44cad1e9b23c3f126a893ad7e11758cbdcc260 GIT binary patch literal 24010 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 literal 0 HcmV?d00001 diff --git a/docs/doxygen/latex/mytcpserver_8h.tex b/docs/doxygen/latex/mytcpserver_8h.tex new file mode 100644 index 0000000..acfbac7 --- /dev/null +++ b/docs/doxygen/latex/mytcpserver_8h.tex @@ -0,0 +1,30 @@ +\doxysection{server/mytcpserver.h File Reference} +\hypertarget{mytcpserver_8h}{}\label{mytcpserver_8h}\index{server/mytcpserver.h@{server/mytcpserver.h}} +{\ttfamily \#include $<$QObject$>$}\newline +{\ttfamily \#include $<$QTcp\+Server$>$}\newline +{\ttfamily \#include $<$QTcp\+Socket$>$}\newline +{\ttfamily \#include $<$Qt\+Network$>$}\newline +{\ttfamily \#include $<$QByte\+Array$>$}\newline +{\ttfamily \#include $<$QDebug$>$}\newline +{\ttfamily \#include $<$QMap$>$}\newline +Include dependency graph for mytcpserver.\+h\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=350pt]{mytcpserver_8h__incl} +\end{center} +\end{figure} +This graph shows which files directly or indirectly include this file\+: +\nopagebreak +\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[width=302pt]{mytcpserver_8h__dep__incl} +\end{center} +\end{figure} +\doxysubsubsection*{Classes} +\begin{DoxyCompactItemize} +\item +class \mbox{\hyperlink{class_my_tcp_server}{My\+Tcp\+Server}} +\end{DoxyCompactItemize} diff --git a/docs/doxygen/latex/mytcpserver_8h__dep__incl.dot b/docs/doxygen/latex/mytcpserver_8h__dep__incl.dot new file mode 100644 index 0000000..318b3f3 --- /dev/null +++ b/docs/doxygen/latex/mytcpserver_8h__dep__incl.dot @@ -0,0 +1,12 @@ +digraph "server/mytcpserver.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/mytcpserver.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge3_Node000001_Node000002",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="server/main.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$main_8cpp.html",tooltip=" "]; + Node1 -> Node3 [id="edge4_Node000001_Node000003",dir="back",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="server/mytcpserver.cpp",height=0.2,width=0.4,color="grey40", fillcolor="white", style="filled",URL="$mytcpserver_8cpp.html",tooltip=" "]; +} diff --git a/docs/doxygen/latex/mytcpserver_8h__dep__incl.md5 b/docs/doxygen/latex/mytcpserver_8h__dep__incl.md5 new file mode 100644 index 0000000..f3d9660 --- /dev/null +++ b/docs/doxygen/latex/mytcpserver_8h__dep__incl.md5 @@ -0,0 +1 @@ +0602c8268bebefc975fc766eda1b3b95 \ No newline at end of file diff --git a/docs/doxygen/latex/mytcpserver_8h__dep__incl.pdf b/docs/doxygen/latex/mytcpserver_8h__dep__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c51316d4f9754f4a176f5b6b7823f506df6b9512 GIT binary patch literal 14531 zcmb_@Wmp_rvo0jKyUPH+ zLCoCB$=KoTZ3T2P7BM!oH8O_d*?!yJEP9{| zvwlo7k(^q{X1BATR;7LM@=qs!^Mofs{*m^}Ry_{Wi7za&_RWO(PH~qd6&uNI8jL{J zgm3iqq3GqhwtB znMy^5!=>g%Ma4=WnGFpBh|l6Y!nXXzZJLo7{F7~?bCf)YWPKO;{CsCw&gFnz9JjPv z!kTC6828|GZH)eM$6M{UBY%7E_xsI%ES#Lb+kZ=FRK>!ng!4UXXzPb9X;m?vm%+|)~KYE+cG14&tn3(>KmA77R_g||qG5@n1fI->K z&KSTTXJDb^Wc|nDe}x$n%im)eWC2Wnw1}BII648?{;L1)vB$zH&$to37ry%r47wLQ z^uHV8kNN+y1QW+UTVwl=t^K_d_J4NrKSlg+KJi3;CEP?P6;q?V>tVfHfmKQY$;VG{F};Is<5YMxb=J0NQkHe?19`X})>g7rz4Y zIrd?A5dlTB_&v*bMc0XGiU}dSr5~Q;KX{}v2Ija~;v)}Iyw6`Qz0dDG?vKVZ)41w# zxW=^cVZerez`y%8R&}&=5t2uI22SOT?MtuWeQI)R8p7WUpKHYI>vTJcsHV&INLdNf zy+8>jb4fF=({*+K)p5HfD90e{vaGdD74*_D(FOg@y02ZbjImF_*cE@KjZvrlsB}WB z=%^qmm8iGA(dOlf9+0Hobw^N?QF*jfD;RH;1O5}}lWViE(6PDcr<9|Qx6GmjW*jiP z8IeCLyp2LmN$%y(_ifi#mWSH699s_U0`J4B8Q^G z6{4%6T2U^zw$$FV`-fN95D`;Z`}Q%m)IMVs*HZ(DACpAx>hYJNP954xR#$8^4Al*_ z$*Pztn5t?JfL2KJwNwL*w+t6$pbuW znKbExyZht^N}6#^D@J({@7KP$RJxS7RNbel)w;c3yIn(WH|X|gN^#FAjv&G2x}gS) zkfkTY(TI>KlMKN^=AlTTjgSS%s})r$nk@f5y7{b#ZCcwJcAmB#w2i$)7b)sOGxI}#no9tJ$uz^PvlKzptZ)X9@OEa zM@zYBVw9)NjBUv)lwn8)x}hQA%HCO6;2#)7SEDlTXs}DL4K${gsn9i2Tm53^L(LdH zunyb7PESDWH!;qyPSfyUAF(oVKB;KTL-rK`(#v1Seyh9`x!`oZ8Rx^6~)KDhIk-p{2!;cX3Lr(~r%S8_N$EpKHo{$xii)n<1^1)C&^1b8C zb}!_^M49u_Fj{W3X8e>MO*CCoQ@kw%MRsM*j1q4P7jium2K#ku(Ro{Dt-XE4vmbhH z_oxRwN?BD|l@&|fpW`p(j$YbgEacLadhZ;XRb14ocC*vZ@@ERK#7GDq(JDcg~ zMwAS|N6WN_i|Hw9SY5zCElxE*z8*8uvpd6EIv+=^QV83Sy2Z1k5~5mz_g%fv(%QFI zJomcs$z^VQyOzD+;56B1d)Vh*>VOC7M3-H)g0u?gTJ{g!V&2gk)HSbOYiCs=()a8( zohsf@DJzKN=*{)@{2URv%a3@3t!EZ98h5vi)?;nKPuy8l7}@(yfD-+RPOA?@IG>{p z+iA;8LVZk(neUZ_GL(h4{26LWVndSL4#s`*)s8J9hYm(H207OESpKR^S?O6zMsJ*Sh%2~#)=A14|-_^@{?Lb~svzGgKDa)k)yt_HZ{O$vy=*vauSds$b!U(9wA zfZp!Qj^d*u)+e$O7-)xg+MXFk)^(seL zlBcs2(LyIEdeh~=^Ll4)xsgv&bCsWn6r2==g__XKXU9==)x!?6<$lh*j7S(uB&&rG z_tJPrkbBAzDN`{{7$Xj1z`{PgSzepk28%p@Ri71yj_XT4B*c5BM{?dc0ruoGW)$JL zbYTaxINmzByPtd{@ryVfpA0)Sn2glrlcm$&}Cp@ zxSdFo32E@KnVsewlQJIq#fHE;paMvg&QaXYIPAow)wkar%S9qwk*Gm{<*f>Mlnn1d zxHaE3j(hNK$4Dt=S9^Uf#t4q(LP zCpYLtL0e3lnRC_~Tpt)@oG!9g45GN45YyY2E1C=GM?zPnUo@T{d|>x?95SO%z*Ds0 zfGuL#@aa}R&5_g^WLY#ypUL@L$i9bsCNvtvWFLfOwwoB5^WWuC_pgAPEc}$U7>FQ$ zsS7a=wQ06v2JtaZfm@HbLTnBnfh7Ng70(!jN>tYw&HsH|Tn{3YR9Hbu)H@WNptRHo zg!Cd@kEoxifKIRUN;PrkP;;>)i-O^s5nEj0?C;k|E(k6=Zn8Ni60qT#tiUwYh`D7; zmxDpkFDnnz(e^}G1F8pik{z^f>hx~w z7wt+)(7y3zB%h-%NTZnnesZjLVkAysB|b>2&Q1&K`(RE_675P{&~n{HW~BSh4Yr*) zmd#`@oq57aY|TW}iSl=`JLE9RfrLTiRUbuX+oSJgKdt2h#A4*w;DoBX8Frr(dcGox)DVE@zn{p4Otb4fmI4Y4w{4fmB$SfR--IKuc4~)d`5oEM{_Z4wf{_ zl+^ZtT88GQMizxEW&w$zT*~}R@t2P=snZ?Fs&Zy2F%PbCom1JK?UXV;rHdMJd~vrs z2^w;#-2VIc%XeuSIeZj%Z^elP|Bq7rq6B@hItZn7QO8Co;T_IcooZ+^u+$0~FiZNJ zV>EJOW5+0iJ-mT|)(-V5&KBLc7Tp>LrY$-o^5Nv3UfgS*xZzCrK}NieTWWa0kx?Tk zq2!(wCZ6J!w!=wYGmiQBdGY+)I!qp}FC1z@(TQKJ*ti{gW$RYO36ixnxdCjV1H5v(oA!-Pb)%Y6s zmY&~pbUfu3Lj{~Fad_H(vmP*BKI*^da7?DRzy%@)EoEMTm0?(>VTmo$NIW}W6)fdtOd6}NziJTgkSFZS4-qkorx43ZaCerwO-Rym;Y%DB$ zL%(OHPQi?vg;d{_ohmx##-+Paf0HSzpGC>hRjTT_9QcIv5km?FADL3rDbgr4C^U)d zGo%O$xma|V#Azv$+m>oRnL3}{PB$bUpRPN3v$(VsPI`xIM`tc)A`i=@W-B2rB7fqK z3iVNa9B_DsW`$aoZR#SiaX&Hr( zyK|CuZGe<6vB>zyIjhvW3w>1*%>Ik z!r~*DDH~yVom@{Sbm$2uGooa4wWCh!4`-^$eZ**b_42~j;Gpoi0+W2cb4Alb!G?~T zgozc5%r`yJsh^&Y8|CuWBPdY5aOAk1J%jdocISx|4|t{z%Tj8&;33$Qw;PgtKk=P< z_m*Y#uKGKx!z}!{X!yIhm|(FvHjJ3{B~4z3-2^G~8rupwJz7HVi*#$PszS>y(Cpga zLT{qAP9`Wa`H%>Lqb2>A|CZFtaI_auqnQsrrPdDDt4P0jX;|jaK*YTRB6N`y9b7w{ z$smC|MUQbYk(7!QOI%F#6Z7;8NpYZwLK&G6g=ELq#f6oU_1yE>^XZ6OwOfxH`xn#~ z`;G$BHGCx;_oAQ$H^H4c5(=eTYTj6}W}g9Nh=iih%vl+k^rM!fO4BB?m6=Zx^S&W6 zM|x@275SXJE{a?eba(E%J1y?|GR%=s@$X-5KJF$Z`o+b2y}WypOAuI5q}*!2Ru2GxvVjPRu^~ON;)!9c*rxwmdRtj6k568Lwaa`Kj1fn zs)=eX!|k_eUNEU@T#FnE)?gc##1L?L`0S4SG}oVA#&OZWb{)iat+Lz1`vk}SoNwDc zKDSqYr6^AR-lX9>W4dHFKb>j12k^U)i>Yk!^YhJfuW+(>lKAyFRD_zYuo}Fj(|jt2 zx;tG=+CA?5*z>qa%A@MFxNN#UtA4;yKafe({oQweR4aCLZJd1K zkTrlQ7iDAQ#;jFEqXCV}aJeX-c2mSK;PH?O7bAldydD#lB%Q5yKGe*df?U&mcDUeY zR7$vpj2e1W4OZF+PWVoZ?l7%SB~W>+plr8@VH8fwF(T#=whcGeJSArt#~pfqIMPN^ z5BJ1&R_;PY?}9|Z1em%jZ)2r_W0lqg5ria3lt$1u9ksvEu_)F_e4w;oNt1|l!y(7q zR2$-SV|4Q6=bV{0cR728@J#`sS3&^yQ&D~XWM$s;yaFy|*HVwlmp!y_Sn{u({IBCI z=aC@8Z9SXk#Wuf=wTzS#&!Z`=xfRjIwj5rut1ys~P}8Z`LerPkh^nsJ-lm6+>FBsw z1Cp!C_i)1*D`o3es)HX>sOZ9RRJK1Nelr~J0gbMVf(Ai|NA$Du`<2%^N1Z>hS+s3z zT$-NeaOTq0Xw+KfpQ682aj##ur`)^uNbZmLqgyCCLk@(Zjbu^HQO^uWCy|fl$h@ZU z=cS&g_U!Jfy{GS*g;2E>ZVWn~Fo3rm+?oYdtZi*GD;Rw~OY|^Sn8jHy!{df!ZrfsG zx+L?MK4fSfj!W}2$e=0SK^K=bXKx(3GKp6bE$b8m6$XFDm*%Ee}TB;kwLCIW6KO> z_`eigZw{oZIv$tGy0)3m0Z`l;Ep#<7T~vt3Kq%uKw#WVgoFpk z*(OlvHYMQDDK3eNS?FaB$V9yEtmMKj)gGv;f==J`Bp-9=m4Pj179?>zU+oRKKgeRF z2L)ioneMiB%-RI3TDia->@I^obd*n>J&$TPBKxPsGrUD>3>S$==4C_G&K&DH`{;;6 zU69ve=Jyxmd-JVeJkKu2UQ|p$Ao7BxOSxOGV#+5(CsxUu?4(N|@lAs74 zQ*SNX3h@j7Sp3n1qggz&oywbeIh`HEJK(xl+5h9Sc%@g7@j-gS^;!8mA;GVc>}YWx z#`Z+M_U+&xmsL(r7~|=}5v4q0V@2wpFrt}lqfuCfY4h=F?1PG`s+MVqTH9qb87gzY zLnMgaLqfd}qg>V3)d%bIW@gIi3}FZTNmMd5@9 z491x6-?2t}$UCEnC&MC}_LylmkX%W3jb|GStRHFZP29>zur$oo30vmc`#|B3j$`|% z9-kYMLZw9Q8`^4r9BOj*geU75I@`x(q*pe3guU|37n*mM`qbF^HgU{h+hDRowo4B= z-_dUmtp)9K8DMc zeNWZQr}{zu+m5odh3be$-v}0OS9^cmN)2gN7#biO4_`Y+d6{VN-km;YoF`2X!KkZq zK*c6(xprN3#LE&{gOeOxiF2K;X1Tq~sK9h&#aV3eH&RENkIef;q!pv56_^7dg@$N| z5(;5b-*3$0GY{buTeIvd;*;pQ`YR~I)*q!;mQ$L4BsXWqJ?!(D_wLZXXQd0C1jass z&Dp!(TwGjZJkI2#mh$6QqS7 zdLgfsAF=P*v2S~kwLy4b@XYR=(Le>}d?RQW_unPXrcjlWY9R+HVYWrlr%64Ad{m=f zfEU%HpYp_fB^uk8hD%#xc>iag8P2b~!+ zRM=LvTilk4_dc%c^1K|LIyO$&Ytp$5kUSpMr1ZP<@HRD>>7+z2JKT+(rpQp7Cp{%i zFJiKAGvs)TIFC0jg!vQ3a6V_t8K1o@L~nc4l4gBY~t*wqe|e zqF09yk$kj=tZO`x0vl(AY|49UuzE_m+5wA3T_YIvIt1|JZzLPG4Okw{Yxj2e-Te(+ zVU|8K-|jdrMOiTI;V4X6?l|nzq7EmOmezkaYCvnJr8fHkNgr4yE*W7{hG@YjHIP>~ z7PrGZqFqH|1j-zAaKG-2E`U`=Iyu@KZh&G}v!|c+Y{7?by>bn-n>zBCF-lp2_odZ4a@I z#+G1B#J1z9G}yzN7er7{F6K7@d#_aB$Vd+c=~!;&OEDreE!r5HG0b~o{8WjjI#lL- zBnKZ6FL~D_UL8UU$Wr$mC%2G*QDP)Kki#Ie0}?hJb3fE8t`c>BDUCrpxpq6=j0ft zml`XkT$Y)CV9ekN7L9Tm>;eK5Sst9z19bJv9MJUG1ViYl>PGy0@qPhrT^N?K2W`9s z5o@EY4|I-d>j3j{1GthBGL_@d$FV_iQ>opb0D^b8`m*U<-avTY0E4Gb)T-tZKNdeP z!0id}#<$pDZpLGeT{F_Us@&ln5#OY=6L`QZWkTQSaqx_x;Gccrd!&yXz`O4axBzb% zYDQ)~Da5Asfx+J-`6~Qjgl0+%GZ&?@k13Q9KRTX_)xW}}Z>V3m5pJeBiI{SGBqeqf znXnp;$Une{G))lR`E+D)B!8oquTj4YxfkqYhy#4GkGsE|JHwOJ4Xa%qsm_j1_yXTS z1P6DG9nBa%s*DxNqQ>aWMZexhCjcHHb*fm7KRTzMWsGoi!=mdmMc>(%Kbl@4yQ6n< zz%xY5Bt#7_FK=>NHEgC_kc^OF9%M94Gdc0T#8soZwG$l6`eIh&%|C-%y?CLKJeQ;q zp?lNv(Rowv#$-xp+KcyIcs-DS{MGG>J}!!Mims6oPnkPWzwo`}U+`W^UN$|^XWnAk zVXnZ+_3?)W$WUC5>>6P%N_~kvkA)slaLCNeLv%vbk)DJp3nbcft3h24+M>8zZq;&b zk}eio64S+dBqn>6P^GX9dK^Yxw!69Sjj=O<-oR;(I)}ax&m*HS7*Hb*GGb~0U(XoM z+Cja7aEnI(G7OCnkLV4X?ws#PhYw{+{S=2cN9`1BjnftH688~^+4RW#mE=v|97IY& zn%h9xA9%}IO4v*9c@Ik*?zY9m6n3m#(k9oWbsucEO?#R zFD{GhJ_;ccft){3d!>&@I|%IO_Cec)PQbGlvBQe4YgVfL>6HX-niPFsl7`e=EKy?B zI%!jGJqVWgnPrDdyKp^@h0_H7_L?asAKjcRE8-lpKI86(&JEEgk@Y-1826qJ3xV2S zWl~9;U{-rgHr+S*Na#VDu5u6gcDfI6>jhL1;58Bm5vcaT&C2a!pty&chnh;A`}8xp zcv>Cu)sN%_U5Av1#Yg*x`^VfjF30!B>x@pME}byX8;d6_a0K+-j&|n%u@;jrc<4eoa!Q9TNwQ@JvsLpXpUVj5+rx+NmB|?Bg8PA55+N6{ zPQjgs^W97e!S_KqTL&>yrh$uF8msSW;pDob>}YO2H1*uJvR^jsNTEp31oop-tv13X z8ITNeD`k8)BPx}<*vYYaOFCeU>Rrm+xFC;7>RyXmh&pT&|iPgxx%*`0G zTeSQGL?&?JxfVu9r*g8`>>Hl^zKF^iOrDCT`U+O+fm>xrE|KI9yY6zgg&SiiLXUOjjyDMhJ*t&R#I%*uH z?P4yzjO{i~8^QK!6q;`n*(#qcGM!2%E)VA`k1WrudiS0_U)68a+qhYA-HcI)d=4F0 z?LmC$=S{K;Y|S`+qQ;@+{N}1#UBY#S$XASa+( zx775FP8}!a$-kzO!lw)U2}_&*U{?8jfZTBG8Pmf8_*~J*YS3szwwiBDu)Tv|slnJ< z8yH2!36D!!Nv~%A!CEkL#t6$vF1T|yAr2u2r$_S=vze@Hd(b?~ONwyJ^me;77ESs2 z7t%0z&x}t8XE99{Sx{ovdtuz1$XdK)(+k%RXbd!lw0Swf9^r z128Gbdz(vN297@3J;K8;Lak^2(8s0N>bPE3G{;PSgc2wV?cb_TNFo?X+@Uui??{WE zI?58<*�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 o3QDkU_CFM6967nDoEY5y0Ztdkt^fc4 literal 0 HcmV?d00001 diff --git a/docs/doxygen/latex/mytcpserver_8h__incl.dot b/docs/doxygen/latex/mytcpserver_8h__incl.dot new file mode 100644 index 0000000..4e13870 --- /dev/null +++ b/docs/doxygen/latex/mytcpserver_8h__incl.dot @@ -0,0 +1,22 @@ +digraph "server/mytcpserver.h" +{ + // LATEX_PDF_SIZE + bgcolor="transparent"; + edge [fontname=Helvetica,fontsize=10,labelfontname=Helvetica,labelfontsize=10]; + node [fontname=Helvetica,fontsize=10,shape=box,height=0.2,width=0.4]; + Node1 [id="Node000001",label="server/mytcpserver.h",height=0.2,width=0.4,color="gray40", fillcolor="grey60", style="filled", fontcolor="black",tooltip=" "]; + Node1 -> Node2 [id="edge8_Node000001_Node000002",color="steelblue1",style="solid",tooltip=" "]; + Node2 [id="Node000002",label="QObject",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node3 [id="edge9_Node000001_Node000003",color="steelblue1",style="solid",tooltip=" "]; + Node3 [id="Node000003",label="QTcpServer",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node4 [id="edge10_Node000001_Node000004",color="steelblue1",style="solid",tooltip=" "]; + Node4 [id="Node000004",label="QTcpSocket",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node5 [id="edge11_Node000001_Node000005",color="steelblue1",style="solid",tooltip=" "]; + Node5 [id="Node000005",label="QtNetwork",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node6 [id="edge12_Node000001_Node000006",color="steelblue1",style="solid",tooltip=" "]; + Node6 [id="Node000006",label="QByteArray",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node7 [id="edge13_Node000001_Node000007",color="steelblue1",style="solid",tooltip=" "]; + Node7 [id="Node000007",label="QDebug",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; + Node1 -> Node8 [id="edge14_Node000001_Node000008",color="steelblue1",style="solid",tooltip=" "]; + Node8 [id="Node000008",label="QMap",height=0.2,width=0.4,color="grey60", fillcolor="#E0E0E0", style="filled",tooltip=" "]; +} diff --git a/docs/doxygen/latex/mytcpserver_8h__incl.md5 b/docs/doxygen/latex/mytcpserver_8h__incl.md5 new file mode 100644 index 0000000..c9459f0 --- /dev/null +++ b/docs/doxygen/latex/mytcpserver_8h__incl.md5 @@ -0,0 +1 @@ +37d0d8275e50a537357b867ec81c2844 \ No newline at end of file diff --git a/docs/doxygen/latex/mytcpserver_8h__incl.pdf b/docs/doxygen/latex/mytcpserver_8h__incl.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7df3a0f2f266123cf57128300f99452aa0bcb49d GIT binary patch literal 21205 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 +\DoxyCodeLine{00004\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00007\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00008\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00010\ } +\DoxyCodeLine{00011\ \textcolor{keyword}{class\ }\mbox{\hyperlink{class_my_tcp_server_acf367c4695b4d160c7a2d25c2afaaec4}{MyTcpServer}}\ :\ \textcolor{keyword}{public}\ QObject} +\DoxyCodeLine{00012\ \{} +\DoxyCodeLine{00013\ \ \ \ \ Q\_OBJECT} +\DoxyCodeLine{00014\ \textcolor{keyword}{public}:} +\DoxyCodeLine{00015\ \ \ \ \ \textcolor{keyword}{explicit}\ \mbox{\hyperlink{class_my_tcp_server_acf367c4695b4d160c7a2d25c2afaaec4}{MyTcpServer}}(QObject\ *parent\ =\ \textcolor{keyword}{nullptr});} +\DoxyCodeLine{00016\ \ \ \ \ \mbox{\hyperlink{class_my_tcp_server_ab39e651ff7c37c152215c02c225e79ef}{\string~MyTcpServer}}();} +\DoxyCodeLine{00017\ \textcolor{keyword}{public}\ slots:} +\DoxyCodeLine{00018\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_my_tcp_server_a0ba7316ffe1a26c57fabde9e74b6c8dc}{slotNewConnection}}();} +\DoxyCodeLine{00019\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_my_tcp_server_a3e040c49dbefd65b9a58ab662fc9f7a2}{slotClientDisconnected}}();} +\DoxyCodeLine{00020\ \ \ \ \ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{class_my_tcp_server_ab4a64d2eab985d723090963f5c8a2882}{slotServerRead}}();} +\DoxyCodeLine{00021\ \textcolor{keyword}{private}:} +\DoxyCodeLine{00022\ \ \ \ \ QTcpServer\ *\ \mbox{\hyperlink{class_my_tcp_server_a7d854875e1e02887023ec9aac1a1542c}{mTcpServer}};} +\DoxyCodeLine{00023\ \ \ \ \ QTcpSocket\ *\ \mbox{\hyperlink{class_my_tcp_server_ab55c030e6eb6cf5d1acfe6d7d2bf0ed1}{mTcpSocket}};} +\DoxyCodeLine{00024\ \ \ \ \ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{class_my_tcp_server_ae0dc69dfef4f9fc3a5f031f4152e4f91}{server\_status}};} +\DoxyCodeLine{00025\ \ \ \ \ QMap\ \mbox{\hyperlink{class_my_tcp_server_aae9c5addbbedcfa39ccbe55204f473a3}{mSocketDescriptors}};\ \textcolor{comment}{//\ Хранение\ дескрипторов\ сокетов}} +\DoxyCodeLine{00026\ \};} +\DoxyCodeLine{00027\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ MYTCPSERVER\_H}} + +\end{DoxyCode} diff --git a/docs/doxygen/latex/refman.tex b/docs/doxygen/latex/refman.tex new file mode 100644 index 0000000..d4b10a7 --- /dev/null +++ b/docs/doxygen/latex/refman.tex @@ -0,0 +1,265 @@ + % Handle batch mode + % to overcome problems with too many open files + \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} + \RequirePackage{iftex} + \ifLuaTeX + \directlua{pdf.setminorversion(7)} + \fi + \ifXeTeX + \special{pdf:minorversion 7} + \fi + \ifPDFTeX + \pdfminorversion=7 + \fi + % Set document class depending on configuration + \documentclass[twoside]{book} + %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package + \usepackage{ifthen} + \ifx\requestedLaTeXdate\undefined + \usepackage{array} + \else + \usepackage{array}[=2016-10-06] + \fi + %% + % Packages required by doxygen + \makeatletter + \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} + % suppress package identification of infwarerr as it contains the word "warning" + \let\@@protected@wlog\protected@wlog + \def\protected@wlog#1{\wlog{package info suppressed}} + \RequirePackage{infwarerr} + \let\protected@wlog\@@protected@wlog + \makeatother + \IfFormatAtLeastTF{2016/01/01}{}{\usepackage{fixltx2e}} % for \textsubscript + \ifPDFTeX + \IfFormatAtLeastTF{2015/01/01}{\pdfsuppresswarningpagegroup=1}{} + \fi + \usepackage{doxygen} + \usepackage{graphicx} + \iftutex + \usepackage{fontspec} + \defaultfontfeatures{Ligatures={TeX}} + \usepackage{unicode-math} + \else + \usepackage[utf8]{inputenc} + \fi + \usepackage{makeidx} + \PassOptionsToPackage{warn}{textcomp} + \usepackage{textcomp} + \usepackage[nointegrals]{wasysym} + \usepackage{ifxetex} + % NLS support packages + % Define default fonts + % Font selection + \iftutex + \else + \usepackage[T1]{fontenc} + \fi + % set main and monospaced font + \usepackage[scaled=.90]{helvet} +\usepackage{courier} +\renewcommand{\familydefault}{\sfdefault} + \doxyallsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + % Arguments of doxygenemoji: + % 1) '::' form of the emoji, already LaTeX-escaped + % 2) file with the name of the emoji without the .png extension + % in case image exist use this otherwise use the '::' form + \newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% + } + % Page & text layout + \usepackage{geometry} + \geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% + } + \usepackage{changepage} + % Allow a bit of overflow to go unnoticed by other means + \tolerance=750 + \hfuzz=15pt + \hbadness=750 + \setlength{\emergencystretch}{15pt} + \setlength{\parindent}{0cm} + \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} + \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} + \doxynormalparskip + % Redefine paragraph/subparagraph environments, using sectsty fonts + \makeatletter + \renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% + } + \renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% + } + \makeatother + \makeatletter + \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} + \makeatother + % Headers & footers + \usepackage{fancyhdr} + \pagestyle{fancyplain} + \renewcommand{\footrulewidth}{0.4pt} + \fancypagestyle{fancyplain}{ + \fancyhf{} + \fancyhead[LE, RO]{\bfseries\thepage} + \fancyhead[LO]{\bfseries\rightmark} + \fancyhead[RE]{\bfseries\leftmark} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + } + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + \renewcommand{\headrulewidth}{0pt} + } + \pagestyle{fancyplain} + \renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% + } + \renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% + } + % ToC, LoF, LoT, bibliography, and index + % Indices & bibliography + \usepackage[numbers]{natbib} + \usepackage[titles]{tocloft} + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{5} + % creating indexes + \makeindex + \ifPDFTeX +\usepackage{newunicodechar} + \makeatletter + \def\doxynewunicodechar#1#2{% + \@tempswafalse + \edef\nuc@tempa{\detokenize{#1}}% + \if\relax\nuc@tempa\relax + \nuc@emptyargerr + \else + \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% + \nuc@check + \if@tempswa + \@namedef{u8:\nuc@tempa}{#2}% + \fi + \fi + } + \makeatother + \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus + \doxynewunicodechar{²}{${}^{2}$}% Superscript two + \doxynewunicodechar{³}{${}^{3}$}% Superscript three +\fi + % Hyperlinks + % Hyperlinks (required, but should be loaded last) + \ifPDFTeX + \usepackage[pdftex,pagebackref=true]{hyperref} + \else + \ifXeTeX + \usepackage[xetex,pagebackref=true]{hyperref} + \else + \ifLuaTeX + \usepackage[luatex,pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi + \fi + \fi + \hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode,% + pdftitle={My Project},% + pdfsubject={Project description}% + } + % Custom commands used by the header + % Custom commands + \newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% + } + % caption style definition + \usepackage{caption} + \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + % in page table of contents + \IfFormatAtLeastTF{2023/05/01}{\usepackage[deeplevels]{etoc}}{\usepackage[deeplevels]{etoc_doxygen}} + \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} + \etocsetlevel{subsubsubsection}{4} + \etocsetlevel{subsubsubsubsection}{5} + \etocsetlevel{subsubsubsubsubsection}{6} + \etocsetlevel{subsubsubsubsubsubsection}{7} + \etocsetlevel{paragraph}{8} + \etocsetlevel{subparagraph}{9} + % prevent numbers overlap the titles in toc + \renewcommand{\numberline}[1]{#1~} +% End of preamble, now comes the document contents +%===== C O N T E N T S ===== +\begin{document} + \raggedbottom + % Titlepage & ToC + % To avoid duplicate page anchors due to reuse of same numbers for + % the index (be it as roman numbers) + \hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } + \pagenumbering{alph} + \begin{titlepage} + \vspace*{7cm} + \begin{center}% + {\Large My Project}\\ + \vspace*{1cm} + {\large Generated by Doxygen 1.13.2}\\ + \end{center} + \end{titlepage} + \clearemptydoublepage + \pagenumbering{roman} + \tableofcontents + \clearemptydoublepage + \pagenumbering{arabic} + % re-enable anchors again + \hypersetup{pageanchor=true} +%--- Begin generated contents --- +\chapter{Hierarchical Index} +\input{hierarchy} +\chapter{Class Index} +\input{annotated} +\chapter{File Index} +\input{files} +\chapter{Class Documentation} +\input{class_data_base_singleton} +\input{class_my_tcp_server} +\input{class_singleton_destroyer} +\chapter{File Documentation} +\input{databasesingleton_8cpp} +\input{databasesingleton_8h} +\input{databasesingleton_8h_source} +\input{func2serv_8cpp} +\input{func2serv_8h} +\input{func2serv_8h_source} +\input{main_8cpp} +\input{mytcpserver_8cpp} +\input{mytcpserver_8h} +\input{mytcpserver_8h_source} +%--- End generated contents --- +% Index + \backmatter + \newpage + \phantomsection + \clearemptydoublepage + \addcontentsline{toc}{chapter}{\indexname} + \printindex +% Required for some languages (in combination with latexdocumentpre from the header) +\end{document} diff --git a/docs/doxygen/latex/tabu_doxygen.sty b/docs/doxygen/latex/tabu_doxygen.sty new file mode 100644 index 0000000..3f17d1d --- /dev/null +++ b/docs/doxygen/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. From 676994a540eec33f98dce35fa7ad65ec5ab8b123 Mon Sep 17 00:00:00 2001 From: Starkcrimea <92050654+Starkcrimea@users.noreply.github.com> Date: Tue, 13 May 2025 20:18:26 +0300 Subject: [PATCH 53/58] Update static.yml --- .github/workflows/static.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 2cdd2b0..79e40ad 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -44,7 +44,7 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: './html' # Указываем правильный путь к сгенерированной документации + path: './docs/doxygen/html' # Указываем правильный путь к сгенерированной документации # Разворачиваем на GitHub Pages - name: Deploy to GitHub Pages From 3a407941393397b3e1ff342c2b5e33e9957502bb Mon Sep 17 00:00:00 2001 From: Starkcrimea Date: Tue, 13 May 2025 22:57:41 +0300 Subject: [PATCH 54/58] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20doxygen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/Singleton.h | 85 +++++++++++++++++++++--------- client/add_product.h | 43 +++++++++++++-- client/authregwindow.h | 47 +++++++++++++++-- client/functions_for_client.h | 99 ++++++++++++++++++++++++++++++++--- client/mainwindow.h | 77 ++++++++++++++++++++++++--- client/managerforms.h | 21 ++++++-- client/menuCard.h | 22 +++++++- client/productCard.h | 16 +++++- server/func2serv.h | 92 ++++++++++++++++++++++++++++++++ server/mytcpserver.h | 26 ++++++--- 10 files changed, 469 insertions(+), 59 deletions(-) diff --git a/client/Singleton.h b/client/Singleton.h index abdbd0c..69846cf 100644 --- a/client/Singleton.h +++ b/client/Singleton.h @@ -1,5 +1,6 @@ #ifndef SINGLETON_H #define SINGLETON_H + #include #include #include @@ -7,47 +8,79 @@ #include #include - -class ClientSingleton; - - +/** + * @brief Разрушитель Singleton для корректного удаления ClientSingleton. + */ class ClientSingletonDestroyer { - private: - ClientSingleton * p_instance; - public: - ~ClientSingletonDestroyer(); - void initialize(ClientSingleton * p); +private: + ClientSingleton* p_instance; /**< Указатель на экземпляр ClientSingleton */ +public: + /** + * @brief Деструктор. Удаляет экземпляр ClientSingleton. + */ + ~ClientSingletonDestroyer(); + + /** + * @brief Инициализирует указатель на Singleton. + * @param p Указатель на экземпляр ClientSingleton. + */ + void initialize(ClientSingleton* p); }; - -class ClientSingleton : public QObject -{ +/** + * @brief Сетевой клиент, реализующий паттерн Singleton. + * + * Используется для подключения к серверу, отправки и получения данных. + */ +class ClientSingleton : public QObject { Q_OBJECT + private: - static ClientSingleton * p_instance; - static ClientSingletonDestroyer destroyer; - QTcpSocket* socket; + static ClientSingleton* p_instance; /**< Указатель на экземпляр Singleton */ + static ClientSingletonDestroyer destroyer; /**< Объект-разрушитель */ + QTcpSocket* socket; /**< Сокет для соединения с сервером */ + protected: - ClientSingleton(); //соед с сервером - ~ClientSingleton(); // закрыть соед - ClientSingleton(const ClientSingleton&) = delete; - ClientSingleton& operator=(const ClientSingleton&) = delete; + /** + * @brief Конструктор по умолчанию. Устанавливает соединение с сервером. + */ + ClientSingleton(); + + /** + * @brief Деструктор. Закрывает соединение с сервером. + */ + ~ClientSingleton(); + + ClientSingleton(const ClientSingleton&) = delete; /**< Запрещено копирование */ + ClientSingleton& operator=(const ClientSingleton&) = delete; /**< Запрещено присваивание */ friend class ClientSingletonDestroyer; public: + /** + * @brief Получить экземпляр Singleton. + * @return Ссылка на экземпляр ClientSingleton. + */ static ClientSingleton& getInstance(); - QByteArray send_msg(QStringList); + + /** + * @brief Отправляет сообщение серверу. + * @param list Список строк с данными для отправки. + * @return Ответ от сервера в виде QByteArray. + */ + QByteArray send_msg(QStringList list); + public slots: + /** + * @brief Слот вызывается при успешном соединении с сервером. + */ void slot_connected(); + + /** + * @brief Слот вызывается при получении данных от сервера. + */ void slot_readyRead(); }; - - - - - - #endif // SINGLETON_H diff --git a/client/add_product.h b/client/add_product.h index 94609e7..e72c00d 100644 --- a/client/add_product.h +++ b/client/add_product.h @@ -3,31 +3,64 @@ #include #include + namespace Ui { class AddProductWindow; } +/** + * @brief Класс окна для добавления нового продукта. + * + * Этот класс предоставляет пользовательский интерфейс для ввода информации + * о продукте (название, белки, жиры, углеводы, вес, цена, тип) и отправки этих данных. + */ class AddProductWindow : public QWidget { Q_OBJECT public: + /** + * @brief Конструктор окна добавления продукта. + * @param parent Родительский виджет. + */ explicit AddProductWindow(QWidget *parent = nullptr); - ~AddProductWindow(); - -private: - Ui::AddProductWindow *ui; + /** + * @brief Деструктор. + */ + ~AddProductWindow(); signals: + /** + * @brief Сигнал, испускаемый после успешного добавления продукта. + * @param name Название продукта. + * @param proteins Количество белков. + * @param fats Количество жиров. + * @param carbs Количество углеводов. + * @param weight Вес продукта. + * @param cost Стоимость продукта. + * @param type Тип продукта. + */ void productAdded(QString name, int proteins, int fats, int carbs, int weight, int cost, int type); - public slots: + /** + * @brief Очистка всех полей ввода. + */ void clear(); + + /** + * @brief Отображение окна добавления продукта. + */ void slot_show(); +private: + Ui::AddProductWindow *ui; /**< Указатель на интерфейс UI. */ + private slots: + /** + * @brief Обработчик нажатия кнопки добавления продукта. + */ void on_add_clicked(); }; diff --git a/client/authregwindow.h b/client/authregwindow.h index 5865867..8d2d106 100644 --- a/client/authregwindow.h +++ b/client/authregwindow.h @@ -4,34 +4,75 @@ #include #include "functions_for_client.h" - QT_BEGIN_NAMESPACE namespace Ui { class AuthRegWindow; } QT_END_NAMESPACE +/** + * @brief Класс окна авторизации и регистрации. + * + * Этот класс реализует окно для входа в систему и создания нового аккаунта. + * Содержит обработчики для переключения между формами, а также подтверждения входа/регистрации. + */ class AuthRegWindow : public QMainWindow { Q_OBJECT public: + /** + * @brief Конструктор окна авторизации/регистрации. + * @param parent Родительский виджет. + */ AuthRegWindow(QWidget *parent = nullptr); + + /** + * @brief Деструктор. + */ ~AuthRegWindow(); private slots: + /** + * @brief Обработчик нажатия кнопки "Регистрация". + * Переключает окно в режим регистрации. + */ void on_toRegButton_clicked(); + /** + * @brief Обработчик подтверждения регистрации. + * Отправляет данные нового пользователя на сервер. + */ void on_regButton_clicked(); + /** + * @brief Обработчик подтверждения входа. + * Отправляет данные пользователя на сервер для авторизации. + */ void on_loginButton_clicked(); signals: + /** + * @brief Сигнал об успешной авторизации. + * @param id Идентификатор пользователя. + * @param login Логин пользователя. + * @param email Электронная почта пользователя. + */ void auth_ok(QString id, QString login, QString email); private: - Ui::AuthRegWindow *ui; - void change_type_to_reg(bool); + Ui::AuthRegWindow *ui; /**< Указатель на интерфейс. */ + + /** + * @brief Вспомогательная функция переключения режима окна. + * @param to_reg Если true — включается режим регистрации. + */ + void change_type_to_reg(bool to_reg); + + /** + * @brief Очистка всех полей ввода. + */ void clear(); }; + #endif // AUTHREGWINDOW_H diff --git a/client/functions_for_client.h b/client/functions_for_client.h index 2036bdd..89e7c87 100644 --- a/client/functions_for_client.h +++ b/client/functions_for_client.h @@ -4,26 +4,111 @@ #include #include "Singleton.h" - +/** + * @brief Авторизация пользователя. + * @param login Логин пользователя. + * @param password Пароль пользователя. + * @return Ответ от сервера. + */ QString auth(QString login, QString password); + +/** + * @brief Регистрация нового пользователя. + * @param login Логин пользователя. + * @param password Пароль. + * @param email Электронная почта. + * @return true, если регистрация успешна; иначе — false. + */ bool reg(QString login, QString password, QString email); -QString get_stable_stat(/* какие-то аргументы, если потребуются */); -QString get_dynamic_stat(/* какие-то аргументы, если потребуются */); + +/** + * @brief Получение стабильной статистики. + * @return JSON-строка с данными статистики. + */ +QString get_stable_stat(); + +/** + * @brief Получение динамической статистики. + * @return JSON-строка с данными статистики. + */ +QString get_dynamic_stat(); + +/** + * @brief Получение списка всех пользователей. + * @return Массив байтов с данными пользователей. + */ QByteArray get_all_users(); -QByteArray check_task(/*QStringList*/); -QByteArray menu_export(/*QStringList*/); +/** + * @brief Проверка задачи (рациона). + * @return Массив байтов с результатом проверки. + */ +QByteArray check_task(); + +/** + * @brief Экспорт меню. + * @return Массив байтов с экспортированными данными. + */ +QByteArray menu_export(); + +/** + * @brief Получение всех продуктов пользователя. + * @param userId Идентификатор пользователя. + * @return Массив байтов с продуктами. + */ QByteArray get_products(QString userId); +/** + * @brief Добавление нового продукта. + * @param id Идентификатор пользователя. + * @param name Название продукта. + * @param proteins Количество белков. + * @param fats Количество жиров. + * @param carbs Количество углеводов. + * @param weight Вес продукта. + * @param cost Стоимость продукта. + * @param type Тип продукта. + * @return Массив байтов с результатом операции. + */ QByteArray add_product(QString id, QString name, int proteins, int fats, int carbs, int weight, int cost, int type); +/** + * @brief Получение общего количества пользователей. + * @return Количество пользователей. + */ int get_user_count(); + +/** + * @brief Получение общего количества продуктов. + * @return Количество продуктов. + */ int get_product_count(); + +/** + * @brief Получение количества входов за неделю. + * @return Количество входов. + */ int get_weekly_logins(); + +/** + * @brief Получение количества входов за месяц. + * @return Количество входов. + */ int get_monthly_logins(); -QByteArray add_favorite_ration(const QStringList& container); -bool add_ration_to_favorites(const QString& userId, const QString& rationId); +/** + * @brief Добавление рациона в избранное. + * @param container Контейнер с параметрами рациона. + * @return Массив байтов с результатом добавления. + */ +QByteArray add_favorite_ration(const QStringList& container); +/** + * @brief Добавление существующего рациона в избранное. + * @param userId Идентификатор пользователя. + * @param rationId Идентификатор рациона. + * @return true, если успешно; иначе — false. + */ +bool add_ration_to_favorites(const QString& userId, const QString& rationId); #endif // FUNCTIONS_FOR_CLIENT_H diff --git a/client/mainwindow.h b/client/mainwindow.h index e5e3562..4abead2 100644 --- a/client/mainwindow.h +++ b/client/mainwindow.h @@ -11,37 +11,102 @@ namespace Ui { class MainWindow; } +/** + * @brief Главное окно клиента. + * + * Отвечает за отображение основной информации, взаимодействие с продуктами, + * пользователями, рационом и статистикой. + */ class MainWindow : public QMainWindow { Q_OBJECT public: + /** + * @brief Конструктор класса MainWindow. + * @param parent Родительский виджет. + */ explicit MainWindow(QWidget *parent = nullptr); + + /** + * @brief Деструктор. + */ ~MainWindow(); - QString id; - QString login; - QString password; - QString email; + QString id; ///< Идентификатор текущего пользователя. + QString login; ///< Логин пользователя. + QString password; ///< Пароль пользователя. + QString email; ///< Электронная почта пользователя. public slots: + /** + * @brief Показывает главное окно. + */ void slot_show(); + + /** + * @brief Устанавливает данные текущего пользователя. + * @param id Идентификатор пользователя. + * @param login Логин. + * @param email Электронная почта. + */ void set_current_user(QString id, QString login, QString email); - void handleProductAdded( QString name, int proteins, int fats, int carbs, int weight, int cost, int type); + + /** + * @brief Обрабатывает добавление нового продукта. + * @param name Название продукта. + * @param proteins Белки. + * @param fats Жиры. + * @param carbs Углеводы. + * @param weight Вес. + * @param cost Стоимость. + * @param type Тип продукта. + */ + void handleProductAdded(QString name, int proteins, int fats, int carbs, int weight, int cost, int type); private: - Ui::MainWindow *ui; + Ui::MainWindow *ui; ///< Указатель на UI-элементы окна. private slots: + /** + * @brief Обработчик нажатия на кнопку "Стабильная статистика". + */ void on_stableStatButton_clicked(); + + /** + * @brief Обработчик нажатия на кнопку "Динамическая статистика". + */ void on_dynamicStatButton_clicked(); + + /** + * @brief Обработчик нажатия на кнопку "Список пользователей". + */ void on_tableUsersButton_clicked(); + + /** + * @brief Обработчик нажатия на кнопку "Список продуктов". + */ void on_productListButton_clicked(); + + /** + * @brief Обработчик нажатия на кнопку "Создать рацион". + */ void on_createMenButton_clicked(); + + /** + * @brief Обработчик нажатия на кнопку "Добавить продукт". + */ void on_addProductButton_clicked(); + + /** + * @brief Обработчик нажатия на кнопку "Выход". + */ void on_exitButton_clicked(); signals: + /** + * @brief Сигнал, указывающий на необходимость открыть окно добавления продукта. + */ void add_product(); }; diff --git a/client/managerforms.h b/client/managerforms.h index 61849c9..d772cf4 100644 --- a/client/managerforms.h +++ b/client/managerforms.h @@ -11,19 +11,32 @@ namespace Ui { class ManagerForms; } +/** + * @brief Класс для управления окнами приложения. + * + * Отвечает за создание и переключение между окнами авторизации, + * главного интерфейса и окна добавления продукта. + */ class ManagerForms : public QMainWindow { Q_OBJECT public: + /** + * @brief Конструктор класса ManagerForms. + * @param parent Родительский виджет. + */ explicit ManagerForms(QWidget *parent = nullptr); + + /** + * @brief Деструктор. + */ ~ManagerForms(); private: - AuthRegWindow * curr_auth; - MainWindow * main; - AddProductWindow * addProductWindow; + AuthRegWindow *curr_auth; ///< Указатель на окно авторизации и регистрации. + MainWindow *main; ///< Указатель на главное окно приложения. + AddProductWindow *addProductWindow; ///< Указатель на окно добавления продукта. }; - #endif // MANAGERFORMS_H diff --git a/client/menuCard.h b/client/menuCard.h index 450a2aa..103f6f0 100644 --- a/client/menuCard.h +++ b/client/menuCard.h @@ -7,16 +7,36 @@ namespace Ui { class menuCard; } +/** + * @brief Виджет отображения информации о рационе питания. + * + * Показывает данные за определённый день: список продуктов, калорийность, + * содержание БЖУ, вес и цену. + */ class menuCard : public QWidget { Q_OBJECT public: + /** + * @brief Конструктор виджета menuCard. + * @param day День недели или дата. + * @param products Список продуктов в рационе. + * @param calories Общее количество калорий. + * @param pfc Вектор, содержащий значения белков, жиров и углеводов. + * @param weight Общий вес рациона. + * @param price Общая стоимость рациона. + * @param parent Родительский виджет. + */ explicit menuCard(QString day, QStringList products, int calories, QVector& pfc, int weight, int price, QWidget *parent = nullptr); + + /** + * @brief Деструктор. + */ ~menuCard(); private: - Ui::menuCard *ui; + Ui::menuCard *ui; ///< UI-компоненты, сгенерированные Qt Designer. }; #endif // MENUCARD_H diff --git a/client/productCard.h b/client/productCard.h index 80d4383..238caa5 100644 --- a/client/productCard.h +++ b/client/productCard.h @@ -1,9 +1,23 @@ #pragma once #include - +/** + * @brief Виджет карточки продукта. + * + * Отображает информацию о продукте: название, цену и пищевую ценность (белки, жиры, углеводы). + */ class productCard : public QWidget { Q_OBJECT + public: + /** + * @brief Конструктор карточки продукта. + * @param name Название продукта. + * @param price Стоимость продукта. + * @param proteins Количество белков. + * @param fatness Количество жиров. + * @param carbs Количество углеводов. + * @param parent Родительский виджет. + */ explicit productCard(QString name, int price, int proteins, int fatness, int carbs, QWidget *parent = nullptr); }; diff --git a/server/func2serv.h b/server/func2serv.h index 86f0946..c595a00 100644 --- a/server/func2serv.h +++ b/server/func2serv.h @@ -3,23 +3,115 @@ #include +/** + * Парсинг входных данных. + * @param input Входная строка. + * @param socdes Дескриптор сокета. + * @return Обработанная строка данных. + */ QByteArray parsing(QString input, int socdes); +/** + * Авторизация пользователя. + * @param Входной список данных. + * @return Результат авторизации в виде QByteArray. + */ QByteArray auth(QStringList ); + +/** + * Регистрация пользователя. + * @param Входной список данных. + * @return Результат регистрации в виде QByteArray. + */ QByteArray reg(QStringList); + +/** + * Добавление продукта. + * @param Входной список данных. + * @return Результат добавления продукта в виде QByteArray. + */ QByteArray add_product(QStringList); + +/** + * Получение статистики. + * @return Статистика в виде QByteArray. + */ QByteArray get_stat(/*QStringList*/); + +/** + * Проверка задания. + * @return Результат проверки задания в виде QByteArray. + */ QByteArray check_task(/*QStringList*/); + +/** + * Экспорт меню. + * @return Результат экспорта меню в виде QByteArray. + */ QByteArray menu_export(/*QStringList*/); + +/** + * Получение списка продуктов. + * @param UserId Идентификатор пользователя. + * @return Список продуктов в виде QByteArray. + */ QByteArray get_products(QString UserId); + +/** + * Получение всех пользователей. + * @return Список всех пользователей в виде QByteArray. + */ QByteArray get_all_users(); + +/** + * Получение стабильной статистики. + * @return Стабильная статистика в виде QByteArray. + */ QByteArray get_stable_stat(); + +/** + * Получение количества пользователей. + * @return Количество пользователей. + */ int get_user_count(); + +/** + * Получение количества продуктов. + * @return Количество продуктов. + */ int get_product_count(); + +/** + * Получение динамической статистики. + * @return Динамическая статистика в виде QByteArray. + */ QByteArray get_dynamic_stat(); + +/** + * Получение количества входов за неделю. + * @return Количество входов за неделю. + */ int get_weekly_logins(); + +/** + * Получение количества входов за месяц. + * @return Количество входов за месяц. + */ int get_monthly_logins(); + +/** + * Добавление рациона в избранное. + * @param container Список данных. + * @return Результат добавления в избранное в виде QByteArray. + */ QByteArray add_favorite_ration(const QStringList& container); + +/** + * Добавление рациона в избранное для пользователя. + * @param userId Идентификатор пользователя. + * @param rationId Идентификатор рациона. + * @return Результат добавления в избранное. + */ bool add_ration_to_favorites(const QString& userId, const QString& rationId); #include diff --git a/server/mytcpserver.h b/server/mytcpserver.h index fe179a1..fcce555 100644 --- a/server/mytcpserver.h +++ b/server/mytcpserver.h @@ -12,16 +12,30 @@ class MyTcpServer : public QObject { Q_OBJECT public: - explicit MyTcpServer(QObject *parent = nullptr); - ~MyTcpServer(); + explicit MyTcpServer(QObject *parent = nullptr); /**< Конструктор */ + ~MyTcpServer(); /**< Деструктор */ + public slots: + /** + * Слот для обработки нового подключения. + */ void slotNewConnection(); + + /** + * Слот для обработки отключения клиента. + */ void slotClientDisconnected(); + + /** + * Слот для чтения данных от клиента. + */ void slotServerRead(); + private: - QTcpServer * mTcpServer; - QTcpSocket * mTcpSocket; - int server_status; - QMap mSocketDescriptors; // Хранение дескрипторов сокетов + QTcpServer * mTcpServer; /**< Сервер для обработки TCP-соединений */ + QTcpSocket * mTcpSocket; /**< Сокет для взаимодействия с клиентом */ + int server_status; /**< Статус сервера */ + QMap mSocketDescriptors; /**< Хранение дескрипторов сокетов */ }; + #endif // MYTCPSERVER_H From f089b87a7f78a2f5cc1748f753861eec88258081 Mon Sep 17 00:00:00 2001 From: Starkcrimea <92050654+Starkcrimea@users.noreply.github.com> Date: Tue, 13 May 2025 23:08:23 +0300 Subject: [PATCH 55/58] Update Doxyfile --- Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doxyfile b/Doxyfile index b7f8ef1..df8f87f 100644 --- a/Doxyfile +++ b/Doxyfile @@ -45,4 +45,4 @@ JAVADOC_AUTOBRIEF = YES # Автоматически до DISTRIBUTE_GROUPS = YES # Разрешить группировку документации # Путь к исходным файлам -INPUT = ./server # Путь к вашим исходным файлам +INPUT = ./server .client/ # Путь к вашим исходным файлам From 9072e8605c5779d51c9cfcb598e1b3f1ce60a4d0 Mon Sep 17 00:00:00 2001 From: Starkcrimea Date: Tue, 13 May 2025 23:09:03 +0300 Subject: [PATCH 56/58] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20Doxygen-=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8=20=D0=BA=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE=D1=87=D0=BD=D1=8B=D0=BC=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/doxygen/html/class_my_tcp_server.html | 41 +++- docs/doxygen/html/func2serv_8cpp.html | 146 +++++++++++-- docs/doxygen/html/func2serv_8h.html | 144 +++++++++++-- docs/doxygen/html/func2serv_8h_source.html | 95 +++++---- docs/doxygen/html/mytcpserver_8h_source.html | 49 +++-- .../latex/class_data_base_singleton.tex | 3 +- docs/doxygen/latex/class_my_tcp_server.tex | 60 ++++-- .../latex/class_singleton_destroyer.tex | 3 +- docs/doxygen/latex/databasesingleton_8cpp.tex | 3 +- docs/doxygen/latex/databasesingleton_8h.tex | 6 +- docs/doxygen/latex/func2serv_8cpp.tex | 197 +++++++++++++++-- docs/doxygen/latex/func2serv_8h.tex | 198 ++++++++++++++++-- docs/doxygen/latex/func2serv_8h_source.tex | 59 ++++-- docs/doxygen/latex/main_8cpp.tex | 3 +- docs/doxygen/latex/mytcpserver_8cpp.tex | 3 +- docs/doxygen/latex/mytcpserver_8h.tex | 6 +- docs/doxygen/latex/mytcpserver_8h_source.tex | 31 +-- 17 files changed, 838 insertions(+), 209 deletions(-) diff --git a/docs/doxygen/html/class_my_tcp_server.html b/docs/doxygen/html/class_my_tcp_server.html index 5b5800c..3faf244 100644 --- a/docs/doxygen/html/class_my_tcp_server.html +++ b/docs/doxygen/html/class_my_tcp_server.html @@ -137,28 +137,37 @@

Public Slots

void slotNewConnection () + Слот для обработки нового подключения.
  void slotClientDisconnected () + Слот для обработки отключения клиента.
  void slotServerRead () + Слот для чтения данных от клиента.
  + +

Public Member Functions

 MyTcpServer (QObject *parent=nullptr)
 Конструктор
 
 ~MyTcpServer ()
 Деструктор
 
+ + + +

Private Attributes

QTcpServer * mTcpServer
 Сервер для обработки TCP-соединений
 
QTcpSocket * mTcpSocket
 Сокет для взаимодействия с клиентом
 
int server_status
 Статус сервера
 
QMap< int, QTcpSocket * > mSocketDescriptors
 Хранение дескрипторов сокетов
 

Constructor & Destructor Documentation

@@ -184,6 +193,8 @@

+ +

Конструктор

25 }
26}
-
void slotNewConnection()
Definition mytcpserver.cpp:28
-
QTcpServer * mTcpServer
Definition mytcpserver.h:22
-
int server_status
Definition mytcpserver.h:24
+
void slotNewConnection()
Слот для обработки нового подключения.
Definition mytcpserver.cpp:28
+
QTcpServer * mTcpServer
Сервер для обработки TCP-соединений
Definition mytcpserver.h:35
+
int server_status
Статус сервера
Definition mytcpserver.h:37

@@ -217,12 +228,14 @@

+ +

Деструктор

8{
9 mTcpServer->close();
10 server_status = 0;
11 qDeleteAll(mSocketDescriptors); // Удаляем все сокеты
12}
-
QMap< int, QTcpSocket * > mSocketDescriptors
Definition mytcpserver.h:25
+
QMap< int, QTcpSocket * > mSocketDescriptors
Хранение дескрипторов сокетов
Definition mytcpserver.h:38
@@ -249,6 +262,8 @@

+ +

Слот для обработки отключения клиента.

62{
63 QTcpSocket *clientSocket = qobject_cast<QTcpSocket*>(sender());
64 if (!clientSocket) {
@@ -298,6 +313,8 @@

+ +

Слот для обработки нового подключения.

46 }
47}
-
void slotClientDisconnected()
Definition mytcpserver.cpp:61
-
void slotServerRead()
Definition mytcpserver.cpp:49
+
void slotClientDisconnected()
Слот для обработки отключения клиента.
Definition mytcpserver.cpp:61
+
void slotServerRead()
Слот для чтения данных от клиента.
Definition mytcpserver.cpp:49

@@ -344,6 +361,8 @@

+ +

Слот для чтения данных от клиента.

58 clientSocket->write(response);
59}
-
QByteArray parsing(QString input, int socdes)
Definition func2serv.cpp:18
+
QByteArray parsing(QString input, int socdes)
Парсинг входных данных.
Definition func2serv.cpp:18
@@ -380,6 +399,8 @@

+

Хранение дескрипторов сокетов

+
@@ -402,6 +423,8 @@

+

Сервер для обработки TCP-соединений

+
@@ -424,6 +447,8 @@

+

Сокет для взаимодействия с клиентом

+
@@ -446,6 +471,8 @@

+

Статус сервера

+
The documentation for this class was generated from the following files: