Compare commits

...

68 Commits
v1.2.2 ... main

Author SHA1 Message Date
fd452f6643 Merge pull request 'NetChannels' (#19) from NetChannels into main
Reviewed-on: #19
2025-03-28 23:11:54 -07:00
c437a39e1d Added missing dependency on Windows.
All checks were successful
Build & Release / Windows-AMD64-Build (push) Successful in 4m45s
Build & Release / Linux-AMD64-Build (push) Successful in 14m40s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m39s
2025-03-28 21:47:47 -07:00
8b53b6e4d1 Implemented ICMPv6 on Windows.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 3m34s
Build & Release / Linux-AMD64-Build (push) Successful in 14m39s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m40s
2025-03-28 21:24:13 -07:00
ff42dfd3a4 Added ICMPv6 support to Linux.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 3m31s
Build & Release / Linux-AMD64-Build (push) Successful in 14m40s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m42s
2025-03-28 20:53:48 -07:00
d8c5327180 Added ICMPv6 support to Windows.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Has been cancelled
Build & Release / Linux-AARCH64-Build (push) Has been cancelled
Build & Release / Windows-AMD64-Build (push) Has been cancelled
2025-03-28 20:47:46 -07:00
42b26045a6 Added ICMPv6 support to Linux. 2025-03-27 00:15:02 -07:00
d41f71f17d Added IPv4 ICMP support to Windows.
All checks were successful
Build & Release / Windows-AMD64-Build (push) Successful in 4m57s
Build & Release / Linux-AMD64-Build (push) Successful in 14m40s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m36s
2025-03-26 11:45:54 -07:00
c19c0bc80b Renamed member variables and parameters.
All checks were successful
Build & Release / Windows-AMD64-Build (push) Successful in 4m10s
Build & Release / Linux-AMD64-Build (push) Successful in 14m40s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m37s
2025-03-26 10:42:29 -07:00
86149d246a Renamed member variables and parameters.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 10s
Build & Release / Linux-AARCH64-Build (push) Failing after 14s
Build & Release / Windows-AMD64-Build (push) Successful in 4m16s
2025-03-26 10:29:20 -07:00
1e55b11eed Fixed CMakeLists.
All checks were successful
Build & Release / Windows-AMD64-Build (push) Successful in 4m23s
Build & Release / Linux-AMD64-Build (push) Successful in 14m40s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m36s
2025-03-25 19:43:42 -07:00
ce225b2888 Fixed CMakeLists and BaseICMP.cpp.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Has been cancelled
Build & Release / Linux-AARCH64-Build (push) Has been cancelled
Build & Release / Windows-AMD64-Build (push) Has been cancelled
2025-03-25 19:42:40 -07:00
eb3d345c5a Fixed gitea workflow.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 9m49s
Build & Release / Linux-AMD64-Build (push) Successful in 14m41s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m37s
2025-03-25 19:26:10 -07:00
6cf4977a6c Fixed gitea workflow.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Has been cancelled
Build & Release / Linux-AARCH64-Build (push) Has been cancelled
Build & Release / Windows-AMD64-Build (push) Has been cancelled
2025-03-25 19:22:08 -07:00
ae226c9a84 Fixed gitea workflow.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 15s
Build & Release / Linux-AMD64-Build (push) Successful in 14m41s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m37s
2025-03-25 19:20:24 -07:00
bf3b063e96 Fixed gitea workflow.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 19s
Build & Release / Linux-AMD64-Build (push) Successful in 14m39s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m36s
2025-03-25 19:17:53 -07:00
e071877045 Fixed gitea workflow.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 14s
Build & Release / Linux-AMD64-Build (push) Successful in 14m40s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m37s
2025-03-25 19:15:32 -07:00
af90f90156 Fixed gitea workflow.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 14s
Build & Release / Linux-AMD64-Build (push) Successful in 14m39s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m37s
2025-03-25 18:49:14 -07:00
389fa61fba Merge pull request 'Fixed gitea workflow.' (#18) from NetChannels into main
Reviewed-on: #18
2025-03-25 18:43:47 -07:00
16ef5bbb74 Fixed gitea workflow.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Successful in 14m41s
Build & Release / Windows-AMD64-Build (push) Failing after 23s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m36s
2025-03-25 18:42:56 -07:00
a67197766e Merge pull request 'Fixed gitea workflow.' (#17) from NetChannels into main
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 25s
Build & Release / Linux-AMD64-Build (push) Failing after 11m42s
Build & Release / Linux-AARCH64-Build (push) Successful in 43m39s
Reviewed-on: #17
2025-03-25 18:37:27 -07:00
6cba7d6698 Fixed gitea workflow. 2025-03-25 18:35:52 -07:00
ae414c5c99 Merge pull request 'Added CPU::GetCacheLineSize() definition for Windows.' (#16) from NetChannels into main
Reviewed-on: #16
2025-03-25 16:50:40 -07:00
9ab62d0545 Added CPU::GetCacheLineSize() definition for Windows.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 25s
Build & Release / Linux-AMD64-Build (push) Failing after 13m28s
Build & Release / Linux-AARCH64-Build (push) Failing after 1m0s
2025-03-25 16:45:18 -07:00
b44e55a92c Merge pull request 'NetChannels' (#15) from NetChannels into main
Reviewed-on: EventHorizonStudio/EHS#15
2025-03-23 03:22:41 -07:00
53d86eb539 Merge remote-tracking branch 'origin/NetChannels' into NetChannels
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 9m34s
Build & Release / Linux-AMD64-Build (push) Failing after 1m58s
Build & Release / Linux-AARCH64-Build (push) Failing after 5m21s
2025-03-23 03:11:24 -07:00
352b4d612f First commit for ICMP capabilities, added CPU::GetCacheLineSize(), and removed BaseObj from containers. 2025-03-23 03:10:35 -07:00
89925fe820 Renamed member variables and parameters. 2025-01-30 13:01:01 -08:00
16b56a7084 Made NetChannel methods public in EHC. 2025-01-30 12:32:52 -08:00
62f8a662a0 Backup. 2025-01-29 16:21:11 -08:00
39bbcd0d56 Added missing constructor for NetChannel in NetServerCh. 2025-01-28 04:28:55 -08:00
981b40d3b1 Finished implementing, now for the testing phase. 2025-01-26 21:43:17 -08:00
7bc4b9977d Merge pull request 'Added the capability for custom encryption's to be added to EHC.' (#14) from fix into main
All checks were successful
Build & Release / Windows-AMD64-Build (push) Successful in 6m24s
Build & Release / Linux-AMD64-Build (push) Successful in 13m7s
Build & Release / Linux-AARCH64-Build (push) Successful in 39m52s
Reviewed-on: EventHorizonStudio/EHS#14
2024-10-06 23:20:53 -07:00
79860c7d39 Added the capability for custom encryption's to be added to EHC.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Waiting to run
Build & Release / Linux-AARCH64-Build (push) Has been cancelled
Build & Release / Linux-AMD64-Build (push) Has been cancelled
2024-10-06 23:19:42 -07:00
99bab4a6ef Merge pull request 'New Audio and EHC PR' (#13) from audio into main
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 3m34s
Build & Release / Windows-AMD64-Build (push) Successful in 6m44s
Build & Release / Linux-AARCH64-Build (push) Has been cancelled
Reviewed-on: EventHorizonStudio/EHS#13
2024-10-06 23:00:31 -07:00
8b01ee3c46 Added the capability for custom encryption's to be added to EHC. 2024-10-06 22:54:29 -07:00
1feff0a25c Moved the Event Horizon Communications to this project. 2024-10-06 20:08:22 -07:00
9b42ad6d74 Simplified audio playback & capturing significantly. 2024-10-06 17:24:32 -07:00
9639329df3 Updated readme. 2024-10-06 01:16:04 -07:00
6cd686a17e Updated readme. 2024-10-06 01:14:14 -07:00
3343f8ca28 Fixed workflow.
All checks were successful
Build & Release / Windows-AMD64-Build (push) Successful in 7m5s
Build & Release / Linux-AMD64-Build (push) Successful in 12m7s
Build & Release / Linux-AARCH64-Build (push) Successful in 37m1s
2024-10-05 19:05:30 -07:00
3b8159b75f Fixed workflow.
Some checks failed
Build & Release / Windows-AMD64-Build (push) Failing after 6m8s
Build & Release / Linux-AMD64-Build (push) Failing after 17m38s
Build & Release / Linux-AARCH64-Build (push) Failing after 36m37s
2024-10-01 21:27:31 -07:00
62e7580d3a Added install dependency for pipewire.
Some checks failed
Build & Release / Linux-AARCH64-Build (push) Failing after 7s
Build & Release / Windows-AMD64-Build (push) Failing after 5m13s
Build & Release / Linux-AMD64-Build (push) Failing after 17m37s
2024-10-01 21:00:00 -07:00
11170006e9 Fixed workflow for Windows.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 8s
Build & Release / Linux-AARCH64-Build (push) Failing after 14s
Build & Release / Windows-AMD64-Build (push) Failing after 5m15s
2024-10-01 20:19:38 -07:00
37e3ca9360 Fixed workflow for Windows.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 8s
Build & Release / Linux-AARCH64-Build (push) Failing after 14s
Build & Release / Windows-AMD64-Build (push) Failing after 5m19s
2024-10-01 19:58:35 -07:00
daca00603a Fixed workflow for Windows.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 8s
Build & Release / Linux-AARCH64-Build (push) Failing after 14s
Build & Release / Windows-AMD64-Build (push) Failing after 6m8s
2024-10-01 19:50:21 -07:00
1f5299ad1b Fixed Win32 audio.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 8s
Build & Release / Linux-AARCH64-Build (push) Failing after 14s
Build & Release / Windows-AMD64-Build (push) Failing after 5m56s
2024-10-01 18:58:15 -07:00
dfa260b87c Backup. 2024-09-30 20:24:25 -07:00
fc8b771026 Added vcpkg.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 8s
Build & Release / Linux-AARCH64-Build (push) Failing after 14s
Build & Release / Windows-AMD64-Build (push) Failing after 3m52s
2024-09-30 19:55:44 -07:00
0b77c074cf Added vcpkg.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 8s
Build & Release / Linux-AARCH64-Build (push) Failing after 13s
Build & Release / Windows-AMD64-Build (push) Failing after 30s
2024-09-30 19:48:07 -07:00
5007a1047a Added vcpkg.
Some checks failed
Build & Release / Linux-AMD64-Build (push) Failing after 7s
Build & Release / Linux-AARCH64-Build (push) Failing after 14s
Build & Release / Windows-AMD64-Build (push) Failing after 30s
2024-09-30 19:22:22 -07:00
25860dc32a Added vcpkg. 2024-09-29 21:07:30 -07:00
d870599a60 Added vcpkg. 2024-09-29 21:06:30 -07:00
9bd3e1cd8d Added vcpkg. 2024-09-29 20:41:37 -07:00
681c0d09be Fixed Mat and CMakeLists 2024-09-16 16:18:49 -07:00
25762b0c29 Backup. 2024-09-03 05:37:23 -07:00
6afa08df82 Updated README.md again. 2024-08-15 19:41:05 -07:00
0a995a3f2c Updated README.md 2024-08-15 19:40:31 -07:00
c607b20bad Cleaned up and fixed some errors in the Json Parser. 2024-08-15 19:28:30 -07:00
2e705627ac Fixed CMakeLists.txt and System_LNX.cpp. 2024-08-15 17:33:04 -07:00
86a35fd668 Added System::GetDirDialog. 2024-08-04 02:09:10 -07:00
8d4420528a Optimized Button class. Added IsPressed and GetPressed methods. 2024-08-04 00:47:38 -07:00
3970b8d402 Fixed Mat and CMakeLists 2024-07-27 18:51:19 -07:00
6522994a1f Fixed Win32 keyboard input. 2024-07-27 10:12:10 -07:00
01a21032a5 Simplified Windows build again. 2024-07-24 15:37:45 -07:00
4d7e7596b6 Simplified Windows build. 2024-07-24 14:58:36 -07:00
97b5300e48 Merge pull request 'dynamic' (#10) from dynamic into main
Reviewed-on: EventHorizonStudio/EHS#10
2024-07-24 01:39:29 -07:00
8e7cc39000 Added shared library support. 2024-07-24 01:36:20 -07:00
1b70383448 Started dynamic library support. 2024-07-21 10:45:06 -07:00
195 changed files with 6444 additions and 1680 deletions

View File

@ -8,6 +8,9 @@ on:
jobs:
Windows-AMD64-Build:
runs-on: windows-x86_64
defaults:
run:
shell: powershell
steps:
- name: Check out repository code
uses: actions/checkout@v3
@ -19,8 +22,9 @@ jobs:
- name: Building/Compiling/Installing Project
run: |
cd ${{ gitea.workspace }}
cmake -A x64 -DCMAKE_BUILD_TYPE=Release --preset=default .
mkdir build
cd build
cmake -A x64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake" ..
cmake --build . --config Release
cmake --install .
@ -28,10 +32,12 @@ jobs:
run: |
cd ${{ gitea.workspace }}
mkdir bin
mv build/Release/EHS_Dyn.dll bin
mv build/Release/StrToHash.exe bin
mv build/Release/zlib1.dll bin
mkdir lib
mv build/Release/EHS.lib lib
mv build/Release/EHS_Stc.lib lib
mv build/Release/EHS_Dyn.lib lib
- name: Zipping Binaries
run: |
@ -49,6 +55,7 @@ jobs:
files: |-
ehs-windows-amd64.zip
api_key: '${{secrets.RELEASE_TOKEN}}'
pre_release: false
Linux-AMD64-Build:
runs-on: linux-x86_64
@ -58,7 +65,7 @@ jobs:
- name: Installing Dependencies
run: |
sudo pacman -S --noconfirm doxygen zip alsa-lib libxcb xcb-util-cursor
sudo pacman -S --noconfirm doxygen zip alsa-lib libxcb xcb-util-cursor pipewire
- name: Generating Documentation
run: |
@ -73,10 +80,12 @@ jobs:
- name: Creating Appropriate Directories
run: |
cd ${{ gitea.workspace }}
mkdir bin
mv libEHS_Dyn.so bin
mv StrToHash bin
mkdir lib
mv libEHS.a lib
mv libEHS_Stc.a lib
- name: Zipping Binaries
run: zip -r ehs-linux-amd64.zip include bin lib docs LICENSE RADME.md
@ -92,6 +101,7 @@ jobs:
files: |-
ehs-linux-amd64.zip
api_key: '${{secrets.RELEASE_TOKEN}}'
pre_release: false
Linux-AARCH64-Build:
runs-on: linux-aarch64
@ -100,7 +110,7 @@ jobs:
uses: actions/checkout@v3
- name: Installing Dependencies
run: sudo apt install -y doxygen zip libasound2-dev libxcb1-dev libxcb-xinput-dev libxcb-cursor-dev
run: sudo apt install -y doxygen zip libasound2-dev libxcb1-dev libxcb-xinput-dev libxcb-cursor-dev libpipewire-0.3-dev
- name: Generating Documentation
run: |
@ -115,10 +125,12 @@ jobs:
- name: Creating Appropriate Directories
run: |
cd ${{ gitea.workspace }}
mkdir bin
mv libEHS_Dyn.so bin
mv StrToHash bin
mkdir lib
mv libEHS.a lib
mv libEHS_Stc.a lib
- name: Zipping Binaries
run: zip -r ehs-linux-aarch64.zip include bin lib docs LICENSE README.md
@ -134,3 +146,4 @@ jobs:
files: |-
ehs-linux-aarch64.zip
api_key: '${{secrets.RELEASE_TOKEN}}'
pre_release: false

View File

@ -13,7 +13,8 @@ project(EHS CXX C)
if (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
set(IS_OS_WINDOWS TRUE)
set(USER_HOME_DIRECTORY $ENV{USERPROFILE})
set(USER_HOME_DIRECTORY "$ENV{USERPROFILE}")
string(REPLACE "\\" "/" USER_HOME_DIRECTORY "${USER_HOME_DIRECTORY}")
message("Building for the Windows operating system.")
elseif (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux")
set(IS_OS_LINUX TRUE)
@ -120,20 +121,27 @@ set(EHS_SOURCES
include/ehs/io/FileMonitor.h
include/ehs/io/Window.h
include/ehs/io/socket/Socket.h
src/io/socket/Request.cpp include/ehs/io/socket/Request.h
src/io/socket/Response.cpp include/ehs/io/socket/Response.h
src/io/socket/BaseDNS.cpp include/ehs/io/socket/BaseDNS.h
include/ehs/io/socket/DNS.h
src/io/socket/BaseUDP.cpp include/ehs/io/socket/BaseUDP.h
include/ehs/io/socket/UDP.h
src/io/socket/BaseTCP.cpp include/ehs/io/socket/BaseTCP.h
include/ehs/io/socket/TCP.h
src/io/socket/SSL.cpp include/ehs/io/socket/SSL.h
include/ehs/io/socket/ehc/NetUtils.h
src/io/socket/EHC.cpp include/ehs/io/socket/EHC.h
src/io/socket/ehc/NetFrag.cpp include/ehs/io/socket/ehc/NetFrag.h
src/io/socket/ehc/NetEnd.cpp include/ehs/io/socket/ehc/NetEnd.h
src/io/socket/ehc/NetSys.cpp include/ehs/io/socket/ehc/NetSys.h
src/io/socket/ehc/NetOp.cpp include/ehs/io/socket/ehc/NetOp.h
src/io/socket/rest/Twitch.cpp include/ehs/io/socket/rest/Twitch.h
src/io/socket/rest/TwitchChat.cpp include/ehs/io/socket/rest/TwitchChat.h
src/io/socket/rest/Spotify.cpp include/ehs/io/socket/rest/Spotify.h
include/ehs/io/socket/Socket.h
include/ehs/io/socket/TCP.h
include/ehs/io/socket/UDP.h
include/ehs/io/socket/DNS.h
src/io/audio/Audio.cpp include/ehs/io/audio/Audio.h
src/io/audio/BaseAudioDevice.cpp include/ehs/io/audio/BaseAudioDevice.h
@ -177,6 +185,17 @@ set(EHS_SOURCES
include/ehs/io/BaseDirectory.h
src/io/BaseDirectory.cpp
include/ehs/io/Directory.h
include/ehs/io/socket/ehc/NetEnc.h
src/io/socket/ehc/NetEnc.cpp
include/ehs/io/socket/ehc/NetChannel.h
src/io/socket/ehc/NetChannel.cpp
include/ehs/io/socket/ehc/NetServerCh.h
include/ehs/io/socket/ehc/NetClientCh.h
src/io/socket/ehc/NetClientCh.cpp
src/io/socket/ehc/NetServerCh.cpp
src/io/socket/ehc/NetUtils.cpp
include/ehs/io/socket/BaseICMP.h src/io/socket/BaseICMP.cpp
include/ehs/io/socket/ICMP.h
)
if (IS_OS_WINDOWS)
@ -195,7 +214,9 @@ if (IS_OS_WINDOWS)
src/io/COM.cpp include/ehs/io/COM.h
src/system/CPU_MSVC_AMD64.asm src/HRNG_MSVC.asm src/Math_MSVC_AMD64.asm
src/io/Directory_W32.cpp include/ehs/io/Directory_W32.h
include/ehs/io/socket/ICMP_W32.h src/io/socket/ICMP_W32.cpp
)
elseif (IS_OS_LINUX)
list(APPEND EHS_SOURCES
src/io/socket/UDP_BSD.cpp include/ehs/io/socket/UDP_BSD.h
@ -207,14 +228,15 @@ elseif (IS_OS_LINUX)
src/io/File_UNX.cpp include/ehs/io/File_UNX.h
src/io/FileMonitor_UNX.cpp include/ehs/io/FileMonitor_UNX.h
src/system/Mutex_PT.cpp include/ehs/system/Mutex_PT.h
src/io/audio/AudioDevice_ALSA.cpp include/ehs/io/audio/AudioDevice_ALSA.h
src/io/audio/AudioDevice_PW.cpp include/ehs/io/audio/AudioDevice_PW.h
src/system/FileSystem.cpp include/ehs/system/FileSystem.h
src/system/User.cpp include/ehs/system/User.h
src/io/Directory_LNX.cpp include/ehs/io/Directory_LNX.h
src/io/Usb_LNX.cpp include/ehs/io/Usb_LNX.h
include/ehs/io/socket/ICMP_LNX.h src/io/socket/ICMP_LNX.cpp
)
set(LINUX_WINDOW_SYSTEM "Wayland" CACHE STRING "Linux Window System")
#set(LINUX_WINDOW_SYSTEM "Wayland" CACHE STRING "Linux Window System")
if (LINUX_WINDOW_SYSTEM STREQUAL "Wayland")
add_compile_definitions(EHS_WS_WAYLAND)
@ -239,23 +261,37 @@ endif()
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
#message("${CMAKE_CXX_FLAGS}")
add_library(EHS ${EHS_SOURCES})
add_library(EHS_Stc STATIC ${EHS_SOURCES})
add_library(EHS_Dyn SHARED ${EHS_SOURCES})
add_executable(StrToHash src/StrToHash.cpp)
target_include_directories(EHS PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_compile_definitions(EHS_Dyn PRIVATE EHS_LIB_EXPORT)
target_include_directories(EHS_Stc PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_include_directories(EHS_Dyn PUBLIC ${PROJECT_SOURCE_DIR}/include)
if (IS_OS_LINUX)
set(CMAKE_INSTALL_PREFIX "${USER_HOME_DIRECTORY}/.local")
install(TARGETS EHS_Dyn LIBRARY DESTINATION "bin")
find_package(PkgConfig REQUIRED)
pkg_check_modules(PIPEWIRE REQUIRED libpipewire-0.3)
target_include_directories(EHS_Stc PRIVATE ${PIPEWIRE_INCLUDE_DIRS})
target_include_directories(EHS_Dyn PRIVATE ${PIPEWIRE_INCLUDE_DIRS})
elseif (IS_OS_WINDOWS)
set(CMAKE_INSTALL_PREFIX "${USER_HOME_DIRECTORY}/EHS")
install(TARGETS EHS_Dyn LIBRARY DESTINATION "lib")
install(TARGETS EHS_Dyn RUNTIME DESTINATION "bin")
file(GLOB DLL_FILES "${CMAKE_CURRENT_BINARY_DIR}/*.dll")
install(FILES ${DLL_FILES} DESTINATION "bin")
endif ()
install(TARGETS EHS DESTINATION lib)
install(TARGETS EHS_Stc DESTINATION "lib")
install(TARGETS StrToHash DESTINATION "bin")
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include)
install(TARGETS StrToHash DESTINATION bin)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" DESTINATION "include")
find_package(ZLIB REQUIRED)
if (ZLIB_FOUND)
@ -271,16 +307,22 @@ else ()
message(STATUS "OpenSSL was not found.")
endif ()
target_link_libraries(EHS OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB)
target_link_libraries(EHS_Stc OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB)
target_link_libraries(EHS_Dyn OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB)
target_link_libraries(StrToHash OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB)
if (IS_OS_WINDOWS)
target_link_libraries(StrToHash ws2_32 avrt EHS)
target_link_libraries(EHS_Dyn avrt ws2_32 IPHLPAPI)
target_link_libraries(StrToHash ws2_32 avrt EHS_Stc)
elseif (IS_OS_LINUX)
if (LINUX_WINDOW_SYSTEM STREQUAL "Wayland")
target_link_libraries(EHS_Dyn wayland-client)
target_link_libraries(StrToHash wayland-client)
elseif (LINUX_WINDOW_SYSTEM STREQUAL "XCB")
target_link_libraries(EHS_Dyn xcb xcb-cursor xcb-xfixes xcb-xinput)
target_link_libraries(StrToHash xcb xcb-cursor xcb-xfixes xcb-xinput)
endif ()
target_link_libraries(StrToHash z asound EHS)
target_link_libraries(EHS_Dyn z asound pipewire-0.3)
target_link_libraries(StrToHash z asound EHS_Stc)
endif ()

View File

@ -1,12 +0,0 @@
{
"version": 3,
"configurePresets": [
{
"name": "default",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
}
}
]
}

View File

@ -22,6 +22,7 @@ This project does not fully follow the C++ standard.
- Semaphores
- CPU information and features at runtime
- HTTP(S) Socket Layer
- ICMP & ICMPv6 Socket
- TCP Socket
- UDP Socket
- COM (Serial) IO
@ -73,8 +74,10 @@ Wayland Window System. Wayland support is currently not fully supported yet, use
- [CMake](https://cmake.org/)
- [vcpkg](https://learn.microsoft.com/en-us/vcpkg/get_started/get-started?pivots=shell-cmd)
`vcpkg install` - Use this command in the directory where `vcpkg.json` is located to download/install dependencies.
### Building
`cmake -A x64 -DCMAKE_BUILD_TYPE=Release --preset=default /path/to/source`
`cmake -A x64 -DCMAKE_BUILD_TYPE=Release /path/to/source`
### Compiling
`cmake --build /path/to/build --config Release`
@ -89,12 +92,10 @@ This will require the terminal to be running in administrator mode.
#include <ehs/EHS.h>
#include <ehs/io/Console.h>
ehs::Int_32 Main(ehs::Str_8* appName, ehs::Str_8* appVerId, ehs::Version* appVer)
int main()
{
// Simple identifying meta-data for the logger.
*appName = "Simple Example App"; // The application's name
*appVerId = "Release"; // The app's version prefix; i.e. Alpha, Beta or Release as an example.
*appVer = {1, 0, 0}; // The app's version major, minor and patch number.
ehs::Initialize("Simple Example App", "Release", {1, 0, 0});
ehs::Console::Write_8("How old are you?"); // Write to the console in UTF_8 character encoding.
@ -103,13 +104,15 @@ ehs::Int_32 Main(ehs::Str_8* appName, ehs::Str_8* appVerId, ehs::Version* appVer
if (!response.IsNum())
{
ehs::Console::Clear(); // Clear the console's buffer.
return Main(appName, appVerId, appVer); // Repeat process if given response is not a number.
return main(); // Repeat process if given response is not a number.
}
ehs::UInt_8 age = response.ToDecimal<ehs::UInt_8>(); // Converts the string number into a number based primitive.
ehs::Console::Write("Your age is " + ehs::Str_8::FromNum(age) + "."); // Write the console with the age converted back to string.
ehs::Uninitialize();
return 0;
}
```

View File

@ -12,7 +12,7 @@ namespace ehs
/// @tparam T Array data type to use.
/// @tparam N Number data type to use.
template<typename T, typename N = UInt_64>
class Array : public BaseObj
class Array
{
protected:
T* data;
@ -20,7 +20,7 @@ namespace ehs
public:
/// Frees any data created on the heap.
~Array() override
~Array()
{
delete[] data;
}
@ -29,7 +29,6 @@ namespace ehs
Array()
: data(nullptr), size(0)
{
AddType("Array");
}
/// Initializes an empty array with the given size.
@ -37,7 +36,6 @@ namespace ehs
explicit Array(const N size)
: data(new T[size]), size(size)
{
AddType("Array");
}
/// Initializes this array with an initializer list object.
@ -45,8 +43,6 @@ namespace ehs
Array(std::initializer_list<T> list)
: data(new T[list.size()]), size(list.size())
{
AddType("Array");
N i = 0;
for (auto v = list.begin(); v != list.end(); ++v)
data[i++] = std::move(*v);
@ -58,14 +54,12 @@ namespace ehs
Array(const T* const data, const N size)
: data(new T[size]), size(size)
{
AddType("Array");
for (N i = 0; i < size; ++i)
this->data[i] = data[i];
}
Array(Array&& array) noexcept
: BaseObj(array), data(array.data), size(array.size)
: data(array.data), size(array.size)
{
array.data = nullptr;
array.size = 0;
@ -74,7 +68,7 @@ namespace ehs
/// Copies all members from the given array object.
/// @param [in] array The array object to copy from.
Array(const Array& array)
: BaseObj((BaseObj&&)array), data(new T[array.size]), size(array.size)
: data(new T[array.size]), size(array.size)
{
for (N i = 0; i < size; ++i)
data[i] = array.data[i];
@ -85,8 +79,6 @@ namespace ehs
if (this == &array)
return *this;
BaseObj::operator=((BaseObj&&)array);
delete[] data;
data = array.data;
size = array.size;
@ -105,8 +97,6 @@ namespace ehs
if (this == &array)
return *this;
BaseObj::operator=(array);
delete[] data;
data = new T[array.size];
for (N i = 0; i < array.size; ++i)

View File

@ -5,20 +5,20 @@
namespace ehs
{
class Base64
class EHS_LIB_IO Base64
{
private:
static const char ascii[];
public:
static Str_8 Encode(const Str_8 input);
static Str_8 Encode(const Str_8 &input);
static Str_8 Decode(const Str_8 input);
static Str_8 Decode(const Str_8 &input);
private:
static char Find(const char c);
static char Find(char c);
static bool IsBase64(const char c);
static bool IsBase64(char c);
};
}

View File

@ -5,7 +5,7 @@
namespace ehs
{
class BaseObj
class EHS_LIB_IO BaseObj
{
private:
Type* hierarchy;

View File

@ -4,7 +4,7 @@
namespace ehs
{
class Color3
class EHS_LIB_IO Color3
{
public:
float r;
@ -13,13 +13,13 @@ namespace ehs
Color3();
Color3(const float scalar);
Color3(float scalar);
Color3(const float r, const float g, const float b);
Color3(float r, float g, float b);
Color3(const Color3& color);
Color3& operator=(const float scalar);
Color3& operator=(float scalar);
Color3& operator=(const Color3& color);
@ -27,9 +27,9 @@ namespace ehs
bool operator!=(const Color3& color) const;
float operator[](const UInt_64 i) const;
float operator[](UInt_64 i) const;
float& operator[](const UInt_64 i);
float& operator[](UInt_64 i);
Color3& operator*=(const Color3& color);

View File

@ -5,7 +5,7 @@
namespace ehs
{
class Color4
class EHS_LIB_IO Color4
{
public:
float r;
@ -15,15 +15,15 @@ namespace ehs
Color4();
Color4(const float scalar);
Color4(float scalar);
explicit Color4(const Color3& color);
Color4(const float r, const float g, const float b, const float a = 1.0f);
Color4(float r, float g, float b, float a = 1.0f);
Color4(const Color4& color);
Color4& operator=(const float scalar);
Color4& operator=(float scalar);
Color4& operator=(const Color3& color);
@ -33,9 +33,9 @@ namespace ehs
bool operator!=(const Color4& color) const;
float operator[](const UInt_64 i) const;
float operator[](UInt_64 i) const;
float& operator[](const UInt_64 i);
float& operator[](UInt_64 i);
Color4& operator*=(const Color4& color);

View File

@ -5,7 +5,7 @@
namespace ehs
{
class Data
class EHS_LIB_IO Data
{
public:
template<typename T>

View File

@ -21,9 +21,9 @@ namespace ehs
UINT_8
};
DataType FromAudioBitDepth(UInt_16 bitDepth);
EHS_LIB_IO DataType FromAudioBitDepth(UInt_16 bitDepth);
UInt_8 ToByteDepth(DataType type);
EHS_LIB_IO UInt_8 ToByteDepth(DataType type);
UInt_8 ToBitDepth(DataType type);
EHS_LIB_IO UInt_8 ToBitDepth(DataType type);
}

View File

@ -19,45 +19,47 @@ namespace ehs
SIZE
};
EHS_LIB_IO void Initialize(Str_8 appName, Str_8 appVerId, const Version &appVer);
EHS_LIB_IO void Uninitialize();
/// Retrieves the UTF32 C-style string as "Event Horizon Standard"
/// @returns The result.
const Char_32* GetName_32();
EHS_LIB_IO const Char_32* GetName_32();
/// Retrieves the UTF16 C-style string as "Event Horizon Standard"
/// @returns The result.
const Char_16* GetName_16();
EHS_LIB_IO const Char_16* GetName_16();
/// Retrieves the UTF8 C-style string as "Event Horizon Standard"
/// @returns The result.
const Char_8* GetName_8();
EHS_LIB_IO const Char_8* GetName_8();
Str_8 GetAppName_8();
EHS_LIB_IO Str_8 GetAppName_8();
const Char_32* GetAcronym_32();
EHS_LIB_IO const Char_32* GetAcronym_32();
const Char_16* GetAcronym_16();
EHS_LIB_IO const Char_16* GetAcronym_16();
const Char_8* GetAcronym_8();
EHS_LIB_IO const Char_8* GetAcronym_8();
/// Retrieves the version identifier in UTF32.
/// @returns The result.
const Char_32* GetVersionId_32();
EHS_LIB_IO const Char_32* GetVersionId_32();
/// Retrieves the version identifier in UTF16.
/// @returns The result.
const Char_16* GetVersionId_16();
EHS_LIB_IO const Char_16* GetVersionId_16();
/// Retrieves the version identifier in UTF8.
/// @returns The result.
const Char_8* GetVersionId_8();
EHS_LIB_IO const Char_8* GetVersionId_8();
Str_8 GetAppVersionId_8();
EHS_LIB_IO Str_8 GetAppVersionId_8();
/// Retrieves the current Event Horizon Standard version.
/// @returns The result.
Version GetVersion();
EHS_LIB_IO Version GetVersion();
Version GetAppVersion();
EHS_LIB_IO Version GetAppVersion();
};
extern ehs::SInt_32 Main(ehs::Str_8* appName, ehs::Str_8* appVerId, ehs::Version* appVer);

View File

@ -9,7 +9,7 @@ namespace ehs
{
typedef bool (*GcLogic)(BaseObj*);
class GC
class EHS_LIB_IO GC
{
private:
static Array<GcLogic> logic;

View File

@ -5,7 +5,7 @@
namespace ehs
{
class HRNG
class EHS_LIB_IO HRNG
{
public:
static UInt_64 GenerateSeed_u64();

View File

@ -25,7 +25,7 @@ namespace ehs
/// A helper class for holding error information and handling them.
/// @tparam T The character data type to use.
/// @tparam N The number data type to use.
class Log
class EHS_LIB_IO Log
{
private:
static void DefaultRaisedCb(const Log &log);

View File

@ -120,7 +120,7 @@ namespace ehs
Mat2<T> GetMinor() const
{
Mat2<T> result(0);
Mat2<T> result;
result.data[0] = data[3];
result.data[1] = data[2];
result.data[2] = data[1];
@ -187,7 +187,7 @@ namespace ehs
Mat2<T> GetInverse() const
{
T det = GetDeterminant();
if (Math::ComCmp(det, 0.0f))
if (Math::ComCmp(det, 0))
return {};
return GetAdjugate() * (1 / det);
@ -196,7 +196,7 @@ namespace ehs
void Inverse()
{
T det = GetDeterminant();
if (Math::ComCmp(det, 0.0f))
if (Math::ComCmp(det, 0))
return;
Adjugate();
@ -212,6 +212,9 @@ namespace ehs
}
};
template class EHS_LIB_IO Mat2<float>;
template class EHS_LIB_IO Mat2<double>;
typedef Mat2<float> Mat2_f;
typedef Mat2<double> Mat2_d;
}

View File

@ -50,7 +50,7 @@ namespace ehs
Mat2<T> result;
for (UInt_8 i = 0; i < 4; ++i)
result.data[i] = data[i / 2 * 4 + i % 2];
result[i] = data[i / 2 * 4 + i % 2];
return result;
}
@ -234,7 +234,7 @@ namespace ehs
Mat3<T> GetInverse() const
{
T det = GetDeterminant();
if (Math::ComCmp(det, 0.0f))
if (Math::ComCmp(det, 0))
return {};
return GetAdjugate() * (1 / det);
@ -243,7 +243,7 @@ namespace ehs
void Inverse()
{
T det = GetDeterminant();
if (Math::ComCmp(det, 0.0f))
if (Math::ComCmp(det, 0))
return;
Adjugate();
@ -317,6 +317,9 @@ namespace ehs
}
};
template class EHS_LIB_IO Mat3<float>;
template class EHS_LIB_IO Mat3<double>;
typedef Mat3<float> Mat3_f;
typedef Mat3<double> Mat3_d;
}

View File

@ -268,7 +268,7 @@ namespace ehs
Mat4<T> GetInverse() const
{
T det = GetDeterminant();
if (Math::ComCmp(det, 0.0f))
if (Math::ComCmp(det, 0))
return {};
return GetAdjugate() * (1 / det);
@ -277,7 +277,7 @@ namespace ehs
void Inverse()
{
T det = GetDeterminant();
if (Math::ComCmp(det, 0.0f))
if (Math::ComCmp(det, 0))
return;
Adjugate();
@ -332,14 +332,14 @@ namespace ehs
static Mat4<T> YawRotate(const T angle)
{
T radians = Math::Rads(angle);
T radians = Math::Rads<T>(angle);
Mat4<T> result;
result.data[0] = Math::Cos(radians);
result.data[2] = -Math::Sin(radians);
result.data[0] = Math::Cos<T>(radians);
result.data[2] = -Math::Sin<T>(radians);
result.data[5] = 1;
result.data[8] = Math::Sin(radians);
result.data[10] = Math::Cos(radians);
result.data[8] = Math::Sin<T>(radians);
result.data[10] = Math::Cos<T>(radians);
result.data[15] = 1;
return result;
@ -347,7 +347,7 @@ namespace ehs
static Mat4<T> RollRotate(const T angle)
{
T radians = Math::Rads(angle);
T radians = Math::Rads<T>(angle);
Mat4<T> result;
result.data[0] = Math::Cos(radians);
@ -367,7 +367,7 @@ namespace ehs
static Mat4<T> RH_Perspective(const T fov, const T aspect, const T zNear, const T zFar)
{
const float tanHalfFovy = tan(Math::Rads(fov) / 2.0f);
const T tanHalfFovy = Math::Tan<T>(Math::Rads(fov) / 2.0f);
Mat4<T> result;
result[0] = 1.0f / (aspect * tanHalfFovy);
@ -380,7 +380,7 @@ namespace ehs
static Mat4<T> LH_Perspective(const T fov, const T aspect, const T zNear, const T zFar)
{
const float tanHalfFovy = Math::Tan(Math::Rads(fov) / 2.0f);
const T tanHalfFovy = Math::Tan<T>(Math::Rads(fov) / 2.0f);
Mat4<T> result;
result[0] = 1.0f / (aspect * tanHalfFovy);
@ -421,6 +421,9 @@ namespace ehs
}
};
template class EHS_LIB_IO Mat4<float>;
template class EHS_LIB_IO Mat4<double>;
typedef Mat4<float> Mat4_f;
typedef Mat4<double> Mat4_d;
}

View File

@ -6,7 +6,7 @@
namespace ehs
{
class Math
class EHS_LIB_IO Math
{
private:
static float Sqrt_AVX(const float from);
@ -26,22 +26,22 @@ namespace ehs
constexpr static double dblEpsilon = 1e-16;
/// Absolute tolerance comparison for single precision floats.
static bool AbsCmp(const float a, const float b);
static bool AbsCmp(float a, float b);
/// Absolute tolerance comparison for double precision floats.
static bool AbsCmp(const double a, const double b);
static bool AbsCmp(double a, double b);
/// Relative tolerance comparison for single precision floats.
static bool RelCmp(const float a, const float b);
static bool RelCmp(float a, float b);
/// Relative tolerance comparison for double precision floats.
static bool RelCmp(const double a, const double b);
static bool RelCmp(double a, double b);
/// Combined absolute and relative tolerance comparison for single precision floats.
static bool ComCmp(const float a, const float b);
static bool ComCmp(float a, float b);
/// Combined absolute and relative tolerance comparison for double precision floats.
static bool ComCmp(const double a, const double b);
static bool ComCmp(double a, double b);
template<typename T = float>
static T Max(const T a, const T b)

View File

@ -10,9 +10,9 @@ namespace ehs
void* data;
};
bool HasPtrData(void* data);
EHS_LIB_IO bool HasPtrData(void* data);
void AddPtrData(void* data);
EHS_LIB_IO void AddPtrData(void* data);
bool RemovePtrData(void* data);
EHS_LIB_IO bool RemovePtrData(void* data);
}

View File

@ -21,7 +21,7 @@
namespace ehs
{
template<typename N = UInt_64>
class Serializer : public BaseObj
class Serializer
{
private:
Endianness endianness;
@ -30,7 +30,7 @@ namespace ehs
N offset;
public:
~Serializer() override
~Serializer()
{
delete[] data;
}
@ -38,32 +38,27 @@ namespace ehs
Serializer()
: endianness(Endianness::BE), data(nullptr), size(0), offset(0)
{
AddType("Serializer");
}
Serializer(const Endianness endianness)
: endianness(endianness), data(nullptr), size(0), offset(0)
{
AddType("Serializer");
}
Serializer(const Endianness endianness, const N size)
: endianness(endianness), data(new Byte[size]), size(size), offset(0)
{
AddType("Serializer");
}
Serializer(const Endianness endianness, const Byte* const data, const N size, const N offset = 0)
: endianness(endianness), data(new Byte[size]), size(size), offset(offset)
{
AddType("Serializer");
for (N i = 0; i < size; ++i)
this->data[i] = data[i];
}
Serializer(Serializer&& serializer) noexcept
: BaseObj((BaseObj&&)serializer), endianness(serializer.endianness), data(serializer.data),
: endianness(serializer.endianness), data(serializer.data),
size(serializer.size), offset(serializer.offset)
{
serializer.data = nullptr;
@ -72,7 +67,7 @@ namespace ehs
}
Serializer(const Serializer& serializer)
: BaseObj(serializer), endianness(serializer.endianness), data(new Byte[serializer.size]),
: endianness(serializer.endianness), data(new Byte[serializer.size]),
size(serializer.size), offset(serializer.offset)
{
for (N i = 0; i < serializer.size; ++i)
@ -84,8 +79,6 @@ namespace ehs
if (this == &serializer)
return *this;
BaseObj::operator=((Serializer&&)serializer);
endianness = serializer.endianness;
delete[] data;
data = serializer.data;
@ -104,8 +97,6 @@ namespace ehs
if (this == &serializer)
return *this;
BaseObj::operator=(serializer);
endianness = serializer.endianness;
delete[] data;
@ -1228,7 +1219,7 @@ namespace ehs
void Resize(const N newSize)
{
Byte* result = new Byte[newSize];
Util::Copy(result, data, size);
Util::Copy(result, data, newSize >= size ? size : newSize);
delete[] data;
data = result;
size = newSize;

View File

@ -25,7 +25,7 @@ namespace ehs
/// @tparam T The character's data type to use.
/// @tparam N The number data type to use.
template<typename T = Char_8, typename N = UInt_64>
class Str : public BaseObj
class Str
{
private:
N size;
@ -33,7 +33,7 @@ namespace ehs
public:
/// Frees any data created on the heap.
~Str() override
~Str()
{
delete[] data;
}
@ -42,7 +42,6 @@ namespace ehs
Str()
: size(0), data(nullptr)
{
AddType("Str");
}
/// Initializes members with given C-style string.
@ -56,8 +55,6 @@ namespace ehs
Util::Copy(data, str, Size(true));
data[this->size] = 0;
AddType("Str");
}
/// Initializes members with given C-style string.
@ -70,8 +67,6 @@ namespace ehs
Util::Copy(data, str, Size(true));
data[size] = 0;
AddType("Str");
}
/// Initializes string with the given size.
@ -80,13 +75,11 @@ namespace ehs
: size(size), data(new T[size + 1])
{
data[size] = 0;
AddType("Str");
}
/// A move constructor.
Str(Str&& str) noexcept
: BaseObj((BaseObj&&)str), size(str.size), data(str.data)
: size(str.size), data(str.data)
{
str.size = 0;
str.data = nullptr;
@ -95,7 +88,7 @@ namespace ehs
/// Copies all members from the given string object.
/// @param [in] str The string object to copy from.
Str(const Str& str)
: BaseObj(str), size(str.size), data(new T[size + 1])
: size(str.size), data(new T[size + 1])
{
Util::Copy(data, str.data, Size(true));
@ -107,8 +100,6 @@ namespace ehs
if (this == &str)
return *this;
BaseObj::operator=((BaseObj&&)str);
size = str.size;
delete[] data;
data = str.data;
@ -127,8 +118,6 @@ namespace ehs
if (&str == this)
return *this;
BaseObj::operator=(str);
size = str.size;
delete[] data;
@ -564,7 +553,7 @@ namespace ehs
return;
}
Util::Copy(data[dstOffset], src, src.Size(true));
Util::Copy(&data[dstOffset], src, src.Size(true));
}
/// Copies a C-style string to the referenced string object.
@ -580,7 +569,7 @@ namespace ehs
return;
}
Util::Copy(data[dstOffset], src, srcSize * sizeof(T));
Util::Copy(&data[dstOffset], src, srcSize * sizeof(T));
}
/// Copies a C-style string to the referenced string object.
@ -595,7 +584,7 @@ namespace ehs
return;
}
Util::Copy(data[dstOffset], src, srcSize * sizeof(T));
Util::Copy(&data[dstOffset], src, srcSize * sizeof(T));
}
/// Inserts a string at a specified index.
@ -747,7 +736,7 @@ namespace ehs
T* result = new T[size + inSize + 1];
Util::Copy(result, data, Size(true));
Util::Copy(result[size], value, inSize * sizeof(T));
Util::Copy(&result[size], value, inSize * sizeof(T));
result[size + inSize] = 0;
@ -1027,7 +1016,7 @@ namespace ehs
/// @param [in] pattern The search pattern for optimization.
/// @param [in] result What index to return where the first instance is found.
/// @returns The index where the instance was found with the result varying from the result parameter.
bool Find(const Str<T, N>& ide, N* const index = nullptr, const SearchPattern pattern = SearchPattern::LEFT_RIGHT, const IndexResult result = IndexResult::BEGINNING) const
bool Find(const Str<T, N> &ide, N* const index = nullptr, const SearchPattern pattern = SearchPattern::LEFT_RIGHT, const IndexResult result = IndexResult::BEGINNING) const
{
if (pattern == SearchPattern::LEFT_RIGHT)
{
@ -1271,8 +1260,11 @@ namespace ehs
/// @note Use "IsNum" before this if the string object is not guaranteed to be a number.
float ToFloat() const
{
Str<T, N> ide;
ide.Push(46);
N decPoint = size;
Find(".", &decPoint);
Find(ide, &decPoint);
float result = 0.0f;
float fraction = 0.0f;
@ -1297,8 +1289,11 @@ namespace ehs
/// @note Use "IsNum" before this if the string object is not guaranteed to be a number.
double ToDouble() const
{
Str<T, N> ide;
ide.Push(46);
N decPoint = size;
Find(".", &decPoint);
Find(ide, &decPoint);
double result = 0.0f;
double fraction = 0.0f;
@ -1323,8 +1318,11 @@ namespace ehs
/// @note Use "IsNum" before this if the string object is not guaranteed to be a number.
long double ToLDouble() const
{
Str<T, N> ide;
ide.Push(46);
N decPoint = size;
Find(".", &decPoint);
Find(ide, &decPoint);
long double result = 0.0f;
long double fraction = 0.0f;
@ -1679,7 +1677,7 @@ namespace ehs
Str<T, N> result;
if (whole < 0)
result += "-";
result.Push(45);
result += Str<T, N>::FromNum(whole);
@ -1691,7 +1689,7 @@ namespace ehs
if (!fraction)
return result;
result += ".";
result.Push(46);
Str<T, N> fResult(maxDecimals);
N i = 0;
@ -1721,7 +1719,7 @@ namespace ehs
Str<T, N> result;
if (whole < 0)
result += "-";
result.Push(45);
result += Str<T, N>::FromNum(whole);
@ -1733,7 +1731,7 @@ namespace ehs
if (!fraction)
return result;
result += ".";
result.Push(46);
Str<T, N> fResult(maxDecimals);
N i = 0;
@ -1763,7 +1761,7 @@ namespace ehs
Str<T, N> result;
if (whole < 0)
result += "-";
result.Push(45);
result += Str<T, N>::FromNum(whole);
@ -1775,7 +1773,7 @@ namespace ehs
if (!fraction)
return result;
result += ".";
result.Push(46);
Str<T, N> fResult(maxDecimals);
N i = 0;
@ -1870,6 +1868,9 @@ namespace ehs
/// @returns The character count.
static N Len(const T* const str)
{
if (!str)
return 0;
N count = 0;
while (str[count])
++count;
@ -1892,6 +1893,10 @@ namespace ehs
}
};
template class EHS_LIB_IO Str<Char_32, UInt_64>;
template class EHS_LIB_IO Str<Char_16, UInt_64>;
template class EHS_LIB_IO Str<Char_8, UInt_64>;
typedef Str<Char_32, UInt_64> Str_32;
typedef Str<Char_16, UInt_64> Str_16;
typedef Str<Char_8, UInt_64> Str_8;

View File

@ -9,7 +9,7 @@ namespace ehs
{
typedef void (*TaskCb)(Serializer<UInt_64>*);
class Task
class EHS_LIB_IO Task
{
private:
bool working;

View File

@ -5,7 +5,7 @@
namespace ehs
{
class Type
class EHS_LIB_IO Type
{
private:
friend class BaseObj;

View File

@ -5,7 +5,7 @@
namespace ehs
{
class URI
class EHS_LIB_IO URI
{
public:
/// Encodes specialized characters in the URI.

View File

@ -13,7 +13,7 @@ namespace ehs
};
/// A helper class for converting between UTF8, 16 and 32.
class UTF
class EHS_LIB_IO UTF
{
public:
/// Converts the given UTF16 C-style string into UTF32.

View File

@ -4,7 +4,7 @@
namespace ehs
{
class Util
class EHS_LIB_IO Util
{
public:
static bool Compare(const void* a, const void* b, UInt_64 size);

View File

@ -14,7 +14,7 @@ namespace ehs
/// @tparam N Number data type to use.
/// @note If extra memory is set to five then each time that memory is filled it will add five extra.
template<typename T, typename N = UInt_64>
class Vector : public BaseObj
class Vector
{
protected:
N rawSize;
@ -24,7 +24,7 @@ namespace ehs
public:
/// Frees any data created on the heap.
~Vector() override
~Vector()
{
delete[] data;
}
@ -33,7 +33,6 @@ namespace ehs
Vector()
: rawSize(0), size(0), stride(5), data(nullptr)
{
AddType("Vector");
}
/// Initializes members for pre-allocated memory to write to later.
@ -42,7 +41,6 @@ namespace ehs
Vector(const N size, const N stride)
: rawSize(size + stride), size(size), stride(stride), data(new T[rawSize])
{
AddType("Vector");
}
/// Initializes this vector with an initializer list object.
@ -51,8 +49,6 @@ namespace ehs
Vector(std::initializer_list<T> list, const N stride = 5)
: rawSize(0), size(list.size()), stride(stride), data(nullptr)
{
AddType("Vector");
if (stride)
{
rawSize = list.size() / stride * stride;
@ -78,8 +74,6 @@ namespace ehs
Vector(const T* data, const N size, const N stride)
: rawSize(0), size(size), stride(stride), data(nullptr)
{
AddType("Vector");
if (stride)
{
rawSize = size / stride * stride;
@ -100,14 +94,14 @@ namespace ehs
/// Copies all members from the given vector object.
/// @param [in] vec The vector object to copy from.
Vector(const Vector& vec)
: BaseObj(vec), rawSize(vec.rawSize), size(vec.size), stride(vec.stride), data(new T[rawSize])
: rawSize(vec.rawSize), size(vec.size), stride(vec.stride), data(new T[rawSize])
{
for (N i = 0; i < size; ++i)
data[i] = vec.data[i];
}
Vector(Vector&& vec) noexcept
: BaseObj((BaseObj&&)vec), rawSize(vec.rawSize), size(vec.size), stride(vec.stride), data(vec.data)
: rawSize(vec.rawSize), size(vec.size), stride(vec.stride), data(vec.data)
{
vec.rawSize = 0;
vec.size = 0;
@ -123,8 +117,6 @@ namespace ehs
if (this == &vec)
return *this;
BaseObj::operator=(vec);
rawSize = vec.rawSize;
size = vec.size;
stride = vec.stride;
@ -143,8 +135,6 @@ namespace ehs
if (this == &vec)
return *this;
BaseObj::operator=((BaseObj&&)vec);
rawSize = vec.rawSize;
size = vec.size;
stride = vec.stride;

View File

@ -5,7 +5,7 @@
namespace ehs
{
/// A helper class for storing version major, minor and patch.
class Version
class EHS_LIB_IO Version
{
public:
UInt_32 major;

View File

@ -5,7 +5,7 @@
namespace ehs
{
class Database
class EHS_LIB_IO Database
{
private:
UInt_64 hashId;

View File

@ -7,7 +7,7 @@ namespace ehs
{
class DbTable;
class DbObject
class EHS_LIB_IO DbObject
{
private:
friend class DbTable;

View File

@ -10,7 +10,7 @@ namespace ehs
{
class Database;
class DbTable
class EHS_LIB_IO DbTable
{
private:
friend class Database;

View File

@ -8,7 +8,7 @@ namespace ehs
class DbVarTmpl;
class DbObject;
class DbVar
class EHS_LIB_IO DbVar
{
private:
friend class DbObject;

View File

@ -8,7 +8,7 @@ namespace ehs
{
class DbVar;
class DbVarTmpl
class EHS_LIB_IO DbVarTmpl
{
private:
friend class DbTable;

View File

@ -5,7 +5,7 @@
namespace ehs
{
class BaseDirectory
class EHS_LIB_IO BaseDirectory
{
public:
static Array<Str_8> GetAllFiles(const Str_8 &dir);

View File

@ -25,7 +25,7 @@ namespace ehs
};
/// A cross-platform wrapper class that handles native file input/output.
class BaseFile
class EHS_LIB_IO BaseFile
{
protected:
Str_8 path;

View File

@ -11,7 +11,7 @@
namespace ehs
{
class BaseFileMonitor
class EHS_LIB_IO BaseFileMonitor
{
protected:
Str_8 filePath;

View File

@ -18,7 +18,7 @@ namespace ehs
I_BEAM
};
class BaseWindow
class EHS_LIB_IO BaseWindow
{
protected:
bool created;

View File

@ -20,7 +20,7 @@ namespace ehs
TWO
};
class COM
class EHS_LIB_IO COM
{
private:
UInt_8 port;

View File

@ -12,7 +12,7 @@ namespace ehs
typedef int ConsoleHdl;
#endif
class Console
class EHS_LIB_IO Console
{
private:
static ConsoleHdl hdlOut;

View File

@ -4,7 +4,7 @@
namespace ehs
{
class Directory : public BaseDirectory
class EHS_LIB_IO Directory : public BaseDirectory
{
public:
static Array<Str_8> GetAllFiles(const Str_8 &dir);

View File

@ -4,7 +4,7 @@
namespace ehs
{
class Directory : public BaseDirectory
class EHS_LIB_IO Directory : public BaseDirectory
{
public:
static Array<Str_8> GetAllFiles(const Str_8 &dir);

View File

@ -5,7 +5,7 @@
namespace ehs
{
class FileMonitor : public BaseFileMonitor
class EHS_LIB_IO FileMonitor : public BaseFileMonitor
{
private:
int hdl;

View File

@ -5,7 +5,7 @@
namespace ehs
{
class FileMonitor final : public BaseFileMonitor
class EHS_LIB_IO FileMonitor final : public BaseFileMonitor
{
private:
Handle hdl;

View File

@ -10,7 +10,7 @@
namespace ehs
{
class File : public BaseFile
class EHS_LIB_IO File : public BaseFile
{
private:
int hdl;

View File

@ -10,7 +10,7 @@
namespace ehs
{
class File : public BaseFile
class EHS_LIB_IO File : public BaseFile
{
private:
HANDLE hdl;

View File

@ -10,7 +10,7 @@
namespace ehs
{
class FontAtlas : public BaseObj
class EHS_LIB_IO FontAtlas : public BaseObj
{
private:
UInt_64 hashId;

View File

@ -7,7 +7,7 @@
namespace ehs
{
class Glyph
class EHS_LIB_IO Glyph
{
private:
Char_32 code;

View File

@ -8,7 +8,7 @@
namespace ehs
{
class RIFF
class EHS_LIB_IO RIFF
{
private:
Str_8 type;

View File

@ -6,7 +6,7 @@
namespace ehs
{
class RIFF_Chunk
class EHS_LIB_IO RIFF_Chunk
{
private:
Str_8 id;

View File

@ -7,7 +7,7 @@
namespace ehs
{
class Resource : public BaseObj
class EHS_LIB_IO Resource : public BaseObj
{
private:
ehs::UInt_64 hashId;

View File

@ -4,7 +4,7 @@
namespace ehs
{
class UsbBase
class EHS_LIB_IO UsbBase
{
private:
UInt_32 bus;

View File

@ -5,7 +5,7 @@
namespace ehs
{
class Usb final : public UsbBase
class EHS_LIB_IO Usb final : public UsbBase
{
private:
int hdl;

View File

@ -14,7 +14,7 @@
namespace ehs
{
class Window : public BaseWindow
class EHS_LIB_IO Window : public BaseWindow
{
private:
UInt_32 owner;
@ -71,13 +71,6 @@ namespace ehs
void SetIcon(const Str_8& filePath);
/// Sets the windows client scale.
/// @param [in] w The width in pixels.
/// @param [in] h The height in pixels.
void SetClientSize(const Vec2<UInt_32>& size);
Vec2<UInt_32> GetClientSize();
/// Gets the windows native handle for the operating system or other native tasks.
/// @returns The window's native handle.
HWND GetHdl() const;

View File

@ -8,7 +8,7 @@
namespace ehs
{
class Window : public BaseWindow
class EHS_LIB_IO Window : public BaseWindow
{
protected:
wl_display *display;

View File

@ -8,7 +8,7 @@
namespace ehs
{
class Window : public BaseWindow
class EHS_LIB_IO Window : public BaseWindow
{
protected:
friend class Input;

View File

@ -11,7 +11,7 @@
namespace ehs
{
class Audio : public Resource
class EHS_LIB_IO Audio : public Resource
{
private:
static Array<AudioCodec> codecs;
@ -81,10 +81,14 @@ namespace ehs
UInt_64 GetSampleCount() const;
UInt_8 GetFrameSize() const;
UInt_64 GetSize() const;
float GetLength() const;
Byte* GetFrame(UInt_64 frameIndex) const;
Array<Byte> FrameAsMono(UInt_64 frameIndex) const;
Array<Byte> FrameAsStereo(UInt_64 frameIndex) const;

View File

@ -8,7 +8,7 @@ namespace ehs
{
class Audio;
class AudioCodec
class EHS_LIB_IO AudioCodec
{
private:
Str_8 id;

View File

@ -5,5 +5,5 @@
#if defined(EHS_OS_WINDOWS)
#include "AudioDevice_W32.h"
#elif defined(EHS_OS_LINUX)
#include "AudioDevice_ALSA.h"
#include "AudioDevice_PW.h"
#endif

View File

@ -1,46 +0,0 @@
#pragma once
#include "ehs/EHS.h"
#include "BaseAudioDevice.h"
#include <alsa/asoundlib.h>
namespace ehs
{
class AudioDevice : public BaseAudioDevice
{
private:
snd_pcm_t* hdl;
public:
~AudioDevice() override;
AudioDevice();
AudioDevice(AudioDevice&& device) noexcept;
AudioDevice(const AudioDevice& device);
AudioDevice& operator=(AudioDevice&& device) noexcept;
AudioDevice& operator=(const AudioDevice& device);
void Release() override;
void OpenStream() override;
void CloseStream() override;
UInt_64 GetAvailFrames() const override;
Byte* Map(UInt_64* offset, UInt_64* frames) override;
void UnMap(const UInt_64 offset, const UInt_64 frames) override;
bool IsValid() const override;
static AudioDevice GetDefault(const AudioDeviceType type);
static Array<AudioDevice> Get(const AudioDeviceType type, const AudioDeviceState state);
};
}

View File

@ -0,0 +1,67 @@
#pragma once
#include "ehs/EHS.h"
#include "BaseAudioDevice.h"
#include <pipewire/pipewire.h>
#include <pipewire/loop.h>
#include <pipewire/context.h>
#include <pipewire/stream.h>
#include <spa/param/audio/format-utils.h>
namespace ehs
{
class EHS_LIB_IO AudioDevice final : public BaseAudioDevice
{
private:
static Array<AudioDevice> devices;
static AudioDevice defOut;
static AudioDevice defIn;
UInt_32 id;
Str_8 name;
pw_loop *loop;
pw_context *context;
pw_core *core;
pw_stream *input;
pw_stream *output;
static void RegistryEventGlobal(void *data, UInt_32 id, UInt_32 permissions, const char *type, UInt_32 version, const spa_dict *props);
static void RegistryEventGlobalRemove(void *data, UInt_32 id);
static void OnParamChanged(void *data, UInt_32 id, const spa_pod *param);
public:
~AudioDevice() override;
AudioDevice();
AudioDevice(AudioDevice&& device) noexcept;
AudioDevice(const AudioDevice& device);
AudioDevice& operator=(AudioDevice&& device) noexcept;
AudioDevice& operator=(const AudioDevice& device);
void OpenStream() override;
void CloseStream() override;
UInt_64 SendStream(const void *data, UInt_64 size) override;
UInt_64 ReceiveStream(void *data, UInt_64 size) override;
bool IsStreaming() const override;
bool IsValid() const override;
static AudioDevice GetDefault(AudioDeviceType type);
static Array<AudioDevice> Get(AudioDeviceType type, AudioDeviceState state);
private:
Str_8 GetCategory() const;
};
}

View File

@ -12,7 +12,7 @@ struct IMMDevice;
namespace ehs
{
class AudioDevice : public BaseAudioDevice
class EHS_LIB_IO AudioDevice final : public BaseAudioDevice
{
private:
IMMDevice* hdl;
@ -33,17 +33,13 @@ namespace ehs
AudioDevice& operator=(const AudioDevice& device);
void Release() override;
void OpenStream() override;
void CloseStream() override;
UInt_64 GetAvailFrames() const override;
UInt_64 SendStream(const void *data, UInt_64 outFrameSize) override;
Byte* Map(UInt_64* offset, UInt_64* frames) override;
void UnMap(const UInt_64 offset, const UInt_64 frames) override;
UInt_64 ReceiveStream(void *data, UInt_64 inFrameSize) override;
Str_32 GetInterfaceName_32() const;
@ -57,10 +53,12 @@ namespace ehs
Str_8 GetName_8() const;
bool IsStreaming() const override;
bool IsValid() const override;
static AudioDevice GetDefault(const AudioDeviceType type);
static AudioDevice GetDefault(AudioDeviceType type);
static Array<AudioDevice> Get(const AudioDeviceType type, const AudioDeviceState state);
static Array<AudioDevice> Get(AudioDeviceType type, AudioDeviceState state);
};
}

View File

@ -10,8 +10,8 @@ namespace ehs
{
enum class AudioDeviceType
{
OUTPUT = 0x0,
INPUT = 0x1,
OUTPUT = 0x0,
ALL = 0x2
};
@ -23,18 +23,17 @@ namespace ehs
UNPLUGGED = 0x8
};
class BaseAudioDevice
class EHS_LIB_IO BaseAudioDevice
{
protected:
AudioDeviceType type;
DataType dataType;
UInt_16 bitDepth;
UInt_16 byteDepth;
UInt_32 sampleRate;
UInt_32 channels;
UInt_32 period;
UInt_32 latency;
UInt_64 maxFrames;
bool streaming;
public:
virtual ~BaseAudioDevice() = default;
@ -45,21 +44,21 @@ namespace ehs
BaseAudioDevice& operator=(const BaseAudioDevice& device);
virtual void Release();
virtual void OpenStream();
virtual void CloseStream();
virtual UInt_64 GetAvailFrames() const;
virtual UInt_64 SendStream(const void *data, UInt_64 size);
virtual Byte* Map(UInt_64* offset, UInt_64* frames);
virtual UInt_64 ReceiveStream(void *data, UInt_64 size);
virtual void UnMap(const UInt_64 offset, const UInt_64 frames);
void BridgeStreams(BaseAudioDevice *input, UInt_64 frameBufferSize);
void BridgeStreams(UInt_64 frameBufferSize);
AudioDeviceType GetType() const;
void SetDataType(const DataType newDataType);
void SetDataType(DataType newDataType);
DataType GetDataType() const;
@ -67,39 +66,39 @@ namespace ehs
UInt_16 GetBitDepth() const;
void SetSampleRate(const UInt_32 newSampleRate);
void SetSampleRate(UInt_32 newSampleRate);
UInt_32 GetSampleRate() const;
void SetChannels(const UInt_32 newChannels);
void SetChannels(UInt_32 newChannels);
UInt_16 GetChannels() const;
UInt_32 GetFrameSize() const;
void SetPeriod(const UInt_32 newPeriod);
void SetPeriod(UInt_32 newPeriod);
UInt_32 GetPeriod() const;
void SetLatency(const UInt_32 newLatency);
void SetLatency(UInt_32 newLatency);
UInt_32 GetLatency() const;
UInt_64 GetMaxFrames() const;
bool IsStreaming() const;
virtual bool IsStreaming() const;
virtual bool IsValid() const;
/// Retrieves the default audio input/output device.
/// @param [in] type The audio device type to retrieve.
/// @param [out] device The default audio device.
static BaseAudioDevice GetDefault(const AudioDeviceType type);
static BaseAudioDevice GetDefault(AudioDeviceType type);
/// Retrieves a list of audio input/output devices.
/// @param [in] type The audio device type to retrieve.
/// @param [in] state The audio device state to retrieve.
/// @param [out] devices The list of audio devices.
static Array<BaseAudioDevice> Get(const AudioDeviceType type, const AudioDeviceState state);
static Array<BaseAudioDevice> Get(AudioDeviceType type, AudioDeviceState state);
};
}

View File

@ -5,27 +5,33 @@
namespace ehs
{
class Button
class EHS_LIB_IO Button
{
private:
Str_8 name;
UInt_32 hash;
Str_8 name;
public:
Button();
Button(const Str_8& name);
Button(Str_8 name);
Button(const Button& key);
Button(Button &&key) noexcept;
Button& operator=(const Button& key);
Button(const Button &key);
bool operator==(const Button& key) const;
Button &operator=(Button &&key) noexcept;
bool operator!=(const Button& key) const;
Button &operator=(const Button &key);
bool operator==(const Button &key) const;
bool operator!=(const Button &key) const;
UInt_32 GetHash() const;
Str_8 GetName() const;
UInt_32 GetHash() const;
bool IsValid() const;
};
}

View File

@ -13,7 +13,7 @@ namespace ehs
TOUCHED
};
class ButtonState
class EHS_LIB_IO ButtonState
{
private:
Button button;

View File

@ -7,7 +7,7 @@
namespace ehs
{
class HID
class EHS_LIB_IO HID
{
protected:
UInt_8 type;
@ -15,11 +15,15 @@ namespace ehs
Str_8 name;
UInt_64 id;
Array<ButtonState> states;
Button lastState;
float heldTime;
float activateTime;
bool active;
public:
HID();
HID(const UInt_8 type, Str_8 name, const UInt_64 id);
HID(UInt_8 type, Str_8 name, UInt_64 id);
HID(HID&& hid) noexcept;
@ -33,11 +37,11 @@ namespace ehs
bool operator!=(const HID& other) const;
bool operator==(const UInt_64 otherId) const;
bool operator==(UInt_64 otherId) const;
bool operator!=(const UInt_64 otherId) const;
bool operator!=(UInt_64 otherId) const;
virtual void Poll();
virtual void Poll(float delta);
UInt_8 GetType() const;
@ -71,6 +75,10 @@ namespace ehs
const ButtonState* IsUp() const;
const ButtonState *IsPressed(const Button &button);
const ButtonState *GetPressed();
void ButtonDown(const Button& button);
void ButtonUp(const Button& button);
@ -87,5 +95,11 @@ namespace ehs
bool AddState(const ButtonState& state);
ButtonState* GetState(const Button& button);
bool TickHoldTime(float delta);
void ResetTime();
void TickActivateTime(float delta);
};
}

View File

@ -6,7 +6,7 @@
namespace ehs
{
class Input
class EHS_LIB_IO Input
{
private:
Array<InputHandler*> handlers;

View File

@ -5,11 +5,13 @@
namespace ehs
{
class InputHandler
class EHS_LIB_IO InputHandler
{
private:
UInt_64 hashId;
Str_8 id;
UInt_64 start;
UInt_64 delta;
protected:
Array<HID*> devices;
@ -29,9 +31,9 @@ namespace ehs
InputHandler& operator=(const InputHandler& ih);
bool operator==(const UInt_64 otherHashId);
bool operator==(const UInt_64 otherHashId) const;
bool operator!=(const UInt_64 otherHashId);
bool operator!=(const UInt_64 otherHashId) const;
virtual bool Initialize();

View File

@ -8,7 +8,7 @@
namespace ehs
{
class Keyboard : public HID
class EHS_LIB_IO Keyboard : public HID
{
public:
Keyboard();
@ -23,7 +23,7 @@ namespace ehs
Keyboard& operator=(const Keyboard& hid);
void Poll() override;
void Poll(float delta) override;
Keyboard* Clone() const override;

View File

@ -9,7 +9,7 @@
namespace ehs
{
class Mouse : public HID
class EHS_LIB_IO Mouse : public HID
{
private:
friend class Input;
@ -19,7 +19,7 @@ namespace ehs
public:
Mouse();
Mouse(Str_8 name, const UInt_64 id);
Mouse(Str_8 name, UInt_64 id);
Mouse(Mouse&& hid) noexcept = default;
@ -29,7 +29,7 @@ namespace ehs
Mouse& operator=(const Mouse& hid);
void Poll() override;
void Poll(float delta) override;
void SetDelta(const Vec2_s32& newDelta);

View File

@ -13,7 +13,7 @@ namespace ehs
NEAREST_NEIGHBOR
};
class Img : public BaseObj
class EHS_LIB_IO Img : public BaseObj
{
private:
static Array<ImgCodec> codecs;

View File

@ -12,7 +12,7 @@ namespace ehs
typedef bool (*EncodeImgCb)(const ImgCodec* const, Serializer<UInt_64>&, const Img*);
typedef bool (*DecodeImgCb)(const ImgCodec* const, Serializer<UInt_64>&, Img*);
class ImgCodec
class EHS_LIB_IO ImgCodec
{
private:
Str_8 id;

View File

@ -7,7 +7,7 @@
namespace ehs
{
class PNG
class EHS_LIB_IO PNG
{
private:
Str_8 id;

View File

@ -6,7 +6,7 @@
namespace ehs
{
class PNG_Chunk
class EHS_LIB_IO PNG_Chunk
{
private:
Str_8 id;

View File

@ -6,7 +6,7 @@
namespace ehs
{
class AnimBone
class EHS_LIB_IO AnimBone
{
private:
UInt_8 boneId;

View File

@ -7,7 +7,7 @@
namespace ehs
{
class Animation
class EHS_LIB_IO Animation
{
private:
UInt_64 hashId;

View File

@ -6,7 +6,7 @@
namespace ehs
{
class Bone
class EHS_LIB_IO Bone
{
private:
UInt_64 hashName;

View File

@ -9,7 +9,7 @@
namespace ehs
{
class KeyFrame
class EHS_LIB_IO KeyFrame
{
private:
float num;

View File

@ -15,7 +15,7 @@ namespace ehs
EHM
};
class Mdl : public BaseObj
class EHS_LIB_IO Mdl : public BaseObj
{
private:
static Array<MdlCodec> codecs;

View File

@ -12,7 +12,7 @@ namespace ehs
typedef bool (*EnocdeMdlCb)(const MdlCodec*, Serializer<UInt_64>&, const Mdl*);
typedef bool (*DecodeMdlCb)(const MdlCodec*, Serializer<UInt_64>&, Mdl*);
class MdlCodec
class EHS_LIB_IO MdlCodec
{
private:
Str_8 id;

View File

@ -7,7 +7,7 @@
namespace ehs
{
class Mesh final : public BaseObj
class EHS_LIB_IO Mesh final : public BaseObj
{
protected:
UInt_64 hashId;

View File

@ -19,7 +19,7 @@ namespace ehs
INVALID
};
class PropertyChange
class EHS_LIB_IO PropertyChange
{
public:
ChangeType type;

View File

@ -5,10 +5,10 @@
namespace ehs
{
class BaseDNS
class EHS_LIB_IO BaseDNS
{
public:
static Str_8 Resolve(AddrType type, const Str_8 &hostname);
static Str_8 Resolve(IP type, const Str_8 &hostname);
/// Resolves a hostname to an ip address.
/// @param [in] hostname The given hostname to resolve.

View File

@ -0,0 +1,68 @@
#pragma once
#include "ehs/Serializer.h"
#include "ehs/Types.h"
#include "ehs/io/socket/Socket.h"
namespace ehs
{
struct ICMP_Header
{
UInt_8 type;
UInt_8 code;
UInt_16 checksum;
};
struct ICMP_EchoRequest
{
UInt_16 id;
UInt_16 sequence;
};
class BaseICMP
{
private:
IP version;
public:
virtual ~BaseICMP() = default;
BaseICMP();
BaseICMP(IP version);
BaseICMP(BaseICMP &&icmp) noexcept;
BaseICMP(const BaseICMP &icmp);
BaseICMP &operator=(BaseICMP &&icmp) noexcept;
BaseICMP &operator=(const BaseICMP &icmp);
virtual void Release();
UInt_64 Send(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
UInt_64 Receive(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data);
void SendEchoRequest(const Str_8 &address, ICMP_EchoRequest er, const Byte *data, UInt_64 size);
virtual void SetReceiveTimeout(UInt_64 timeout);
IP GetVersion() const;
virtual bool IsValid() const;
protected:
static UInt_16 ComputeChecksumV4(UInt_16 *buffer, Size length);
private:
virtual UInt_64 SendV6(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
virtual UInt_64 SendV4(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size);
virtual UInt_64 ReceiveV6(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const;
virtual UInt_64 ReceiveV4(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const;
};
}

View File

@ -9,10 +9,10 @@
namespace ehs
{
class BaseTCP
class EHS_LIB_IO BaseTCP
{
protected:
AddrType addrType;
IP ip;
Str_8 localAddr;
UInt_16 localPort;
Str_8 remoteHostName;
@ -35,7 +35,7 @@ namespace ehs
/// Properly initializes the socket.
/// @param [in] type The ip version to initialize the socket with.
BaseTCP(AddrType addrType);
BaseTCP(IP ip);
BaseTCP(BaseTCP&& tcp) noexcept;
@ -104,7 +104,7 @@ namespace ehs
/// Retrieves the sockets ip version.
/// @returns The ip version.
AddrType GetAddressType() const;
IP GetAddressType() const;
/// Retrieves the bound ip address.
/// @returns The ip address.

View File

@ -6,12 +6,10 @@
namespace ehs
{
class BaseUDP
class EHS_LIB_IO BaseUDP
{
protected:
AddrType type;
Str_8 address;
UInt_16 port;
Endpoint localEndpoint;
bool bound;
public:
@ -22,7 +20,7 @@ namespace ehs
/// Properly initializes the socket.
/// @param [in] type The ip version to initialize the socket with.
BaseUDP(AddrType type);
BaseUDP(IP version);
BaseUDP(BaseUDP&& udp) noexcept;
@ -40,13 +38,13 @@ namespace ehs
/// @param [in] address The ip address to bind to.
/// @param [in] port The port to bind to.
/// @note Used for servers.
virtual void Bind(AddrType type, const Str_8& address, UInt_16 port) = 0;
virtual void Bind(const Endpoint &endpoint) = 0;
/// Sends data to the endpoint.
/// @param [in] type The ip version of the endpoint.
/// @param [in] address The ip address of the endpoint.
/// @param [in] port The port of the endpoint is bound to.
virtual UInt_64 Send(AddrType type, const Str_8& address, UInt_16 port, const Byte* data, UInt_64 size) = 0;
virtual UInt_64 Send(const Endpoint &endpoint, const Byte *data, UInt_64 size) = 0;
/// Receives data from the endpoint.
/// @param [out] type The ip version of the endpoint.
@ -55,7 +53,7 @@ namespace ehs
/// @param [out] data The incoming data from the endpoint.
/// @param [in] size The max size of the buffer in bytes to store the data.
/// @returns The size of the incoming data in bytes.
virtual UInt_64 Receive(AddrType* type, Str_8* address, UInt_16* port, Byte* data, UInt_64 size) = 0;
virtual UInt_64 Receive(Endpoint *endpoint, Byte *data, UInt_64 size) = 0;
/// Retrieves whether or not this socket is bound to an ip address and port.
/// @returns The result.
@ -73,17 +71,7 @@ namespace ehs
virtual bool IsIPv6Only() const = 0;
/// Retrieves the bound ip version.
/// @returns The result.
AddrType GetLocalAddressType() const;
/// Retrieves the bound ip address.
/// @returns The bound ip address.
Str_8 GetLocalAddress() const;
/// Retrieves the bound port.
/// @returns The bound port.
UInt_16 GetLocalPort() const;
Endpoint GetLocalEndpoint() const;
/// Retrieves whether or not this socket was initialized.
/// @returns The result.

View File

@ -7,10 +7,10 @@
namespace ehs
{
class DNS final : public BaseDNS
class EHS_LIB_IO DNS final : public BaseDNS
{
public:
static Str_8 Resolve(AddrType type, const Str_8 &hostname);
static Str_8 Resolve(IP type, const Str_8 &hostname);
static Str_8 Resolve(const Str_8 &hostname);
};

View File

@ -4,10 +4,10 @@
namespace ehs
{
class DNS final : public BaseDNS
class EHS_LIB_IO DNS final : public BaseDNS
{
public:
static Str_8 Resolve(AddrType type, const Str_8 &hostname);
static Str_8 Resolve(IP type, const Str_8 &hostname);
static Str_8 Resolve(const Str_8 &hostname);
};

View File

@ -0,0 +1,95 @@
#pragma once
#include "ehs/io/socket/ehc/NetEnc.h"
#include "ehs/Array.h"
#include "Socket.h"
#include "UDP.h"
namespace ehs
{
class NetServerCh;
class NetClientCh;
class NetEnd;
class EHC;
class EHC
{
private:
friend class NetEnc;
friend class NetChannel;
friend class NetServerCh;
friend class NetClientCh;
friend class NetEnd;
static const Version version;
UDP udp;
Byte* buffer;
UInt_32 bufferSize;
UInt_64 lastTSC;
float delta;
Array<NetEnc *> encryptions;
Array<NetServerCh *> servers;
Array<NetClientCh *> clients;
public:
~EHC();
EHC(IP version = IP::V6);
EHC(EHC &&sock) noexcept;
EHC(const EHC &sock);
EHC &operator=(EHC&& sock) noexcept;
EHC &operator=(const EHC &sock);
void Initialize();
void Release();
void Bind(const Endpoint &endpoint);
void Poll();
bool IsInitialized() const;
Endpoint GetLocalEndpoint() const;
bool IsBound() const;
static Version GetVersion();
bool AddEncryption(NetEnc *enc);
bool HasServer(UInt_64 serverId) const;
bool HasServer(const Str_8& serverName) const;
bool AddServer(NetServerCh *server);
NetServerCh *GetServer(UInt_64 serverId) const;
NetServerCh *GetServer(const Str_8& serverName) const;
bool HasClient(UInt_64 clientId) const;
bool HasClient(const Str_8& clientName) const;
bool AddClient(NetClientCh *channel);
NetClientCh *GetClient(UInt_64 clientId) const;
NetClientCh *GetClient(const Str_8& clientName) const;
private:
bool HasEncryption(UInt_64 encId) const;
bool HasEncryption(const Str_8& encName) const;
NetEnc* GetEncryption(UInt_64 encId) const;
NetEnc* GetEncryption(const Str_8& encName) const;
};
}

View File

@ -0,0 +1,9 @@
#pragma once
#include "ehs/system/OS.h"
#ifdef EHS_OS_WINDOWS
#include "ICMP_W32.h"
#else
#include "ICMP_LNX.h"
#endif

View File

@ -0,0 +1,60 @@
#pragma once
#include "BaseICMP.h"
#include <netinet/in.h>
namespace ehs
{
struct PseudoICMPv6_Header
{
sockaddr_in6 src;
sockaddr_in6 dst;
UInt_32 length;
};
class ICMP final : public BaseICMP
{
private:
Int_32 hdl;
sockaddr_in6 src;
public:
~ICMP() override;
ICMP();
ICMP(IP version);
ICMP(ICMP &&icmp) noexcept;
ICMP(const ICMP &icmp);
ICMP &operator=(ICMP &&icmp) noexcept;
ICMP &operator=(const ICMP &icmp);
void Release() override;
void SetReceiveTimeout(UInt_64 timeout) override;
bool IsValid() const override;
private:
static bool IsLinkLocal(const in6_addr &addr);
static sockaddr_in6 RetrieveSrcAddress();
static UInt_32 CalculatePseudoHeaderChecksum(const PseudoICMPv6_Header &header);
UInt_16 ComputeChecksumV6(UInt_16* buffer, Size length, const sockaddr_in6& dst);
UInt_64 SendV6(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
UInt_64 SendV4(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
UInt_64 ReceiveV6(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
UInt_64 ReceiveV4(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
};
}

View File

@ -0,0 +1,63 @@
#pragma once
#include "BaseICMP.h"
#include "ehs/System/OS.h"
#include <winsock2.h>
#include <WS2tcpip.h>
#include <iphlpapi.h>
namespace ehs
{
struct PseudoICMPv6_Header
{
sockaddr_in6 src;
sockaddr_in6 dst;
UInt_32 length;
};
class ICMP : public BaseICMP
{
private:
Socket hdl;
sockaddr_in6 src;
public:
~ICMP() override;
ICMP();
ICMP(IP version);
ICMP(ICMP &&icmp) noexcept;
ICMP(const ICMP &icmp);
ICMP &operator=(ICMP &&icmp) noexcept;
ICMP &operator=(const ICMP &icmp);
void Release() override;
void SetReceiveTimeout(UInt_64 timeout) override;
bool IsValid() const override;
private:
static bool IsLinkLocal(const in6_addr &addr);
static sockaddr_in6 RetrieveSrcAddress();
static UInt_32 CalculatePseudoHeaderChecksum(const PseudoICMPv6_Header &header);
UInt_16 ComputeChecksumV6(UInt_16* buffer, Size length, const sockaddr_in6& dst);
UInt_64 SendV6(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
UInt_64 SendV4(const Str_8 &address, ICMP_Header header, const Byte *data, UInt_64 size) override;
UInt_64 ReceiveV6(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
UInt_64 ReceiveV4(Str_8 &address, ICMP_Header &header, Serializer<UInt_64> &data) const override;
};
}

View File

@ -16,7 +16,7 @@ namespace ehs
DEL
};
class Request
class EHS_LIB_IO Request
{
private:
Verb verb;

View File

@ -8,7 +8,7 @@
namespace ehs
{
class Response
class EHS_LIB_IO Response
{
private:
UInt_32 code;

View File

@ -12,7 +12,7 @@ typedef struct ssl_st SSL;
namespace ehs
{
/// A class for handling the HTTP(S) TCP socket layer.
class SSL : public TCP
class EHS_LIB_IO SSL : public TCP
{
private:
SSL_CTX* ctx;
@ -23,7 +23,7 @@ namespace ehs
SSL();
SSL(const AddrType type);
SSL(const IP type);
SSL(TCP&& tcp) noexcept;

View File

@ -1,7 +1,10 @@
#pragma once
#include "ehs/Str.h"
#ifndef EHS_IPV4_HEADER
#define EHS_IPV4_HEADER 60
#include <string>
#endif
#ifndef EHS_IPV6_HEADER
@ -22,10 +25,10 @@
namespace ehs
{
enum class AddrType
enum class IP
{
IPV6,
IPV4
V4,
V6
};
enum class ContentType
@ -41,6 +44,13 @@ namespace ehs
NONE
};
struct Endpoint
{
IP version = IP::V6;
Str_8 address;
UInt_16 port = 0;
};
#if defined(EHS_OS_WINDOWS)
typedef UInt_64 Socket;
#define EHS_INVALID_SOCKET EHS_UINT_64_MAX

View File

@ -10,7 +10,7 @@
namespace ehs
{
/// A wrapper class for the transmission control protocol socket.
class TCP : public BaseTCP
class EHS_LIB_IO TCP : public BaseTCP
{
protected:
Socket hdl;
@ -22,7 +22,7 @@ namespace ehs
/// Default members initialization.
TCP();
TCP(AddrType addrType);
TCP(IP IP);
TCP(TCP&& tcp) noexcept;

View File

@ -10,7 +10,7 @@
namespace ehs
{
/// A wrapper class for the transmission control protocol socket.
class TCP : public BaseTCP
class EHS_LIB_IO TCP : public BaseTCP
{
protected:
Socket hdl;
@ -22,7 +22,7 @@ namespace ehs
/// Default members initialization.
TCP();
TCP(AddrType addrType);
TCP(IP IP);
TCP(TCP&& tcp) noexcept;

View File

@ -7,7 +7,7 @@
namespace ehs
{
/// A wrapper class for the user datagram protocol socket.
class UDP : public BaseUDP
class EHS_LIB_IO UDP : public BaseUDP
{
private:
Socket hdl;
@ -19,7 +19,7 @@ namespace ehs
UDP();
/// Default members initialization.
UDP(AddrType type);
UDP(IP version);
UDP(UDP&& udp) noexcept;
@ -41,7 +41,7 @@ namespace ehs
/// @param [in] address The local IPv4 or IPv6 address to bind to. Resolves domain names. The given address can be empty, "127.0.0.1", or "localhost" to automatically find the appropriate device.
/// @param [in] port The port to bind to.
/// @note Requires the port given to be forwarded if this is called.
void Bind(AddrType type, const Str_8& address, UInt_16 port) override;
void Bind(const Endpoint &endpoint) override;
/// Sends data using a C-style byte array.
/// @param [in] addr The remote Ipv4 or Ipv6 address to send to. Resolves domain names. The given address can be empty, "127.0.0.1", or "localhost" to automatically find the appropriate device.
@ -49,7 +49,7 @@ namespace ehs
/// @param [in] data The C-style byte array to send.
/// @param [in] size The size of the C-style byte array.
/// @note The size of data to be sent cannot exceed "UDP::maxPayloadIpv4" or "UDP::maxPayloadIpv6".
UInt_64 Send(AddrType type, const Str_8& address, UInt_16 port, const Byte* data, UInt_64 size) override;
UInt_64 Send(const Endpoint &endpoint, const Byte* data, UInt_64 size) override;
/// Receives data using the packet helper class.
/// @param [out] addr The Ipv4 or Ipv6 address of the sender.
@ -58,7 +58,7 @@ namespace ehs
/// @param [in] size The size of the pre-allocated C-style byte array.
/// @returns The size of the data received.
/// @warning The provided C-style byte array must be freed when finished using.
UInt_64 Receive(AddrType* type, Str_8* address, UInt_16* port, Byte* data, UInt_64 size) override;
UInt_64 Receive(Endpoint *endpoint, Byte* data, UInt_64 size) override;
/// Sets whether or not receiving data blocks the next task.
/// @param [in] blocking Whether or not to block.

View File

@ -7,7 +7,7 @@
namespace ehs
{
/// A wrapper class for the user datagram protocol socket.
class UDP : public BaseUDP
class EHS_LIB_IO UDP : public BaseUDP
{
private:
Socket hdl;
@ -19,7 +19,7 @@ namespace ehs
UDP();
/// Default members initialization.
UDP(const AddrType addrType);
UDP(const IP IP);
UDP(UDP&& udp) noexcept;
@ -41,7 +41,7 @@ namespace ehs
/// @param [in] address The local IPv4 or IPv6 address to bind to. Resolves domain names. The given address can be empty, "127.0.0.1", or "localhost" to automatically find the appropriate device.
/// @param [in] port The port to bind to.
/// @note Requires the port given to be forwarded if this is called.
void Bind(AddrType type, const Str_8& address, UInt_16 port) override;
void Bind(const Endpoint &endpoint) override;
/// Sends data using a C-style byte array.
/// @param [in] addr The remote Ipv4 or Ipv6 address to send to. Resolves domain names. The given address can be empty, "127.0.0.1", or "localhost" to automatically find the appropriate device.
@ -49,7 +49,7 @@ namespace ehs
/// @param [in] data The C-style byte array to send.
/// @param [in] size The size of the C-style byte array.
/// @note The size of data to be sent cannot exceed "UDP::maxPayloadIpv4" or "UDP::maxPayloadIpv6".
UInt_64 Send(AddrType type, const Str_8& addr, UInt_16 port, const Byte* data, UInt_64 size) override;
UInt_64 Send(const Endpoint &endpoint, const Byte* data, UInt_64 size) override;
/// Receives data using the packet helper class.
/// @param [out] addr The Ipv4 or Ipv6 address of the sender.
@ -58,7 +58,7 @@ namespace ehs
/// @param [in] size The size of the pre-allocated C-style byte array.
/// @returns The size of the data received.
/// @warning The provided C-style byte array must be freed when finished using.
UInt_64 Receive(AddrType* type, Str_8* addr, UInt_16* port, Byte* data, UInt_64 size) override;
UInt_64 Receive(Endpoint *endpoint, Byte* data, UInt_64 size) override;
/// Sets whether or not receiving data blocks the next task.
/// @param [in] blocking Whether or not to block.

Some files were not shown because too many files have changed in this diff Show More