Skip to content

Commit 6e937aa

Browse files
committed
Небольшие оптимизации
1 parent c26e7ea commit 6e937aa

5 files changed

Lines changed: 79 additions & 56 deletions

File tree

CMakeLists.txt

Lines changed: 71 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ cmake_minimum_required(VERSION 3.15)
44
project(awh LANGUAGES CXX)
55

66
# Устанавливаем название приложения
7-
set(PROJECT_VENDOR_LONG "ANYKS - WEB")
7+
SET(PROJECT_VENDOR_LONG "ANYKS - WEB")
88

99
# Опции сборки
10-
set(PROJECT_COPYRIGHT "Copyright (c) ${CURRENT_YEAR} ${PROJECT_VENDOR_LONG}")
10+
SET(PROJECT_COPYRIGHT "Copyright (c) ${CURRENT_YEAR} ${PROJECT_VENDOR_LONG}")
1111

1212
# Тип сборки
1313
# cmake -DCMAKE_BUILD_TYPE=YES ..
1414
if (NOT CMAKE_BUILD_TYPE)
1515
# Активируем режим отладки
16-
set(CMAKE_BUILD_TYPE Debug)
16+
SET(CMAKE_BUILD_TYPE Debug)
1717
endif (NOT CMAKE_BUILD_TYPE)
1818

1919
# Выводим сообщение о типе сборки
@@ -39,28 +39,39 @@ message(STATUS "Architecture: ${ARCHITECTURE}")
3939
string(REGEX MATCH "Linux" PROJECT_OS_LINUX ${CMAKE_SYSTEM_NAME})
4040
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
4141
message(STATUS "Detected OS: Linux")
42-
set(DEBUGGER "-ggdb3")
43-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-as-needed -ldl")
42+
SET(DEBUGGER "-ggdb3")
43+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-as-needed -ldl")
4444
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
4545
if (NOT MACOS_VERSION)
4646
EXECUTE_PROCESS(COMMAND sw_vers -productVersion COMMAND tr -d '\n' OUTPUT_VARIABLE MACOS_VERSION)
4747
endif()
4848
message(STATUS "Detected OS: MacOS X v${MACOS_VERSION}")
49-
set(DEBUGGER "-glldb")
50-
set(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOS_VERSION})
49+
SET(DEBUGGER "-glldb")
50+
SET(CMAKE_OSX_DEPLOYMENT_TARGET ${MACOS_VERSION})
5151
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
5252
message(STATUS "Detected OS: FreeBSD")
53-
set(DEBUGGER "-ggdb3")
53+
SET(DEBUGGER "-ggdb3")
5454
else()
55-
set(DEBUGGER "")
55+
SET(DEBUGGER "")
5656
endif()
5757

5858
# Enable C++17
59-
set(CMAKE_CXX_STANDARD 17)
60-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
59+
SET(CMAKE_CXX_STANDARD 17)
60+
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
6161

62-
# Устанавливаем опции компилятора
63-
set(CMAKE_CXX_COMPILER_ID "clang++")
62+
# Если операционной системой является Linux
63+
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
64+
# Устанавливаем опции компилятора
65+
SET(CMAKE_C_COMPILER_ID "GNU")
66+
SET(CMAKE_CXX_COMPILER_ID "GNU")
67+
# Для всех остальных операционных систем
68+
else()
69+
# Устанавливаем опции компилятора
70+
SET(CMAKE_C_COMPILER_ID "clang")
71+
SET(CMAKE_CXX_COMPILER_ID "clang++")
72+
endif()
73+
74+
# Выводим информацию об установленных компиляторах
6475
message(STATUS "Using C compiler: ${CMAKE_C_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
6576
message(STATUS "Using C++ compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}\n")
6677

@@ -69,31 +80,39 @@ string(TIMESTAMP CURRENT_YEAR "%Y")
6980
string(TIMESTAMP CURRENT_TIME "%d.%m.%Y %H:%M:%S")
7081

7182
# Опции компилятора
72-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
83+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
7384

7485
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
75-
set(AWH_PARAMS "-Wno-cpp -Wno-deprecated")
86+
SET(AWH_PARAMS "-Wno-cpp -Wno-deprecated")
7687
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
77-
set(AWH_PARAMS "-Wno-cpp -Wno-deprecated")
88+
SET(AWH_PARAMS "-Wno-cpp -Wno-deprecated")
7889
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
79-
set(AWH_PARAMS "-framework Carbon -Wno-cpp -Wno-deprecated -Wno-unused-command-line-argument")
90+
SET(AWH_PARAMS "-framework Carbon -Wno-cpp -Wno-deprecated -Wno-unused-command-line-argument")
8091
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
81-
set(AWH_PARAMS "-lutil -Wno-cpp -Wno-deprecated -Wno-unused-command-line-argument")
92+
SET(AWH_PARAMS "-lutil -Wno-cpp -Wno-deprecated -Wno-unused-command-line-argument")
8293
else()
83-
set(AWH_PARAMS "-Wno-unknown-attributes")
94+
SET(AWH_PARAMS "-Wno-unknown-attributes")
8495
endif()
8596

97+
# Если процессор архитектуры ARM
8698
if (${ARCHITECTURE} MATCHES "aarch64" OR ${ARCHITECTURE} MATCHES "arm*")
87-
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -pipe -DNDEBUG")
88-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -fno-permissive -Wno-pedantic -Wno-narrowing -Wno-deprecated-declarations -Wno-exceptions -Wno-unused-result ${AWH_PARAMS}")
99+
SET(CMAKE_CXX_FLAGS_RELEASE "-pipe -DNDEBUG")
100+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -fno-permissive -Wno-pedantic -Wno-narrowing -Wno-deprecated-declarations -Wno-exceptions -Wno-unused-result ${AWH_PARAMS}")
101+
# Если процессор архитектуры x86_64
89102
else()
90-
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -pipe -mrdrnd -march=core2 -DNDEBUG")
91-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -fno-permissive -Wno-pedantic -Wno-narrowing -Wno-deprecated-declarations -Wno-exceptions -Wno-unused-result ${AWH_PARAMS}")
103+
SET(CMAKE_CXX_FLAGS_RELEASE "-pipe -mrdrnd -march=core2 -DNDEBUG")
104+
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -fno-permissive -Wno-pedantic -Wno-narrowing -Wno-deprecated-declarations -Wno-exceptions -Wno-unused-result ${AWH_PARAMS}")
92105
endif()
93106

94-
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DDEBUG_MODE ${DEBUGGER}")
107+
# Устанавливаем параметр отладки
108+
SET(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG_MODE ${DEBUGGER}")
95109

110+
# Если активирован режим отладки
96111
if (CMAKE_BUILD_TYPE MATCHES Debug)
112+
# Устанавливаем уровень оптимизации
113+
SET(CMAKE_C_FLAGS_DISTRIBUTION "-O0")
114+
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O0")
115+
97116
# Если операцинная система не относится к MS Windows
98117
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
99118
# Устанавливаем сборку профилировщика
@@ -113,7 +132,12 @@ if (CMAKE_BUILD_TYPE MATCHES Debug)
113132
# Выводим сообщение отладочной информации
114133
message(STATUS "C Flags: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}")
115134
message(STATUS "C++ Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}\n")
135+
# Если активирован режим релиза
116136
else()
137+
# Устанавливаем уровень оптимизации
138+
SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3")
139+
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3")
140+
117141
# Выводим сообщение релизной информации
118142
message(STATUS "C Flags: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}")
119143
message(STATUS "C++ Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}\n")
@@ -122,7 +146,7 @@ endif()
122146
# Если нужно собрать и динамическую библиотеку
123147
if (CMAKE_SHARED_BUILD_LIB)
124148
if (MSVC)
125-
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
149+
SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
126150
endif (MSVC)
127151
endif (CMAKE_SHARED_BUILD_LIB)
128152

@@ -174,7 +198,7 @@ include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/contrib/include)
174198
include_directories(SYSTEM ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
175199

176200
# Выполняем подключение исходников
177-
set(SOURCE_FILES
201+
SET(SOURCE_FILES
178202
"${SOURCE_FILES}"
179203
"${CMAKE_SOURCE_DIR}/src/sys/os.cpp"
180204
"${CMAKE_SOURCE_DIR}/src/sys/fs.cpp"
@@ -254,25 +278,25 @@ set(SOURCE_FILES
254278
)
255279

256280
# Задаем именя библиотеки и бинарника
257-
set(IP_APP_NAME ip)
258-
set(DNS_APP_NAME dns)
259-
set(NTP_APP_NAME ntp)
260-
set(PING_APP_NAME ping)
261-
set(TIMER_APP_NAME timer)
262-
set(PROXY_APP_NAME proxy)
263-
set(SOCKS5_APP_NAME socks5)
264-
set(CLIENT_APP_NAME client)
265-
set(SERVER_APP_NAME server)
266-
set(WS_CLIENT_APP_NAME wsClient)
267-
set(WS_SERVER_APP_NAME wsServer)
268-
set(WEB_CLIENT_APP_NAME webClient)
269-
set(WEB_SERVER_APP_NAME webServer)
270-
set(INVESTIGATOR_APP_NAME investigator)
271-
set(AWH_LIB_NAME ${PROJECT_NAME})
281+
SET(IP_APP_NAME ip)
282+
SET(DNS_APP_NAME dns)
283+
SET(NTP_APP_NAME ntp)
284+
SET(PING_APP_NAME ping)
285+
SET(TIMER_APP_NAME timer)
286+
SET(PROXY_APP_NAME proxy)
287+
SET(SOCKS5_APP_NAME socks5)
288+
SET(CLIENT_APP_NAME client)
289+
SET(SERVER_APP_NAME server)
290+
SET(WS_CLIENT_APP_NAME wsClient)
291+
SET(WS_SERVER_APP_NAME wsServer)
292+
SET(WEB_CLIENT_APP_NAME webClient)
293+
SET(WEB_SERVER_APP_NAME webServer)
294+
SET(INVESTIGATOR_APP_NAME investigator)
295+
SET(AWH_LIB_NAME ${PROJECT_NAME})
272296

273297
# Если операционной системой не является Windows
274298
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
275-
set(CLUSTER_APP_NAME cluster)
299+
SET(CLUSTER_APP_NAME cluster)
276300
endif()
277301

278302
# Если нужно собрать и динамическую библиотеку
@@ -292,11 +316,11 @@ endif (CMAKE_SHARED_BUILD_LIB)
292316
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
293317
# export MSYS="error_start:%WD%dumper.exe -d -c %1 %2"
294318
# Устанавливаем необходимые зависимости для MS Windows
295-
set(WINFLAGS -lstdc++ -lws2_32 -lgdi32 -lcrypt32 -lIphlpapi -lbcrypt -flto=auto)
319+
SET(WINFLAGS -lstdc++ -lws2_32 -lgdi32 -lcrypt32 -lIphlpapi -lbcrypt -flto=auto)
296320

297321
# Устанавливаем иконку для windows под MinGW.
298-
set(RES_FILES "awh.rc")
299-
set(CMAKE_RC_COMPILER_INIT windres)
322+
SET(RES_FILES "awh.rc")
323+
SET(CMAKE_RC_COMPILER_INIT windres)
300324
ENABLE_LANGUAGE(RC)
301325
SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
302326

@@ -1137,7 +1161,7 @@ endif (CMAKE_SHARED_BUILD_LIB)
11371161
# Активация формирования дампа ядра в реже отладки под MacOS X
11381162
if (CMAKE_BUILD_TYPE MATCHES Debug)
11391163
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
1140-
set(entitlements_file "${CMAKE_SOURCE_DIR}/segv.entitlements")
1164+
SET(entitlements_file "${CMAKE_SOURCE_DIR}/segv.entitlements")
11411165

11421166
add_custom_command(TARGET "${IP_APP_NAME}" POST_BUILD
11431167
COMMAND bash "${CMAKE_SOURCE_DIR}/core_dump.sh" "$<TARGET_FILE:${IP_APP_NAME}>" "${entitlements_file}"
@@ -1262,7 +1286,7 @@ endif()
12621286

12631287
# Устанавливаем адрес установки, запрет установки в /usr/local
12641288
if ("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local" OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local/")
1265-
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}")
1289+
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}")
12661290
endif()
12671291

12681292
# Устанавливаем сертификаты

include/net/net.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ namespace awh {
177177
* @param size максимальная длина строки
178178
* @return полученное число строки
179179
*/
180-
string & zerro(string && num, const uint8_t size = 3) const noexcept;
180+
string && zerro(string && num, const uint8_t size = 3) const noexcept;
181181
private:
182182
/**
183183
* greater Метод проверки больше первое число второго или нет (бинарным методом)

include/sys/threadpool.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <future>
2626
#include <stdexcept>
2727
#include <functional>
28+
#include <type_traits>
2829
#include <condition_variable>
2930

3031
/**
@@ -232,13 +233,13 @@ namespace awh {
232233
* @param func функция для обработки
233234
* @param args аргументы для передачи в функцию
234235
*/
235-
auto push(Func && func, Args && ... args) noexcept -> future <typename result_of <Func (Args...)>::type> {
236+
auto push(Func && func, Args && ... args) noexcept -> future <typename invoke_result <Func, Args...>::type> {
236237
// Устанавливаем тип возвращаемого значения
237-
using return_type = typename result_of <Func(Args...)>::type;
238+
using result_t = typename invoke_result <Func, Args...>::type;
238239
// Добавляем задачу в очередь для последующего исполнения
239-
auto task = make_shared <packaged_task <return_type()>> (std::bind(std::forward <Func> (func), std::forward <Args> (args)...));
240+
auto task = make_shared <packaged_task <result_t()>> (std::bind(std::forward <Func> (func), std::forward <Args> (args)...));
240241
// Создаем шаблон асинхронных операций
241-
future <return_type> res = task->get_future();
242+
future <result_t> res = task->get_future();
242243
{
243244
// Выполняем блокировку уникальным мютексом
244245
unique_lock <mutex> lock(this->_locker);

src/net/engine.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,8 +1165,6 @@ void awh::Engine::Context::clear() noexcept {
11651165
this->_addr->clear();
11661166
// Сбрасываем флаг вывода подробной информации
11671167
this->_verb = false;
1168-
// Зануляем объект подключения
1169-
this->_addr = nullptr;
11701168
// Сбрасываем флаг инициализации
11711169
this->_encrypted = false;
11721170
}

src/net/net.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ string awh::Net::itoa(const int64_t value, const uint8_t radix) const noexcept {
501501
* @param size максимальная длина строки
502502
* @return полученное число строки
503503
*/
504-
string & awh::Net::zerro(string && num, const uint8_t size) const noexcept {
504+
string && awh::Net::zerro(string && num, const uint8_t size) const noexcept {
505505
// Если число меньше максимальной длины строки
506506
if(static_cast <uint8_t> (num.size()) < size){
507507
/**
@@ -532,7 +532,7 @@ string & awh::Net::zerro(string && num, const uint8_t size) const noexcept {
532532
}
533533
}
534534
// Выводим результат
535-
return num;
535+
return ::move(num);
536536
}
537537
/**
538538
* greater Метод проверки больше первое число второго или нет (бинарным методом)

0 commit comments

Comments
 (0)