Copy disabled (too large)
Download .txt
Showing preview only (15,187K chars total). Download the full file to get everything.
Repository: diasurgical/DevilutionX
Branch: master
Commit: 4f6a172aa37e
Files: 1343
Total size: 14.3 MB
Directory structure:
gitextract_h4wrmfpe/
├── .devcontainer/
│ ├── Dockerfile
│ ├── devcontainer.json
│ └── fluxbox/
│ ├── apps
│ └── menu
├── .editorconfig
├── .gdbinit
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── feature_request.yml
│ ├── dependabot.yml
│ └── workflows/
│ ├── 3ds.yml
│ ├── Android.yml
│ ├── Linux_aarch64.yml
│ ├── Linux_x86.yml
│ ├── Linux_x86_64.yml
│ ├── Linux_x86_64_SDL1.yml
│ ├── Linux_x86_64_SDL3_test.yml
│ ├── Linux_x86_64_test.yml
│ ├── PS4.yml
│ ├── PS5.yml
│ ├── Windows9x_MinGW.yml
│ ├── Windows_MSVC_x64.yml
│ ├── Windows_MinGW_x64.yml
│ ├── Windows_MinGW_x86.yml
│ ├── Windows_XP_32bit.yml
│ ├── amiga-m68k.yml
│ ├── cache-cleanup.yml
│ ├── clang-format-check.yml
│ ├── clang-tidy-check.yml
│ ├── iOS.yml
│ ├── macOS_arm64.yml
│ ├── macOS_x86_64.yml
│ ├── miyoo_mini_release.yml
│ ├── opendingux_release.yml
│ ├── retrofw_release.yml
│ ├── s390x_qemu_big_endian_tests.yml
│ ├── src_dist_release.yml
│ ├── switch.yml
│ ├── translations.yml
│ ├── vita.yml
│ ├── xbox_nxdk.yml
│ └── xbox_one.yml
├── .gitignore
├── .lldbinit
├── 3rdParty/
│ ├── Lua/
│ │ └── CMakeLists.txt
│ ├── PKWare/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── PKWare.vcxproj
│ │ ├── PKWare.vcxproj.filters
│ │ ├── Pkware.dsp
│ │ ├── explode.cpp
│ │ ├── implode.cpp
│ │ └── pkware.h
│ ├── PicoSHA2/
│ │ └── picosha2.h
│ ├── SDL2/
│ │ ├── CMake/
│ │ │ └── FindSDL2.cmake
│ │ └── CMakeLists.txt
│ ├── SDL3/
│ │ └── CMakeLists.txt
│ ├── SDL3_image/
│ │ └── CMakeLists.txt
│ ├── SDL3_mixer/
│ │ └── CMakeLists.txt
│ ├── SDL_audiolib/
│ │ └── CMakeLists.txt
│ ├── SDL_image/
│ │ ├── CMakeLists.txt
│ │ └── IMG.c
│ ├── SheenBidi/
│ │ └── CMakeLists.txt
│ ├── asio/
│ │ ├── CMakeLists.txt
│ │ ├── asio_handle_exception.cpp
│ │ └── asio_handle_exception.hpp
│ ├── benchmark/
│ │ └── CMakeLists.txt
│ ├── bzip2/
│ │ ├── CMakeLists.txt
│ │ └── bz_internal_error.c
│ ├── discord/
│ │ ├── .editorconfig
│ │ ├── CMakeLists.txt
│ │ └── fixes.patch
│ ├── find_steam_game/
│ │ └── CMakeLists.txt
│ ├── googletest/
│ │ └── CMakeLists.txt
│ ├── libfmt/
│ │ └── CMakeLists.txt
│ ├── libmpq/
│ │ ├── CMakeLists.txt
│ │ └── config.h
│ ├── libpng/
│ │ └── CMakeLists.txt
│ ├── libsmackerdec/
│ │ └── CMakeLists.txt
│ ├── libsodium/
│ │ └── CMakeLists.txt
│ ├── libzt/
│ │ └── CMakeLists.txt
│ ├── magic_enum/
│ │ └── CMakeLists.txt
│ ├── sol2/
│ │ ├── CMakeLists.txt
│ │ └── sol_config/
│ │ └── sol/
│ │ ├── config.hpp
│ │ └── debug.hpp
│ ├── tl/
│ │ ├── CMakeLists.txt
│ │ ├── expected.hpp
│ │ └── function_ref.hpp
│ ├── tolk/
│ │ └── CMakeLists.txt
│ ├── unordered_dense/
│ │ ├── 0001-Disable-PMR-support-for-mingw-std-threads-compat.patch
│ │ └── CMakeLists.txt
│ └── zlib/
│ ├── CMake/
│ │ └── FindZLIB.cmake
│ └── CMakeLists.txt
├── Brewfile
├── CMake/
│ ├── Assets.cmake
│ ├── Definitions.cmake
│ ├── Dependencies.cmake
│ ├── Mods.cmake
│ ├── MoldLinker.cmake
│ ├── Platforms.cmake
│ ├── Tests.cmake
│ ├── VcPkgManifestFeatures.cmake
│ ├── finders/
│ │ ├── FindGperftools.cmake
│ │ ├── FindSDL2_image.cmake
│ │ ├── FindSDL_audiolib.cmake
│ │ ├── FindSpeechd.cmake
│ │ ├── Findsimpleini.cmake
│ │ └── Findsodium.cmake
│ ├── functions/
│ │ ├── FetchContent_ExcludeFromAll_backport.cmake
│ │ ├── copy_files.cmake
│ │ ├── dependency_options.cmake
│ │ ├── devilutionx_library.cmake
│ │ ├── emscripten_system_library.cmake
│ │ ├── genex.cmake
│ │ ├── git.cmake
│ │ ├── object_libraries.cmake
│ │ ├── set_relative_file_macro.cmake
│ │ └── trim_retired_files.cmake
│ └── platforms/
│ ├── .editorconfig
│ ├── aarch64-linux-gnu-clang-static-libc++.toolchain.cmake
│ ├── aarch64-linux-gnu.toolchain.cmake
│ ├── amiga.cmake
│ ├── android.cmake
│ ├── cpigamesh.cmake
│ ├── ctr/
│ │ ├── Tools3DS.cmake
│ │ ├── asio_defs.cmake
│ │ ├── bin2s_header.h.in
│ │ └── modules/
│ │ ├── FindCITRO3D.cmake
│ │ ├── FindCTRULIB.cmake
│ │ ├── FindPNG.cmake
│ │ ├── FindZLIB.cmake
│ │ ├── LibFindMacros.cmake
│ │ └── try_add_imported_target.cmake
│ ├── debian-cross-pkg-config.sh
│ ├── djcpp.toolchain.cmake
│ ├── dos.cmake
│ ├── emscripten.cmake
│ ├── gkd350h.cmake
│ ├── haiku.cmake
│ ├── ios.cmake
│ ├── ios.toolchain.cmake
│ ├── lepus.cmake
│ ├── linux_i386.toolchain.cmake
│ ├── macos_tiger.cmake
│ ├── macports/
│ │ └── finders/
│ │ └── FindMacportsLegacySupport.cmake
│ ├── mingw/
│ │ └── zt_defs.cmake
│ ├── mingw9x/
│ │ └── include/
│ │ └── windef.h
│ ├── mingw9x.toolchain.cmake
│ ├── mingwcc.toolchain.cmake
│ ├── mingwcc64.toolchain.cmake
│ ├── miyoo_mini.cmake
│ ├── n3ds.cmake
│ ├── ps4.cmake
│ ├── retrofw.cmake
│ ├── rg350.cmake
│ ├── rg99.cmake
│ ├── switch/
│ │ └── asio_defs.cmake
│ ├── switch.cmake
│ ├── threads-stub/
│ │ └── FindThreads.cmake
│ ├── uwp_lib.cmake
│ ├── vita.cmake
│ ├── windows.cmake
│ ├── windows9x.cmake
│ ├── windowsXP.cmake
│ ├── xbox_nxdk/
│ │ └── finders/
│ │ ├── FindPNG.cmake
│ │ ├── FindSDL2.cmake
│ │ └── FindZLIB.cmake
│ └── xbox_nxdk.cmake
├── CMakeLists.txt
├── CMakeSettings.json
├── CODE_OF_CONDUCT.md
├── LICENSE.md
├── Packaging/
│ ├── OpenDingux/
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── build-all.sh
│ │ ├── build.sh
│ │ ├── devilutionx-from-disk.sh
│ │ ├── devilutionx-umount-opk-and-run.sh
│ │ ├── gkd350h-manual.txt
│ │ ├── gkd350h.desktop
│ │ ├── lepus-manual.txt
│ │ ├── lepus.desktop
│ │ ├── package-opk.sh
│ │ ├── profile-generate.sh
│ │ ├── retrofw-manual.txt
│ │ ├── retrofw.desktop
│ │ ├── rg350-manual.txt
│ │ ├── rg350.desktop
│ │ ├── rg99-manual.txt
│ │ ├── rg99-pgo.md
│ │ ├── rg99.desktop
│ │ └── targets.sh
│ ├── amiga/
│ │ ├── Dockerfile
│ │ ├── devilutionx.info
│ │ └── prep.sh
│ ├── apple/
│ │ ├── AppIcon.icns
│ │ ├── AppIcon_128.icns
│ │ ├── Info.plist
│ │ ├── LaunchScreen.storyboard
│ │ └── png2icns_tiger/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── png2icns_tiger.c
│ │ └── run.sh
│ ├── cpi-gamesh/
│ │ ├── __init__.py
│ │ ├── build.sh
│ │ └── readme.md
│ ├── ctr/
│ │ └── template.rsf
│ ├── emscripten/
│ │ └── index.html
│ ├── haiku/
│ │ └── devilutionX.rdef.in
│ ├── miyoo_mini/
│ │ ├── build.sh
│ │ ├── setup_toolchain.sh
│ │ ├── skeleton_MiniUI/
│ │ │ └── Diablo/
│ │ │ ├── Diablo.m3u
│ │ │ ├── launch.sh
│ │ │ └── readme.txt
│ │ ├── skeleton_OnionOS/
│ │ │ ├── Roms/
│ │ │ │ └── PORTS/
│ │ │ │ ├── Games/
│ │ │ │ │ └── Diablo (devilutionX)/
│ │ │ │ │ └── _required_files.txt
│ │ │ │ └── Shortcuts/
│ │ │ │ └── Action/
│ │ │ │ └── Diablo (DevilutionX).notfound
│ │ │ └── readme.txt
│ │ └── toolchainfile.cmake
│ ├── nix/
│ │ ├── AppImage.sh
│ │ ├── AppRun
│ │ ├── LinuxReleasePackaging.sh
│ │ ├── README.txt
│ │ ├── debian-cross-aarch64-prep.sh
│ │ ├── debian-cross-i386-prep.sh
│ │ ├── debian-host-prep.sh
│ │ ├── devilutionx-hellfire.desktop
│ │ ├── devilutionx.6
│ │ ├── devilutionx.desktop
│ │ └── devilutionx.metainfo.xml
│ ├── pi/
│ │ └── README.txt
│ ├── ps4/
│ │ ├── README.md
│ │ └── build.sh
│ ├── ps5/
│ │ ├── README.md
│ │ ├── build.sh
│ │ └── homebrew.js
│ ├── resources/
│ │ ├── LICENSE.CC-BY.txt
│ │ ├── LICENSE.OFL.txt
│ │ ├── LICENSE.zlib.txt
│ │ └── README-SDL.txt
│ ├── switch/
│ │ ├── README.txt
│ │ └── packages.txt
│ ├── vita/
│ │ ├── README.txt
│ │ └── sce_sys/
│ │ └── livearea/
│ │ └── contents/
│ │ └── template.xml
│ ├── windows/
│ │ ├── CMakePresets.json
│ │ ├── README.txt
│ │ ├── devilutionx.exe.manifest
│ │ ├── devilutionx.rc
│ │ ├── dos-prep.sh
│ │ ├── mingw-prep.sh
│ │ └── mingw9x-prep.sh
│ ├── xbox-one/
│ │ └── build.bat
│ └── xbox_nxdk/
│ └── xbe_logo.pgm
├── README.md
├── Source/
│ ├── .clang-format
│ ├── .clang-tidy
│ ├── CMakeLists.txt
│ ├── DiabloUI/
│ │ ├── button.cpp
│ │ ├── button.h
│ │ ├── credits.cpp
│ │ ├── credits_lines.cpp
│ │ ├── credits_lines.h
│ │ ├── diabloui.cpp
│ │ ├── diabloui.h
│ │ ├── dialogs.cpp
│ │ ├── dialogs.h
│ │ ├── hero/
│ │ │ ├── selhero.cpp
│ │ │ └── selhero.h
│ │ ├── mainmenu.cpp
│ │ ├── multi/
│ │ │ ├── selconn.cpp
│ │ │ ├── selgame.cpp
│ │ │ └── selgame.h
│ │ ├── progress.cpp
│ │ ├── scrollbar.cpp
│ │ ├── scrollbar.h
│ │ ├── selok.cpp
│ │ ├── selok.h
│ │ ├── selstart.cpp
│ │ ├── selstart.h
│ │ ├── selyesno.cpp
│ │ ├── selyesno.h
│ │ ├── settingsmenu.cpp
│ │ ├── settingsmenu.h
│ │ ├── support_lines.cpp
│ │ ├── support_lines.h
│ │ ├── text_input.cpp
│ │ ├── text_input.hpp
│ │ ├── title.cpp
│ │ ├── ui_flags.hpp
│ │ └── ui_item.h
│ ├── appfat.cpp
│ ├── appfat.h
│ ├── automap.cpp
│ ├── automap.h
│ ├── capture.cpp
│ ├── capture.h
│ ├── codec.cpp
│ ├── codec.h
│ ├── control/
│ │ ├── control.hpp
│ │ ├── control_chat.cpp
│ │ ├── control_chat.hpp
│ │ ├── control_chat_commands.cpp
│ │ ├── control_chat_commands.hpp
│ │ ├── control_flasks.cpp
│ │ ├── control_flasks.hpp
│ │ ├── control_gold.cpp
│ │ ├── control_infobox.cpp
│ │ ├── control_panel.cpp
│ │ └── control_panel.hpp
│ ├── controls/
│ │ ├── README.md
│ │ ├── axis_direction.cpp
│ │ ├── axis_direction.h
│ │ ├── control_mode.cpp
│ │ ├── control_mode.hpp
│ │ ├── controller.cpp
│ │ ├── controller.h
│ │ ├── controller_buttons.cpp
│ │ ├── controller_buttons.h
│ │ ├── controller_motion.cpp
│ │ ├── controller_motion.h
│ │ ├── devices/
│ │ │ ├── game_controller.cpp
│ │ │ ├── game_controller.h
│ │ │ ├── joystick.cpp
│ │ │ ├── joystick.h
│ │ │ ├── kbcontroller.cpp
│ │ │ └── kbcontroller.h
│ │ ├── game_controls.cpp
│ │ ├── game_controls.h
│ │ ├── input.h
│ │ ├── keymapper.cpp
│ │ ├── keymapper.hpp
│ │ ├── menu_controls.cpp
│ │ ├── menu_controls.h
│ │ ├── modifier_hints.cpp
│ │ ├── modifier_hints.h
│ │ ├── padmapper.cpp
│ │ ├── padmapper.hpp
│ │ ├── plrctrls.cpp
│ │ ├── plrctrls.h
│ │ ├── remap_keyboard.h
│ │ └── touch/
│ │ ├── event_handlers.cpp
│ │ ├── event_handlers.h
│ │ ├── gamepad.cpp
│ │ ├── gamepad.h
│ │ ├── renderers.cpp
│ │ └── renderers.h
│ ├── cpp.hint
│ ├── crawl.cpp
│ ├── crawl.hpp
│ ├── cursor.cpp
│ ├── cursor.h
│ ├── data/
│ │ ├── file.cpp
│ │ ├── file.hpp
│ │ ├── iterators.hpp
│ │ ├── parser.cpp
│ │ ├── parser.hpp
│ │ ├── record_reader.cpp
│ │ ├── record_reader.hpp
│ │ ├── value_reader.cpp
│ │ └── value_reader.hpp
│ ├── dead.cpp
│ ├── dead.h
│ ├── debug.cpp
│ ├── debug.h
│ ├── diablo.cpp
│ ├── diablo.h
│ ├── diablo_msg.cpp
│ ├── diablo_msg.hpp
│ ├── discord/
│ │ ├── discord.cpp
│ │ └── discord.h
│ ├── doom.cpp
│ ├── doom.h
│ ├── dvlnet/
│ │ ├── abstract_net.cpp
│ │ ├── abstract_net.h
│ │ ├── base.cpp
│ │ ├── base.h
│ │ ├── base_protocol.h
│ │ ├── cdwrap.cpp
│ │ ├── cdwrap.h
│ │ ├── frame_queue.cpp
│ │ ├── frame_queue.h
│ │ ├── leaveinfo.hpp
│ │ ├── loopback.cpp
│ │ ├── loopback.h
│ │ ├── packet.cpp
│ │ ├── packet.h
│ │ ├── protocol_zt.cpp
│ │ ├── protocol_zt.h
│ │ ├── tcp_client.cpp
│ │ ├── tcp_client.h
│ │ ├── tcp_server.cpp
│ │ ├── tcp_server.h
│ │ ├── zerotier_lwip.cpp
│ │ ├── zerotier_lwip.h
│ │ ├── zerotier_native.cpp
│ │ └── zerotier_native.h
│ ├── effects.cpp
│ ├── effects.h
│ ├── effects_stubs.cpp
│ ├── encrypt.cpp
│ ├── encrypt.h
│ ├── engine/
│ │ ├── actor_position.cpp
│ │ ├── actor_position.hpp
│ │ ├── animationinfo.cpp
│ │ ├── animationinfo.h
│ │ ├── assets.cpp
│ │ ├── assets.hpp
│ │ ├── backbuffer_state.cpp
│ │ ├── backbuffer_state.hpp
│ │ ├── circle.hpp
│ │ ├── clx_sprite.hpp
│ │ ├── demomode.cpp
│ │ ├── demomode.h
│ │ ├── direction.cpp
│ │ ├── direction.hpp
│ │ ├── displacement.hpp
│ │ ├── dx.cpp
│ │ ├── dx.h
│ │ ├── events.cpp
│ │ ├── events.hpp
│ │ ├── lighting_defs.hpp
│ │ ├── load_cel.cpp
│ │ ├── load_cel.hpp
│ │ ├── load_cl2.cpp
│ │ ├── load_cl2.hpp
│ │ ├── load_clx.cpp
│ │ ├── load_clx.hpp
│ │ ├── load_file.hpp
│ │ ├── load_pcx.cpp
│ │ ├── load_pcx.hpp
│ │ ├── palette.cpp
│ │ ├── palette.h
│ │ ├── path.cpp
│ │ ├── path.h
│ │ ├── point.hpp
│ │ ├── points_in_rectangle_range.hpp
│ │ ├── random.cpp
│ │ ├── random.hpp
│ │ ├── rectangle.hpp
│ │ ├── render/
│ │ │ ├── automap_render.cpp
│ │ │ ├── automap_render.hpp
│ │ │ ├── blit_impl.hpp
│ │ │ ├── clx_render.cpp
│ │ │ ├── clx_render.hpp
│ │ │ ├── dun_render.cpp
│ │ │ ├── dun_render.hpp
│ │ │ ├── light_render.cpp
│ │ │ ├── light_render.hpp
│ │ │ ├── primitive_render.cpp
│ │ │ ├── primitive_render.hpp
│ │ │ ├── scrollrt.cpp
│ │ │ ├── scrollrt.h
│ │ │ ├── text_render.cpp
│ │ │ └── text_render.hpp
│ │ ├── size.hpp
│ │ ├── sound.cpp
│ │ ├── sound.h
│ │ ├── sound_defs.hpp
│ │ ├── sound_position.cpp
│ │ ├── sound_position.hpp
│ │ ├── sound_stubs.cpp
│ │ ├── surface.cpp
│ │ ├── surface.hpp
│ │ ├── ticks.cpp
│ │ ├── ticks.hpp
│ │ ├── trn.cpp
│ │ ├── trn.hpp
│ │ └── world_tile.hpp
│ ├── game_mode.cpp
│ ├── game_mode.hpp
│ ├── gamemenu.cpp
│ ├── gamemenu.h
│ ├── gmenu.cpp
│ ├── gmenu.h
│ ├── headless_mode.cpp
│ ├── headless_mode.hpp
│ ├── help.cpp
│ ├── help.h
│ ├── hwcursor.cpp
│ ├── hwcursor.hpp
│ ├── init.cpp
│ ├── init.hpp
│ ├── interfac.cpp
│ ├── interfac.h
│ ├── inv.cpp
│ ├── inv.h
│ ├── inv_iterators.hpp
│ ├── items/
│ │ ├── validation.cpp
│ │ └── validation.h
│ ├── items.cpp
│ ├── items.h
│ ├── levels/
│ │ ├── crypt.cpp
│ │ ├── crypt.h
│ │ ├── drlg_l1.cpp
│ │ ├── drlg_l1.h
│ │ ├── drlg_l2.cpp
│ │ ├── drlg_l2.h
│ │ ├── drlg_l3.cpp
│ │ ├── drlg_l3.h
│ │ ├── drlg_l4.cpp
│ │ ├── drlg_l4.h
│ │ ├── dun_tile.hpp
│ │ ├── gendung.cpp
│ │ ├── gendung.h
│ │ ├── gendung_defs.hpp
│ │ ├── reencode_dun_cels.cpp
│ │ ├── reencode_dun_cels.hpp
│ │ ├── setmaps.cpp
│ │ ├── setmaps.h
│ │ ├── themes.cpp
│ │ ├── themes.h
│ │ ├── tile_properties.cpp
│ │ ├── tile_properties.hpp
│ │ ├── town.cpp
│ │ ├── town.h
│ │ ├── trigs.cpp
│ │ └── trigs.h
│ ├── lighting.cpp
│ ├── lighting.h
│ ├── loadsave.cpp
│ ├── loadsave.h
│ ├── lua/
│ │ ├── autocomplete.cpp
│ │ ├── autocomplete.hpp
│ │ ├── lua_event.cpp
│ │ ├── lua_event.hpp
│ │ ├── lua_global.cpp
│ │ ├── lua_global.hpp
│ │ ├── metadoc.hpp
│ │ ├── modules/
│ │ │ ├── audio.cpp
│ │ │ ├── audio.hpp
│ │ │ ├── dev/
│ │ │ │ ├── display.cpp
│ │ │ │ ├── display.hpp
│ │ │ │ ├── items.cpp
│ │ │ │ ├── items.hpp
│ │ │ │ ├── level/
│ │ │ │ │ ├── map.cpp
│ │ │ │ │ ├── map.hpp
│ │ │ │ │ ├── warp.cpp
│ │ │ │ │ └── warp.hpp
│ │ │ │ ├── level.cpp
│ │ │ │ ├── level.hpp
│ │ │ │ ├── monsters.cpp
│ │ │ │ ├── monsters.hpp
│ │ │ │ ├── player/
│ │ │ │ │ ├── gold.cpp
│ │ │ │ │ ├── gold.hpp
│ │ │ │ │ ├── spells.cpp
│ │ │ │ │ ├── spells.hpp
│ │ │ │ │ ├── stats.cpp
│ │ │ │ │ └── stats.hpp
│ │ │ │ ├── player.cpp
│ │ │ │ ├── player.hpp
│ │ │ │ ├── quests.cpp
│ │ │ │ ├── quests.hpp
│ │ │ │ ├── search.cpp
│ │ │ │ ├── search.hpp
│ │ │ │ ├── towners.cpp
│ │ │ │ └── towners.hpp
│ │ │ ├── dev.cpp
│ │ │ ├── dev.hpp
│ │ │ ├── floatingnumbers.cpp
│ │ │ ├── floatingnumbers.hpp
│ │ │ ├── hellfire.cpp
│ │ │ ├── hellfire.hpp
│ │ │ ├── i18n.cpp
│ │ │ ├── i18n.hpp
│ │ │ ├── items.cpp
│ │ │ ├── items.hpp
│ │ │ ├── log.cpp
│ │ │ ├── log.hpp
│ │ │ ├── monsters.cpp
│ │ │ ├── monsters.hpp
│ │ │ ├── player.cpp
│ │ │ ├── player.hpp
│ │ │ ├── render.cpp
│ │ │ ├── render.hpp
│ │ │ ├── system.cpp
│ │ │ ├── system.hpp
│ │ │ ├── towners.cpp
│ │ │ └── towners.hpp
│ │ ├── repl.cpp
│ │ └── repl.hpp
│ ├── main.cpp
│ ├── menu.cpp
│ ├── menu.h
│ ├── minitext.cpp
│ ├── minitext.h
│ ├── missiles.cpp
│ ├── missiles.h
│ ├── monster.cpp
│ ├── monster.h
│ ├── monsters/
│ │ ├── validation.cpp
│ │ └── validation.hpp
│ ├── movie.cpp
│ ├── movie.h
│ ├── mpq/
│ │ ├── mpq_common.cpp
│ │ ├── mpq_common.hpp
│ │ ├── mpq_reader.cpp
│ │ ├── mpq_reader.hpp
│ │ ├── mpq_sdl_rwops.cpp
│ │ ├── mpq_sdl_rwops.hpp
│ │ ├── mpq_writer.cpp
│ │ └── mpq_writer.hpp
│ ├── msg.cpp
│ ├── msg.h
│ ├── multi.cpp
│ ├── multi.h
│ ├── nthread.cpp
│ ├── nthread.h
│ ├── objects.cpp
│ ├── objects.h
│ ├── options.cpp
│ ├── options.h
│ ├── pack.cpp
│ ├── pack.h
│ ├── panels/
│ │ ├── charpanel.cpp
│ │ ├── charpanel.hpp
│ │ ├── console.cpp
│ │ ├── console.hpp
│ │ ├── info_box.cpp
│ │ ├── info_box.hpp
│ │ ├── mainpanel.cpp
│ │ ├── mainpanel.hpp
│ │ ├── partypanel.cpp
│ │ ├── partypanel.hpp
│ │ ├── spell_book.cpp
│ │ ├── spell_book.hpp
│ │ ├── spell_icons.cpp
│ │ ├── spell_icons.hpp
│ │ ├── spell_list.cpp
│ │ ├── spell_list.hpp
│ │ └── ui_panels.hpp
│ ├── pfile.cpp
│ ├── pfile.h
│ ├── platform/
│ │ ├── android/
│ │ │ ├── CMakeLists.txt
│ │ │ └── android.cpp
│ │ ├── ctr/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── asio/
│ │ │ │ ├── include/
│ │ │ │ │ ├── errno.h
│ │ │ │ │ ├── net/
│ │ │ │ │ │ └── if.h
│ │ │ │ │ ├── netdb.h
│ │ │ │ │ ├── netinet/
│ │ │ │ │ │ └── in.h
│ │ │ │ │ └── sys/
│ │ │ │ │ ├── ioctl.h
│ │ │ │ │ ├── poll.h
│ │ │ │ │ ├── socket.h
│ │ │ │ │ ├── uio.h
│ │ │ │ │ └── un.h
│ │ │ │ ├── net/
│ │ │ │ │ └── if.c
│ │ │ │ └── sys/
│ │ │ │ ├── socket.c
│ │ │ │ └── uio.c
│ │ │ ├── cfgu_service.hpp
│ │ │ ├── display.cpp
│ │ │ ├── display.hpp
│ │ │ ├── keyboard.cpp
│ │ │ ├── keyboard.h
│ │ │ ├── locale.cpp
│ │ │ ├── locale.hpp
│ │ │ ├── messagebox.cpp
│ │ │ ├── random.cpp
│ │ │ ├── random.hpp
│ │ │ ├── sockets.cpp
│ │ │ ├── sockets.hpp
│ │ │ ├── system.cpp
│ │ │ └── system.h
│ │ ├── ios/
│ │ │ ├── ios_paths.h
│ │ │ └── ios_paths.m
│ │ ├── locale.cpp
│ │ ├── locale.hpp
│ │ ├── macos_sdl1/
│ │ │ └── SDL_filesystem.m
│ │ ├── switch/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── asio/
│ │ │ │ ├── include/
│ │ │ │ │ ├── errno.h
│ │ │ │ │ ├── net/
│ │ │ │ │ │ └── if.h
│ │ │ │ │ ├── netinet/
│ │ │ │ │ │ └── in.h
│ │ │ │ │ └── sys/
│ │ │ │ │ ├── uio.h
│ │ │ │ │ └── un.h
│ │ │ │ ├── net/
│ │ │ │ │ └── if.c
│ │ │ │ ├── pause.c
│ │ │ │ └── sys/
│ │ │ │ └── signal.c
│ │ │ ├── docking.cpp
│ │ │ ├── docking.h
│ │ │ ├── keyboard.cpp
│ │ │ ├── keyboard.h
│ │ │ ├── network.cpp
│ │ │ ├── network.h
│ │ │ ├── random.cpp
│ │ │ ├── random.hpp
│ │ │ ├── romfs.cpp
│ │ │ └── romfs.hpp
│ │ └── vita/
│ │ ├── CMakeLists.txt
│ │ ├── keyboard.cpp
│ │ ├── keyboard.h
│ │ ├── network.cpp
│ │ ├── network.h
│ │ ├── random.cpp
│ │ ├── random.hpp
│ │ ├── touch.cpp
│ │ └── touch.h
│ ├── player.cpp
│ ├── player.h
│ ├── plrmsg.cpp
│ ├── plrmsg.h
│ ├── portal.cpp
│ ├── portal.h
│ ├── portals/
│ │ ├── validation.cpp
│ │ └── validation.hpp
│ ├── qol/
│ │ ├── autopickup.cpp
│ │ ├── autopickup.h
│ │ ├── chatlog.cpp
│ │ ├── chatlog.h
│ │ ├── floatingnumbers.cpp
│ │ ├── floatingnumbers.h
│ │ ├── itemlabels.cpp
│ │ ├── itemlabels.h
│ │ ├── monhealthbar.cpp
│ │ ├── monhealthbar.h
│ │ ├── stash.cpp
│ │ ├── stash.h
│ │ ├── xpbar.cpp
│ │ └── xpbar.h
│ ├── quests/
│ │ ├── validation.cpp
│ │ └── validation.hpp
│ ├── quests.cpp
│ ├── quests.h
│ ├── quick_messages.cpp
│ ├── quick_messages.hpp
│ ├── restrict.cpp
│ ├── restrict.h
│ ├── sha.cpp
│ ├── sha.h
│ ├── sound_effect_enums.h
│ ├── spells.cpp
│ ├── spells.h
│ ├── stores.cpp
│ ├── stores.h
│ ├── storm/
│ │ ├── storm_net.cpp
│ │ ├── storm_net.hpp
│ │ ├── storm_svid.cpp
│ │ └── storm_svid.h
│ ├── sync.cpp
│ ├── sync.h
│ ├── tables/
│ │ ├── itemdat.cpp
│ │ ├── itemdat.h
│ │ ├── misdat.cpp
│ │ ├── misdat.h
│ │ ├── monstdat.cpp
│ │ ├── monstdat.h
│ │ ├── objdat.cpp
│ │ ├── objdat.h
│ │ ├── playerdat.cpp
│ │ ├── playerdat.hpp
│ │ ├── spelldat.cpp
│ │ ├── spelldat.h
│ │ ├── textdat.cpp
│ │ ├── textdat.h
│ │ ├── townerdat.cpp
│ │ └── townerdat.hpp
│ ├── tmsg.cpp
│ ├── tmsg.h
│ ├── towners.cpp
│ ├── towners.h
│ ├── track.cpp
│ ├── track.h
│ ├── translation_dummy.cpp
│ ├── utils/
│ │ ├── algorithm/
│ │ │ └── container.hpp
│ │ ├── attributes.h
│ │ ├── aulib.hpp
│ │ ├── bitset2d.hpp
│ │ ├── cel_to_clx.cpp
│ │ ├── cel_to_clx.hpp
│ │ ├── cl2_to_clx.cpp
│ │ ├── cl2_to_clx.hpp
│ │ ├── clx_decode.hpp
│ │ ├── clx_encode.hpp
│ │ ├── console.cpp
│ │ ├── console.h
│ │ ├── display.cpp
│ │ ├── display.h
│ │ ├── endian_read.hpp
│ │ ├── endian_stream.hpp
│ │ ├── endian_swap.hpp
│ │ ├── endian_write.hpp
│ │ ├── enum_traits.h
│ │ ├── file_name_generator.hpp
│ │ ├── file_util.cpp
│ │ ├── file_util.h
│ │ ├── format_int.cpp
│ │ ├── format_int.hpp
│ │ ├── hp_mana_units.hpp
│ │ ├── ini.cpp
│ │ ├── ini.hpp
│ │ ├── intrusive_optional.hpp
│ │ ├── is_of.hpp
│ │ ├── language.cpp
│ │ ├── language.h
│ │ ├── log.hpp
│ │ ├── logged_fstream.cpp
│ │ ├── logged_fstream.hpp
│ │ ├── math.h
│ │ ├── palette_blending.cpp
│ │ ├── palette_blending.hpp
│ │ ├── palette_kd_tree.cpp
│ │ ├── palette_kd_tree.hpp
│ │ ├── parse_int.cpp
│ │ ├── parse_int.hpp
│ │ ├── paths.cpp
│ │ ├── paths.h
│ │ ├── pcx.hpp
│ │ ├── pcx_to_clx.cpp
│ │ ├── pcx_to_clx.hpp
│ │ ├── png.h
│ │ ├── pointer_value_union.hpp
│ │ ├── push_aulib_decoder.cpp
│ │ ├── push_aulib_decoder.h
│ │ ├── screen_reader.cpp
│ │ ├── screen_reader.hpp
│ │ ├── sdl2_backports.h
│ │ ├── sdl2_to_1_2_backports.cpp
│ │ ├── sdl2_to_1_2_backports.h
│ │ ├── sdl_bilinear_scale.cpp
│ │ ├── sdl_bilinear_scale.hpp
│ │ ├── sdl_compat.h
│ │ ├── sdl_geometry.h
│ │ ├── sdl_mutex.h
│ │ ├── sdl_ptrs.h
│ │ ├── sdl_thread.cpp
│ │ ├── sdl_thread.h
│ │ ├── sdl_wrap.h
│ │ ├── soundsample.cpp
│ │ ├── soundsample.h
│ │ ├── static_vector.hpp
│ │ ├── status_macros.hpp
│ │ ├── stdcompat/
│ │ │ ├── filesystem.hpp
│ │ │ └── shared_ptr_array.hpp
│ │ ├── str_case.cpp
│ │ ├── str_case.hpp
│ │ ├── str_cat.cpp
│ │ ├── str_cat.hpp
│ │ ├── str_split.hpp
│ │ ├── string_or_view.hpp
│ │ ├── string_view_hash.hpp
│ │ ├── stubs.h
│ │ ├── surface_to_clx.cpp
│ │ ├── surface_to_clx.hpp
│ │ ├── surface_to_pcx.cpp
│ │ ├── surface_to_pcx.hpp
│ │ ├── surface_to_png.cpp
│ │ ├── surface_to_png.hpp
│ │ ├── timer.cpp
│ │ ├── timer.hpp
│ │ ├── ui_fwd.h
│ │ ├── utf8.cpp
│ │ └── utf8.hpp
│ ├── vision.cpp
│ └── vision.hpp
├── Translations/
│ ├── be.po
│ ├── bg.po
│ ├── cs.po
│ ├── da.po
│ ├── de.po
│ ├── devilutionx.pot
│ ├── el.po
│ ├── es.po
│ ├── et.po
│ ├── fi.po
│ ├── fr.po
│ ├── glossary.md
│ ├── hr.po
│ ├── hu.po
│ ├── it.po
│ ├── ja.po
│ ├── ko.po
│ ├── pl.po
│ ├── pt_BR.po
│ ├── ro.po
│ ├── ru.po
│ ├── sv.po
│ ├── tr.po
│ ├── uk.po
│ ├── zh_CN.po
│ └── zh_TW.po
├── VERSION
├── android-project/
│ ├── .gitignore
│ ├── app/
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── org/
│ │ │ ├── diasurgical/
│ │ │ │ └── devilutionx/
│ │ │ │ ├── DataActivity.java
│ │ │ │ ├── DevilutionXSDLActivity.java
│ │ │ │ ├── ExternalFilesManager.java
│ │ │ │ └── ImportActivity.java
│ │ │ └── libsdl/
│ │ │ └── app/
│ │ │ ├── HIDDevice.java
│ │ │ ├── HIDDeviceBLESteamController.java
│ │ │ ├── HIDDeviceManager.java
│ │ │ ├── HIDDeviceUSB.java
│ │ │ ├── SDL.java
│ │ │ ├── SDLActivity.java
│ │ │ ├── SDLAudioManager.java
│ │ │ ├── SDLControllerManager.java
│ │ │ └── SDLSurface.java
│ │ └── res/
│ │ ├── drawable/
│ │ │ └── gamepad.xml
│ │ ├── layout/
│ │ │ └── activity_data.xml
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ └── themes.xml
│ │ ├── values-be/
│ │ │ └── strings.xml
│ │ ├── values-bg/
│ │ │ └── strings.xml
│ │ ├── values-cs/
│ │ │ └── strings.xml
│ │ ├── values-da/
│ │ │ └── strings.xml
│ │ ├── values-de/
│ │ │ └── strings.xml
│ │ ├── values-es/
│ │ │ └── strings.xml
│ │ ├── values-fi/
│ │ │ └── strings.xml
│ │ ├── values-fr/
│ │ │ └── strings.xml
│ │ ├── values-hr/
│ │ │ └── strings.xml
│ │ ├── values-hu/
│ │ │ └── strings.xml
│ │ ├── values-it/
│ │ │ └── strings.xml
│ │ ├── values-ko-rKR/
│ │ │ └── strings.xml
│ │ ├── values-pl/
│ │ │ └── strings.xml
│ │ ├── values-pt-rBR/
│ │ │ └── strings.xml
│ │ ├── values-ro-rRO/
│ │ │ └── strings.xml
│ │ ├── values-ru/
│ │ │ └── strings.xml
│ │ ├── values-sv/
│ │ │ └── strings.xml
│ │ ├── values-tr/
│ │ │ └── strings.xml
│ │ ├── values-uk/
│ │ │ └── strings.xml
│ │ ├── values-zh-rCN/
│ │ │ └── strings.xml
│ │ ├── values-zh-rTW/
│ │ │ └── strings.xml
│ │ └── xml/
│ │ ├── backup_descriptor.xml
│ │ ├── backup_rules.xml
│ │ └── shortcuts.xml
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle
├── assets/
│ ├── ASSETS_VERSION
│ ├── arena/
│ │ ├── church.dun
│ │ ├── circle_of_death.dun
│ │ └── hell.dun
│ ├── data/
│ │ ├── boxleftend.clx
│ │ ├── boxmiddle.clx
│ │ ├── boxrightend.clx
│ │ ├── charbg.clx
│ │ ├── dirtybuc.clx
│ │ ├── dirtybucp.clx
│ │ ├── health.clx
│ │ ├── healthbox.clx
│ │ ├── hintbox.clx
│ │ ├── hintboxbackground.clx
│ │ ├── hinticons.clx
│ │ ├── inv/
│ │ │ └── objcurs-widths.txt
│ │ ├── monstertags.clx
│ │ ├── panel8buc.clx
│ │ ├── panel8bucp.clx
│ │ ├── resistance.clx
│ │ ├── stash.clx
│ │ ├── stashnavbtns.clx
│ │ ├── talkbutton.clx
│ │ └── xpbar.clx
│ ├── fonts/
│ │ ├── 12-00.clx
│ │ ├── 12-01.clx
│ │ ├── 12-02.clx
│ │ ├── 12-03.clx
│ │ ├── 12-04.clx
│ │ ├── 12-05.clx
│ │ ├── 12-1f1.clx
│ │ ├── 12-1f3.clx
│ │ ├── 12-1f4.clx
│ │ ├── 12-1f5.clx
│ │ ├── 12-1f6.clx
│ │ ├── 12-1f9.clx
│ │ ├── 12-20.clx
│ │ ├── 12-26.clx
│ │ ├── 12-e0.clx
│ │ ├── 22-00.clx
│ │ ├── 22-01.clx
│ │ ├── 22-02.clx
│ │ ├── 22-03.clx
│ │ ├── 22-04.clx
│ │ ├── 22-05.clx
│ │ ├── 22-20.clx
│ │ ├── 24-00.clx
│ │ ├── 24-01.clx
│ │ ├── 24-02.clx
│ │ ├── 24-03.clx
│ │ ├── 24-04.clx
│ │ ├── 24-05.clx
│ │ ├── 24-1f1.clx
│ │ ├── 24-1f3.clx
│ │ ├── 24-1f4.clx
│ │ ├── 24-1f5.clx
│ │ ├── 24-1f6.clx
│ │ ├── 24-1f9.clx
│ │ ├── 24-20.clx
│ │ ├── 24-26.clx
│ │ ├── 24-e0.clx
│ │ ├── 30-00.clx
│ │ ├── 30-01.clx
│ │ ├── 30-02.clx
│ │ ├── 30-03.clx
│ │ ├── 30-04.clx
│ │ ├── 30-05.clx
│ │ ├── 30-20.clx
│ │ ├── 30-e0.clx
│ │ ├── 42-00.clx
│ │ ├── 42-01.clx
│ │ ├── 42-02.clx
│ │ ├── 42-03.clx
│ │ ├── 42-04.clx
│ │ ├── 42-05.clx
│ │ ├── 42-20.clx
│ │ ├── 46-00.clx
│ │ ├── 46-01.clx
│ │ ├── 46-02.clx
│ │ ├── 46-03.clx
│ │ ├── 46-04.clx
│ │ ├── 46-05.clx
│ │ ├── 46-20.clx
│ │ ├── black.trn
│ │ ├── blue.trn
│ │ ├── buttonface.trn
│ │ ├── buttonpushed.trn
│ │ ├── gamedialogred.trn
│ │ ├── gamedialogwhite.trn
│ │ ├── gamedialogyellow.trn
│ │ ├── goldui.trn
│ │ ├── golduis.trn
│ │ ├── grayui.trn
│ │ ├── grayuis.trn
│ │ ├── orange.trn
│ │ ├── red.trn
│ │ ├── tr/
│ │ │ ├── 12-00.clx
│ │ │ ├── 24-00.clx
│ │ │ ├── 30-00.clx
│ │ │ ├── 42-00.clx
│ │ │ └── 46-00.clx
│ │ ├── white.trn
│ │ ├── whitegold.trn
│ │ └── yellow.trn
│ ├── gendata/
│ │ ├── cut2w.clx
│ │ ├── cut3w.clx
│ │ ├── cut4w.clx
│ │ ├── cutgatew.clx
│ │ ├── cutl1dw.clx
│ │ ├── cutportlw.clx
│ │ ├── cutportrw.clx
│ │ ├── cutstartw.clx
│ │ ├── cutttw.clx
│ │ └── pause.trn
│ ├── levels/
│ │ ├── l1data/
│ │ │ └── sklkngt.dun
│ │ ├── l2data/
│ │ │ └── bonechat.dun
│ │ └── towndata/
│ │ ├── automap.amp
│ │ └── automap.dun
│ ├── lua/
│ │ ├── devilutionx/
│ │ │ └── events.lua
│ │ ├── inspect.lua
│ │ ├── mods/
│ │ │ ├── Floating Numbers - Damage/
│ │ │ │ └── init.lua
│ │ │ ├── Floating Numbers - XP/
│ │ │ │ └── init.lua
│ │ │ ├── adria_refills_mana/
│ │ │ │ └── init.lua
│ │ │ └── clock/
│ │ │ └── init.lua
│ │ └── repl_prelude.lua
│ ├── lua_internal/
│ │ └── get_lua_function_signature.lua
│ ├── plrgfx/
│ │ └── warrior/
│ │ └── whu/
│ │ ├── whufm.trn
│ │ ├── whulm.trn
│ │ └── whuqm.trn
│ ├── txtdata/
│ │ ├── Experience.tsv
│ │ ├── Readme.md
│ │ ├── classes/
│ │ │ ├── README.md
│ │ │ ├── barbarian/
│ │ │ │ ├── animations.tsv
│ │ │ │ ├── attributes.tsv
│ │ │ │ ├── sounds.tsv
│ │ │ │ ├── sprites.tsv
│ │ │ │ └── starting_loadout.tsv
│ │ │ ├── bard/
│ │ │ │ ├── animations.tsv
│ │ │ │ ├── attributes.tsv
│ │ │ │ ├── sounds.tsv
│ │ │ │ ├── sprites.tsv
│ │ │ │ └── starting_loadout.tsv
│ │ │ ├── classdat.tsv
│ │ │ ├── monk/
│ │ │ │ ├── animations.tsv
│ │ │ │ ├── attributes.tsv
│ │ │ │ ├── sounds.tsv
│ │ │ │ ├── sprites.tsv
│ │ │ │ └── starting_loadout.tsv
│ │ │ ├── rogue/
│ │ │ │ ├── animations.tsv
│ │ │ │ ├── attributes.tsv
│ │ │ │ ├── sounds.tsv
│ │ │ │ ├── sprites.tsv
│ │ │ │ └── starting_loadout.tsv
│ │ │ ├── sorcerer/
│ │ │ │ ├── animations.tsv
│ │ │ │ ├── attributes.tsv
│ │ │ │ ├── sounds.tsv
│ │ │ │ ├── sprites.tsv
│ │ │ │ └── starting_loadout.tsv
│ │ │ └── warrior/
│ │ │ ├── animations.tsv
│ │ │ ├── attributes.tsv
│ │ │ ├── sounds.tsv
│ │ │ ├── sprites.tsv
│ │ │ └── starting_loadout.tsv
│ │ ├── items/
│ │ │ ├── item_prefixes.tsv
│ │ │ ├── item_suffixes.tsv
│ │ │ ├── itemdat.tsv
│ │ │ └── unique_itemdat.tsv
│ │ ├── missiles/
│ │ │ ├── misdat.tsv
│ │ │ └── missile_sprites.tsv
│ │ ├── monsters/
│ │ │ ├── monstdat.tsv
│ │ │ └── unique_monstdat.tsv
│ │ ├── objects/
│ │ │ └── objdat.tsv
│ │ ├── quests/
│ │ │ └── questdat.tsv
│ │ ├── sound/
│ │ │ ├── effects-unused.tsv
│ │ │ └── effects.tsv
│ │ ├── spells/
│ │ │ └── spelldat.tsv
│ │ ├── text/
│ │ │ ├── textdat-unused.tsv
│ │ │ └── textdat.tsv
│ │ └── towners/
│ │ ├── quest_dialog.tsv
│ │ └── towners.tsv
│ └── ui_art/
│ ├── creditsw.clx
│ ├── diablo.pal
│ ├── dvl_but_sml.clx
│ ├── dvl_lrpopup.clx
│ ├── hellfire.pal
│ └── mainmenuw.clx
├── codecov.yml
├── docs/
│ ├── BACKGROUND.md
│ ├── CHANGELOG.md
│ ├── CONTRIBUTING.md
│ ├── TODO.md
│ ├── benchmarking.md
│ ├── building.md
│ ├── debug.md
│ ├── github-codespaces.md
│ ├── installing.md
│ ├── manual/
│ │ └── platforms/
│ │ ├── 3ds.md
│ │ ├── gkd350h.md
│ │ ├── retrofw.md
│ │ ├── rg350.md
│ │ ├── rg99.md
│ │ ├── switch.md
│ │ ├── vita.md
│ │ ├── xbox-one.md
│ │ └── xbox.md
│ ├── privacy.md
│ └── profiling-linux.md
├── doxygen.config
├── mods/
│ └── Hellfire/
│ ├── data/
│ │ └── inv/
│ │ └── objcurs2-widths.txt
│ ├── lua/
│ │ └── mods/
│ │ └── Hellfire/
│ │ └── init.lua
│ ├── nlevels/
│ │ ├── cutl5w.clx
│ │ ├── cutl6w.clx
│ │ └── l5data/
│ │ ├── cornerstone.dun
│ │ └── uberroom.dun
│ ├── txtdata/
│ │ ├── classes/
│ │ │ ├── classdat.tsv
│ │ │ └── sorcerer/
│ │ │ └── starting_loadout.tsv
│ │ ├── items/
│ │ │ ├── item_prefixes.tsv
│ │ │ ├── item_suffixes.tsv
│ │ │ └── unique_itemdat.tsv
│ │ ├── missiles/
│ │ │ ├── misdat.tsv
│ │ │ └── missile_sprites.tsv
│ │ ├── monsters/
│ │ │ └── monstdat.tsv
│ │ ├── sound/
│ │ │ ├── effects-unused.tsv
│ │ │ └── effects.tsv
│ │ ├── spells/
│ │ │ └── spelldat.tsv
│ │ └── towners/
│ │ ├── quest_dialog.tsv
│ │ └── towners.tsv
│ └── ui_art/
│ ├── diablo.pal
│ ├── hf_titlew.clx
│ ├── mainmenuw.clx
│ └── supportw.clx
├── test/
│ ├── .clang-format
│ ├── Fixtures.cmake
│ ├── animationinfo_test.cpp
│ ├── app_fatal_for_testing.cpp
│ ├── appfat_test.cpp
│ ├── automap_test.cpp
│ ├── clx_render_benchmark.cpp
│ ├── codec_test.cpp
│ ├── crawl_benchmark.cpp
│ ├── crawl_test.cpp
│ ├── cursor_test.cpp
│ ├── data_file_test.cpp
│ ├── dead_test.cpp
│ ├── diablo_test.cpp
│ ├── drlg_common_test.cpp
│ ├── drlg_l1_test.cpp
│ ├── drlg_l2_test.cpp
│ ├── drlg_l3_test.cpp
│ ├── drlg_l4_test.cpp
│ ├── drlg_test.hpp
│ ├── dun_render_benchmark.cpp
│ ├── effects_test.cpp
│ ├── file_util_test.cpp
│ ├── fixtures/
│ │ ├── diablo/
│ │ │ ├── 1-2588.dun
│ │ │ ├── 1-743271966.dun
│ │ │ ├── 10-1630062353.dun
│ │ │ ├── 10-879635115.dun
│ │ │ ├── 11-384626536.dun
│ │ │ ├── 12-2104541047.dun
│ │ │ ├── 13-428074402.dun
│ │ │ ├── 13-594689775.dun
│ │ │ ├── 14-717625719.dun
│ │ │ ├── 14-815743776.dun
│ │ │ ├── 15-1256511996.dun
│ │ │ ├── 15-1583642716-changed.dun
│ │ │ ├── 15-1583642716.dun
│ │ │ ├── 16-741281013.dun
│ │ │ ├── 2-1383137027.dun
│ │ │ ├── 3-844660068.dun
│ │ │ ├── 4-609325643.dun
│ │ │ ├── 4-902156014.dun
│ │ │ ├── 5-1677631846.dun
│ │ │ ├── 5-68685319.dun
│ │ │ ├── 6-1824554527.dun
│ │ │ ├── 6-2033265779.dun
│ │ │ ├── 6-2034738122.dun
│ │ │ ├── 7-1607627156.dun
│ │ │ ├── 7-680552750.dun
│ │ │ ├── 8-1999936419.dun
│ │ │ └── 9-262005438.dun
│ │ ├── hellfire/
│ │ │ ├── 1-401921334.dun
│ │ │ ├── 1-536340718.dun
│ │ │ ├── 17-19770182.dun
│ │ │ ├── 18-1522546307.dun
│ │ │ ├── 19-125121312.dun
│ │ │ ├── 2-1180526547.dun
│ │ │ ├── 2-128964898.dun
│ │ │ ├── 20-1511478689.dun
│ │ │ ├── 21-2122696790.dun
│ │ │ ├── 22-1191662129.dun
│ │ │ ├── 23-97055268.dun
│ │ │ ├── 24-1324803725.dun
│ │ │ ├── 3-1369955278.dun
│ │ │ ├── 3-1512491184.dun
│ │ │ ├── 3-1799396623.dun
│ │ │ ├── 4-1190318991.dun
│ │ │ └── 4-1924296259.dun
│ │ ├── levels/
│ │ │ ├── l1data/
│ │ │ │ ├── banner1.dun
│ │ │ │ ├── banner2.dun
│ │ │ │ ├── rnd6.dun
│ │ │ │ └── skngdo.dun
│ │ │ ├── l2data/
│ │ │ │ ├── blind1.dun
│ │ │ │ ├── blood1.dun
│ │ │ │ ├── blood2.dun
│ │ │ │ ├── bonestr1.dun
│ │ │ │ └── bonestr2.dun
│ │ │ ├── l3data/
│ │ │ │ └── anvil.dun
│ │ │ └── l4data/
│ │ │ ├── diab1.dun
│ │ │ ├── diab2a.dun
│ │ │ ├── diab2b.dun
│ │ │ ├── diab3a.dun
│ │ │ ├── diab3b.dun
│ │ │ ├── diab4a.dun
│ │ │ ├── diab4b.dun
│ │ │ ├── vile1.dun
│ │ │ ├── warlord.dun
│ │ │ └── warlord2.dun
│ │ ├── light_render_benchmark/
│ │ │ └── dLight.dmp
│ │ ├── memory_map/
│ │ │ ├── additionalMissiles.txt
│ │ │ ├── game.txt
│ │ │ ├── hero.txt
│ │ │ ├── item.txt
│ │ │ ├── itemPack.txt
│ │ │ ├── level.txt
│ │ │ ├── levelSeed.txt
│ │ │ ├── lightning.txt
│ │ │ ├── missile.txt
│ │ │ ├── monster.txt
│ │ │ ├── object.txt
│ │ │ ├── player.txt
│ │ │ ├── portal.txt
│ │ │ └── quest.txt
│ │ ├── timedemo/
│ │ │ └── WarriorLevel1to2/
│ │ │ ├── demo_0.dmo
│ │ │ ├── demo_0_reference_spawn_0.sv
│ │ │ └── spawn_0.sv
│ │ └── txtdata/
│ │ ├── cr.tsv
│ │ ├── crlf.tsv
│ │ ├── empty.tsv
│ │ ├── empty_with_utf8_bom.tsv
│ │ ├── lf.tsv
│ │ ├── lf_no_trail.tsv
│ │ ├── sample.tsv
│ │ └── utf8_bom.tsv
│ ├── format_int_test.cpp
│ ├── ini_test.cpp
│ ├── inv_test.cpp
│ ├── items_test.cpp
│ ├── language_for_testing.cpp
│ ├── light_render_benchmark.cpp
│ ├── main.cpp
│ ├── math_test.cpp
│ ├── missiles_test.cpp
│ ├── multi_logging_test.cpp
│ ├── pack_test.cpp
│ ├── palette_blending_benchmark.cpp
│ ├── palette_blending_test.cpp
│ ├── parse_int_test.cpp
│ ├── path_benchmark.cpp
│ ├── path_test.cpp
│ ├── player_test.cpp
│ ├── player_test.h
│ ├── quests_test.cpp
│ ├── random_test.cpp
│ ├── rectangle_test.cpp
│ ├── scrollrt_test.cpp
│ ├── static_vector_test.cpp
│ ├── stores_test.cpp
│ ├── str_cat_test.cpp
│ ├── text_render_integration_test.cpp
│ ├── tile_properties_test.cpp
│ ├── timedemo_test.cpp
│ ├── townerdat_test.cpp
│ ├── utf8_test.cpp
│ ├── vendor_test.cpp
│ ├── vision_test.cpp
│ └── writehero_test.cpp
├── tools/
│ ├── Dockerfile.s390x
│ ├── build_and_install_smpq.ps1
│ ├── build_and_install_smpq.sh
│ ├── build_and_run_benchmark.py
│ ├── build_pgo.sh
│ ├── extract_translation_data.py
│ ├── gdb/
│ │ ├── README.md
│ │ └── devilution_gdb/
│ │ ├── __init__.py
│ │ └── pretty_printers/
│ │ └── utils/
│ │ └── static_vector_pp.py
│ ├── linux_reduced_cpu_variance_run.sh
│ ├── lldb/
│ │ ├── README.md
│ │ └── devilution_lldb/
│ │ ├── __init__.py
│ │ └── pretty_printers/
│ │ └── utils/
│ │ └── static_vector_pp.py
│ ├── make_src_dist.py
│ ├── measure_timedemo_performance.py
│ ├── run_big_endian_tests.sh
│ ├── segmenter/
│ │ ├── README.md
│ │ ├── requirements.txt
│ │ ├── segment_all.py
│ │ ├── segment_ja.py
│ │ ├── segment_zh.py
│ │ └── segmenter_lib.py
│ ├── update_bundled_assets.sh
│ ├── update_sdl_android_project.sh
│ ├── update_translations_pot.py
│ └── validate_translations.py
├── uwp-project/
│ ├── Package.appxmanifest
│ ├── Package.appxmanifest.template
│ ├── devilutionX_TemporaryKey.pfx
│ ├── devilutionx.sln
│ ├── devilutionx.vcxproj
│ └── src/
│ └── SDL_winrt_main_NonXAML.cpp
└── vcpkg.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .devcontainer/Dockerfile
================================================
ARG VARIANT=debian-12
FROM mcr.microsoft.com/devcontainers/base:${VARIANT}
USER root
# Install APT packages
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install tar curl zip unzip bash-completion build-essential ripgrep htop \
ninja-build ccache g++ mold gdb clang-format clang-tidy \
rpm pkg-config cmake git gettext libsdl2-dev libsdl2-image-dev libsodium-dev \
libpng-dev libbz2-dev libfmt-dev libgtest-dev libgmock-dev libbenchmark-dev zsh \
qtbase5-dev qt6-base-dev ristretto \
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*
RUN --mount=type=bind,source=tools/build_and_install_smpq.sh,target=/tmp/build_and_install_smpq.sh sh /tmp/build_and_install_smpq.sh
# Install devilutionx-graphics-tools
RUN git clone https://github.com/diasurgical/devilutionx-graphics-tools.git /tmp/devilutionx-graphics-tools && \
cd /tmp/devilutionx-graphics-tools && \
cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF && \
cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \
cmake --install build-rel --component Binaries && \
rm -rf /tmp/devilutionx-graphics-tools
# Install devilutionx-mpq-tools
RUN git clone https://github.com/diasurgical/devilutionx-mpq-tools.git /tmp/devilutionx-mpq-tools && \
cd /tmp/devilutionx-mpq-tools && \
cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF && \
cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \
cmake --install build-rel && \
rm -rf /tmp/devilutionx-mpq-tools
# Install d1-graphics-tool
RUN git clone https://github.com/diasurgical/d1-graphics-tool.git /tmp/d1-graphics-tool && \
cd /tmp/d1-graphics-tool && \
cmake -S. -Bbuild-rel -G Ninja -DCMAKE_BUILD_TYPE=Release && \
cmake --build build-rel -j $(getconf _NPROCESSORS_ONLN) && \
cmake --install build-rel && \
rm -rf /tmp/d1-graphics-tool
# Download spawn.mpq and fonts.mpq
RUN curl --create-dirs -O -L --output-dir /usr/local/share/diasurgical/devilutionx/ \
https://github.com/diasurgical/devilutionx-assets/releases/latest/download/spawn.mpq && \
curl --create-dirs -O -L --output-dir /usr/local/share/diasurgical/devilutionx/ \
https://github.com/diasurgical/devilutionx-assets/releases/latest/download/fonts.mpq && \
chown -R vscode: /usr/local/share/diasurgical/
# Desktop environment configuration
COPY .devcontainer/fluxbox /home/vscode/.fluxbox/
================================================
FILE: .devcontainer/devcontainer.json
================================================
{
"build": {
"dockerfile": "Dockerfile",
"context": ".."
},
"customizations": {
"vscode": {
"extensions": [
"github.vscode-github-actions",
"ms-vscode.cmake-tools"
]
}
},
"features": {
// https://github.com/devcontainers/features/tree/main/src/desktop-lite
"ghcr.io/devcontainers/features/desktop-lite:1": {
"webPort": 6080,
"password": "vscode"
},
"ghcr.io/devcontainers-contrib/features/zsh-plugins:0": {},
"ghcr.io/stuartleeks/dev-container-features/shell-history:0": {}
},
"forwardPorts": [
6080
],
"portsAttributes": {
"6080": {
"label": "desktop"
}
}
}
================================================
FILE: .devcontainer/fluxbox/apps
================================================
[transient] (role=GtkFileChooserDialog)
[Dimensions] {70% 70%}
[Position] (CENTER) {0 0}
[end]
[app] (name=AppRun) (class=tiled)
[Fullscreen] {yes}
[end]
================================================
FILE: .devcontainer/fluxbox/menu
================================================
[begin] ( Application Menu )
[exec] (File Manager) { nautilus /workspaces/devilutionX } </usr/share/icons/gnome/32x32/apps/file-manager.png>
[exec] (D1 Graphics Tool) { D1GraphicsTool } <>
[exec] (Text Editor) { mousepad } <>
[exec] (Terminal) { tilix -w ~ -e $(readlink -f /proc/$$/exe) -il } <>
[exec] (Web Browser) { x-www-browser --disable-dev-shm-usage } <>
[submenu] (System) {}
[exec] (Set Resolution) { tilix -t "Set Resolution" -e bash /usr/local/bin/set-resolution } <>
[exec] (Edit Application Menu) { mousepad ~/.fluxbox/menu } <>
[exec] (Passwords and Keys) { seahorse } <>
[exec] (Top Processes) { tilix -t "Top" -e htop } <>
[exec] (Disk Utilization) { tilix -t "Disk Utilization" -e ncdu / } <>
[exec] (Editres) {editres} <>
[exec] (Xfontsel) {xfontsel} <>
[exec] (Xkill) {xkill} <>
[exec] (Xrefresh) {xrefresh} <>
[end]
[config] (Configuration)
[workspaces] (Workspaces)
[end]
================================================
FILE: .editorconfig
================================================
root = true
[*]
indent_style = tab
end_of_line = crlf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{c++,cc,cpp,cppm,cxx,h,h++,hh,hpp,hxx,inl,ipp,ixx,tlh,tli}]
# Visual C++ Code Style settings
cpp_generate_documentation_comments = doxygen_slash_star
[*.java]
end_of_line = lf
[*.pot]
end_of_line = lf
[*.po]
end_of_line = lf
[*.lua]
indent_style = space
indent_size = 2
end_of_line = lf
[*.py]
indent_style = space
indent_size = 4
end_of_line = lf
[*.rb]
end_of_line = lf
[*.yml]
indent_style = space
end_of_line = lf
[*.sh]
end_of_line = lf
[*.xml]
end_of_line = lf
[.clang-format]
end_of_line = lf
[.gitignore]
end_of_line = lf
[*.cmake]
indent_style = space
indent_size = 2
[*.desktop]
end_of_line = lf
[*.md]
indent_style = space
indent_size = 2
end_of_line = lf
[*.txt]
end_of_line = crlf
[*.tsv]
trim_trailing_whitespace = false
[*.plist]
end_of_line = lf
[AppRun]
end_of_line = lf
[{CMakeLists.txt,CMakeSettings.json}]
indent_style = space
indent_size = 2
end_of_line = crlf
[control]
end_of_line = lf
[devilutionx.spec]
end_of_line = lf
[Dockerfile]
end_of_line = lf
[ASSETS_VERSION]
end_of_line = lf
================================================
FILE: .gdbinit
================================================
source tools/gdb/devilution_gdb/__init__.py
================================================
FILE: .gitattributes
================================================
# Do not let git change line endings.
* -text
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug report
description: Create a report to help us improve
title: "[Issue Report]: "
labels: ["issue report"]
body:
- type: dropdown
id: operating-system
attributes:
label: Operating System
options:
- Windows x64
- Windows x86
- Linux x64
- Linux x86
- Mac
- Android
- iOS
- Xbox One
- PlayStation 4
- Nintendo Switch
- PlayStation Vita
- Nintendo 3DS
- Other (please specify)
validations:
required: true
- type: dropdown
id: version
attributes:
label: DevilutionX version
options:
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.1
- 1.1.0
- Custom build (please specify commit ID)
- Other (please specify version number)
validations:
required: true
- type: textarea
id: description
attributes:
label: Describe
placeholder: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: To Reproduce
description: Steps to reproduce the behavior
placeholder: |
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error
validations:
required: true
- type: input
id: expected-behavior
attributes:
label: Expected Behavior
placeholder: A clear and concise description of what you expected to happen.
- type: textarea
id: additional-context
attributes:
label: Additional context
placeholder: Any other context about the problem here (screenshots, videos, code blocks, etc.).
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Request
description: Request a feature or improvement.
title: "[Feature Request]: "
labels: ["enhancement"]
body:
- type: dropdown
id: feature-type
attributes:
label: Feature Type
options:
- Quality of Life
- Touch Controls
- Gamepad Controls
- Other (please specify)
validations:
required: true
- type: textarea
id: description
attributes:
label: Describe
placeholder: A clear and concise description of the desired feature/change.
validations:
required: true
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: github-actions
directory: '/'
schedule:
interval: weekly
================================================
FILE: .github/workflows/3ds.yml
================================================
---
name: Nintendo 3DS
on: # yamllint disable-line rule:truthy
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
container: devkitpro/devkitarm:latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install dependencies
run: |
apt-get update && apt-get install -y --no-install-recommends --no-install-suggests \
ffmpeg
- name: Get external dependencies
run: |
wget https://github.com/diasurgical/bannertool/releases/download/1.2.0/bannertool.zip
unzip -j "bannertool.zip" "linux-x86_64/bannertool" -d "/opt/devkitpro/tools/bin"
wget https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.18/makerom-v0.18-ubuntu_x86_64.zip
unzip "makerom-v0.18-ubuntu_x86_64.zip" "makerom" -d "/opt/devkitpro/tools/bin"
chmod a+x /opt/devkitpro/tools/bin/makerom
- name: Configure CMake
run: |
cmake \
-S . \
-B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake
- name: Build DevilutionX
run: cmake --build build
- name: Upload 3dsx Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx.3dsx
path: ./build/devilutionx.3dsx
- name: Upload cia Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx.cia
path: ./build/devilutionx.cia
- name: Update Release 3dsx
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
asset_name: devilutionx-3ds.3dsx
file: ./build/devilutionx.3dsx
overwrite: true
- name: Update Release cia
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
asset_name: devilutionx-3ds.cia
file: ./build/devilutionx.cia
overwrite: true
================================================
FILE: .github/workflows/Android.yml
================================================
name: Android
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install gettext
run: sudo apt-get update && sudo apt-get install -y gettext
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'adopt'
cache: gradle
- name: Install CMake
run: |
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "cmake;3.31.0"
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: android-project/app/.cxx
key: ${{ github.workflow }}-v5-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v5-
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: cd android-project && ./gradlew assembleDebug
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-debug.apk
path: android-project/app/build/outputs/apk/debug/app-debug.apk
- name: Clean up artifacts
run: rm -rf android-project/app/build/outputs
================================================
FILE: .github/workflows/Linux_aarch64.yml
================================================
name: Linux AArch64 (aarch64-linux-gnu)
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
# Installs dependencies, including arm64 libraries (runs `sudo apt-get update` as part of it)
- name: Install dependencies
run: Packaging/nix/debian-cross-aarch64-prep.sh
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v8-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v8-
- name: Build
working-directory: ${{github.workspace}}
shell: bash
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
# We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_LIBSODIUM=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_BZIP2=OFF because Fedora and Debian do not agree on how to link it.
run: |
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/aarch64-linux-gnu.toolchain.cmake \
-DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON -DDEVILUTIONX_SYSTEM_LIBFMT=OFF \
-DDEVILUTIONX_SYSTEM_LIBSODIUM=OFF -DDEVILUTIONX_SYSTEM_BZIP2=OFF && \
cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package
- name: Package
run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-aarch64-linux-gnu.tar.xz
# AppImage cross-packaging is not implemented yet.
# - name: Package AppImage
# run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-aarch64-linux-gnu.appimage
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-aarch64-linux-gnu.tar.xz
path: devilutionx-aarch64-linux-gnu.tar.xz
# AppImage cross-packaging is not implemented yet.
# - name: Upload AppImage
# if: ${{ !env.ACT }}
# uses: actions/upload-artifact@v7
# with:
# name: devilutionx-aarch64-linux-gnu.appimage
# path: devilutionx-aarch64-linux-gnu.appimage
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-aarch64-linux-gnu.*
file_glob: true
overwrite: true
- name: Clean up artifacts
run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz
================================================
FILE: .github/workflows/Linux_x86.yml
================================================
name: Linux x86 (i386-linux-gnu)
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
# Installs dependencies, including x86 libraries (runs `sudo apt-get update` as part of it)
- name: Install dependencies
run: Packaging/nix/debian-cross-i386-prep.sh
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v7-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v7-
- name: Build
working-directory: ${{github.workspace}}
shell: bash
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
# We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_LIBSODIUM=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_BZIP2=OFF because Fedora and Debian do not agree on how to link it.
run: |
cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/linux_i386.toolchain.cmake \
-DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON \
-DBUILD_TESTING=OFF -DDEVILUTIONX_SYSTEM_LIBFMT=OFF -DDEVILUTIONX_SYSTEM_LIBSODIUM=OFF \
-DDEVILUTIONX_SYSTEM_BZIP2=OFF && \
cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package
- name: Package
run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-i386-linux-gnu.tar.xz
# AppImage cross-packaging is not implemented yet.
# - name: Package AppImage
# run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-i386-linux-gnu.appimage
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-i386-linux-gnu.tar.xz
path: devilutionx-i386-linux-gnu.tar.xz
# AppImage cross-packaging is not implemented yet.
# - name: Upload AppImage
# if: ${{ !env.ACT }}
# uses: actions/upload-artifact@v7
# with:
# name: devilutionx-i386-linux-gnu.appimage
# path: devilutionx-i386-linux-gnu.appimage
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-i386-linux-gnu.*
file_glob: true
overwrite: true
- name: Clean up artifacts
run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz
================================================
FILE: .github/workflows/Linux_x86_64.yml
================================================
name: Linux x86_64 (x86_64-linux-gnu)
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
# Installs dependencies and runs `sudo apt-get update` as part of it.
- name: Install dependencies
run: Packaging/nix/debian-host-prep.sh
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v7-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v7-
- name: Build
working-directory: ${{github.workspace}}
shell: bash
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
# We set DEVILUTIONX_SYSTEM_LIBFMT=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_LIBSODIUM=OFF because its soversion changes frequently.
# We set DEVILUTIONX_SYSTEM_BZIP2=OFF because Fedora and Debian do not agree on how to link it.
run: |
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX=/usr -DCPACK=ON \
-DDISCORD_INTEGRATION=ON -DBUILD_TESTING=OFF -DDEVILUTIONX_SYSTEM_LIBFMT=OFF \
-DDEVILUTIONX_SYSTEM_LIBSODIUM=OFF -DDEVILUTIONX_SYSTEM_BZIP2=OFF && \
cmake --build build -j $(getconf _NPROCESSORS_ONLN) --target package
- name: Package
run: Packaging/nix/LinuxReleasePackaging.sh && mv devilutionx.tar.xz devilutionx-x86_64-linux-gnu.tar.xz
- name: Package AppImage
run: Packaging/nix/AppImage.sh && mv devilutionx.appimage devilutionx-x86_64-linux-gnu.appimage
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-x86_64-linux-gnu.tar.xz
path: devilutionx-x86_64-linux-gnu.tar.xz
- name: Upload AppImage
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-x86_64-linux-gnu.appimage
path: devilutionx-x86_64-linux-gnu.appimage
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-x86_64-linux-gnu.*
file_glob: true
overwrite: true
- name: Clean up artifacts
run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz
================================================
FILE: .github/workflows/Linux_x86_64_SDL1.yml
================================================
name: Linux x64 SDL1
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt-get update &&
sudo apt-get install -y cmake file g++ git libfmt-dev libsdl1.2-dev libsodium-dev libpng-dev libbz2-dev rpm smpq
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v3-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v3-
- name: Configure CMake
shell: bash
working-directory: ${{github.workspace}}
# Disable LTO to work around an ICE in gcc11
run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCPACK=ON -DUSE_SDL1=ON -DDISCORD_INTEGRATION=ON -DDISABLE_LTO=ON
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: cmake --build build -j $(nproc) --target package
- name: Package
run: Packaging/nix/LinuxReleasePackaging.sh
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx_linux_x86_64_SDL1.tar.xz
path: devilutionx.tar.xz
- name: Clean up artifacts
run: rm -rf build/_CPack_Packages build/package build/*.deb build/*.rpm build/*.appimage build/*.tar.xz
================================================
FILE: .github/workflows/Linux_x86_64_SDL3_test.yml
================================================
name: Linux x64 SDL3 Tests
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y cmake curl g++ git libgtest-dev libgmock-dev libbenchmark-dev libfmt-dev libsodium-dev libpng-dev libbz2-dev libasound2-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libxtst-dev libxkbcommon-dev wget
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v4-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v4-
# We specify `-DDEVILUTIONX_SYSTEM_BENCHMARK=OFF` to work around the following error:
# lto1: fatal error: bytecode stream in file ‘/usr/lib/x86_64-linux-gnu/libbenchmark_main.a’ generated with LTO version 11.2 instead of the expected 11.3
- name: Build tests
run: |
cmake -S. -Bbuild -G Ninja -DUSE_SDL3=ON -DDEVILUTIONX_SYSTEM_SDL3=OFF -DDEVILUTIONX_STATIC_SDL3=ON -DDEVILUTIONX_SYSTEM_SDL_IMAGE=OFF -DDEVILUTIONX_SYSTEM_BENCHMARK=OFF
wget -qnc https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq -P build
cmake --build build -j $(nproc)
- name: Run tests
run: cd build && ctest --output-on-failure
================================================
FILE: .github/workflows/Linux_x86_64_test.yml
================================================
name: Linux x64 Tests
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y cmake curl g++ git lcov libgtest-dev libgmock-dev libbenchmark-dev libfmt-dev libsdl2-dev libsodium-dev libpng-dev libbz2-dev wget
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v3-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v3-
# We specify `-DDEVILUTIONX_SYSTEM_BENCHMARK=OFF` to work around the following error:
# lto1: fatal error: bytecode stream in file ‘/usr/lib/x86_64-linux-gnu/libbenchmark_main.a’ generated with LTO version 11.2 instead of the expected 11.3
- name: Build tests
run: |
cmake -S. -Bbuild -G Ninja -DENABLE_CODECOVERAGE=ON -DDEVILUTIONX_SYSTEM_BENCHMARK=OFF
wget -qnc https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq -P build
cmake --build build -j $(nproc)
- name: Run tests
run: cd build && ctest --output-on-failure
- name: Upload results
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .github/workflows/PS4.yml
================================================
name: PS4
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
ps4:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: |
sudo apt-get update && \
sudo apt-get install -y pacman-package-manager wget cmake git gettext smpq && \
sudo tee -a /etc/pacman.conf > /dev/null <<TEXT
[pacbrew]
SigLevel = Optional TrustAll
Server = https://pacman.mydedibox.fr/pacbrew/packages/
TEXT
- name: Setup pacman packages
run: |
sudo pacman --noconfirm -Sy && \
sudo pacman --noconfirm -S ps4-openorbis ps4-openorbis-portlibs && \
echo "#include <endian.h>" | sudo tee /opt/pacbrew/ps4/openorbis/include/sys/endian.h
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: Packaging/ps4/build.sh
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-ps4.pkg
path: build-ps4/devilutionx.pkg
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
asset_name: devilutionx-ps4.pkg
file: build-ps4/devilutionx.pkg
overwrite: true
================================================
FILE: .github/workflows/PS5.yml
================================================
name: PS5 (ps5-payload-dev)
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
ps5:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: |
sudo apt update
sudo apt install cmake pkg-config clang-15 lld-15
sudo apt install build-essential autoconf libtool yasm nasm
sudo apt install smpq gperf pkgconf libarchive-tools autopoint po4a git curl doxygen wget
wget https://github.com/ps5-payload-dev/pacbrew-repo/releases/download/v0.27/ps5-payload-dev.tar.gz
sudo tar -xf ps5-payload-dev.tar.gz -C /
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: Packaging/ps5/build.sh
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-ps5.zip
path: build-ps5/devilutionx-ps5.zip
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
asset_name: devilutionx-ps5.zip
file: build-ps5/devilutionx-ps5.zip
overwrite: true
================================================
FILE: .github/workflows/Windows9x_MinGW.yml
================================================
name: Windows 9x MinGW
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt-get update &&
sudo apt-get install -y cmake gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
sudo rm /usr/i686-w64-mingw32/lib/libz.dll.a &&
sudo Packaging/windows/mingw9x-prep.sh
- name: Configure CMake
shell: bash
working-directory: ${{github.workspace}}
run: cmake -S. -Bbuild-windows9x -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingw9x.toolchain.cmake -DTARGET_PLATFORM=windows9x
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: |
cmake --build build-windows9x -j $(nproc) --target package
mv build-windows9x/devilutionx.zip devilutionx-win9x.zip
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
path: devilutionx-win9x.zip
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-win9x.zip
overwrite: true
================================================
FILE: .github/workflows/Windows_MSVC_x64.yml
================================================
name: Windows MSVC x64
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
permissions:
contents: write
env:
VCPKG_FEATURE_FLAGS: dependencygraph
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
- name: Install latest CMake
uses: lukka/get-cmake@latest
- name: Restore or setup vcpkg
uses: lukka/run-vcpkg@v11.5
with:
vcpkgGitCommitId: 'a62ce77d56ee07513b4b67de1ec2daeaebfae51a'
- name: Fetch test data
run: |
mkdir build-ninja-vcpkg-relwithdebinfo
Invoke-WebRequest -Uri "https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq" -OutFile "build-ninja-vcpkg-relwithdebinfo/spawn.mpq" -Resume
- name: Get CMakePresets.json
run: cp Packaging/windows/CMakePresets.json .
- name: Run CMake consuming CMakePresets.json and vcpkg.json by mean of vcpkg.
uses: lukka/run-cmake@v10
with:
configurePreset: 'ninja-vcpkg-relwithdebinfo'
buildPreset: 'ninja-vcpkg-relwithdebinfo'
testPreset: 'ninja-vcpkg-relwithdebinfo'
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx.exe
path: |
build-ninja-vcpkg-relwithdebinfo/devilutionx.exe
build-ninja-vcpkg-relwithdebinfo/bz2.dll
build-ninja-vcpkg-relwithdebinfo/fmt.dll
build-ninja-vcpkg-relwithdebinfo/libpng16.dll
build-ninja-vcpkg-relwithdebinfo/libsodium.dll
build-ninja-vcpkg-relwithdebinfo/SDL2.dll
build-ninja-vcpkg-relwithdebinfo/SDL2_image.dll
build-ninja-vcpkg-relwithdebinfo/zlib1.dll
================================================
FILE: .github/workflows/Windows_MinGW_x64.yml
================================================
name: Windows MinGW x64
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt-get update &&
sudo apt-get install -y cmake gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 pkg-config-mingw-w64-x86-64 libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
sudo Packaging/windows/mingw-prep64.sh
- name: Configure CMake
shell: bash
working-directory: ${{github.workspace}}
run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingwcc64.toolchain.cmake -DDEVILUTIONX_SYSTEM_BZIP2=OFF -DDEVILUTIONX_STATIC_LIBSODIUM=ON -DDISCORD_INTEGRATION=ON -DSCREEN_READER_INTEGRATION=ON
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: cmake --build build -j $(nproc) --target package
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx_x64.zip
path: build/devilutionx.zip
- name: Move artifacts to new folder and split exe and other data into two folders
if: ${{ !env.ACT && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'diasurgical/devilutionX'}}
working-directory: ${{github.workspace}}
shell: bash
run: mkdir artifacts_dir && unzip build/devilutionx.zip -d artifacts_dir && mkdir artifacts_dir/exe_dir && mv artifacts_dir/devilutionx/devilutionx.exe artifacts_dir/exe_dir && zip -m artifacts_dir/exe_dir/build.zip artifacts_dir/exe_dir/devilutionx.exe && rm artifacts_dir/devilutionx/libTolk.dll
- name: Pushes DLLs and devilutionx.mpq to another repository
if: ${{ !env.ACT && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'diasurgical/devilutionX' }}
uses: cpina/github-action-push-to-another-repository@main
env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
with:
source-directory: artifacts_dir/devilutionx/
destination-github-username: 'artifacts-storage'
destination-repository-name: 'devilutionx-artifacts'
target-directory: data
commit-message: "[DATA] ${{ github.event.head_commit.message }}"
target-branch: master
- name: Pushes exe to another repository
if: ${{ !env.ACT && github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'diasurgical/devilutionX' }}
uses: cpina/github-action-push-to-another-repository@main
env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
with:
source-directory: artifacts_dir/exe_dir
destination-github-username: 'artifacts-storage'
destination-repository-name: 'devilutionx-artifacts'
target-directory: ${{ github.sha }}
commit-message: "[EXE] ${{ github.event.head_commit.message }}"
target-branch: master
================================================
FILE: .github/workflows/Windows_MinGW_x86.yml
================================================
name: Windows MinGW x86
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt update &&
sudo apt install -y cmake gcc-mingw-w64-i686 g++-mingw-w64-i686 pkg-config-mingw-w64-i686 libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
sudo Packaging/windows/mingw-prep.sh
- name: Configure CMake
shell: bash
working-directory: ${{github.workspace}}
run: cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingwcc.toolchain.cmake -DDEVILUTIONX_SYSTEM_BZIP2=OFF -DDEVILUTIONX_STATIC_LIBSODIUM=ON -DDISCORD_INTEGRATION=ON -DSCREEN_READER_INTEGRATION=ON
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: cmake --build build -j $(nproc) --target package
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx_x86.zip
path: build/devilutionx.zip
================================================
FILE: .github/workflows/Windows_XP_32bit.yml
================================================
name: Windows XP MinGW
on:
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt update &&
sudo apt install -y cmake gcc-mingw-w64-i686 g++-mingw-w64-i686 pkg-config-mingw-w64-i686 libz-mingw-w64-dev gettext dpkg-dev wget git sudo smpq &&
sudo rm /usr/i686-w64-mingw32/lib/libz.dll.a &&
sudo Packaging/windows/mingw-prep.sh
- name: Configure CMake
shell: bash
working-directory: ${{github.workspace}}
run: cmake -S. -Bbuild-windowsxp -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCPACK=ON -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/mingwcc.toolchain.cmake -DTARGET_PLATFORM=windowsXP
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: |
cmake --build build-windowsxp -j $(nproc) --target package
mv build-windowsxp/devilutionx.zip devilutionx-windows-xp-32bit.zip
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
path: devilutionx-windows-xp-32bit.zip
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-windows-xp-32bit.zip
overwrite: true
================================================
FILE: .github/workflows/amiga-m68k.yml
================================================
---
name: Amiga M68K
on: # yamllint disable-line rule:truthy
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
container: amigadev/crosstools:m68k-amigaos-gcc10@sha256:e0ee27eb4174ba8f95143273dd2ecb0ffa23ca6a195e013030a681ab541b4a37
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Run prep.sh script
run: ./Packaging/amiga/prep.sh
- name: Configure CMake
run: |
cmake \
-S . \
-B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DM68K_COMMON="-s -fbbb=- -ffast-math" \
-DM68K_CPU=68040 \
-DM68K_FPU=hard
- name: Build DevilutionX
run: cmake --build build
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx_m68k
path: ./build/devilutionx
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
asset_name: devilutionx-amiga-m68k
file: ./build/devilutionx
overwrite: true
================================================
FILE: .github/workflows/cache-cleanup.yml
================================================
name: Delete cache for a closed Pull Request
on:
pull_request:
types:
- closed
jobs:
cleanup:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v6
# https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries
- name: Cleanup
run: |
gh extension install actions/gh-actions-cache
REPO=${{ github.repository }}
BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge"
echo "Fetching list of cache key"
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 )
## Setting this to not fail the workflow while deleting cache keys.
set +e
echo "Deleting caches..."
for cacheKey in $cacheKeysForPR; do
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
done
echo "Done"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/clang-format-check.yml
================================================
name: clang-format check
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
formatting-check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Formatting Check (Source)
uses: jidicula/clang-format-action@v4.17.0
with:
clang-format-version: '18'
check-path: 'Source'
- name: Formatting Check (test)
uses: jidicula/clang-format-action@v4.17.0
with:
clang-format-version: '18'
check-path: 'test'
================================================
FILE: .github/workflows/clang-tidy-check.yml
================================================
name: clang-tidy check
on:
push:
branches:
- master
paths: ['**.c', '**.cpp', '**.h', '**.hpp', '**.cxx', '**.hxx', '**.cc', '**.hh', '**CMakeLists.txt', 'meson.build', '**.cmake', '.github/workflows/clang-tidy-check.yml']
pull_request:
types: [ opened, synchronize ]
paths: ['**.c', '**.cpp', '**.h', '**.hpp', '**.cxx', '**.hxx', '**.cc', '**.hh', '**CMakeLists.txt', 'meson.build', '**.cmake', '.github/workflows/clang-tidy-check.yml']
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
tidy-check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y cmake curl g++ git libgtest-dev libgmock-dev libbenchmark-dev libfmt-dev libsdl2-dev libsodium-dev libpng-dev libbz2-dev wget
- name: CMake Configure
run: cmake -S. -Bbuild
- name: clang-tidy Check
uses: cpp-linter/cpp-linter-action@v2
id: linter
with:
database: build # directory containing compile_commands.json
style: '' # using an empty string here disables clang-format checks. We leave the existing clang-format-check workflow to run clang-format instead
tidy-checks: '' # using an empty string here instructs the action to use only checks from the .clang-tidy file
ignore-tidy: '3rdParty'
================================================
FILE: .github/workflows/iOS.yml
================================================
name: iOS
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
# The CMake configure and build commands are platform agnostic and should work equally
# well on Windows or Mac. You can convert this to a matrix build if you need
# cross-platform coverage.
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
runs-on: macos-14
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v5-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v5-
- name: Configure CMake
# Use a bash shell so we can use the same syntax for environment variable
# access regardless of the host operating system
shell: bash
working-directory: ${{github.workspace}}
run: cmake -S. -Bbuild -DCMAKE_TOOLCHAIN_FILE=../CMake/platforms/ios.toolchain.cmake -DENABLE_BITCODE=0 -DPLATFORM=OS64
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: >
cmake --build build -j $(sysctl -n hw.physicalcpu) --config Release &&
cd build &&
mkdir Payload &&
mv devilutionx.app Payload &&
zip -r devilutionx-iOS.ipa Payload
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-iOS.ipa
path: build/devilutionx-iOS.ipa
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: build/devilutionx-iOS.ipa
overwrite: true
- name: Clean up artifacts
run: rm -rf build/Payload build/*.ipa
================================================
FILE: .github/workflows/macOS_arm64.yml
================================================
name: macOS arm64
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: brew bundle install
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v2-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v2-
- name: Clean previous DMG
working-directory: ${{github.workspace}}
run: rm -f build/*.dmg
- name: Build
working-directory: ${{github.workspace}}
shell: bash
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
run: |
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DBUILD_TESTING=OFF \
-DMACOSX_STANDALONE_APP_BUNDLE=ON && \
cmake --build build -j $(sysctl -n hw.physicalcpu) --target package && \
mv build/devilutionx.dmg build/devilutionx-arm64-macOS.dmg
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-arm64-macOS.dmg
path: build/devilutionx-arm64-macOS.dmg
- name: Clean up artifacts
run: rm -rf build/_CPack_Packages build/*.dmg
================================================
FILE: .github/workflows/macOS_x86_64.yml
================================================
name: macOS x86_64
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: macos-15-intel
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: brew bundle install
- name: Cache CMake build folder
uses: actions/cache@v5
with:
path: build
key: ${{ github.workflow }}-v4-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v4-
- name: Clean previous DMG
working-directory: ${{github.workspace}}
run: rm -f build/*.dmg
- name: Build
working-directory: ${{github.workspace}}
shell: bash
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
run: |
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DBUILD_TESTING=OFF \
-DMACOSX_STANDALONE_APP_BUNDLE=ON -DDISCORD_INTEGRATION=ON && \
cmake --build build -j $(sysctl -n hw.physicalcpu) --target package && \
mv build/devilutionx.dmg build/devilutionx-x86_64-macOS.dmg
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-x86_64-macOS.dmg
path: build/devilutionx-x86_64-macOS.dmg
- name: Clean up artifacts
run: rm -rf build/_CPack_Packages build/*.dmg
================================================
FILE: .github/workflows/miyoo_mini_release.yml
================================================
name: Miyoo Mini Release Build
on:
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
miyoo-mini:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install toolchain
working-directory: ${{github.workspace}}
run: sudo Packaging/miyoo_mini/setup_toolchain.sh
- name: Build
working-directory: ${{github.workspace}}
run: Packaging/miyoo_mini/build.sh
- name: Upload-OnionOS-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-miyoo-mini-onion-os.zip
path: build-miyoo-mini/devilutionx-miyoo-mini-onion-os.zip
- name: Upload-miniUI-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-miyoo-mini-miniui.zip
path: build-miyoo-mini/devilutionx-miyoo-mini-miniui.zip
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: "build-miyoo-mini/devilutionx-*.zip"
file_glob: true
overwrite: true
================================================
FILE: .github/workflows/opendingux_release.yml
================================================
name: OpenDingux Release Build
on:
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
gcw0:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt-get update &&
sudo apt-get install -y curl cmake git squashfs-tools &&
curl -L https://github.com/OpenDingux/buildroot/releases/download/od-2022.09.22/opendingux-gcw0-toolchain.2022-09-22.tar.xz -o gcw0-toolchain.tar.xz &&
sudo mkdir -p /opt/gcw0-toolchain && sudo chown -R "${USER}:" /opt/gcw0-toolchain &&
tar -C /opt -xf gcw0-toolchain.tar.xz &&
cd /opt/gcw0-toolchain && ./relocate-sdk.sh
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: Packaging/OpenDingux/build.sh rg350
env:
TOOLCHAIN: /opt/gcw0-toolchain
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-rg350.opk.zip
path: build-rg350/devilutionx-rg350.opk
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: "build-rg350/devilutionx-rg350.opk"
overwrite: true
lepus:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt update &&
sudo apt install -y curl cmake git squashfs-tools &&
curl -L https://github.com/OpenDingux/buildroot/releases/download/od-2022.09.22/opendingux-lepus-toolchain.2022-09-22.tar.xz -o lepus-toolchain.tar.xz &&
sudo mkdir -p /opt/lepus-toolchain && sudo chown -R "${USER}:" /opt/lepus-toolchain &&
tar -C /opt -xf lepus-toolchain.tar.xz &&
cd /opt/lepus-toolchain && ./relocate-sdk.sh
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: Packaging/OpenDingux/build.sh lepus
env:
TOOLCHAIN: /opt/lepus-toolchain
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-lepus.opk.zip
path: build-lepus/devilutionx-lepus.opk
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: "build-lepus/devilutionx-lepus.opk"
overwrite: true
================================================
FILE: .github/workflows/retrofw_release.yml
================================================
name: RetroFW Release Build
on:
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
retrofw:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt-get update &&
sudo apt-get install -y curl cmake git squashfs-tools gettext &&
curl -L https://github.com/retrofw/retrofw.github.io/releases/download/v2.3/mipsel-RetroFW-linux-uclibc_sdk-buildroot.tar.gz -o retrofw-toolchain.tar.gz &&
sudo mkdir -p /opt/retrofw-toolchain && sudo chown -R "${USER}:" /opt/retrofw-toolchain &&
tar -C /opt/retrofw-toolchain --strip-components=1 -xf retrofw-toolchain.tar.gz &&
cd /opt/retrofw-toolchain && ./relocate-sdk.sh
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: Packaging/OpenDingux/build.sh retrofw
env:
TOOLCHAIN: /opt/retrofw-toolchain
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-retrofw.opk.zip
path: build-retrofw/devilutionx-retrofw.opk
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: "build-retrofw/devilutionx-retrofw.opk"
overwrite: true
================================================
FILE: .github/workflows/s390x_qemu_big_endian_tests.yml
================================================
name: s390x qemu tests (big-endian)
# The test suite takes ~50m to run so we only trigger it manually
on:
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
big-endian-qemu:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Cache .ccache
uses: actions/cache@v5
with:
path: .ccache
key: ${{ github.workflow }}-v1-${{ github.sha }}
restore-keys: ${{ github.workflow }}-v1-
- name: Get the qemu container
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- name: Run tests
run: >
docker run --platform linux/s390x --rm --interactive --mount type=bind,source=$(pwd),target=/host s390x/alpine sh -c
"
apk add --update-cache g++ ninja cmake ccache sdl2-dev sdl2_image-dev fmt-dev libpng-dev jpeg-dev bzip2-dev gtest-dev wget &&
cd /host &&
export CCACHE_DIR=/host/.ccache &&
cmake -S. -Bbuild -G Ninja -DNONET=ON -DNOSOUND=ON &&
wget -nv -nc https://github.com/diasurgical/devilutionx-assets/releases/download/v2/spawn.mpq -P build &&
cmake --build build -j $(nproc) &&
ctest --test-dir build --output-on-failure -j $(nproc)
"
================================================
FILE: .github/workflows/src_dist_release.yml
================================================
name: Build source tarball
on:
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
make_src_dist:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt-get update &&
sudo apt-get install -y cmake curl libsdl2-dev libsdl2-image-dev libfmt-dev libsodium-dev libbz2-dev libgtest-dev libgmock-dev libbenchmark-dev git smpq gettext python-is-python3
- name: Build
working-directory: ${{github.workspace}}
run: tools/make_src_dist.py && mv build-src-dist/devilutionx-*.tar.xz devilutionx-src.tar.xz
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-src.tar.xz
path: devilutionx-src.tar.xz
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: "devilutionx-src.tar.xz"
overwrite: true
make_src_dist_fully_vendored:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Create Build Environment
run: >
sudo apt-get update &&
sudo apt-get install -y cmake curl libsdl2-dev libsdl2-image-dev libfmt-dev libsodium-dev libbz2-dev libgtest-dev libgmock-dev libbenchmark-dev git smpq gettext python-is-python3
- name: Build
working-directory: ${{github.workspace}}
run: tools/make_src_dist.py --fully_vendored && mv build-src-dist/devilutionx-*.tar.xz devilutionx-src-fully-vendored.tar.xz
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-src-fully-vendored.tar.xz
path: devilutionx-src-fully-vendored.tar.xz
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: "devilutionx-src-fully-vendored.tar.xz"
overwrite: true
================================================
FILE: .github/workflows/switch.yml
================================================
---
name: Nintendo Switch
on: # yamllint disable-line rule:truthy
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
container: devkitpro/devkita64:latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Configure CMake
run: |
cmake \
-S . \
-B build \
-D CMAKE_BUILD_TYPE=RelWithDebInfo \
-D CMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake
- name: Build DevilutionX
run: cmake --build build -j$(nproc)
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx.nro
path: ./build/devilutionx.nro
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
asset_name: devilutionx-switch.nro
file: ./build/devilutionx.nro
overwrite: true
...
================================================
FILE: .github/workflows/translations.yml
================================================
name: Validate translations
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [ opened, synchronize ]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
fmt-check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install polib
run: sudo apt-get update && sudo apt-get install -y python3-polib
- name: Check
working-directory: ${{github.workspace}}
shell: bash
run: python3 tools/validate_translations.py
================================================
FILE: .github/workflows/vita.yml
================================================
---
name: Sony PlayStation Vita
on: # yamllint disable-line rule:truthy
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
container: vitasdk/vitasdk:latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install dependencies
run: |
apk add \
gettext \
git \
samurai \
patch
- name: Configure CMake
run: |
cmake \
-S . \
-B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake
- name: Build DevilutionX
run: cmake --build build
- name: Upload Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx.vpk
path: ./build/devilutionx.vpk
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
asset_name: devilutionx-vita.vpk
file: ./build/devilutionx.vpk
overwrite: true
...
================================================
FILE: .github/workflows/xbox_nxdk.yml
================================================
name: Xbox
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
xbox:
runs-on: ubuntu-22.04
env:
NXDK_DIR: /opt/nxdk
steps:
- name: Install APT packages
run: sudo apt-get update && sudo apt-get install -y clang llvm lld bison flex cmake git gettext
- name: Clone nxdk Repo
shell: bash
run: git clone --recursive --depth 1 https://github.com/XboxDev/nxdk.git "$NXDK_DIR"
- name: Build nxdk
shell: bash
run: PATH="${NXDK_DIR}/bin:$PATH" make -j $(nproc) -C "$NXDK_DIR" NXDK_ONLY=1 CFLAGS=-O2 CXXFLAGS=-O2 all cxbe
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Configure CMake
working-directory: ${{github.workspace}}
env:
CMAKE_BUILD_TYPE: ${{github.event_name == 'release' && 'Release' || 'RelWithDebInfo'}}
run: cmake -S. -Bbuild-xbox -DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=/opt/nxdk/share/toolchain-nxdk.cmake
- name: Build
working-directory: ${{github.workspace}}
shell: bash
run: cmake --build build-xbox -j $(nproc) --target nxdk_xbe
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-xbox
path: build-xbox/pkg/
- name: Package Release
if: ${{ github.event_name == 'release' && !env.ACT }}
working-directory: ${{github.workspace}}/build-xbox/pkg
run: zip -r ../../devilutionx-xbox.zip .
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-xbox.zip
overwrite: true
================================================
FILE: .github/workflows/xbox_one.yml
================================================
name: Xbox One / Series
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- 'docs/**'
pull_request:
types: [opened, synchronize]
paths-ignore:
- '*.md'
- 'docs/**'
release:
types: [published]
paths-ignore:
- '*.md'
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
with:
msbuild-architecture: x64
- name: Configure git
shell: cmd
run: |
git config --global core.filemode false
git config --global core.autocrlf false
- name: Install gettext
run: >
New-Item -Path . -Name tools-gettext -ItemType Directory -Force &&
Invoke-WebRequest -Uri "https://github.com/vslavik/gettext-tools-windows/releases/download/v0.22.5/gettext-tools-windows-0.22.5.zip" -OutFile tools-gettext.zip -Resume &&
Expand-Archive tools-gettext.zip &&
Remove-Item tools-gettext.zip &&
Add-Content $env:GITHUB_PATH "$((Get-Item tools-gettext).FullName)\bin"
- name: Build
shell: cmd
run: |
cd ${{ github.workspace }}\Packaging\xbox-one
build.bat
- name: Copy artifacts to package directory
run: >
New-Item -Path build\uwp-project -Name pkg -ItemType Directory -Force &&
Get-Childitem -Path build\uwp-project\AppxPackages, build\uwp-project\Release
-Include Microsoft.VCLibs.x64.*.appx, devilutionX_*_x64.appx -File -Recurse |
Copy-Item -Destination build\uwp-project\pkg\
- name: Upload-Package
if: ${{ !env.ACT }}
uses: actions/upload-artifact@v7
with:
name: devilutionx-xbox-one-series
if-no-files-found: error
path: |
build/uwp-project/pkg/
- name: Package Release
if: ${{ github.event_name == 'release' && !env.ACT }}
working-directory: ${{github.workspace}}/build/uwp-project/pkg/
run: 7z a -r ../../../devilutionx-xbox-one-series.zip .
- name: Update Release
if: ${{ github.event_name == 'release' && !env.ACT }}
uses: svenstaro/upload-release-action@v2
with:
file: devilutionx-xbox-one-series.zip
overwrite: true
================================================
FILE: .gitignore
================================================
# Generated by VC++ 6 builds
/vc60.idb
*.asm
*.idb
# macOS
.DS_Store
# CodeLite
.CodeLite
*.project
*.workspace
# Devilution Comparer
devilution-comparer
comparer-config.toml
#ignore cmake cache
/build-*/
.vscode/tasks.json
# Extra files in the source distribution (see make_src_dist.py)
/dist/
*.appimage
*.AppImage
# ELF object file, shared library and object archive.
*.o
*.so
*.a
# PE shared library and associated files.
*.lib
*.exp
*.dll
# PE executable.
*.exe
# GCC dependency file.
*.d
# Resource file.
*.res
# Created by https://www.gitignore.io/api/visualstudio
### VisualStudio ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
WinDebug/
WinRel/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Vim swap files
*.swp
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# Visual Studio Edit & Continue
enc_temp_folder
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# except for a top-level .cache directory (clangd uses /.cache/clangd for temporary files)
/.cache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# macOS
.DS_Store
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
### VisualStudio Patch ###
# By default, sensitive information, such as encrypted password
# should be stored in the .pubxml.user file.
*.pubxml.user
# End of https://www.gitignore.io/api/visualstudio
# Created by https://www.gitignore.io/api/xcode
# Edit at https://www.gitignore.io/?templates=xcode
### Visual Code
/.vscode
### Xcode ###
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
### Xcode Patch ###
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
**/xcshareddata/WorkspaceSettings.xcsettings
/libs
# End of https://www.gitignore.io/api/xcode
# Don't accidently commit the diabdat.mpq or any other MPQ files
*.mpq
### Nintendo Switch ###
exefs/main
/out/isenseconfig/CPI-Debug
/docs/html/
# ddraw wrapper configuration file
ddraw_settings.ini
Brewfile.lock.json
.vscode/settings.json
# GPerf heap profile dumps
*.heap
*.mo
# UWP copied assets
uwp-project/Assets/data
uwp-project/Assets/fonts
uwp-project/Assets/gendata
uwp-project/Assets/ui_art
!uwp-project/devilutionX_TemporaryKey.pfx
/.s390x-ccache/
# Temporary directory for prep scripts and other purposes.
/tmp/
/compile_commands.json
/tools/tmp
================================================
FILE: .lldbinit
================================================
script topsrcdir = topsrcdir if "topsrcdir" in locals() else os.getcwd()
script sys.path.append(os.path.join(topsrcdir, "tools/lldb"))
script import devilution_lldb
script devilution_lldb.init()
================================================
FILE: 3rdParty/Lua/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
# Workaround for deprecation of older CMake versions
set(CMAKE_POLICY_VERSION_MINIMUM 3.22)
set(LUA_ENABLE_TESTING OFF)
set(LUA_BUILD_COMPILER OFF)
if(DEVILUTIONX_STATIC_LUA)
set(LUA_ENABLE_SHARED OFF)
else()
set(LUA_ENABLE_SHARED ON)
endif()
include(FetchContent)
FetchContent_Declare_ExcludeFromAll(Lua
URL https://github.com/walterschell/Lua/archive/3ed55a56eaa05c9221f40b3c07d0e908eb1067b0.tar.gz
URL_HASH MD5=77907b8209f77c65cb681a5012f2d804
)
FetchContent_MakeAvailable_ExcludeFromAll(Lua)
# Needed for sol2
set(LUA_VERSION_STRING "5.4.7" PARENT_SCOPE)
if(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND DARWIN_MAJOR_VERSION VERSION_EQUAL 8)
# We need legacy-support from MacPorts for:
# localtime_r gmtime_r
find_package(MacportsLegacySupport REQUIRED)
target_link_libraries(lua_static PRIVATE MacportsLegacySupport::MacportsLegacySupport)
elseif(TARGET_PLATFORM STREQUAL "dos")
target_compile_definitions(lua_static PUBLIC -DLUA_USE_C89)
elseif(ANDROID AND ("${ANDROID_ABI}" STREQUAL "armeabi-v7a" OR "${ANDROID_ABI}" STREQUAL "x86"))
target_compile_definitions(lua_static PUBLIC -DLUA_USE_C89)
elseif(NINTENDO_3DS OR VITA OR NINTENDO_SWITCH OR NXDK)
target_compile_definitions(lua_static PUBLIC -DLUA_USE_C89)
elseif(IOS)
target_compile_definitions(lua_static PUBLIC -DLUA_USE_IOS)
endif()
================================================
FILE: 3rdParty/PKWare/CMakeLists.txt
================================================
add_library(PKWare STATIC
explode.cpp
implode.cpp)
target_include_directories(PKWare PUBLIC .)
================================================
FILE: 3rdParty/PKWare/Makefile
================================================
VC5_DIR ?= $(HOME)/DevStudio_5.10/VC
# The $(VS6_DIR) directory is a copy of the "Microsoft Visual Studio" directory.
#
# To get a working setup on Linux or other "portable" copies of VS,
# the following DLLs have to be copied to the
# $(VS6_DIR)/VC98/Bin directory.
#
# - $(VS6_DIR)/Common/MSDev98/Bin/MSPDB60.DLL
#
# And to the $(VC5_DIR)/bin directory.
#
# - $(VC5_DIR)/SharedIDE/bin/MSDIS100.DLL
# - $(VC5_DIR)/SharedIDE/bin/MSPDB50.DLL
VS6_DIR ?= $(HOME)/VS6
VC6_DIR = $(VS6_DIR)/VC98
VC6_BIN_DIR = $(VC6_DIR)/Bin
VC6_INC_DIR = $(VC6_DIR)/Include
VC6_LIB_DIR = $(VC6_DIR)/Lib
VC5_LIB_DIR = $(VC5_DIR)/lib
IDE_DIR ?= $(VS6_DIR)/Common/MSDev98
IDE_BIN_DIR = $(IDE_DIR)/bin
ifeq ($(OS),Windows_NT)
CL = $(VC6_BIN_DIR)/CL.EXE
RC = $(IDE_BIN_DIR)/RC.EXE
VC5_LINK = $(VC5_DIR)/bin/link.exe
VC6_LINK = $(VC6_BIN_DIR)/link.exe
else
CL = wine $(VC6_BIN_DIR)/CL.EXE
RC = wine $(IDE_BIN_DIR)/RC.EXE
VC5_LINK = wine $(VC5_DIR)/bin/link.exe
VC6_LINK = wine $(VC6_BIN_DIR)/link.exe
endif
CFLAGS=/nologo /c /GX /W3 /O1 /I $(VC6_INC_DIR) /FD /MT /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /Gm /Zi
LINKFLAGS=/nologo /subsystem:windows /machine:I386 /incremental:no
VC_LINK=$(VC5_LINK)
LINKFLAGS+= /LIBPATH:$(VC5_LIB_DIR)
all: pkware.lib
PKWARE_SRC=$(sort $(wildcard *.cpp))
PKWARE_OBJS=$(PKWARE_SRC:.cpp=.obj)
pkware.lib: $(PKWARE_OBJS)
$(VC_LINK) -lib /OUT:$@ $^ /nologo
%.obj: %.cpp
$(CL) $(CFLAGS) /Fo$@ $<
clean:
@$(RM) -v $(PKWARE_OBJS) pkware.lib vc60.{idb,pch,pdb}
.PHONY: clean all
================================================
FILE: 3rdParty/PKWare/PKWare.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="explode.cpp" />
<ClCompile Include="implode.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="pkware.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{C7F9F3B4-2F7C-4672-9586-94D8BA0950B6}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>PKWare</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>.\WinDebug\</OutDir>
<IntDir>.\WinDebug\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>.\WinRel</OutDir>
<IntDir>.\WinRel</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
================================================
FILE: 3rdParty/PKWare/PKWare.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="explode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="implode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pkware.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
================================================
FILE: 3rdParty/PKWare/Pkware.dsp
================================================
# Microsoft Developer Studio Project File - Name="Pkware" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=Pkware - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Pkware.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Pkware.mak" CFG="Pkware - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Pkware - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "Pkware - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "Pkware - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "WinRel"
# PROP BASE Intermediate_Dir "WinRel"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "WinRel"
# PROP Intermediate_Dir "WinRel"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "Pkware - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "WinDebug"
# PROP BASE Intermediate_Dir "WinDebug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "WinDebug"
# PROP Intermediate_Dir "WinDebug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "Pkware - Win32 Release"
# Name "Pkware - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\explode.cpp
# End Source File
# Begin Source File
SOURCE=.\implode.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# End Target
# End Project
================================================
FILE: 3rdParty/PKWare/explode.cpp
================================================
/*****************************************************************************/
/* explode.cpp Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Implode function of PKWARE Data Compression library */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 11.03.03 1.00 Lad Splitted from Pkware.cpp */
/* 08.04.03 1.01 Lad Renamed to explode.cpp to be compatible with pkware */
/* 02.05.03 1.01 Lad Stress test done */
/* 22.04.10 1.01 Lad Documented */
/*****************************************************************************/
#include <assert.h>
#include <string.h>
#include "pkware.h"
#define PKDCL_OK 0
#define PKDCL_STREAM_END 1 // All data from the input stream is read
#define PKDCL_NEED_DICT 2 // Need more data (dictionary)
#define PKDCL_CONTINUE 10 // Internal flag, not returned to user
#define PKDCL_GET_INPUT 11 // Internal flag, not returned to user
static char CopyrightPkware[] = "PKWARE Data Compression Library for Win32\r\n"
"Copyright 1989-1995 PKWARE Inc. All Rights Reserved\r\n"
"Patent No. 5,051,745\r\n"
"PKWARE Data Compression Library Reg. U.S. Pat. and Tm. Off.\r\n"
"Version 1.11\r\n";
//-----------------------------------------------------------------------------
// Tables
static unsigned char DistBits[] =
{
0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08
};
static unsigned char DistCode[] =
{
0x03, 0x0D, 0x05, 0x19, 0x09, 0x11, 0x01, 0x3E, 0x1E, 0x2E, 0x0E, 0x36, 0x16, 0x26, 0x06, 0x3A,
0x1A, 0x2A, 0x0A, 0x32, 0x12, 0x22, 0x42, 0x02, 0x7C, 0x3C, 0x5C, 0x1C, 0x6C, 0x2C, 0x4C, 0x0C,
0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08,
0xF0, 0x70, 0xB0, 0x30, 0xD0, 0x50, 0x90, 0x10, 0xE0, 0x60, 0xA0, 0x20, 0xC0, 0x40, 0x80, 0x00
};
static unsigned char ExLenBits[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
};
static unsigned short LenBase[] =
{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
0x0008, 0x000A, 0x000E, 0x0016, 0x0026, 0x0046, 0x0086, 0x0106
};
static unsigned char LenBits[] =
{
0x03, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07
};
static unsigned char LenCode[] =
{
0x05, 0x03, 0x01, 0x06, 0x0A, 0x02, 0x0C, 0x14, 0x04, 0x18, 0x08, 0x30, 0x10, 0x20, 0x40, 0x00
};
static unsigned char ChBitsAsc[] =
{
0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x07, 0x0C, 0x0C, 0x07, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x04, 0x0A, 0x08, 0x0C, 0x0A, 0x0C, 0x0A, 0x08, 0x07, 0x07, 0x08, 0x09, 0x07, 0x06, 0x07, 0x08,
0x07, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x08, 0x08, 0x0C, 0x0B, 0x07, 0x09, 0x0B,
0x0C, 0x06, 0x07, 0x06, 0x06, 0x05, 0x07, 0x08, 0x08, 0x06, 0x0B, 0x09, 0x06, 0x07, 0x06, 0x06,
0x07, 0x0B, 0x06, 0x06, 0x06, 0x07, 0x09, 0x08, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x09, 0x0C, 0x08,
0x0C, 0x05, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x0B, 0x07, 0x05, 0x06, 0x05, 0x05,
0x06, 0x0A, 0x05, 0x05, 0x05, 0x05, 0x08, 0x07, 0x08, 0x08, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D,
0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D
};
static unsigned short ChCodeAsc[] =
{
0x0490, 0x0FE0, 0x07E0, 0x0BE0, 0x03E0, 0x0DE0, 0x05E0, 0x09E0,
0x01E0, 0x00B8, 0x0062, 0x0EE0, 0x06E0, 0x0022, 0x0AE0, 0x02E0,
0x0CE0, 0x04E0, 0x08E0, 0x00E0, 0x0F60, 0x0760, 0x0B60, 0x0360,
0x0D60, 0x0560, 0x1240, 0x0960, 0x0160, 0x0E60, 0x0660, 0x0A60,
0x000F, 0x0250, 0x0038, 0x0260, 0x0050, 0x0C60, 0x0390, 0x00D8,
0x0042, 0x0002, 0x0058, 0x01B0, 0x007C, 0x0029, 0x003C, 0x0098,
0x005C, 0x0009, 0x001C, 0x006C, 0x002C, 0x004C, 0x0018, 0x000C,
0x0074, 0x00E8, 0x0068, 0x0460, 0x0090, 0x0034, 0x00B0, 0x0710,
0x0860, 0x0031, 0x0054, 0x0011, 0x0021, 0x0017, 0x0014, 0x00A8,
0x0028, 0x0001, 0x0310, 0x0130, 0x003E, 0x0064, 0x001E, 0x002E,
0x0024, 0x0510, 0x000E, 0x0036, 0x0016, 0x0044, 0x0030, 0x00C8,
0x01D0, 0x00D0, 0x0110, 0x0048, 0x0610, 0x0150, 0x0060, 0x0088,
0x0FA0, 0x0007, 0x0026, 0x0006, 0x003A, 0x001B, 0x001A, 0x002A,
0x000A, 0x000B, 0x0210, 0x0004, 0x0013, 0x0032, 0x0003, 0x001D,
0x0012, 0x0190, 0x000D, 0x0015, 0x0005, 0x0019, 0x0008, 0x0078,
0x00F0, 0x0070, 0x0290, 0x0410, 0x0010, 0x07A0, 0x0BA0, 0x03A0,
0x0240, 0x1C40, 0x0C40, 0x1440, 0x0440, 0x1840, 0x0840, 0x1040,
0x0040, 0x1F80, 0x0F80, 0x1780, 0x0780, 0x1B80, 0x0B80, 0x1380,
0x0380, 0x1D80, 0x0D80, 0x1580, 0x0580, 0x1980, 0x0980, 0x1180,
0x0180, 0x1E80, 0x0E80, 0x1680, 0x0680, 0x1A80, 0x0A80, 0x1280,
0x0280, 0x1C80, 0x0C80, 0x1480, 0x0480, 0x1880, 0x0880, 0x1080,
0x0080, 0x1F00, 0x0F00, 0x1700, 0x0700, 0x1B00, 0x0B00, 0x1300,
0x0DA0, 0x05A0, 0x09A0, 0x01A0, 0x0EA0, 0x06A0, 0x0AA0, 0x02A0,
0x0CA0, 0x04A0, 0x08A0, 0x00A0, 0x0F20, 0x0720, 0x0B20, 0x0320,
0x0D20, 0x0520, 0x0920, 0x0120, 0x0E20, 0x0620, 0x0A20, 0x0220,
0x0C20, 0x0420, 0x0820, 0x0020, 0x0FC0, 0x07C0, 0x0BC0, 0x03C0,
0x0DC0, 0x05C0, 0x09C0, 0x01C0, 0x0EC0, 0x06C0, 0x0AC0, 0x02C0,
0x0CC0, 0x04C0, 0x08C0, 0x00C0, 0x0F40, 0x0740, 0x0B40, 0x0340,
0x0300, 0x0D40, 0x1D00, 0x0D00, 0x1500, 0x0540, 0x0500, 0x1900,
0x0900, 0x0940, 0x1100, 0x0100, 0x1E00, 0x0E00, 0x0140, 0x1600,
0x0600, 0x1A00, 0x0E40, 0x0640, 0x0A40, 0x0A00, 0x1200, 0x0200,
0x1C00, 0x0C00, 0x1400, 0x0400, 0x1800, 0x0800, 0x1000, 0x0000
};
//-----------------------------------------------------------------------------
// Local functions
static void PKWAREAPI GenDecodeTabs(
unsigned char * positions, // [out] Table of positions
unsigned char * start_indexes, // [in] Table of start indexes
unsigned char * length_bits, // [in] Table of lengths. Each length is stored as number of bits
size_t elements) // [in] Number of elements in start_indexes and length_bits
{
unsigned int index;
unsigned int length;
size_t i;
for(i = 0; i < elements; i++)
{
length = 1 << length_bits[i]; // Get the length in bytes
for(index = start_indexes[i]; index < 0x100; index += length)
{
positions[index] = (unsigned char)i;
}
}
}
static void PKWAREAPI GenAscTabs(TDcmpStruct * pWork)
{
unsigned short * pChCodeAsc = &ChCodeAsc[0xFF];
unsigned int acc, add;
unsigned short count;
for(count = 0x00FF; pChCodeAsc >= ChCodeAsc; pChCodeAsc--, count--)
{
unsigned char * pChBitsAsc = pWork->ChBitsAsc + count;
unsigned char bits_asc = *pChBitsAsc;
if(bits_asc <= 8)
{
add = (1 << bits_asc);
acc = *pChCodeAsc;
do
{
pWork->offs2C34[acc] = (unsigned char)count;
acc += add;
}
while(acc < 0x100);
}
else if((acc = (*pChCodeAsc & 0xFF)) != 0)
{
pWork->offs2C34[acc] = 0xFF;
if(*pChCodeAsc & 0x3F)
{
bits_asc -= 4;
*pChBitsAsc = bits_asc;
add = (1 << bits_asc);
acc = *pChCodeAsc >> 4;
do
{
pWork->offs2D34[acc] = (unsigned char)count;
acc += add;
}
while(acc < 0x100);
}
else
{
bits_asc -= 6;
*pChBitsAsc = bits_asc;
add = (1 << bits_asc);
acc = *pChCodeAsc >> 6;
do
{
pWork->offs2E34[acc] = (unsigned char)count;
acc += add;
}
while(acc < 0x80);
}
}
else
{
bits_asc -= 8;
*pChBitsAsc = bits_asc;
add = (1 << bits_asc);
acc = *pChCodeAsc >> 8;
do
{
pWork->offs2EB4[acc] = (unsigned char)count;
acc += add;
}
while(acc < 0x100);
}
}
}
//-----------------------------------------------------------------------------
// Removes given number of bits in the bit buffer. New bits are reloaded from
// the input buffer, if needed.
// Returns: PKDCL_OK: Operation was successful
// PKDCL_STREAM_END: There are no more bits in the input buffer
static int PKWAREAPI WasteBits(TDcmpStruct * pWork, unsigned int nBits)
{
// If number of bits required is less than number of (bits in the buffer) ?
if(nBits <= pWork->extra_bits)
{
pWork->extra_bits -= nBits;
pWork->bit_buff >>= nBits;
return PKDCL_OK;
}
// Load input buffer if necessary
pWork->bit_buff >>= pWork->extra_bits;
if(pWork->in_pos == pWork->in_bytes)
{
pWork->in_pos = sizeof(pWork->in_buff);
if((pWork->in_bytes = pWork->read_buf((char *)pWork->in_buff, &pWork->in_pos, pWork->param)) == 0)
return PKDCL_STREAM_END;
pWork->in_pos = 0;
}
// Update bit buffer
pWork->bit_buff |= (pWork->in_buff[pWork->in_pos++] << 8);
pWork->bit_buff >>= (nBits - pWork->extra_bits);
pWork->extra_bits = (pWork->extra_bits - nBits) + 8;
return PKDCL_OK;
}
//-----------------------------------------------------------------------------
// Decodes next literal from the input (compressed) data.
// Returns : 0x000: One byte 0x00
// 0x001: One byte 0x01
// ...
// 0x0FF: One byte 0xFF
// 0x100: Repetition, length of 0x02 bytes
// 0x101: Repetition, length of 0x03 bytes
// ...
// 0x304: Repetition, length of 0x206 bytes
// 0x305: End of stream
// 0x306: Error
static unsigned int PKWAREAPI DecodeLit(TDcmpStruct * pWork)
{
unsigned int extra_length_bits; // Number of bits of extra literal length
unsigned int length_code; // Length code
unsigned int value;
// Test the current bit in byte buffer. If is not set, simply return the next 8 bits.
if(pWork->bit_buff & 1)
{
// Remove one bit from the input data
if(WasteBits(pWork, 1))
return 0x306;
// The next 8 bits hold the index to the length code table
length_code = pWork->LengthCodes[pWork->bit_buff & 0xFF];
// Remove the apropriate number of bits
if(WasteBits(pWork, pWork->LenBits[length_code]))
return 0x306;
// Are there some extra bits for the obtained length code ?
if((extra_length_bits = pWork->ExLenBits[length_code]) != 0)
{
unsigned int extra_length = pWork->bit_buff & ((1 << extra_length_bits) - 1);
if(WasteBits(pWork, extra_length_bits))
{
if((length_code + extra_length) != 0x10E)
return 0x306;
}
length_code = pWork->LenBase[length_code] + extra_length;
}
// In order to distinguish uncompressed byte from repetition length,
// we have to add 0x100 to the length.
return length_code + 0x100;
}
// Remove one bit from the input data
if(WasteBits(pWork, 1))
return 0x306;
// If the binary compression type, read 8 bits and return them as one byte.
if(pWork->ctype == CMP_BINARY)
{
unsigned int uncompressed_byte = pWork->bit_buff & 0xFF;
if(WasteBits(pWork, 8))
return 0x306;
return uncompressed_byte;
}
// When ASCII compression ...
if(pWork->bit_buff & 0xFF)
{
value = pWork->offs2C34[pWork->bit_buff & 0xFF];
if(value == 0xFF)
{
if(pWork->bit_buff & 0x3F)
{
if(WasteBits(pWork, 4))
return 0x306;
value = pWork->offs2D34[pWork->bit_buff & 0xFF];
}
else
{
if(WasteBits(pWork, 6))
return 0x306;
value = pWork->offs2E34[pWork->bit_buff & 0x7F];
}
}
}
else
{
if(WasteBits(pWork, 8))
return 0x306;
value = pWork->offs2EB4[pWork->bit_buff & 0xFF];
}
return WasteBits(pWork, pWork->ChBitsAsc[value]) ? 0x306 : value;
}
//-----------------------------------------------------------------------------
// Decodes the distance of the repetition, backwards relative to the
// current output buffer position
static unsigned int PKWAREAPI DecodeDist(TDcmpStruct * pWork, unsigned int rep_length)
{
unsigned int dist_pos_code; // Distance position code
unsigned int dist_pos_bits; // Number of bits of distance position
unsigned int distance; // Distance position
// Next 2-8 bits in the input buffer is the distance position code
dist_pos_code = pWork->DistPosCodes[pWork->bit_buff & 0xFF];
dist_pos_bits = pWork->DistBits[dist_pos_code];
if(WasteBits(pWork, dist_pos_bits))
return 0;
if(rep_length == 2)
{
// If the repetition is only 2 bytes length,
// then take 2 bits from the stream in order to get the distance
distance = (dist_pos_code << 2) | (pWork->bit_buff & 0x03);
if(WasteBits(pWork, 2))
return 0;
}
else
{
// If the repetition is more than 2 bytes length,
// then take "dsize_bits" bits in order to get the distance
distance = (dist_pos_code << pWork->dsize_bits) | (pWork->bit_buff & pWork->dsize_mask);
if(WasteBits(pWork, pWork->dsize_bits))
return 0;
}
return distance + 1;
}
static unsigned int PKWAREAPI Expand(TDcmpStruct * pWork)
{
unsigned int next_literal; // Literal decoded from the compressed data
unsigned int result; // Value to be returned
unsigned int copyBytes; // Number of bytes to copy to the output buffer
pWork->outputPos = 0x1000; // Initialize output buffer position
// Decode the next literal from the input data.
// The returned literal can either be an uncompressed byte (next_literal < 0x100)
// or an encoded length of the repeating byte sequence that
// is to be copied to the current buffer position
while((result = next_literal = DecodeLit(pWork)) < 0x305)
{
// If the literal is greater than 0x100, it holds length
// of repeating byte sequence
// literal of 0x100 means repeating sequence of 0x2 bytes
// literal of 0x101 means repeating sequence of 0x3 bytes
// ...
// literal of 0x305 means repeating sequence of 0x207 bytes
if(next_literal >= 0x100)
{
unsigned char * source;
unsigned char * target;
unsigned int rep_length; // Length of the repetition, in bytes
unsigned int minus_dist; // Backward distance to the repetition, relative to the current buffer position
// Get the length of the repeating sequence.
// Note that the repeating block may overlap the current output position,
// for example if there was a sequence of equal bytes
rep_length = next_literal - 0xFE;
// Get backward distance to the repetition
if((minus_dist = DecodeDist(pWork, rep_length)) == 0)
{
result = 0x306;
break;
}
// Target and source pointer
target = &pWork->out_buff[pWork->outputPos];
source = target - minus_dist;
// Update buffer output position
pWork->outputPos += rep_length;
// Copy the repeating sequence
while(rep_length-- > 0)
*target++ = *source++;
}
else
{
pWork->out_buff[pWork->outputPos++] = (unsigned char)next_literal;
}
// Flush the output buffer, if number of extracted bytes has reached the end
if(pWork->outputPos >= 0x2000)
{
// Copy decompressed data into user buffer
copyBytes = 0x1000;
pWork->write_buf((char *)&pWork->out_buff[0x1000], ©Bytes, pWork->param);
// Now copy the decompressed data to the first half of the buffer.
// This is needed because the decompression might reuse them as repetitions.
// Note that if the output buffer overflowed previously, the extra decompressed bytes
// are stored in "out_buff_overflow", and they will now be
// within decompressed part of the output buffer.
memmove(pWork->out_buff, &pWork->out_buff[0x1000], pWork->outputPos - 0x1000);
pWork->outputPos -= 0x1000;
}
}
// Flush any remaining decompressed bytes
copyBytes = pWork->outputPos - 0x1000;
pWork->write_buf((char *)&pWork->out_buff[0x1000], ©Bytes, pWork->param);
return result;
}
//-----------------------------------------------------------------------------
// Main exploding function.
unsigned int PKWAREAPI explode(
unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param),
void (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param),
char *work_buf,
void *param)
{
TDcmpStruct * pWork = (TDcmpStruct *)work_buf;
// Initialize work struct and load compressed data
// Note: The caller must zero the "work_buff" before passing it to explode
pWork->read_buf = read_buf;
pWork->write_buf = write_buf;
pWork->param = param;
pWork->in_pos = sizeof(pWork->in_buff);
pWork->in_bytes = pWork->read_buf((char *)pWork->in_buff, &pWork->in_pos, pWork->param);
if(pWork->in_bytes <= 4)
return CMP_BAD_DATA;
pWork->ctype = pWork->in_buff[0]; // Get the compression type (CMP_BINARY or CMP_ASCII)
pWork->dsize_bits = pWork->in_buff[1]; // Get the dictionary size
pWork->bit_buff = pWork->in_buff[2]; // Initialize 16-bit bit buffer
pWork->extra_bits = 0; // Extra (over 8) bits
pWork->in_pos = 3; // Position in input buffer
// Test for the valid dictionary size
if(4 > pWork->dsize_bits || pWork->dsize_bits > 6)
return CMP_INVALID_DICTSIZE;
pWork->dsize_mask = 0xFFFF >> (0x10 - pWork->dsize_bits); // Shifted by 'sar' instruction
if(pWork->ctype != CMP_BINARY)
{
if(pWork->ctype != CMP_ASCII)
return CMP_INVALID_MODE;
memcpy(pWork->ChBitsAsc, ChBitsAsc, sizeof(pWork->ChBitsAsc));
GenAscTabs(pWork);
}
memcpy(pWork->LenBits, LenBits, sizeof(pWork->LenBits));
GenDecodeTabs(pWork->LengthCodes, LenCode, pWork->LenBits, sizeof(pWork->LenBits));
memcpy(pWork->ExLenBits, ExLenBits, sizeof(pWork->ExLenBits));
memcpy(pWork->LenBase, LenBase, sizeof(pWork->LenBase));
memcpy(pWork->DistBits, DistBits, sizeof(pWork->DistBits));
GenDecodeTabs(pWork->DistPosCodes, DistCode, pWork->DistBits, sizeof(pWork->DistBits));
if(Expand(pWork) != 0x306)
return CMP_NO_ERROR;
return CMP_ABORT;
}
================================================
FILE: 3rdParty/PKWare/implode.cpp
================================================
/*****************************************************************************/
/* implode.cpp Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Implode function of PKWARE Data Compression library */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 11.04.03 1.00 Lad First version of implode.cpp */
/* 02.05.03 1.00 Lad Stress test done */
/* 22.04.10 1.01 Lad Documented */
/*****************************************************************************/
#include <assert.h>
#include <string.h>
#include "pkware.h"
#if ((1200 < _MSC_VER) && (_MSC_VER < 1400))
#pragma optimize("", off)
#endif
//-----------------------------------------------------------------------------
// Defines
#define MAX_REP_LENGTH 0x204 // The longest allowed repetition
static char CopyrightPkware[] = "PKWARE Data Compression Library for Win32\r\n"
"Copyright 1989-1995 PKWARE Inc. All Rights Reserved\r\n"
"Patent No. 5,051,745\r\n"
"PKWARE Data Compression Library Reg. U.S. Pat. and Tm. Off.\r\n"
"Version 1.11\r\n";
//-----------------------------------------------------------------------------
// Tables
static unsigned char DistBits[] =
{
0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08
};
static unsigned char DistCode[] =
{
0x03, 0x0D, 0x05, 0x19, 0x09, 0x11, 0x01, 0x3E, 0x1E, 0x2E, 0x0E, 0x36, 0x16, 0x26, 0x06, 0x3A,
0x1A, 0x2A, 0x0A, 0x32, 0x12, 0x22, 0x42, 0x02, 0x7C, 0x3C, 0x5C, 0x1C, 0x6C, 0x2C, 0x4C, 0x0C,
0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08,
0xF0, 0x70, 0xB0, 0x30, 0xD0, 0x50, 0x90, 0x10, 0xE0, 0x60, 0xA0, 0x20, 0xC0, 0x40, 0x80, 0x00
};
static unsigned char ExLenBits[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
};
static unsigned char LenBits[] =
{
0x03, 0x02, 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x07, 0x07
};
static unsigned char LenCode[] =
{
0x05, 0x03, 0x01, 0x06, 0x0A, 0x02, 0x0C, 0x14, 0x04, 0x18, 0x08, 0x30, 0x10, 0x20, 0x40, 0x00
};
static unsigned char ChBitsAsc[] =
{
0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x07, 0x0C, 0x0C, 0x07, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x04, 0x0A, 0x08, 0x0C, 0x0A, 0x0C, 0x0A, 0x08, 0x07, 0x07, 0x08, 0x09, 0x07, 0x06, 0x07, 0x08,
0x07, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x08, 0x08, 0x0C, 0x0B, 0x07, 0x09, 0x0B,
0x0C, 0x06, 0x07, 0x06, 0x06, 0x05, 0x07, 0x08, 0x08, 0x06, 0x0B, 0x09, 0x06, 0x07, 0x06, 0x06,
0x07, 0x0B, 0x06, 0x06, 0x06, 0x07, 0x09, 0x08, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x09, 0x0C, 0x08,
0x0C, 0x05, 0x06, 0x06, 0x06, 0x05, 0x06, 0x06, 0x06, 0x05, 0x0B, 0x07, 0x05, 0x06, 0x05, 0x05,
0x06, 0x0A, 0x05, 0x05, 0x05, 0x05, 0x08, 0x07, 0x08, 0x08, 0x0A, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0C, 0x0D,
0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D
};
static unsigned short ChCodeAsc[] =
{
0x0490, 0x0FE0, 0x07E0, 0x0BE0, 0x03E0, 0x0DE0, 0x05E0, 0x09E0,
0x01E0, 0x00B8, 0x0062, 0x0EE0, 0x06E0, 0x0022, 0x0AE0, 0x02E0,
0x0CE0, 0x04E0, 0x08E0, 0x00E0, 0x0F60, 0x0760, 0x0B60, 0x0360,
0x0D60, 0x0560, 0x1240, 0x0960, 0x0160, 0x0E60, 0x0660, 0x0A60,
0x000F, 0x0250, 0x0038, 0x0260, 0x0050, 0x0C60, 0x0390, 0x00D8,
0x0042, 0x0002, 0x0058, 0x01B0, 0x007C, 0x0029, 0x003C, 0x0098,
0x005C, 0x0009, 0x001C, 0x006C, 0x002C, 0x004C, 0x0018, 0x000C,
0x0074, 0x00E8, 0x0068, 0x0460, 0x0090, 0x0034, 0x00B0, 0x0710,
0x0860, 0x0031, 0x0054, 0x0011, 0x0021, 0x0017, 0x0014, 0x00A8,
0x0028, 0x0001, 0x0310, 0x0130, 0x003E, 0x0064, 0x001E, 0x002E,
0x0024, 0x0510, 0x000E, 0x0036, 0x0016, 0x0044, 0x0030, 0x00C8,
0x01D0, 0x00D0, 0x0110, 0x0048, 0x0610, 0x0150, 0x0060, 0x0088,
0x0FA0, 0x0007, 0x0026, 0x0006, 0x003A, 0x001B, 0x001A, 0x002A,
0x000A, 0x000B, 0x0210, 0x0004, 0x0013, 0x0032, 0x0003, 0x001D,
0x0012, 0x0190, 0x000D, 0x0015, 0x0005, 0x0019, 0x0008, 0x0078,
0x00F0, 0x0070, 0x0290, 0x0410, 0x0010, 0x07A0, 0x0BA0, 0x03A0,
0x0240, 0x1C40, 0x0C40, 0x1440, 0x0440, 0x1840, 0x0840, 0x1040,
0x0040, 0x1F80, 0x0F80, 0x1780, 0x0780, 0x1B80, 0x0B80, 0x1380,
0x0380, 0x1D80, 0x0D80, 0x1580, 0x0580, 0x1980, 0x0980, 0x1180,
0x0180, 0x1E80, 0x0E80, 0x1680, 0x0680, 0x1A80, 0x0A80, 0x1280,
0x0280, 0x1C80, 0x0C80, 0x1480, 0x0480, 0x1880, 0x0880, 0x1080,
0x0080, 0x1F00, 0x0F00, 0x1700, 0x0700, 0x1B00, 0x0B00, 0x1300,
0x0DA0, 0x05A0, 0x09A0, 0x01A0, 0x0EA0, 0x06A0, 0x0AA0, 0x02A0,
0x0CA0, 0x04A0, 0x08A0, 0x00A0, 0x0F20, 0x0720, 0x0B20, 0x0320,
0x0D20, 0x0520, 0x0920, 0x0120, 0x0E20, 0x0620, 0x0A20, 0x0220,
0x0C20, 0x0420, 0x0820, 0x0020, 0x0FC0, 0x07C0, 0x0BC0, 0x03C0,
0x0DC0, 0x05C0, 0x09C0, 0x01C0, 0x0EC0, 0x06C0, 0x0AC0, 0x02C0,
0x0CC0, 0x04C0, 0x08C0, 0x00C0, 0x0F40, 0x0740, 0x0B40, 0x0340,
0x0300, 0x0D40, 0x1D00, 0x0D00, 0x1500, 0x0540, 0x0500, 0x1900,
0x0900, 0x0940, 0x1100, 0x0100, 0x1E00, 0x0E00, 0x0140, 0x1600,
0x0600, 0x1A00, 0x0E40, 0x0640, 0x0A40, 0x0A00, 0x1200, 0x0200,
0x1C00, 0x0C00, 0x1400, 0x0400, 0x1800, 0x0800, 0x1000, 0x0000
};
//-----------------------------------------------------------------------------
// Macros
// Macro for calculating hash of the current byte pair.
// Note that most exact byte pair hash would be buffer[0] + buffer[1] << 0x08,
// but even this way gives nice indication of equal byte pairs, with significantly
// smaller size of the array that holds numbers of those hashes
#define BYTE_PAIR_HASH(buffer) ((buffer[0] * 4) + (buffer[1] * 5))
//-----------------------------------------------------------------------------
// Local functions
// Builds the "hash_to_index" table and "pair_hash_offsets" table.
// Every element of "hash_to_index" will contain lowest index to the
// "pair_hash_offsets" table, effectively giving offset of the first
// occurence of the given PAIR_HASH in the input data.
static void PKWAREAPI SortBuffer(TCmpStruct * pWork, unsigned char * buffer_begin, unsigned char * buffer_end)
{
unsigned short * phash_to_index;
unsigned char * buffer_ptr;
unsigned short total_sum = 0;
unsigned long byte_pair_hash; // Hash value of the byte pair
unsigned short byte_pair_offs; // Offset of the byte pair, relative to "work_buff"
// Zero the entire "phash_to_index" table
memset(pWork->phash_to_index, 0, sizeof(pWork->phash_to_index));
// Step 1: Count amount of each PAIR_HASH in the input buffer
// The table will look like this:
// offs 0x000: Number of occurences of PAIR_HASH 0
// offs 0x001: Number of occurences of PAIR_HASH 1
// ...
// offs 0x8F7: Number of occurences of PAIR_HASH 0x8F7 (the highest hash value)
for(buffer_ptr = buffer_begin; buffer_ptr < buffer_end; buffer_ptr++)
pWork->phash_to_index[BYTE_PAIR_HASH(buffer_ptr)]++;
// Step 2: Convert the table to the array of PAIR_HASH amounts.
// Each element contains count of PAIR_HASHes that is less or equal
// to element index
// The table will look like this:
// offs 0x000: Number of occurences of PAIR_HASH 0 or lower
// offs 0x001: Number of occurences of PAIR_HASH 1 or lower
// ...
// offs 0x8F7: Number of occurences of PAIR_HASH 0x8F7 or lower
for(phash_to_index = pWork->phash_to_index; phash_to_index < &pWork->phash_to_index_end; phash_to_index++)
{
total_sum = total_sum + phash_to_index[0];
phash_to_index[0] = total_sum;
}
// Step 3: Convert the table to the array of indexes.
// Now, each element contains index to the first occurence of given PAIR_HASH
for(buffer_end--; buffer_end >= buffer_begin; buffer_end--)
{
byte_pair_hash = BYTE_PAIR_HASH(buffer_end);
byte_pair_offs = (unsigned short)(buffer_end - pWork->work_buff);
pWork->phash_to_index[byte_pair_hash]--;
pWork->phash_offs[pWork->phash_to_index[byte_pair_hash]] = byte_pair_offs;
}
}
static void PKWAREAPI FlushBuf(TCmpStruct * pWork)
{
unsigned char save_ch1;
unsigned char save_ch2;
unsigned int size = 0x800;
pWork->write_buf(pWork->out_buff, &size, pWork->param);
save_ch1 = pWork->out_buff[0x800];
save_ch2 = pWork->out_buff[pWork->out_bytes];
pWork->out_bytes -= 0x800;
memset(pWork->out_buff, 0, sizeof(pWork->out_buff));
if(pWork->out_bytes != 0)
pWork->out_buff[0] = save_ch1;
if(pWork->out_bits != 0)
pWork->out_buff[pWork->out_bytes] = save_ch2;
}
static void PKWAREAPI OutputBits(TCmpStruct * pWork, unsigned int nbits, unsigned long bit_buff)
{
unsigned int out_bits;
// If more than 8 bits to output, do recursion
if(nbits > 8)
{
OutputBits(pWork, 8, bit_buff);
bit_buff >>= 8;
nbits -= 8;
}
// Add bits to the last out byte in out_buff;
out_bits = pWork->out_bits;
pWork->out_buff[pWork->out_bytes] |= (unsigned char)(bit_buff << out_bits);
pWork->out_bits += nbits;
// If 8 or more bits, increment number of bytes
if(pWork->out_bits > 8)
{
pWork->out_bytes++;
bit_buff >>= (8 - out_bits);
pWork->out_buff[pWork->out_bytes] = (unsigned char)bit_buff;
pWork->out_bits &= 7;
}
else
{
pWork->out_bits &= 7;
if(pWork->out_bits == 0)
pWork->out_bytes++;
}
// If there is enough compressed bytes, flush them
if(pWork->out_bytes >= 0x800)
FlushBuf(pWork);
}
// This function searches for a repetition
// (a previous occurence of the current byte sequence)
// Returns length of the repetition, and stores the backward distance
// to pWork structure.
static unsigned int PKWAREAPI FindRep(TCmpStruct * pWork, unsigned char * input_data)
{
unsigned short * phash_to_index; // Pointer into pWork->phash_to_index table
unsigned short * phash_offs; // Pointer to the table containing offsets of each PAIR_HASH
unsigned char * repetition_limit; // An eventual repetition must be at position below this pointer
unsigned char * prev_repetition; // Pointer to the previous occurence of the current PAIR_HASH
unsigned char * prev_rep_end; // End of the previous repetition
unsigned char * input_data_ptr;
unsigned short phash_offs_index; // Index to the table with PAIR_HASH positions
unsigned short min_phash_offs; // The lowest allowed hash offset
unsigned short offs_in_rep; // Offset within found repetition
unsigned int equal_byte_count; // Number of bytes that are equal to the previous occurence
unsigned int rep_length = 1; // Length of the found repetition
unsigned int rep_length2; // Secondary repetition
unsigned char pre_last_byte; // Last but one byte from a repetion
unsigned short di_val;
// Calculate the previous position of the PAIR_HASH
phash_to_index = pWork->phash_to_index + BYTE_PAIR_HASH(input_data);
min_phash_offs = (unsigned short)((input_data - pWork->work_buff) - pWork->dsize_bytes + 1);
phash_offs_index = phash_to_index[0];
// If the PAIR_HASH offset is below the limit, find a next one
phash_offs = pWork->phash_offs + phash_offs_index;
if(*phash_offs < min_phash_offs)
{
while(*phash_offs < min_phash_offs)
{
phash_offs_index++;
phash_offs++;
}
*phash_to_index = phash_offs_index;
}
// Get the first location of the PAIR_HASH,
// and thus the first eventual location of byte repetition
phash_offs = pWork->phash_offs + phash_offs_index;
prev_repetition = pWork->work_buff + phash_offs[0];
repetition_limit = input_data - 1;
// If the current PAIR_HASH was not encountered before,
// we haven't found a repetition.
if(prev_repetition >= repetition_limit)
return 0;
// We have found a match of a PAIR_HASH. Now we have to make sure
// that it is also a byte match, because PAIR_HASH is not unique.
// We compare the bytes and count the length of the repetition
input_data_ptr = input_data;
for(;;)
{
// If the first byte of the repetition and the so-far-last byte
// of the repetition are equal, we will compare the blocks.
if(*input_data_ptr == *prev_repetition && input_data_ptr[rep_length-1] == prev_repetition[rep_length-1])
{
// Skip the current byte
prev_repetition++;
input_data_ptr++;
equal_byte_count = 2;
// Now count how many more bytes are equal
while(equal_byte_count < MAX_REP_LENGTH)
{
prev_repetition++;
input_data_ptr++;
// Are the bytes different ?
if(*prev_repetition != *input_data_ptr)
break;
equal_byte_count++;
}
// If we found a repetition of at least the same length, take it.
// If there are multiple repetitions in the input buffer, this will
// make sure that we find the most recent one, which in turn allows
// us to store backward length in less amount of bits
input_data_ptr = input_data;
if(equal_byte_count >= rep_length)
{
// Calculate the backward distance of the repetition.
// Note that the distance is stored as decremented by 1
pWork->distance = (unsigned int)(input_data - prev_repetition + equal_byte_count - 1);
// Repetitions longer than 10 bytes will be stored in more bits,
// so they need a bit different handling
if((rep_length = equal_byte_count) > 10)
break;
}
}
// Move forward in the table of PAIR_HASH repetitions.
// There might be a more recent occurence of the same repetition.
phash_offs_index++;
phash_offs++;
prev_repetition = pWork->work_buff + phash_offs[0];
// If the next repetition is beyond the minimum allowed repetition, we are done.
if(prev_repetition >= repetition_limit)
{
// A repetition must have at least 2 bytes, otherwise it's not worth it
return (rep_length >= 2) ? rep_length : 0;
}
}
// If the repetition has max length of 0x204 bytes, we can't go any fuhrter
if(equal_byte_count == MAX_REP_LENGTH)
{
pWork->distance--;
return equal_byte_count;
}
// Check for possibility of a repetition that occurs at more recent position
phash_offs = pWork->phash_offs + phash_offs_index;
if(pWork->work_buff + phash_offs[1] >= repetition_limit)
return rep_length;
//
// The following part checks if there isn't a longer repetition at
// a latter offset, that would lead to better compression.
//
// Example of data that can trigger this optimization:
//
// "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEQQQQQQQQQQQQ"
// "XYZ"
// "EEEEEEEEEEEEEEEEQQQQQQQQQQQQ";
//
// Description of data in this buffer
// [0x00] Single byte "E"
// [0x01] Single byte "E"
// [0x02] Repeat 0x1E bytes from [0x00]
// [0x20] Single byte "X"
// [0x21] Single byte "Y"
// [0x22] Single byte "Z"
// [0x23] 17 possible previous repetitions of length at least 0x10 bytes:
// - Repetition of 0x10 bytes from [0x00] "EEEEEEEEEEEEEEEE"
// - Repetition of 0x10 bytes from [0x01] "EEEEEEEEEEEEEEEE"
// - Repetition of 0x10 bytes from [0x02] "EEEEEEEEEEEEEEEE"
// ...
// - Repetition of 0x10 bytes from [0x0F] "EEEEEEEEEEEEEEEE"
// - Repetition of 0x1C bytes from [0x10] "EEEEEEEEEEEEEEEEQQQQQQQQQQQQ"
// The last repetition is the best one.
//
pWork->offs09BC[0] = 0xFFFF;
pWork->offs09BC[1] = 0x0000;
di_val = 0;
// Note: I failed to figure out what does the table "offs09BC" mean.
// If anyone has an idea, let me know to zezula_at_volny_dot_cz
for(offs_in_rep = 1; offs_in_rep < rep_length; )
{
if(input_data[offs_in_rep] != input_data[di_val])
{
di_val = pWork->offs09BC[di_val];
if(di_val != 0xFFFF)
continue;
}
pWork->offs09BC[++offs_in_rep] = ++di_val;
}
//
// Now go through all the repetitions from the first found one
// to the current input data, and check if any of them migh be
// a start of a greater sequence match.
//
prev_repetition = pWork->work_buff + phash_offs[0];
prev_rep_end = prev_repetition + rep_length;
rep_length2 = rep_length;
for(;;)
{
rep_length2 = pWork->offs09BC[rep_length2];
if(rep_length2 == 0xFFFF)
rep_length2 = 0;
// Get the pointer to the previous repetition
phash_offs = pWork->phash_offs + phash_offs_index;
// Skip those repetitions that don't reach the end
// of the first found repetition
do
{
phash_offs++;
phash_offs_index++;
prev_repetition = pWork->work_buff + *phash_offs;
if(prev_repetition >= repetition_limit)
return rep_length;
}
while(prev_repetition + rep_length2 < prev_rep_end);
// Verify if the last but one byte from the repetition matches
// the last but one byte from the input data.
// If not, find a next repetition
pre_last_byte = input_data[rep_length - 2];
if(pre_last_byte == prev_repetition[rep_length - 2])
{
// If the new repetition reaches beyond the end
// of previously found repetition, reset the repetition length to zero.
if(prev_repetition + rep_length2 != prev_rep_end)
{
prev_rep_end = prev_repetition;
rep_length2 = 0;
}
}
else
{
phash_offs = pWork->phash_offs + phash_offs_index;
do
{
phash_offs++;
phash_offs_index++;
prev_repetition = pWork->work_buff + *phash_offs;
if(prev_repetition >= repetition_limit)
return rep_length;
}
while(prev_repetition[rep_length - 2] != pre_last_byte || prev_repetition[0] != input_data[0]);
// Reset the length of the repetition to 2 bytes only
prev_rep_end = prev_repetition + 2;
rep_length2 = 2;
}
// Find out how many more characters are equal to the first repetition.
while(*prev_rep_end == input_data[rep_length2])
{
if(++rep_length2 >= 0x204)
break;
prev_rep_end++;
}
// Is the newly found repetion at least as long as the previous one ?
if(rep_length2 >= rep_length)
{
// Calculate the distance of the new repetition
pWork->distance = (unsigned int)(input_data - prev_repetition - 1);
if((rep_length = rep_length2) == 0x204)
return rep_length;
// Update the additional elements in the "offs09BC" table
// to reflect new rep length
while(offs_in_rep < rep_length2)
{
if(input_data[offs_in_rep] != input_data[di_val])
{
di_val = pWork->offs09BC[di_val];
if(di_val != 0xFFFF)
continue;
}
pWork->offs09BC[++offs_in_rep] = ++di_val;
}
}
}
}
static void PKWAREAPI WriteCmpData(TCmpStruct * pWork)
{
unsigned char * input_data_end; // Pointer to the end of the input data
unsigned char * input_data = pWork->work_buff + pWork->dsize_bytes + 0x204;
unsigned int input_data_ended = 0; // If 1, then all data from the input stream have been already loaded
unsigned int save_rep_length; // Saved length of current repetition
unsigned int save_distance = 0; // Saved distance of current repetition
unsigned int rep_length; // Length of the found repetition
unsigned int phase = 0; //
// Store the compression type and dictionary size
pWork->out_buff[0] = (char)pWork->ctype;
pWork->out_buff[1] = (char)pWork->dsize_bits;
pWork->out_bytes = 2;
// Reset output buffer to zero
memset(&pWork->out_buff[2], 0, sizeof(pWork->out_buff) - 2);
pWork->out_bits = 0;
while(input_data_ended == 0)
{
unsigned int bytes_to_load = 0x1000;
int total_loaded = 0;
int bytes_loaded;
// Load the bytes from the input stream, up to 0x1000 bytes
while(bytes_to_load != 0)
{
bytes_loaded = pWork->read_buf((char *)pWork->work_buff + pWork->dsize_bytes + 0x204 + total_loaded,
&bytes_to_load,
pWork->param);
if(bytes_loaded == 0)
{
if(total_loaded == 0 && phase == 0)
goto __Exit;
input_data_ended = 1;
break;
}
else
{
bytes_to_load -= bytes_loaded;
total_loaded += bytes_loaded;
}
}
input_data_end = pWork->work_buff + pWork->dsize_bytes + total_loaded;
if(input_data_ended)
input_data_end += 0x204;
//
// Warning: The end of the buffer passed to "SortBuffer" is actually 2 bytes beyond
// valid data. It is questionable if this is actually a bug or not,
// but it might cause the compressed data output to be dependent on random bytes
// that are in the buffer.
// To prevent that, the calling application must always zero the compression
// buffer before passing it to "implode"
//
// Search the PAIR_HASHes of the loaded blocks. Also, include
// previously compressed data, if any.
switch(phase)
{
case 0:
SortBuffer(pWork, input_data, input_data_end + 1);
phase++;
if(pWork->dsize_bytes != 0x1000)
phase++;
break;
case 1:
SortBuffer(pWork, input_data - pWork->dsize_bytes + 0x204, input_data_end + 1);
phase++;
break;
default:
SortBuffer(pWork, input_data - pWork->dsize_bytes, input_data_end + 1);
break;
}
// Perform the compression of the current block
while(input_data < input_data_end)
{
// Find if the current byte sequence wasn't there before.
rep_length = FindRep(pWork, input_data);
while(rep_length != 0)
{
// If we found repetition of 2 bytes, that is 0x100 or fuhrter back,
// don't bother. Storing the distance of 0x100 bytes would actually
// take more space than storing the 2 bytes as-is.
if(rep_length == 2 && pWork->distance >= 0x100)
break;
// When we are at the end of the input data, we cannot allow
// the repetition to go past the end of the input data.
if(input_data_ended && input_data + rep_length > input_data_end)
{
// Shorten the repetition length so that it only covers valid data
rep_length = (unsigned long)(input_data_end - input_data);
if(rep_length < 2)
break;
// If we got repetition of 2 bytes, that is 0x100 or more backward, don't bother
if(rep_length == 2 && pWork->distance >= 0x100)
break;
goto __FlushRepetition;
}
if(rep_length >= 8 || input_data + 1 >= input_data_end)
goto __FlushRepetition;
// Try to find better repetition 1 byte later.
// Example: "ARROCKFORT" "AROCKFORT"
// When "input_data" points to the second string, FindRep
// returns the occurence of "AR". But there is longer repetition "ROCKFORT",
// beginning 1 byte after.
save_rep_length = rep_length;
save_distance = pWork->distance;
rep_length = FindRep(pWork, input_data + 1);
// Only use the new repetition if it's length is greater than the previous one
if(rep_length > save_rep_length)
{
// If the new repetition if only 1 byte better
// and the previous distance is less than 0x80 bytes, use the previous repetition
if(rep_length > save_rep_length + 1 || save_distance > 0x80)
{
// Flush one byte, so that input_data will point to the secondary repetition
OutputBits(pWork, pWork->nChBits[*input_data], pWork->nChCodes[*input_data]);
input_data++;
continue;
}
}
// Revert to the previous repetition
rep_length = save_rep_length;
pWork->distance = save_distance;
__FlushRepetition:
OutputBits(pWork, pWork->nChBits[rep_length + 0xFE], pWork->nChCodes[rep_length + 0xFE]);
if(rep_length == 2)
{
OutputBits(pWork, pWork->dist_bits[pWork->distance >> 2],
pWork->dist_codes[pWork->distance >> 2]);
OutputBits(pWork, 2, pWork->distance & 3);
}
else
{
OutputBits(pWork, pWork->dist_bits[pWork->distance >> pWork->dsize_bits],
pWork->dist_codes[pWork->distance >> pWork->dsize_bits]);
OutputBits(pWork, pWork->dsize_bits, pWork->dsize_mask & pWork->distance);
}
// Move the begin of the input data by the length of the repetition
input_data += rep_length;
goto _00402252;
}
// If there was no previous repetition for the current position in the input data,
// just output the 9-bit literal for the one character
OutputBits(pWork, pWork->nChBits[*input_data], pWork->nChCodes[*input_data]);
input_data++;
_00402252:;
}
if(input_data_ended == 0)
{
input_data -= 0x1000;
memmove(pWork->work_buff, pWork->work_buff + 0x1000, pWork->dsize_bytes + 0x204);
}
}
__Exit:
// Write the termination literal
OutputBits(pWork, pWork->nChBits[0x305], pWork->nChCodes[0x305]);
if(pWork->out_bits != 0)
pWork->out_bytes++;
pWork->write_buf(pWork->out_buff, &pWork->out_bytes, pWork->param);
return;
}
//-----------------------------------------------------------------------------
// Main imploding function
unsigned int PKWAREAPI implode(
unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param),
void (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param),
char *work_buf,
void *param,
unsigned int *type,
unsigned int *dsize)
{
TCmpStruct * pWork = (TCmpStruct *)work_buf;
unsigned int nChCode;
unsigned int nCount;
unsigned int i;
int nCount2;
// Fill the work buffer information
// Note: The caller must zero the "work_buff" before passing it to implode
pWork->read_buf = read_buf;
pWork->write_buf = write_buf;
pWork->dsize_bytes = *dsize;
pWork->ctype = *type;
pWork->param = param;
pWork->dsize_bits = 4;
pWork->dsize_mask = 0x0F;
// Test dictionary size
switch(*dsize)
{
case CMP_IMPLODE_DICT_SIZE3: // 0x1000 bytes
pWork->dsize_bits++;
pWork->dsize_mask |= 0x20;
// No break here !!!
case CMP_IMPLODE_DICT_SIZE2: // 0x800 bytes
pWork->dsize_bits++;
pWork->dsize_mask |= 0x10;
// No break here !!!
case CMP_IMPLODE_DICT_SIZE1: // 0x400
break;
default:
return CMP_INVALID_DICTSIZE;
}
// Test the compression type
switch(*type)
{
case CMP_BINARY: // We will compress data with binary compression type
for(nChCode = 0, nCount = 0; nCount < 0x100; nCount++)
{
pWork->nChBits[nCount] = 9;
pWork->nChCodes[nCount] = (unsigned short)nChCode;
nChCode = (nChCode & 0x0000FFFF) + 2;
}
break;
case CMP_ASCII: // We will compress data with ASCII compression type
for(nCount = 0; nCount < 0x100; nCount++)
{
pWork->nChBits[nCount] = (unsigned char )(ChBitsAsc[nCount] + 1);
pWork->nChCodes[nCount] = (unsigned short)(ChCodeAsc[nCount] * 2);
}
break;
default:
return CMP_INVALID_MODE;
}
for(i = 0; i < 0x10; i++)
{
if(1 << ExLenBits[i])
{
for(nCount2 = 0; nCount2 < (1 << ExLenBits[i]); nCount2++)
{
pWork->nChBits[nCount] = (unsigned char)(ExLenBits[i] + LenBits[i] + 1);
pWork->nChCodes[nCount] = (unsigned short)((nCount2 << (LenBits[i] + 1)) | ((LenCode[i] & 0xFFFF00FF) * 2) | 1);
nCount++;
}
}
}
// Copy the distance codes and distance bits and perform the compression
memcpy(&pWork->dist_codes, DistCode, sizeof(DistCode));
memcpy(&pWork->dist_bits, DistBits, sizeof(DistBits));
WriteCmpData(pWork);
return CMP_NO_ERROR;
}
================================================
FILE: 3rdParty/PKWare/pkware.h
================================================
/*****************************************************************************/
/* pkware.h Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Header file for PKWARE Data Compression Library */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 31.03.03 1.00 Lad The first version of pkware.h */
/*****************************************************************************/
#ifndef __PKWARE_H__
#define __PKWARE_H__
//-----------------------------------------------------------------------------
// Defines
#define CMP_BINARY 0 // Binary compression
#define CMP_ASCII 1 // Ascii compression
#define CMP_NO_ERROR 0
#define CMP_INVALID_DICTSIZE 1
#define CMP_INVALID_MODE 2
#define CMP_BAD_DATA 3
#define CMP_ABORT 4
#define CMP_IMPLODE_DICT_SIZE1 1024 // Dictionary size of 1024
#define CMP_IMPLODE_DICT_SIZE2 2048 // Dictionary size of 2048
#define CMP_IMPLODE_DICT_SIZE3 4096 // Dictionary size of 4096
//-----------------------------------------------------------------------------
// Define calling convention
#ifndef PKWAREAPI
#ifdef WIN32
#define PKWAREAPI __cdecl // Use for normal __cdecl calling
#else
#define PKWAREAPI
#endif
#endif
//-----------------------------------------------------------------------------
// Internal structures
// Compression structure
typedef struct
{
unsigned int distance; // 0000: Backward distance of the currently found repetition, decreased by 1
unsigned int out_bytes; // 0004: # bytes available in out_buff
unsigned int out_bits; // 0008: # of bits available in the last out byte
unsigned int dsize_bits; // 000C: Number of bits needed for dictionary size. 4 = 0x400, 5 = 0x800, 6 = 0x1000
unsigned int dsize_mask; // 0010: Bit mask for dictionary. 0x0F = 0x400, 0x1F = 0x800, 0x3F = 0x1000
unsigned int ctype; // 0014: Compression type (CMP_ASCII or CMP_BINARY)
unsigned int dsize_bytes; // 0018: Dictionary size in bytes
unsigned char dist_bits[0x40]; // 001C: Distance bits
unsigned char dist_codes[0x40]; // 005C: Distance codes
unsigned char nChBits[0x306]; // 009C: Table of literal bit lengths to be put to the output stream
unsigned short nChCodes[0x306]; // 03A2: Table of literal codes to be put to the output stream
unsigned short offs09AE; // 09AE:
void * param; // 09B0: User parameter
unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param); // 9B4
void (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param); // 9B8
unsigned short offs09BC[0x204]; // 09BC:
unsigned long offs0DC4; // 0DC4:
unsigned short phash_to_index[0x900]; // 0DC8: Array of indexes (one for each PAIR_HASH) to the "pair_hash_offsets" table
unsigned short phash_to_index_end; // 1FC8: End marker for "phash_to_index" table
char out_buff[0x802]; // 1FCA: Compressed data
unsigned char work_buff[0x2204]; // 27CC: Work buffer
// + DICT_OFFSET => Dictionary
// + UNCMP_OFFSET => Uncompressed data
unsigned short phash_offs[0x2204]; // 49D0: Table of offsets for each PAIR_HASH
} TCmpStruct;
#define CMP_BUFFER_SIZE sizeof(TCmpStruct) // Size of compression structure.
// Defined as 36312 in pkware header file
// Decompression structure
typedef struct
{
unsigned long offs0000; // 0000
unsigned long ctype; // 0004: Compression type (CMP_BINARY or CMP_ASCII)
unsigned long outputPos; // 0008: Position in output buffer
unsigned long dsize_bits; // 000C: Dict size (4, 5, 6 for 0x400, 0x800, 0x1000)
unsigned long dsize_mask; // 0010: Dict size bitmask (0x0F, 0x1F, 0x3F for 0x400, 0x800, 0x1000)
unsigned long bit_buff; // 0014: 16-bit buffer for processing input data
unsigned long extra_bits; // 0018: Number of extra (above 8) bits in bit buffer
unsigned int in_pos; // 001C: Position in in_buff
unsigned long in_bytes; // 0020: Number of bytes in input buffer
void * param; // 0024: Custom parameter
unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param); // Pointer to function that reads data from the input stream
void (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param);// Pointer to function that writes data to the output stream
unsigned char out_buff[0x2204]; // 0030: Output circle buffer.
// 0x0000 - 0x0FFF: Previous uncompressed data, kept for repetitions
// 0x1000 - 0x1FFF: Currently decompressed data
// 0x2000 - 0x2203: Reserve space for the longest possible repetition
unsigned char in_buff[0x800]; // 2234: Buffer for data to be decompressed
unsigned char DistPosCodes[0x100]; // 2A34: Table of distance position codes
unsigned char LengthCodes[0x100]; // 2B34: Table of length codes
unsigned char offs2C34[0x100]; // 2C34: Buffer for
unsigned char offs2D34[0x100]; // 2D34: Buffer for
unsigned char offs2E34[0x80]; // 2EB4: Buffer for
unsigned char offs2EB4[0x100]; // 2EB4: Buffer for
unsigned char ChBitsAsc[0x100]; // 2FB4: Buffer for
unsigned char DistBits[0x40]; // 30B4: Numbers of bytes to skip copied block length
unsigned char LenBits[0x10]; // 30F4: Numbers of bits for skip copied block length
unsigned char ExLenBits[0x10]; // 3104: Number of valid bits for copied block
unsigned short LenBase[0x10]; // 3114: Buffer for
} TDcmpStruct;
#define EXP_BUFFER_SIZE sizeof(TDcmpStruct) // Size of decompression structure
// Defined as 12596 in pkware headers
//-----------------------------------------------------------------------------
// Public functions
#ifdef __cplusplus
extern "C" {
#endif
unsigned int PKWAREAPI implode(
unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param),
void (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param),
char *work_buf,
void *param,
unsigned int *type,
unsigned int *dsize);
unsigned int PKWAREAPI explode(
unsigned int (PKWAREAPI *read_buf)(char *buf, unsigned int *size, void *param),
void (PKWAREAPI *write_buf)(char *buf, unsigned int *size, void *param),
char *work_buf,
void *param);
#ifdef __cplusplus
} // End of 'extern "C"' declaration
#endif
#endif // __PKWARE_H__
================================================
FILE: 3rdParty/PicoSHA2/picosha2.h
================================================
/*
The MIT License (MIT)
Copyright (C) 2017 okdshin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef PICOSHA2_H
#define PICOSHA2_H
// picosha2:20140213
#ifndef PICOSHA2_BUFFER_SIZE_FOR_INPUT_ITERATOR
#define PICOSHA2_BUFFER_SIZE_FOR_INPUT_ITERATOR \
1048576 //=1024*1024: default is 1MB memory
#endif
#include <algorithm>
#include <cassert>
#include <iterator>
#include <sstream>
#include <vector>
#include <fstream>
namespace picosha2 {
typedef unsigned long word_t;
typedef unsigned char byte_t;
static const size_t k_digest_size = 32;
namespace detail {
inline byte_t mask_8bit(byte_t x) { return x & 0xff; }
inline word_t mask_32bit(word_t x) { return x & 0xffffffff; }
const word_t add_constant[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};
const word_t initial_message_digest[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372,
0xa54ff53a, 0x510e527f, 0x9b05688c,
0x1f83d9ab, 0x5be0cd19};
inline word_t ch(word_t x, word_t y, word_t z) { return (x & y) ^ ((~x) & z); }
inline word_t maj(word_t x, word_t y, word_t z) {
return (x & y) ^ (x & z) ^ (y & z);
}
inline word_t rotr(word_t x, std::size_t n) {
assert(n < 32);
return mask_32bit((x >> n) | (x << (32 - n)));
}
inline word_t bsig0(word_t x) { return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); }
inline word_t bsig1(word_t x) { return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); }
inline word_t shr(word_t x, std::size_t n) {
assert(n < 32);
return x >> n;
}
inline word_t ssig0(word_t x) { return rotr(x, 7) ^ rotr(x, 18) ^ shr(x, 3); }
inline word_t ssig1(word_t x) { return rotr(x, 17) ^ rotr(x, 19) ^ shr(x, 10); }
template <typename RaIter1, typename RaIter2>
void hash256_block(RaIter1 message_digest, RaIter2 first, RaIter2 last) {
assert(first + 64 == last);
static_cast<void>(last); // for avoiding unused-variable warning
word_t w[64];
std::fill(w, w + 64, 0);
for (std::size_t i = 0; i < 16; ++i) {
w[i] = (static_cast<word_t>(mask_8bit(*(first + i * 4))) << 24) |
(static_cast<word_t>(mask_8bit(*(first + i * 4 + 1))) << 16) |
(static_cast<word_t>(mask_8bit(*(first + i * 4 + 2))) << 8) |
(static_cast<word_t>(mask_8bit(*(first + i * 4 + 3))));
}
for (std::size_t i = 16; i < 64; ++i) {
w[i] = mask_32bit(ssig1(w[i - 2]) + w[i - 7] + ssig0(w[i - 15]) +
w[i - 16]);
}
word_t a = *message_digest;
word_t b = *(message_digest + 1);
word_t c = *(message_digest + 2);
word_t d = *(message_digest + 3);
word_t e = *(message_digest + 4);
word_t f = *(message_digest + 5);
word_t g = *(message_digest + 6);
word_t h = *(message_digest + 7);
for (std::size_t i = 0; i < 64; ++i) {
word_t temp1 = h + bsig1(e) + ch(e, f, g) + add_constant[i] + w[i];
word_t temp2 = bsig0(a) + maj(a, b, c);
h = g;
g = f;
f = e;
e = mask_32bit(d + temp1);
d = c;
c = b;
b = a;
a = mask_32bit(temp1 + temp2);
}
*message_digest += a;
*(message_digest + 1) += b;
*(message_digest + 2) += c;
*(message_digest + 3) += d;
*(message_digest + 4) += e;
*(message_digest + 5) += f;
*(message_digest + 6) += g;
*(message_digest + 7) += h;
for (std::size_t i = 0; i < 8; ++i) {
*(message_digest + i) = mask_32bit(*(message_digest + i));
}
}
} // namespace detail
template <typename InIter>
void output_hex(InIter first, InIter last, std::ostream& os) {
os.setf(std::ios::hex, std::ios::basefield);
while (first != last) {
os.width(2);
os.fill('0');
os << static_cast<unsigned int>(*first);
++first;
}
os.setf(std::ios::dec, std::ios::basefield);
}
template <typename InIter>
void bytes_to_hex_string(InIter first, InIter last, std::string& hex_str) {
std::ostringstream oss;
output_hex(first, last, oss);
hex_str.assign(oss.str());
}
template <typename InContainer>
void bytes_to_hex_string(const InContainer& bytes, std::string& hex_str) {
bytes_to_hex_string(bytes.begin(), bytes.end(), hex_str);
}
template <typename InIter>
std::string bytes_to_hex_string(InIter first, InIter last) {
std::string hex_str;
bytes_to_hex_string(first, last, hex_str);
return hex_str;
}
template <typename InContainer>
std::string bytes_to_hex_string(const InContainer& bytes) {
std::string hex_str;
bytes_to_hex_string(bytes, hex_str);
return hex_str;
}
class hash256_one_by_one {
public:
hash256_one_by_one() { init(); }
void init() {
buffer_.clear();
std::fill(data_length_digits_, data_length_digits_ + 4, 0);
std::copy(detail::initial_message_digest,
detail::initial_message_digest + 8, h_);
}
template <typename RaIter>
void process(RaIter first, RaIter last) {
add_to_data_length(static_cast<word_t>(std::distance(first, last)));
std::copy(first, last, std::back_inserter(buffer_));
std::size_t i = 0;
for (; i + 64 <= buffer_.size(); i += 64) {
detail::hash256_block(h_, buffer_.begin() + i,
buffer_.begin() + i + 64);
}
buffer_.erase(buffer_.begin(), buffer_.begin() + i);
}
void finish() {
byte_t temp[64];
std::fill(temp, temp + 64, 0);
std::size_t remains = buffer_.size();
std::copy(buffer_.begin(), buffer_.end(), temp);
temp[remains] = 0x80;
if (remains > 55) {
std::fill(temp + remains + 1, temp + 64, 0);
detail::hash256_block(h_, temp, temp + 64);
std::fill(temp, temp + 64 - 4, 0);
} else {
std::fill(temp + remains + 1, temp + 64 - 4, 0);
}
write_data_bit_length(&(temp[56]));
detail::hash256_block(h_, temp, temp + 64);
}
template <typename OutIter>
void get_hash_bytes(OutIter first, OutIter last) const {
for (const word_t* iter = h_; iter != h_ + 8; ++iter) {
for (std::size_t i = 0; i < 4 && first != last; ++i) {
*(first++) = detail::mask_8bit(
static_cast<byte_t>((*iter >> (24 - 8 * i))));
}
}
}
private:
void add_to_data_length(word_t n) {
word_t carry = 0;
data_length_digits_[0] += n;
for (std::size_t i = 0; i < 4; ++i) {
data_length_digits_[i] += carry;
if (data_length_digits_[i] >= 65536u) {
carry = data_length_digits_[i] >> 16;
data_length_digits_[i] &= 65535u;
} else {
break;
}
}
}
void write_data_bit_length(byte_t* begin) {
word_t data_bit_length_digits[4];
std::copy(data_length_digits_, data_length_digits_ + 4,
data_bit_length_digits);
// convert byte length to bit length (multiply 8 or shift 3 times left)
word_t carry = 0;
for (std::size_t i = 0; i < 4; ++i) {
word_t before_val = data_bit_length_digits[i];
data_bit_length_digits[i] <<= 3;
data_bit_length_digits[i] |= carry;
data_bit_length_digits[i] &= 65535u;
carry = (before_val >> (16 - 3)) & 65535u;
}
// write data_bit_length
for (int i = 3; i >= 0; --i) {
(*begin++) = static_cast<byte_t>(data_bit_length_digits[i] >> 8);
(*begin++) = static_cast<byte_t>(data_bit_length_digits[i]);
}
}
std::vector<byte_t> buffer_;
word_t data_length_digits_[4]; // as 64bit integer (16bit x 4 integer)
word_t h_[8];
};
inline void get_hash_hex_string(const hash256_one_by_one& hasher,
std::string& hex_str) {
byte_t hash[k_digest_size];
hasher.get_hash_bytes(hash, hash + k_digest_size);
return bytes_to_hex_string(hash, hash + k_digest_size, hex_str);
}
inline std::string get_hash_hex_string(const hash256_one_by_one& hasher) {
std::string hex_str;
get_hash_hex_string(hasher, hex_str);
return hex_str;
}
namespace impl {
template <typename RaIter, typename OutIter>
void hash256_impl(RaIter first, RaIter last, OutIter first2, OutIter last2, int,
std::random_access_iterator_tag) {
hash256_one_by_one hasher;
// hasher.init();
hasher.process(first, last);
hasher.finish();
hasher.get_hash_bytes(first2, last2);
}
template <typename InputIter, typename OutIter>
void hash256_impl(InputIter first, InputIter last, OutIter first2,
OutIter last2, int buffer_size, std::input_iterator_tag) {
std::vector<byte_t> buffer(buffer_size);
hash256_one_by_one hasher;
// hasher.init();
while (first != last) {
int size = buffer_size;
for (int i = 0; i != buffer_size; ++i, ++first) {
if (first == last) {
size = i;
break;
}
buffer[i] = *first;
}
hasher.process(buffer.begin(), buffer.begin() + size);
}
hasher.finish();
hasher.get_hash_bytes(first2, last2);
}
}
template <typename InIter, typename OutIter>
void hash256(InIter first, InIter last, OutIter first2, OutIter last2,
int buffer_size = PICOSHA2_BUFFER_SIZE_FOR_INPUT_ITERATOR) {
picosha2::impl::hash256_impl(
first, last, first2, last2, buffer_size,
typename std::iterator_traits<InIter>::iterator_category());
}
template <typename InIter, typename OutContainer>
void hash256(InIter first, InIter last, OutContainer& dst) {
hash256(first, last, dst.begin(), dst.end());
}
template <typename InContainer, typename OutIter>
void hash256(const InContainer& src, OutIter first, OutIter last) {
hash256(src.begin(), src.end(), first, last);
}
template <typename InContainer, typename OutContainer>
void hash256(const InContainer& src, OutContainer& dst) {
hash256(src.begin(), src.end(), dst.begin(), dst.end());
}
template <typename InIter>
void hash256_hex_string(InIter first, InIter last, std::string& hex_str) {
byte_t hashed[k_digest_size];
hash256(first, last, hashed, hashed + k_digest_size);
std::ostringstream oss;
output_hex(hashed, hashed + k_digest_size, oss);
hex_str.assign(oss.str());
}
template <typename InIter>
std::string hash256_hex_string(InIter first, InIter last) {
std::string hex_str;
hash256_hex_string(first, last, hex_str);
return hex_str;
}
inline void hash256_hex_string(const std::string& src, std::string& hex_str) {
hash256_hex_string(src.begin(), src.end(), hex_str);
}
template <typename InContainer>
void hash256_hex_string(const InContainer& src, std::string& hex_str) {
hash256_hex_string(src.begin(), src.end(), hex_str);
}
template <typename InContainer>
std::string hash256_hex_string(const InContainer& src) {
return hash256_hex_string(src.begin(), src.end());
}
template<typename OutIter>void hash256(std::ifstream& f, OutIter first, OutIter last){
hash256(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>(), first,last);
}
}// namespace picosha2
#endif // PICOSHA2_H
================================================
FILE: 3rdParty/SDL2/CMake/FindSDL2.cmake
================================================
if(UWP_LIB AND NOT TARGET SDL2::SDL2-static)
set(SDL_BUILD_TYPE "Release")
if(CMAKE_BUILD_TYPE MATCHES "Debug")
set(SDL_BUILD_TYPE "Debug")
endif()
set(SDL2_LIBRARY "${UWP_SDL2_DIR}/VisualC-WinRT/x64/${SDL_BUILD_TYPE}/SDL-UWP")
set(SDL2_INCLUDE_DIR "${UWP_SDL2_DIR}/include")
add_library(SDL2_lib STATIC IMPORTED)
set_property(TARGET SDL2_lib PROPERTY IMPORTED_LOCATION "${SDL2_LIBRARY}/SDL2.lib")
set_property(TARGET SDL2_lib PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR})
add_library(SDL2::SDL2-static ALIAS SDL2_lib)
mark_as_advanced(SDL2_INCLUDE_DIR SDL2_LIBRARY)
set(SDL2_LIBRARIES ${SDL2_LIBRARY})
set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR})
endif()
================================================
FILE: 3rdParty/SDL2/CMakeLists.txt
================================================
if(DEVILUTIONX_STATIC_SDL2)
set(BUILD_SHARED_LIBS OFF)
set(SDL_SHARED OFF)
set(SDL_STATIC ON)
if(PIE)
set(SDL_STATIC_PIC ON)
endif()
else()
set(BUILD_SHARED_LIBS ON)
set(SDL_SHARED ON)
set(SDL_STATIC OFF)
endif()
set(SDL_TEST_ENABLED_BY_DEFAULT OFF)
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
if(TARGET_PLATFORM STREQUAL "dos")
set(DOS ON)
FetchContent_Declare(SDL2
# branch: dos-vbe-rebase
URL https://github.com/diasurgical/SDL/archive/20b47a62a12f0c7be4052fb5b32eb21d709d6f06.tar.gz
URL_HASH MD5=6e77a1d1a79d7f0dd6231b39515a341f
)
else()
FetchContent_Declare(SDL2
URL https://github.com/libsdl-org/SDL/releases/download/release-2.32.8/SDL2-2.32.8.tar.gz
URL_HASH SHA256=0ca83e9c9b31e18288c7ec811108e58bac1f1bb5ec6577ad386830eac51c787e
)
endif()
FetchContent_MakeAvailable_ExcludeFromAll(SDL2)
================================================
FILE: 3rdParty/SDL3/CMakeLists.txt
================================================
if(DEVILUTIONX_STATIC_SDL3)
set(BUILD_SHARED_LIBS OFF)
set(SDL_SHARED OFF)
set(SDL_STATIC ON)
if(PIE)
set(SDL_STATIC_PIC ON)
endif()
else()
set(BUILD_SHARED_LIBS ON)
set(SDL_SHARED ON)
set(SDL_STATIC OFF)
endif()
set(SDL_TEST_ENABLED_BY_DEFAULT OFF)
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
FetchContent_Declare(SDL3
URL https://github.com/libsdl-org/SDL/archive/f173fd28f04cb64ae054d6a97edb5d33925f539b.tar.gz
URL_HASH SHA256=f7501d84c1a7f168567c002f4e1db4f220c4a34c51f7fa7d199962d0ed5fb42c
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL3)
================================================
FILE: 3rdParty/SDL3_image/CMakeLists.txt
================================================
include(functions/dependency_options)
if(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)
find_package(PNG QUIET)
if(PNG_FOUND)
message("-- Found png ${PNG_VERSION_STRING}")
else()
message("-- Suitable system png package not found, will use png from source")
set(DEVILUTIONX_SYSTEM_LIBPNG OFF)
endif()
endif()
dependency_options("libpng" DEVILUTIONX_SYSTEM_LIBPNG ON DEVILUTIONX_STATIC_LIBPNG)
if(DEVILUTIONX_SYSTEM_LIBPNG)
find_package(PNG REQUIRED)
else()
add_subdirectory(../libpng libpng)
endif()
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
if(DEVILUTIONX_STATIC_SDL_IMAGE)
set(BUILD_SHARED_LIBS OFF)
else()
set(BUILD_SHARED_LIBS ON)
endif()
set(SDLIMAGE_BACKEND_STB OFF)
set(SDLIMAGE_AVIF OFF)
set(SDLIMAGE_BMP OFF)
set(SDLIMAGE_GIF OFF)
set(SDLIMAGE_JPG OFF)
set(SDLIMAGE_JXL OFF)
set(SDLIMAGE_LBM OFF)
set(SDLIMAGE_PCX OFF)
set(SDLIMAGE_PNG ON)
set(SDLIMAGE_PNM OFF)
set(SDLIMAGE_QOI OFF)
set(SDLIMAGE_SVG OFF)
set(SDLIMAGE_TGA OFF)
set(SDLIMAGE_TIF OFF)
set(SDLIMAGE_WEBP OFF)
set(SDLIMAGE_XCF OFF)
set(SDLIMAGE_XPM OFF)
set(SDLIMAGE_XV OFF)
set(SDLIMAGE_AVIF_SAVE OFF)
set(SDLIMAGE_JPG_SAVE OFF)
set(SDLIMAGE_PNG_SAVE ON)
FetchContent_Declare_ExcludeFromAll(SDL_image
URL https://github.com/libsdl-org/SDL_image/releases/download/release-3.2.4/SDL3_image-3.2.4.tar.gz
URL_HASH SHA256=a725bd6d04261fdda0dd8d950659e1dc15a8065d025275ef460d32ae7dcfc182
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_image)
================================================
FILE: 3rdParty/SDL3_mixer/CMakeLists.txt
================================================
include(functions/dependency_options)
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
if(DEVILUTIONX_STATIC_SDL_MIXER)
set(BUILD_SHARED_LIBS OFF)
else()
set(BUILD_SHARED_LIBS ON)
endif()
set(SDLMIXER_AIFF OFF)
set(SDLMIXER_WAVE ON)
set(SDLMIXER_VOC OFF)
set(SDLMIXER_AU OFF)
set(SDLMIXER_FLAC_LIBFLAC OFF)
set(SDLMIXER_FLAC_DRFLAC OFF)
set(SDLMIXER_GME OFF)
set(SDLMIXER_MOD_XMP OFF)
set(SDLMIXER_MP3_DRMP3 ON)
set(SDLMIXER_MP3_MPG123 OFF)
set(SDLMIXER_MIDI_FLUIDSYNTH OFF)
set(SDLMIXER_MIDI_TIMIDITY OFF)
set(SDLMIXER_OPUS OFF)
set(SDLMIXER_VORBIS_STB OFF)
set(SDLMIXER_VORBIS_VORBISFILE OFF)
set(SDLMIXER_VORBIS_TREMOR OFF)
set(SDLMIXER_WAVPACK OFF)
FetchContent_Declare_ExcludeFromAll(SDL_mixer
URL https://github.com/libsdl-org/SDL_mixer/archive/7d37755016f0952c32c9483c556d8608da7ee82f.tar.gz
URL_HASH SHA256=2fa63f1eb623e3acd0012a461771eb93332e2026205f9487da3a3a75bc790111
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_mixer)
================================================
FILE: 3rdParty/SDL_audiolib/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
if(DEVILUTIONX_STATIC_SDL_AUDIOLIB)
set(BUILD_SHARED_LIBS OFF)
else()
set(BUILD_SHARED_LIBS ON)
endif()
# Will use our `fmt::fmt` target if it exists.
set(WITH_SYSTEM_FMTLIB ON)
# No need for the libsamplerate resampler:
set(USE_RESAMP_SRC OFF)
# No need for the SOX resampler:
set(USE_RESAMP_SOXR OFF)
# Exceptions are only used for fatal errors which we can't handle anyway:
set(DISABLE_EXCEPTIONS ON)
# We do not need any of the audio formats except WAV and mp3:
set(USE_DEC_DRWAV ON)
set(USE_DEC_DRFLAC OFF)
set(USE_DEC_OPENMPT OFF)
set(USE_DEC_XMP OFF)
set(USE_DEC_MODPLUG OFF)
set(USE_DEC_MPG123 OFF)
set(USE_DEC_SNDFILE OFF)
set(USE_DEC_LIBVORBIS OFF)
set(USE_DEC_LIBOPUSFILE OFF)
set(USE_DEC_FLAC OFF)
set(USE_DEC_MUSEPACK OFF)
set(USE_DEC_FLUIDSYNTH OFF)
set(USE_DEC_BASSMIDI OFF)
set(USE_DEC_WILDMIDI OFF)
set(USE_DEC_ADLMIDI OFF)
set(USE_DEC_DRMP3 ON)
include(FetchContent)
FetchContent_Declare_ExcludeFromAll(SDL_audiolib
URL https://github.com/realnc/SDL_audiolib/archive/cc1bb6af8d4cf5e200259072bde1edd1c8c5137e.tar.gz
URL_HASH MD5=0e8174264ac9c6b314c6b2d9a5f72efd)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_audiolib)
add_library(SDL_audiolib::SDL_audiolib ALIAS SDL_audiolib)
# External library, disable warnings.
target_compile_options(SDL_audiolib PRIVATE -w)
================================================
FILE: 3rdParty/SDL_image/CMakeLists.txt
================================================
include(functions/dependency_options)
if(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)
find_package(PNG QUIET)
if(PNG_FOUND)
message("-- Found png ${PNG_VERSION_STRING}")
else()
message("-- Suitable system png package not found, will use png from source")
set(DEVILUTIONX_SYSTEM_LIBPNG OFF)
endif()
endif()
dependency_options("libpng" DEVILUTIONX_SYSTEM_LIBPNG ON DEVILUTIONX_STATIC_LIBPNG)
if(DEVILUTIONX_SYSTEM_LIBPNG)
find_package(PNG REQUIRED)
else()
add_subdirectory(../libpng libpng)
endif()
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
FetchContent_Declare_ExcludeFromAll(SDL_image
URL https://github.com/libsdl-org/SDL_image/archive/refs/tags/release-2.0.5.tar.gz
URL_HASH MD5=3446ed7ee3c700065dcb33426a9b0c6e
)
FetchContent_MakeAvailable_ExcludeFromAll(SDL_image)
if(DEVILUTIONX_STATIC_SDL_IMAGE)
add_library(SDL_image STATIC ${CMAKE_CURRENT_LIST_DIR}/IMG.c ${sdl_image_SOURCE_DIR}/IMG_png.c)
else()
add_library(SDL_image SHARED ${CMAKE_CURRENT_LIST_DIR}/IMG.c ${sdl_image_SOURCE_DIR}/IMG_png.c)
endif()
target_include_directories(SDL_image PRIVATE ${sdl_image_SOURCE_DIR})
target_compile_definitions(SDL_image PRIVATE LOAD_PNG SDL_IMAGE_USE_COMMON_BACKEND)
target_link_libraries(SDL_image PNG::PNG)
if(TARGET SDL2::SDL2 AND NOT (DEVILUTIONX_STATIC_SDL2 AND TARGET SDL2::SDL2-static))
target_link_libraries(SDL_image SDL2::SDL2)
add_library(SDL2::SDL2_image ALIAS SDL_image)
elseif(TARGET SDL2::SDL2-static)
target_link_libraries(SDL_image SDL2::SDL2-static)
add_library(SDL2::SDL2_image ALIAS SDL_image)
endif()
================================================
FILE: 3rdParty/SDL_image/IMG.c
================================================
/*
SDL_image: An example image loading library for use with SDL
Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/* This is a heavily reduced version of IMG.c including only PNG support */
#include "SDL_image.h"
extern int IMG_InitPNG(void);
extern void IMG_QuitPNG(void);
static int initialized = 0;
int IMG_Init(int flags) {
int result = 0;
/* Passing 0 returns the currently initialized loaders */
if (!flags) {
return initialized;
}
if (flags & IMG_INIT_PNG) {
if ((initialized & IMG_INIT_PNG) || IMG_InitPNG() == 0) {
result |= IMG_INIT_PNG;
}
}
initialized |= result;
return result;
}
void IMG_Quit() {
if (initialized & IMG_INIT_PNG) {
IMG_QuitPNG();
}
initialized = 0;
}
================================================
FILE: 3rdParty/SheenBidi/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
set(BUILD_TESTING OFF)
set(ASAN OFF)
set(UBSAN OFF)
FetchContent_Declare_ExcludeFromAll(SheenBidi
URL https://github.com/Tehreer/SheenBidi/archive/refs/tags/v2.9.0.tar.gz
URL_HASH MD5=2c22cfad93a52afa7bd25ad56a3a4089
)
FetchContent_MakeAvailable_ExcludeFromAll(SheenBidi)
================================================
FILE: 3rdParty/asio/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
FetchContent_Declare_ExcludeFromAll(asio
URL https://github.com/diasurgical/asio/archive/4bcf552fcea3e1ae555dde2ab33bc9fa6770da4d.tar.gz
URL_HASH MD5=7ffee993fc21b1115abf485958d03ac8
)
FetchContent_MakeAvailable_ExcludeFromAll(asio)
add_library(asio STATIC ${CMAKE_CURRENT_LIST_DIR}/asio_handle_exception.cpp)
target_compile_definitions(asio PUBLIC ASIO_NO_EXCEPTIONS)
target_include_directories(asio PUBLIC ${asio_SOURCE_DIR}/asio/include ${CMAKE_CURRENT_LIST_DIR})
if(NINTENDO_3DS OR NINTENDO_SWITCH)
include(asio_defs REQUIRED)
endif()
================================================
FILE: 3rdParty/asio/asio_handle_exception.cpp
================================================
#include <string_view>
#define ErrAsio(message) devilution::ErrDlg("ASIO Error", message, __FILE__, __LINE__)
namespace devilution {
extern void ErrDlg(const char* title, std::string_view error, std::string_view logFilePath, int logLineNr);
} // namespace devilution
namespace asio::detail {
void fatal_exception(const char* message)
{
ErrAsio(message);
}
} // namespace asio::detail
================================================
FILE: 3rdParty/asio/asio_handle_exception.hpp
================================================
#pragma once
#include <asio/detail/throw_exception.hpp>
namespace asio::detail {
void fatal_exception(const char *message);
template <typename Exception>
void throw_exception(
const Exception &e
ASIO_SOURCE_LOCATION_PARAM)
{
fatal_exception(e.what());
}
} // namespace asio::detail
================================================
FILE: 3rdParty/benchmark/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
FetchContent_Declare_ExcludeFromAll(
benchmark
URL https://github.com/google/benchmark/archive/refs/tags/v1.8.5.tar.gz
URL_HASH MD5=708d91ce255e8af4c1d7dfec50dff178
)
set(INSTALL_GTEST OFF)
set(BENCHMARK_ENABLE_TESTING OFF)
set(BENCHMARK_ENABLE_EXCEPTIONS OFF)
set(BENCHMARK_ENABLE_WERROR OFF)
set(BENCHMARK_ENABLE_INSTALL OFF)
FetchContent_MakeAvailable_ExcludeFromAll(benchmark)
================================================
FILE: 3rdParty/bzip2/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
FetchContent_Declare_ExcludeFromAll(bzip2
GIT_REPOSITORY https://gitlab.com/bzip2/bzip2
GIT_TAG bzip2-1.0.8
)
FetchContent_MakeAvailable_ExcludeFromAll(bzip2)
if(DEVILUTIONX_STATIC_BZIP2)
set(_lib_type STATIC)
else()
set(_lib_type SHARED)
endif()
add_library(BZip2 ${_lib_type}
${bzip2_SOURCE_DIR}/blocksort.c
${bzip2_SOURCE_DIR}/bzlib.c
${bzip2_SOURCE_DIR}/compress.c
${bzip2_SOURCE_DIR}/crctable.c
${bzip2_SOURCE_DIR}/decompress.c
${bzip2_SOURCE_DIR}/huffman.c
${bzip2_SOURCE_DIR}/randtable.c
${bzip2_SOURCE_DIR}/bzlib.h
${bzip2_SOURCE_DIR}/bzlib_private.h
${CMAKE_CURRENT_LIST_DIR}/bz_internal_error.c
)
target_compile_definitions(BZip2 PRIVATE -DBZ_NO_STDIO)
target_include_directories(BZip2 PUBLIC ${bzip2_SOURCE_DIR})
add_library(BZip2::BZip2 ALIAS BZip2)
================================================
FILE: 3rdParty/bzip2/bz_internal_error.c
================================================
#include <stdio.h>
void bz_internal_error(int errcode) {
fprintf(stderr, "BZip2 fatal error %d\n", errcode);
}
================================================
FILE: 3rdParty/discord/.editorconfig
================================================
[*.patch]
end_of_line = lf
================================================
FILE: 3rdParty/discord/CMakeLists.txt
================================================
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)
find_package(Patch REQUIRED)
set(Discord_SDK_URL "https://dl-game-sdk.discordapp.net/3.2.1/discord_game_sdk.zip")
set(Discord_SDK_HASH "73e5e1b3f8413a2c7184ef17476822f2")
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
FetchContent_Declare_ExcludeFromAll(discordsrc
URL ${Discord_SDK_URL}
URL_HASH MD5=${Discord_SDK_HASH}
)
else()
FetchContent_Declare_ExcludeFromAll(discordsrc
URL ${Discord_SDK_URL}
URL_HASH MD5=${Discord_SDK_HASH}
PATCH_COMMAND "${Patch_EXECUTABLE}" -p1 -N < "${CMAKE_CURRENT_LIST_DIR}/fixes.patch" || true
)
endif()
FetchContent_MakeAvailable_ExcludeFromAll(discordsrc)
file(GLOB discord_SRCS ${discordsrc_SOURCE_DIR}/cpp/*.cpp)
add_library(discord STATIC ${discord_SRCS})
target_include_directories(discord INTERFACE "${discordsrc_SOURCE_DIR}/..")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/aarch64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/x86")
else()
set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/x86_64")
endif()
set(DISCORD_SHARED_LIB_FILENAME "discord_game_sdk${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(DISCORD_SHARED_LIB "${DISCORD_LIB_DIR}/${DISCORD_SHARED_LIB_FILENAME}")
set(DISCORD_SHARED_LIB "${DISCORD_SHARED_LIB}" PARENT_SCOPE)
find_library(
DISCORD_LIB
NAMES "${DISCORD_SHARED_LIB_FILENAME}"
PATHS "${DISCORD_LIB_DIR}"
REQUIRED
NO_DEFAULT_PATH
NO_CMAKE_FIND_ROOT_PATH
)
message("-- 📚 discord_game_sdk: ${DISCORD_LIB}")
# Copy the dll so that tests and Debug builds can find it on Windows.
# We also need it at this location to link to `discord_game_sdk.so` rather
# than `_deps/discordsrc-src/lib/x86_64/discord_game_sdk.so` on Linux.
file(COPY "${DISCORD_SHARED_LIB}" DESTINATION "${CMAKE_BINARY_DIR}")
add_library(discord_game_sdk SHARED IMPORTED GLOBAL)
set_target_properties(discord_game_sdk PROPERTIES
IMPORTED_IMPLIB "${DISCORD_LIB}"
IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/${DISCORD_SHARED_LIB_FILENAME}"
)
================================================
FILE: 3rdParty/discord/fixes.patch
================================================
From 767aff84177e8805933ac4f980d9fc36a8b02af6 Mon Sep 17 00:00:00 2001
From: Gleb Mazovetskiy <glex.spb@gmail.com>
Date: Sat, 21 Jan 2023 13:09:38 +0000
Subject: [PATCH] Various fixes
1. Replaces `#include <Windows.h>` with `#include <windows.h>`
for compatibility with case-sensitive file systems (e.g. MinGW
cross-compilation on a Linux host).
2. Adds missing `#include <cstdint>` to `cpp/types.h`.
3. Fixes calling convention for callback lambdas.
Signed-off-by: Gleb Mazovetskiy <glex.spb@gmail.com>
---
c/discord_game_sdk.h | 2 +-
cpp/achievement_manager.cpp | 4 ++--
cpp/activity_manager.cpp | 10 +++++-----
cpp/application_manager.cpp | 6 +++---
cpp/core.cpp | 2 +-
cpp/ffi.h | 2 +-
cpp/image_manager.cpp | 2 +-
cpp/lobby_manager.cpp | 22 +++++++++++-----------
cpp/overlay_manager.cpp | 12 ++++++------
cpp/relationship_manager.cpp | 2 +-
cpp/storage_manager.cpp | 6 +++---
cpp/store_manager.cpp | 6 +++---
cpp/types.h | 4 +++-
cpp/user_manager.cpp | 2 +-
cpp/voice_manager.cpp | 2 +-
examples/c/main.c | 2 +-
16 files changed, 44 insertions(+), 42 deletions(-)
diff --git a/c/discord_game_sdk.h b/c/discord_game_sdk.h
index 4618756..f4c209a 100644
--- a/c/discord_game_sdk.h
+++ b/c/discord_game_sdk.h
@@ -2,7 +2,7 @@
#define _DISCORD_GAME_SDK_H_
#ifdef _WIN32
-#include <Windows.h>
+#include <windows.h>
#include <dxgi.h>
#endif
diff --git a/cpp/achievement_manager.cpp b/cpp/achievement_manager.cpp
index 43a6d4c..9e92ad6 100644
--- a/cpp/achievement_manager.cpp
+++ b/cpp/achievement_manager.cpp
@@ -34,7 +34,7 @@ void AchievementManager::SetUserAchievement(Snowflake achievementId,
std::uint8_t percentComplete,
std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -50,7 +50,7 @@ void AchievementManager::SetUserAchievement(Snowflake achievementId,
void AchievementManager::FetchUserAchievements(std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
diff --git a/cpp/activity_manager.cpp b/cpp/activity_manager.cpp
index 3c20074..074f784 100644
--- a/cpp/activity_manager.cpp
+++ b/cpp/activity_manager.cpp
@@ -84,7 +84,7 @@ Result ActivityManager::RegisterSteam(std::uint32_t steamId)
void ActivityManager::UpdateActivity(Activity const& activity, std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -102,7 +102,7 @@ void ActivityManager::UpdateActivity(Activity const& activity, std::function<voi
void ActivityManager::ClearActivity(std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -119,7 +119,7 @@ void ActivityManager::SendRequestReply(UserId userId,
ActivityJoinRequestReply reply,
std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -141,7 +141,7 @@ void ActivityManager::SendInvite(UserId userId,
char const* content,
std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -161,7 +161,7 @@ void ActivityManager::SendInvite(UserId userId,
void ActivityManager::AcceptInvite(UserId userId, std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
diff --git a/cpp/application_manager.cpp b/cpp/application_manager.cpp
index 0e05f3f..98dac16 100644
--- a/cpp/application_manager.cpp
+++ b/cpp/application_manager.cpp
@@ -13,7 +13,7 @@ namespace discord {
void ApplicationManager::ValidateOrExit(std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -47,7 +47,7 @@ void ApplicationManager::GetCurrentBranch(char branch[4096])
void ApplicationManager::GetOAuth2Token(std::function<void(Result, OAuth2Token const&)> callback)
{
static auto wrapper =
- [](void* callbackData, EDiscordResult result, DiscordOAuth2Token* oauth2Token) -> void {
+ [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordOAuth2Token* oauth2Token) -> void {
std::unique_ptr<std::function<void(Result, OAuth2Token const&)>> cb(
reinterpret_cast<std::function<void(Result, OAuth2Token const&)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -62,7 +62,7 @@ void ApplicationManager::GetOAuth2Token(std::function<void(Result, OAuth2Token c
void ApplicationManager::GetTicket(std::function<void(Result, char const*)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result, char const* data) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, char const* data) -> void {
std::unique_ptr<std::function<void(Result, char const*)>> cb(
reinterpret_cast<std::function<void(Result, char const*)>*>(callbackData));
if (!cb || !(*cb)) {
diff --git a/cpp/core.cpp b/cpp/core.cpp
index 110c9ef..56b2801 100644
--- a/cpp/core.cpp
+++ b/cpp/core.cpp
@@ -59,7 +59,7 @@ void Core::SetLogHook(LogLevel minLevel, std::function<void(LogLevel, char const
setLogHook_.DisconnectAll();
setLogHook_.Connect(std::move(hook));
static auto wrapper =
- [](void* callbackData, EDiscordLogLevel level, char const* message) -> void {
+ [] DISCORD_CALLBACK (void* callbackData, EDiscordLogLevel level, char const* message) -> void {
auto cb(reinterpret_cast<decltype(setLogHook_)*>(callbackData));
if (!cb) {
return;
diff --git a/cpp/ffi.h b/cpp/ffi.h
index 4a21057..3d2dd9d 100644
--- a/cpp/ffi.h
+++ b/cpp/ffi.h
@@ -2,7 +2,7 @@
#define _DISCORD_GAME_SDK_H_
#ifdef _WIN32
-#include <Windows.h>
+#include <windows.h>
#include <dxgi.h>
#endif
diff --git a/cpp/image_manager.cpp b/cpp/image_manager.cpp
index 03b1db4..c90f337 100644
--- a/cpp/image_manager.cpp
+++ b/cpp/image_manager.cpp
@@ -16,7 +16,7 @@ void ImageManager::Fetch(ImageHandle handle,
std::function<void(Result, ImageHandle)> callback)
{
static auto wrapper =
- [](void* callbackData, EDiscordResult result, DiscordImageHandle handleResult) -> void {
+ [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordImageHandle handleResult) -> void {
std::unique_ptr<std::function<void(Result, ImageHandle)>> cb(
reinterpret_cast<std::function<void(Result, ImageHandle)>*>(callbackData));
if (!cb || !(*cb)) {
diff --git a/cpp/lobby_manager.cpp b/cpp/lobby_manager.cpp
index 3a95b1a..4000032 100644
--- a/cpp/lobby_manager.cpp
+++ b/cpp/lobby_manager.cpp
@@ -167,7 +167,7 @@ void LobbyManager::CreateLobby(LobbyTransaction const& transaction,
std::function<void(Result, Lobby const&)> callback)
{
static auto wrapper =
- [](void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
+ [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
std::unique_ptr<std::function<void(Result, Lobby const&)>> cb(
reinterpret_cast<std::function<void(Result, Lobby const&)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -185,7 +185,7 @@ void LobbyManager::UpdateLobby(LobbyId lobbyId,
LobbyTransaction const& transaction,
std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -204,7 +204,7 @@ void LobbyManager::UpdateLobby(LobbyId lobbyId,
void LobbyManager::DeleteLobby(LobbyId lobbyId, std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -222,7 +222,7 @@ void LobbyManager::ConnectLobby(LobbyId lobbyId,
std::function<void(Result, Lobby const&)> callback)
{
static auto wrapper =
- [](void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
+ [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
std::unique_ptr<std::function<void(Result, Lobby const&)>> cb(
reinterpret_cast<std::function<void(Result, Lobby const&)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -240,7 +240,7 @@ void LobbyManager::ConnectLobbyWithActivitySecret(
std::function<void(Result, Lobby const&)> callback)
{
static auto wrapper =
- [](void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
+ [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result, DiscordLobby* lobby) -> void {
std::unique_ptr<std::function<void(Result, Lobby const&)>> cb(
reinterpret_cast<std::function<void(Result, Lobby const&)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -256,7 +256,7 @@ void LobbyManager::ConnectLobbyWithActivitySecret(
void LobbyManager::DisconnectLobby(LobbyId lobbyId, std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -403,7 +403,7 @@ void LobbyManager::UpdateMember(LobbyId lobbyId,
LobbyMemberTransaction const& transaction,
std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -426,7 +426,7 @@ void LobbyManager::SendLobbyMessage(LobbyId lobbyId,
std::uint32_t dataLength,
std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -452,7 +452,7 @@ Result LobbyManager::GetSearchQuery(LobbySearchQuery* query)
void LobbyManager::Search(LobbySearchQuery const& query, std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result) -> void {
std::unique_ptr<std::function<void(Result)>> cb(
reinterpret_cast<std::function<void(Result)>*>(callbackData));
if (!cb || !(*cb)) {
@@ -487,7 +487,7 @@ Result LobbyManager::GetLobbyId(std::int32_t index, LobbyId* lobbyId)
void LobbyManager::ConnectVoice(LobbyId lobbyId, std::function<void(Result)> callback)
{
- static auto wrapper = [](void* callbackData, EDiscordResult result) -> void {
+ static auto wrapper = [] DISCORD_CALLBACK (void* callbackData, EDiscordResult result)
gitextract_h4wrmfpe/ ├── .devcontainer/ │ ├── Dockerfile │ ├── devcontainer.json │ └── fluxbox/ │ ├── apps │ └── menu ├── .editorconfig ├── .gdbinit ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ └── feature_request.yml │ ├── dependabot.yml │ └── workflows/ │ ├── 3ds.yml │ ├── Android.yml │ ├── Linux_aarch64.yml │ ├── Linux_x86.yml │ ├── Linux_x86_64.yml │ ├── Linux_x86_64_SDL1.yml │ ├── Linux_x86_64_SDL3_test.yml │ ├── Linux_x86_64_test.yml │ ├── PS4.yml │ ├── PS5.yml │ ├── Windows9x_MinGW.yml │ ├── Windows_MSVC_x64.yml │ ├── Windows_MinGW_x64.yml │ ├── Windows_MinGW_x86.yml │ ├── Windows_XP_32bit.yml │ ├── amiga-m68k.yml │ ├── cache-cleanup.yml │ ├── clang-format-check.yml │ ├── clang-tidy-check.yml │ ├── iOS.yml │ ├── macOS_arm64.yml │ ├── macOS_x86_64.yml │ ├── miyoo_mini_release.yml │ ├── opendingux_release.yml │ ├── retrofw_release.yml │ ├── s390x_qemu_big_endian_tests.yml │ ├── src_dist_release.yml │ ├── switch.yml │ ├── translations.yml │ ├── vita.yml │ ├── xbox_nxdk.yml │ └── xbox_one.yml ├── .gitignore ├── .lldbinit ├── 3rdParty/ │ ├── Lua/ │ │ └── CMakeLists.txt │ ├── PKWare/ │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── PKWare.vcxproj │ │ ├── PKWare.vcxproj.filters │ │ ├── Pkware.dsp │ │ ├── explode.cpp │ │ ├── implode.cpp │ │ └── pkware.h │ ├── PicoSHA2/ │ │ └── picosha2.h │ ├── SDL2/ │ │ ├── CMake/ │ │ │ └── FindSDL2.cmake │ │ └── CMakeLists.txt │ ├── SDL3/ │ │ └── CMakeLists.txt │ ├── SDL3_image/ │ │ └── CMakeLists.txt │ ├── SDL3_mixer/ │ │ └── CMakeLists.txt │ ├── SDL_audiolib/ │ │ └── CMakeLists.txt │ ├── SDL_image/ │ │ ├── CMakeLists.txt │ │ └── IMG.c │ ├── SheenBidi/ │ │ └── CMakeLists.txt │ ├── asio/ │ │ ├── CMakeLists.txt │ │ ├── asio_handle_exception.cpp │ │ └── asio_handle_exception.hpp │ ├── benchmark/ │ │ └── CMakeLists.txt │ ├── bzip2/ │ │ ├── CMakeLists.txt │ │ └── bz_internal_error.c │ ├── discord/ │ │ ├── .editorconfig │ │ ├── CMakeLists.txt │ │ └── fixes.patch │ ├── find_steam_game/ │ │ └── CMakeLists.txt │ ├── googletest/ │ │ └── CMakeLists.txt │ ├── libfmt/ │ │ └── CMakeLists.txt │ ├── libmpq/ │ │ ├── CMakeLists.txt │ │ └── config.h │ ├── libpng/ │ │ └── CMakeLists.txt │ ├── libsmackerdec/ │ │ └── CMakeLists.txt │ ├── libsodium/ │ │ └── CMakeLists.txt │ ├── libzt/ │ │ └── CMakeLists.txt │ ├── magic_enum/ │ │ └── CMakeLists.txt │ ├── sol2/ │ │ ├── CMakeLists.txt │ │ └── sol_config/ │ │ └── sol/ │ │ ├── config.hpp │ │ └── debug.hpp │ ├── tl/ │ │ ├── CMakeLists.txt │ │ ├── expected.hpp │ │ └── function_ref.hpp │ ├── tolk/ │ │ └── CMakeLists.txt │ ├── unordered_dense/ │ │ ├── 0001-Disable-PMR-support-for-mingw-std-threads-compat.patch │ │ └── CMakeLists.txt │ └── zlib/ │ ├── CMake/ │ │ └── FindZLIB.cmake │ └── CMakeLists.txt ├── Brewfile ├── CMake/ │ ├── Assets.cmake │ ├── Definitions.cmake │ ├── Dependencies.cmake │ ├── Mods.cmake │ ├── MoldLinker.cmake │ ├── Platforms.cmake │ ├── Tests.cmake │ ├── VcPkgManifestFeatures.cmake │ ├── finders/ │ │ ├── FindGperftools.cmake │ │ ├── FindSDL2_image.cmake │ │ ├── FindSDL_audiolib.cmake │ │ ├── FindSpeechd.cmake │ │ ├── Findsimpleini.cmake │ │ └── Findsodium.cmake │ ├── functions/ │ │ ├── FetchContent_ExcludeFromAll_backport.cmake │ │ ├── copy_files.cmake │ │ ├── dependency_options.cmake │ │ ├── devilutionx_library.cmake │ │ ├── emscripten_system_library.cmake │ │ ├── genex.cmake │ │ ├── git.cmake │ │ ├── object_libraries.cmake │ │ ├── set_relative_file_macro.cmake │ │ └── trim_retired_files.cmake │ └── platforms/ │ ├── .editorconfig │ ├── aarch64-linux-gnu-clang-static-libc++.toolchain.cmake │ ├── aarch64-linux-gnu.toolchain.cmake │ ├── amiga.cmake │ ├── android.cmake │ ├── cpigamesh.cmake │ ├── ctr/ │ │ ├── Tools3DS.cmake │ │ ├── asio_defs.cmake │ │ ├── bin2s_header.h.in │ │ └── modules/ │ │ ├── FindCITRO3D.cmake │ │ ├── FindCTRULIB.cmake │ │ ├── FindPNG.cmake │ │ ├── FindZLIB.cmake │ │ ├── LibFindMacros.cmake │ │ └── try_add_imported_target.cmake │ ├── debian-cross-pkg-config.sh │ ├── djcpp.toolchain.cmake │ ├── dos.cmake │ ├── emscripten.cmake │ ├── gkd350h.cmake │ ├── haiku.cmake │ ├── ios.cmake │ ├── ios.toolchain.cmake │ ├── lepus.cmake │ ├── linux_i386.toolchain.cmake │ ├── macos_tiger.cmake │ ├── macports/ │ │ └── finders/ │ │ └── FindMacportsLegacySupport.cmake │ ├── mingw/ │ │ └── zt_defs.cmake │ ├── mingw9x/ │ │ └── include/ │ │ └── windef.h │ ├── mingw9x.toolchain.cmake │ ├── mingwcc.toolchain.cmake │ ├── mingwcc64.toolchain.cmake │ ├── miyoo_mini.cmake │ ├── n3ds.cmake │ ├── ps4.cmake │ ├── retrofw.cmake │ ├── rg350.cmake │ ├── rg99.cmake │ ├── switch/ │ │ └── asio_defs.cmake │ ├── switch.cmake │ ├── threads-stub/ │ │ └── FindThreads.cmake │ ├── uwp_lib.cmake │ ├── vita.cmake │ ├── windows.cmake │ ├── windows9x.cmake │ ├── windowsXP.cmake │ ├── xbox_nxdk/ │ │ └── finders/ │ │ ├── FindPNG.cmake │ │ ├── FindSDL2.cmake │ │ └── FindZLIB.cmake │ └── xbox_nxdk.cmake ├── CMakeLists.txt ├── CMakeSettings.json ├── CODE_OF_CONDUCT.md ├── LICENSE.md ├── Packaging/ │ ├── OpenDingux/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build-all.sh │ │ ├── build.sh │ │ ├── devilutionx-from-disk.sh │ │ ├── devilutionx-umount-opk-and-run.sh │ │ ├── gkd350h-manual.txt │ │ ├── gkd350h.desktop │ │ ├── lepus-manual.txt │ │ ├── lepus.desktop │ │ ├── package-opk.sh │ │ ├── profile-generate.sh │ │ ├── retrofw-manual.txt │ │ ├── retrofw.desktop │ │ ├── rg350-manual.txt │ │ ├── rg350.desktop │ │ ├── rg99-manual.txt │ │ ├── rg99-pgo.md │ │ ├── rg99.desktop │ │ └── targets.sh │ ├── amiga/ │ │ ├── Dockerfile │ │ ├── devilutionx.info │ │ └── prep.sh │ ├── apple/ │ │ ├── AppIcon.icns │ │ ├── AppIcon_128.icns │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ └── png2icns_tiger/ │ │ ├── .gitignore │ │ ├── CMakeLists.txt │ │ ├── png2icns_tiger.c │ │ └── run.sh │ ├── cpi-gamesh/ │ │ ├── __init__.py │ │ ├── build.sh │ │ └── readme.md │ ├── ctr/ │ │ └── template.rsf │ ├── emscripten/ │ │ └── index.html │ ├── haiku/ │ │ └── devilutionX.rdef.in │ ├── miyoo_mini/ │ │ ├── build.sh │ │ ├── setup_toolchain.sh │ │ ├── skeleton_MiniUI/ │ │ │ └── Diablo/ │ │ │ ├── Diablo.m3u │ │ │ ├── launch.sh │ │ │ └── readme.txt │ │ ├── skeleton_OnionOS/ │ │ │ ├── Roms/ │ │ │ │ └── PORTS/ │ │ │ │ ├── Games/ │ │ │ │ │ └── Diablo (devilutionX)/ │ │ │ │ │ └── _required_files.txt │ │ │ │ └── Shortcuts/ │ │ │ │ └── Action/ │ │ │ │ └── Diablo (DevilutionX).notfound │ │ │ └── readme.txt │ │ └── toolchainfile.cmake │ ├── nix/ │ │ ├── AppImage.sh │ │ ├── AppRun │ │ ├── LinuxReleasePackaging.sh │ │ ├── README.txt │ │ ├── debian-cross-aarch64-prep.sh │ │ ├── debian-cross-i386-prep.sh │ │ ├── debian-host-prep.sh │ │ ├── devilutionx-hellfire.desktop │ │ ├── devilutionx.6 │ │ ├── devilutionx.desktop │ │ └── devilutionx.metainfo.xml │ ├── pi/ │ │ └── README.txt │ ├── ps4/ │ │ ├── README.md │ │ └── build.sh │ ├── ps5/ │ │ ├── README.md │ │ ├── build.sh │ │ └── homebrew.js │ ├── resources/ │ │ ├── LICENSE.CC-BY.txt │ │ ├── LICENSE.OFL.txt │ │ ├── LICENSE.zlib.txt │ │ └── README-SDL.txt │ ├── switch/ │ │ ├── README.txt │ │ └── packages.txt │ ├── vita/ │ │ ├── README.txt │ │ └── sce_sys/ │ │ └── livearea/ │ │ └── contents/ │ │ └── template.xml │ ├── windows/ │ │ ├── CMakePresets.json │ │ ├── README.txt │ │ ├── devilutionx.exe.manifest │ │ ├── devilutionx.rc │ │ ├── dos-prep.sh │ │ ├── mingw-prep.sh │ │ └── mingw9x-prep.sh │ ├── xbox-one/ │ │ └── build.bat │ └── xbox_nxdk/ │ └── xbe_logo.pgm ├── README.md ├── Source/ │ ├── .clang-format │ ├── .clang-tidy │ ├── CMakeLists.txt │ ├── DiabloUI/ │ │ ├── button.cpp │ │ ├── button.h │ │ ├── credits.cpp │ │ ├── credits_lines.cpp │ │ ├── credits_lines.h │ │ ├── diabloui.cpp │ │ ├── diabloui.h │ │ ├── dialogs.cpp │ │ ├── dialogs.h │ │ ├── hero/ │ │ │ ├── selhero.cpp │ │ │ └── selhero.h │ │ ├── mainmenu.cpp │ │ ├── multi/ │ │ │ ├── selconn.cpp │ │ │ ├── selgame.cpp │ │ │ └── selgame.h │ │ ├── progress.cpp │ │ ├── scrollbar.cpp │ │ ├── scrollbar.h │ │ ├── selok.cpp │ │ ├── selok.h │ │ ├── selstart.cpp │ │ ├── selstart.h │ │ ├── selyesno.cpp │ │ ├── selyesno.h │ │ ├── settingsmenu.cpp │ │ ├── settingsmenu.h │ │ ├── support_lines.cpp │ │ ├── support_lines.h │ │ ├── text_input.cpp │ │ ├── text_input.hpp │ │ ├── title.cpp │ │ ├── ui_flags.hpp │ │ └── ui_item.h │ ├── appfat.cpp │ ├── appfat.h │ ├── automap.cpp │ ├── automap.h │ ├── capture.cpp │ ├── capture.h │ ├── codec.cpp │ ├── codec.h │ ├── control/ │ │ ├── control.hpp │ │ ├── control_chat.cpp │ │ ├── control_chat.hpp │ │ ├── control_chat_commands.cpp │ │ ├── control_chat_commands.hpp │ │ ├── control_flasks.cpp │ │ ├── control_flasks.hpp │ │ ├── control_gold.cpp │ │ ├── control_infobox.cpp │ │ ├── control_panel.cpp │ │ └── control_panel.hpp │ ├── controls/ │ │ ├── README.md │ │ ├── axis_direction.cpp │ │ ├── axis_direction.h │ │ ├── control_mode.cpp │ │ ├── control_mode.hpp │ │ ├── controller.cpp │ │ ├── controller.h │ │ ├── controller_buttons.cpp │ │ ├── controller_buttons.h │ │ ├── controller_motion.cpp │ │ ├── controller_motion.h │ │ ├── devices/ │ │ │ ├── game_controller.cpp │ │ │ ├── game_controller.h │ │ │ ├── joystick.cpp │ │ │ ├── joystick.h │ │ │ ├── kbcontroller.cpp │ │ │ └── kbcontroller.h │ │ ├── game_controls.cpp │ │ ├── game_controls.h │ │ ├── input.h │ │ ├── keymapper.cpp │ │ ├── keymapper.hpp │ │ ├── menu_controls.cpp │ │ ├── menu_controls.h │ │ ├── modifier_hints.cpp │ │ ├── modifier_hints.h │ │ ├── padmapper.cpp │ │ ├── padmapper.hpp │ │ ├── plrctrls.cpp │ │ ├── plrctrls.h │ │ ├── remap_keyboard.h │ │ └── touch/ │ │ ├── event_handlers.cpp │ │ ├── event_handlers.h │ │ ├── gamepad.cpp │ │ ├── gamepad.h │ │ ├── renderers.cpp │ │ └── renderers.h │ ├── cpp.hint │ ├── crawl.cpp │ ├── crawl.hpp │ ├── cursor.cpp │ ├── cursor.h │ ├── data/ │ │ ├── file.cpp │ │ ├── file.hpp │ │ ├── iterators.hpp │ │ ├── parser.cpp │ │ ├── parser.hpp │ │ ├── record_reader.cpp │ │ ├── record_reader.hpp │ │ ├── value_reader.cpp │ │ └── value_reader.hpp │ ├── dead.cpp │ ├── dead.h │ ├── debug.cpp │ ├── debug.h │ ├── diablo.cpp │ ├── diablo.h │ ├── diablo_msg.cpp │ ├── diablo_msg.hpp │ ├── discord/ │ │ ├── discord.cpp │ │ └── discord.h │ ├── doom.cpp │ ├── doom.h │ ├── dvlnet/ │ │ ├── abstract_net.cpp │ │ ├── abstract_net.h │ │ ├── base.cpp │ │ ├── base.h │ │ ├── base_protocol.h │ │ ├── cdwrap.cpp │ │ ├── cdwrap.h │ │ ├── frame_queue.cpp │ │ ├── frame_queue.h │ │ ├── leaveinfo.hpp │ │ ├── loopback.cpp │ │ ├── loopback.h │ │ ├── packet.cpp │ │ ├── packet.h │ │ ├── protocol_zt.cpp │ │ ├── protocol_zt.h │ │ ├── tcp_client.cpp │ │ ├── tcp_client.h │ │ ├── tcp_server.cpp │ │ ├── tcp_server.h │ │ ├── zerotier_lwip.cpp │ │ ├── zerotier_lwip.h │ │ ├── zerotier_native.cpp │ │ └── zerotier_native.h │ ├── effects.cpp │ ├── effects.h │ ├── effects_stubs.cpp │ ├── encrypt.cpp │ ├── encrypt.h │ ├── engine/ │ │ ├── actor_position.cpp │ │ ├── actor_position.hpp │ │ ├── animationinfo.cpp │ │ ├── animationinfo.h │ │ ├── assets.cpp │ │ ├── assets.hpp │ │ ├── backbuffer_state.cpp │ │ ├── backbuffer_state.hpp │ │ ├── circle.hpp │ │ ├── clx_sprite.hpp │ │ ├── demomode.cpp │ │ ├── demomode.h │ │ ├── direction.cpp │ │ ├── direction.hpp │ │ ├── displacement.hpp │ │ ├── dx.cpp │ │ ├── dx.h │ │ ├── events.cpp │ │ ├── events.hpp │ │ ├── lighting_defs.hpp │ │ ├── load_cel.cpp │ │ ├── load_cel.hpp │ │ ├── load_cl2.cpp │ │ ├── load_cl2.hpp │ │ ├── load_clx.cpp │ │ ├── load_clx.hpp │ │ ├── load_file.hpp │ │ ├── load_pcx.cpp │ │ ├── load_pcx.hpp │ │ ├── palette.cpp │ │ ├── palette.h │ │ ├── path.cpp │ │ ├── path.h │ │ ├── point.hpp │ │ ├── points_in_rectangle_range.hpp │ │ ├── random.cpp │ │ ├── random.hpp │ │ ├── rectangle.hpp │ │ ├── render/ │ │ │ ├── automap_render.cpp │ │ │ ├── automap_render.hpp │ │ │ ├── blit_impl.hpp │ │ │ ├── clx_render.cpp │ │ │ ├── clx_render.hpp │ │ │ ├── dun_render.cpp │ │ │ ├── dun_render.hpp │ │ │ ├── light_render.cpp │ │ │ ├── light_render.hpp │ │ │ ├── primitive_render.cpp │ │ │ ├── primitive_render.hpp │ │ │ ├── scrollrt.cpp │ │ │ ├── scrollrt.h │ │ │ ├── text_render.cpp │ │ │ └── text_render.hpp │ │ ├── size.hpp │ │ ├── sound.cpp │ │ ├── sound.h │ │ ├── sound_defs.hpp │ │ ├── sound_position.cpp │ │ ├── sound_position.hpp │ │ ├── sound_stubs.cpp │ │ ├── surface.cpp │ │ ├── surface.hpp │ │ ├── ticks.cpp │ │ ├── ticks.hpp │ │ ├── trn.cpp │ │ ├── trn.hpp │ │ └── world_tile.hpp │ ├── game_mode.cpp │ ├── game_mode.hpp │ ├── gamemenu.cpp │ ├── gamemenu.h │ ├── gmenu.cpp │ ├── gmenu.h │ ├── headless_mode.cpp │ ├── headless_mode.hpp │ ├── help.cpp │ ├── help.h │ ├── hwcursor.cpp │ ├── hwcursor.hpp │ ├── init.cpp │ ├── init.hpp │ ├── interfac.cpp │ ├── interfac.h │ ├── inv.cpp │ ├── inv.h │ ├── inv_iterators.hpp │ ├── items/ │ │ ├── validation.cpp │ │ └── validation.h │ ├── items.cpp │ ├── items.h │ ├── levels/ │ │ ├── crypt.cpp │ │ ├── crypt.h │ │ ├── drlg_l1.cpp │ │ ├── drlg_l1.h │ │ ├── drlg_l2.cpp │ │ ├── drlg_l2.h │ │ ├── drlg_l3.cpp │ │ ├── drlg_l3.h │ │ ├── drlg_l4.cpp │ │ ├── drlg_l4.h │ │ ├── dun_tile.hpp │ │ ├── gendung.cpp │ │ ├── gendung.h │ │ ├── gendung_defs.hpp │ │ ├── reencode_dun_cels.cpp │ │ ├── reencode_dun_cels.hpp │ │ ├── setmaps.cpp │ │ ├── setmaps.h │ │ ├── themes.cpp │ │ ├── themes.h │ │ ├── tile_properties.cpp │ │ ├── tile_properties.hpp │ │ ├── town.cpp │ │ ├── town.h │ │ ├── trigs.cpp │ │ └── trigs.h │ ├── lighting.cpp │ ├── lighting.h │ ├── loadsave.cpp │ ├── loadsave.h │ ├── lua/ │ │ ├── autocomplete.cpp │ │ ├── autocomplete.hpp │ │ ├── lua_event.cpp │ │ ├── lua_event.hpp │ │ ├── lua_global.cpp │ │ ├── lua_global.hpp │ │ ├── metadoc.hpp │ │ ├── modules/ │ │ │ ├── audio.cpp │ │ │ ├── audio.hpp │ │ │ ├── dev/ │ │ │ │ ├── display.cpp │ │ │ │ ├── display.hpp │ │ │ │ ├── items.cpp │ │ │ │ ├── items.hpp │ │ │ │ ├── level/ │ │ │ │ │ ├── map.cpp │ │ │ │ │ ├── map.hpp │ │ │ │ │ ├── warp.cpp │ │ │ │ │ └── warp.hpp │ │ │ │ ├── level.cpp │ │ │ │ ├── level.hpp │ │ │ │ ├── monsters.cpp │ │ │ │ ├── monsters.hpp │ │ │ │ ├── player/ │ │ │ │ │ ├── gold.cpp │ │ │ │ │ ├── gold.hpp │ │ │ │ │ ├── spells.cpp │ │ │ │ │ ├── spells.hpp │ │ │ │ │ ├── stats.cpp │ │ │ │ │ └── stats.hpp │ │ │ │ ├── player.cpp │ │ │ │ ├── player.hpp │ │ │ │ ├── quests.cpp │ │ │ │ ├── quests.hpp │ │ │ │ ├── search.cpp │ │ │ │ ├── search.hpp │ │ │ │ ├── towners.cpp │ │ │ │ └── towners.hpp │ │ │ ├── dev.cpp │ │ │ ├── dev.hpp │ │ │ ├── floatingnumbers.cpp │ │ │ ├── floatingnumbers.hpp │ │ │ ├── hellfire.cpp │ │ │ ├── hellfire.hpp │ │ │ ├── i18n.cpp │ │ │ ├── i18n.hpp │ │ │ ├── items.cpp │ │ │ ├── items.hpp │ │ │ ├── log.cpp │ │ │ ├── log.hpp │ │ │ ├── monsters.cpp │ │ │ ├── monsters.hpp │ │ │ ├── player.cpp │ │ │ ├── player.hpp │ │ │ ├── render.cpp │ │ │ ├── render.hpp │ │ │ ├── system.cpp │ │ │ ├── system.hpp │ │ │ ├── towners.cpp │ │ │ └── towners.hpp │ │ ├── repl.cpp │ │ └── repl.hpp │ ├── main.cpp │ ├── menu.cpp │ ├── menu.h │ ├── minitext.cpp │ ├── minitext.h │ ├── missiles.cpp │ ├── missiles.h │ ├── monster.cpp │ ├── monster.h │ ├── monsters/ │ │ ├── validation.cpp │ │ └── validation.hpp │ ├── movie.cpp │ ├── movie.h │ ├── mpq/ │ │ ├── mpq_common.cpp │ │ ├── mpq_common.hpp │ │ ├── mpq_reader.cpp │ │ ├── mpq_reader.hpp │ │ ├── mpq_sdl_rwops.cpp │ │ ├── mpq_sdl_rwops.hpp │ │ ├── mpq_writer.cpp │ │ └── mpq_writer.hpp │ ├── msg.cpp │ ├── msg.h │ ├── multi.cpp │ ├── multi.h │ ├── nthread.cpp │ ├── nthread.h │ ├── objects.cpp │ ├── objects.h │ ├── options.cpp │ ├── options.h │ ├── pack.cpp │ ├── pack.h │ ├── panels/ │ │ ├── charpanel.cpp │ │ ├── charpanel.hpp │ │ ├── console.cpp │ │ ├── console.hpp │ │ ├── info_box.cpp │ │ ├── info_box.hpp │ │ ├── mainpanel.cpp │ │ ├── mainpanel.hpp │ │ ├── partypanel.cpp │ │ ├── partypanel.hpp │ │ ├── spell_book.cpp │ │ ├── spell_book.hpp │ │ ├── spell_icons.cpp │ │ ├── spell_icons.hpp │ │ ├── spell_list.cpp │ │ ├── spell_list.hpp │ │ └── ui_panels.hpp │ ├── pfile.cpp │ ├── pfile.h │ ├── platform/ │ │ ├── android/ │ │ │ ├── CMakeLists.txt │ │ │ └── android.cpp │ │ ├── ctr/ │ │ │ ├── CMakeLists.txt │ │ │ ├── asio/ │ │ │ │ ├── include/ │ │ │ │ │ ├── errno.h │ │ │ │ │ ├── net/ │ │ │ │ │ │ └── if.h │ │ │ │ │ ├── netdb.h │ │ │ │ │ ├── netinet/ │ │ │ │ │ │ └── in.h │ │ │ │ │ └── sys/ │ │ │ │ │ ├── ioctl.h │ │ │ │ │ ├── poll.h │ │ │ │ │ ├── socket.h │ │ │ │ │ ├── uio.h │ │ │ │ │ └── un.h │ │ │ │ ├── net/ │ │ │ │ │ └── if.c │ │ │ │ └── sys/ │ │ │ │ ├── socket.c │ │ │ │ └── uio.c │ │ │ ├── cfgu_service.hpp │ │ │ ├── display.cpp │ │ │ ├── display.hpp │ │ │ ├── keyboard.cpp │ │ │ ├── keyboard.h │ │ │ ├── locale.cpp │ │ │ ├── locale.hpp │ │ │ ├── messagebox.cpp │ │ │ ├── random.cpp │ │ │ ├── random.hpp │ │ │ ├── sockets.cpp │ │ │ ├── sockets.hpp │ │ │ ├── system.cpp │ │ │ └── system.h │ │ ├── ios/ │ │ │ ├── ios_paths.h │ │ │ └── ios_paths.m │ │ ├── locale.cpp │ │ ├── locale.hpp │ │ ├── macos_sdl1/ │ │ │ └── SDL_filesystem.m │ │ ├── switch/ │ │ │ ├── CMakeLists.txt │ │ │ ├── asio/ │ │ │ │ ├── include/ │ │ │ │ │ ├── errno.h │ │ │ │ │ ├── net/ │ │ │ │ │ │ └── if.h │ │ │ │ │ ├── netinet/ │ │ │ │ │ │ └── in.h │ │ │ │ │ └── sys/ │ │ │ │ │ ├── uio.h │ │ │ │ │ └── un.h │ │ │ │ ├── net/ │ │ │ │ │ └── if.c │ │ │ │ ├── pause.c │ │ │ │ └── sys/ │ │ │ │ └── signal.c │ │ │ ├── docking.cpp │ │ │ ├── docking.h │ │ │ ├── keyboard.cpp │ │ │ ├── keyboard.h │ │ │ ├── network.cpp │ │ │ ├── network.h │ │ │ ├── random.cpp │ │ │ ├── random.hpp │ │ │ ├── romfs.cpp │ │ │ └── romfs.hpp │ │ └── vita/ │ │ ├── CMakeLists.txt │ │ ├── keyboard.cpp │ │ ├── keyboard.h │ │ ├── network.cpp │ │ ├── network.h │ │ ├── random.cpp │ │ ├── random.hpp │ │ ├── touch.cpp │ │ └── touch.h │ ├── player.cpp │ ├── player.h │ ├── plrmsg.cpp │ ├── plrmsg.h │ ├── portal.cpp │ ├── portal.h │ ├── portals/ │ │ ├── validation.cpp │ │ └── validation.hpp │ ├── qol/ │ │ ├── autopickup.cpp │ │ ├── autopickup.h │ │ ├── chatlog.cpp │ │ ├── chatlog.h │ │ ├── floatingnumbers.cpp │ │ ├── floatingnumbers.h │ │ ├── itemlabels.cpp │ │ ├── itemlabels.h │ │ ├── monhealthbar.cpp │ │ ├── monhealthbar.h │ │ ├── stash.cpp │ │ ├── stash.h │ │ ├── xpbar.cpp │ │ └── xpbar.h │ ├── quests/ │ │ ├── validation.cpp │ │ └── validation.hpp │ ├── quests.cpp │ ├── quests.h │ ├── quick_messages.cpp │ ├── quick_messages.hpp │ ├── restrict.cpp │ ├── restrict.h │ ├── sha.cpp │ ├── sha.h │ ├── sound_effect_enums.h │ ├── spells.cpp │ ├── spells.h │ ├── stores.cpp │ ├── stores.h │ ├── storm/ │ │ ├── storm_net.cpp │ │ ├── storm_net.hpp │ │ ├── storm_svid.cpp │ │ └── storm_svid.h │ ├── sync.cpp │ ├── sync.h │ ├── tables/ │ │ ├── itemdat.cpp │ │ ├── itemdat.h │ │ ├── misdat.cpp │ │ ├── misdat.h │ │ ├── monstdat.cpp │ │ ├── monstdat.h │ │ ├── objdat.cpp │ │ ├── objdat.h │ │ ├── playerdat.cpp │ │ ├── playerdat.hpp │ │ ├── spelldat.cpp │ │ ├── spelldat.h │ │ ├── textdat.cpp │ │ ├── textdat.h │ │ ├── townerdat.cpp │ │ └── townerdat.hpp │ ├── tmsg.cpp │ ├── tmsg.h │ ├── towners.cpp │ ├── towners.h │ ├── track.cpp │ ├── track.h │ ├── translation_dummy.cpp │ ├── utils/ │ │ ├── algorithm/ │ │ │ └── container.hpp │ │ ├── attributes.h │ │ ├── aulib.hpp │ │ ├── bitset2d.hpp │ │ ├── cel_to_clx.cpp │ │ ├── cel_to_clx.hpp │ │ ├── cl2_to_clx.cpp │ │ ├── cl2_to_clx.hpp │ │ ├── clx_decode.hpp │ │ ├── clx_encode.hpp │ │ ├── console.cpp │ │ ├── console.h │ │ ├── display.cpp │ │ ├── display.h │ │ ├── endian_read.hpp │ │ ├── endian_stream.hpp │ │ ├── endian_swap.hpp │ │ ├── endian_write.hpp │ │ ├── enum_traits.h │ │ ├── file_name_generator.hpp │ │ ├── file_util.cpp │ │ ├── file_util.h │ │ ├── format_int.cpp │ │ ├── format_int.hpp │ │ ├── hp_mana_units.hpp │ │ ├── ini.cpp │ │ ├── ini.hpp │ │ ├── intrusive_optional.hpp │ │ ├── is_of.hpp │ │ ├── language.cpp │ │ ├── language.h │ │ ├── log.hpp │ │ ├── logged_fstream.cpp │ │ ├── logged_fstream.hpp │ │ ├── math.h │ │ ├── palette_blending.cpp │ │ ├── palette_blending.hpp │ │ ├── palette_kd_tree.cpp │ │ ├── palette_kd_tree.hpp │ │ ├── parse_int.cpp │ │ ├── parse_int.hpp │ │ ├── paths.cpp │ │ ├── paths.h │ │ ├── pcx.hpp │ │ ├── pcx_to_clx.cpp │ │ ├── pcx_to_clx.hpp │ │ ├── png.h │ │ ├── pointer_value_union.hpp │ │ ├── push_aulib_decoder.cpp │ │ ├── push_aulib_decoder.h │ │ ├── screen_reader.cpp │ │ ├── screen_reader.hpp │ │ ├── sdl2_backports.h │ │ ├── sdl2_to_1_2_backports.cpp │ │ ├── sdl2_to_1_2_backports.h │ │ ├── sdl_bilinear_scale.cpp │ │ ├── sdl_bilinear_scale.hpp │ │ ├── sdl_compat.h │ │ ├── sdl_geometry.h │ │ ├── sdl_mutex.h │ │ ├── sdl_ptrs.h │ │ ├── sdl_thread.cpp │ │ ├── sdl_thread.h │ │ ├── sdl_wrap.h │ │ ├── soundsample.cpp │ │ ├── soundsample.h │ │ ├── static_vector.hpp │ │ ├── status_macros.hpp │ │ ├── stdcompat/ │ │ │ ├── filesystem.hpp │ │ │ └── shared_ptr_array.hpp │ │ ├── str_case.cpp │ │ ├── str_case.hpp │ │ ├── str_cat.cpp │ │ ├── str_cat.hpp │ │ ├── str_split.hpp │ │ ├── string_or_view.hpp │ │ ├── string_view_hash.hpp │ │ ├── stubs.h │ │ ├── surface_to_clx.cpp │ │ ├── surface_to_clx.hpp │ │ ├── surface_to_pcx.cpp │ │ ├── surface_to_pcx.hpp │ │ ├── surface_to_png.cpp │ │ ├── surface_to_png.hpp │ │ ├── timer.cpp │ │ ├── timer.hpp │ │ ├── ui_fwd.h │ │ ├── utf8.cpp │ │ └── utf8.hpp │ ├── vision.cpp │ └── vision.hpp ├── Translations/ │ ├── be.po │ ├── bg.po │ ├── cs.po │ ├── da.po │ ├── de.po │ ├── devilutionx.pot │ ├── el.po │ ├── es.po │ ├── et.po │ ├── fi.po │ ├── fr.po │ ├── glossary.md │ ├── hr.po │ ├── hu.po │ ├── it.po │ ├── ja.po │ ├── ko.po │ ├── pl.po │ ├── pt_BR.po │ ├── ro.po │ ├── ru.po │ ├── sv.po │ ├── tr.po │ ├── uk.po │ ├── zh_CN.po │ └── zh_TW.po ├── VERSION ├── android-project/ │ ├── .gitignore │ ├── app/ │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── org/ │ │ │ ├── diasurgical/ │ │ │ │ └── devilutionx/ │ │ │ │ ├── DataActivity.java │ │ │ │ ├── DevilutionXSDLActivity.java │ │ │ │ ├── ExternalFilesManager.java │ │ │ │ └── ImportActivity.java │ │ │ └── libsdl/ │ │ │ └── app/ │ │ │ ├── HIDDevice.java │ │ │ ├── HIDDeviceBLESteamController.java │ │ │ ├── HIDDeviceManager.java │ │ │ ├── HIDDeviceUSB.java │ │ │ ├── SDL.java │ │ │ ├── SDLActivity.java │ │ │ ├── SDLAudioManager.java │ │ │ ├── SDLControllerManager.java │ │ │ └── SDLSurface.java │ │ └── res/ │ │ ├── drawable/ │ │ │ └── gamepad.xml │ │ ├── layout/ │ │ │ └── activity_data.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ ├── values-be/ │ │ │ └── strings.xml │ │ ├── values-bg/ │ │ │ └── strings.xml │ │ ├── values-cs/ │ │ │ └── strings.xml │ │ ├── values-da/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-hr/ │ │ │ └── strings.xml │ │ ├── values-hu/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-ko-rKR/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt-rBR/ │ │ │ └── strings.xml │ │ ├── values-ro-rRO/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sv/ │ │ │ └── strings.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-zh-rCN/ │ │ │ └── strings.xml │ │ ├── values-zh-rTW/ │ │ │ └── strings.xml │ │ └── xml/ │ │ ├── backup_descriptor.xml │ │ ├── backup_rules.xml │ │ └── shortcuts.xml │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── assets/ │ ├── ASSETS_VERSION │ ├── arena/ │ │ ├── church.dun │ │ ├── circle_of_death.dun │ │ └── hell.dun │ ├── data/ │ │ ├── boxleftend.clx │ │ ├── boxmiddle.clx │ │ ├── boxrightend.clx │ │ ├── charbg.clx │ │ ├── dirtybuc.clx │ │ ├── dirtybucp.clx │ │ ├── health.clx │ │ ├── healthbox.clx │ │ ├── hintbox.clx │ │ ├── hintboxbackground.clx │ │ ├── hinticons.clx │ │ ├── inv/ │ │ │ └── objcurs-widths.txt │ │ ├── monstertags.clx │ │ ├── panel8buc.clx │ │ ├── panel8bucp.clx │ │ ├── resistance.clx │ │ ├── stash.clx │ │ ├── stashnavbtns.clx │ │ ├── talkbutton.clx │ │ └── xpbar.clx │ ├── fonts/ │ │ ├── 12-00.clx │ │ ├── 12-01.clx │ │ ├── 12-02.clx │ │ ├── 12-03.clx │ │ ├── 12-04.clx │ │ ├── 12-05.clx │ │ ├── 12-1f1.clx │ │ ├── 12-1f3.clx │ │ ├── 12-1f4.clx │ │ ├── 12-1f5.clx │ │ ├── 12-1f6.clx │ │ ├── 12-1f9.clx │ │ ├── 12-20.clx │ │ ├── 12-26.clx │ │ ├── 12-e0.clx │ │ ├── 22-00.clx │ │ ├── 22-01.clx │ │ ├── 22-02.clx │ │ ├── 22-03.clx │ │ ├── 22-04.clx │ │ ├── 22-05.clx │ │ ├── 22-20.clx │ │ ├── 24-00.clx │ │ ├── 24-01.clx │ │ ├── 24-02.clx │ │ ├── 24-03.clx │ │ ├── 24-04.clx │ │ ├── 24-05.clx │ │ ├── 24-1f1.clx │ │ ├── 24-1f3.clx │ │ ├── 24-1f4.clx │ │ ├── 24-1f5.clx │ │ ├── 24-1f6.clx │ │ ├── 24-1f9.clx │ │ ├── 24-20.clx │ │ ├── 24-26.clx │ │ ├── 24-e0.clx │ │ ├── 30-00.clx │ │ ├── 30-01.clx │ │ ├── 30-02.clx │ │ ├── 30-03.clx │ │ ├── 30-04.clx │ │ ├── 30-05.clx │ │ ├── 30-20.clx │ │ ├── 30-e0.clx │ │ ├── 42-00.clx │ │ ├── 42-01.clx │ │ ├── 42-02.clx │ │ ├── 42-03.clx │ │ ├── 42-04.clx │ │ ├── 42-05.clx │ │ ├── 42-20.clx │ │ ├── 46-00.clx │ │ ├── 46-01.clx │ │ ├── 46-02.clx │ │ ├── 46-03.clx │ │ ├── 46-04.clx │ │ ├── 46-05.clx │ │ ├── 46-20.clx │ │ ├── black.trn │ │ ├── blue.trn │ │ ├── buttonface.trn │ │ ├── buttonpushed.trn │ │ ├── gamedialogred.trn │ │ ├── gamedialogwhite.trn │ │ ├── gamedialogyellow.trn │ │ ├── goldui.trn │ │ ├── golduis.trn │ │ ├── grayui.trn │ │ ├── grayuis.trn │ │ ├── orange.trn │ │ ├── red.trn │ │ ├── tr/ │ │ │ ├── 12-00.clx │ │ │ ├── 24-00.clx │ │ │ ├── 30-00.clx │ │ │ ├── 42-00.clx │ │ │ └── 46-00.clx │ │ ├── white.trn │ │ ├── whitegold.trn │ │ └── yellow.trn │ ├── gendata/ │ │ ├── cut2w.clx │ │ ├── cut3w.clx │ │ ├── cut4w.clx │ │ ├── cutgatew.clx │ │ ├── cutl1dw.clx │ │ ├── cutportlw.clx │ │ ├── cutportrw.clx │ │ ├── cutstartw.clx │ │ ├── cutttw.clx │ │ └── pause.trn │ ├── levels/ │ │ ├── l1data/ │ │ │ └── sklkngt.dun │ │ ├── l2data/ │ │ │ └── bonechat.dun │ │ └── towndata/ │ │ ├── automap.amp │ │ └── automap.dun │ ├── lua/ │ │ ├── devilutionx/ │ │ │ └── events.lua │ │ ├── inspect.lua │ │ ├── mods/ │ │ │ ├── Floating Numbers - Damage/ │ │ │ │ └── init.lua │ │ │ ├── Floating Numbers - XP/ │ │ │ │ └── init.lua │ │ │ ├── adria_refills_mana/ │ │ │ │ └── init.lua │ │ │ └── clock/ │ │ │ └── init.lua │ │ └── repl_prelude.lua │ ├── lua_internal/ │ │ └── get_lua_function_signature.lua │ ├── plrgfx/ │ │ └── warrior/ │ │ └── whu/ │ │ ├── whufm.trn │ │ ├── whulm.trn │ │ └── whuqm.trn │ ├── txtdata/ │ │ ├── Experience.tsv │ │ ├── Readme.md │ │ ├── classes/ │ │ │ ├── README.md │ │ │ ├── barbarian/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── bard/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── classdat.tsv │ │ │ ├── monk/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── rogue/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── sorcerer/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ └── warrior/ │ │ │ ├── animations.tsv │ │ │ ├── attributes.tsv │ │ │ ├── sounds.tsv │ │ │ ├── sprites.tsv │ │ │ └── starting_loadout.tsv │ │ ├── items/ │ │ │ ├── item_prefixes.tsv │ │ │ ├── item_suffixes.tsv │ │ │ ├── itemdat.tsv │ │ │ └── unique_itemdat.tsv │ │ ├── missiles/ │ │ │ ├── misdat.tsv │ │ │ └── missile_sprites.tsv │ │ ├── monsters/ │ │ │ ├── monstdat.tsv │ │ │ └── unique_monstdat.tsv │ │ ├── objects/ │ │ │ └── objdat.tsv │ │ ├── quests/ │ │ │ └── questdat.tsv │ │ ├── sound/ │ │ │ ├── effects-unused.tsv │ │ │ └── effects.tsv │ │ ├── spells/ │ │ │ └── spelldat.tsv │ │ ├── text/ │ │ │ ├── textdat-unused.tsv │ │ │ └── textdat.tsv │ │ └── towners/ │ │ ├── quest_dialog.tsv │ │ └── towners.tsv │ └── ui_art/ │ ├── creditsw.clx │ ├── diablo.pal │ ├── dvl_but_sml.clx │ ├── dvl_lrpopup.clx │ ├── hellfire.pal │ └── mainmenuw.clx ├── codecov.yml ├── docs/ │ ├── BACKGROUND.md │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── TODO.md │ ├── benchmarking.md │ ├── building.md │ ├── debug.md │ ├── github-codespaces.md │ ├── installing.md │ ├── manual/ │ │ └── platforms/ │ │ ├── 3ds.md │ │ ├── gkd350h.md │ │ ├── retrofw.md │ │ ├── rg350.md │ │ ├── rg99.md │ │ ├── switch.md │ │ ├── vita.md │ │ ├── xbox-one.md │ │ └── xbox.md │ ├── privacy.md │ └── profiling-linux.md ├── doxygen.config ├── mods/ │ └── Hellfire/ │ ├── data/ │ │ └── inv/ │ │ └── objcurs2-widths.txt │ ├── lua/ │ │ └── mods/ │ │ └── Hellfire/ │ │ └── init.lua │ ├── nlevels/ │ │ ├── cutl5w.clx │ │ ├── cutl6w.clx │ │ └── l5data/ │ │ ├── cornerstone.dun │ │ └── uberroom.dun │ ├── txtdata/ │ │ ├── classes/ │ │ │ ├── classdat.tsv │ │ │ └── sorcerer/ │ │ │ └── starting_loadout.tsv │ │ ├── items/ │ │ │ ├── item_prefixes.tsv │ │ │ ├── item_suffixes.tsv │ │ │ └── unique_itemdat.tsv │ │ ├── missiles/ │ │ │ ├── misdat.tsv │ │ │ └── missile_sprites.tsv │ │ ├── monsters/ │ │ │ └── monstdat.tsv │ │ ├── sound/ │ │ │ ├── effects-unused.tsv │ │ │ └── effects.tsv │ │ ├── spells/ │ │ │ └── spelldat.tsv │ │ └── towners/ │ │ ├── quest_dialog.tsv │ │ └── towners.tsv │ └── ui_art/ │ ├── diablo.pal │ ├── hf_titlew.clx │ ├── mainmenuw.clx │ └── supportw.clx ├── test/ │ ├── .clang-format │ ├── Fixtures.cmake │ ├── animationinfo_test.cpp │ ├── app_fatal_for_testing.cpp │ ├── appfat_test.cpp │ ├── automap_test.cpp │ ├── clx_render_benchmark.cpp │ ├── codec_test.cpp │ ├── crawl_benchmark.cpp │ ├── crawl_test.cpp │ ├── cursor_test.cpp │ ├── data_file_test.cpp │ ├── dead_test.cpp │ ├── diablo_test.cpp │ ├── drlg_common_test.cpp │ ├── drlg_l1_test.cpp │ ├── drlg_l2_test.cpp │ ├── drlg_l3_test.cpp │ ├── drlg_l4_test.cpp │ ├── drlg_test.hpp │ ├── dun_render_benchmark.cpp │ ├── effects_test.cpp │ ├── file_util_test.cpp │ ├── fixtures/ │ │ ├── diablo/ │ │ │ ├── 1-2588.dun │ │ │ ├── 1-743271966.dun │ │ │ ├── 10-1630062353.dun │ │ │ ├── 10-879635115.dun │ │ │ ├── 11-384626536.dun │ │ │ ├── 12-2104541047.dun │ │ │ ├── 13-428074402.dun │ │ │ ├── 13-594689775.dun │ │ │ ├── 14-717625719.dun │ │ │ ├── 14-815743776.dun │ │ │ ├── 15-1256511996.dun │ │ │ ├── 15-1583642716-changed.dun │ │ │ ├── 15-1583642716.dun │ │ │ ├── 16-741281013.dun │ │ │ ├── 2-1383137027.dun │ │ │ ├── 3-844660068.dun │ │ │ ├── 4-609325643.dun │ │ │ ├── 4-902156014.dun │ │ │ ├── 5-1677631846.dun │ │ │ ├── 5-68685319.dun │ │ │ ├── 6-1824554527.dun │ │ │ ├── 6-2033265779.dun │ │ │ ├── 6-2034738122.dun │ │ │ ├── 7-1607627156.dun │ │ │ ├── 7-680552750.dun │ │ │ ├── 8-1999936419.dun │ │ │ └── 9-262005438.dun │ │ ├── hellfire/ │ │ │ ├── 1-401921334.dun │ │ │ ├── 1-536340718.dun │ │ │ ├── 17-19770182.dun │ │ │ ├── 18-1522546307.dun │ │ │ ├── 19-125121312.dun │ │ │ ├── 2-1180526547.dun │ │ │ ├── 2-128964898.dun │ │ │ ├── 20-1511478689.dun │ │ │ ├── 21-2122696790.dun │ │ │ ├── 22-1191662129.dun │ │ │ ├── 23-97055268.dun │ │ │ ├── 24-1324803725.dun │ │ │ ├── 3-1369955278.dun │ │ │ ├── 3-1512491184.dun │ │ │ ├── 3-1799396623.dun │ │ │ ├── 4-1190318991.dun │ │ │ └── 4-1924296259.dun │ │ ├── levels/ │ │ │ ├── l1data/ │ │ │ │ ├── banner1.dun │ │ │ │ ├── banner2.dun │ │ │ │ ├── rnd6.dun │ │ │ │ └── skngdo.dun │ │ │ ├── l2data/ │ │ │ │ ├── blind1.dun │ │ │ │ ├── blood1.dun │ │ │ │ ├── blood2.dun │ │ │ │ ├── bonestr1.dun │ │ │ │ └── bonestr2.dun │ │ │ ├── l3data/ │ │ │ │ └── anvil.dun │ │ │ └── l4data/ │ │ │ ├── diab1.dun │ │ │ ├── diab2a.dun │ │ │ ├── diab2b.dun │ │ │ ├── diab3a.dun │ │ │ ├── diab3b.dun │ │ │ ├── diab4a.dun │ │ │ ├── diab4b.dun │ │ │ ├── vile1.dun │ │ │ ├── warlord.dun │ │ │ └── warlord2.dun │ │ ├── light_render_benchmark/ │ │ │ └── dLight.dmp │ │ ├── memory_map/ │ │ │ ├── additionalMissiles.txt │ │ │ ├── game.txt │ │ │ ├── hero.txt │ │ │ ├── item.txt │ │ │ ├── itemPack.txt │ │ │ ├── level.txt │ │ │ ├── levelSeed.txt │ │ │ ├── lightning.txt │ │ │ ├── missile.txt │ │ │ ├── monster.txt │ │ │ ├── object.txt │ │ │ ├── player.txt │ │ │ ├── portal.txt │ │ │ └── quest.txt │ │ ├── timedemo/ │ │ │ └── WarriorLevel1to2/ │ │ │ ├── demo_0.dmo │ │ │ ├── demo_0_reference_spawn_0.sv │ │ │ └── spawn_0.sv │ │ └── txtdata/ │ │ ├── cr.tsv │ │ ├── crlf.tsv │ │ ├── empty.tsv │ │ ├── empty_with_utf8_bom.tsv │ │ ├── lf.tsv │ │ ├── lf_no_trail.tsv │ │ ├── sample.tsv │ │ └── utf8_bom.tsv │ ├── format_int_test.cpp │ ├── ini_test.cpp │ ├── inv_test.cpp │ ├── items_test.cpp │ ├── language_for_testing.cpp │ ├── light_render_benchmark.cpp │ ├── main.cpp │ ├── math_test.cpp │ ├── missiles_test.cpp │ ├── multi_logging_test.cpp │ ├── pack_test.cpp │ ├── palette_blending_benchmark.cpp │ ├── palette_blending_test.cpp │ ├── parse_int_test.cpp │ ├── path_benchmark.cpp │ ├── path_test.cpp │ ├── player_test.cpp │ ├── player_test.h │ ├── quests_test.cpp │ ├── random_test.cpp │ ├── rectangle_test.cpp │ ├── scrollrt_test.cpp │ ├── static_vector_test.cpp │ ├── stores_test.cpp │ ├── str_cat_test.cpp │ ├── text_render_integration_test.cpp │ ├── tile_properties_test.cpp │ ├── timedemo_test.cpp │ ├── townerdat_test.cpp │ ├── utf8_test.cpp │ ├── vendor_test.cpp │ ├── vision_test.cpp │ └── writehero_test.cpp ├── tools/ │ ├── Dockerfile.s390x │ ├── build_and_install_smpq.ps1 │ ├── build_and_install_smpq.sh │ ├── build_and_run_benchmark.py │ ├── build_pgo.sh │ ├── extract_translation_data.py │ ├── gdb/ │ │ ├── README.md │ │ └── devilution_gdb/ │ │ ├── __init__.py │ │ └── pretty_printers/ │ │ └── utils/ │ │ └── static_vector_pp.py │ ├── linux_reduced_cpu_variance_run.sh │ ├── lldb/ │ │ ├── README.md │ │ └── devilution_lldb/ │ │ ├── __init__.py │ │ └── pretty_printers/ │ │ └── utils/ │ │ └── static_vector_pp.py │ ├── make_src_dist.py │ ├── measure_timedemo_performance.py │ ├── run_big_endian_tests.sh │ ├── segmenter/ │ │ ├── README.md │ │ ├── requirements.txt │ │ ├── segment_all.py │ │ ├── segment_ja.py │ │ ├── segment_zh.py │ │ └── segmenter_lib.py │ ├── update_bundled_assets.sh │ ├── update_sdl_android_project.sh │ ├── update_translations_pot.py │ └── validate_translations.py ├── uwp-project/ │ ├── Package.appxmanifest │ ├── Package.appxmanifest.template │ ├── devilutionX_TemporaryKey.pfx │ ├── devilutionx.sln │ ├── devilutionx.vcxproj │ └── src/ │ └── SDL_winrt_main_NonXAML.cpp └── vcpkg.json
Showing preview only (767K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6711 symbols across 656 files)
FILE: 3rdParty/PKWare/explode.cpp
function GenDecodeTabs (line 130) | static void PKWAREAPI GenDecodeTabs(
function GenAscTabs (line 151) | static void PKWAREAPI GenAscTabs(TDcmpStruct * pWork)
function WasteBits (line 230) | static int PKWAREAPI WasteBits(TDcmpStruct * pWork, unsigned int nBits)
function DecodeLit (line 270) | static unsigned int PKWAREAPI DecodeLit(TDcmpStruct * pWork)
function DecodeDist (line 360) | static unsigned int PKWAREAPI DecodeDist(TDcmpStruct * pWork, unsigned i...
function Expand (line 391) | static unsigned int PKWAREAPI Expand(TDcmpStruct * pWork)
function explode (line 473) | unsigned int PKWAREAPI explode(
FILE: 3rdParty/PKWare/implode.cpp
function SortBuffer (line 139) | static void PKWAREAPI SortBuffer(TCmpStruct * pWork, unsigned char * buf...
function FlushBuf (line 185) | static void PKWAREAPI FlushBuf(TCmpStruct * pWork)
function OutputBits (line 205) | static void PKWAREAPI OutputBits(TCmpStruct * pWork, unsigned int nbits,...
function FindRep (line 247) | static unsigned int PKWAREAPI FindRep(TCmpStruct * pWork, unsigned char ...
function WriteCmpData (line 503) | static void PKWAREAPI WriteCmpData(TCmpStruct * pWork)
function implode (line 688) | unsigned int PKWAREAPI implode(
FILE: 3rdParty/PKWare/pkware.h
type TCmpStruct (line 45) | typedef struct
type TDcmpStruct (line 80) | typedef struct
FILE: 3rdParty/PicoSHA2/picosha2.h
function namespace (line 39) | namespace picosha2 {
function string (line 169) | string bytes_to_hex_string(InIter first, InIter last) {
function string (line 176) | string bytes_to_hex_string(const InContainer& bytes) {
function class (line 182) | class hash256_one_by_one {
function finish (line 205) | void finish() {
function write_data_bit_length (line 248) | void write_data_bit_length(byte_t* begin) {
function get_hash_hex_string (line 274) | inline void get_hash_hex_string(const hash256_one_by_one& hasher,
function std (line 281) | inline std::string get_hash_hex_string(const hash256_one_by_one& hasher) {
function namespace (line 287) | namespace impl {
function string (line 353) | string hash256_hex_string(InIter first, InIter last) {
function hash256_hex_string (line 359) | inline void hash256_hex_string(const std::string& src, std::string& hex_...
function string (line 369) | string hash256_hex_string(const InContainer& src) {
FILE: 3rdParty/SDL_image/IMG.c
function IMG_Init (line 28) | int IMG_Init(int flags) {
function IMG_Quit (line 46) | void IMG_Quit() {
FILE: 3rdParty/asio/asio_handle_exception.cpp
type devilution (line 5) | namespace devilution {
type asio::detail (line 11) | namespace asio::detail {
function fatal_exception (line 13) | void fatal_exception(const char* message)
FILE: 3rdParty/asio/asio_handle_exception.hpp
type asio::detail (line 5) | namespace asio::detail {
function throw_exception (line 10) | void throw_exception(
FILE: 3rdParty/bzip2/bz_internal_error.c
function bz_internal_error (line 3) | void bz_internal_error(int errcode) {
FILE: 3rdParty/sol2/sol_config/sol/debug.hpp
type devilutionx (line 11) | namespace devilutionx {
type sol::detail::debug (line 16) | namespace sol::detail::debug {
function dump_types (line 18) | inline std::string dump_types(lua_State *L) {
function print_stack (line 30) | inline void print_stack(lua_State *L) { ::devilutionx::Sol2DebugPrintS...
function print_section (line 32) | inline void print_section(const std::string &message, lua_State *L) {
FILE: 3rdParty/tl/expected.hpp
type tl (line 84) | namespace tl {
type detail (line 85) | namespace detail {
type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
type conjunction (line 238) | struct conjunction : std::true_type {}
type conjunction<B> (line 239) | struct conjunction<B> : B {}
type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
type invoke_result_impl (line 302) | struct invoke_result_impl
type is_swappable (line 321) | struct is_swappable : std::true_type {}
type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
type swap_adl_tests (line 326) | namespace swap_adl_tests {
type tag (line 329) | struct tag {}
type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
type is_swappable (line 362) | struct is_swappable
type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
type no_init_t (line 437) | struct no_init_t {}
type expected_storage_base (line 448) | struct expected_storage_base {
method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
type dummy (line 652) | struct dummy {}
type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
method construct (line 700) | void construct(Args &&...args) noexcept {
method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 761) | void assign(const expected_operations_base &rhs) {
method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
method assign (line 797) | void assign(expected_operations_base &&rhs) {
method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
method assign_common (line 840) | void assign_common(Rhs &&rhs) {
method has_value (line 855) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
method T (line 858) | constexpr const T &get() const & { return this->m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
method assign (line 900) | void assign(Rhs &&rhs) noexcept {
method has_value (line 915) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
method expected_copy_base (line 949) | expected_copy_base() = default;
method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
type expected_move_base (line 977) | struct expected_move_base
type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
method expected_move_base (line 983) | expected_move_base() = default;
method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
type expected_move_assign_base (line 1046) | struct expected_move_assign_base
type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
method expected_move_assign_base (line 1059) | expected_move_assign_base &
method expected_move_assign_base (line 1062) | expected_move_assign_base &
type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
type default_constructor_tag (line 1182) | struct default_constructor_tag {
method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
class expected (line 130) | class expected
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
class monostate (line 134) | class monostate {}
type in_place_t (line 136) | struct in_place_t {
method in_place_t (line 137) | explicit in_place_t() = default;
class unexpected (line 142) | class unexpected {
method unexpected (line 146) | unexpected() = delete;
method unexpected (line 147) | constexpr explicit unexpected(const E &e) : m_val(e) {}
method unexpected (line 149) | constexpr explicit unexpected(E &&e) : m_val(std::move(e)) {}
method unexpected (line 153) | constexpr explicit unexpected(Args &&...args)
method unexpected (line 159) | constexpr explicit unexpected(std::initializer_list<U> l, Args &&......
method E (line 162) | constexpr const E &value() const & { return m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 163) | TL_EXPECTED_11_CONSTEXPR E &value() & { return m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 164) | TL_EXPECTED_11_CONSTEXPR E &&value() && { return std::move(m_val); }
method E (line 165) | constexpr const E &&value() const && { return std::move(m_val); }
function make_unexpected (line 201) | unexpected<typename std::decay<E>::type> make_unexpected(E &&e) {
type unexpect_t (line 205) | struct unexpect_t {
method unexpect_t (line 206) | unexpect_t() = default;
type detail (line 210) | namespace detail {
type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
type conjunction (line 238) | struct conjunction : std::true_type {}
type conjunction<B> (line 239) | struct conjunction<B> : B {}
type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
type invoke_result_impl (line 302) | struct invoke_result_impl
type is_swappable (line 321) | struct is_swappable : std::true_type {}
type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
type swap_adl_tests (line 326) | namespace swap_adl_tests {
type tag (line 329) | struct tag {}
type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
type is_swappable (line 362) | struct is_swappable
type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
type no_init_t (line 437) | struct no_init_t {}
type expected_storage_base (line 448) | struct expected_storage_base {
method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
type dummy (line 652) | struct dummy {}
type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
method construct (line 700) | void construct(Args &&...args) noexcept {
method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 761) | void assign(const expected_operations_base &rhs) {
method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
method assign (line 797) | void assign(expected_operations_base &&rhs) {
method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
method assign_common (line 840) | void assign_common(Rhs &&rhs) {
method has_value (line 855) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
method T (line 858) | constexpr const T &get() const & { return this->m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
method assign (line 900) | void assign(Rhs &&rhs) noexcept {
method has_value (line 915) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
method expected_copy_base (line 949) | expected_copy_base() = default;
method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
type expected_move_base (line 977) | struct expected_move_base
type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
method expected_move_base (line 983) | expected_move_base() = default;
method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
type expected_move_assign_base (line 1046) | struct expected_move_assign_base
type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
method expected_move_assign_base (line 1059) | expected_move_assign_base &
method expected_move_assign_base (line 1062) | expected_move_assign_base &
type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
type default_constructor_tag (line 1182) | struct default_constructor_tag {
method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
type detail (line 436) | namespace detail {
type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
type conjunction (line 238) | struct conjunction : std::true_type {}
type conjunction<B> (line 239) | struct conjunction<B> : B {}
type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
type invoke_result_impl (line 302) | struct invoke_result_impl
type is_swappable (line 321) | struct is_swappable : std::true_type {}
type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
type swap_adl_tests (line 326) | namespace swap_adl_tests {
type tag (line 329) | struct tag {}
type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
type is_swappable (line 362) | struct is_swappable
type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
type no_init_t (line 437) | struct no_init_t {}
type expected_storage_base (line 448) | struct expected_storage_base {
method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
type dummy (line 652) | struct dummy {}
type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
method construct (line 700) | void construct(Args &&...args) noexcept {
method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 761) | void assign(const expected_operations_base &rhs) {
method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
method assign (line 797) | void assign(expected_operations_base &&rhs) {
method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
method assign_common (line 840) | void assign_common(Rhs &&rhs) {
method has_value (line 855) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
method T (line 858) | constexpr const T &get() const & { return this->m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
method assign (line 900) | void assign(Rhs &&rhs) noexcept {
method has_value (line 915) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
method expected_copy_base (line 949) | expected_copy_base() = default;
method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
type expected_move_base (line 977) | struct expected_move_base
type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
method expected_move_base (line 983) | expected_move_base() = default;
method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
type expected_move_assign_base (line 1046) | struct expected_move_assign_base
type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
method expected_move_assign_base (line 1059) | expected_move_assign_base &
method expected_move_assign_base (line 1062) | expected_move_assign_base &
type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
type default_constructor_tag (line 1182) | struct default_constructor_tag {
method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
class bad_expected_access (line 1222) | class bad_expected_access : public std::exception {
method bad_expected_access (line 1224) | explicit bad_expected_access(E e) : m_val(std::move(e)) {}
method E (line 1230) | const E &error() const & { return m_val; }
method E (line 1231) | E &error() & { return m_val; }
method E (line 1232) | const E &&error() const && { return std::move(m_val); }
method E (line 1233) | E &&error() && { return std::move(m_val); }
class expected (line 1247) | class expected : private detail::expected_move_assign_base<T, E>,
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function TL_EXPECTED_MSVC2015_CONSTEXPR (line 1667) | TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v)
function expected (line 1682) | expected &operator=(U &&v) {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function expected (line 1706) | expected &operator=(U &&v) {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function expected (line 1733) | expected &operator=(const unexpected<G> &rhs) {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function expected (line 1748) | expected &operator=(unexpected<G> &&rhs) noexcept {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function emplace (line 1762) | void emplace(Args &&...args) {
function emplace (line 1774) | void emplace(Args &&...args) {
function emplace (line 1800) | void emplace(std::initializer_list<U> il, Args &&...args) {
function emplace (line 1814) | void emplace(std::initializer_list<U> il, Args &&...args) {
function swap_where_both_have_value (line 1845) | void swap_where_both_have_value(expected & /*rhs*/, t_is_void) noexcept {
function swap_where_both_have_value (line 1849) | void swap_where_both_have_value(expected &rhs, t_is_not_void) {
function swap_where_only_one_has_value (line 1854) | void swap_where_only_one_has_value(expected &rhs, t_is_void) noexcept(
function swap_where_only_one_has_value (line 1861) | void swap_where_only_one_has_value(expected &rhs, t_is_not_void) {
type tl (line 129) | namespace tl {
type detail (line 85) | namespace detail {
type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
type conjunction (line 238) | struct conjunction : std::true_type {}
type conjunction<B> (line 239) | struct conjunction<B> : B {}
type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
type invoke_result_impl (line 302) | struct invoke_result_impl
type is_swappable (line 321) | struct is_swappable : std::true_type {}
type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
type swap_adl_tests (line 326) | namespace swap_adl_tests {
type tag (line 329) | struct tag {}
type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
type is_swappable (line 362) | struct is_swappable
type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
type no_init_t (line 437) | struct no_init_t {}
type expected_storage_base (line 448) | struct expected_storage_base {
method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
type dummy (line 652) | struct dummy {}
type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
method construct (line 700) | void construct(Args &&...args) noexcept {
method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 761) | void assign(const expected_operations_base &rhs) {
method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
method assign (line 797) | void assign(expected_operations_base &&rhs) {
method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
method assign_common (line 840) | void assign_common(Rhs &&rhs) {
method has_value (line 855) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
method T (line 858) | constexpr const T &get() const & { return this->m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
method assign (line 900) | void assign(Rhs &&rhs) noexcept {
method has_value (line 915) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
method expected_copy_base (line 949) | expected_copy_base() = default;
method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
type expected_move_base (line 977) | struct expected_move_base
type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
method expected_move_base (line 983) | expected_move_base() = default;
method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
type expected_move_assign_base (line 1046) | struct expected_move_assign_base
type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
method expected_move_assign_base (line 1059) | expected_move_assign_base &
method expected_move_assign_base (line 1062) | expected_move_assign_base &
type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
type default_constructor_tag (line 1182) | struct default_constructor_tag {
method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
class expected (line 130) | class expected
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
class monostate (line 134) | class monostate {}
type in_place_t (line 136) | struct in_place_t {
method in_place_t (line 137) | explicit in_place_t() = default;
class unexpected (line 142) | class unexpected {
method unexpected (line 146) | unexpected() = delete;
method unexpected (line 147) | constexpr explicit unexpected(const E &e) : m_val(e) {}
method unexpected (line 149) | constexpr explicit unexpected(E &&e) : m_val(std::move(e)) {}
method unexpected (line 153) | constexpr explicit unexpected(Args &&...args)
method unexpected (line 159) | constexpr explicit unexpected(std::initializer_list<U> l, Args &&......
method E (line 162) | constexpr const E &value() const & { return m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 163) | TL_EXPECTED_11_CONSTEXPR E &value() & { return m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 164) | TL_EXPECTED_11_CONSTEXPR E &&value() && { return std::move(m_val); }
method E (line 165) | constexpr const E &&value() const && { return std::move(m_val); }
function make_unexpected (line 201) | unexpected<typename std::decay<E>::type> make_unexpected(E &&e) {
type unexpect_t (line 205) | struct unexpect_t {
method unexpect_t (line 206) | unexpect_t() = default;
type detail (line 210) | namespace detail {
type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
type conjunction (line 238) | struct conjunction : std::true_type {}
type conjunction<B> (line 239) | struct conjunction<B> : B {}
type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
type invoke_result_impl (line 302) | struct invoke_result_impl
type is_swappable (line 321) | struct is_swappable : std::true_type {}
type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
type swap_adl_tests (line 326) | namespace swap_adl_tests {
type tag (line 329) | struct tag {}
type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
type is_swappable (line 362) | struct is_swappable
type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
type no_init_t (line 437) | struct no_init_t {}
type expected_storage_base (line 448) | struct expected_storage_base {
method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
type dummy (line 652) | struct dummy {}
type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
method construct (line 700) | void construct(Args &&...args) noexcept {
method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 761) | void assign(const expected_operations_base &rhs) {
method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
method assign (line 797) | void assign(expected_operations_base &&rhs) {
method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
method assign_common (line 840) | void assign_common(Rhs &&rhs) {
method has_value (line 855) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
method T (line 858) | constexpr const T &get() const & { return this->m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
method assign (line 900) | void assign(Rhs &&rhs) noexcept {
method has_value (line 915) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
method expected_copy_base (line 949) | expected_copy_base() = default;
method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
type expected_move_base (line 977) | struct expected_move_base
type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
method expected_move_base (line 983) | expected_move_base() = default;
method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
type expected_move_assign_base (line 1046) | struct expected_move_assign_base
type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
method expected_move_assign_base (line 1059) | expected_move_assign_base &
method expected_move_assign_base (line 1062) | expected_move_assign_base &
type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
type default_constructor_tag (line 1182) | struct default_constructor_tag {
method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
type detail (line 436) | namespace detail {
type is_trivially_copy_constructible (line 87) | struct is_trivially_copy_constructible
type is_trivially_copy_constructible<std::vector<T, A>> (line 91) | struct is_trivially_copy_constructible<std::vector<T, A>> : std::fal...
function TL_EXPECTED_11_CONSTEXPR (line 212) | [[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) {
type conjunction (line 238) | struct conjunction : std::true_type {}
type conjunction<B> (line 239) | struct conjunction<B> : B {}
type is_pointer_to_non_const_member_func (line 253) | struct is_pointer_to_non_const_member_func : std::false_type {}
type is_const_or_const_ref (line 273) | struct is_const_or_const_ref : std::false_type {}
type is_const_or_const_ref<T const &> (line 274) | struct is_const_or_const_ref<T const &> : std::true_type {}
type is_const_or_const_ref<T const> (line 275) | struct is_const_or_const_ref<T const> : std::true_type {}
function invoke (line 287) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
function invoke (line 295) | constexpr auto invoke(Fn &&f, Args &&...args) noexcept(
type invoke_result_impl (line 302) | struct invoke_result_impl
type is_swappable (line 321) | struct is_swappable : std::true_type {}
type is_nothrow_swappable (line 323) | struct is_nothrow_swappable : std::true_type {}
type swap_adl_tests (line 326) | namespace swap_adl_tests {
type tag (line 329) | struct tag {}
type is_std_swap_noexcept (line 348) | struct is_std_swap_noexcept
type is_std_swap_noexcept<T[N]> (line 354) | struct is_std_swap_noexcept<T[N]> : is_std_swap_noexcept<T> {}
type is_adl_swap_noexcept (line 357) | struct is_adl_swap_noexcept
type is_swappable (line 362) | struct is_swappable
type is_swappable<T[N], T[N]> (line 371) | struct is_swappable<T[N], T[N]>
type is_nothrow_swappable (line 380) | struct is_nothrow_swappable
type is_expected_impl (line 392) | struct is_expected_impl : std::false_type {}
type is_expected_impl<expected<T, E>> (line 394) | struct is_expected_impl<expected<T, E>> : std::true_type {}
type no_init_t (line 437) | struct no_init_t {}
type expected_storage_base (line 448) | struct expected_storage_base {
method expected_storage_base (line 449) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 450) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 455) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 461) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 467) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 473) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, true> (line 495) | struct expected_storage_base<T, E, true, true> {
method expected_storage_base (line 496) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 497) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 502) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 508) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 514) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 520) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, true, false> (line 535) | struct expected_storage_base<T, E, true, false> {
method expected_storage_base (line 536) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 543) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 549) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 555) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 561) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<T, E, false, true> (line 581) | struct expected_storage_base<T, E, false, true> {
method expected_storage_base (line 582) | constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {}
method expected_storage_base (line 583) | constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_va...
method expected_storage_base (line 588) | constexpr expected_storage_base(in_place_t, Args &&...args)
method expected_storage_base (line 594) | constexpr expected_storage_base(in_place_t, std::initializer_list<...
method expected_storage_base (line 600) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 606) | constexpr explicit expected_storage_base(unexpect_t,
type expected_storage_base<void, E, false, true> (line 625) | struct expected_storage_base<void, E, false, true> {
method expected_storage_base (line 631) | expected_storage_base() : m_has_val(true) {}
method expected_storage_base (line 633) | constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(fa...
method expected_storage_base (line 635) | constexpr expected_storage_base(in_place_t) : m_has_val(true) {}
method expected_storage_base (line 640) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 646) | constexpr explicit expected_storage_base(unexpect_t,
type dummy (line 652) | struct dummy {}
type expected_storage_base<void, E, false, false> (line 661) | struct expected_storage_base<void, E, false, false> {
method expected_storage_base (line 662) | constexpr expected_storage_base() : m_dummy(), m_has_val(true) {}
method expected_storage_base (line 663) | constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(...
method expected_storage_base (line 665) | constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val...
method expected_storage_base (line 670) | constexpr explicit expected_storage_base(unexpect_t, Args &&...args)
method expected_storage_base (line 676) | constexpr explicit expected_storage_base(unexpect_t,
type expected_operations_base (line 697) | struct expected_operations_base : expected_storage_base<T, E> {
method construct (line 700) | void construct(Args &&...args) noexcept {
method construct_with (line 705) | void construct_with(Rhs &&rhs) noexcept {
method construct_error (line 710) | void construct_error(Args &&...args) noexcept {
method assign (line 727) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 742) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 761) | void assign(const expected_operations_base &rhs) {
method assign (line 785) | void assign(expected_operations_base &&rhs) noexcept {
method assign (line 797) | void assign(expected_operations_base &&rhs) {
method assign (line 819) | void assign(const expected_operations_base &rhs) noexcept {
method assign (line 828) | void assign(expected_operations_base &&rhs) noexcept {
method assign_common (line 840) | void assign_common(Rhs &&rhs) {
method has_value (line 855) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 857) | TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; }
method T (line 858) | constexpr const T &get() const & { return this->m_val; }
method TL_EXPECTED_11_CONSTEXPR (line 859) | TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_v...
method T (line 861) | constexpr const T &&get() const && { return std::move(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 864) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 868) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 877) | TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); }
type expected_operations_base<void, E> (line 883) | struct expected_operations_base<void, E> : expected_storage_base<voi...
method construct (line 886) | void construct() noexcept { this->m_has_val = true; }
method construct_with (line 890) | void construct_with(Rhs &&) noexcept {
method construct_error (line 894) | void construct_error(Args &&...args) noexcept {
method assign (line 900) | void assign(Rhs &&rhs) noexcept {
method has_value (line 915) | bool has_value() const { return this->m_has_val; }
method TL_EXPECTED_11_CONSTEXPR (line 917) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &geterr() & {
method TL_EXPECTED_11_CONSTEXPR (line 921) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &&geterr() && {
method TL_EXPECTED_11_CONSTEXPR (line 930) | TL_EXPECTED_11_CONSTEXPR void destroy_val() {
type expected_copy_base (line 940) | struct expected_copy_base : expected_operations_base<T, E> {
type expected_copy_base<T, E, false> (line 946) | struct expected_copy_base<T, E, false> : expected_operations_base<T,...
method expected_copy_base (line 949) | expected_copy_base() = default;
method expected_copy_base (line 950) | expected_copy_base(const expected_copy_base &rhs)
method expected_copy_base (line 959) | expected_copy_base(expected_copy_base &&rhs) = default;
method expected_copy_base (line 960) | expected_copy_base &operator=(const expected_copy_base &rhs) = def...
method expected_copy_base (line 961) | expected_copy_base &operator=(expected_copy_base &&rhs) = default;
type expected_move_base (line 973) | struct expected_move_base : expected_copy_base<T, E> {
type expected_move_base (line 977) | struct expected_move_base
type expected_move_base<T, E, false> (line 980) | struct expected_move_base<T, E, false> : expected_copy_base<T, E> {
method expected_move_base (line 983) | expected_move_base() = default;
method expected_move_base (line 984) | expected_move_base(const expected_move_base &rhs) = default;
method expected_move_base (line 986) | expected_move_base(expected_move_base &&rhs) noexcept(
method expected_move_base (line 995) | expected_move_base &operator=(const expected_move_base &rhs) = def...
method expected_move_base (line 996) | expected_move_base &operator=(expected_move_base &&rhs) = default;
type expected_copy_assign_base<T, E, false> (line 1013) | struct expected_copy_assign_base<T, E, false> : expected_move_base<T...
method expected_copy_assign_base (line 1016) | expected_copy_assign_base() = default;
method expected_copy_assign_base (line 1017) | expected_copy_assign_base(const expected_copy_assign_base &rhs) = ...
method expected_copy_assign_base (line 1019) | expected_copy_assign_base(expected_copy_assign_base &&rhs) = default;
method expected_copy_assign_base (line 1020) | expected_copy_assign_base &operator=(const expected_copy_assign_ba...
method expected_copy_assign_base (line 1024) | expected_copy_assign_base &
type expected_move_assign_base (line 1042) | struct expected_move_assign_base : expected_copy_assign_base<T, E> {
type expected_move_assign_base (line 1046) | struct expected_move_assign_base
type expected_move_assign_base<T, E, false> (line 1050) | struct expected_move_assign_base<T, E, false>
method expected_move_assign_base (line 1054) | expected_move_assign_base() = default;
method expected_move_assign_base (line 1055) | expected_move_assign_base(const expected_move_assign_base &rhs) = ...
method expected_move_assign_base (line 1057) | expected_move_assign_base(expected_move_assign_base &&rhs) = default;
method expected_move_assign_base (line 1059) | expected_move_assign_base &
method expected_move_assign_base (line 1062) | expected_move_assign_base &
type expected_delete_ctor_base (line 1078) | struct expected_delete_ctor_base {
method expected_delete_ctor_base (line 1079) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1080) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1081) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1082) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1084) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, true, false> (line 1089) | struct expected_delete_ctor_base<T, E, true, false> {
method expected_delete_ctor_base (line 1090) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1091) | expected_delete_ctor_base(const expected_delete_ctor_base &) = def...
method expected_delete_ctor_base (line 1092) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1093) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1095) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, true> (line 1100) | struct expected_delete_ctor_base<T, E, false, true> {
method expected_delete_ctor_base (line 1101) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1102) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1103) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1104) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1106) | expected_delete_ctor_base &
type expected_delete_ctor_base<T, E, false, false> (line 1111) | struct expected_delete_ctor_base<T, E, false, false> {
method expected_delete_ctor_base (line 1112) | expected_delete_ctor_base() = default;
method expected_delete_ctor_base (line 1113) | expected_delete_ctor_base(const expected_delete_ctor_base &) = del...
method expected_delete_ctor_base (line 1114) | expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept =...
method expected_delete_ctor_base (line 1115) | expected_delete_ctor_base &
method expected_delete_ctor_base (line 1117) | expected_delete_ctor_base &
type expected_delete_assign_base (line 1133) | struct expected_delete_assign_base {
method expected_delete_assign_base (line 1134) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1135) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1136) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1138) | expected_delete_assign_base &
method expected_delete_assign_base (line 1140) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, true, false> (line 1145) | struct expected_delete_assign_base<T, E, true, false> {
method expected_delete_assign_base (line 1146) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1147) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1148) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1150) | expected_delete_assign_base &
method expected_delete_assign_base (line 1152) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, true> (line 1157) | struct expected_delete_assign_base<T, E, false, true> {
method expected_delete_assign_base (line 1158) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1159) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1160) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1162) | expected_delete_assign_base &
method expected_delete_assign_base (line 1164) | expected_delete_assign_base &
type expected_delete_assign_base<T, E, false, false> (line 1169) | struct expected_delete_assign_base<T, E, false, false> {
method expected_delete_assign_base (line 1170) | expected_delete_assign_base() = default;
method expected_delete_assign_base (line 1171) | expected_delete_assign_base(const expected_delete_assign_base &) =...
method expected_delete_assign_base (line 1172) | expected_delete_assign_base(expected_delete_assign_base &&) noexce...
method expected_delete_assign_base (line 1174) | expected_delete_assign_base &
method expected_delete_assign_base (line 1176) | expected_delete_assign_base &
type default_constructor_tag (line 1182) | struct default_constructor_tag {
method default_constructor_tag (line 1183) | explicit constexpr default_constructor_tag() = default;
type expected_default_ctor_base (line 1192) | struct expected_default_ctor_base {
method expected_default_ctor_base (line 1193) | constexpr expected_default_ctor_base() noexcept = default;
method expected_default_ctor_base (line 1194) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1196) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1198) | expected_default_ctor_base &
method expected_default_ctor_base (line 1200) | expected_default_ctor_base &
method expected_default_ctor_base (line 1203) | constexpr explicit expected_default_ctor_base(default_constructor_...
type expected_default_ctor_base<T, E, false> (line 1207) | struct expected_default_ctor_base<T, E, false> {
method expected_default_ctor_base (line 1208) | constexpr expected_default_ctor_base() noexcept = delete;
method expected_default_ctor_base (line 1209) | constexpr expected_default_ctor_base(
method expected_default_ctor_base (line 1211) | constexpr expected_default_ctor_base(expected_default_ctor_base &&...
method expected_default_ctor_base (line 1213) | expected_default_ctor_base &
method expected_default_ctor_base (line 1215) | expected_default_ctor_base &
method expected_default_ctor_base (line 1218) | constexpr explicit expected_default_ctor_base(default_constructor_...
class bad_expected_access (line 1222) | class bad_expected_access : public std::exception {
method bad_expected_access (line 1224) | explicit bad_expected_access(E e) : m_val(std::move(e)) {}
method E (line 1230) | const E &error() const & { return m_val; }
method E (line 1231) | E &error() & { return m_val; }
method E (line 1232) | const E &&error() const && { return std::move(m_val); }
method E (line 1233) | E &&error() && { return std::move(m_val); }
class expected (line 1247) | class expected : private detail::expected_move_assign_base<T, E>,
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function TL_EXPECTED_MSVC2015_CONSTEXPR (line 1667) | TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v)
function expected (line 1682) | expected &operator=(U &&v) {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function expected (line 1706) | expected &operator=(U &&v) {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function expected (line 1733) | expected &operator=(const unexpected<G> &rhs) {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function expected (line 1748) | expected &operator=(unexpected<G> &&rhs) noexcept {
method T (line 1261) | T *valptr() { return std::addressof(this->m_val); }
method T (line 1262) | const T *valptr() const { return std::addressof(this->m_val); }
method TL_EXPECTED_11_CONSTEXPR (line 1270) | TL_EXPECTED_11_CONSTEXPR U &val() {
method TL_EXPECTED_11_CONSTEXPR (line 1273) | TL_EXPECTED_11_CONSTEXPR unexpected<E> &err() { return this->m_unexp...
method U (line 1277) | constexpr const U &val() const {
method and_then (line 1292) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & {
method and_then (line 1295) | TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && {
method and_then (line 1298) | constexpr auto and_then(F &&f) const & {
method and_then (line 1303) | constexpr auto and_then(F &&f) const && {
method and_then (line 1310) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1316) | TL_EXPECTED_11_CONSTEXPR auto
method and_then (line 1322) | constexpr auto and_then(F &&f) const & -> decltype(and_then_impl(
method and_then (line 1329) | constexpr auto and_then(F &&f) const && -> decltype(and_then_impl(
method map (line 1338) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & {
method map (line 1341) | TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && {
method map (line 1344) | constexpr auto map(F &&f) const & {
method map (line 1347) | constexpr auto map(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1352) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1358) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method map (line 1364) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method map (line 1372) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method transform (line 1382) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & {
method transform (line 1385) | TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && {
method transform (line 1388) | constexpr auto transform(F &&f) const & {
method transform (line 1391) | constexpr auto transform(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1396) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(
method TL_EXPECTED_11_CONSTEXPR (line 1402) | TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval<exp...
method transform (line 1408) | constexpr decltype(expected_map_impl(std::declval<const expected &>(),
method transform (line 1416) | constexpr decltype(expected_map_impl(std::declval<const expected &&>(),
method map_error (line 1426) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & {
method map_error (line 1429) | TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && {
method map_error (line 1432) | constexpr auto map_error(F &&f) const & {
method map_error (line 1435) | constexpr auto map_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1440) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1446) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method map_error (line 1452) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method map_error (line 1460) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method transform_error (line 1469) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & {
method transform_error (line 1472) | TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && {
method transform_error (line 1475) | constexpr auto transform_error(F &&f) const & {
method transform_error (line 1478) | constexpr auto transform_error(F &&f) const && {
method TL_EXPECTED_11_CONSTEXPR (line 1483) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method TL_EXPECTED_11_CONSTEXPR (line 1489) | TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval<expect...
method transform_error (line 1495) | constexpr decltype(map_error_impl(std::declval<const expected &>(),
method transform_error (line 1503) | constexpr decltype(map_error_impl(std::declval<const expected &&>(),
method expected (line 1510) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & {
method expected (line 1514) | expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && {
method expected (line 1518) | expected constexpr or_else(F &&f) const & {
method expected (line 1523) | expected constexpr or_else(F &&f) const && {
method expected (line 1527) | constexpr expected() = default;
method expected (line 1528) | constexpr expected(const expected &rhs) = default;
method expected (line 1529) | constexpr expected(expected &&rhs) = default;
method expected (line 1530) | expected &operator=(const expected &rhs) = default;
method expected (line 1531) | expected &operator=(expected &&rhs) = default;
method expected (line 1536) | constexpr expected(in_place_t, Args &&...args)
method expected (line 1543) | constexpr expected(in_place_t, std::initializer_list<U> il, Args &&....
method expected (line 1552) | explicit constexpr expected(const unexpected<G> &e)
method expected (line 1561) | constexpr expected(unexpected<G> const &e)
method expected (line 1569) | explicit constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1578) | constexpr expected(unexpected<G> &&e) noexcept(
method expected (line 1586) | constexpr explicit expected(unexpect_t, Args &&...args)
method expected (line 1593) | constexpr explicit expected(unexpect_t, std::initializer_list<U> il,
method TL_EXPECTED_11_CONSTEXPR (line 1619) | TL_EXPECTED_11_CONSTEXPR expected(const expected<U, G> &rhs)
method else (line 1623) | else {
function emplace (line 1762) | void emplace(Args &&...args) {
function emplace (line 1774) | void emplace(Args &&...args) {
function emplace (line 1800) | void emplace(std::initializer_list<U> il, Args &&...args) {
function emplace (line 1814) | void emplace(std::initializer_list<U> il, Args &&...args) {
function swap_where_both_have_value (line 1845) | void swap_where_both_have_value(expected & /*rhs*/, t_is_void) noexcept {
function swap_where_both_have_value (line 1849) | void swap_where_both_have_value(expected &rhs, t_is_not_void) {
function swap_where_only_one_has_value (line 1854) | void swap_where_only_one_has_value(expected &rhs, t_is_void) noexcept(
function swap_where_only_one_has_value (line 1861) | void swap_where_only_one_has_value(expected &rhs, t_is_not_void) {
type conjunction<B, Bs...> (line 241) | struct conjunction<B, Bs...>
type is_pointer_to_non_const_member_func<Ret (T::*)(Args...)> (line 255) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...)>
type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &> (line 258) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &>
type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &&> (line 261) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) &&>
type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile> (line 264) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile>
type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &> (line 267) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &>
type is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &&> (line 270) | struct is_pointer_to_non_const_member_func<Ret (T::*)(Args...) volatile &&>
type invoke_result_impl<
F,
decltype(detail::invoke(std::declval<F>(), std::declval<Us>()...), void()),
Us...> (line 305) | struct invoke_result_impl<
function swap_where_only_one_has_value_and_t_is_not_void (line 1867) | void swap_where_only_one_has_value_and_t_is_not_void(
function swap_where_only_one_has_value_and_t_is_not_void (line 1878) | void swap_where_only_one_has_value_and_t_is_not_void(
function swap_where_only_one_has_value_and_t_is_not_void (line 1901) | void swap_where_only_one_has_value_and_t_is_not_void(
function swap_where_both_have_value (line 1936) | swap_where_both_have_value(rhs, typename std::is_void<T>::type{}
function swap_where_only_one_has_value (line 1940) | swap_where_only_one_has_value(rhs, typename std::is_void<T>::type{}
function T (line 1947) | constexpr const T *operator->() const {
function TL_EXPECTED_11_CONSTEXPR (line 1951) | TL_EXPECTED_11_CONSTEXPR T *operator->() {
function U (line 1958) | constexpr const U &operator*() const & {
function TL_EXPECTED_11_CONSTEXPR (line 1964) | TL_EXPECTED_11_CONSTEXPR U &operator*() & {
function U (line 1970) | constexpr const U &&operator*() const && {
function TL_EXPECTED_11_CONSTEXPR (line 1976) | TL_EXPECTED_11_CONSTEXPR U &&operator*() && {
function has_value (line 1981) | constexpr bool has_value() const noexcept { return this->m_has_val; }
function TL_EXPECTED_11_CONSTEXPR (line 1986) | TL_EXPECTED_11_CONSTEXPR const U &value() const & {
function TL_EXPECTED_11_CONSTEXPR (line 1993) | TL_EXPECTED_11_CONSTEXPR U &value() & {
function TL_EXPECTED_11_CONSTEXPR (line 2000) | TL_EXPECTED_11_CONSTEXPR const U &&value() const && {
function TL_EXPECTED_11_CONSTEXPR (line 2007) | TL_EXPECTED_11_CONSTEXPR U &&value() && {
function E (line 2013) | constexpr const E &error() const & {
function TL_EXPECTED_11_CONSTEXPR (line 2017) | TL_EXPECTED_11_CONSTEXPR E &error() & {
function E (line 2021) | constexpr const E &&error() const && {
function TL_EXPECTED_11_CONSTEXPR (line 2025) | TL_EXPECTED_11_CONSTEXPR E &&error() && {
function T (line 2030) | constexpr T value_or(U &&v) const & {
function TL_EXPECTED_11_CONSTEXPR (line 2036) | TL_EXPECTED_11_CONSTEXPR T value_or(U &&v) && {
type detail
Copy disabled (too large)
Download .json
Condensed preview — 1343 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,332K chars).
[
{
"path": ".devcontainer/Dockerfile",
"chars": 2492,
"preview": "ARG VARIANT=debian-12\nFROM mcr.microsoft.com/devcontainers/base:${VARIANT}\nUSER root\n\n# Install APT packages\nRUN apt-get"
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 616,
"preview": "{\n\t\"build\": {\n\t\t\"dockerfile\": \"Dockerfile\",\n\t\t\"context\": \"..\"\n\t},\n\t\"customizations\": {\n\t\t\"vscode\": {\n\t\t\t\"extensions\": [\n"
},
{
"path": ".devcontainer/fluxbox/apps",
"chars": 172,
"preview": "[transient] (role=GtkFileChooserDialog)\n [Dimensions] {70% 70%}\n [Position] (CENTER) {0 0}\n[end]\n[app] (nam"
},
{
"path": ".devcontainer/fluxbox/menu",
"chars": 1004,
"preview": "[begin] ( Application Menu )\n [exec] (File Manager) { nautilus /workspaces/devilutionX } </usr/share/icons/gnome/32"
},
{
"path": ".editorconfig",
"chars": 1258,
"preview": "root = true\r\n\r\n[*]\r\nindent_style = tab\r\nend_of_line = crlf\r\ncharset = utf-8\r\ntrim_trailing_whitespace = true\r\ninsert_fin"
},
{
"path": ".gdbinit",
"chars": 45,
"preview": "source tools/gdb/devilution_gdb/__init__.py\r\n"
},
{
"path": ".gitattributes",
"chars": 48,
"preview": "# Do not let git change line endings.\r\n* -text\r\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1812,
"preview": "name: Bug report\ndescription: Create a report to help us improve\ntitle: \"[Issue Report]: \"\nlabels: [\"issue report\"]\nbody"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 571,
"preview": "name: Feature Request\ndescription: Request a feature or improvement.\ntitle: \"[Feature Request]: \"\nlabels: [\"enhancement\""
},
{
"path": ".github/dependabot.yml",
"chars": 114,
"preview": "version: 2\nupdates:\n - package-ecosystem: github-actions\n directory: '/'\n schedule:\n interval: weekly\n"
},
{
"path": ".github/workflows/3ds.yml",
"chars": 2487,
"preview": "---\nname: Nintendo 3DS\n\non: # yamllint disable-line rule:truthy\n push:\n branches:\n - master\n paths-ignore:\n"
},
{
"path": ".github/workflows/Android.yml",
"chars": 1464,
"preview": "name: Android\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pull_reques"
},
{
"path": ".github/workflows/Linux_aarch64.yml",
"chars": 3028,
"preview": "name: Linux AArch64 (aarch64-linux-gnu)\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n "
},
{
"path": ".github/workflows/Linux_x86.yml",
"chars": 3020,
"preview": "name: Linux x86 (i386-linux-gnu)\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'doc"
},
{
"path": ".github/workflows/Linux_x86_64.yml",
"chars": 2829,
"preview": "name: Linux x86_64 (x86_64-linux-gnu)\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n -"
},
{
"path": ".github/workflows/Linux_x86_64_SDL1.yml",
"chars": 1697,
"preview": "name: Linux x64 SDL1\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pull"
},
{
"path": ".github/workflows/Linux_x86_64_SDL3_test.yml",
"chars": 1662,
"preview": "name: Linux x64 SDL3 Tests\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n"
},
{
"path": ".github/workflows/Linux_x86_64_test.yml",
"chars": 1619,
"preview": "name: Linux x64 Tests\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pul"
},
{
"path": ".github/workflows/PS4.yml",
"chars": 1684,
"preview": "name: PS4\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pull_request:\n "
},
{
"path": ".github/workflows/PS5.yml",
"chars": 1549,
"preview": "name: PS5 (ps5-payload-dev)\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'"
},
{
"path": ".github/workflows/Windows9x_MinGW.yml",
"chars": 1754,
"preview": "name: Windows 9x MinGW\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pu"
},
{
"path": ".github/workflows/Windows_MSVC_x64.yml",
"chars": 2097,
"preview": "name: Windows MSVC x64\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pu"
},
{
"path": ".github/workflows/Windows_MinGW_x64.yml",
"chars": 3366,
"preview": "name: Windows MinGW x64\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n p"
},
{
"path": ".github/workflows/Windows_MinGW_x86.yml",
"chars": 1424,
"preview": "name: Windows MinGW x86\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n p"
},
{
"path": ".github/workflows/Windows_XP_32bit.yml",
"chars": 1596,
"preview": "name: Windows XP MinGW\n\non:\n release:\n types: [published]\n paths-ignore:\n - '*.md'\n - 'docs/**'\n workf"
},
{
"path": ".github/workflows/amiga-m68k.yml",
"chars": 1538,
"preview": "---\nname: Amiga M68K\n\non: # yamllint disable-line rule:truthy\n push:\n branches:\n - master\n paths-ignore:\n "
},
{
"path": ".github/workflows/cache-cleanup.yml",
"chars": 1030,
"preview": "name: Delete cache for a closed Pull Request\non:\n pull_request:\n types:\n - closed\n\njobs:\n cleanup:\n runs-on"
},
{
"path": ".github/workflows/clang-format-check.yml",
"chars": 788,
"preview": "name: clang-format check\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n "
},
{
"path": ".github/workflows/clang-tidy-check.yml",
"chars": 1476,
"preview": "name: clang-tidy check\n\non:\n push:\n branches:\n - master\n paths: ['**.c', '**.cpp', '**.h', '**.hpp', '**.cxx"
},
{
"path": ".github/workflows/iOS.yml",
"chars": 2165,
"preview": "name: iOS\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pull_request:\n "
},
{
"path": ".github/workflows/macOS_arm64.yml",
"chars": 1678,
"preview": "name: macOS arm64\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pull_re"
},
{
"path": ".github/workflows/macOS_x86_64.yml",
"chars": 1713,
"preview": "name: macOS x86_64\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pull_r"
},
{
"path": ".github/workflows/miyoo_mini_release.yml",
"chars": 1323,
"preview": "name: Miyoo Mini Release Build\n\non:\n release:\n types: [published]\n paths-ignore:\n - '*.md'\n - 'docs/**'"
},
{
"path": ".github/workflows/opendingux_release.yml",
"chars": 2699,
"preview": "name: OpenDingux Release Build\n\non:\n release:\n types: [published]\n paths-ignore:\n - '*.md'\n - 'docs/**'"
},
{
"path": ".github/workflows/retrofw_release.yml",
"chars": 1548,
"preview": "name: RetroFW Release Build\n\non:\n release:\n types: [published]\n paths-ignore:\n - '*.md'\n - 'docs/**'\n "
},
{
"path": ".github/workflows/s390x_qemu_big_endian_tests.yml",
"chars": 1409,
"preview": "name: s390x qemu tests (big-endian)\n\n# The test suite takes ~50m to run so we only trigger it manually\non:\n release:\n "
},
{
"path": ".github/workflows/src_dist_release.yml",
"chars": 2261,
"preview": "name: Build source tarball\n\non:\n release:\n types: [published]\n paths-ignore:\n - '*.md'\n - 'docs/**'\n w"
},
{
"path": ".github/workflows/switch.yml",
"chars": 1351,
"preview": "---\nname: Nintendo Switch\n\non: # yamllint disable-line rule:truthy\n push:\n branches:\n - master\n paths-ignor"
},
{
"path": ".github/workflows/translations.yml",
"chars": 693,
"preview": "name: Validate translations\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'"
},
{
"path": ".github/workflows/vita.yml",
"chars": 1516,
"preview": "---\nname: Sony PlayStation Vita\n\non: # yamllint disable-line rule:truthy\n push:\n branches:\n - master\n paths"
},
{
"path": ".github/workflows/xbox_nxdk.yml",
"chars": 2029,
"preview": "name: Xbox\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n pull_request:\n"
},
{
"path": ".github/workflows/xbox_one.yml",
"chars": 2488,
"preview": "name: Xbox One / Series\n\non:\n push:\n branches:\n - master\n paths-ignore:\n - '*.md'\n - 'docs/**'\n p"
},
{
"path": ".gitignore",
"chars": 8009,
"preview": "# Generated by VC++ 6 builds\n/vc60.idb\n*.asm\n*.idb\n\n# macOS\n.DS_Store\n\n# CodeLite\n.CodeLite\n*.project\n*.workspace\n\n# Dev"
},
{
"path": ".lldbinit",
"chars": 199,
"preview": "script topsrcdir = topsrcdir if \"topsrcdir\" in locals() else os.getcwd()\r\nscript sys.path.append(os.path.join(topsrcdir,"
},
{
"path": "3rdParty/Lua/CMakeLists.txt",
"chars": 1416,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMA"
},
{
"path": "3rdParty/PKWare/CMakeLists.txt",
"chars": 103,
"preview": "add_library(PKWare STATIC\r\n explode.cpp\r\n implode.cpp)\r\ntarget_include_directories(PKWare PUBLIC .)\r\n"
},
{
"path": "3rdParty/PKWare/Makefile",
"chars": 1516,
"preview": "VC5_DIR ?= $(HOME)/DevStudio_5.10/VC\n\n# The $(VS6_DIR) directory is a copy of the \"Microsoft Visual Studio\" directory.\n#"
},
{
"path": "3rdParty/PKWare/PKWare.vcxproj",
"chars": 4593,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microso"
},
{
"path": "3rdParty/PKWare/PKWare.vcxproj.filters",
"chars": 1148,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "3rdParty/PKWare/Pkware.dsp",
"chars": 2903,
"preview": "# Microsoft Developer Studio Project File - Name=\"Pkware\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Bu"
},
{
"path": "3rdParty/PKWare/explode.cpp",
"chars": 21035,
"preview": "/*****************************************************************************/\n/* explode.cpp "
},
{
"path": "3rdParty/PKWare/implode.cpp",
"chars": 32106,
"preview": "/*****************************************************************************/\n/* implode.cpp "
},
{
"path": "3rdParty/PKWare/pkware.h",
"chars": 7583,
"preview": "/*****************************************************************************/\n/* pkware.h "
},
{
"path": "3rdParty/PicoSHA2/picosha2.h",
"chars": 13017,
"preview": "/*\nThe MIT License (MIT)\n\nCopyright (C) 2017 okdshin\n\nPermission is hereby granted, free of charge, to any person obtain"
},
{
"path": "3rdParty/SDL2/CMake/FindSDL2.cmake",
"chars": 715,
"preview": "if(UWP_LIB AND NOT TARGET SDL2::SDL2-static)\r\n set(SDL_BUILD_TYPE \"Release\")\r\n\r\n if(CMAKE_BUILD_TYPE MATCHES \"Debug\")\r"
},
{
"path": "3rdParty/SDL2/CMakeLists.txt",
"chars": 914,
"preview": "if(DEVILUTIONX_STATIC_SDL2)\r\n set(BUILD_SHARED_LIBS OFF)\r\n set(SDL_SHARED OFF)\r\n set(SDL_STATIC ON)\r\n if(PIE)\r\n s"
},
{
"path": "3rdParty/SDL3/CMakeLists.txt",
"chars": 627,
"preview": "if(DEVILUTIONX_STATIC_SDL3)\r\n set(BUILD_SHARED_LIBS OFF)\r\n set(SDL_SHARED OFF)\r\n set(SDL_STATIC ON)\r\n if(PIE)\r\n s"
},
{
"path": "3rdParty/SDL3_image/CMakeLists.txt",
"chars": 1528,
"preview": "include(functions/dependency_options)\r\n\r\nif(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)\r\n find_package(PNG QUIET)\r\n if(PNG_"
},
{
"path": "3rdParty/SDL3_mixer/CMakeLists.txt",
"chars": 1008,
"preview": "include(functions/dependency_options)\r\ninclude(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r"
},
{
"path": "3rdParty/SDL_audiolib/CMakeLists.txt",
"chars": 1402,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nif(DEVILUTIONX_STATIC_SDL_AUDIOLIB)\r\n set(BUILD_SHARED_LIBS "
},
{
"path": "3rdParty/SDL_image/CMakeLists.txt",
"chars": 1638,
"preview": "include(functions/dependency_options)\r\n\r\nif(NOT DEFINED DEVILUTIONX_SYSTEM_LIBPNG)\r\n find_package(PNG QUIET)\r\n if(PNG_"
},
{
"path": "3rdParty/SDL_image/IMG.c",
"chars": 1659,
"preview": "/*\r\n SDL_image: An example image loading library for use with SDL\r\n Copyright (C) 1997-2021 Sam Lantinga <slouken@lib"
},
{
"path": "3rdParty/SheenBidi/CMakeLists.txt",
"chars": 368,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nset(BUILD_TESTING OFF)\r\nset(ASAN OFF)\r"
},
{
"path": "3rdParty/asio/CMakeLists.txt",
"chars": 646,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\nFetchContent_Declare_ExcludeFromAll(as"
},
{
"path": "3rdParty/asio/asio_handle_exception.cpp",
"chars": 410,
"preview": "#include <string_view>\r\n\r\n#define ErrAsio(message) devilution::ErrDlg(\"ASIO Error\", message, __FILE__, __LINE__)\r\n\r\nname"
},
{
"path": "3rdParty/asio/asio_handle_exception.hpp",
"chars": 308,
"preview": "#pragma once\r\n\r\n#include <asio/detail/throw_exception.hpp>\r\n\r\nnamespace asio::detail {\r\n\r\nvoid fatal_exception(const cha"
},
{
"path": "3rdParty/benchmark/CMakeLists.txt",
"chars": 463,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nFetchContent_Declare_ExcludeFromAll(\r\n benchmark\r\n URL http"
},
{
"path": "3rdParty/bzip2/CMakeLists.txt",
"chars": 907,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\n\r\nFetchContent_Declare_ExcludeFromAll("
},
{
"path": "3rdParty/bzip2/bz_internal_error.c",
"chars": 119,
"preview": "#include <stdio.h>\r\n\r\nvoid bz_internal_error(int errcode) {\r\n fprintf(stderr, \"BZip2 fatal error %d\\n\", errcode);\r\n}\r\n"
},
{
"path": "3rdParty/discord/.editorconfig",
"chars": 29,
"preview": "[*.patch]\r\nend_of_line = lf\r\n"
},
{
"path": "3rdParty/discord/CMakeLists.txt",
"chars": 2136,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nfind_package(Patch REQUIRED)\r\n\r\nset(Di"
},
{
"path": "3rdParty/discord/fixes.patch",
"chars": 24722,
"preview": "From 767aff84177e8805933ac4f980d9fc36a8b02af6 Mon Sep 17 00:00:00 2001\nFrom: Gleb Mazovetskiy <glex.spb@gmail.com>\nDate:"
},
{
"path": "3rdParty/find_steam_game/CMakeLists.txt",
"chars": 482,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\nFetchContent_Declare_ExcludeFromAll(fi"
},
{
"path": "3rdParty/googletest/CMakeLists.txt",
"chars": 476,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nFetchContent_Declare_ExcludeFromAll(\r\n googletest\r\n URL htt"
},
{
"path": "3rdParty/libfmt/CMakeLists.txt",
"chars": 1339,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nif(NOT WIN32 AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQ"
},
{
"path": "3rdParty/libmpq/CMakeLists.txt",
"chars": 1200,
"preview": "if(NOT TARGET ZLIB::ZLIB)\r\n find_package(ZLIB REQUIRED)\r\nendif()\r\n\r\nif(NOT TARGET BZip2::BZip2)\r\n find_package(BZip2 R"
},
{
"path": "3rdParty/libmpq/config.h",
"chars": 25,
"preview": "#define VERSION \"0.4.2\"\r\n"
},
{
"path": "3rdParty/libpng/CMakeLists.txt",
"chars": 1187,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMA"
},
{
"path": "3rdParty/libsmackerdec/CMakeLists.txt",
"chars": 1187,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\ninclude(FetchContent)\r\nFetchContent_Declare_ExcludeFromAll(li"
},
{
"path": "3rdParty/libsodium/CMakeLists.txt",
"chars": 594,
"preview": "if(NOT DEVILUTIONX_SYSTEM_LIBSODIUM)\r\n include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n set(SODIUM_MINIMAL "
},
{
"path": "3rdParty/libzt/CMakeLists.txt",
"chars": 1359,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nset(BUILD_HOST_SELFTEST OFF)\r\n\r\ninclude(FetchContent)\r\nFetchC"
},
{
"path": "3rdParty/magic_enum/CMakeLists.txt",
"chars": 318,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nFetchContent_Declare_ExcludeFromAll(ma"
},
{
"path": "3rdParty/sol2/CMakeLists.txt",
"chars": 1107,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nset(SOL2_ENABLE_INSTALL OFF)\r\nset(SOL2"
},
{
"path": "3rdParty/sol2/sol_config/sol/config.hpp",
"chars": 202,
"preview": "#pragma once\r\n\r\n#define SOL_SAFE_USERTYPE 1\r\n#define SOL_SAFE_REFERENCES 1\r\n#define SOL_SAFE_FUNCTION_CALLS 1\r\n#define S"
},
{
"path": "3rdParty/sol2/sol_config/sol/debug.hpp",
"chars": 959,
"preview": "#pragma once\r\n\r\n// sol2 uses std::cout for debug logging by default.\r\n// We want to use SDL logging instead for better c"
},
{
"path": "3rdParty/tl/CMakeLists.txt",
"chars": 97,
"preview": "add_library(tl INTERFACE)\r\n\r\ntarget_include_directories(tl INTERFACE ${CMAKE_CURRENT_LIST_DIR})\r\n"
},
{
"path": "3rdParty/tl/expected.hpp",
"chars": 92765,
"preview": "///\n// expected - An implementation of std::expected with extensions\n// Written in 2017 by Sy Brand (tartanllama@gmail.c"
},
{
"path": "3rdParty/tl/function_ref.hpp",
"chars": 7483,
"preview": "///\r\n// function_ref - A low-overhead non-owning function\r\n// Written in 2017 by Simon Brand (@TartanLlama)\r\n//\r\n// To t"
},
{
"path": "3rdParty/tolk/CMakeLists.txt",
"chars": 861,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMA"
},
{
"path": "3rdParty/unordered_dense/0001-Disable-PMR-support-for-mingw-std-threads-compat.patch",
"chars": 1084,
"preview": "From 78eb7bc8a64099235daa3a8cb249a5ce35a4db07 Mon Sep 17 00:00:00 2001\nFrom: Gleb Mazovetskiy <glex.spb@gmail.com>\nDate:"
},
{
"path": "3rdParty/unordered_dense/CMakeLists.txt",
"chars": 790,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\ninclude(FetchContent)\r\n\r\nset(unordered_dense_URL \"https://githu"
},
{
"path": "3rdParty/zlib/CMake/FindZLIB.cmake",
"chars": 43,
"preview": "# No-op, ZLIB::ZLIB is built from source.\r\n"
},
{
"path": "3rdParty/zlib/CMakeLists.txt",
"chars": 1247,
"preview": "include(functions/FetchContent_ExcludeFromAll_backport)\r\n\r\nset(CMAKE_POLICY_DEFAULT_CMP0048 NEW)\r\n\r\ninclude(FetchContent"
},
{
"path": "Brewfile",
"chars": 139,
"preview": "brew \"cmake\"\r\nbrew \"fmt\"\r\nbrew \"sdl2\"\r\nbrew \"libsodium\"\r\nbrew \"pkg-config\"\r\nbrew \"googletest\"\r\nbrew \"google-benchmark\"\r\n"
},
{
"path": "CMake/Assets.cmake",
"chars": 9233,
"preview": "include(functions/copy_files)\r\ninclude(functions/trim_retired_files)\r\n\r\nif(NOT DEFINED DEVILUTIONX_ASSETS_OUTPUT_DIRECTO"
},
{
"path": "CMake/Definitions.cmake",
"chars": 2500,
"preview": "# Defines without value\r\nforeach(\r\n def_name\r\n NOSOUND\r\n NONET\r\n NOEXIT\r\n PREFILL_PLAYER_NAME\r\n DISABLE_TCP\r\n DIS"
},
{
"path": "CMake/Dependencies.cmake",
"chars": 11550,
"preview": "# Options that control whether to use system dependencies or build them from source,\r\n# and whether to link them statica"
},
{
"path": "CMake/Mods.cmake",
"chars": 2689,
"preview": "include(functions/copy_files)\r\ninclude(functions/trim_retired_files)\r\n\r\nif(NOT DEFINED DEVILUTIONX_MODS_OUTPUT_DIRECTORY"
},
{
"path": "CMake/MoldLinker.cmake",
"chars": 1101,
"preview": "if(NOT CMAKE_CROSSCOMPILING)\r\n find_program(\r\n LD_MOLD_PATH\r\n ld\r\n PATHS\r\n ${CMAKE_INSTALL_PREFIX}/libexec/"
},
{
"path": "CMake/Platforms.cmake",
"chars": 3068,
"preview": "if(HAIKU)\r\n include(platforms/haiku)\r\nendif()\r\n\r\nif(CMAKE_SYSTEM_NAME MATCHES \"FreeBSD|OpenBSD|DragonFly|NetBSD\")\r\n if"
},
{
"path": "CMake/Tests.cmake",
"chars": 7263,
"preview": "include(GoogleTest)\r\ninclude(functions/copy_files)\r\n\r\nadd_library(libdevilutionx_so SHARED)\r\nset_target_properties(libde"
},
{
"path": "CMake/VcPkgManifestFeatures.cmake",
"chars": 506,
"preview": "# See https://vcpkg.readthedocs.io/en/latest/users/manifests/\r\nif(USE_SDL1)\r\n list(APPEND VCPKG_MANIFEST_FEATURES \"sdl1"
},
{
"path": "CMake/finders/FindGperftools.cmake",
"chars": 1621,
"preview": "# Based on https://github.com/baidu/braft/blob/e7776cd03ccc04f18d0f0911200617a89ac3cdf0/cmake/FindGperftools.cmake\r\n\r\n# "
},
{
"path": "CMake/finders/FindSDL2_image.cmake",
"chars": 1309,
"preview": "find_package(SDL2_image CONFIG)\r\n\r\nif(TARGET SDL2_image::SDL2_image)\r\n if(NOT TARGET SDL2::SDL2_image)\r\n add_library"
},
{
"path": "CMake/finders/FindSDL_audiolib.cmake",
"chars": 1099,
"preview": "find_package(PkgConfig)\npkg_check_modules(PC_SDL_audiolib QUIET SDL_audiolib)\n\nfind_path(SDL_audiolib_INCLUDE_DIR aulib."
},
{
"path": "CMake/finders/FindSpeechd.cmake",
"chars": 770,
"preview": "# find speech-dispatcher library and header if available\n# Copyright (c) 2009, Jeremy Whiting <jpwhiting@kde.org>\n# Copy"
},
{
"path": "CMake/finders/Findsimpleini.cmake",
"chars": 2032,
"preview": "find_package(PkgConfig QUIET)\r\nif(PKG_CONFIG_FOUND)\r\n pkg_check_modules(PC_simpleini QUIET simpleini)\r\nendif()\r\n\r\nfind_"
},
{
"path": "CMake/finders/Findsodium.cmake",
"chars": 10413,
"preview": "# Written in 2016 by Henrik Steffen Gaßmann <henrik@gassmann.onl>\r\n#\r\n# To the extent possible under law, the author(s) "
},
{
"path": "CMake/functions/FetchContent_ExcludeFromAll_backport.cmake",
"chars": 932,
"preview": "if(CMAKE_VERSION VERSION_LESS \"3.28.0\")\r\n macro(FetchContent_Declare_ExcludeFromAll)\r\n FetchContent_Declare(${ARGV})"
},
{
"path": "CMake/functions/copy_files.cmake",
"chars": 1109,
"preview": "\r\n# copy_files(\r\n# FILES <file...>\r\n# OUTPUT_DIR <output_dir>\r\n# [SRC_PREFIX <src_prefix>]\r\n# [OUTPUT_VARIABLE <"
},
{
"path": "CMake/functions/dependency_options.cmake",
"chars": 1400,
"preview": "# This function defines 2 options for finding and linking a dependency:\r\n#\r\n# 1. ${SYSTEM_OPTION_NAME}: whether to use t"
},
{
"path": "CMake/functions/devilutionx_library.cmake",
"chars": 2801,
"preview": "include(functions/genex)\r\ninclude(functions/set_relative_file_macro)\r\ninclude(functions/object_libraries)\r\n\r\n# This func"
},
{
"path": "CMake/functions/emscripten_system_library.cmake",
"chars": 723,
"preview": "# This function defines a target that points to an Emscripten system library.\r\n#\r\n# Arguments:\r\n# LIB_NAME: a human-re"
},
{
"path": "CMake/functions/genex.cmake",
"chars": 1926,
"preview": "# Generator expression helpers\r\n\r\n# If \"NEW\", `set(CACHE ...)` does not override non-cache variables\r\nif(POLICY CMP0126)"
},
{
"path": "CMake/functions/git.cmake",
"chars": 305,
"preview": "function(get_git_commit_hash output_var)\r\n execute_process(\r\n COMMAND git log -1 --format=%h\r\n WORKING_DIRECTORY "
},
{
"path": "CMake/functions/object_libraries.cmake",
"chars": 5460,
"preview": "# CMake has limited support for object libraries.\r\n#\r\n# The main limitation of CMake object libraries is the lack\r\n# of "
},
{
"path": "CMake/functions/set_relative_file_macro.cmake",
"chars": 787,
"preview": "# Sets the __FILE__ macro value to be relative to CMAKE_SOURCE_DIR.\r\nfunction(set_relative_file_macro TARGET)\r\n if(NOT "
},
{
"path": "CMake/functions/trim_retired_files.cmake",
"chars": 2186,
"preview": "set(SCRIPT_CONTENT [=[\r\ninclude(functions/trim_retired_files)\r\ntrim_retired_files(\"${ROOT_FOLDER}\" \"${CURRENT_FILES}\" \"$"
},
{
"path": "CMake/platforms/.editorconfig",
"chars": 41,
"preview": "[ios.toolchain.cmake]\r\nend_of_line = lf\r\n"
},
{
"path": "CMake/platforms/aarch64-linux-gnu-clang-static-libc++.toolchain.cmake",
"chars": 1007,
"preview": "set(CMAKE_SYSTEM_NAME Linux)\r\nset(CMAKE_SYSTEM_PROCESSOR aarch64)\r\n\r\nset(triple aarch64-linux-gnu)\r\n\r\nset(CMAKE_C_COMPIL"
},
{
"path": "CMake/platforms/aarch64-linux-gnu.toolchain.cmake",
"chars": 700,
"preview": "set(CMAKE_SYSTEM_NAME Linux)\r\nset(CMAKE_SYSTEM_PROCESSOR aarch64)\r\n\r\nset(CMAKE_C_COMPILER \"/usr/bin/aarch64-linux-gnu-gc"
},
{
"path": "CMake/platforms/amiga.cmake",
"chars": 721,
"preview": "set(BUILD_TESTING OFF)\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(NONET ON)\r\nset(USE_SDL1 ON)\r\nset(SDL1_VIDEO_MODE_BPP 8)\r\n\r\nse"
},
{
"path": "CMake/platforms/android.cmake",
"chars": 1007,
"preview": "# General build options.\r\nset(BUILD_TESTING OFF)\r\n\r\n# Disable all system dependencies.\r\n# All of these will be fetched v"
},
{
"path": "CMake/platforms/cpigamesh.cmake",
"chars": 831,
"preview": "set(BUILD_TESTING OFF)\r\nset(NONET ON)\r\nset(PREFILL_PLAYER_NAME ON)\r\nset(HAS_KBCTRL 1)\r\nset(LTO ON)\r\nset(DIST ON)\r\nset(DE"
},
{
"path": "CMake/platforms/ctr/Tools3DS.cmake",
"chars": 20280,
"preview": "############################################################################\r\n# Various macros for 3DS homebrews tools\r\n"
},
{
"path": "CMake/platforms/ctr/asio_defs.cmake",
"chars": 263,
"preview": "target_compile_definitions(asio INTERFACE\r\n ASIO_DISABLE_THREADS=ON\r\n ASIO_HAS_UNISTD_H=ON)\r\n\r\n# Missing headers and d"
},
{
"path": "CMake/platforms/ctr/bin2s_header.h.in",
"chars": 119,
"preview": "extern const u8 @__BIN_FILE_NAME@_end[];\nextern const u8 @__BIN_FILE_NAME@[];\nextern const u32 @__BIN_FILE_NAME@_size;\n"
},
{
"path": "CMake/platforms/ctr/modules/FindCITRO3D.cmake",
"chars": 2319,
"preview": "# - Try to find citro3d\r\n# You can set CITRO3D_ROOT to specify a certain directory to look in first.\r\n# Once done this w"
},
{
"path": "CMake/platforms/ctr/modules/FindCTRULIB.cmake",
"chars": 1846,
"preview": "# - Try to find ctrulib\r\n# Once done this will define\r\n# LIBCTRU_FOUND - System has ctrulib\r\n# LIBCTRU_INCLUDE_DIRS - "
},
{
"path": "CMake/platforms/ctr/modules/FindPNG.cmake",
"chars": 2156,
"preview": "# - Try to find png\r\n# You can set PNG_ROOT to specify a certain directory to look in first.\r\n# Once done this will defi"
},
{
"path": "CMake/platforms/ctr/modules/FindZLIB.cmake",
"chars": 1972,
"preview": "# - Try to find zlib\r\n# You can set ZLIB_ROOT to specify a certain directory to look in first.\r\n# Once done this will de"
},
{
"path": "CMake/platforms/ctr/modules/LibFindMacros.cmake",
"chars": 10968,
"preview": "# Version 2.2\r\n# Public Domain, originally written by Lasse Kärkkäinen <tronic>\r\n# Maintained at https://github.com/Tron"
},
{
"path": "CMake/platforms/ctr/modules/try_add_imported_target.cmake",
"chars": 566,
"preview": "macro(try_add_imported_target LIBNAME)\r\n string(TOLOWER ${LIBNAME} ${LIBNAME}_lwr)\r\n set(${LIBNAME}_TARGET 3ds::${${LI"
},
{
"path": "CMake/platforms/debian-cross-pkg-config.sh",
"chars": 2241,
"preview": "#!/bin/sh\n# pkg-config wrapper for cross-building\n# Sets pkg-config search path to search multiarch and historical cross"
},
{
"path": "CMake/platforms/djcpp.toolchain.cmake",
"chars": 981,
"preview": "set(CMAKE_SYSTEM_NAME Generic)\r\nset(CMAKE_SYSTEM_VERSION 1)\r\n\r\nif($ENV{DJGPP_PREFIX})\r\n set(DJGPP_PREFIX \"$ENV{DJGPP_PR"
},
{
"path": "CMake/platforms/dos.cmake",
"chars": 794,
"preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(NONET ON)\r\nset(NOSOUND ON)\r\nset(DEFAULT_PER_PIXEL_LIGHTING false)\r\n\r\n"
},
{
"path": "CMake/platforms/emscripten.cmake",
"chars": 631,
"preview": "set(BUILD_TESTING OFF)\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(DISABLE_ZERO_TIER ON)\r\nset(DEVILUTIONX_SYSTEM_SDL_AUDIOLIB OFF)\r\n"
},
{
"path": "CMake/platforms/gkd350h.cmake",
"chars": 1669,
"preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(DISABLE_ZERO_TIER ON)\r\nset(USE_SDL1 ON)\r\n\r\n# Do not warn about unknown attributes, such a"
},
{
"path": "CMake/platforms/haiku.cmake",
"chars": 131,
"preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DEVILUTIONX_STATIC_CXX_STDLIB OFF)\r\n\r\nlist(APPEND DEVILUTIONX_PLATFORM_LINK_LIBRARIES"
},
{
"path": "CMake/platforms/ios.cmake",
"chars": 523,
"preview": "enable_language(OBJC)\r\n\r\n# General build options.\r\nset(BUILD_TESTING OFF)\r\n\r\n# Disable all system dependencies.\r\n# All o"
},
{
"path": "CMake/platforms/ios.toolchain.cmake",
"chars": 53321,
"preview": "# This file is part of the ios-cmake project. It was retrieved from\n# https://github.com/leetal/ios-cmake.git, which is "
},
{
"path": "CMake/platforms/lepus.cmake",
"chars": 1893,
"preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(USE_SDL1 ON)\r\n\r\nset(SDL1_VIDEO_MODE_BPP 8)\r\nset(SDL1_VIDEO_MODE_FLAGS SDL_HWSURFACE|SDL_T"
},
{
"path": "CMake/platforms/linux_i386.toolchain.cmake",
"chars": 1073,
"preview": "message(STATUS \"Using 32-bit toolchain\")\r\n\r\nset(CMAKE_CXX_FLAGS -m32 CACHE STRING \"\")\r\nset(CMAKE_C_FLAGS -m32 CACHE STRI"
},
{
"path": "CMake/platforms/macos_tiger.cmake",
"chars": 607,
"preview": "# ASAN and UBSAN are not supported by macports gcc14 on PowerPC.\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\n\r\n# SDL2 does not build"
},
{
"path": "CMake/platforms/macports/finders/FindMacportsLegacySupport.cmake",
"chars": 1293,
"preview": "# Provides missing functions, such as localtime_r\r\nif(NOT TARGET MacportsLegacySupport::MacportsLegacySupport)\r\n set(Ma"
},
{
"path": "CMake/platforms/mingw/zt_defs.cmake",
"chars": 1014,
"preview": "option(MINGW_STDTHREADS_GENERATE_STDHEADERS \"\" OFF)\r\n\r\n# Workaround for deprecation of older CMake versions\r\nset(CMAKE_P"
},
{
"path": "CMake/platforms/mingw9x/include/windef.h",
"chars": 570,
"preview": "#ifndef _WINDEF_OVERRIDE_\r\n#define _WINDEF_OVERRIDE_\r\n\r\n#include_next <windef.h>\r\n\r\n// MinGW does not define these when "
},
{
"path": "CMake/platforms/mingw9x.toolchain.cmake",
"chars": 1250,
"preview": "SET(MINGW_CROSS TRUE)\r\n\r\nSET(CROSS_PREFIX \"/usr\" CACHE STRING \"crosstool-NG prefix\")\r\n\r\nSET(CMAKE_SYSTEM_NAME Windows)\r\n"
},
{
"path": "CMake/platforms/mingwcc.toolchain.cmake",
"chars": 813,
"preview": "SET(MINGW_CROSS TRUE)\r\n\r\nSET(CROSS_PREFIX \"/usr\" CACHE STRING \"crosstool-NG prefix\")\r\n\r\nSET(CMAKE_SYSTEM_NAME Windows)\r\n"
},
{
"path": "CMake/platforms/mingwcc64.toolchain.cmake",
"chars": 853,
"preview": "SET(MINGW_CROSS TRUE)\r\n\r\nSET(CROSS_PREFIX \"/usr\" CACHE STRING \"crosstool-NG prefix\")\r\n\r\nSET(CMAKE_SYSTEM_NAME Windows)\r\n"
},
{
"path": "CMake/platforms/miyoo_mini.cmake",
"chars": 995,
"preview": "set(USE_SDL1 ON)\r\nset(NONET ON)\r\nset(DEVILUTIONX_SYSTEM_LIBFMT OFF)\r\nset(DEVILUTIONX_SYSTEM_LIBSODIUM OFF)\r\nset(DEVILUTI"
},
{
"path": "CMake/platforms/n3ds.cmake",
"chars": 2092,
"preview": "#General compilation options\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(BUILD_TESTING OFF)\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(DEVI"
},
{
"path": "CMake/platforms/ps4.cmake",
"chars": 699,
"preview": "set(DISCORD_INTEGRATION OFF)\r\nset(BUILD_TESTING OFF)\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nSET(DISABLE_LTO ON)\r\nset(NONET ON)\r"
},
{
"path": "CMake/platforms/retrofw.cmake",
"chars": 766,
"preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(NONET ON)\r\nset(USE_SDL1 ON)\r\nset(PREFILL_PLAYER_NAME ON)\r\nset(HAS_KBCTRL 1)\r\nset(DEVILUTI"
},
{
"path": "CMake/platforms/rg350.cmake",
"chars": 2033,
"preview": "set(BUILD_ASSETS_MPQ OFF)\r\nset(USE_SDL1 ON)\r\n\r\n# LTO temporarily disabled to work around a compiler bug.\r\n# https://gith"
},
{
"path": "CMake/platforms/rg99.cmake",
"chars": 2346,
"preview": "# RG99 has the same layout as RG300 but only 32 MiB RAM\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(UNPACKED_MPQS ON)\r\nset(UNPACKED_"
},
{
"path": "CMake/platforms/switch/asio_defs.cmake",
"chars": 298,
"preview": "# Enables a number of header file definitions required by ASIO\r\ntarget_compile_definitions(asio INTERFACE _DEFAULT_SOURC"
},
{
"path": "CMake/platforms/switch.cmake",
"chars": 604,
"preview": "list(APPEND CMAKE_MODULE_PATH \"${CMAKE_CURRENT_LIST_DIR}/switch\")\r\n\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(BUILD_TESTING OF"
},
{
"path": "CMake/platforms/threads-stub/FindThreads.cmake",
"chars": 176,
"preview": "# Stub out the Threads package.\r\n# Some platforms do not have a system threads library but SDL threads are supported.\r\na"
},
{
"path": "CMake/platforms/uwp_lib.cmake",
"chars": 1085,
"preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(BUILD_ASSETS_MPQ OFF)\r\nset(BUILD_TESTING OFF)\r\nset(DISCORD_INTEGRATION OFF)\r\nset(DEVI"
},
{
"path": "CMake/platforms/vita.cmake",
"chars": 561,
"preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DEVILUTIONX_STATIC_CXX_STDLIB OFF)\r\nset(DEVILUTIONX_SYSTEM_SDL_IMAGE OFF)\r\nset(DEVILU"
},
{
"path": "CMake/platforms/windows.cmake",
"chars": 774,
"preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(DEVILUTIONX_PLATFORM_FILE_UTIL_LINK_LIBRARIES shlwapi)\r\nset(DEVILUTIO"
},
{
"path": "CMake/platforms/windows9x.cmake",
"chars": 1169,
"preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(NONET ON)\r\nset(DISABLE_ZERO_TIER ON)\r\nset(USE_SDL1 ON)\r\nset(DEVILUTIO"
},
{
"path": "CMake/platforms/windowsXP.cmake",
"chars": 904,
"preview": "set(ASAN OFF)\r\nset(UBSAN OFF)\r\nset(DIST ON)\r\n\r\nset(DEVILUTIONX_PLATFORM_FILE_UTIL_LINK_LIBRARIES shlwapi)\r\nset(DEVILUTIO"
},
{
"path": "CMake/platforms/xbox_nxdk/finders/FindPNG.cmake",
"chars": 174,
"preview": "if(NOT TARGET PNG::PNG)\r\n find_package(PkgConfig REQUIRED)\r\n pkg_check_modules(PNG REQUIRED IMPORTED_TARGET libpng)\r\n "
},
{
"path": "CMake/platforms/xbox_nxdk/finders/FindSDL2.cmake",
"chars": 265,
"preview": "if(NOT TARGET SDL2::SDL2)\r\n find_package(PkgConfig REQUIRED)\r\n pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET sdl2)\r\n"
},
{
"path": "CMake/platforms/xbox_nxdk/finders/FindZLIB.cmake",
"chars": 178,
"preview": "if(NOT TARGET ZLIB::ZLIB)\r\n find_package(PkgConfig REQUIRED)\r\n pkg_check_modules(ZLIB REQUIRED IMPORTED_TARGET zlib)\r\n"
},
{
"path": "CMake/platforms/xbox_nxdk.cmake",
"chars": 611,
"preview": "set(NONET ON)\r\nset(ASAN OFF)\r\nset(UBSAN OFF)\r\n\r\nlist(APPEND CMAKE_MODULE_PATH \"${CMAKE_CURRENT_LIST_DIR}/xbox_nxdk/finde"
},
{
"path": "CMakeLists.txt",
"chars": 27793,
"preview": "cmake_minimum_required(VERSION 3.22)\r\n\r\nforeach(_policy CMP0135 CMP0141)\r\n if(POLICY ${_policy})\r\n cmake_policy(SET "
},
{
"path": "CMakeSettings.json",
"chars": 4803,
"preview": "{\r\n \"configurations\": [\r\n {\r\n \"name\": \"x64-Debug\",\r\n \"generator\": \"Ninja\",\r\n \"configurationType\": \"De"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5225,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": "LICENSE.md",
"chars": 3599,
"preview": "# Sustainable Use License\n\nVersion 1.0\n\n## Acceptance\n\nBy using the software, you agree to all of the terms and conditio"
},
{
"path": "Packaging/OpenDingux/.editorconfig",
"chars": 116,
"preview": "[*]\nindent_style = tab\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
},
{
"path": "Packaging/OpenDingux/.gitignore",
"chars": 6,
"preview": "/tmp/\n"
},
{
"path": "Packaging/OpenDingux/README.md",
"chars": 76,
"preview": "# DevilutionX OpenDingux Port\n\nSee docs/building.md for build instructions.\n"
},
{
"path": "Packaging/OpenDingux/build-all.sh",
"chars": 209,
"preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\ncd \"$(dirname \"${BASH_SOURCE[0]}\")/../..\"\n\nsource Packaging/OpenDingux/targets.s"
},
{
"path": "Packaging/OpenDingux/build.sh",
"chars": 6338,
"preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\ncd \"$(dirname \"${BASH_SOURCE[0]}\")/../..\"\n\nsource Packaging/OpenDingux/targets.s"
},
{
"path": "Packaging/OpenDingux/devilutionx-from-disk.sh",
"chars": 733,
"preview": "#!/bin/sh\n\n# Unpacks the mounted OPK to disk before running it\n# in order to avoid the memory overhead of squashfs.\n\nOPK"
},
{
"path": "Packaging/OpenDingux/devilutionx-umount-opk-and-run.sh",
"chars": 60,
"preview": "#!/bin/sh\n\nset -x\necho | sudo -S umount -l \"$PWD\"\nexec \"$@\"\n"
},
{
"path": "Packaging/OpenDingux/gkd350h-manual.txt",
"chars": 1723,
"preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n/usr/local/home/.local/share/diasurgical/devilution/\n\nFor Hell"
},
{
"path": "Packaging/OpenDingux/gkd350h.desktop",
"chars": 216,
"preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for GKD350h\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNo"
},
{
"path": "Packaging/OpenDingux/lepus-manual.txt",
"chars": 1431,
"preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution/\n\nFor Hellfire, also cop"
},
{
"path": "Packaging/OpenDingux/lepus.desktop",
"chars": 244,
"preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for OpenDingux\nExec=devilutionx\nTerminal=false\nType=Application\nStartu"
},
{
"path": "Packaging/OpenDingux/package-opk.sh",
"chars": 1343,
"preview": "#!/usr/bin/env bash\n\ndeclare OPK_DESKTOP_NAME\ndeclare OPK_DESKTOP_EXEC\ndeclare -a OPK_EXTRA_FILES\n\npackage_opk() {\n\tloca"
},
{
"path": "Packaging/OpenDingux/profile-generate.sh",
"chars": 408,
"preview": "#!/bin/sh\n\nset -x\n\nSAVE_DIR=\"$(mktemp -d)\"\ncp \"${PWD}/demo_0_reference_spawn_0_sv\" \"${SAVE_DIR}/\"\ncp \"${PWD}/demo_0.dmo\""
},
{
"path": "Packaging/OpenDingux/retrofw-manual.txt",
"chars": 1374,
"preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution\n\nFor Hellfire, also copy"
},
{
"path": "Packaging/OpenDingux/retrofw.desktop",
"chars": 243,
"preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for RetroFW\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNo"
},
{
"path": "Packaging/OpenDingux/rg350-manual.txt",
"chars": 1612,
"preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution/\n\nFor Hellfire, also cop"
},
{
"path": "Packaging/OpenDingux/rg350.desktop",
"chars": 238,
"preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for RG350\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNoti"
},
{
"path": "Packaging/OpenDingux/rg99-manual.txt",
"chars": 1262,
"preview": "Copy diabdat.mpq from your CD (or GoG install folder) to:\n~/.local/share/diasurgical/devilution/\n\nFor Hellfire, also cop"
},
{
"path": "Packaging/OpenDingux/rg99-pgo.md",
"chars": 2637,
"preview": "# RG99 profile-guided optimization\n\nThe RG99 build must be PGO'd for reasonable performance.\n\nHere are the instructions "
},
{
"path": "Packaging/OpenDingux/rg99.desktop",
"chars": 213,
"preview": "[Desktop Entry]\nName=DevilutionX\nComment=Diablo 1 for RG99\nExec=devilutionx\nTerminal=false\nType=Application\nStartupNotif"
},
{
"path": "Packaging/OpenDingux/targets.sh",
"chars": 437,
"preview": "declare -ra VALID_TARGETS=(\n lepus\n retrofw\n rg99\n rg350\n gkd350h\n)\n\nusage_target() {\n echo -n \"\ttarget: target pl"
},
{
"path": "Packaging/amiga/Dockerfile",
"chars": 453,
"preview": "FROM amigadev/crosstools:m68k-amigaos-gcc10\n\nRUN apt-get update && apt-get install --no-install-recommends -y smpq\nRUN m"
},
{
"path": "Packaging/amiga/prep.sh",
"chars": 882,
"preview": "#!/usr/bin/env bash\n\n# exit when any command fails\nset -euo pipefail\n\n#set compiler params\nexport TARGET='m68k-amigaos'\n"
},
{
"path": "Packaging/apple/Info.plist",
"chars": 2502,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Packaging/apple/LaunchScreen.storyboard",
"chars": 1736,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
},
{
"path": "Packaging/apple/png2icns_tiger/.gitignore",
"chars": 9,
"preview": "/build*/\n"
},
{
"path": "Packaging/apple/png2icns_tiger/CMakeLists.txt",
"chars": 404,
"preview": "# On Debian/Ubuntu, this requires libpng-dev and libicns-dev\ncmake_minimum_required(VERSION 3.22)\nproject(png2icns_tiger"
},
{
"path": "Packaging/apple/png2icns_tiger/png2icns_tiger.c",
"chars": 8746,
"preview": "/*\n * png2icns_tiger - based on png2icns from the pngutils Debian package but\n * modified for Tiger support. See the sec"
}
]
// ... and 1143 more files (download for full content)
About this extraction
This page contains the full source code of the diasurgical/DevilutionX GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1343 files (14.3 MB), approximately 3.8M tokens, and a symbol index with 6711 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.