├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md └── workflows │ └── msbuild.yml ├── .gitignore ├── .gitmodules ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENCE ├── README.md ├── TODO.txt ├── core ├── Xen │ ├── Xen.premake.lua │ ├── src │ │ ├── AssetResourceManager.cpp │ │ ├── AssetResourceManager.h │ │ ├── LevelEditorLayer.cpp │ │ ├── LevelEditorLayer.h │ │ ├── ProjectManagerLayer.cpp │ │ ├── ProjectManagerLayer.h │ │ ├── StringValues.h │ │ ├── XenEditorApp.cpp │ │ └── panel │ │ │ ├── ContentBrowserPanel.h │ │ │ ├── PropertiesPanel.h │ │ │ ├── SceneHierarchyPanel.h │ │ │ └── SceneSettingsPanel.h │ └── test.asset_dir ├── Xenode │ ├── Xenode.premake.lua │ └── src │ │ ├── Core.h │ │ ├── Xenode.h │ │ ├── core │ │ ├── app │ │ │ ├── EntryPoint.h │ │ │ ├── EventDispatcher.h │ │ │ ├── Events.h │ │ │ ├── GameApplication.h │ │ │ ├── Layer.h │ │ │ ├── Log.cpp │ │ │ ├── Log.h │ │ │ ├── Profiler.h │ │ │ ├── Timer.h │ │ │ ├── UUID.cpp │ │ │ ├── UUID.h │ │ │ ├── Utils.h │ │ │ ├── desktop │ │ │ │ ├── DesktopGameApplication.cpp │ │ │ │ ├── DesktopGameApplication.h │ │ │ │ ├── Monitor.cpp │ │ │ │ ├── Monitor.h │ │ │ │ ├── Window.cpp │ │ │ │ └── Window.h │ │ │ ├── input │ │ │ │ ├── KeyboardInput.cpp │ │ │ │ ├── KeyboardInput.h │ │ │ │ ├── MouseInput.cpp │ │ │ │ └── MouseInput.h │ │ │ └── mobile │ │ │ │ ├── MobileApplication.cpp │ │ │ │ ├── MobileApplication.h │ │ │ │ ├── Surface.cpp │ │ │ │ └── Surface.h │ │ ├── asset │ │ │ ├── Asset.h │ │ │ ├── AssetImporter.cpp │ │ │ ├── AssetImporter.h │ │ │ ├── AssetManager.h │ │ │ ├── AssetManagerUtil.h │ │ │ ├── AssetPack.cpp │ │ │ ├── AssetPack.h │ │ │ ├── EditorAssetManager.cpp │ │ │ ├── EditorAssetManager.h │ │ │ ├── RuntimeAssetManager.cpp │ │ │ ├── RuntimeAssetManager.h │ │ │ └── import │ │ │ │ ├── ShaderAssetImporter.cpp │ │ │ │ ├── ShaderAssetImporter.h │ │ │ │ ├── TextureAssetImporter.cpp │ │ │ │ └── TextureAssetImporter.h │ │ ├── math │ │ │ └── Math.h │ │ ├── physics │ │ │ ├── Physics2D.cpp │ │ │ └── Physics2D.h │ │ ├── renderer │ │ │ ├── Buffer.cpp │ │ │ ├── Buffer.h │ │ │ ├── BufferObjectBindings.h │ │ │ ├── Camera.cpp │ │ │ ├── Camera.h │ │ │ ├── DebugRenderer.cpp │ │ │ ├── DebugRenderer.h │ │ │ ├── FrameBuffer.cpp │ │ │ ├── FrameBuffer.h │ │ │ ├── GraphicsContext.cpp │ │ │ ├── GraphicsContext.h │ │ │ ├── ParticleSettings2D.h │ │ │ ├── ParticleSystem2D.h │ │ │ ├── ParticlesRenderer2D.cpp │ │ │ ├── ParticlesRenderer2D.h │ │ │ ├── PostProcessPipeline.cpp │ │ │ ├── PostProcessPipeline.h │ │ │ ├── QueryObject.cpp │ │ │ ├── QueryObject.h │ │ │ ├── RenderCommand.cpp │ │ │ ├── RenderCommand.h │ │ │ ├── Renderer2D.h │ │ │ ├── RendererAPI.h │ │ │ ├── ScreenRenderer.cpp │ │ │ ├── ScreenRenderer.h │ │ │ ├── Shader.cpp │ │ │ ├── Shader.h │ │ │ ├── ShaderCompiler.cpp │ │ │ ├── ShaderCompiler.h │ │ │ ├── SpriteRenderer2D.cpp │ │ │ ├── SpriteRenderer2D.h │ │ │ ├── Structs.h │ │ │ ├── Texture.cpp │ │ │ └── Texture.h │ │ ├── scene │ │ │ ├── Components.h │ │ │ ├── EditorCameraController.h │ │ │ ├── Scene.cpp │ │ │ ├── Scene.h │ │ │ ├── ScenePhysics.cpp │ │ │ ├── ScenePhysics.h │ │ │ ├── SceneRenderer.cpp │ │ │ ├── SceneRenderer.h │ │ │ ├── SceneRuntime.cpp │ │ │ ├── SceneRuntime.h │ │ │ ├── SceneSerializer.cpp │ │ │ ├── SceneSerializer.h │ │ │ ├── SceneUtils.cpp │ │ │ ├── SceneUtils.h │ │ │ └── ScriptableEntity.h │ │ └── scripting │ │ │ ├── Script.cpp │ │ │ ├── Script.h │ │ │ ├── ScriptEngine.cpp │ │ │ ├── ScriptEngine.h │ │ │ ├── ScriptLang.h │ │ │ └── lua │ │ │ ├── LuaFunctions.cpp │ │ │ ├── LuaFunctions.h │ │ │ ├── LuaScript.cpp │ │ │ ├── LuaScript.h │ │ │ ├── LuaScriptEngine.cpp │ │ │ └── LuaScriptEngine.h │ │ ├── gfxapi │ │ ├── OpenGL │ │ │ ├── OpenGLBuffer.cpp │ │ │ ├── OpenGLBuffer.h │ │ │ ├── OpenGLContext.cpp │ │ │ ├── OpenGLContext.h │ │ │ ├── OpenGLFrameBuffer.cpp │ │ │ ├── OpenGLFrameBuffer.h │ │ │ ├── OpenGLQueryObject.cpp │ │ │ ├── OpenGLQueryObject.h │ │ │ ├── OpenGLRendererAPI.cpp │ │ │ ├── OpenGLRendererAPI.h │ │ │ ├── OpenGLShader.cpp │ │ │ ├── OpenGLShader.h │ │ │ ├── OpenGLTexture.cpp │ │ │ └── OpenGLTexture.h │ │ └── window │ │ │ └── glfw │ │ │ ├── GLFW_keyboard_input.cpp │ │ │ ├── GLFW_keyboard_input.h │ │ │ ├── GLFW_monitor.cpp │ │ │ ├── GLFW_monitor.h │ │ │ ├── GLFW_mouse_input.cpp │ │ │ ├── GLFW_mouse_input.h │ │ │ ├── GLFW_window.cpp │ │ │ └── GLFW_window.h │ │ ├── imgui │ │ ├── IconsFontAwesome.h │ │ ├── ImGuiLayer.cpp │ │ └── ImGuiLayer.h │ │ ├── pch │ │ ├── pch │ │ └── pch.cpp │ │ ├── platform │ │ ├── android │ │ │ ├── AndroidSurface.cpp │ │ │ └── AndroidSurface.h │ │ └── windows │ │ │ └── WindowsUtils.cpp │ │ └── project │ │ ├── Project.h │ │ ├── ProjectManager.cpp │ │ ├── ProjectManager.h │ │ ├── ProjectSerializer.cpp │ │ └── ProjectSerializer.h └── XenodeRuntime │ ├── XenodeRuntime.premake.lua │ └── src │ ├── MainRuntimeLayer.cpp │ ├── MainRuntimeLayer.h │ └── XenodeRuntime.cpp ├── deps ├── ImGradientHDR │ ├── ImGradientHDR.cpp │ ├── ImGradientHDR.h │ └── LICENSE.txt ├── SHA256 │ ├── LICENCE │ ├── include │ │ └── SHA256.h │ └── src │ │ └── SHA256.cpp ├── android_studio │ ├── _manifest.lua │ ├── _preload.lua │ └── android_studio.lua ├── asio │ ├── COPYING │ ├── INSTALL │ ├── LICENSE_1_0.txt │ ├── Makefile.am │ ├── Makefile.in │ ├── README │ ├── aclocal.m4 │ ├── asio.pc.in │ ├── compile │ ├── config.guess │ ├── config.sub │ ├── configure │ ├── configure.ac │ ├── depcomp │ ├── include │ │ ├── Makefile.am │ │ ├── Makefile.in │ │ ├── asio.hpp │ │ └── asio │ │ │ ├── any_io_executor.hpp │ │ │ ├── append.hpp │ │ │ ├── as_tuple.hpp │ │ │ ├── associated_allocator.hpp │ │ │ ├── associated_cancellation_slot.hpp │ │ │ ├── associated_executor.hpp │ │ │ ├── associator.hpp │ │ │ ├── async_result.hpp │ │ │ ├── awaitable.hpp │ │ │ ├── basic_datagram_socket.hpp │ │ │ ├── basic_deadline_timer.hpp │ │ │ ├── basic_file.hpp │ │ │ ├── basic_io_object.hpp │ │ │ ├── basic_random_access_file.hpp │ │ │ ├── basic_raw_socket.hpp │ │ │ ├── basic_readable_pipe.hpp │ │ │ ├── basic_seq_packet_socket.hpp │ │ │ ├── basic_serial_port.hpp │ │ │ ├── basic_signal_set.hpp │ │ │ ├── basic_socket.hpp │ │ │ ├── basic_socket_acceptor.hpp │ │ │ ├── basic_socket_iostream.hpp │ │ │ ├── basic_socket_streambuf.hpp │ │ │ ├── basic_stream_file.hpp │ │ │ ├── basic_stream_socket.hpp │ │ │ ├── basic_streambuf.hpp │ │ │ ├── basic_streambuf_fwd.hpp │ │ │ ├── basic_waitable_timer.hpp │ │ │ ├── basic_writable_pipe.hpp │ │ │ ├── bind_allocator.hpp │ │ │ ├── bind_cancellation_slot.hpp │ │ │ ├── bind_executor.hpp │ │ │ ├── buffer.hpp │ │ │ ├── buffer_registration.hpp │ │ │ ├── buffered_read_stream.hpp │ │ │ ├── buffered_read_stream_fwd.hpp │ │ │ ├── buffered_stream.hpp │ │ │ ├── buffered_stream_fwd.hpp │ │ │ ├── buffered_write_stream.hpp │ │ │ ├── buffered_write_stream_fwd.hpp │ │ │ ├── buffers_iterator.hpp │ │ │ ├── cancellation_signal.hpp │ │ │ ├── cancellation_state.hpp │ │ │ ├── cancellation_type.hpp │ │ │ ├── co_spawn.hpp │ │ │ ├── completion_condition.hpp │ │ │ ├── compose.hpp │ │ │ ├── connect.hpp │ │ │ ├── connect_pipe.hpp │ │ │ ├── coroutine.hpp │ │ │ ├── deadline_timer.hpp │ │ │ ├── defer.hpp │ │ │ ├── deferred.hpp │ │ │ ├── detached.hpp │ │ │ ├── detail │ │ │ ├── array.hpp │ │ │ ├── array_fwd.hpp │ │ │ ├── assert.hpp │ │ │ ├── atomic_count.hpp │ │ │ ├── base_from_cancellation_state.hpp │ │ │ ├── base_from_completion_cond.hpp │ │ │ ├── bind_handler.hpp │ │ │ ├── blocking_executor_op.hpp │ │ │ ├── buffer_resize_guard.hpp │ │ │ ├── buffer_sequence_adapter.hpp │ │ │ ├── buffered_stream_storage.hpp │ │ │ ├── bulk_executor_op.hpp │ │ │ ├── call_stack.hpp │ │ │ ├── chrono.hpp │ │ │ ├── chrono_time_traits.hpp │ │ │ ├── completion_handler.hpp │ │ │ ├── concurrency_hint.hpp │ │ │ ├── conditionally_enabled_event.hpp │ │ │ ├── conditionally_enabled_mutex.hpp │ │ │ ├── config.hpp │ │ │ ├── consuming_buffers.hpp │ │ │ ├── cstddef.hpp │ │ │ ├── cstdint.hpp │ │ │ ├── date_time_fwd.hpp │ │ │ ├── deadline_timer_service.hpp │ │ │ ├── dependent_type.hpp │ │ │ ├── descriptor_ops.hpp │ │ │ ├── descriptor_read_op.hpp │ │ │ ├── descriptor_write_op.hpp │ │ │ ├── dev_poll_reactor.hpp │ │ │ ├── epoll_reactor.hpp │ │ │ ├── event.hpp │ │ │ ├── eventfd_select_interrupter.hpp │ │ │ ├── exception.hpp │ │ │ ├── executor_function.hpp │ │ │ ├── executor_op.hpp │ │ │ ├── fd_set_adapter.hpp │ │ │ ├── fenced_block.hpp │ │ │ ├── functional.hpp │ │ │ ├── future.hpp │ │ │ ├── gcc_arm_fenced_block.hpp │ │ │ ├── gcc_hppa_fenced_block.hpp │ │ │ ├── gcc_sync_fenced_block.hpp │ │ │ ├── gcc_x86_fenced_block.hpp │ │ │ ├── global.hpp │ │ │ ├── handler_alloc_helpers.hpp │ │ │ ├── handler_cont_helpers.hpp │ │ │ ├── handler_invoke_helpers.hpp │ │ │ ├── handler_tracking.hpp │ │ │ ├── handler_type_requirements.hpp │ │ │ ├── handler_work.hpp │ │ │ ├── hash_map.hpp │ │ │ ├── impl │ │ │ │ ├── buffer_sequence_adapter.ipp │ │ │ │ ├── descriptor_ops.ipp │ │ │ │ ├── dev_poll_reactor.hpp │ │ │ │ ├── dev_poll_reactor.ipp │ │ │ │ ├── epoll_reactor.hpp │ │ │ │ ├── epoll_reactor.ipp │ │ │ │ ├── eventfd_select_interrupter.ipp │ │ │ │ ├── handler_tracking.ipp │ │ │ │ ├── io_uring_descriptor_service.ipp │ │ │ │ ├── io_uring_file_service.ipp │ │ │ │ ├── io_uring_service.hpp │ │ │ │ ├── io_uring_service.ipp │ │ │ │ ├── io_uring_socket_service_base.ipp │ │ │ │ ├── kqueue_reactor.hpp │ │ │ │ ├── kqueue_reactor.ipp │ │ │ │ ├── null_event.ipp │ │ │ │ ├── pipe_select_interrupter.ipp │ │ │ │ ├── posix_event.ipp │ │ │ │ ├── posix_mutex.ipp │ │ │ │ ├── posix_serial_port_service.ipp │ │ │ │ ├── posix_thread.ipp │ │ │ │ ├── posix_tss_ptr.ipp │ │ │ │ ├── reactive_descriptor_service.ipp │ │ │ │ ├── reactive_socket_service_base.ipp │ │ │ │ ├── resolver_service_base.ipp │ │ │ │ ├── scheduler.ipp │ │ │ │ ├── select_reactor.hpp │ │ │ │ ├── select_reactor.ipp │ │ │ │ ├── service_registry.hpp │ │ │ │ ├── service_registry.ipp │ │ │ │ ├── signal_set_service.ipp │ │ │ │ ├── socket_ops.ipp │ │ │ │ ├── socket_select_interrupter.ipp │ │ │ │ ├── strand_executor_service.hpp │ │ │ │ ├── strand_executor_service.ipp │ │ │ │ ├── strand_service.hpp │ │ │ │ ├── strand_service.ipp │ │ │ │ ├── thread_context.ipp │ │ │ │ ├── throw_error.ipp │ │ │ │ ├── timer_queue_ptime.ipp │ │ │ │ ├── timer_queue_set.ipp │ │ │ │ ├── win_event.ipp │ │ │ │ ├── win_iocp_file_service.ipp │ │ │ │ ├── win_iocp_handle_service.ipp │ │ │ │ ├── win_iocp_io_context.hpp │ │ │ │ ├── win_iocp_io_context.ipp │ │ │ │ ├── win_iocp_serial_port_service.ipp │ │ │ │ ├── win_iocp_socket_service_base.ipp │ │ │ │ ├── win_mutex.ipp │ │ │ │ ├── win_object_handle_service.ipp │ │ │ │ ├── win_static_mutex.ipp │ │ │ │ ├── win_thread.ipp │ │ │ │ ├── win_tss_ptr.ipp │ │ │ │ ├── winrt_ssocket_service_base.ipp │ │ │ │ ├── winrt_timer_scheduler.hpp │ │ │ │ ├── winrt_timer_scheduler.ipp │ │ │ │ └── winsock_init.ipp │ │ │ ├── io_control.hpp │ │ │ ├── io_object_impl.hpp │ │ │ ├── io_uring_descriptor_read_at_op.hpp │ │ │ ├── io_uring_descriptor_read_op.hpp │ │ │ ├── io_uring_descriptor_service.hpp │ │ │ ├── io_uring_descriptor_write_at_op.hpp │ │ │ ├── io_uring_descriptor_write_op.hpp │ │ │ ├── io_uring_file_service.hpp │ │ │ ├── io_uring_null_buffers_op.hpp │ │ │ ├── io_uring_operation.hpp │ │ │ ├── io_uring_service.hpp │ │ │ ├── io_uring_socket_accept_op.hpp │ │ │ ├── io_uring_socket_connect_op.hpp │ │ │ ├── io_uring_socket_recv_op.hpp │ │ │ ├── io_uring_socket_recvfrom_op.hpp │ │ │ ├── io_uring_socket_recvmsg_op.hpp │ │ │ ├── io_uring_socket_send_op.hpp │ │ │ ├── io_uring_socket_sendto_op.hpp │ │ │ ├── io_uring_socket_service.hpp │ │ │ ├── io_uring_socket_service_base.hpp │ │ │ ├── io_uring_wait_op.hpp │ │ │ ├── is_buffer_sequence.hpp │ │ │ ├── is_executor.hpp │ │ │ ├── keyword_tss_ptr.hpp │ │ │ ├── kqueue_reactor.hpp │ │ │ ├── limits.hpp │ │ │ ├── local_free_on_block_exit.hpp │ │ │ ├── macos_fenced_block.hpp │ │ │ ├── memory.hpp │ │ │ ├── mutex.hpp │ │ │ ├── non_const_lvalue.hpp │ │ │ ├── noncopyable.hpp │ │ │ ├── null_event.hpp │ │ │ ├── null_fenced_block.hpp │ │ │ ├── null_global.hpp │ │ │ ├── null_mutex.hpp │ │ │ ├── null_reactor.hpp │ │ │ ├── null_signal_blocker.hpp │ │ │ ├── null_socket_service.hpp │ │ │ ├── null_static_mutex.hpp │ │ │ ├── null_thread.hpp │ │ │ ├── null_tss_ptr.hpp │ │ │ ├── object_pool.hpp │ │ │ ├── old_win_sdk_compat.hpp │ │ │ ├── op_queue.hpp │ │ │ ├── operation.hpp │ │ │ ├── pipe_select_interrupter.hpp │ │ │ ├── pop_options.hpp │ │ │ ├── posix_event.hpp │ │ │ ├── posix_fd_set_adapter.hpp │ │ │ ├── posix_global.hpp │ │ │ ├── posix_mutex.hpp │ │ │ ├── posix_serial_port_service.hpp │ │ │ ├── posix_signal_blocker.hpp │ │ │ ├── posix_static_mutex.hpp │ │ │ ├── posix_thread.hpp │ │ │ ├── posix_tss_ptr.hpp │ │ │ ├── push_options.hpp │ │ │ ├── reactive_descriptor_service.hpp │ │ │ ├── reactive_null_buffers_op.hpp │ │ │ ├── reactive_socket_accept_op.hpp │ │ │ ├── reactive_socket_connect_op.hpp │ │ │ ├── reactive_socket_recv_op.hpp │ │ │ ├── reactive_socket_recvfrom_op.hpp │ │ │ ├── reactive_socket_recvmsg_op.hpp │ │ │ ├── reactive_socket_send_op.hpp │ │ │ ├── reactive_socket_sendto_op.hpp │ │ │ ├── reactive_socket_service.hpp │ │ │ ├── reactive_socket_service_base.hpp │ │ │ ├── reactive_wait_op.hpp │ │ │ ├── reactor.hpp │ │ │ ├── reactor_op.hpp │ │ │ ├── reactor_op_queue.hpp │ │ │ ├── recycling_allocator.hpp │ │ │ ├── regex_fwd.hpp │ │ │ ├── resolve_endpoint_op.hpp │ │ │ ├── resolve_op.hpp │ │ │ ├── resolve_query_op.hpp │ │ │ ├── resolver_service.hpp │ │ │ ├── resolver_service_base.hpp │ │ │ ├── scheduler.hpp │ │ │ ├── scheduler_operation.hpp │ │ │ ├── scheduler_task.hpp │ │ │ ├── scheduler_thread_info.hpp │ │ │ ├── scoped_lock.hpp │ │ │ ├── scoped_ptr.hpp │ │ │ ├── select_interrupter.hpp │ │ │ ├── select_reactor.hpp │ │ │ ├── service_registry.hpp │ │ │ ├── signal_blocker.hpp │ │ │ ├── signal_handler.hpp │ │ │ ├── signal_init.hpp │ │ │ ├── signal_op.hpp │ │ │ ├── signal_set_service.hpp │ │ │ ├── socket_holder.hpp │ │ │ ├── socket_ops.hpp │ │ │ ├── socket_option.hpp │ │ │ ├── socket_select_interrupter.hpp │ │ │ ├── socket_types.hpp │ │ │ ├── solaris_fenced_block.hpp │ │ │ ├── source_location.hpp │ │ │ ├── static_mutex.hpp │ │ │ ├── std_event.hpp │ │ │ ├── std_fenced_block.hpp │ │ │ ├── std_global.hpp │ │ │ ├── std_mutex.hpp │ │ │ ├── std_static_mutex.hpp │ │ │ ├── std_thread.hpp │ │ │ ├── strand_executor_service.hpp │ │ │ ├── strand_service.hpp │ │ │ ├── string_view.hpp │ │ │ ├── thread.hpp │ │ │ ├── thread_context.hpp │ │ │ ├── thread_group.hpp │ │ │ ├── thread_info_base.hpp │ │ │ ├── throw_error.hpp │ │ │ ├── throw_exception.hpp │ │ │ ├── timer_queue.hpp │ │ │ ├── timer_queue_base.hpp │ │ │ ├── timer_queue_ptime.hpp │ │ │ ├── timer_queue_set.hpp │ │ │ ├── timer_scheduler.hpp │ │ │ ├── timer_scheduler_fwd.hpp │ │ │ ├── tss_ptr.hpp │ │ │ ├── type_traits.hpp │ │ │ ├── utility.hpp │ │ │ ├── variadic_templates.hpp │ │ │ ├── wait_handler.hpp │ │ │ ├── wait_op.hpp │ │ │ ├── win_event.hpp │ │ │ ├── win_fd_set_adapter.hpp │ │ │ ├── win_fenced_block.hpp │ │ │ ├── win_global.hpp │ │ │ ├── win_iocp_file_service.hpp │ │ │ ├── win_iocp_handle_read_op.hpp │ │ │ ├── win_iocp_handle_service.hpp │ │ │ ├── win_iocp_handle_write_op.hpp │ │ │ ├── win_iocp_io_context.hpp │ │ │ ├── win_iocp_null_buffers_op.hpp │ │ │ ├── win_iocp_operation.hpp │ │ │ ├── win_iocp_overlapped_op.hpp │ │ │ ├── win_iocp_overlapped_ptr.hpp │ │ │ ├── win_iocp_serial_port_service.hpp │ │ │ ├── win_iocp_socket_accept_op.hpp │ │ │ ├── win_iocp_socket_connect_op.hpp │ │ │ ├── win_iocp_socket_recv_op.hpp │ │ │ ├── win_iocp_socket_recvfrom_op.hpp │ │ │ ├── win_iocp_socket_recvmsg_op.hpp │ │ │ ├── win_iocp_socket_send_op.hpp │ │ │ ├── win_iocp_socket_service.hpp │ │ │ ├── win_iocp_socket_service_base.hpp │ │ │ ├── win_iocp_thread_info.hpp │ │ │ ├── win_iocp_wait_op.hpp │ │ │ ├── win_mutex.hpp │ │ │ ├── win_object_handle_service.hpp │ │ │ ├── win_static_mutex.hpp │ │ │ ├── win_thread.hpp │ │ │ ├── win_tss_ptr.hpp │ │ │ ├── winapp_thread.hpp │ │ │ ├── wince_thread.hpp │ │ │ ├── winrt_async_manager.hpp │ │ │ ├── winrt_async_op.hpp │ │ │ ├── winrt_resolve_op.hpp │ │ │ ├── winrt_resolver_service.hpp │ │ │ ├── winrt_socket_connect_op.hpp │ │ │ ├── winrt_socket_recv_op.hpp │ │ │ ├── winrt_socket_send_op.hpp │ │ │ ├── winrt_ssocket_service.hpp │ │ │ ├── winrt_ssocket_service_base.hpp │ │ │ ├── winrt_timer_scheduler.hpp │ │ │ ├── winrt_utils.hpp │ │ │ ├── winsock_init.hpp │ │ │ ├── work_dispatcher.hpp │ │ │ └── wrapped_handler.hpp │ │ │ ├── dispatch.hpp │ │ │ ├── error.hpp │ │ │ ├── error_code.hpp │ │ │ ├── execution.hpp │ │ │ ├── execution │ │ │ ├── allocator.hpp │ │ │ ├── any_executor.hpp │ │ │ ├── bad_executor.hpp │ │ │ ├── blocking.hpp │ │ │ ├── blocking_adaptation.hpp │ │ │ ├── bulk_execute.hpp │ │ │ ├── bulk_guarantee.hpp │ │ │ ├── connect.hpp │ │ │ ├── context.hpp │ │ │ ├── context_as.hpp │ │ │ ├── detail │ │ │ │ ├── as_invocable.hpp │ │ │ │ ├── as_operation.hpp │ │ │ │ ├── as_receiver.hpp │ │ │ │ ├── bulk_sender.hpp │ │ │ │ ├── submit_receiver.hpp │ │ │ │ └── void_receiver.hpp │ │ │ ├── execute.hpp │ │ │ ├── executor.hpp │ │ │ ├── impl │ │ │ │ ├── bad_executor.ipp │ │ │ │ └── receiver_invocation_error.ipp │ │ │ ├── invocable_archetype.hpp │ │ │ ├── mapping.hpp │ │ │ ├── occupancy.hpp │ │ │ ├── operation_state.hpp │ │ │ ├── outstanding_work.hpp │ │ │ ├── prefer_only.hpp │ │ │ ├── receiver.hpp │ │ │ ├── receiver_invocation_error.hpp │ │ │ ├── relationship.hpp │ │ │ ├── schedule.hpp │ │ │ ├── scheduler.hpp │ │ │ ├── sender.hpp │ │ │ ├── set_done.hpp │ │ │ ├── set_error.hpp │ │ │ ├── set_value.hpp │ │ │ ├── start.hpp │ │ │ └── submit.hpp │ │ │ ├── execution_context.hpp │ │ │ ├── executor.hpp │ │ │ ├── executor_work_guard.hpp │ │ │ ├── experimental │ │ │ ├── append.hpp │ │ │ ├── as_single.hpp │ │ │ ├── as_tuple.hpp │ │ │ ├── awaitable_operators.hpp │ │ │ ├── basic_channel.hpp │ │ │ ├── basic_concurrent_channel.hpp │ │ │ ├── cancellation_condition.hpp │ │ │ ├── channel.hpp │ │ │ ├── channel_error.hpp │ │ │ ├── channel_traits.hpp │ │ │ ├── co_spawn.hpp │ │ │ ├── concurrent_channel.hpp │ │ │ ├── coro.hpp │ │ │ ├── coro_traits.hpp │ │ │ ├── deferred.hpp │ │ │ ├── detail │ │ │ │ ├── channel_handler.hpp │ │ │ │ ├── channel_message.hpp │ │ │ │ ├── channel_operation.hpp │ │ │ │ ├── channel_payload.hpp │ │ │ │ ├── channel_receive_op.hpp │ │ │ │ ├── channel_send_functions.hpp │ │ │ │ ├── channel_send_op.hpp │ │ │ │ ├── channel_service.hpp │ │ │ │ ├── completion_handler_erasure.hpp │ │ │ │ ├── coro_promise_allocator.hpp │ │ │ │ ├── has_signature.hpp │ │ │ │ ├── impl │ │ │ │ │ └── channel_service.hpp │ │ │ │ └── partial_promise.hpp │ │ │ ├── impl │ │ │ │ ├── as_single.hpp │ │ │ │ ├── channel_error.ipp │ │ │ │ ├── coro.hpp │ │ │ │ ├── parallel_group.hpp │ │ │ │ ├── promise.hpp │ │ │ │ └── use_coro.hpp │ │ │ ├── parallel_group.hpp │ │ │ ├── prepend.hpp │ │ │ ├── promise.hpp │ │ │ └── use_coro.hpp │ │ │ ├── file_base.hpp │ │ │ ├── generic │ │ │ ├── basic_endpoint.hpp │ │ │ ├── datagram_protocol.hpp │ │ │ ├── detail │ │ │ │ ├── endpoint.hpp │ │ │ │ └── impl │ │ │ │ │ └── endpoint.ipp │ │ │ ├── raw_protocol.hpp │ │ │ ├── seq_packet_protocol.hpp │ │ │ └── stream_protocol.hpp │ │ │ ├── handler_alloc_hook.hpp │ │ │ ├── handler_continuation_hook.hpp │ │ │ ├── handler_invoke_hook.hpp │ │ │ ├── high_resolution_timer.hpp │ │ │ ├── impl │ │ │ ├── any_io_executor.ipp │ │ │ ├── append.hpp │ │ │ ├── as_tuple.hpp │ │ │ ├── awaitable.hpp │ │ │ ├── buffered_read_stream.hpp │ │ │ ├── buffered_write_stream.hpp │ │ │ ├── cancellation_signal.ipp │ │ │ ├── co_spawn.hpp │ │ │ ├── connect.hpp │ │ │ ├── connect_pipe.hpp │ │ │ ├── connect_pipe.ipp │ │ │ ├── defer.hpp │ │ │ ├── deferred.hpp │ │ │ ├── detached.hpp │ │ │ ├── dispatch.hpp │ │ │ ├── error.ipp │ │ │ ├── error_code.ipp │ │ │ ├── execution_context.hpp │ │ │ ├── execution_context.ipp │ │ │ ├── executor.hpp │ │ │ ├── executor.ipp │ │ │ ├── handler_alloc_hook.ipp │ │ │ ├── io_context.hpp │ │ │ ├── io_context.ipp │ │ │ ├── multiple_exceptions.ipp │ │ │ ├── post.hpp │ │ │ ├── prepend.hpp │ │ │ ├── read.hpp │ │ │ ├── read_at.hpp │ │ │ ├── read_until.hpp │ │ │ ├── redirect_error.hpp │ │ │ ├── serial_port_base.hpp │ │ │ ├── serial_port_base.ipp │ │ │ ├── spawn.hpp │ │ │ ├── src.hpp │ │ │ ├── system_context.hpp │ │ │ ├── system_context.ipp │ │ │ ├── system_executor.hpp │ │ │ ├── thread_pool.hpp │ │ │ ├── thread_pool.ipp │ │ │ ├── use_awaitable.hpp │ │ │ ├── use_future.hpp │ │ │ ├── write.hpp │ │ │ └── write_at.hpp │ │ │ ├── io_context.hpp │ │ │ ├── io_context_strand.hpp │ │ │ ├── io_service.hpp │ │ │ ├── io_service_strand.hpp │ │ │ ├── ip │ │ │ ├── address.hpp │ │ │ ├── address_v4.hpp │ │ │ ├── address_v4_iterator.hpp │ │ │ ├── address_v4_range.hpp │ │ │ ├── address_v6.hpp │ │ │ ├── address_v6_iterator.hpp │ │ │ ├── address_v6_range.hpp │ │ │ ├── bad_address_cast.hpp │ │ │ ├── basic_endpoint.hpp │ │ │ ├── basic_resolver.hpp │ │ │ ├── basic_resolver_entry.hpp │ │ │ ├── basic_resolver_iterator.hpp │ │ │ ├── basic_resolver_query.hpp │ │ │ ├── basic_resolver_results.hpp │ │ │ ├── detail │ │ │ │ ├── endpoint.hpp │ │ │ │ ├── impl │ │ │ │ │ └── endpoint.ipp │ │ │ │ └── socket_option.hpp │ │ │ ├── host_name.hpp │ │ │ ├── icmp.hpp │ │ │ ├── impl │ │ │ │ ├── address.hpp │ │ │ │ ├── address.ipp │ │ │ │ ├── address_v4.hpp │ │ │ │ ├── address_v4.ipp │ │ │ │ ├── address_v6.hpp │ │ │ │ ├── address_v6.ipp │ │ │ │ ├── basic_endpoint.hpp │ │ │ │ ├── host_name.ipp │ │ │ │ ├── network_v4.hpp │ │ │ │ ├── network_v4.ipp │ │ │ │ ├── network_v6.hpp │ │ │ │ └── network_v6.ipp │ │ │ ├── multicast.hpp │ │ │ ├── network_v4.hpp │ │ │ ├── network_v6.hpp │ │ │ ├── resolver_base.hpp │ │ │ ├── resolver_query_base.hpp │ │ │ ├── tcp.hpp │ │ │ ├── udp.hpp │ │ │ ├── unicast.hpp │ │ │ └── v6_only.hpp │ │ │ ├── is_applicable_property.hpp │ │ │ ├── is_contiguous_iterator.hpp │ │ │ ├── is_executor.hpp │ │ │ ├── is_read_buffered.hpp │ │ │ ├── is_write_buffered.hpp │ │ │ ├── local │ │ │ ├── basic_endpoint.hpp │ │ │ ├── connect_pair.hpp │ │ │ ├── datagram_protocol.hpp │ │ │ ├── detail │ │ │ │ ├── endpoint.hpp │ │ │ │ └── impl │ │ │ │ │ └── endpoint.ipp │ │ │ └── stream_protocol.hpp │ │ │ ├── multiple_exceptions.hpp │ │ │ ├── packaged_task.hpp │ │ │ ├── placeholders.hpp │ │ │ ├── posix │ │ │ ├── basic_descriptor.hpp │ │ │ ├── basic_stream_descriptor.hpp │ │ │ ├── descriptor.hpp │ │ │ ├── descriptor_base.hpp │ │ │ └── stream_descriptor.hpp │ │ │ ├── post.hpp │ │ │ ├── prefer.hpp │ │ │ ├── prepend.hpp │ │ │ ├── query.hpp │ │ │ ├── random_access_file.hpp │ │ │ ├── read.hpp │ │ │ ├── read_at.hpp │ │ │ ├── read_until.hpp │ │ │ ├── readable_pipe.hpp │ │ │ ├── recycling_allocator.hpp │ │ │ ├── redirect_error.hpp │ │ │ ├── registered_buffer.hpp │ │ │ ├── require.hpp │ │ │ ├── require_concept.hpp │ │ │ ├── serial_port.hpp │ │ │ ├── serial_port_base.hpp │ │ │ ├── signal_set.hpp │ │ │ ├── socket_base.hpp │ │ │ ├── spawn.hpp │ │ │ ├── ssl.hpp │ │ │ ├── ssl │ │ │ ├── context.hpp │ │ │ ├── context_base.hpp │ │ │ ├── detail │ │ │ │ ├── buffered_handshake_op.hpp │ │ │ │ ├── engine.hpp │ │ │ │ ├── handshake_op.hpp │ │ │ │ ├── impl │ │ │ │ │ ├── engine.ipp │ │ │ │ │ └── openssl_init.ipp │ │ │ │ ├── io.hpp │ │ │ │ ├── openssl_init.hpp │ │ │ │ ├── openssl_types.hpp │ │ │ │ ├── password_callback.hpp │ │ │ │ ├── read_op.hpp │ │ │ │ ├── shutdown_op.hpp │ │ │ │ ├── stream_core.hpp │ │ │ │ ├── verify_callback.hpp │ │ │ │ └── write_op.hpp │ │ │ ├── error.hpp │ │ │ ├── host_name_verification.hpp │ │ │ ├── impl │ │ │ │ ├── context.hpp │ │ │ │ ├── context.ipp │ │ │ │ ├── error.ipp │ │ │ │ ├── host_name_verification.ipp │ │ │ │ ├── rfc2818_verification.ipp │ │ │ │ └── src.hpp │ │ │ ├── rfc2818_verification.hpp │ │ │ ├── stream.hpp │ │ │ ├── stream_base.hpp │ │ │ ├── verify_context.hpp │ │ │ └── verify_mode.hpp │ │ │ ├── static_thread_pool.hpp │ │ │ ├── steady_timer.hpp │ │ │ ├── strand.hpp │ │ │ ├── stream_file.hpp │ │ │ ├── streambuf.hpp │ │ │ ├── system_context.hpp │ │ │ ├── system_error.hpp │ │ │ ├── system_executor.hpp │ │ │ ├── system_timer.hpp │ │ │ ├── this_coro.hpp │ │ │ ├── thread.hpp │ │ │ ├── thread_pool.hpp │ │ │ ├── time_traits.hpp │ │ │ ├── traits │ │ │ ├── bulk_execute_free.hpp │ │ │ ├── bulk_execute_member.hpp │ │ │ ├── connect_free.hpp │ │ │ ├── connect_member.hpp │ │ │ ├── equality_comparable.hpp │ │ │ ├── execute_free.hpp │ │ │ ├── execute_member.hpp │ │ │ ├── prefer_free.hpp │ │ │ ├── prefer_member.hpp │ │ │ ├── query_free.hpp │ │ │ ├── query_member.hpp │ │ │ ├── query_static_constexpr_member.hpp │ │ │ ├── require_concept_free.hpp │ │ │ ├── require_concept_member.hpp │ │ │ ├── require_free.hpp │ │ │ ├── require_member.hpp │ │ │ ├── schedule_free.hpp │ │ │ ├── schedule_member.hpp │ │ │ ├── set_done_free.hpp │ │ │ ├── set_done_member.hpp │ │ │ ├── set_error_free.hpp │ │ │ ├── set_error_member.hpp │ │ │ ├── set_value_free.hpp │ │ │ ├── set_value_member.hpp │ │ │ ├── start_free.hpp │ │ │ ├── start_member.hpp │ │ │ ├── static_query.hpp │ │ │ ├── static_require.hpp │ │ │ ├── static_require_concept.hpp │ │ │ ├── submit_free.hpp │ │ │ └── submit_member.hpp │ │ │ ├── ts │ │ │ ├── buffer.hpp │ │ │ ├── executor.hpp │ │ │ ├── internet.hpp │ │ │ ├── io_context.hpp │ │ │ ├── net.hpp │ │ │ ├── netfwd.hpp │ │ │ ├── socket.hpp │ │ │ └── timer.hpp │ │ │ ├── unyield.hpp │ │ │ ├── use_awaitable.hpp │ │ │ ├── use_future.hpp │ │ │ ├── uses_executor.hpp │ │ │ ├── version.hpp │ │ │ ├── wait_traits.hpp │ │ │ ├── windows │ │ │ ├── basic_object_handle.hpp │ │ │ ├── basic_overlapped_handle.hpp │ │ │ ├── basic_random_access_handle.hpp │ │ │ ├── basic_stream_handle.hpp │ │ │ ├── object_handle.hpp │ │ │ ├── overlapped_handle.hpp │ │ │ ├── overlapped_ptr.hpp │ │ │ ├── random_access_handle.hpp │ │ │ └── stream_handle.hpp │ │ │ ├── writable_pipe.hpp │ │ │ ├── write.hpp │ │ │ ├── write_at.hpp │ │ │ └── yield.hpp │ ├── install-sh │ ├── missing │ ├── src │ │ ├── Makefile.am │ │ ├── Makefile.in │ │ ├── Makefile.mgw │ │ ├── Makefile.msc │ │ ├── asio.cpp │ │ ├── asio_ssl.cpp │ │ ├── examples │ │ │ ├── cpp03 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── allocation │ │ │ │ │ └── server.cpp │ │ │ │ ├── buffers │ │ │ │ │ └── reference_counted.cpp │ │ │ │ ├── chat │ │ │ │ │ ├── chat_client.cpp │ │ │ │ │ ├── chat_message.hpp │ │ │ │ │ ├── chat_server.cpp │ │ │ │ │ └── posix_chat_client.cpp │ │ │ │ ├── echo │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ ├── async_udp_echo_server.cpp │ │ │ │ │ ├── blocking_tcp_echo_client.cpp │ │ │ │ │ ├── blocking_tcp_echo_server.cpp │ │ │ │ │ ├── blocking_udp_echo_client.cpp │ │ │ │ │ └── blocking_udp_echo_server.cpp │ │ │ │ ├── fork │ │ │ │ │ ├── daemon.cpp │ │ │ │ │ └── process_per_connection.cpp │ │ │ │ ├── http │ │ │ │ │ ├── client │ │ │ │ │ │ ├── async_client.cpp │ │ │ │ │ │ └── sync_client.cpp │ │ │ │ │ ├── server │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── connection_manager.cpp │ │ │ │ │ │ ├── connection_manager.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ │ ├── server2 │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── io_context_pool.cpp │ │ │ │ │ │ ├── io_context_pool.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ │ ├── server3 │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ │ └── server4 │ │ │ │ │ │ ├── file_handler.cpp │ │ │ │ │ │ ├── file_handler.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ ├── icmp │ │ │ │ │ ├── icmp_header.hpp │ │ │ │ │ ├── ipv4_header.hpp │ │ │ │ │ └── ping.cpp │ │ │ │ ├── invocation │ │ │ │ │ └── prioritised_handlers.cpp │ │ │ │ ├── iostreams │ │ │ │ │ ├── daytime_client.cpp │ │ │ │ │ ├── daytime_server.cpp │ │ │ │ │ └── http_client.cpp │ │ │ │ ├── local │ │ │ │ │ ├── connect_pair.cpp │ │ │ │ │ ├── iostream_client.cpp │ │ │ │ │ ├── stream_client.cpp │ │ │ │ │ └── stream_server.cpp │ │ │ │ ├── multicast │ │ │ │ │ ├── receiver.cpp │ │ │ │ │ └── sender.cpp │ │ │ │ ├── nonblocking │ │ │ │ │ └── third_party_lib.cpp │ │ │ │ ├── porthopper │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── protocol.hpp │ │ │ │ │ └── server.cpp │ │ │ │ ├── serialization │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── connection.hpp │ │ │ │ │ ├── server.cpp │ │ │ │ │ └── stock.hpp │ │ │ │ ├── services │ │ │ │ │ ├── basic_logger.hpp │ │ │ │ │ ├── daytime_client.cpp │ │ │ │ │ ├── logger.hpp │ │ │ │ │ ├── logger_service.cpp │ │ │ │ │ └── logger_service.hpp │ │ │ │ ├── socks4 │ │ │ │ │ ├── socks4.hpp │ │ │ │ │ └── sync_client.cpp │ │ │ │ ├── spawn │ │ │ │ │ ├── echo_server.cpp │ │ │ │ │ └── parallel_grep.cpp │ │ │ │ ├── ssl │ │ │ │ │ ├── README │ │ │ │ │ ├── ca.pem │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── dh4096.pem │ │ │ │ │ ├── server.cpp │ │ │ │ │ └── server.pem │ │ │ │ ├── timeouts │ │ │ │ │ ├── async_tcp_client.cpp │ │ │ │ │ ├── blocking_tcp_client.cpp │ │ │ │ │ ├── blocking_token_tcp_client.cpp │ │ │ │ │ ├── blocking_udp_client.cpp │ │ │ │ │ └── server.cpp │ │ │ │ ├── timers │ │ │ │ │ └── time_t_timer.cpp │ │ │ │ ├── tutorial │ │ │ │ │ ├── daytime1 │ │ │ │ │ │ └── client.cpp │ │ │ │ │ ├── daytime2 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime3 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime4 │ │ │ │ │ │ └── client.cpp │ │ │ │ │ ├── daytime5 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime6 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime7 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── timer1 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ ├── timer2 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ ├── timer3 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ ├── timer4 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ └── timer5 │ │ │ │ │ │ └── timer.cpp │ │ │ │ └── windows │ │ │ │ │ └── transmit_file.cpp │ │ │ ├── cpp11 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── allocation │ │ │ │ │ └── server.cpp │ │ │ │ ├── buffers │ │ │ │ │ └── reference_counted.cpp │ │ │ │ ├── chat │ │ │ │ │ ├── chat_client.cpp │ │ │ │ │ ├── chat_message.hpp │ │ │ │ │ └── chat_server.cpp │ │ │ │ ├── deferred │ │ │ │ │ ├── deferred_1.cpp │ │ │ │ │ └── deferred_2.cpp │ │ │ │ ├── echo │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ ├── async_udp_echo_server.cpp │ │ │ │ │ ├── blocking_tcp_echo_client.cpp │ │ │ │ │ ├── blocking_tcp_echo_server.cpp │ │ │ │ │ ├── blocking_udp_echo_client.cpp │ │ │ │ │ └── blocking_udp_echo_server.cpp │ │ │ │ ├── executors │ │ │ │ │ ├── actor.cpp │ │ │ │ │ ├── bank_account_1.cpp │ │ │ │ │ ├── bank_account_2.cpp │ │ │ │ │ ├── fork_join.cpp │ │ │ │ │ ├── pipeline.cpp │ │ │ │ │ └── priority_scheduler.cpp │ │ │ │ ├── files │ │ │ │ │ ├── async_file_copy.cpp │ │ │ │ │ └── blocking_file_copy.cpp │ │ │ │ ├── fork │ │ │ │ │ ├── daemon.cpp │ │ │ │ │ └── process_per_connection.cpp │ │ │ │ ├── futures │ │ │ │ │ └── daytime_client.cpp │ │ │ │ ├── handler_tracking │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ └── custom_tracking.hpp │ │ │ │ ├── http │ │ │ │ │ └── server │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── connection_manager.cpp │ │ │ │ │ │ ├── connection_manager.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ ├── invocation │ │ │ │ │ └── prioritised_handlers.cpp │ │ │ │ ├── iostreams │ │ │ │ │ └── http_client.cpp │ │ │ │ ├── local │ │ │ │ │ ├── connect_pair.cpp │ │ │ │ │ ├── fd_passing_stream_client.cpp │ │ │ │ │ ├── fd_passing_stream_server.cpp │ │ │ │ │ ├── iostream_client.cpp │ │ │ │ │ ├── stream_client.cpp │ │ │ │ │ └── stream_server.cpp │ │ │ │ ├── multicast │ │ │ │ │ ├── receiver.cpp │ │ │ │ │ └── sender.cpp │ │ │ │ ├── nonblocking │ │ │ │ │ └── third_party_lib.cpp │ │ │ │ ├── operations │ │ │ │ │ ├── composed_1.cpp │ │ │ │ │ ├── composed_2.cpp │ │ │ │ │ ├── composed_3.cpp │ │ │ │ │ ├── composed_4.cpp │ │ │ │ │ ├── composed_5.cpp │ │ │ │ │ ├── composed_6.cpp │ │ │ │ │ ├── composed_7.cpp │ │ │ │ │ └── composed_8.cpp │ │ │ │ ├── parallel_group │ │ │ │ │ ├── wait_for_all.cpp │ │ │ │ │ ├── wait_for_one.cpp │ │ │ │ │ ├── wait_for_one_error.cpp │ │ │ │ │ └── wait_for_one_success.cpp │ │ │ │ ├── socks4 │ │ │ │ │ ├── socks4.hpp │ │ │ │ │ └── sync_client.cpp │ │ │ │ ├── spawn │ │ │ │ │ ├── echo_server.cpp │ │ │ │ │ └── parallel_grep.cpp │ │ │ │ ├── ssl │ │ │ │ │ ├── README │ │ │ │ │ ├── ca.pem │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── dh4096.pem │ │ │ │ │ ├── server.cpp │ │ │ │ │ └── server.pem │ │ │ │ ├── timeouts │ │ │ │ │ ├── async_tcp_client.cpp │ │ │ │ │ ├── blocking_tcp_client.cpp │ │ │ │ │ ├── blocking_token_tcp_client.cpp │ │ │ │ │ ├── blocking_udp_client.cpp │ │ │ │ │ └── server.cpp │ │ │ │ └── timers │ │ │ │ │ └── time_t_timer.cpp │ │ │ ├── cpp14 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── deferred │ │ │ │ │ ├── deferred_1.cpp │ │ │ │ │ ├── deferred_2.cpp │ │ │ │ │ ├── deferred_3.cpp │ │ │ │ │ ├── deferred_4.cpp │ │ │ │ │ ├── deferred_5.cpp │ │ │ │ │ ├── deferred_6.cpp │ │ │ │ │ └── deferred_7.cpp │ │ │ │ ├── echo │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ ├── async_udp_echo_server.cpp │ │ │ │ │ ├── blocking_tcp_echo_client.cpp │ │ │ │ │ ├── blocking_tcp_echo_server.cpp │ │ │ │ │ ├── blocking_udp_echo_client.cpp │ │ │ │ │ └── blocking_udp_echo_server.cpp │ │ │ │ ├── executors │ │ │ │ │ ├── actor.cpp │ │ │ │ │ ├── async_1.cpp │ │ │ │ │ ├── async_2.cpp │ │ │ │ │ ├── bank_account_1.cpp │ │ │ │ │ ├── bank_account_2.cpp │ │ │ │ │ ├── fork_join.cpp │ │ │ │ │ ├── pipeline.cpp │ │ │ │ │ └── priority_scheduler.cpp │ │ │ │ ├── iostreams │ │ │ │ │ └── http_client.cpp │ │ │ │ ├── operations │ │ │ │ │ ├── c_callback_wrapper.cpp │ │ │ │ │ ├── callback_wrapper.cpp │ │ │ │ │ ├── composed_1.cpp │ │ │ │ │ ├── composed_2.cpp │ │ │ │ │ ├── composed_3.cpp │ │ │ │ │ ├── composed_4.cpp │ │ │ │ │ ├── composed_5.cpp │ │ │ │ │ ├── composed_6.cpp │ │ │ │ │ ├── composed_7.cpp │ │ │ │ │ └── composed_8.cpp │ │ │ │ └── parallel_group │ │ │ │ │ ├── parallel_sort.cpp │ │ │ │ │ ├── wait_for_all.cpp │ │ │ │ │ ├── wait_for_one.cpp │ │ │ │ │ ├── wait_for_one_error.cpp │ │ │ │ │ └── wait_for_one_success.cpp │ │ │ ├── cpp17 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ └── coroutines_ts │ │ │ │ │ ├── chat_server.cpp │ │ │ │ │ ├── echo_server.cpp │ │ │ │ │ ├── echo_server_with_as_single_default.cpp │ │ │ │ │ ├── echo_server_with_as_tuple_default.cpp │ │ │ │ │ ├── echo_server_with_default.cpp │ │ │ │ │ ├── range_based_for.cpp │ │ │ │ │ └── refactored_echo_server.cpp │ │ │ └── cpp20 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── channels │ │ │ │ └── throttling_proxy.cpp │ │ │ │ ├── coroutines │ │ │ │ ├── chat_server.cpp │ │ │ │ ├── echo_server.cpp │ │ │ │ ├── echo_server_with_as_single_default.cpp │ │ │ │ ├── echo_server_with_as_tuple_default.cpp │ │ │ │ ├── echo_server_with_default.cpp │ │ │ │ ├── echo_server_with_deferred.cpp │ │ │ │ ├── echo_server_with_deferred_default.cpp │ │ │ │ ├── refactored_echo_server.cpp │ │ │ │ └── timeout.cpp │ │ │ │ └── operations │ │ │ │ ├── c_callback_wrapper.cpp │ │ │ │ ├── callback_wrapper.cpp │ │ │ │ ├── composed_1.cpp │ │ │ │ ├── composed_2.cpp │ │ │ │ ├── composed_3.cpp │ │ │ │ ├── composed_4.cpp │ │ │ │ ├── composed_5.cpp │ │ │ │ ├── composed_6.cpp │ │ │ │ ├── composed_7.cpp │ │ │ │ └── composed_8.cpp │ │ ├── tests │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── latency │ │ │ │ ├── allocator.hpp │ │ │ │ ├── high_res_clock.hpp │ │ │ │ ├── tcp_client.cpp │ │ │ │ ├── tcp_server.cpp │ │ │ │ ├── udp_client.cpp │ │ │ │ └── udp_server.cpp │ │ │ ├── performance │ │ │ │ ├── client.cpp │ │ │ │ ├── handler_allocator.hpp │ │ │ │ └── server.cpp │ │ │ ├── properties │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── cpp03 │ │ │ │ │ ├── can_prefer_free_prefer.cpp │ │ │ │ │ ├── can_prefer_free_require.cpp │ │ │ │ │ ├── can_prefer_member_prefer.cpp │ │ │ │ │ ├── can_prefer_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_static.cpp │ │ │ │ │ ├── can_prefer_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_static.cpp │ │ │ │ │ ├── can_prefer_not_preferable_unsupported.cpp │ │ │ │ │ ├── can_prefer_static.cpp │ │ │ │ │ ├── can_prefer_unsupported.cpp │ │ │ │ │ ├── can_query_free.cpp │ │ │ │ │ ├── can_query_member.cpp │ │ │ │ │ ├── can_query_not_applicable_free.cpp │ │ │ │ │ ├── can_query_not_applicable_member.cpp │ │ │ │ │ ├── can_query_not_applicable_static.cpp │ │ │ │ │ ├── can_query_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_query_static.cpp │ │ │ │ │ ├── can_query_unsupported.cpp │ │ │ │ │ ├── can_require_concept_free.cpp │ │ │ │ │ ├── can_require_concept_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_free.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_static.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_concept_static.cpp │ │ │ │ │ ├── can_require_concept_unsupported.cpp │ │ │ │ │ ├── can_require_free.cpp │ │ │ │ │ ├── can_require_member.cpp │ │ │ │ │ ├── can_require_not_applicable_free.cpp │ │ │ │ │ ├── can_require_not_applicable_member.cpp │ │ │ │ │ ├── can_require_not_applicable_static.cpp │ │ │ │ │ ├── can_require_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_static.cpp │ │ │ │ │ ├── can_require_unsupported.cpp │ │ │ │ │ ├── prefer_free_prefer.cpp │ │ │ │ │ ├── prefer_free_require.cpp │ │ │ │ │ ├── prefer_member_prefer.cpp │ │ │ │ │ ├── prefer_member_require.cpp │ │ │ │ │ ├── prefer_static.cpp │ │ │ │ │ ├── prefer_unsupported.cpp │ │ │ │ │ ├── query_free.cpp │ │ │ │ │ ├── query_member.cpp │ │ │ │ │ ├── query_static.cpp │ │ │ │ │ ├── require_concept_free.cpp │ │ │ │ │ ├── require_concept_member.cpp │ │ │ │ │ ├── require_concept_static.cpp │ │ │ │ │ ├── require_free.cpp │ │ │ │ │ ├── require_member.cpp │ │ │ │ │ └── require_static.cpp │ │ │ │ ├── cpp11 │ │ │ │ │ ├── can_prefer_free_prefer.cpp │ │ │ │ │ ├── can_prefer_free_require.cpp │ │ │ │ │ ├── can_prefer_member_prefer.cpp │ │ │ │ │ ├── can_prefer_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_static.cpp │ │ │ │ │ ├── can_prefer_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_static.cpp │ │ │ │ │ ├── can_prefer_not_preferable_unsupported.cpp │ │ │ │ │ ├── can_prefer_static.cpp │ │ │ │ │ ├── can_prefer_unsupported.cpp │ │ │ │ │ ├── can_query_free.cpp │ │ │ │ │ ├── can_query_member.cpp │ │ │ │ │ ├── can_query_not_applicable_free.cpp │ │ │ │ │ ├── can_query_not_applicable_member.cpp │ │ │ │ │ ├── can_query_not_applicable_static.cpp │ │ │ │ │ ├── can_query_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_query_static.cpp │ │ │ │ │ ├── can_query_unsupported.cpp │ │ │ │ │ ├── can_require_concept_free.cpp │ │ │ │ │ ├── can_require_concept_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_free.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_static.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_concept_static.cpp │ │ │ │ │ ├── can_require_concept_unsupported.cpp │ │ │ │ │ ├── can_require_free.cpp │ │ │ │ │ ├── can_require_member.cpp │ │ │ │ │ ├── can_require_not_applicable_free.cpp │ │ │ │ │ ├── can_require_not_applicable_member.cpp │ │ │ │ │ ├── can_require_not_applicable_static.cpp │ │ │ │ │ ├── can_require_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_static.cpp │ │ │ │ │ ├── can_require_unsupported.cpp │ │ │ │ │ ├── prefer_free_prefer.cpp │ │ │ │ │ ├── prefer_free_require.cpp │ │ │ │ │ ├── prefer_member_prefer.cpp │ │ │ │ │ ├── prefer_member_require.cpp │ │ │ │ │ ├── prefer_static.cpp │ │ │ │ │ ├── prefer_unsupported.cpp │ │ │ │ │ ├── query_free.cpp │ │ │ │ │ ├── query_member.cpp │ │ │ │ │ ├── query_static.cpp │ │ │ │ │ ├── require_concept_free.cpp │ │ │ │ │ ├── require_concept_member.cpp │ │ │ │ │ ├── require_concept_static.cpp │ │ │ │ │ ├── require_free.cpp │ │ │ │ │ ├── require_member.cpp │ │ │ │ │ └── require_static.cpp │ │ │ │ └── cpp14 │ │ │ │ │ ├── can_prefer_free_prefer.cpp │ │ │ │ │ ├── can_prefer_free_require.cpp │ │ │ │ │ ├── can_prefer_member_prefer.cpp │ │ │ │ │ ├── can_prefer_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_static.cpp │ │ │ │ │ ├── can_prefer_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_static.cpp │ │ │ │ │ ├── can_prefer_not_preferable_unsupported.cpp │ │ │ │ │ ├── can_prefer_static.cpp │ │ │ │ │ ├── can_prefer_unsupported.cpp │ │ │ │ │ ├── can_query_free.cpp │ │ │ │ │ ├── can_query_member.cpp │ │ │ │ │ ├── can_query_not_applicable_free.cpp │ │ │ │ │ ├── can_query_not_applicable_member.cpp │ │ │ │ │ ├── can_query_not_applicable_static.cpp │ │ │ │ │ ├── can_query_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_query_static.cpp │ │ │ │ │ ├── can_query_unsupported.cpp │ │ │ │ │ ├── can_require_concept_free.cpp │ │ │ │ │ ├── can_require_concept_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_free.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_static.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_concept_static.cpp │ │ │ │ │ ├── can_require_concept_unsupported.cpp │ │ │ │ │ ├── can_require_free.cpp │ │ │ │ │ ├── can_require_member.cpp │ │ │ │ │ ├── can_require_not_applicable_free.cpp │ │ │ │ │ ├── can_require_not_applicable_member.cpp │ │ │ │ │ ├── can_require_not_applicable_static.cpp │ │ │ │ │ ├── can_require_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_static.cpp │ │ │ │ │ ├── can_require_unsupported.cpp │ │ │ │ │ ├── prefer_free_prefer.cpp │ │ │ │ │ ├── prefer_free_require.cpp │ │ │ │ │ ├── prefer_member_prefer.cpp │ │ │ │ │ ├── prefer_member_require.cpp │ │ │ │ │ ├── prefer_static.cpp │ │ │ │ │ ├── prefer_unsupported.cpp │ │ │ │ │ ├── query_free.cpp │ │ │ │ │ ├── query_member.cpp │ │ │ │ │ ├── query_static.cpp │ │ │ │ │ ├── require_concept_free.cpp │ │ │ │ │ ├── require_concept_member.cpp │ │ │ │ │ ├── require_concept_static.cpp │ │ │ │ │ ├── require_free.cpp │ │ │ │ │ ├── require_member.cpp │ │ │ │ │ └── require_static.cpp │ │ │ └── unit │ │ │ │ ├── append.cpp │ │ │ │ ├── archetypes │ │ │ │ ├── async_ops.hpp │ │ │ │ ├── async_result.hpp │ │ │ │ ├── gettable_socket_option.hpp │ │ │ │ ├── io_control_command.hpp │ │ │ │ └── settable_socket_option.hpp │ │ │ │ ├── as_tuple.cpp │ │ │ │ ├── associated_allocator.cpp │ │ │ │ ├── associated_cancellation_slot.cpp │ │ │ │ ├── associated_executor.cpp │ │ │ │ ├── associator.cpp │ │ │ │ ├── async_result.cpp │ │ │ │ ├── awaitable.cpp │ │ │ │ ├── basic_datagram_socket.cpp │ │ │ │ ├── basic_deadline_timer.cpp │ │ │ │ ├── basic_file.cpp │ │ │ │ ├── basic_random_access_file.cpp │ │ │ │ ├── basic_raw_socket.cpp │ │ │ │ ├── basic_readable_pipe.cpp │ │ │ │ ├── basic_seq_packet_socket.cpp │ │ │ │ ├── basic_serial_port.cpp │ │ │ │ ├── basic_signal_set.cpp │ │ │ │ ├── basic_socket.cpp │ │ │ │ ├── basic_socket_acceptor.cpp │ │ │ │ ├── basic_stream_file.cpp │ │ │ │ ├── basic_stream_socket.cpp │ │ │ │ ├── basic_streambuf.cpp │ │ │ │ ├── basic_waitable_timer.cpp │ │ │ │ ├── basic_writable_pipe.cpp │ │ │ │ ├── bind_allocator.cpp │ │ │ │ ├── bind_cancellation_slot.cpp │ │ │ │ ├── bind_executor.cpp │ │ │ │ ├── buffer.cpp │ │ │ │ ├── buffer_registration.cpp │ │ │ │ ├── buffered_read_stream.cpp │ │ │ │ ├── buffered_stream.cpp │ │ │ │ ├── buffered_write_stream.cpp │ │ │ │ ├── buffers_iterator.cpp │ │ │ │ ├── cancellation_signal.cpp │ │ │ │ ├── cancellation_state.cpp │ │ │ │ ├── cancellation_type.cpp │ │ │ │ ├── co_spawn.cpp │ │ │ │ ├── completion_condition.cpp │ │ │ │ ├── compose.cpp │ │ │ │ ├── connect.cpp │ │ │ │ ├── connect_pipe.cpp │ │ │ │ ├── coroutine.cpp │ │ │ │ ├── deadline_timer.cpp │ │ │ │ ├── defer.cpp │ │ │ │ ├── deferred.cpp │ │ │ │ ├── detached.cpp │ │ │ │ ├── dispatch.cpp │ │ │ │ ├── error.cpp │ │ │ │ ├── execution │ │ │ │ ├── any_executor.cpp │ │ │ │ ├── blocking.cpp │ │ │ │ ├── blocking_adaptation.cpp │ │ │ │ ├── bulk_execute.cpp │ │ │ │ ├── bulk_guarantee.cpp │ │ │ │ ├── connect.cpp │ │ │ │ ├── context_as.cpp │ │ │ │ ├── execute.cpp │ │ │ │ ├── executor.cpp │ │ │ │ ├── invocable_archetype.cpp │ │ │ │ ├── mapping.cpp │ │ │ │ ├── operation_state.cpp │ │ │ │ ├── outstanding_work.cpp │ │ │ │ ├── prefer_only.cpp │ │ │ │ ├── receiver.cpp │ │ │ │ ├── relationship.cpp │ │ │ │ ├── schedule.cpp │ │ │ │ ├── scheduler.cpp │ │ │ │ ├── sender.cpp │ │ │ │ ├── set_done.cpp │ │ │ │ ├── set_error.cpp │ │ │ │ ├── set_value.cpp │ │ │ │ ├── start.cpp │ │ │ │ └── submit.cpp │ │ │ │ ├── execution_context.cpp │ │ │ │ ├── executor.cpp │ │ │ │ ├── executor_work_guard.cpp │ │ │ │ ├── experimental │ │ │ │ ├── awaitable_operators.cpp │ │ │ │ ├── basic_channel.cpp │ │ │ │ ├── basic_concurrent_channel.cpp │ │ │ │ ├── channel.cpp │ │ │ │ ├── channel_traits.cpp │ │ │ │ ├── concurrent_channel.cpp │ │ │ │ ├── coro │ │ │ │ │ ├── cancel.cpp │ │ │ │ │ ├── co_spawn.cpp │ │ │ │ │ ├── exception.cpp │ │ │ │ │ ├── executor.cpp │ │ │ │ │ ├── partial.cpp │ │ │ │ │ ├── simple_test.cpp │ │ │ │ │ ├── stack_test.cpp │ │ │ │ │ └── use_coro.cpp │ │ │ │ └── promise.cpp │ │ │ │ ├── file_base.cpp │ │ │ │ ├── generic │ │ │ │ ├── basic_endpoint.cpp │ │ │ │ ├── datagram_protocol.cpp │ │ │ │ ├── raw_protocol.cpp │ │ │ │ ├── seq_packet_protocol.cpp │ │ │ │ └── stream_protocol.cpp │ │ │ │ ├── high_resolution_timer.cpp │ │ │ │ ├── io_context.cpp │ │ │ │ ├── io_context_strand.cpp │ │ │ │ ├── ip │ │ │ │ ├── address.cpp │ │ │ │ ├── address_v4.cpp │ │ │ │ ├── address_v4_iterator.cpp │ │ │ │ ├── address_v4_range.cpp │ │ │ │ ├── address_v6.cpp │ │ │ │ ├── address_v6_iterator.cpp │ │ │ │ ├── address_v6_range.cpp │ │ │ │ ├── basic_endpoint.cpp │ │ │ │ ├── basic_resolver.cpp │ │ │ │ ├── basic_resolver_entry.cpp │ │ │ │ ├── basic_resolver_iterator.cpp │ │ │ │ ├── basic_resolver_query.cpp │ │ │ │ ├── host_name.cpp │ │ │ │ ├── icmp.cpp │ │ │ │ ├── multicast.cpp │ │ │ │ ├── network_v4.cpp │ │ │ │ ├── network_v6.cpp │ │ │ │ ├── resolver_query_base.cpp │ │ │ │ ├── tcp.cpp │ │ │ │ ├── udp.cpp │ │ │ │ ├── unicast.cpp │ │ │ │ └── v6_only.cpp │ │ │ │ ├── is_read_buffered.cpp │ │ │ │ ├── is_write_buffered.cpp │ │ │ │ ├── local │ │ │ │ ├── basic_endpoint.cpp │ │ │ │ ├── connect_pair.cpp │ │ │ │ ├── datagram_protocol.cpp │ │ │ │ └── stream_protocol.cpp │ │ │ │ ├── packaged_task.cpp │ │ │ │ ├── placeholders.cpp │ │ │ │ ├── posix │ │ │ │ ├── basic_descriptor.cpp │ │ │ │ ├── basic_stream_descriptor.cpp │ │ │ │ ├── descriptor.cpp │ │ │ │ ├── descriptor_base.cpp │ │ │ │ └── stream_descriptor.cpp │ │ │ │ ├── post.cpp │ │ │ │ ├── prepend.cpp │ │ │ │ ├── random_access_file.cpp │ │ │ │ ├── read.cpp │ │ │ │ ├── read_at.cpp │ │ │ │ ├── read_until.cpp │ │ │ │ ├── readable_pipe.cpp │ │ │ │ ├── recycling_allocator.cpp │ │ │ │ ├── redirect_error.cpp │ │ │ │ ├── registered_buffer.cpp │ │ │ │ ├── serial_port.cpp │ │ │ │ ├── serial_port_base.cpp │ │ │ │ ├── signal_set.cpp │ │ │ │ ├── socket_base.cpp │ │ │ │ ├── ssl │ │ │ │ ├── context.cpp │ │ │ │ ├── context_base.cpp │ │ │ │ ├── error.cpp │ │ │ │ ├── host_name_verification.cpp │ │ │ │ ├── rfc2818_verification.cpp │ │ │ │ ├── stream.cpp │ │ │ │ └── stream_base.cpp │ │ │ │ ├── static_thread_pool.cpp │ │ │ │ ├── steady_timer.cpp │ │ │ │ ├── strand.cpp │ │ │ │ ├── stream_file.cpp │ │ │ │ ├── streambuf.cpp │ │ │ │ ├── system_context.cpp │ │ │ │ ├── system_executor.cpp │ │ │ │ ├── system_timer.cpp │ │ │ │ ├── this_coro.cpp │ │ │ │ ├── thread.cpp │ │ │ │ ├── thread_pool.cpp │ │ │ │ ├── time_traits.cpp │ │ │ │ ├── ts │ │ │ │ ├── buffer.cpp │ │ │ │ ├── executor.cpp │ │ │ │ ├── internet.cpp │ │ │ │ ├── io_context.cpp │ │ │ │ ├── net.cpp │ │ │ │ ├── netfwd.cpp │ │ │ │ ├── socket.cpp │ │ │ │ └── timer.cpp │ │ │ │ ├── unit_test.hpp │ │ │ │ ├── use_awaitable.cpp │ │ │ │ ├── use_future.cpp │ │ │ │ ├── uses_executor.cpp │ │ │ │ ├── wait_traits.cpp │ │ │ │ ├── windows │ │ │ │ ├── basic_object_handle.cpp │ │ │ │ ├── basic_overlapped_handle.cpp │ │ │ │ ├── basic_random_access_handle.cpp │ │ │ │ ├── basic_stream_handle.cpp │ │ │ │ ├── object_handle.cpp │ │ │ │ ├── overlapped_handle.cpp │ │ │ │ ├── overlapped_ptr.cpp │ │ │ │ ├── random_access_handle.cpp │ │ │ │ └── stream_handle.cpp │ │ │ │ ├── writable_pipe.cpp │ │ │ │ ├── write.cpp │ │ │ │ └── write_at.cpp │ │ └── tools │ │ │ ├── handlerlive.pl │ │ │ ├── handlertree.pl │ │ │ └── handlerviz.pl │ └── test-driver ├── entt │ ├── LICENSE.txt │ └── include │ │ └── entt.hpp ├── glad │ └── include │ │ └── glad │ │ ├── gl.h │ │ └── vulkan.h ├── glm │ └── include │ │ └── glm │ │ ├── CMakeLists.txt │ │ ├── common.hpp │ │ ├── detail │ │ ├── _features.hpp │ │ ├── _fixes.hpp │ │ ├── _noise.hpp │ │ ├── _swizzle.hpp │ │ ├── _swizzle_func.hpp │ │ ├── _vectorize.hpp │ │ ├── compute_common.hpp │ │ ├── compute_vector_relational.hpp │ │ ├── func_common.inl │ │ ├── func_common_simd.inl │ │ ├── func_exponential.inl │ │ ├── func_exponential_simd.inl │ │ ├── func_geometric.inl │ │ ├── func_geometric_simd.inl │ │ ├── func_integer.inl │ │ ├── func_integer_simd.inl │ │ ├── func_matrix.inl │ │ ├── func_matrix_simd.inl │ │ ├── func_packing.inl │ │ ├── func_packing_simd.inl │ │ ├── func_trigonometric.inl │ │ ├── func_trigonometric_simd.inl │ │ ├── func_vector_relational.inl │ │ ├── func_vector_relational_simd.inl │ │ ├── glm.cpp │ │ ├── qualifier.hpp │ │ ├── setup.hpp │ │ ├── type_float.hpp │ │ ├── type_half.hpp │ │ ├── type_half.inl │ │ ├── type_mat2x2.hpp │ │ ├── type_mat2x2.inl │ │ ├── type_mat2x3.hpp │ │ ├── type_mat2x3.inl │ │ ├── type_mat2x4.hpp │ │ ├── type_mat2x4.inl │ │ ├── type_mat3x2.hpp │ │ ├── type_mat3x2.inl │ │ ├── type_mat3x3.hpp │ │ ├── type_mat3x3.inl │ │ ├── type_mat3x4.hpp │ │ ├── type_mat3x4.inl │ │ ├── type_mat4x2.hpp │ │ ├── type_mat4x2.inl │ │ ├── type_mat4x3.hpp │ │ ├── type_mat4x3.inl │ │ ├── type_mat4x4.hpp │ │ ├── type_mat4x4.inl │ │ ├── type_mat4x4_simd.inl │ │ ├── type_quat.hpp │ │ ├── type_quat.inl │ │ ├── type_quat_simd.inl │ │ ├── type_vec1.hpp │ │ ├── type_vec1.inl │ │ ├── type_vec2.hpp │ │ ├── type_vec2.inl │ │ ├── type_vec3.hpp │ │ ├── type_vec3.inl │ │ ├── type_vec4.hpp │ │ ├── type_vec4.inl │ │ └── type_vec4_simd.inl │ │ ├── exponential.hpp │ │ ├── ext.hpp │ │ ├── ext │ │ ├── matrix_clip_space.hpp │ │ ├── matrix_clip_space.inl │ │ ├── matrix_common.hpp │ │ ├── matrix_common.inl │ │ ├── matrix_double2x2.hpp │ │ ├── matrix_double2x2_precision.hpp │ │ ├── matrix_double2x3.hpp │ │ ├── matrix_double2x3_precision.hpp │ │ ├── matrix_double2x4.hpp │ │ ├── matrix_double2x4_precision.hpp │ │ ├── matrix_double3x2.hpp │ │ ├── matrix_double3x2_precision.hpp │ │ ├── matrix_double3x3.hpp │ │ ├── matrix_double3x3_precision.hpp │ │ ├── matrix_double3x4.hpp │ │ ├── matrix_double3x4_precision.hpp │ │ ├── matrix_double4x2.hpp │ │ ├── matrix_double4x2_precision.hpp │ │ ├── matrix_double4x3.hpp │ │ ├── matrix_double4x3_precision.hpp │ │ ├── matrix_double4x4.hpp │ │ ├── matrix_double4x4_precision.hpp │ │ ├── matrix_float2x2.hpp │ │ ├── matrix_float2x2_precision.hpp │ │ ├── matrix_float2x3.hpp │ │ ├── matrix_float2x3_precision.hpp │ │ ├── matrix_float2x4.hpp │ │ ├── matrix_float2x4_precision.hpp │ │ ├── matrix_float3x2.hpp │ │ ├── matrix_float3x2_precision.hpp │ │ ├── matrix_float3x3.hpp │ │ ├── matrix_float3x3_precision.hpp │ │ ├── matrix_float3x4.hpp │ │ ├── matrix_float3x4_precision.hpp │ │ ├── matrix_float4x2.hpp │ │ ├── matrix_float4x2_precision.hpp │ │ ├── matrix_float4x3.hpp │ │ ├── matrix_float4x3_precision.hpp │ │ ├── matrix_float4x4.hpp │ │ ├── matrix_float4x4_precision.hpp │ │ ├── matrix_int2x2.hpp │ │ ├── matrix_int2x2_sized.hpp │ │ ├── matrix_int2x3.hpp │ │ ├── matrix_int2x3_sized.hpp │ │ ├── matrix_int2x4.hpp │ │ ├── matrix_int2x4_sized.hpp │ │ ├── matrix_int3x2.hpp │ │ ├── matrix_int3x2_sized.hpp │ │ ├── matrix_int3x3.hpp │ │ ├── matrix_int3x3_sized.hpp │ │ ├── matrix_int3x4.hpp │ │ ├── matrix_int3x4_sized.hpp │ │ ├── matrix_int4x2.hpp │ │ ├── matrix_int4x2_sized.hpp │ │ ├── matrix_int4x3.hpp │ │ ├── matrix_int4x3_sized.hpp │ │ ├── matrix_int4x4.hpp │ │ ├── matrix_int4x4_sized.hpp │ │ ├── matrix_integer.hpp │ │ ├── matrix_integer.inl │ │ ├── matrix_projection.hpp │ │ ├── matrix_projection.inl │ │ ├── matrix_relational.hpp │ │ ├── matrix_relational.inl │ │ ├── matrix_transform.hpp │ │ ├── matrix_transform.inl │ │ ├── matrix_uint2x2.hpp │ │ ├── matrix_uint2x2_sized.hpp │ │ ├── matrix_uint2x3.hpp │ │ ├── matrix_uint2x3_sized.hpp │ │ ├── matrix_uint2x4.hpp │ │ ├── matrix_uint2x4_sized.hpp │ │ ├── matrix_uint3x2.hpp │ │ ├── matrix_uint3x2_sized.hpp │ │ ├── matrix_uint3x3.hpp │ │ ├── matrix_uint3x3_sized.hpp │ │ ├── matrix_uint3x4.hpp │ │ ├── matrix_uint3x4_sized.hpp │ │ ├── matrix_uint4x2.hpp │ │ ├── matrix_uint4x2_sized.hpp │ │ ├── matrix_uint4x3.hpp │ │ ├── matrix_uint4x3_sized.hpp │ │ ├── matrix_uint4x4.hpp │ │ ├── matrix_uint4x4_sized.hpp │ │ ├── quaternion_common.hpp │ │ ├── quaternion_common.inl │ │ ├── quaternion_common_simd.inl │ │ ├── quaternion_double.hpp │ │ ├── quaternion_double_precision.hpp │ │ ├── quaternion_exponential.hpp │ │ ├── quaternion_exponential.inl │ │ ├── quaternion_float.hpp │ │ ├── quaternion_float_precision.hpp │ │ ├── quaternion_geometric.hpp │ │ ├── quaternion_geometric.inl │ │ ├── quaternion_relational.hpp │ │ ├── quaternion_relational.inl │ │ ├── quaternion_transform.hpp │ │ ├── quaternion_transform.inl │ │ ├── quaternion_trigonometric.hpp │ │ ├── quaternion_trigonometric.inl │ │ ├── scalar_common.hpp │ │ ├── scalar_common.inl │ │ ├── scalar_constants.hpp │ │ ├── scalar_constants.inl │ │ ├── scalar_int_sized.hpp │ │ ├── scalar_integer.hpp │ │ ├── scalar_integer.inl │ │ ├── scalar_packing.hpp │ │ ├── scalar_packing.inl │ │ ├── scalar_reciprocal.hpp │ │ ├── scalar_reciprocal.inl │ │ ├── scalar_relational.hpp │ │ ├── scalar_relational.inl │ │ ├── scalar_uint_sized.hpp │ │ ├── scalar_ulp.hpp │ │ ├── scalar_ulp.inl │ │ ├── vector_bool1.hpp │ │ ├── vector_bool1_precision.hpp │ │ ├── vector_bool2.hpp │ │ ├── vector_bool2_precision.hpp │ │ ├── vector_bool3.hpp │ │ ├── vector_bool3_precision.hpp │ │ ├── vector_bool4.hpp │ │ ├── vector_bool4_precision.hpp │ │ ├── vector_common.hpp │ │ ├── vector_common.inl │ │ ├── vector_double1.hpp │ │ ├── vector_double1_precision.hpp │ │ ├── vector_double2.hpp │ │ ├── vector_double2_precision.hpp │ │ ├── vector_double3.hpp │ │ ├── vector_double3_precision.hpp │ │ ├── vector_double4.hpp │ │ ├── vector_double4_precision.hpp │ │ ├── vector_float1.hpp │ │ ├── vector_float1_precision.hpp │ │ ├── vector_float2.hpp │ │ ├── vector_float2_precision.hpp │ │ ├── vector_float3.hpp │ │ ├── vector_float3_precision.hpp │ │ ├── vector_float4.hpp │ │ ├── vector_float4_precision.hpp │ │ ├── vector_int1.hpp │ │ ├── vector_int1_sized.hpp │ │ ├── vector_int2.hpp │ │ ├── vector_int2_sized.hpp │ │ ├── vector_int3.hpp │ │ ├── vector_int3_sized.hpp │ │ ├── vector_int4.hpp │ │ ├── vector_int4_sized.hpp │ │ ├── vector_integer.hpp │ │ ├── vector_integer.inl │ │ ├── vector_packing.hpp │ │ ├── vector_packing.inl │ │ ├── vector_reciprocal.hpp │ │ ├── vector_reciprocal.inl │ │ ├── vector_relational.hpp │ │ ├── vector_relational.inl │ │ ├── vector_uint1.hpp │ │ ├── vector_uint1_sized.hpp │ │ ├── vector_uint2.hpp │ │ ├── vector_uint2_sized.hpp │ │ ├── vector_uint3.hpp │ │ ├── vector_uint3_sized.hpp │ │ ├── vector_uint4.hpp │ │ ├── vector_uint4_sized.hpp │ │ ├── vector_ulp.hpp │ │ └── vector_ulp.inl │ │ ├── fwd.hpp │ │ ├── geometric.hpp │ │ ├── glm.hpp │ │ ├── gtc │ │ ├── bitfield.hpp │ │ ├── bitfield.inl │ │ ├── color_space.hpp │ │ ├── color_space.inl │ │ ├── constants.hpp │ │ ├── constants.inl │ │ ├── epsilon.hpp │ │ ├── epsilon.inl │ │ ├── integer.hpp │ │ ├── integer.inl │ │ ├── matrix_access.hpp │ │ ├── matrix_access.inl │ │ ├── matrix_integer.hpp │ │ ├── matrix_inverse.hpp │ │ ├── matrix_inverse.inl │ │ ├── matrix_transform.hpp │ │ ├── matrix_transform.inl │ │ ├── noise.hpp │ │ ├── noise.inl │ │ ├── packing.hpp │ │ ├── packing.inl │ │ ├── quaternion.hpp │ │ ├── quaternion.inl │ │ ├── quaternion_simd.inl │ │ ├── random.hpp │ │ ├── random.inl │ │ ├── reciprocal.hpp │ │ ├── round.hpp │ │ ├── round.inl │ │ ├── type_aligned.hpp │ │ ├── type_precision.hpp │ │ ├── type_precision.inl │ │ ├── type_ptr.hpp │ │ ├── type_ptr.inl │ │ ├── ulp.hpp │ │ ├── ulp.inl │ │ └── vec1.hpp │ │ ├── gtx │ │ ├── associated_min_max.hpp │ │ ├── associated_min_max.inl │ │ ├── bit.hpp │ │ ├── bit.inl │ │ ├── closest_point.hpp │ │ ├── closest_point.inl │ │ ├── color_encoding.hpp │ │ ├── color_encoding.inl │ │ ├── color_space.hpp │ │ ├── color_space.inl │ │ ├── color_space_YCoCg.hpp │ │ ├── color_space_YCoCg.inl │ │ ├── common.hpp │ │ ├── common.inl │ │ ├── compatibility.hpp │ │ ├── compatibility.inl │ │ ├── component_wise.hpp │ │ ├── component_wise.inl │ │ ├── dual_quaternion.hpp │ │ ├── dual_quaternion.inl │ │ ├── easing.hpp │ │ ├── easing.inl │ │ ├── euler_angles.hpp │ │ ├── euler_angles.inl │ │ ├── extend.hpp │ │ ├── extend.inl │ │ ├── extended_min_max.hpp │ │ ├── extended_min_max.inl │ │ ├── exterior_product.hpp │ │ ├── exterior_product.inl │ │ ├── fast_exponential.hpp │ │ ├── fast_exponential.inl │ │ ├── fast_square_root.hpp │ │ ├── fast_square_root.inl │ │ ├── fast_trigonometry.hpp │ │ ├── fast_trigonometry.inl │ │ ├── float_notmalize.inl │ │ ├── functions.hpp │ │ ├── functions.inl │ │ ├── gradient_paint.hpp │ │ ├── gradient_paint.inl │ │ ├── handed_coordinate_space.hpp │ │ ├── handed_coordinate_space.inl │ │ ├── hash.hpp │ │ ├── hash.inl │ │ ├── integer.hpp │ │ ├── integer.inl │ │ ├── intersect.hpp │ │ ├── intersect.inl │ │ ├── io.hpp │ │ ├── io.inl │ │ ├── log_base.hpp │ │ ├── log_base.inl │ │ ├── matrix_cross_product.hpp │ │ ├── matrix_cross_product.inl │ │ ├── matrix_decompose.hpp │ │ ├── matrix_decompose.inl │ │ ├── matrix_factorisation.hpp │ │ ├── matrix_factorisation.inl │ │ ├── matrix_interpolation.hpp │ │ ├── matrix_interpolation.inl │ │ ├── matrix_major_storage.hpp │ │ ├── matrix_major_storage.inl │ │ ├── matrix_operation.hpp │ │ ├── matrix_operation.inl │ │ ├── matrix_query.hpp │ │ ├── matrix_query.inl │ │ ├── matrix_transform_2d.hpp │ │ ├── matrix_transform_2d.inl │ │ ├── mixed_product.hpp │ │ ├── mixed_product.inl │ │ ├── norm.hpp │ │ ├── norm.inl │ │ ├── normal.hpp │ │ ├── normal.inl │ │ ├── normalize_dot.hpp │ │ ├── normalize_dot.inl │ │ ├── number_precision.hpp │ │ ├── number_precision.inl │ │ ├── optimum_pow.hpp │ │ ├── optimum_pow.inl │ │ ├── orthonormalize.hpp │ │ ├── orthonormalize.inl │ │ ├── pca.hpp │ │ ├── pca.inl │ │ ├── perpendicular.hpp │ │ ├── perpendicular.inl │ │ ├── polar_coordinates.hpp │ │ ├── polar_coordinates.inl │ │ ├── projection.hpp │ │ ├── projection.inl │ │ ├── quaternion.hpp │ │ ├── quaternion.inl │ │ ├── range.hpp │ │ ├── raw_data.hpp │ │ ├── raw_data.inl │ │ ├── rotate_normalized_axis.hpp │ │ ├── rotate_normalized_axis.inl │ │ ├── rotate_vector.hpp │ │ ├── rotate_vector.inl │ │ ├── scalar_multiplication.hpp │ │ ├── scalar_relational.hpp │ │ ├── scalar_relational.inl │ │ ├── spline.hpp │ │ ├── spline.inl │ │ ├── std_based_type.hpp │ │ ├── std_based_type.inl │ │ ├── string_cast.hpp │ │ ├── string_cast.inl │ │ ├── texture.hpp │ │ ├── texture.inl │ │ ├── transform.hpp │ │ ├── transform.inl │ │ ├── transform2.hpp │ │ ├── transform2.inl │ │ ├── type_aligned.hpp │ │ ├── type_aligned.inl │ │ ├── type_trait.hpp │ │ ├── type_trait.inl │ │ ├── vec_swizzle.hpp │ │ ├── vector_angle.hpp │ │ ├── vector_angle.inl │ │ ├── vector_query.hpp │ │ ├── vector_query.inl │ │ ├── wrap.hpp │ │ └── wrap.inl │ │ ├── integer.hpp │ │ ├── mat2x2.hpp │ │ ├── mat2x3.hpp │ │ ├── mat2x4.hpp │ │ ├── mat3x2.hpp │ │ ├── mat3x3.hpp │ │ ├── mat3x4.hpp │ │ ├── mat4x2.hpp │ │ ├── mat4x3.hpp │ │ ├── mat4x4.hpp │ │ ├── matrix.hpp │ │ ├── packing.hpp │ │ ├── simd │ │ ├── common.h │ │ ├── exponential.h │ │ ├── geometric.h │ │ ├── integer.h │ │ ├── matrix.h │ │ ├── neon.h │ │ ├── packing.h │ │ ├── platform.h │ │ ├── trigonometric.h │ │ └── vector_relational.h │ │ ├── trigonometric.hpp │ │ ├── vec2.hpp │ │ ├── vec3.hpp │ │ ├── vec4.hpp │ │ └── vector_relational.hpp ├── lua │ ├── README │ ├── doc │ │ ├── contents.html │ │ ├── index.css │ │ ├── logo.gif │ │ ├── lua.1 │ │ ├── lua.css │ │ ├── luac.1 │ │ ├── manual.css │ │ ├── manual.html │ │ ├── osi-certified-72x60.png │ │ └── readme.html │ ├── include │ │ ├── lauxlib.h │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luaconf.h │ │ └── lualib.h │ ├── premake5.lua │ └── src │ │ ├── lapi.c │ │ ├── lapi.h │ │ ├── lauxlib.c │ │ ├── lauxlib.h │ │ ├── lbaselib.c │ │ ├── lcode.c │ │ ├── lcode.h │ │ ├── lcorolib.c │ │ ├── lctype.c │ │ ├── lctype.h │ │ ├── ldblib.c │ │ ├── ldebug.c │ │ ├── ldebug.h │ │ ├── ldo.c │ │ ├── ldo.h │ │ ├── ldump.c │ │ ├── lfunc.c │ │ ├── lfunc.h │ │ ├── lgc.c │ │ ├── lgc.h │ │ ├── linit.c │ │ ├── liolib.c │ │ ├── ljumptab.h │ │ ├── llex.c │ │ ├── llex.h │ │ ├── llimits.h │ │ ├── lmathlib.c │ │ ├── lmem.c │ │ ├── lmem.h │ │ ├── loadlib.c │ │ ├── lobject.c │ │ ├── lobject.h │ │ ├── lopcodes.c │ │ ├── lopcodes.h │ │ ├── lopnames.h │ │ ├── loslib.c │ │ ├── lparser.c │ │ ├── lparser.h │ │ ├── lprefix.h │ │ ├── lstate.c │ │ ├── lstate.h │ │ ├── lstring.c │ │ ├── lstring.h │ │ ├── lstrlib.c │ │ ├── ltable.c │ │ ├── ltable.h │ │ ├── ltablib.c │ │ ├── ltm.c │ │ ├── ltm.h │ │ ├── lua.c │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luac.c │ │ ├── luaconf.h │ │ ├── lualib.h │ │ ├── lundump.c │ │ ├── lundump.h │ │ ├── lutf8lib.c │ │ ├── lvm.c │ │ ├── lvm.h │ │ ├── lzio.c │ │ └── lzio.h ├── optick │ ├── LICENSE │ ├── include │ │ ├── optick.config.h │ │ └── optick.h │ └── src │ │ ├── optick.config.h │ │ ├── optick.h │ │ ├── optick_capi.cpp │ │ ├── optick_capi.h │ │ ├── optick_common.h │ │ ├── optick_core.cpp │ │ ├── optick_core.freebsd.h │ │ ├── optick_core.h │ │ ├── optick_core.linux.h │ │ ├── optick_core.macos.h │ │ ├── optick_core.platform.h │ │ ├── optick_core.win.h │ │ ├── optick_gpu.cpp │ │ ├── optick_gpu.d3d12.cpp │ │ ├── optick_gpu.h │ │ ├── optick_gpu.vulkan.cpp │ │ ├── optick_memory.h │ │ ├── optick_message.cpp │ │ ├── optick_message.h │ │ ├── optick_miniz.cpp │ │ ├── optick_miniz.h │ │ ├── optick_serialization.cpp │ │ ├── optick_serialization.h │ │ ├── optick_server.cpp │ │ └── optick_server.h └── stb │ ├── stb_image.h │ └── stb_truetype.h ├── premake5.lua ├── resources ├── CommonResources │ ├── fonts │ │ └── ProggyClean.ttf │ └── shaders │ │ ├── DebugRenderer │ │ └── DebugRenderer.shader │ │ ├── PostProcessing │ │ └── Bloom │ │ │ ├── downsample.cshader │ │ │ └── upsample.cshader │ │ └── Renderer2D │ │ ├── Light2D.shader │ │ ├── ParticleEmitter2D.shader │ │ ├── ParticleRenderer2D.shader │ │ └── SpriteRenderer2D.shader ├── EditorResources │ ├── fonts │ │ ├── DroidSans.ttf │ │ └── fa-solid-900.ttf │ └── textures │ │ ├── 2d-quad.png │ │ ├── 3d-cube.png │ │ ├── file.png │ │ ├── folder.png │ │ ├── pause.png │ │ ├── play.png │ │ ├── png.png │ │ ├── step.png │ │ └── stop.png ├── Resources.premake.lua ├── logo │ ├── Logo_Dark.png │ ├── Logo_Light.png │ └── X_Light.png ├── projects │ └── default_project │ │ ├── assets │ │ ├── 2DPhysicsTest.xen │ │ ├── AlphaTest.xen │ │ ├── NewTestScene.xen │ │ ├── scripts │ │ │ ├── ScriptOne.lua │ │ │ └── ScriptTwo.lua │ │ └── textures │ │ │ ├── CheckerBoardTexture.png │ │ │ ├── Vulkan.png │ │ │ ├── backgrounds │ │ │ ├── city 1 │ │ │ │ ├── 1.png │ │ │ │ ├── 10.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ └── 6.png │ │ │ ├── city 2 │ │ │ │ ├── 1.png │ │ │ │ ├── 10.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ └── 7.png │ │ │ ├── city 3 │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ └── 7.png │ │ │ ├── city 4 │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 7.png │ │ │ │ ├── 8.png │ │ │ │ └── 9.png │ │ │ ├── city 5 │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ └── 7.png │ │ │ ├── city 6 │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ ├── 7.png │ │ │ │ └── 8.png │ │ │ ├── city 7 │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ └── 7.png │ │ │ └── city 8 │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ └── 7.png │ │ │ └── opengl.png │ │ └── default_project.xenproject └── screenshots │ └── XenEditor.png └── sandbox ├── SandboxApp ├── SandboxApp.premake.lua ├── assets │ ├── AlphaTest.xen │ ├── TestCase │ ├── Text.txt │ ├── fonts │ │ ├── DroidSans.ttf │ │ ├── OpenFontIcons.ttf │ │ ├── fa-solid-900.ttf │ │ └── sui.ttf │ ├── icons │ │ ├── cursor_icon.png │ │ └── window_icon.png │ ├── scene.xen │ ├── shaders │ │ ├── circle_shader.shader │ │ ├── line_shader.shader │ │ ├── main_shader.shader │ │ └── quad_shader.shader │ └── textures │ │ ├── CheckerBoardTexture.png │ │ ├── Consolas.png │ │ ├── ConsolasBold.png │ │ ├── ConsolasBoldItalic.png │ │ ├── ConsolasItalic.png │ │ ├── ConsolasRegular.png │ │ ├── Vulkan.png │ │ ├── microsoft.png │ │ └── opengl.png └── src │ ├── FlappyBird.h │ ├── SandboxApp.cpp │ └── Test.h └── SandboxAppAndroid ├── SandboxAndroidBuild.lua ├── premake5.lua └── src ├── AndroidManifest.xml ├── cpp ├── SandboxAppAndroid.cpp ├── android_native_app_glue.c └── android_native_app_glue.h └── res ├── mipmap-hdpi └── ic_launcher.png ├── mipmap-mdpi └── ic_launcher.png ├── mipmap-xhdpi └── ic_launcher.png ├── mipmap-xxhdpi └── ic_launcher.png └── values └── strings.xml /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[FEATURE]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Xenode/deps/glfw"] 2 | path = deps/glfw 3 | url = https://github.com/shreyaspranav/glfw.git 4 | [submodule "Xenode/deps/spdlog"] 5 | path = deps/spdlog 6 | url = https://github.com/shreyaspranav/spdlog.git 7 | [submodule "Xenode/deps/imgui"] 8 | path = deps/imgui 9 | url = https://github.com/shreyaspranav/imgui.git 10 | [submodule "Xenode/deps/taskflow"] 11 | path = deps/taskflow 12 | url = https://github.com/shreyaspranav/taskflow.git 13 | [submodule "Xenode/deps/yaml-cpp"] 14 | path = deps/yaml-cpp 15 | url = https://github.com/shreyaspranav/yaml-cpp.git 16 | [submodule "Xenode/deps/ImGuizmo"] 17 | path = deps/ImGuizmo 18 | url = https://github.com/shreyaspranav/ImGuizmo.git 19 | [submodule "deps/box2d"] 20 | path = deps/box2d 21 | url = https://github.com/shreyaspranav/box2d 22 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | Visit here to obtain the Code of Conduct - -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Visit here to obtain the Contributing Guidelines - -------------------------------------------------------------------------------- /TODO.txt: -------------------------------------------------------------------------------- 1 | List of Maintainance stuff to do: 2 | --------------------------------- 3 | 4 | ================================================================================== 5 | 6 | 2D Renderer stuff to do: 7 | ------------------------ 8 | 9 | -> Point Lights, Spot Lights 10 | -> Hard and Soft shadows 11 | -> Light Blend modes 12 | -> 2D material system / Sprite Sheet API 13 | -> Emissiveness 14 | -> Normal maps 15 | -> Reflectiveness 16 | -> Tint Color 17 | -> Mixing of materials 18 | -> Procedural Texture Generation 19 | -> Bloom 20 | -> RendererLayers: sortable layers 21 | -> Overlay icons and gizmos 22 | ================================================================================= -------------------------------------------------------------------------------- /core/Xen/src/ProjectManagerLayer.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XenodeStudio/Xenode/c888dd5811b5205d071b2e77e7a58f413dc26b04/core/Xen/src/ProjectManagerLayer.cpp -------------------------------------------------------------------------------- /core/Xen/src/ProjectManagerLayer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | class ProjectManagerLayer : Xen::Layer 5 | { 6 | public: 7 | ProjectManagerLayer(); 8 | ~ProjectManagerLayer(); 9 | 10 | virtual void OnAttach() override; 11 | virtual void OnDetach() override; 12 | virtual void OnUpdate(float timestep) override; 13 | virtual void OnFixedUpdate() override; 14 | virtual void OnRender() override; 15 | }; -------------------------------------------------------------------------------- /core/Xenode/src/core/app/EventDispatcher.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "Events.h" 5 | 6 | namespace Xen { 7 | using EventCallbackFn = std::function; 8 | 9 | class XEN_API EventDispatcher 10 | { 11 | public: 12 | template 13 | static void Dispatch(Event& event, const Function& function) 14 | { 15 | if (event.GetEventType() == EventClass::GetStaticType()) 16 | function(static_cast(event)); 17 | } 18 | }; 19 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/app/Layer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "Events.h" 5 | 6 | namespace Xen { 7 | class XEN_API Layer 8 | { 9 | protected: 10 | uint32_t layerID; 11 | std::string layerName; 12 | 13 | public: 14 | virtual void OnAttach() {} 15 | virtual void OnDetach() {} 16 | virtual void OnUpdate(float timestep) {} 17 | virtual void OnFixedUpdate() {} 18 | virtual void OnRender() {} 19 | 20 | virtual void OnImGuiUpdate() {} 21 | 22 | virtual void OnEvent(Event& event) {} 23 | }; 24 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/app/UUID.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "UUID.h" 3 | 4 | namespace Xen { 5 | 6 | static std::random_device s_RandomDevice; 7 | static std::mt19937_64 s_Engine(s_RandomDevice()); 8 | static std::uniform_int_distribution s_UniformIntDistribution; 9 | 10 | UUID::UUID() 11 | { 12 | m_ID = s_UniformIntDistribution(s_Engine); 13 | //XEN_ENGINE_LOG_WARN("UUID: {0} Generated!", m_ID); 14 | } 15 | UUID::UUID(uint64_t id) 16 | { 17 | m_ID = id; 18 | } 19 | UUID::~UUID() 20 | { 21 | } 22 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/app/Utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace Xen { 6 | namespace Utils { 7 | std::string OpenFileDialogOpen(const char* filter); 8 | std::string OpenFileDialogSave(const char* filter); 9 | } 10 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/app/desktop/Monitor.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #ifdef XEN_DEVICE_DESKTOP 6 | 7 | namespace Xen { 8 | class XEN_API Monitor 9 | { 10 | public: 11 | virtual uint32_t GetMonitorWidth() const = 0; 12 | virtual uint32_t GetMonitorHeight() const = 0; 13 | virtual uint32_t GetMonitorRefreshRate() const = 0; 14 | 15 | virtual uint8_t GetMonitorRedBits() const = 0; 16 | virtual uint8_t GetMonitorGreenBits() const = 0; 17 | virtual uint8_t GetMonitorBlueBits() const = 0; 18 | 19 | virtual void* GetNativeMonitor() const = 0; 20 | 21 | static std::vector> GetAvailableMonitors(); 22 | static Ref GetMonitor(uint8_t index); 23 | static uint8_t GetMonitorCount(); 24 | }; 25 | } 26 | 27 | #endif -------------------------------------------------------------------------------- /core/Xenode/src/core/app/desktop/Window.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "Window.h" 3 | 4 | #ifdef XEN_DEVICE_DESKTOP 5 | 6 | #include 7 | 8 | namespace Xen { 9 | Ref Window::GetWindow(const WindowProps& props) 10 | { 11 | #ifdef XEN_DEVICE_DESKTOP 12 | return std::make_shared(props); 13 | #elif defined(XEN_DEVICE_MOBILE) 14 | TRIGGER_BREAKPOINT; 15 | return nullptr; 16 | #endif 17 | } 18 | } 19 | 20 | #endif -------------------------------------------------------------------------------- /core/Xenode/src/core/app/mobile/Surface.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "Surface.h" 3 | 4 | #ifdef XEN_DEVICE_MOBILE 5 | #include 6 | 7 | namespace Xen { 8 | Ref Surface::GetSurface(void* application_context) 9 | { 10 | #ifdef XEN_PLATFORM_ANDROID 11 | return std::make_shared(application_context); 12 | #endif 13 | return nullptr; 14 | } 15 | } 16 | #endif // XEN_DEVICE_MOBILE 17 | -------------------------------------------------------------------------------- /core/Xenode/src/core/app/mobile/Surface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifdef XEN_DEVICE_MOBILE 3 | 4 | #include 5 | #include "GraphicsAPI.h" 6 | 7 | namespace Xen { 8 | class XEN_API Surface 9 | { 10 | public: 11 | virtual ~Surface() = default; 12 | 13 | virtual void Create() = 0; 14 | virtual void Update() = 0; 15 | virtual void Shutdown() = 0; 16 | 17 | virtual void SetRenderingAPI(GraphicsAPI api) = 0; 18 | 19 | static Ref GetSurface(void* application_context); 20 | }; 21 | } 22 | #endif 23 | 24 | -------------------------------------------------------------------------------- /core/Xenode/src/core/asset/AssetImporter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #include "Asset.h" 5 | 6 | namespace Xen 7 | { 8 | class XEN_API AssetImporter 9 | { 10 | public: 11 | // Import asset from a file and returns a buffer of preprocessed data. 12 | static Ref ImportAsset(AssetMetadata* metadata); 13 | }; 14 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/asset/AssetPack.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "AssetPack.h" 3 | 4 | namespace Xen 5 | { 6 | 7 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/asset/RuntimeAssetManager.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "RuntimeAssetManager.h" 3 | 4 | namespace Xen 5 | { 6 | RuntimeAssetManager::RuntimeAssetManager() 7 | { 8 | } 9 | RuntimeAssetManager::~RuntimeAssetManager() 10 | { 11 | } 12 | Ref RuntimeAssetManager::GetAsset(AssetHandle handle) const 13 | { 14 | return Ref(); 15 | } 16 | bool RuntimeAssetManager::IsAssetHandleValid(AssetHandle handle) const 17 | { 18 | return false; 19 | } 20 | bool RuntimeAssetManager::IsAssetLoaded(AssetHandle handle) const 21 | { 22 | return false; 23 | } 24 | bool RuntimeAssetManager::ImportAssetsFromPack(const std::filesystem::path& filePath) 25 | { 26 | return false; 27 | } 28 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/asset/RuntimeAssetManager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include "AssetManager.h" 4 | 5 | namespace Xen { 6 | 7 | class RuntimeAssetManager : public AssetManager 8 | { 9 | public: 10 | RuntimeAssetManager(); 11 | virtual ~RuntimeAssetManager(); 12 | 13 | virtual Ref GetAsset(AssetHandle handle) const override; 14 | 15 | virtual bool IsAssetHandleValid(AssetHandle handle) const override; 16 | virtual bool IsAssetLoaded(AssetHandle handle) const override; 17 | 18 | // Imports all assets from an "asset pack" 19 | bool ImportAssetsFromPack(const std::filesystem::path& filePath) override; 20 | private: 21 | AssetPtrRegistry m_PtrRegistry; 22 | }; 23 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/asset/import/ShaderAssetImporter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #include 5 | #include 6 | 7 | namespace Xen 8 | { 9 | class XEN_API ShaderAssetImporter 10 | { 11 | public: 12 | static Ref ImportShaderAsset(AssetMetadata* metadata); 13 | private: 14 | static Vector ReadShaderCode(const std::filesystem::path& completePath); 15 | static UnorderedMap PreprocessShader(const Vector& completeShaderCode); 16 | static Ref CompileAndCreateShaderAsset(const UnorderedMap& shaderSources, const std::string& fileName); 17 | }; 18 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/asset/import/TextureAssetImporter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace Xen 6 | { 7 | class XEN_API TextureAssetImporter 8 | { 9 | public: 10 | static Ref ImportTextureAsset(AssetMetadata* metadata); 11 | private: 12 | static Ref ImportTexture2D(AssetMetadata* metadata, const std::filesystem::path& completeFilePath); 13 | }; 14 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/BufferObjectBindings.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace Xen 5 | { 6 | namespace UniformBufferBinding 7 | { 8 | constexpr uint8_t MAIN_SHADER_PER_FRAME_DATA = 1; 9 | 10 | constexpr uint8_t PARTICLE_EMITTER_PER_FRAME_DATA = 2; 11 | constexpr uint8_t PARTICLE_EMITTER_SETTINGS = 3; 12 | 13 | #ifdef XEN_ENABLE_DEBUG_RENDERER 14 | constexpr uint8_t DEBUG_RENDERER_PER_FRAME_DATA = 4; 15 | #endif 16 | } 17 | 18 | namespace StorageBufferBinding 19 | { 20 | constexpr uint8_t MAIN_SHADER_VERTEX_BUFFER_DATA = 1; 21 | constexpr uint8_t DEBUG_RENDERER_SHADER_VERTEX_BUFFERS_DATA = 2; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/FrameBuffer.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "FrameBuffer.h" 3 | 4 | #include 5 | 6 | #include 7 | 8 | namespace Xen { 9 | 10 | Ref FrameBuffer::CreateFrameBuffer(const FrameBufferSpec& spec) 11 | { 12 | switch (GetApplicationInstance()->GetGraphicsAPI()) 13 | { 14 | case GraphicsAPI::XEN_OPENGL_API: 15 | return std::make_shared(spec); 16 | } 17 | return nullptr; 18 | } 19 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/GraphicsContext.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "GraphicsContext.h" 3 | 4 | #include 5 | 6 | #include 7 | 8 | namespace Xen { 9 | GraphicsContext* GraphicsContext::CreateContext(const Ref& window) 10 | { 11 | switch (GetApplicationInstance()->GetGraphicsAPI()) 12 | { 13 | case GraphicsAPI::XEN_OPENGL_API: 14 | return new OpenGLContext((GLFWwindow*)window->GetNativeWindow()); 15 | } 16 | return nullptr; 17 | } 18 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/GraphicsContext.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace Xen { 7 | class XEN_API GraphicsContext 8 | { 9 | public: 10 | virtual void Init() = 0; 11 | virtual void SwapBuffers() = 0; 12 | 13 | static GraphicsContext* CreateContext(const Ref& window); 14 | virtual void DestroyContext() = 0; 15 | }; 16 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/ParticleSystem2D.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "ParticleSettings2D.h" 6 | 7 | namespace Xen { 8 | class XEN_API ParticleSystem2D 9 | { 10 | public: 11 | friend class ParticleInstance; 12 | 13 | static void Initialize(); 14 | static void RenderParticles(ParticleInstance2D* particleInstance, double timestep); 15 | 16 | private: 17 | static void InitializeBuffers(ParticleInstance2D* particleInstance); 18 | }; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/ParticlesRenderer2D.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace Xen 6 | { 7 | class Camera; 8 | 9 | class XEN_API ParticlesRenderer2D 10 | { 11 | private: 12 | friend class Renderer2D; 13 | 14 | static void Init(); 15 | static void BeginScene(const Ref& camera); 16 | static void EndScene(); 17 | 18 | static void RenderFrame(float timestep); 19 | }; 20 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/QueryObject.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "QueryObject.h" 3 | 4 | #include 5 | 6 | #include 7 | 8 | namespace Xen 9 | { 10 | Ref QueryObject::CreateQueryObject(QueryTarget target) 11 | { 12 | switch (GetApplicationInstance()->GetGraphicsAPI()) 13 | { 14 | case GraphicsAPI::XEN_OPENGL_API: 15 | return std::make_shared(target); 16 | } 17 | return nullptr; 18 | } 19 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/QueryObject.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace Xen 6 | { 7 | enum class QueryTarget { TransformFeedbackPrimitivesWritten }; 8 | 9 | class XEN_API QueryObject 10 | { 11 | public: 12 | virtual void BeginQuery() const = 0; 13 | virtual void EndQuery() const = 0; 14 | 15 | virtual void GetQueryResult(const void* data) const = 0; 16 | 17 | static Ref CreateQueryObject(QueryTarget target); 18 | }; 19 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/ScreenRenderer.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "ScreenRenderer.h" 3 | 4 | #include "Shader.h" 5 | #include "RenderCommand.h" 6 | 7 | #include 8 | 9 | namespace Xen { 10 | 11 | Ref screenShader; 12 | 13 | void ScreenRenderer2D::Init() 14 | { 15 | VertexBufferLayout l; 16 | screenShader = Shader::CreateShader("assets/shaders/screen_shader.shader"); 17 | screenShader->LoadShader(nullptr); 18 | } 19 | 20 | void ScreenRenderer2D::RenderFinalSceneToScreen(uint32_t unlitSceneTextureID, uint32_t sceneMaskTextureID, uint32_t lightMapTextureID) 21 | { 22 | screenShader->Bind(); 23 | 24 | Texture2D::BindTexture(unlitSceneTextureID, 0); 25 | 26 | RenderCommand::DrawNonIndexed(PrimitiveType::Triangles, nullptr, 6); 27 | } 28 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/ScreenRenderer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace Xen { 6 | class ScreenRenderer2D 7 | { 8 | public: 9 | static void Init(); 10 | static void RenderFinalSceneToScreen(uint32_t unlitSceneTextureID, uint32_t sceneMaskTextureID, uint32_t lightMapTextureID); 11 | }; 12 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/renderer/SpriteRenderer2D.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace Xen 6 | { 7 | class Camera; 8 | 9 | class XEN_API SpriteRenderer2D 10 | { 11 | private: 12 | friend class Renderer2D; 13 | 14 | static void Init(); 15 | static void BeginScene(const Ref& camera); 16 | static void EndScene(); 17 | 18 | static void RenderFrame(float timestep); 19 | }; 20 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/scene/ScenePhysics.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "Scene.h" 5 | #include 6 | 7 | namespace Xen { 8 | class XEN_API ScenePhysics 9 | { 10 | public: 11 | static void Initialize(float fixedTimeStep); 12 | static void SetActiveScene(const Ref& scene); 13 | 14 | static void RuntimeStart(const Vec3& gravity); 15 | 16 | static void Step(float timestep); 17 | static void FixedStepUpdate(); 18 | 19 | static void RuntimeEnd(); 20 | }; 21 | } -------------------------------------------------------------------------------- /core/Xenode/src/core/scene/SceneSerializer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "Components.h" 5 | 6 | namespace Xen { 7 | class Scene; 8 | // class Scene; 9 | 10 | class SceneSerializer 11 | { 12 | 13 | public: 14 | // editorCameraTransform is to serialize the Editor Camera's transform. 15 | static void Serialize(const Ref& scene, const Component::Transform& editorCameraTransform, const std::string& filePath); 16 | static void SerializeBinary(const Ref& scene, const std::string& filePath); 17 | 18 | static Component::Transform Deserialize(const Ref& scene, const std::string& filePath); 19 | static void DeserializeBinary(const Ref& scene, const std::string& filePath); 20 | }; 21 | } 22 | 23 | -------------------------------------------------------------------------------- /core/Xenode/src/core/scene/ScriptableEntity.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #ifdef XEN_DEVICE_DESKTOP 3 | 4 | #include "Scene.h" 5 | #include "core/app/input/KeyboardInput.h" 6 | #include "core/app/input/MouseInput.h" 7 | #include 8 | 9 | namespace Xen { 10 | class ScriptableEntity 11 | { 12 | public: 13 | virtual ~ScriptableEntity() {} 14 | 15 | template 16 | inline T& GetComponent() { return m_Entity.GetComponent(); } 17 | 18 | virtual void OnCreate() {} 19 | virtual void OnDestroy() {} 20 | virtual void OnUpdate(double timestep) {} 21 | 22 | private: 23 | Entity m_Entity; 24 | }; 25 | } 26 | #endif 27 | 28 | #ifdef XEN_DEVICE_MOBILE 29 | namespace Xen { 30 | class ScriptableEntity 31 | { 32 | public: 33 | }; 34 | } 35 | #endif -------------------------------------------------------------------------------- /core/Xenode/src/core/scripting/Script.cpp: -------------------------------------------------------------------------------- 1 | #include "pch" 2 | #include "Script.h" 3 | 4 | #include 5 | 6 | #include 7 | 8 | #include 9 | 10 | namespace Xen { 11 | Ref