Compare commits
1 Commits
develop
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
|
c8c9d68497 |
27
.github/workflows/build.yml
vendored
27
.github/workflows/build.yml
vendored
@ -51,3 +51,30 @@ jobs:
|
||||
build/bin/Win32/${{matrix.configuration}}/iw4x.dll
|
||||
build/bin/Win32/${{matrix.configuration}}/iw4x.pdb
|
||||
|
||||
deploy:
|
||||
name: Deploy artifacts
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/develop')
|
||||
steps:
|
||||
- name: Setup develop environment
|
||||
if: github.ref == 'refs/heads/develop'
|
||||
run: echo "DIAMANTE_MASTER_PATH=${{ secrets.DIAMANTE_MASTER_SSH_PATH }}" >> $GITHUB_ENV
|
||||
|
||||
- name: Download Release binaries
|
||||
uses: actions/download-artifact@v3.0.2
|
||||
with:
|
||||
name: Release binaries
|
||||
|
||||
# Set up committer info and GPG key
|
||||
- name: Install SSH key
|
||||
uses: shimataro/ssh-key-action@v2.5.1
|
||||
with:
|
||||
key: ${{ secrets.DIAMANTE_MASTER_SSH_PRIVATE_KEY }}
|
||||
known_hosts: 'just-a-placeholder-so-we-dont-get-errors'
|
||||
|
||||
- name: Add known hosts
|
||||
run: ssh-keyscan -H ${{ secrets.DIAMANTE_MASTER_SSH_ADDRESS }} >> ~/.ssh/known_hosts
|
||||
|
||||
- name: Upload iw4x-client binary
|
||||
run: rsync -avz iw4x.dll ${{ secrets.DIAMANTE_MASTER_SSH_USER }}@${{ secrets.DIAMANTE_MASTER_SSH_ADDRESS }}:${{ env.DIAMANTE_MASTER_PATH }}/legacy/
|
||||
|
@ -35,9 +35,6 @@
|
||||
| `-nosteam` | Disable friends feature and do not update Steam about the game's current status just like an invisible mode. |
|
||||
| `-unprotect-dvars` | Allow the server to modify saved/archive dvars. |
|
||||
| `-zonebuilder` | Start the interactive zonebuilder tool console instead of starting the game. |
|
||||
| `-disable-notifies` | Disable "Anti-CFG" checks |
|
||||
| `-disable-mongoose` | Disable Mongoose HTTP server |
|
||||
| `-disable-rate-limit-check` | Disable RCon rate limit checks |
|
||||
|
||||
## Disclaimer
|
||||
|
||||
|
@ -1,5 +0,0 @@
|
||||
@echo off
|
||||
|
||||
"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\msbuild.exe" build\iw4x.sln /p:Configuration=Release /p:Platform=Win32
|
||||
|
||||
pause
|
@ -1,34 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# IW4x Lobby Server Configuration start-up file
|
||||
# For support visit us on discord https://discord.gg/2ETE8engZM
|
||||
|
||||
# Choose your gamemode of 0-22 of your choice above
|
||||
PlaylistGameMode=1
|
||||
|
||||
# Your Game Server Port. Make sure you Port Forward both UDP & TCP
|
||||
GamePort=28960
|
||||
|
||||
# Offline/Private LAN Party Mode
|
||||
# 0 Disable (Send heartbeats to online serverlist)
|
||||
# 1 Enable (Add to the Local serverlist. Unlisted from Public)
|
||||
LANMode=0
|
||||
|
||||
# Enable logging
|
||||
LogFile=1
|
||||
|
||||
# Load a mod on your server
|
||||
ModFolderName=
|
||||
|
||||
# The name of your edited Playlist from the "userraw" folder goes here (optional)
|
||||
PlaylistFilename=partyserver.cfg
|
||||
|
||||
# Your edited server.cfg in the "userraw" folder goes here...
|
||||
# This is where you edit your hostname, rcon, inactivity, etc
|
||||
# (Optional)
|
||||
ServerFilename=serverlan.cfg
|
||||
|
||||
# Remove this line if automatic updates on start should be disabled
|
||||
./alterware-launcher --update
|
||||
|
||||
wine iw4x.exe -dedicated -stdout +set fs_game "$ModFolderName" +set sv_lanonly "$LANMode" +set net_port "$GamePort" +exec "$ServerFilename" +set logfile "$LogFile" +set party_enable "1" +set playlistFilename "$PlaylistFilename" +playlist "$PlaylistGameMode"
|
@ -1,34 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# IW4x Lobby Server Configuration start-up file
|
||||
# For support visit us on discord https://discord.gg/2ETE8engZM
|
||||
|
||||
# Choose your gamemode of 0-22 of your choice above
|
||||
PlaylistGameMode=1
|
||||
|
||||
# Your Game Server Port. Make sure you Port Forward both UDP & TCP
|
||||
GamePort=28960
|
||||
|
||||
# Offline/Private LAN Party Mode
|
||||
# 0 Disable (Send heartbeats to online serverlist)
|
||||
# 1 Enable (Add to the Local serverlist. Unlisted from Public)
|
||||
LANMode=1
|
||||
|
||||
# Enable logging
|
||||
LogFile=1
|
||||
|
||||
# Load a mod on your server
|
||||
ModFolderName=
|
||||
|
||||
# The name of your edited Playlist from the "userraw" folder goes here (optional)
|
||||
PlaylistFilename=myplaylists.info
|
||||
|
||||
# Your edited server.cfg in the "userraw" folder goes here...
|
||||
# This is where you edit your hostname, rcon, inactivity, etc
|
||||
# (Optional)
|
||||
ServerFilename=partyserverlan.cfg
|
||||
|
||||
# Remove this line if automatic updates on start should be disabled
|
||||
./alterware-launcher --update
|
||||
|
||||
wine iw4x.exe -dedicated -stdout +set fs_game "$ModFolderName" +set sv_lanonly "$LANMode" +set net_port "$GamePort" +exec "$ServerFilename" +set logfile "$LogFile" +set party_enable "1" +set playlistFilename "$PlaylistFilename" +playlist "$PlaylistGameMode"
|
@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# IW4x Dedicated Server Configuration start-up file
|
||||
# For support visit us on discord https://discord.gg/2ETE8engZM
|
||||
|
||||
|
||||
# Your Game Server Port. Make sure you Port Forward both UDP & TCP
|
||||
GamePort=28960
|
||||
|
||||
# Offline/Private LAN Party Mode
|
||||
# 0 Disable (Send heartbeats to online serverlist)
|
||||
# 1 Enable (Add to the Local serverlist. Unlisted from Public)
|
||||
LANMode=0
|
||||
|
||||
# Enable logging
|
||||
LogFile=1
|
||||
|
||||
# Load a mod on your server
|
||||
ModFolderName=
|
||||
|
||||
# Your edited server.cfg in the "userraw" folder goes here...
|
||||
# This is where you edit your hostname, rcon, inactivity, etc
|
||||
# (Optional)
|
||||
ServerFilename=server.cfg
|
||||
|
||||
# Remove this line if automatic updates on start should be disabled
|
||||
./alterware-launcher --update
|
||||
|
||||
wine iw4x.exe -dedicated -stdout +set fs_game "$ModFolderName" +set sv_lanonly "$LANMode" +set net_port "$GamePort" +exec "$ServerFilename" +set logfile "$LogFile" +set party_enable "0" +map_rotate
|
@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# IW4x Dedicated Server Configuration start-up file
|
||||
# For support visit us on discord https://discord.gg/2ETE8engZM
|
||||
|
||||
|
||||
# Your Game Server Port. Make sure you Port Forward both UDP & TCP
|
||||
GamePort=28960
|
||||
|
||||
# Offline/Private LAN Party Mode
|
||||
# 0 Disable (Send heartbeats to online serverlist)
|
||||
# 1 Enable (Add to the Local serverlist. Unlisted from Public)
|
||||
LANMode=1
|
||||
|
||||
# Enable logging
|
||||
LogFile=1
|
||||
|
||||
# Load a mod on your server
|
||||
ModFolderName=
|
||||
|
||||
# Your edited server.cfg in the "userraw" folder goes here...
|
||||
# This is where you edit your hostname, rcon, inactivity, etc
|
||||
# (Optional)
|
||||
ServerFilename=serverlan.cfg
|
||||
|
||||
# Remove this line if automatic updates on start should be disabled
|
||||
./alterware-launcher --update
|
||||
|
||||
wine iw4x.exe -dedicated -stdout +set fs_game "$ModFolderName" +set sv_lanonly "$LANMode" +set net_port "$GamePort" +exec "$ServerFilename" +set logfile "$LogFile" +set party_enable "0" +map_rotate
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,189 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 Default Lobby Server" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 0 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "380" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "500" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end
|
||||
set g_log "logs/lobby_games_mp.log" // Gamelog filename. If you edit this..make sure you change B3.xml if you have bigbrotherbot. IW4MAdmin auto-detects however.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "3" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "1" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
//left alone. in case this missed your bat file. to view more game settings and map rotates check out your playlist.info file or use the right config for a cod4 style server.
|
||||
set party_enable 1
|
@ -1,189 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 LAN Lobby" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://127.0.0.1/IW4x/" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 0 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "0" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "0" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end
|
||||
set g_log "logs/lobbyLAN_games_mp.log" // Gamelog filename. If you edit this..make sure you change B3.xml if you have bigbrotherbot. IW4MAdmin auto-detects however.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "3" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "0" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
//left alone. in case this missed your bat file. to view more game settings and map rotates check out your playlist.info file or use the right config for a cod4 style server.
|
||||
set party_enable 1
|
@ -1,582 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 Default Server" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 2 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "300" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "500" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end. Recommended to stay on for b3 and IW4MAdmin
|
||||
set g_log "logs/games_mp.log" // Gamelog filename. If you edit this, Make sure you change B3.xml if you have bigbrotherbot. IW4MAdmin auto-detects however.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "4" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "1" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set set party_enable "0" // Lobby Mode Server. Read the wiki more about this. If you want sv_maprotation & control your gametype settings. Leave this at 0.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set g_gametype "war" // Default gametype in case map rotation doesn't have any gametypes. Choose a gametype from the list above.
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HARDCORE CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for some hardcore //
|
||||
// by removing the // before each set dvar. //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set g_hardcore "1" // Enable hardcore mode
|
||||
// set scr_hardcore "1" // Enable hardcore mode again...
|
||||
// set ui_hud_hardcore "1" // Removes heads up display in hardcore mode.
|
||||
// set scr_game_deathpointloss "0" // Points Loss on death XP.
|
||||
// set scr_game_onlyheadshots "0" // Enable/Disable Only Headshots mode. You can only kill players by taking headshots.
|
||||
// set scr_player_maxhealth "30" // Percent of Health players will have on Respawn. (100 is normal. 30 is hardcore)
|
||||
// set scr_team_fftype "1" // Enable or Disable Friendly Fire. (1 on, 2 reflect, 3 shared)
|
||||
// set scr_player_healthregentime "0" // Time it takes you to recover damage. (5 is normal, 0 is hardcore)
|
||||
// set scr_team_kickteamkillers "5" // Anyone who team kills, gets kicked automatically if you enable this feature.
|
||||
// set scr_team_teamkillspawndelay "20" // Team Killer gets a respawn penalty of specified seconds (20).
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// FREE FOR ALL GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dm_scorelimit "1500" // Score limit to win the game.
|
||||
set scr_dm_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dm_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dm_numlives "0" // Number of lives per player. 0 for unlimited.
|
||||
set scr_dm_roundlimit "1" // Rounds per game.
|
||||
set scr_dm_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dm_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// TEAM DEATHMATCH GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_war_scorelimit "7500" // Score limit to win the game.
|
||||
set scr_war_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_war_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_war_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_war_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_war_roundlimit "1" // Rounds per game.
|
||||
set scr_war_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_war_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DOMINATION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dom_scorelimit "200" // Score limit to win the game.
|
||||
set scr_dom_timelimit "0" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dom_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dom_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dom_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dom_roundlimit "1" // Rounds per game
|
||||
set scr_dom_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dom_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DEMOLITION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dd_scorelimit "1" // Score limit needed to win.
|
||||
set scr_dd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dd_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dd_roundswitch "1" // Rounds before the teams switch the sides.
|
||||
set scr_dd_bombtimer "45" // Time the bomb takes to detonate.
|
||||
set scr_dd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_dd_planttime "5" // Time it takes to plant a bomb in seconds.
|
||||
set scr_dd_roundlimit "3" // Rounds the game is limited to, if there are no winners.
|
||||
set scr_dd_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SEARCH AND DESTROY GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sd_scorelimit "1" // Score limit required to win the game.
|
||||
set scr_sd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_sd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_sd_numlives "1" // Number of lives per player per game.
|
||||
set scr_sd_roundlimit "0" // Rounds the game is limited to 0 for unlimited.
|
||||
set scr_sd_winlimit "4" // amount of wins needed to win a round-based game.
|
||||
set scr_sd_roundswitch "3" // after X rounds, switch sides.
|
||||
set scr_sd_bombtimer "45" // Time taken for the bomb to detonate.
|
||||
set scr_sd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sd_multibomb "0" // allow multiple people to 'have the bomb'.
|
||||
set scr_sd_planttime "5" // How long will it take player to 'plant the bomb'.
|
||||
set scr_sd_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SABOTAGE GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sab_scorelimit "0" // Score limit to win the match.
|
||||
set scr_sab_timelimit "20" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sab_bombtimer "30" // Duration in seconds the bomb takes to detonate.
|
||||
set scr_sab_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sab_hotpotato "0" // One bomb that the teams must fight over. One defending and one have to plant at the site.
|
||||
set scr_sab_numlives "0" // Number of lives per player per game.
|
||||
set scr_sab_planttime "2.5" // Time taken to plant the bomb.
|
||||
set scr_sab_playerrespawndelay "7.5 // Time before respawn.
|
||||
set scr_sab_roundlimit "1" // Rounds per game.
|
||||
set scr_sab_roundswitch "1" // Rounds needed to be played before the teams switch sides.
|
||||
set scr_sab_waverespawndelay "0" // Time delay for first respawn before the game.
|
||||
set scr_sab_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// CAPTURE THE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_ctf_scorelimit "0" // Target score before the round ends.
|
||||
set scr_ctf_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_ctf_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_ctf_halftime "1" // Half-Time
|
||||
set scr_ctf_roundlimit "1" // How many rounds match would last.
|
||||
set scr_ctf_returntime "30" // How many seconds before flag returns to base without nobody touching it.
|
||||
set scr_ctf_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_ctf_waverespawndelay "10" // Time delay for first respawn before the game.
|
||||
set scr_ctf_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ONE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_oneflag_scorelimit "1" // Target score before the round ends.
|
||||
set scr_oneflag_timelimit "3" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_oneflag_numlives "0" // number of lives per player 0 for unlimited.
|
||||
set scr_oneflag_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_oneflag_roundlimit "1" // How many rounds match would last.
|
||||
set scr_oneflag_roundswitch "1" // Rounds before the teams switch sides.
|
||||
set scr_oneflag_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_oneflag_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HEADQUARTERS GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_koth_scorelimit "250" // Score limit to win the game.
|
||||
set scr_koth_timelimit "15" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_koth_numlives "0" // Number of lives per game. 0 for unlimited.
|
||||
set scr_koth_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_koth_roundlimit "1" // Rounds to be played.
|
||||
set scr_koth_roundswitch "1" // Rounds to be played before teams switch sides.
|
||||
set scr_koth_winlimit "1" // rounds per game
|
||||
set scr_koth_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_koth_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ARENA GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_arena_scorelimit "1" // Score limit to win the game.
|
||||
set scr_arena_timelimit "2.5" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_arena_numlives "1" // Number of lives per game 0 for unlimited.
|
||||
set scr_arena_roundlimit "0" // Rounds to be played.
|
||||
set scr_arena_roundswitch "3" // Rounds before the teams switch sides.
|
||||
set scr_arena_winlimit "4" // rounds per game
|
||||
set scr_arena_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// GLOBAL THERMONUCLEAR WAR GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_gtnw_scorelimit "101" // Score limit to win the game.
|
||||
set scr_gtnw_timelimit "10" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_gtnw_numlives "0" // Number of lives per game 0 for unlimited.
|
||||
set scr_gtnw_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_gtnw_roundlimit "1" // Rounds to be played.
|
||||
set scr_gtnw_roundswitch "0" // Rounds before the teams switch sides.
|
||||
set scr_gtnw_winlimit "1" // rounds per game
|
||||
set scr_gtnw_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_gtnw_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// MAP SHORT NAMES ROTATION LIST //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// mp_afghan - Afghan //
|
||||
// mp_derail - Derail //
|
||||
// mp_estate - Estate //
|
||||
// mp_favela - Favela //
|
||||
// mp_highrise - Highrise //
|
||||
// mp_invasion - Invasion //
|
||||
// mp_checkpoint - Karachi //
|
||||
// mp_quarry - Quarry //
|
||||
// mp_rundown - Rundown //
|
||||
// mp_rust - Rust //
|
||||
// mp_boneyard - Scrapyard //
|
||||
// mp_nightshift - Skidrow //
|
||||
// mp_subbase - Sub Base //
|
||||
// mp_terminal - Terminal //
|
||||
// mp_underpass - Underpass //
|
||||
// mp_brecourt - Wasteland //
|
||||
// //
|
||||
//// DLC1 STIMULUS ///////////////////////////////
|
||||
// //
|
||||
// mp_complex - Bailout //
|
||||
// mp_crash - Crash //
|
||||
// mp_overgrown - Overgrown //
|
||||
// mp_compact - Salvage //
|
||||
// mp_storm - Storm //
|
||||
// //
|
||||
//// DLC2 RESURGENCE /////////////////////////////
|
||||
// //
|
||||
// mp_abandon - Carnival //
|
||||
// mp_fuel2 - Fuel //
|
||||
// mp_strike - Strike //
|
||||
// mp_trailerpark - Trailer Park //
|
||||
// mp_vacant - Vacant //
|
||||
// //
|
||||
//// DLC3 NUKETOWN ///////////////////////////////
|
||||
// //
|
||||
// mp_nuked - Nuketown //
|
||||
// //
|
||||
/// DLC4 CLASSICS 1 //////////////////////////////
|
||||
// //
|
||||
// mp_cross_fire - Crossfire //
|
||||
// mp_bloc - Bloc //
|
||||
// mp_cargoship - Cargoship //
|
||||
// //
|
||||
/// DLC5 CLASSICS 2 //////////////////////////////
|
||||
// //
|
||||
// mp_killhouse - Killhouse //
|
||||
// mp_bog_sh - Bog //
|
||||
// //
|
||||
/// DLC6 FREIGHTER ///////////////////////////////
|
||||
// //
|
||||
// mp_cargoship_sh - Freighter //
|
||||
// //
|
||||
/// DLC7 RESURRECTION ////////////////////////////
|
||||
// //
|
||||
// mp_shipment - Shipment //
|
||||
// mp_shipment_long - Long:Shipment //
|
||||
// mp_rust_long - Long: Rust //
|
||||
// mp_firingrange - Firing Range //
|
||||
// //
|
||||
/// DLC8 RECYCLED ////////////////////////////////
|
||||
// //
|
||||
// mp_storm_spring - Chemical Plant //
|
||||
// mp_fav_tropical - Tropical: Favela //
|
||||
// mp_estate_tropical - Tropical: Estate //
|
||||
// mp_crash_tropical - Tropical: Crash //
|
||||
// mp_bloc_sh - Forgotten City //
|
||||
// //
|
||||
/// DLC9 CLASSICS 3 //////////////////////////////
|
||||
// //
|
||||
// mp_backlot - Backlot //
|
||||
// mp_broadcast - Broadcast //
|
||||
// mp_carentan - Chinatown //
|
||||
// mp_citystreets - District //
|
||||
// mp_convoy - Ambush //
|
||||
// mp_countdown - Countdown //
|
||||
// mp_crash_snow - Winter Crash //
|
||||
// mp_farm - Downpour //
|
||||
// mp_pipeline - Pipeline //
|
||||
// mp_showdown - Showdown //
|
||||
// //
|
||||
/// DLC10 MW3 ////////////////////////////////////
|
||||
// //
|
||||
// mp_dome - Dome //
|
||||
// mp_hardhat - Hardhat //
|
||||
// mp_paris - Resistance //
|
||||
// mp_seatown - Seatown //
|
||||
// mp_bravo - Mission //
|
||||
// mp_underground - Underground //
|
||||
// mp_plaza2 - Arkaden //
|
||||
// mp_village - Village //
|
||||
// mp_alpha - Lockdown //
|
||||
// //
|
||||
/// SP MAPS to MP ////////////////////////////////
|
||||
// //
|
||||
// oilrig - Oilrig //
|
||||
// iw4_credits - Test map //
|
||||
// co_hunted - Village //
|
||||
// //
|
||||
// Example: //
|
||||
// sv_maprotation "map mp_rust map mp_nuked" //
|
||||
// //
|
||||
// Example 24/7 Map: //
|
||||
// sv_maprotation "map mp_highrise" //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// GAMETYPE ROTATION LIST (OPTIONAL) //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// List of gametypes you can use on sv_maprotation to mix gametypes. //
|
||||
// or skip this if you plan on hosting 1 gametype only server. //
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
// Example for mix gametype & map rotation: //
|
||||
// sv_maprotation "gametype dm map mp_rust gametype sd map mp_crash" //
|
||||
// //
|
||||
// You can add additional maps to the certain gametype until it reach //
|
||||
// the next gametype command. //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
addGametype war
|
||||
addMap mp_abandon
|
||||
addMap mp_afghan
|
||||
addMap mp_alpha
|
||||
addMap mp_backlot
|
||||
addMap mp_bloc
|
||||
addMap mp_bloc_sh
|
||||
addMap mp_bog_sh
|
||||
addMap mp_boneyard
|
||||
addMap mp_bravo
|
||||
addMap mp_brecourt
|
||||
addMap mp_broadcast
|
||||
addMap mp_carentan
|
||||
addMap mp_cargoship
|
||||
addMap mp_cargoship_sh
|
||||
addMap mp_checkpoint
|
||||
addMap mp_citystreets
|
||||
addMap mp_compact
|
||||
addMap mp_complex
|
||||
addMap mp_convoy
|
||||
addMap mp_countdown
|
||||
addMap mp_crash
|
||||
addMap mp_crash_snow
|
||||
addMap mp_crash_tropical
|
||||
addMap mp_cross_fire
|
||||
addMap mp_derail
|
||||
addMap mp_dome
|
||||
addMap mp_estate
|
||||
addMap mp_estate_tropical
|
||||
addMap mp_farm
|
||||
addMap mp_fav_tropical
|
||||
addMap mp_favela
|
||||
addMap mp_firingrange
|
||||
addMap mp_fuel2
|
||||
addMap mp_hardhat
|
||||
addMap mp_highrise
|
||||
addMap mp_invasion
|
||||
addMap mp_killhouse
|
||||
addMap mp_nightshift
|
||||
addMap mp_nuked
|
||||
addMap mp_overgrown
|
||||
addMap mp_paris
|
||||
addMap mp_pipeline
|
||||
addMap mp_plaza2
|
||||
addMap mp_quarry
|
||||
addMap mp_rundown
|
||||
addMap mp_rust
|
||||
addMap mp_rust_long
|
||||
addMap mp_seatown
|
||||
addMap mp_shipment
|
||||
addMap mp_shipment_long
|
||||
addMap mp_showdown
|
||||
addMap mp_storm
|
||||
addMap mp_storm_spring
|
||||
addMap mp_strike
|
||||
addMap mp_subbase
|
||||
addMap mp_terminal
|
||||
addMap mp_trailerpark
|
||||
addMap mp_underground
|
||||
addMap mp_underpass
|
||||
addMap mp_vacant
|
||||
addMap mp_village
|
@ -1,582 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 LAN Server" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://127.0.0.1/IW4x/" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 1 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "0" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "0" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end
|
||||
set g_log "logs/localgame_mp.log" // Gamelog filename.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "3" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "0" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set set party_enable "0" // Lobby Mode Server. Read the wiki more about this. If you want sv_maprotation & control your gametype settings. Leave this at 0.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set g_gametype "war" // Default gametype in case map rotation doesn't have any gametypes. Choose a gametype from the list above.
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HARDCORE CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for some hardcore //
|
||||
// by removing the // before each set dvar. //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set g_hardcore "1" // Enable hardcore mode
|
||||
// set scr_hardcore "1" // Enable hardcore mode again...
|
||||
// set ui_hud_hardcore "1" // Removes heads up display in hardcore mode.
|
||||
// set scr_game_deathpointloss "0" // Points Loss on death XP.
|
||||
// set scr_game_onlyheadshots "0" // Enable/Disable Only Headshots mode. You can only kill players by taking headshots.
|
||||
// set scr_player_maxhealth "30" // Percent of Health players will have on Respawn. (100 is normal. 30 is hardcore)
|
||||
// set scr_team_fftype "1" // Enable or Disable Friendly Fire. (1 on, 2 reflect, 3 shared)
|
||||
// set scr_player_healthregentime "0" // Time it takes you to recover damage. (5 is normal, 0 is hardcore)
|
||||
// set scr_team_kickteamkillers "5" // Anyone who team kills, gets kicked automatically if you enable this feature.
|
||||
// set scr_team_teamkillspawndelay "20" // Team Killer gets a respawn penalty of specified seconds (20).
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// FREE FOR ALL GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dm_scorelimit "1500" // Score limit to win the game.
|
||||
set scr_dm_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dm_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dm_numlives "0" // Number of lives per player. 0 for unlimited.
|
||||
set scr_dm_roundlimit "1" // Rounds per game.
|
||||
set scr_dm_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dm_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// TEAM DEATHMATCH GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_war_scorelimit "7500" // Score limit to win the game.
|
||||
set scr_war_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_war_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_war_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_war_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_war_roundlimit "1" // Rounds per game.
|
||||
set scr_war_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_war_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DOMINATION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dom_scorelimit "200" // Score limit to win the game.
|
||||
set scr_dom_timelimit "0" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dom_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dom_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dom_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dom_roundlimit "1" // Rounds per game
|
||||
set scr_dom_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dom_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DEMOLITION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dd_scorelimit "1" // Score limit needed to win.
|
||||
set scr_dd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dd_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dd_roundswitch "1" // Rounds before the teams switch the sides.
|
||||
set scr_dd_bombtimer "45" // Time the bomb takes to detonate.
|
||||
set scr_dd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_dd_planttime "5" // Time it takes to plant a bomb in seconds.
|
||||
set scr_dd_roundlimit "3" // Rounds the game is limited to, if there are no winners.
|
||||
set scr_dd_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SEARCH AND DESTROY GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sd_scorelimit "1" // Score limit required to win the game.
|
||||
set scr_sd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_sd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_sd_numlives "1" // Number of lives per player per game.
|
||||
set scr_sd_roundlimit "0" // Rounds the game is limited to 0 for unlimited.
|
||||
set scr_sd_winlimit "4" // amount of wins needed to win a round-based game.
|
||||
set scr_sd_roundswitch "3" // after X rounds, switch sides.
|
||||
set scr_sd_bombtimer "45" // Time taken for the bomb to detonate.
|
||||
set scr_sd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sd_multibomb "0" // allow multiple people to 'have the bomb'.
|
||||
set scr_sd_planttime "5" // How long will it take player to 'plant the bomb'.
|
||||
set scr_sd_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SABOTAGE GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sab_scorelimit "0" // Score limit to win the match.
|
||||
set scr_sab_timelimit "20" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sab_bombtimer "30" // Duration in seconds the bomb takes to detonate.
|
||||
set scr_sab_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sab_hotpotato "0" // One bomb that the teams must fight over. One defending and one have to plant at the site.
|
||||
set scr_sab_numlives "0" // Number of lives per player per game.
|
||||
set scr_sab_planttime "2.5" // Time taken to plant the bomb.
|
||||
set scr_sab_playerrespawndelay "7.5 // Time before respawn.
|
||||
set scr_sab_roundlimit "1" // Rounds per game.
|
||||
set scr_sab_roundswitch "1" // Rounds needed to be played before the teams switch sides.
|
||||
set scr_sab_waverespawndelay "0" // Time delay for first respawn before the game.
|
||||
set scr_sab_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// CAPTURE THE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_ctf_scorelimit "0" // Target score before the round ends.
|
||||
set scr_ctf_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_ctf_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_ctf_halftime "1" // Half-Time
|
||||
set scr_ctf_roundlimit "1" // How many rounds match would last.
|
||||
set scr_ctf_returntime "30" // How many seconds before flag returns to base without nobody touching it.
|
||||
set scr_ctf_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_ctf_waverespawndelay "10" // Time delay for first respawn before the game.
|
||||
set scr_ctf_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ONE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_oneflag_scorelimit "1" // Target score before the round ends.
|
||||
set scr_oneflag_timelimit "3" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_oneflag_numlives "0" // number of lives per player 0 for unlimited.
|
||||
set scr_oneflag_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_oneflag_roundlimit "1" // How many rounds match would last.
|
||||
set scr_oneflag_roundswitch "1" // Rounds before the teams switch sides.
|
||||
set scr_oneflag_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_oneflag_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HEADQUARTERS GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_koth_scorelimit "250" // Score limit to win the game.
|
||||
set scr_koth_timelimit "15" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_koth_numlives "0" // Number of lives per game. 0 for unlimited.
|
||||
set scr_koth_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_koth_roundlimit "1" // Rounds to be played.
|
||||
set scr_koth_roundswitch "1" // Rounds to be played before teams switch sides.
|
||||
set scr_koth_winlimit "1" // rounds per game
|
||||
set scr_koth_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_koth_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ARENA GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_arena_scorelimit "1" // Score limit to win the game.
|
||||
set scr_arena_timelimit "2.5" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_arena_numlives "1" // Number of lives per game 0 for unlimited.
|
||||
set scr_arena_roundlimit "0" // Rounds to be played.
|
||||
set scr_arena_roundswitch "3" // Rounds before the teams switch sides.
|
||||
set scr_arena_winlimit "4" // rounds per game
|
||||
set scr_arena_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// GLOBAL THERMONUCLEAR WAR GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_gtnw_scorelimit "101" // Score limit to win the game.
|
||||
set scr_gtnw_timelimit "10" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_gtnw_numlives "0" // Number of lives per game 0 for unlimited.
|
||||
set scr_gtnw_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_gtnw_roundlimit "1" // Rounds to be played.
|
||||
set scr_gtnw_roundswitch "0" // Rounds before the teams switch sides.
|
||||
set scr_gtnw_winlimit "1" // rounds per game
|
||||
set scr_gtnw_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_gtnw_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// MAP SHORT NAMES ROTATION LIST //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// mp_afghan - Afghan //
|
||||
// mp_derail - Derail //
|
||||
// mp_estate - Estate //
|
||||
// mp_favela - Favela //
|
||||
// mp_highrise - Highrise //
|
||||
// mp_invasion - Invasion //
|
||||
// mp_checkpoint - Karachi //
|
||||
// mp_quarry - Quarry //
|
||||
// mp_rundown - Rundown //
|
||||
// mp_rust - Rust //
|
||||
// mp_boneyard - Scrapyard //
|
||||
// mp_nightshift - Skidrow //
|
||||
// mp_subbase - Sub Base //
|
||||
// mp_terminal - Terminal //
|
||||
// mp_underpass - Underpass //
|
||||
// mp_brecourt - Wasteland //
|
||||
// //
|
||||
//// DLC1 STIMULUS ///////////////////////////////
|
||||
// //
|
||||
// mp_complex - Bailout //
|
||||
// mp_crash - Crash //
|
||||
// mp_overgrown - Overgrown //
|
||||
// mp_compact - Salvage //
|
||||
// mp_storm - Storm //
|
||||
// //
|
||||
//// DLC2 RESURGENCE /////////////////////////////
|
||||
// //
|
||||
// mp_abandon - Carnival //
|
||||
// mp_fuel2 - Fuel //
|
||||
// mp_strike - Strike //
|
||||
// mp_trailerpark - Trailer Park //
|
||||
// mp_vacant - Vacant //
|
||||
// //
|
||||
//// DLC3 NUKETOWN ///////////////////////////////
|
||||
// //
|
||||
// mp_nuked - Nuketown //
|
||||
// //
|
||||
/// DLC4 CLASSICS 1 //////////////////////////////
|
||||
// //
|
||||
// mp_cross_fire - Crossfire //
|
||||
// mp_bloc - Bloc //
|
||||
// mp_cargoship - Cargoship //
|
||||
// //
|
||||
/// DLC5 CLASSICS 2 //////////////////////////////
|
||||
// //
|
||||
// mp_killhouse - Killhouse //
|
||||
// mp_bog_sh - Bog //
|
||||
// //
|
||||
/// DLC6 FREIGHTER ///////////////////////////////
|
||||
// //
|
||||
// mp_cargoship_sh - Freighter //
|
||||
// //
|
||||
/// DLC7 RESURRECTION ////////////////////////////
|
||||
// //
|
||||
// mp_shipment - Shipment //
|
||||
// mp_shipment_long - Long:Shipment //
|
||||
// mp_rust_long - Long: Rust //
|
||||
// mp_firingrange - Firing Range //
|
||||
// //
|
||||
/// DLC8 RECYCLED ////////////////////////////////
|
||||
// //
|
||||
// mp_storm_spring - Chemical Plant //
|
||||
// mp_fav_tropical - Tropical: Favela //
|
||||
// mp_estate_tropical - Tropical: Estate //
|
||||
// mp_crash_tropical - Tropical: Crash //
|
||||
// mp_bloc_sh - Forgotten City //
|
||||
// //
|
||||
/// DLC9 CLASSICS 3 //////////////////////////////
|
||||
// //
|
||||
// mp_backlot - Backlot //
|
||||
// mp_broadcast - Broadcast //
|
||||
// mp_carentan - Chinatown //
|
||||
// mp_citystreets - District //
|
||||
// mp_convoy - Ambush //
|
||||
// mp_countdown - Countdown //
|
||||
// mp_crash_snow - Winter Crash //
|
||||
// mp_farm - Downpour //
|
||||
// mp_pipeline - Pipeline //
|
||||
// mp_showdown - Showdown //
|
||||
// //
|
||||
/// DLC10 MW3 ////////////////////////////////////
|
||||
// //
|
||||
// mp_dome - Dome //
|
||||
// mp_hardhat - Hardhat //
|
||||
// mp_paris - Resistance //
|
||||
// mp_seatown - Seatown //
|
||||
// mp_bravo - Mission //
|
||||
// mp_underground - Underground //
|
||||
// mp_plaza2 - Arkaden //
|
||||
// mp_village - Village //
|
||||
// mp_alpha - Lockdown //
|
||||
// //
|
||||
/// SP MAPS to MP ////////////////////////////////
|
||||
// //
|
||||
// oilrig - Oilrig //
|
||||
// iw4_credits - Test map //
|
||||
// co_hunted - Village //
|
||||
// //
|
||||
// Example: //
|
||||
// sv_maprotation "map mp_rust map mp_nuked" //
|
||||
// //
|
||||
// Example 24/7 Map: //
|
||||
// sv_maprotation "map mp_highrise" //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// GAMETYPE ROTATION LIST (OPTIONAL) //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// List of gametypes you can use on sv_maprotation to mix gametypes. //
|
||||
// or skip this if you plan on hosting 1 gametype only server. //
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
// Example for mix gametype & map rotation: //
|
||||
// sv_maprotation "gametype dm map mp_rust gametype sd map mp_crash" //
|
||||
// //
|
||||
// You can add additional maps to the certain gametype until it reach //
|
||||
// the next gametype command. //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
addGametype war
|
||||
addMap mp_abandon
|
||||
addMap mp_afghan
|
||||
addMap mp_alpha
|
||||
addMap mp_backlot
|
||||
addMap mp_bloc
|
||||
addMap mp_bloc_sh
|
||||
addMap mp_bog_sh
|
||||
addMap mp_boneyard
|
||||
addMap mp_bravo
|
||||
addMap mp_brecourt
|
||||
addMap mp_broadcast
|
||||
addMap mp_carentan
|
||||
addMap mp_cargoship
|
||||
addMap mp_cargoship_sh
|
||||
addMap mp_checkpoint
|
||||
addMap mp_citystreets
|
||||
addMap mp_compact
|
||||
addMap mp_complex
|
||||
addMap mp_convoy
|
||||
addMap mp_countdown
|
||||
addMap mp_crash
|
||||
addMap mp_crash_snow
|
||||
addMap mp_crash_tropical
|
||||
addMap mp_cross_fire
|
||||
addMap mp_derail
|
||||
addMap mp_dome
|
||||
addMap mp_estate
|
||||
addMap mp_estate_tropical
|
||||
addMap mp_farm
|
||||
addMap mp_fav_tropical
|
||||
addMap mp_favela
|
||||
addMap mp_firingrange
|
||||
addMap mp_fuel2
|
||||
addMap mp_hardhat
|
||||
addMap mp_highrise
|
||||
addMap mp_invasion
|
||||
addMap mp_killhouse
|
||||
addMap mp_nightshift
|
||||
addMap mp_nuked
|
||||
addMap mp_overgrown
|
||||
addMap mp_paris
|
||||
addMap mp_pipeline
|
||||
addMap mp_plaza2
|
||||
addMap mp_quarry
|
||||
addMap mp_rundown
|
||||
addMap mp_rust
|
||||
addMap mp_rust_long
|
||||
addMap mp_seatown
|
||||
addMap mp_shipment
|
||||
addMap mp_shipment_long
|
||||
addMap mp_showdown
|
||||
addMap mp_storm
|
||||
addMap mp_storm_spring
|
||||
addMap mp_strike
|
||||
addMap mp_subbase
|
||||
addMap mp_terminal
|
||||
addMap mp_trailerpark
|
||||
addMap mp_underground
|
||||
addMap mp_underpass
|
||||
addMap mp_vacant
|
||||
addMap mp_village
|
@ -1,102 +0,0 @@
|
||||
@echo off
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::/// IW4x Lobby Server Configuration start-up file ///
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// For support visit us on discord https://discord.gg/2ETE8engZM //
|
||||
::// //
|
||||
::// Default Playlist Gamemode from myplaylists.info //
|
||||
::// (If you change that file around. consider this list useless..) //
|
||||
::// //
|
||||
::// 0 iw4x DLC (bonus edit) //
|
||||
::// 1 Team Deathmatch //
|
||||
::// 2 Hardcore Team Deathmatch //
|
||||
::// 3 Free-for-all //
|
||||
::// 4 Hardcore Free-for-all //
|
||||
::// 5 Domination //
|
||||
::// 6 Hardcore: Domination //
|
||||
::// 7 Search and Destory //
|
||||
::// 8 Hardcore: Search and Destory //
|
||||
::// 9 Demolition //
|
||||
::// 10 Hardcore: Demolition //
|
||||
::// 11 Capture the flag //
|
||||
::// 12 Hardcore: Capture the flag //
|
||||
::// 13 Headquarters //
|
||||
::// 14 Hardcore: Headquarters //
|
||||
::// 15 Sabotage //
|
||||
::// 16 Hardcore: Sabotage //
|
||||
::// 17 Ground War //
|
||||
::// 18 Hardcore: Ground War //
|
||||
::// //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Choose your gamemode of 0-22 of your choice above //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
set PlaylistGameMode=1
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your Game Server Port. //
|
||||
::// Make sure you Port Forward both UDP & TCP //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
set GamePort=28960
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Offline/Private LAN Party Mode //
|
||||
::// 0 Disable (Send heartbeats to online serverlist) //
|
||||
::// 1 Enable (Add to the Local serverlist. Unlisted from Public) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set LANMode=0
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Enable logging. //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set LogFile=1
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Below edits are optional unless you run multiable servers or mods.//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Load a mod on your server //
|
||||
::// Example: ModfolderName=mods/bots //
|
||||
::// //
|
||||
::// UNLOAD a mod on your server //
|
||||
::// Example: ModfolderName= //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ModFolderName=
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your edited Playlist in the "userraw" folder goes here (optional) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set PlaylistFilename=myplaylists.info
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your edited partyserver.cfg in the "userraw" folder goes here //
|
||||
::// This is were you edit your hostname, rcon, inactivity, etc //
|
||||
::// (Optional) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ServerFilename=partyserver.cfg
|
||||
|
||||
:: Remove this line if automatic updates on start should be disabled
|
||||
start /W alterware-launcher.exe --update
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
:://DONE!! WARNING! Don't mess with anything below this line. SEROUSLY!//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
start iw4x.exe -dedicated +set fs_game "%ModFolderName%" +set sv_lanonly "%LANMode%" +set net_port "%GamePort%" +exec %ServerFilename% +set logfile "%LogFile%" +set party_enable "1" +set playlistFilename "%PlaylistFilename%" +playlist "%playlistGameMode%"
|
@ -1,102 +0,0 @@
|
||||
@echo off
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::/// IW4x Lobby Server Configuration start-up file ///
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// For support visit us on discord https://discord.gg/2ETE8engZM //
|
||||
::// //
|
||||
::// Default Playlist Gamemode from myplaylists.info //
|
||||
::// (If you change that file around. consider this list useless..) //
|
||||
::// //
|
||||
::// 0 iw4x DLC (bonus edit) //
|
||||
::// 1 Team Deathmatch //
|
||||
::// 2 Hardcore Team Deathmatch //
|
||||
::// 3 Free-for-all //
|
||||
::// 4 Hardcore Free-for-all //
|
||||
::// 5 Domination //
|
||||
::// 6 Hardcore: Domination //
|
||||
::// 7 Search and Destory //
|
||||
::// 8 Hardcore: Search and Destory //
|
||||
::// 9 Demolition //
|
||||
::// 10 Hardcore: Demolition //
|
||||
::// 11 Capture the flag //
|
||||
::// 12 Hardcore: Capture the flag //
|
||||
::// 13 Headquarters //
|
||||
::// 14 Hardcore: Headquarters //
|
||||
::// 15 Sabotage //
|
||||
::// 16 Hardcore: Sabotage //
|
||||
::// 17 Ground War //
|
||||
::// 18 Hardcore: Ground War //
|
||||
::// //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Choose your gamemode of 0-22 of your choice above //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
set PlaylistGameMode=1
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your Game Server Port. //
|
||||
::// Make sure you Port Forward both UDP & TCP //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
set GamePort=28960
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Offline/Private LAN Party Mode //
|
||||
::// 0 Disable (Send heartbeats to online serverlist) //
|
||||
::// 1 Enable (Add to the Local serverlist. Unlisted from Public) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set LANMode=1
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Enable logging. //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set LogFile=1
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Below edits are optional unless you run multiable servers or mods.//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Load a mod on your server //
|
||||
::// Example: ModfolderName=mods/bots //
|
||||
::// //
|
||||
::// UNLOAD a mod on your server //
|
||||
::// Example: ModfolderName= //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ModFolderName=
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your edited Playlist in the "userraw" folder goes here (optional) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set PlaylistFilename=myplaylists.info
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your edited partyserver.cfg in the "userraw" folder goes here //
|
||||
::// This is were you edit your hostname, rcon, inactivity, etc //
|
||||
::// (Optional) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ServerFilename=partyserverlan.cfg
|
||||
|
||||
:: Remove this line if automatic updates on start should be disabled
|
||||
start /W alterware-launcher.exe --update
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
:://DONE!! WARNING! Don't mess with anything below this line. SEROUSLY!//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
start iw4x.exe -dedicated +set fs_game "%ModFolderName%" +set sv_lanonly "%LANMode%" +set net_port "%GamePort%" +exec %ServerFilename% +set logfile "%LogFile%" +set party_enable "1" +set playlistFilename "%PlaylistFilename%" +playlist "%playlistGameMode%"
|
@ -1,61 +0,0 @@
|
||||
@echo off
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::/// IW4x Dedicated Server Configuration start-up file ///
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// For support visit us on discord https://discord.gg/2ETE8engZM //
|
||||
::// //
|
||||
::// Your Game Server Port. //
|
||||
::// Make sure you Port Forward both UDP & TCP //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
set GamePort=28960
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Offline/Private LAN Party Mode //
|
||||
::// 0 Disable (Send heartbeats to online serverlist) //
|
||||
::// 1 Enable (Add to the Local serverlist. Unlisted from Public) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
set LANMode=0
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Enable logging. //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set LogFile=1
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Below edits are optional unless you run multiable servers or mods.//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Load a mod on your server //
|
||||
::// Example: ModfolderName=mods/bots //
|
||||
::// //
|
||||
::// UNLOAD a mod on your server //
|
||||
::// Example: ModfolderName= //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ModFolderName=
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your edited server.cfg in the "userraw" folder goes here... //
|
||||
::// This is were you edit your hostname, rcon, inactivity, etc //
|
||||
::// (Optional) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ServerFilename=server.cfg
|
||||
|
||||
:: Remove this line if automatic updates on start should be disabled
|
||||
start /W alterware-launcher.exe --update
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
:://DONE!! WARNING! Don't mess with anything below this line. SEROUSLY!//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
start iw4x.exe -dedicated +set fs_game "%ModFolderName%" +set sv_lanonly "%LANMode%" +set net_port "%GamePort%" +exec %ServerFilename% +set logfile "%LogFile%" +set party_enable "0" +map_rotate
|
@ -1,63 +0,0 @@
|
||||
@echo off
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::/// IW4x Dedicated Server Configuration start-up file ///
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// For support visit us on discord https://discord.gg/2ETE8engZM //
|
||||
::// //
|
||||
::// Your Game Server Port. //
|
||||
::// Make sure you Port Forward both UDP & TCP //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
set GamePort=28960
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Offline/Private LAN Party Mode //
|
||||
::// 0 Disable (Send heartbeats to online serverlist) //
|
||||
::// 1 Enable (Add to the Local serverlist. Unlisted from Public) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set LANMode=1
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Enable logging. //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set LogFile=1
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Below edits are optional unless you run multiable servers or mods.//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Load a mod on your server //
|
||||
::// Example: ModfolderName=mods/bots //
|
||||
::// //
|
||||
::// UNLOAD a mod on your server //
|
||||
::// Example: ModfolderName= //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ModFolderName=
|
||||
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
::// Your edited server.cfg in the "userraw" folder goes here... //
|
||||
::// This is were you edit your hostname, rcon, inactivity, etc //
|
||||
::// (Optional) //
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
set ServerFilename=serverlan.cfg
|
||||
|
||||
:: Remove this line if automatic updates on start should be disabled
|
||||
start /W alterware-launcher.exe --update
|
||||
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
:://DONE!! WARNING! Don't mess with anything below this line. SEROUSLY!//
|
||||
::///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
start iw4x.exe -dedicated +set fs_game "%ModFolderName%" +set sv_lanonly "%LANMode%" +set net_port "%GamePort%" +exec %ServerFilename% +set logfile "%LogFile%" +set party_enable "0" +map_rotate
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,189 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 Default Lobby Server" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 0 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "380" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "500" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end
|
||||
set g_log "logs/lobby_games_mp.log" // Gamelog filename. If you edit this..make sure you change B3.xml if you have bigbrotherbot. IW4MAdmin auto-detects however.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "3" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "1" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
//left alone. in case this missed your bat file. to view more game settings and map rotates check out your playlist.info file or use the right config for a cod4 style server.
|
||||
set party_enable 1
|
@ -1,189 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 LAN Lobby" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://127.0.0.1/IW4x/" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 0 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "0" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "0" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end
|
||||
set g_log "logs/lobbyLAN_games_mp.log" // Gamelog filename. If you edit this..make sure you change B3.xml if you have bigbrotherbot. IW4MAdmin auto-detects however.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "3" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "0" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
//left alone. in case this missed your bat file. to view more game settings and map rotates check out your playlist.info file or use the right config for a cod4 style server.
|
||||
set party_enable 1
|
@ -1,582 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 Default Server" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 2 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "300" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "500" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end. Recommended to stay on for b3 and IW4MAdmin
|
||||
set g_log "logs/games_mp.log" // Gamelog filename. If you edit this, Make sure you change B3.xml if you have bigbrotherbot. IW4MAdmin auto-detects however.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "4" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "1" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set set party_enable "0" // Lobby Mode Server. Read the wiki more about this. If you want sv_maprotation & control your gametype settings. Leave this at 0.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set g_gametype "war" // Default gametype in case map rotation doesn't have any gametypes. Choose a gametype from the list above.
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HARDCORE CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for some hardcore //
|
||||
// by removing the // before each set dvar. //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set g_hardcore "1" // Enable hardcore mode
|
||||
// set scr_hardcore "1" // Enable hardcore mode again...
|
||||
// set ui_hud_hardcore "1" // Removes heads up display in hardcore mode.
|
||||
// set scr_game_deathpointloss "0" // Points Loss on death XP.
|
||||
// set scr_game_onlyheadshots "0" // Enable/Disable Only Headshots mode. You can only kill players by taking headshots.
|
||||
// set scr_player_maxhealth "30" // Percent of Health players will have on Respawn. (100 is normal. 30 is hardcore)
|
||||
// set scr_team_fftype "1" // Enable or Disable Friendly Fire. (1 on, 2 reflect, 3 shared)
|
||||
// set scr_player_healthregentime "0" // Time it takes you to recover damage. (5 is normal, 0 is hardcore)
|
||||
// set scr_team_kickteamkillers "5" // Anyone who team kills, gets kicked automatically if you enable this feature.
|
||||
// set scr_team_teamkillspawndelay "20" // Team Killer gets a respawn penalty of specified seconds (20).
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// FREE FOR ALL GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dm_scorelimit "1500" // Score limit to win the game.
|
||||
set scr_dm_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dm_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dm_numlives "0" // Number of lives per player. 0 for unlimited.
|
||||
set scr_dm_roundlimit "1" // Rounds per game.
|
||||
set scr_dm_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dm_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// TEAM DEATHMATCH GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_war_scorelimit "7500" // Score limit to win the game.
|
||||
set scr_war_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_war_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_war_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_war_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_war_roundlimit "1" // Rounds per game.
|
||||
set scr_war_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_war_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DOMINATION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dom_scorelimit "200" // Score limit to win the game.
|
||||
set scr_dom_timelimit "0" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dom_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dom_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dom_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dom_roundlimit "1" // Rounds per game
|
||||
set scr_dom_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dom_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DEMOLITION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dd_scorelimit "1" // Score limit needed to win.
|
||||
set scr_dd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dd_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dd_roundswitch "1" // Rounds before the teams switch the sides.
|
||||
set scr_dd_bombtimer "45" // Time the bomb takes to detonate.
|
||||
set scr_dd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_dd_planttime "5" // Time it takes to plant a bomb in seconds.
|
||||
set scr_dd_roundlimit "3" // Rounds the game is limited to, if there are no winners.
|
||||
set scr_dd_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SEARCH AND DESTROY GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sd_scorelimit "1" // Score limit required to win the game.
|
||||
set scr_sd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_sd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_sd_numlives "1" // Number of lives per player per game.
|
||||
set scr_sd_roundlimit "0" // Rounds the game is limited to 0 for unlimited.
|
||||
set scr_sd_winlimit "4" // amount of wins needed to win a round-based game.
|
||||
set scr_sd_roundswitch "3" // after X rounds, switch sides.
|
||||
set scr_sd_bombtimer "45" // Time taken for the bomb to detonate.
|
||||
set scr_sd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sd_multibomb "0" // allow multiple people to 'have the bomb'.
|
||||
set scr_sd_planttime "5" // How long will it take player to 'plant the bomb'.
|
||||
set scr_sd_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SABOTAGE GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sab_scorelimit "0" // Score limit to win the match.
|
||||
set scr_sab_timelimit "20" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sab_bombtimer "30" // Duration in seconds the bomb takes to detonate.
|
||||
set scr_sab_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sab_hotpotato "0" // One bomb that the teams must fight over. One defending and one have to plant at the site.
|
||||
set scr_sab_numlives "0" // Number of lives per player per game.
|
||||
set scr_sab_planttime "2.5" // Time taken to plant the bomb.
|
||||
set scr_sab_playerrespawndelay "7.5 // Time before respawn.
|
||||
set scr_sab_roundlimit "1" // Rounds per game.
|
||||
set scr_sab_roundswitch "1" // Rounds needed to be played before the teams switch sides.
|
||||
set scr_sab_waverespawndelay "0" // Time delay for first respawn before the game.
|
||||
set scr_sab_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// CAPTURE THE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_ctf_scorelimit "0" // Target score before the round ends.
|
||||
set scr_ctf_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_ctf_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_ctf_halftime "1" // Half-Time
|
||||
set scr_ctf_roundlimit "1" // How many rounds match would last.
|
||||
set scr_ctf_returntime "30" // How many seconds before flag returns to base without nobody touching it.
|
||||
set scr_ctf_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_ctf_waverespawndelay "10" // Time delay for first respawn before the game.
|
||||
set scr_ctf_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ONE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_oneflag_scorelimit "1" // Target score before the round ends.
|
||||
set scr_oneflag_timelimit "3" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_oneflag_numlives "0" // number of lives per player 0 for unlimited.
|
||||
set scr_oneflag_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_oneflag_roundlimit "1" // How many rounds match would last.
|
||||
set scr_oneflag_roundswitch "1" // Rounds before the teams switch sides.
|
||||
set scr_oneflag_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_oneflag_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HEADQUARTERS GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_koth_scorelimit "250" // Score limit to win the game.
|
||||
set scr_koth_timelimit "15" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_koth_numlives "0" // Number of lives per game. 0 for unlimited.
|
||||
set scr_koth_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_koth_roundlimit "1" // Rounds to be played.
|
||||
set scr_koth_roundswitch "1" // Rounds to be played before teams switch sides.
|
||||
set scr_koth_winlimit "1" // rounds per game
|
||||
set scr_koth_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_koth_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ARENA GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_arena_scorelimit "1" // Score limit to win the game.
|
||||
set scr_arena_timelimit "2.5" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_arena_numlives "1" // Number of lives per game 0 for unlimited.
|
||||
set scr_arena_roundlimit "0" // Rounds to be played.
|
||||
set scr_arena_roundswitch "3" // Rounds before the teams switch sides.
|
||||
set scr_arena_winlimit "4" // rounds per game
|
||||
set scr_arena_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// GLOBAL THERMONUCLEAR WAR GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_gtnw_scorelimit "101" // Score limit to win the game.
|
||||
set scr_gtnw_timelimit "10" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_gtnw_numlives "0" // Number of lives per game 0 for unlimited.
|
||||
set scr_gtnw_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_gtnw_roundlimit "1" // Rounds to be played.
|
||||
set scr_gtnw_roundswitch "0" // Rounds before the teams switch sides.
|
||||
set scr_gtnw_winlimit "1" // rounds per game
|
||||
set scr_gtnw_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_gtnw_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// MAP SHORT NAMES ROTATION LIST //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// mp_afghan - Afghan //
|
||||
// mp_derail - Derail //
|
||||
// mp_estate - Estate //
|
||||
// mp_favela - Favela //
|
||||
// mp_highrise - Highrise //
|
||||
// mp_invasion - Invasion //
|
||||
// mp_checkpoint - Karachi //
|
||||
// mp_quarry - Quarry //
|
||||
// mp_rundown - Rundown //
|
||||
// mp_rust - Rust //
|
||||
// mp_boneyard - Scrapyard //
|
||||
// mp_nightshift - Skidrow //
|
||||
// mp_subbase - Sub Base //
|
||||
// mp_terminal - Terminal //
|
||||
// mp_underpass - Underpass //
|
||||
// mp_brecourt - Wasteland //
|
||||
// //
|
||||
//// DLC1 STIMULUS ///////////////////////////////
|
||||
// //
|
||||
// mp_complex - Bailout //
|
||||
// mp_crash - Crash //
|
||||
// mp_overgrown - Overgrown //
|
||||
// mp_compact - Salvage //
|
||||
// mp_storm - Storm //
|
||||
// //
|
||||
//// DLC2 RESURGENCE /////////////////////////////
|
||||
// //
|
||||
// mp_abandon - Carnival //
|
||||
// mp_fuel2 - Fuel //
|
||||
// mp_strike - Strike //
|
||||
// mp_trailerpark - Trailer Park //
|
||||
// mp_vacant - Vacant //
|
||||
// //
|
||||
//// DLC3 NUKETOWN ///////////////////////////////
|
||||
// //
|
||||
// mp_nuked - Nuketown //
|
||||
// //
|
||||
/// DLC4 CLASSICS 1 //////////////////////////////
|
||||
// //
|
||||
// mp_cross_fire - Crossfire //
|
||||
// mp_bloc - Bloc //
|
||||
// mp_cargoship - Cargoship //
|
||||
// //
|
||||
/// DLC5 CLASSICS 2 //////////////////////////////
|
||||
// //
|
||||
// mp_killhouse - Killhouse //
|
||||
// mp_bog_sh - Bog //
|
||||
// //
|
||||
/// DLC6 FREIGHTER ///////////////////////////////
|
||||
// //
|
||||
// mp_cargoship_sh - Freighter //
|
||||
// //
|
||||
/// DLC7 RESURRECTION ////////////////////////////
|
||||
// //
|
||||
// mp_shipment - Shipment //
|
||||
// mp_shipment_long - Long:Shipment //
|
||||
// mp_rust_long - Long: Rust //
|
||||
// mp_firingrange - Firing Range //
|
||||
// //
|
||||
/// DLC8 RECYCLED ////////////////////////////////
|
||||
// //
|
||||
// mp_storm_spring - Chemical Plant //
|
||||
// mp_fav_tropical - Tropical: Favela //
|
||||
// mp_estate_tropical - Tropical: Estate //
|
||||
// mp_crash_tropical - Tropical: Crash //
|
||||
// mp_bloc_sh - Forgotten City //
|
||||
// //
|
||||
/// DLC9 CLASSICS 3 //////////////////////////////
|
||||
// //
|
||||
// mp_backlot - Backlot //
|
||||
// mp_broadcast - Broadcast //
|
||||
// mp_carentan - Chinatown //
|
||||
// mp_citystreets - District //
|
||||
// mp_convoy - Ambush //
|
||||
// mp_countdown - Countdown //
|
||||
// mp_crash_snow - Winter Crash //
|
||||
// mp_farm - Downpour //
|
||||
// mp_pipeline - Pipeline //
|
||||
// mp_showdown - Showdown //
|
||||
// //
|
||||
/// DLC10 MW3 ////////////////////////////////////
|
||||
// //
|
||||
// mp_dome - Dome //
|
||||
// mp_hardhat - Hardhat //
|
||||
// mp_paris - Resistance //
|
||||
// mp_seatown - Seatown //
|
||||
// mp_bravo - Mission //
|
||||
// mp_underground - Underground //
|
||||
// mp_plaza2 - Arkaden //
|
||||
// mp_village - Village //
|
||||
// mp_alpha - Lockdown //
|
||||
// //
|
||||
/// SP MAPS to MP ////////////////////////////////
|
||||
// //
|
||||
// oilrig - Oilrig //
|
||||
// iw4_credits - Test map //
|
||||
// co_hunted - Village //
|
||||
// //
|
||||
// Example: //
|
||||
// sv_maprotation "map mp_rust map mp_nuked" //
|
||||
// //
|
||||
// Example 24/7 Map: //
|
||||
// sv_maprotation "map mp_highrise" //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// GAMETYPE ROTATION LIST (OPTIONAL) //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// List of gametypes you can use on sv_maprotation to mix gametypes. //
|
||||
// or skip this if you plan on hosting 1 gametype only server. //
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
// Example for mix gametype & map rotation: //
|
||||
// sv_maprotation "gametype dm map mp_rust gametype sd map mp_crash" //
|
||||
// //
|
||||
// You can add additional maps to the certain gametype until it reach //
|
||||
// the next gametype command. //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
addGametype war
|
||||
addMap mp_abandon
|
||||
addMap mp_afghan
|
||||
addMap mp_alpha
|
||||
addMap mp_backlot
|
||||
addMap mp_bloc
|
||||
addMap mp_bloc_sh
|
||||
addMap mp_bog_sh
|
||||
addMap mp_boneyard
|
||||
addMap mp_bravo
|
||||
addMap mp_brecourt
|
||||
addMap mp_broadcast
|
||||
addMap mp_carentan
|
||||
addMap mp_cargoship
|
||||
addMap mp_cargoship_sh
|
||||
addMap mp_checkpoint
|
||||
addMap mp_citystreets
|
||||
addMap mp_compact
|
||||
addMap mp_complex
|
||||
addMap mp_convoy
|
||||
addMap mp_countdown
|
||||
addMap mp_crash
|
||||
addMap mp_crash_snow
|
||||
addMap mp_crash_tropical
|
||||
addMap mp_cross_fire
|
||||
addMap mp_derail
|
||||
addMap mp_dome
|
||||
addMap mp_estate
|
||||
addMap mp_estate_tropical
|
||||
addMap mp_farm
|
||||
addMap mp_fav_tropical
|
||||
addMap mp_favela
|
||||
addMap mp_firingrange
|
||||
addMap mp_fuel2
|
||||
addMap mp_hardhat
|
||||
addMap mp_highrise
|
||||
addMap mp_invasion
|
||||
addMap mp_killhouse
|
||||
addMap mp_nightshift
|
||||
addMap mp_nuked
|
||||
addMap mp_overgrown
|
||||
addMap mp_paris
|
||||
addMap mp_pipeline
|
||||
addMap mp_plaza2
|
||||
addMap mp_quarry
|
||||
addMap mp_rundown
|
||||
addMap mp_rust
|
||||
addMap mp_rust_long
|
||||
addMap mp_seatown
|
||||
addMap mp_shipment
|
||||
addMap mp_shipment_long
|
||||
addMap mp_showdown
|
||||
addMap mp_storm
|
||||
addMap mp_storm_spring
|
||||
addMap mp_strike
|
||||
addMap mp_subbase
|
||||
addMap mp_terminal
|
||||
addMap mp_trailerpark
|
||||
addMap mp_underground
|
||||
addMap mp_underpass
|
||||
addMap mp_vacant
|
||||
addMap mp_village
|
@ -1,582 +0,0 @@
|
||||
///////////////////////////////////////////////////
|
||||
/// IW4x Server Configuration file //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// SERVER NAME & COLORS TIPS //
|
||||
///////////////////////////////////////////////////
|
||||
// //
|
||||
// ^1 Red //
|
||||
// ^2 Green //
|
||||
// ^3 yellow //
|
||||
// ^4 Blue //
|
||||
// ^5 Cyan //
|
||||
// ^6 Pink //
|
||||
// ^7 White //
|
||||
// ^8 Depends on the team colors playing. //
|
||||
// ^9 grey //
|
||||
// ^0 Black //
|
||||
// ^: Rainbow colors //
|
||||
// //
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
|
||||
set sv_hostname "^2IW4x^7 LAN Server" // Sets the server hostname
|
||||
set sv_motd "" // Sets a custom motd which is shown on the intel message loadscreen when a player joins. leave blank for defualt intel messages.
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ADMIN INFO (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set _Admin "" // Your username.
|
||||
set _Email "" // E-mail address. you can leave blank
|
||||
set _Website "" // Website
|
||||
set _Location "Earth" // Location
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Web Server Downloading (Optional) //
|
||||
//////////////////////////////////////////////////
|
||||
//set sv_wwwDownload "1" // Allow downloading maps and mods from different server instead of the game server.
|
||||
//set sv_wwwBaseUrl "http://127.0.0.1/IW4x/" // http-Redirect to usermaps & mods folder on a web server. https does NOT work!
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// NON-GAMEPLAY CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set dedicated 1 // True if this is a dedicated server. (0-2) Default is 0 (= listen server). 1 (= dedicated LAN server), 2 (= dedicated internet server).
|
||||
set rcon_password "" // Access to your server to change stuff remotely or ingame. empty disabled
|
||||
set rcon_timeout "100" // Minimum allowed interval between rcon messages per IP address
|
||||
set sv_securityLevel "23" // Configures the servers security level.
|
||||
set sv_customTextColor "" // custom color for ^;
|
||||
set g_password "" // Password Protected Server. Leave blank if you want players to join or set password if you want to keep public out.
|
||||
set g_inactivity "0" // Enable auto kick feature for idle/AFK players
|
||||
set g_inactivitySpectator "0" // Time in seconds before a spectator gets kicked
|
||||
set logfile "2" // Enable loging 1-2? enable. 0 disable. Leave it on if you plan on using B3 or IW4MAdmin.
|
||||
set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end
|
||||
set g_log "logs/localgame_mp.log" // Gamelog filename.
|
||||
set g_allowVote "0" // Enable voting on this server
|
||||
set sv_votesRequired "0" // Votes required for a vote to pass. Settings this to 0 will calculate the required votes based on the number of players (players / 2 + 1)
|
||||
set sv_allowClientConsole "1" // Enable or Disable players ability to access server commands
|
||||
set sv_maxclients "18" // Max players in your server.
|
||||
set party_maxplayers "18" // ^^Same as above for some weird reason^^^
|
||||
set sv_maxPing "0" // Maximum ping allowed during connection, any higher and players will get kicked. ( If you get 'server is for low ping players only' which happens to custom dlc, set this back to 0)
|
||||
set sv_timeout "20" // Timeout time period. You will timeout after (20) seconds when attempting to connect or if you are getting connection interruptions
|
||||
set sv_reconnectlimit "3" // How many times you can try to reconnect
|
||||
set com_logFilter "1" // Removes ~95% of unneeded lines from the log.
|
||||
set sv_pure "0" // verifying cilent files
|
||||
set sv_sayName "^7Console" // name server-side 'say' commands show up as
|
||||
set sv_floodProtect "0" // Chat Spam Protection
|
||||
set sv_kickBanTime "3600" // Kick Ban Duration. Time before player can re-join the server after getting kicked.
|
||||
set sv_randomBotNames "1" // Randomize the names.
|
||||
set sv_replaceBots "1" // Test clients will be replaced by connecting players when the server is full.
|
||||
set set party_enable "0" // Lobby Mode Server. Read the wiki more about this. If you want sv_maprotation & control your gametype settings. Leave this at 0.
|
||||
set sv_voice "1" // Allow Voice Chat (0 = Disable. 1 = Enabled (Teams only).)
|
||||
set sv_voicequality "9" // Voice Chat Quality. (0-9) Default is 3 (= Steam/Console quality). Use 9 for the best quality.
|
||||
set sv_allowAimAssist "1" // Enable Controller Aim-Assist.
|
||||
set sv_allowColoredNames "1" // Allow Colors in Player Names.
|
||||
set sv_randomMapRotation "0" // Randomize map rotation (takes maps and gamemodes from sv_maprotation and randomizes them).
|
||||
set sv_disableChat "0" // Disable chat messages from clients.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// BASE GAME CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set g_gametype "war" // Default gametype in case map rotation doesn't have any gametypes. Choose a gametype from the list above.
|
||||
set scr_player_forcerespawn "1" // Players respawn automatically after being fragged
|
||||
set scr_thirdperson "0" // third-person mode
|
||||
set scr_game_hardpoints "1" // Enable/Disable Killstreak rewards
|
||||
set scr_hardpoint_allowhelicopter "1" // Allow Attack Helicopters
|
||||
set scr_hardpoint_allowuav "1" // Allow UAV
|
||||
set scr_hardpoint_allowartillery "1" // Allow Airstrikes
|
||||
set scr_game_perks "1" // Allow players to have perks
|
||||
set scr_game_allowkillcam "1" // Allow Killcam.
|
||||
set scr_nukeTimer "10" // Timer when nuke goes off
|
||||
set scr_diehard "0" // die-hard mode. Teammates will have to revive each other.
|
||||
set scr_teambalance "1" // Enable or Disable auto balance.
|
||||
set scr_game_spectatetype "2" // Allow Spectators. 0 Disabled, 1 Team/Player only, 2 Free
|
||||
set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide.
|
||||
set scr_player_sprinttime "4" // Sprint time, duration a player can run.
|
||||
set scr_game_killstreakdelay "8" // Delay your killstreaks
|
||||
set scr_game_objectiveStreaks "1" // Enable Chopper, AC130 and Nuke
|
||||
set scr_classic "0" // Enable old-school COD4 killstreaks. UAV, Air Strike, Heli Only.
|
||||
set bg_elevators "1" // Elevator Glitch Settings (default: 1 (normal). 0 = off, 2 = easy).
|
||||
set bg_rocketJump "0" // Enable CoD4 Rocket Jumps.
|
||||
set bg_rocketJumpScale "64" // The scale applied to the pushback force of a rocket.
|
||||
set bg_climbAnything "0" // Treat any surface as a ladder.
|
||||
set bg_bounces "0" // Enable Bounces (default: 0 (disabled). 1 = enabled, 2 = double).
|
||||
set bg_bouncesAllAngles "0" // Enable Bounces from all angles (default: 0 (disabled). 1 = simple, 2 = all surfaces).
|
||||
set bg_disableLandingSlowdown "0" // Toggle landing slowdown.
|
||||
set bg_bunnyHopAuto "0" // Constantly jump when holding space.
|
||||
set bg_playerCollision "1" // Push intersecting players away from each other.
|
||||
set bg_playerEjection "1" // Push intersecting players away from each other.
|
||||
set bg_surfacePenetration "0" // Values greater than 0 override the surface penetration depth (ability to hit players through obstacles).
|
||||
set bg_bulletRange "8192" // Maximum Range used when calculating the bullet end position.
|
||||
set bg_lean "1" // Enable CoD4 leaning.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// XP BOOST CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for XP config //
|
||||
// by removing the // before each set dvar. //
|
||||
// Change "war" gametype to your liking. //
|
||||
// //
|
||||
// DO NOT ABUSE! Some people like to rank. //
|
||||
// DON'T BE A DICK! Warn HIGH XP via hostname. //
|
||||
// Don't know what you doing? Don't touch it! //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//set scr_xpscale "2" // IW's way of Double XP.
|
||||
|
||||
//set scr_war_score_kill "0" // Amount of XP by each kill.
|
||||
//set scr_war_score_headshot "0" // Amount of XP by each headshot.
|
||||
//set scr_war_score_death "0" // Amount of XP by each death.
|
||||
//set scr_war_score_suicide "0" // Amount of XP by each suicide.
|
||||
//set scr_war_score_assist "0" // Amount of XP by each assist.
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HARDCORE CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for some hardcore //
|
||||
// by removing the // before each set dvar. //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set g_hardcore "1" // Enable hardcore mode
|
||||
// set scr_hardcore "1" // Enable hardcore mode again...
|
||||
// set ui_hud_hardcore "1" // Removes heads up display in hardcore mode.
|
||||
// set scr_game_deathpointloss "0" // Points Loss on death XP.
|
||||
// set scr_game_onlyheadshots "0" // Enable/Disable Only Headshots mode. You can only kill players by taking headshots.
|
||||
// set scr_player_maxhealth "30" // Percent of Health players will have on Respawn. (100 is normal. 30 is hardcore)
|
||||
// set scr_team_fftype "1" // Enable or Disable Friendly Fire. (1 on, 2 reflect, 3 shared)
|
||||
// set scr_player_healthregentime "0" // Time it takes you to recover damage. (5 is normal, 0 is hardcore)
|
||||
// set scr_team_kickteamkillers "5" // Anyone who team kills, gets kicked automatically if you enable this feature.
|
||||
// set scr_team_teamkillspawndelay "20" // Team Killer gets a respawn penalty of specified seconds (20).
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_ac130 "3"
|
||||
// set scr_airdrop_ammo "17"
|
||||
// set scr_airdrop_counter_uav "15"
|
||||
// set scr_airdrop_emp "1"
|
||||
// set scr_airdrop_harrier_airstrike "7"
|
||||
// set scr_airdrop_helicopter "7"
|
||||
// set scr_airdrop_helicopter_flares "5"
|
||||
// set scr_airdrop_helicopter_minigun "3"
|
||||
// set scr_airdrop_nuke "0"
|
||||
// set scr_airdrop_precision_airstrike "11"
|
||||
// set scr_airdrop_predator_missile "12"
|
||||
// set scr_airdrop_sentry "12"
|
||||
// set scr_airdrop_stealth_airstrike "5"
|
||||
// set scr_airdrop_uav "17"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// EMERGENCY AIRDROP CONFIGURATION //
|
||||
//////////////////////////////////////////////////
|
||||
// uncomment below commands for airdrop config //
|
||||
// by removing the // before each set dvar. //
|
||||
// //
|
||||
// Weight (1->1000) //
|
||||
// Selection is weighted random //
|
||||
// higher weights increase selection chance //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// set scr_airdrop_mega_ac130 "2"
|
||||
// set scr_airdrop_mega_ammo "12"
|
||||
// set scr_airdrop_mega_counter_uav "16"
|
||||
// set scr_airdrop_mega_emp "0"
|
||||
// set scr_airdrop_mega_harrier_airstrike "5"
|
||||
// set scr_airdrop_mega_helicopter "5"
|
||||
// set scr_airdrop_mega_helicopter_flares "3"
|
||||
// set scr_airdrop_mega_helicopter_minigun "2"
|
||||
// set scr_airdrop_mega_nuke "0"
|
||||
// set scr_airdrop_mega_precision_airstrike "10"
|
||||
// set scr_airdrop_mega_predator_missile "14"
|
||||
// set scr_airdrop_mega_sentry "16"
|
||||
// set scr_airdrop_mega_stealth_airstrike "3"
|
||||
// set scr_airdrop_mega_uav "12"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// FREE FOR ALL GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dm_scorelimit "1500" // Score limit to win the game.
|
||||
set scr_dm_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dm_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dm_numlives "0" // Number of lives per player. 0 for unlimited.
|
||||
set scr_dm_roundlimit "1" // Rounds per game.
|
||||
set scr_dm_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dm_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// TEAM DEATHMATCH GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_war_scorelimit "7500" // Score limit to win the game.
|
||||
set scr_war_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_war_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_war_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_war_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_war_roundlimit "1" // Rounds per game.
|
||||
set scr_war_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_war_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DOMINATION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dom_scorelimit "200" // Score limit to win the game.
|
||||
set scr_dom_timelimit "0" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dom_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dom_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dom_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dom_roundlimit "1" // Rounds per game
|
||||
set scr_dom_winlimit "1" // amount of wins needed to win a round-based game
|
||||
set scr_dom_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// DEMOLITION GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_dd_scorelimit "1" // Score limit needed to win.
|
||||
set scr_dd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_dd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_dd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_dd_numlives "0" // Number of lives per player per game. 0 is unlimited.
|
||||
set scr_dd_roundswitch "1" // Rounds before the teams switch the sides.
|
||||
set scr_dd_bombtimer "45" // Time the bomb takes to detonate.
|
||||
set scr_dd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_dd_planttime "5" // Time it takes to plant a bomb in seconds.
|
||||
set scr_dd_roundlimit "3" // Rounds the game is limited to, if there are no winners.
|
||||
set scr_dd_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SEARCH AND DESTROY GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sd_scorelimit "1" // Score limit required to win the game.
|
||||
set scr_sd_timelimit "2.5" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sd_playerrespawndelay "0" // How long player will wait until respawn.
|
||||
set scr_sd_waverespawndelay "0" // Duration is seconds before the first respawn in each round.
|
||||
set scr_sd_numlives "1" // Number of lives per player per game.
|
||||
set scr_sd_roundlimit "0" // Rounds the game is limited to 0 for unlimited.
|
||||
set scr_sd_winlimit "4" // amount of wins needed to win a round-based game.
|
||||
set scr_sd_roundswitch "3" // after X rounds, switch sides.
|
||||
set scr_sd_bombtimer "45" // Time taken for the bomb to detonate.
|
||||
set scr_sd_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sd_multibomb "0" // allow multiple people to 'have the bomb'.
|
||||
set scr_sd_planttime "5" // How long will it take player to 'plant the bomb'.
|
||||
set scr_sd_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// SABOTAGE GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_sab_scorelimit "0" // Score limit to win the match.
|
||||
set scr_sab_timelimit "20" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_sab_bombtimer "30" // Duration in seconds the bomb takes to detonate.
|
||||
set scr_sab_defusetime "5" // Time taken to defuse the bomb.
|
||||
set scr_sab_hotpotato "0" // One bomb that the teams must fight over. One defending and one have to plant at the site.
|
||||
set scr_sab_numlives "0" // Number of lives per player per game.
|
||||
set scr_sab_planttime "2.5" // Time taken to plant the bomb.
|
||||
set scr_sab_playerrespawndelay "7.5 // Time before respawn.
|
||||
set scr_sab_roundlimit "1" // Rounds per game.
|
||||
set scr_sab_roundswitch "1" // Rounds needed to be played before the teams switch sides.
|
||||
set scr_sab_waverespawndelay "0" // Time delay for first respawn before the game.
|
||||
set scr_sab_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// CAPTURE THE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_ctf_scorelimit "0" // Target score before the round ends.
|
||||
set scr_ctf_timelimit "10" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_ctf_numlives "0" // Number of lives per player 0 for unlimited.
|
||||
set scr_ctf_halftime "1" // Half-Time
|
||||
set scr_ctf_roundlimit "1" // How many rounds match would last.
|
||||
set scr_ctf_returntime "30" // How many seconds before flag returns to base without nobody touching it.
|
||||
set scr_ctf_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_ctf_waverespawndelay "10" // Time delay for first respawn before the game.
|
||||
set scr_ctf_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ONE FLAG GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_oneflag_scorelimit "1" // Target score before the round ends.
|
||||
set scr_oneflag_timelimit "3" // Duration in minutes for the game to end if the score limit isn't reached.
|
||||
set scr_oneflag_numlives "0" // number of lives per player 0 for unlimited.
|
||||
set scr_oneflag_playerrespawndelay "0" // Respawn wait in seconds.
|
||||
set scr_oneflag_roundlimit "1" // How many rounds match would last.
|
||||
set scr_oneflag_roundswitch "1" // Rounds before the teams switch sides.
|
||||
set scr_oneflag_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_oneflag_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// HEADQUARTERS GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_koth_scorelimit "250" // Score limit to win the game.
|
||||
set scr_koth_timelimit "15" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_koth_numlives "0" // Number of lives per game. 0 for unlimited.
|
||||
set scr_koth_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_koth_roundlimit "1" // Rounds to be played.
|
||||
set scr_koth_roundswitch "1" // Rounds to be played before teams switch sides.
|
||||
set scr_koth_winlimit "1" // rounds per game
|
||||
set scr_koth_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_koth_promode "0"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// ARENA GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_arena_scorelimit "1" // Score limit to win the game.
|
||||
set scr_arena_timelimit "2.5" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_arena_numlives "1" // Number of lives per game 0 for unlimited.
|
||||
set scr_arena_roundlimit "0" // Rounds to be played.
|
||||
set scr_arena_roundswitch "3" // Rounds before the teams switch sides.
|
||||
set scr_arena_winlimit "4" // rounds per game
|
||||
set scr_arena_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// GLOBAL THERMONUCLEAR WAR GAMETYPE SETTINGS //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
set scr_gtnw_scorelimit "101" // Score limit to win the game.
|
||||
set scr_gtnw_timelimit "10" // Duration in minutes the game will continue if the score isn't reached.
|
||||
set scr_gtnw_numlives "0" // Number of lives per game 0 for unlimited.
|
||||
set scr_gtnw_playerrespawndelay "0" // Players respawn wait.
|
||||
set scr_gtnw_roundlimit "1" // Rounds to be played.
|
||||
set scr_gtnw_roundswitch "0" // Rounds before the teams switch sides.
|
||||
set scr_gtnw_winlimit "1" // rounds per game
|
||||
set scr_gtnw_waverespawndelay "0" // First respawn delay for each round.
|
||||
set scr_gtnw_promode "0"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// MAP SHORT NAMES ROTATION LIST //
|
||||
//////////////////////////////////////////////////
|
||||
// //
|
||||
// mp_afghan - Afghan //
|
||||
// mp_derail - Derail //
|
||||
// mp_estate - Estate //
|
||||
// mp_favela - Favela //
|
||||
// mp_highrise - Highrise //
|
||||
// mp_invasion - Invasion //
|
||||
// mp_checkpoint - Karachi //
|
||||
// mp_quarry - Quarry //
|
||||
// mp_rundown - Rundown //
|
||||
// mp_rust - Rust //
|
||||
// mp_boneyard - Scrapyard //
|
||||
// mp_nightshift - Skidrow //
|
||||
// mp_subbase - Sub Base //
|
||||
// mp_terminal - Terminal //
|
||||
// mp_underpass - Underpass //
|
||||
// mp_brecourt - Wasteland //
|
||||
// //
|
||||
//// DLC1 STIMULUS ///////////////////////////////
|
||||
// //
|
||||
// mp_complex - Bailout //
|
||||
// mp_crash - Crash //
|
||||
// mp_overgrown - Overgrown //
|
||||
// mp_compact - Salvage //
|
||||
// mp_storm - Storm //
|
||||
// //
|
||||
//// DLC2 RESURGENCE /////////////////////////////
|
||||
// //
|
||||
// mp_abandon - Carnival //
|
||||
// mp_fuel2 - Fuel //
|
||||
// mp_strike - Strike //
|
||||
// mp_trailerpark - Trailer Park //
|
||||
// mp_vacant - Vacant //
|
||||
// //
|
||||
//// DLC3 NUKETOWN ///////////////////////////////
|
||||
// //
|
||||
// mp_nuked - Nuketown //
|
||||
// //
|
||||
/// DLC4 CLASSICS 1 //////////////////////////////
|
||||
// //
|
||||
// mp_cross_fire - Crossfire //
|
||||
// mp_bloc - Bloc //
|
||||
// mp_cargoship - Cargoship //
|
||||
// //
|
||||
/// DLC5 CLASSICS 2 //////////////////////////////
|
||||
// //
|
||||
// mp_killhouse - Killhouse //
|
||||
// mp_bog_sh - Bog //
|
||||
// //
|
||||
/// DLC6 FREIGHTER ///////////////////////////////
|
||||
// //
|
||||
// mp_cargoship_sh - Freighter //
|
||||
// //
|
||||
/// DLC7 RESURRECTION ////////////////////////////
|
||||
// //
|
||||
// mp_shipment - Shipment //
|
||||
// mp_shipment_long - Long:Shipment //
|
||||
// mp_rust_long - Long: Rust //
|
||||
// mp_firingrange - Firing Range //
|
||||
// //
|
||||
/// DLC8 RECYCLED ////////////////////////////////
|
||||
// //
|
||||
// mp_storm_spring - Chemical Plant //
|
||||
// mp_fav_tropical - Tropical: Favela //
|
||||
// mp_estate_tropical - Tropical: Estate //
|
||||
// mp_crash_tropical - Tropical: Crash //
|
||||
// mp_bloc_sh - Forgotten City //
|
||||
// //
|
||||
/// DLC9 CLASSICS 3 //////////////////////////////
|
||||
// //
|
||||
// mp_backlot - Backlot //
|
||||
// mp_broadcast - Broadcast //
|
||||
// mp_carentan - Chinatown //
|
||||
// mp_citystreets - District //
|
||||
// mp_convoy - Ambush //
|
||||
// mp_countdown - Countdown //
|
||||
// mp_crash_snow - Winter Crash //
|
||||
// mp_farm - Downpour //
|
||||
// mp_pipeline - Pipeline //
|
||||
// mp_showdown - Showdown //
|
||||
// //
|
||||
/// DLC10 MW3 ////////////////////////////////////
|
||||
// //
|
||||
// mp_dome - Dome //
|
||||
// mp_hardhat - Hardhat //
|
||||
// mp_paris - Resistance //
|
||||
// mp_seatown - Seatown //
|
||||
// mp_bravo - Mission //
|
||||
// mp_underground - Underground //
|
||||
// mp_plaza2 - Arkaden //
|
||||
// mp_village - Village //
|
||||
// mp_alpha - Lockdown //
|
||||
// //
|
||||
/// SP MAPS to MP ////////////////////////////////
|
||||
// //
|
||||
// oilrig - Oilrig //
|
||||
// iw4_credits - Test map //
|
||||
// co_hunted - Village //
|
||||
// //
|
||||
// Example: //
|
||||
// sv_maprotation "map mp_rust map mp_nuked" //
|
||||
// //
|
||||
// Example 24/7 Map: //
|
||||
// sv_maprotation "map mp_highrise" //
|
||||
// //
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// GAMETYPE ROTATION LIST (OPTIONAL) //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// List of gametypes you can use on sv_maprotation to mix gametypes. //
|
||||
// or skip this if you plan on hosting 1 gametype only server. //
|
||||
// //
|
||||
// war - Team Deathmatch //
|
||||
// dm - Free-for-all //
|
||||
// dom - Domination //
|
||||
// koth - Headquarters //
|
||||
// sab - Sabotage //
|
||||
// sd - Search and Destroy //
|
||||
// arena - Arena //
|
||||
// dd - Demolition //
|
||||
// ctf - Capture the Flag //
|
||||
// oneflag - One-Flag CTF //
|
||||
// gtnw - Global Thermo-Nuclear War //
|
||||
// //
|
||||
// Example for mix gametype & map rotation: //
|
||||
// sv_maprotation "gametype dm map mp_rust gametype sd map mp_crash" //
|
||||
// //
|
||||
// You can add additional maps to the certain gametype until it reach //
|
||||
// the next gametype command. //
|
||||
// //
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
addGametype war
|
||||
addMap mp_abandon
|
||||
addMap mp_afghan
|
||||
addMap mp_alpha
|
||||
addMap mp_backlot
|
||||
addMap mp_bloc
|
||||
addMap mp_bloc_sh
|
||||
addMap mp_bog_sh
|
||||
addMap mp_boneyard
|
||||
addMap mp_bravo
|
||||
addMap mp_brecourt
|
||||
addMap mp_broadcast
|
||||
addMap mp_carentan
|
||||
addMap mp_cargoship
|
||||
addMap mp_cargoship_sh
|
||||
addMap mp_checkpoint
|
||||
addMap mp_citystreets
|
||||
addMap mp_compact
|
||||
addMap mp_complex
|
||||
addMap mp_convoy
|
||||
addMap mp_countdown
|
||||
addMap mp_crash
|
||||
addMap mp_crash_snow
|
||||
addMap mp_crash_tropical
|
||||
addMap mp_cross_fire
|
||||
addMap mp_derail
|
||||
addMap mp_dome
|
||||
addMap mp_estate
|
||||
addMap mp_estate_tropical
|
||||
addMap mp_farm
|
||||
addMap mp_fav_tropical
|
||||
addMap mp_favela
|
||||
addMap mp_firingrange
|
||||
addMap mp_fuel2
|
||||
addMap mp_hardhat
|
||||
addMap mp_highrise
|
||||
addMap mp_invasion
|
||||
addMap mp_killhouse
|
||||
addMap mp_nightshift
|
||||
addMap mp_nuked
|
||||
addMap mp_overgrown
|
||||
addMap mp_paris
|
||||
addMap mp_pipeline
|
||||
addMap mp_plaza2
|
||||
addMap mp_quarry
|
||||
addMap mp_rundown
|
||||
addMap mp_rust
|
||||
addMap mp_rust_long
|
||||
addMap mp_seatown
|
||||
addMap mp_shipment
|
||||
addMap mp_shipment_long
|
||||
addMap mp_showdown
|
||||
addMap mp_storm
|
||||
addMap mp_storm_spring
|
||||
addMap mp_strike
|
||||
addMap mp_subbase
|
||||
addMap mp_terminal
|
||||
addMap mp_trailerpark
|
||||
addMap mp_underground
|
||||
addMap mp_underpass
|
||||
addMap mp_vacant
|
||||
addMap mp_village
|
@ -1,2 +0,0 @@
|
||||
[Definition]
|
||||
failregex = ^ .* <HOST>$
|
@ -1,9 +0,0 @@
|
||||
[iw4x]
|
||||
enabled = true
|
||||
filter = iw4x
|
||||
logpath = /var/log/iw4x.log
|
||||
maxretry = 1
|
||||
findtime = 30
|
||||
bantime = 3600
|
||||
protocol = all
|
||||
banaction = iptables-allports
|
1
deps/GSL
vendored
Submodule
1
deps/GSL
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 4300304ef24c247b3db0255763f46b9f95c3a83d
|
34
deps/GSL/.clang-format
vendored
34
deps/GSL/.clang-format
vendored
@ -1,34 +0,0 @@
|
||||
ColumnLimit: 100
|
||||
|
||||
UseTab: Never
|
||||
IndentWidth: 4
|
||||
AccessModifierOffset: -4
|
||||
NamespaceIndentation: Inner
|
||||
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterNamespace: true
|
||||
AfterEnum: true
|
||||
AfterStruct: true
|
||||
AfterClass: true
|
||||
SplitEmptyFunction: false
|
||||
AfterControlStatement: true
|
||||
AfterFunction: true
|
||||
AfterUnion: true
|
||||
BeforeElse: true
|
||||
|
||||
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
BreakConstructorInitializersBeforeComma: true
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
AllowShortBlocksOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
|
||||
PointerAlignment: Left
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignTrailingComments: true
|
||||
|
||||
SpaceAfterCStyleCast: true
|
||||
CommentPragmas: '^ NO-FORMAT:'
|
1
deps/GSL/.gitattributes
vendored
1
deps/GSL/.gitattributes
vendored
@ -1 +0,0 @@
|
||||
include/gsl/* linguist-language=C++
|
50
deps/GSL/.github/workflows/android.yml
vendored
50
deps/GSL/.github/workflows/android.yml
vendored
@ -1,50 +0,0 @@
|
||||
name: CI_Android
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
Android:
|
||||
runs-on: macos-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Create build directory
|
||||
run: mkdir -p build
|
||||
working-directory: .
|
||||
|
||||
- name: Start emulator
|
||||
run: |
|
||||
echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install 'system-images;android-24;default;x86_64'
|
||||
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-24;default;x86_64' --force
|
||||
$ANDROID_HOME/emulator/emulator -list-avds
|
||||
echo "Starting emulator"
|
||||
# Start emulator in background
|
||||
nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot > /dev/null 2>&1 &
|
||||
echo "Emulator starting"
|
||||
|
||||
- name: Configure
|
||||
run: cmake -Werror=dev -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=16 -DANDROID_ABI=x86_64 -DCMAKE_BUILD_TYPE=Debug ..
|
||||
|
||||
- name: Build
|
||||
run: cmake --build . --parallel
|
||||
|
||||
- name: Wait for emulator ready
|
||||
run: |
|
||||
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 10; done; input keyevent 82'
|
||||
$ANDROID_HOME/platform-tools/adb devices
|
||||
$ANDROID_HOME/platform-tools/adb shell getprop ro.product.cpu.abi
|
||||
echo "Emulator started"
|
||||
|
||||
- name: Deploy tests
|
||||
run: |
|
||||
adb push tests /data/local/tmp
|
||||
adb shell find /data/local/tmp/tests -maxdepth 1 -exec chmod +x {} \\\;
|
||||
|
||||
- name: Test
|
||||
run: adb shell find /data/local/tmp/tests -name "*_tests" -maxdepth 1 -exec {} \\\;
|
@ -1,25 +0,0 @@
|
||||
name: cmake_find_package
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
cmake-find-package:
|
||||
name: Build ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ ubuntu-latest, macos-latest ]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: lukka/get-cmake@latest
|
||||
with:
|
||||
cmakeVersion: 3.14.0
|
||||
- name: Configure GSL
|
||||
run: cmake -S . -B build -G "Ninja" -D GSL_TEST=OFF -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/build/install
|
||||
- name: Install GSL
|
||||
run: cmake --build build --target install
|
||||
- name: Test GSL find_package support
|
||||
run: cmake -S tests/ -B build/tests_find_package -G "Ninja" -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build/install -D CMAKE_BUILD_TYPE=Release
|
52
deps/GSL/.github/workflows/ios.yml
vendored
52
deps/GSL/.github/workflows/ios.yml
vendored
@ -1,52 +0,0 @@
|
||||
name: CI_iOS
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
iOS:
|
||||
runs-on: macos-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Create build directory
|
||||
run: mkdir -p build
|
||||
working-directory: .
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
cmake \
|
||||
-Werror=dev \
|
||||
-GXcode \
|
||||
-DCMAKE_SYSTEM_NAME=iOS \
|
||||
"-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" \
|
||||
-DCMAKE_OSX_DEPLOYMENT_TARGET=9 \
|
||||
-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
|
||||
"-DMACOSX_BUNDLE_GUI_IDENTIFIER=GSL.\$(EXECUTABLE_NAME)" \
|
||||
-DMACOSX_BUNDLE_BUNDLE_VERSION=3.1.0 \
|
||||
-DMACOSX_BUNDLE_SHORT_VERSION_STRING=3.1.0 \
|
||||
..
|
||||
|
||||
- name: Build
|
||||
run: cmake --build . --parallel `sysctl -n hw.ncpu` --config Release -- -sdk iphonesimulator
|
||||
|
||||
- name: Start simulator
|
||||
run: |
|
||||
RUNTIME=`xcrun simctl list runtimes iOS -j|jq '.runtimes|last.identifier'`
|
||||
UDID=`xcrun simctl list devices iPhone available -j|jq -r ".devices[$RUNTIME]|last.udid"`
|
||||
xcrun simctl bootstatus $UDID -b
|
||||
|
||||
- name: Test
|
||||
run: |
|
||||
for TEST in `find tests/Release-iphonesimulator -depth 1 -name "*.app"`
|
||||
do
|
||||
xcrun simctl install booted $TEST
|
||||
TEST_ID=`plutil -convert json -o - $TEST/Info.plist|jq -r ".CFBundleIdentifier"`
|
||||
xcrun simctl launch --console booted $TEST_ID
|
||||
xcrun simctl uninstall booted $TEST_ID
|
||||
done
|
16
deps/GSL/.gitignore
vendored
16
deps/GSL/.gitignore
vendored
@ -1,16 +0,0 @@
|
||||
CMakeFiles
|
||||
build
|
||||
tests/CMakeFiles
|
||||
tests/Debug
|
||||
*.opensdf
|
||||
*.sdf
|
||||
tests/*tests.dir
|
||||
*.vcxproj
|
||||
*.vcxproj.filters
|
||||
*.sln
|
||||
*.tlog
|
||||
Testing/Temporary/*.*
|
||||
CMakeCache.txt
|
||||
*.suo
|
||||
.vs/
|
||||
.vscode/
|
48
deps/GSL/CMakeLists.txt
vendored
48
deps/GSL/CMakeLists.txt
vendored
@ -1,48 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.14...3.16)
|
||||
|
||||
project(GSL VERSION 4.0.0 LANGUAGES CXX)
|
||||
|
||||
add_library(GSL INTERFACE)
|
||||
add_library(Microsoft.GSL::GSL ALIAS GSL)
|
||||
|
||||
# https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html
|
||||
string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} PROJECT_IS_TOP_LEVEL)
|
||||
|
||||
option(GSL_INSTALL "Generate and install GSL target" ${PROJECT_IS_TOP_LEVEL})
|
||||
option(GSL_TEST "Build and perform GSL tests" ${PROJECT_IS_TOP_LEVEL})
|
||||
|
||||
# The implementation generally assumes a platform that implements C++14 support
|
||||
target_compile_features(GSL INTERFACE "cxx_std_14")
|
||||
|
||||
# Setup include directory
|
||||
add_subdirectory(include)
|
||||
|
||||
target_sources(GSL INTERFACE $<BUILD_INTERFACE:${GSL_SOURCE_DIR}/GSL.natvis>)
|
||||
|
||||
if (GSL_TEST)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
if (GSL_INSTALL)
|
||||
include(GNUInstallDirs)
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/gsl" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
|
||||
set(export_name "Microsoft.GSLConfig")
|
||||
set(namespace "Microsoft.GSL::")
|
||||
set(cmake_files_install_dir ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL)
|
||||
|
||||
install(TARGETS GSL EXPORT ${export_name} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
install(EXPORT ${export_name} NAMESPACE ${namespace} DESTINATION ${cmake_files_install_dir})
|
||||
export(TARGETS GSL NAMESPACE ${namespace} FILE ${export_name}.cmake)
|
||||
|
||||
set(gls_config_version "${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake")
|
||||
|
||||
write_basic_package_version_file(${gls_config_version} COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT)
|
||||
|
||||
install(FILES ${gls_config_version} DESTINATION ${cmake_files_install_dir})
|
||||
|
||||
install(FILES GSL.natvis DESTINATION ${cmake_files_install_dir})
|
||||
endif()
|
18
deps/GSL/CMakeSettings.json
vendored
18
deps/GSL/CMakeSettings.json
vendored
@ -1,18 +0,0 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "x64-Debug",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "Debug",
|
||||
"inheritEnvironments": [
|
||||
"msvc_x64_x64"
|
||||
],
|
||||
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
|
||||
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
|
||||
"cmakeCommandArgs": "-DGSL_CXX_STANDARD=17",
|
||||
"buildCommandArgs": "-v",
|
||||
"ctestCommandArgs": "",
|
||||
"codeAnalysisRuleset": "CppCoreCheckRules.ruleset"
|
||||
}
|
||||
]
|
||||
}
|
29
deps/GSL/CONTRIBUTING.md
vendored
29
deps/GSL/CONTRIBUTING.md
vendored
@ -1,29 +0,0 @@
|
||||
## Contributing to the Guidelines Support Library
|
||||
|
||||
The Guidelines Support Library (GSL) contains functions and types that are suggested for use by the
|
||||
[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines). GSL design changes are made only as a result of modifications to the Guidelines.
|
||||
|
||||
GSL is accepting contributions that improve or refine any of the types in this library as well as ports to other platforms. Changes should have an issue
|
||||
tracking the suggestion that has been approved by the maintainers. Your pull request should include a link to the bug that you are fixing. If you've submitted
|
||||
a PR, please post a comment in the associated issue to avoid duplication of effort.
|
||||
|
||||
## Legal
|
||||
You will need to complete a Contributor License Agreement (CLA). Briefly, this agreement testifies that you are granting us and the community permission to
|
||||
use the submitted change according to the terms of the project's license, and that the work being submitted is under appropriate copyright.
|
||||
|
||||
Please submit a Contributor License Agreement (CLA) before submitting a pull request. You may visit https://cla.microsoft.com to sign digitally.
|
||||
|
||||
## Housekeeping
|
||||
Your pull request should:
|
||||
|
||||
* Include a description of what your change intends to do
|
||||
* Be a child commit of a reasonably recent commit in the **main** branch
|
||||
* Requests need not be a single commit, but should be a linear sequence of commits (i.e. no merge commits in your PR)
|
||||
* It is desirable, but not necessary, for the tests to pass at each commit. Please see [README.md](./README.md) for instructions to build the test suite.
|
||||
* Have clear commit messages
|
||||
* e.g. "Fix issue", "Add tests for type", etc.
|
||||
* Include appropriate tests
|
||||
* Tests should include reasonable permutations of the target fix/change
|
||||
* Include baseline changes with your change
|
||||
* All changed code must have 100% code coverage
|
||||
* To avoid line ending issues, set `autocrlf = input` and `whitespace = cr-at-eol` in your git configuration
|
32
deps/GSL/GSL.natvis
vendored
32
deps/GSL/GSL.natvis
vendored
@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This will make GitHub and some editors recognize this code as XML:
|
||||
vim: syntax=xml
|
||||
-->
|
||||
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||
<!-- These types are from the util header. -->
|
||||
<Type Name="gsl::final_action<*>">
|
||||
<DisplayString>{{ invoke = {invoke_}, action = {f_} }}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[invoke]">invoke_</Item>
|
||||
<Item Name="[callback]">f_</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- These types are from the span header. -->
|
||||
<Type Name="gsl::span<*, *>">
|
||||
<DisplayString>{{ extent = {storage_.size_} }}</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems>
|
||||
<Size>storage_.size_</Size>
|
||||
<ValuePointer>storage_.data_</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- These types are from the pointers header. -->
|
||||
<Type Name="gsl::not_null<*>">
|
||||
<!-- We can always dereference this since it's an invariant. -->
|
||||
<DisplayString>value = {*ptr_}</DisplayString>
|
||||
</Type>
|
||||
</AutoVisualizer>
|
21
deps/GSL/LICENSE
vendored
21
deps/GSL/LICENSE
vendored
@ -1,21 +0,0 @@
|
||||
Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
|
||||
This code is licensed under the MIT License (MIT).
|
||||
|
||||
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.
|
218
deps/GSL/README.md
vendored
218
deps/GSL/README.md
vendored
@ -1,218 +0,0 @@
|
||||
# GSL: Guidelines Support Library
|
||||
[![Build Status](https://dev.azure.com/cppstat/GSL/_apis/build/status/microsoft.GSL?branchName=main)](https://dev.azure.com/cppstat/GSL/_build/latest?definitionId=1&branchName=main)
|
||||
|
||||
The Guidelines Support Library (GSL) contains functions and types that are suggested for use by the
|
||||
[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines) maintained by the [Standard C++ Foundation](https://isocpp.org).
|
||||
This repo contains Microsoft's implementation of GSL.
|
||||
|
||||
The entire implementation is provided inline in the headers under the [gsl](./include/gsl) directory. The implementation generally assumes a platform that implements C++14 support.
|
||||
|
||||
While some types have been broken out into their own headers (e.g. [gsl/span](./include/gsl/span)),
|
||||
it is simplest to just include [gsl/gsl](./include/gsl/gsl) and gain access to the entire library.
|
||||
|
||||
> NOTE: We encourage contributions that improve or refine any of the types in this library as well as ports to
|
||||
other platforms. Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for more information about contributing.
|
||||
|
||||
# Project Code of Conduct
|
||||
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
||||
|
||||
# Usage of Third Party Libraries
|
||||
This project makes use of the [Google Test](https://github.com/google/googletest) testing library. Please see the [ThirdPartyNotices.txt](./ThirdPartyNotices.txt) file for details regarding the licensing of Google Test.
|
||||
|
||||
# Supported features
|
||||
## Microsoft GSL implements the following from the C++ Core Guidelines:
|
||||
|
||||
Feature | Supported? | Description
|
||||
-------------------------------------------------------------------------|:----------:|-------------
|
||||
[**1. Views**][cg-views] | |
|
||||
[owner](docs/headers.md#user-content-H-pointers-owner) | ☑ | An alias for a raw pointer
|
||||
[not_null](docs/headers.md#user-content-H-pointers-not_null) | ☑ | Restricts a pointer/smart pointer to hold non-null values
|
||||
[span](docs/headers.md#user-content-H-span-span) | ☑ | A view over a contiguous sequence of memory. Based on the standardized version of `std::span`, however `gsl::span` enforces bounds checking.
|
||||
span_p | ☐ | Spans a range starting from a pointer to the first place for which the predicate is true
|
||||
[basic_zstring](docs/headers.md#user-content-H-zstring) | ☑ | A pointer to a C-string (zero-terminated array) with a templated char type
|
||||
[zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `char`
|
||||
[czstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const char`
|
||||
[wzstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `wchar_t`
|
||||
[cwzstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const wchar_t`
|
||||
[u16zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `char16_t`
|
||||
[cu16zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const char16_t`
|
||||
[u32zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `char32_t`
|
||||
[cu32zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const char32_t`
|
||||
[**2. Owners**][cg-owners] | |
|
||||
[unique_ptr](docs/headers.md#user-content-H-pointers-unique_ptr) | ☑ | An alias to `std::unique_ptr`
|
||||
[shared_ptr](docs/headers.md#user-content-H-pointers-shared_ptr) | ☑ | An alias to `std::shared_ptr`
|
||||
stack_array | ☐ | A stack-allocated array
|
||||
dyn_array | ☐ | A heap-allocated array
|
||||
[**3. Assertions**][cg-assertions] | |
|
||||
[Expects](docs/headers.md#user-content-H-assert-expects) | ☑ | A precondition assertion; on failure it terminates
|
||||
[Ensures](docs/headers.md#user-content-H-assert-ensures) | ☑ | A postcondition assertion; on failure it terminates
|
||||
[**4. Utilities**][cg-utilities] | |
|
||||
move_owner | ☐ | A helper function that moves one `owner` to the other
|
||||
[byte](docs/headers.md#user-content-H-byte-byte) | ☑ | Either an alias to `std::byte` or a byte type
|
||||
[final_action](docs/headers.md#user-content-H-util-final_action) | ☑ | A RAII style class that invokes a functor on its destruction
|
||||
[finally](docs/headers.md#user-content-H-util-finally) | ☑ | A helper function instantiating [final_action](docs/headers.md#user-content-H-util-final_action)
|
||||
[GSL_SUPPRESS](docs/headers.md#user-content-H-assert-gsl_suppress) | ☑ | A macro that takes an argument and turns it into `[[gsl::suppress(x)]]` or `[[gsl::suppress("x")]]`
|
||||
[[implicit]] | ☐ | A "marker" to put on single-argument constructors to explicitly make them non-explicit
|
||||
[index](docs/headers.md#user-content-H-util-index) | ☑ | A type to use for all container and array indexing (currently an alias for `std::ptrdiff_t`)
|
||||
joining_thread | ☐ | A RAII style version of `std::thread` that joins
|
||||
[narrow](docs/headers.md#user-content-H-narrow-narrow) | ☑ | A checked version of `narrow_cast`; it can throw [narrowing_error](docs/headers.md#user-content-H-narrow-narrowing_error)
|
||||
[narrow_cast](docs/headers.md#user-content-H-util-narrow_cast) | ☑ | A narrowing cast for values and a synonym for `static_cast`
|
||||
[narrowing_error](docs/headers.md#user-content-H-narrow-narrowing_error) | ☑ | A custom exception type thrown by [narrow](docs/headers.md#user-content-H-narrow-narrow)
|
||||
[**5. Concepts**][cg-concepts] | ☐ |
|
||||
|
||||
## The following features do not exist in or have been removed from the C++ Core Guidelines:
|
||||
Feature | Supported? | Description
|
||||
-----------------------------------|:----------:|-------------
|
||||
[strict_not_null](docs/headers.md#user-content-H-pointers-strict_not_null) | ☑ | A stricter version of [not_null](docs/headers.md#user-content-H-pointers-not_null) with explicit constructors
|
||||
multi_span | ☐ | Deprecated. Multi-dimensional span.
|
||||
strided_span | ☐ | Deprecated. Support for this type has been discontinued.
|
||||
basic_string_span | ☐ | Deprecated. Like `span` but for strings with a templated char type
|
||||
string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `char`
|
||||
cstring_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const char`
|
||||
wstring_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `wchar_t`
|
||||
cwstring_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const wchar_t`
|
||||
u16string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `char16_t`
|
||||
cu16string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const char16_t`
|
||||
u32string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `char32_t`
|
||||
cu32string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const char32_t`
|
||||
|
||||
This is based on [CppCoreGuidelines semi-specification](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gsl-guidelines-support-library).
|
||||
|
||||
[cg-views]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslview-views
|
||||
[cg-owners]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslowner-ownership-pointers
|
||||
[cg-assertions]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslassert-assertions
|
||||
[cg-utilities]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslutil-utilities
|
||||
[cg-concepts]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslconcept-concepts
|
||||
|
||||
# Quick Start
|
||||
## Supported Compilers / Toolsets
|
||||
The GSL officially supports the latest and previous major versions of VS with MSVC & LLVM, GCC, Clang, and XCode with Apple-Clang.
|
||||
Within these two major versions, we try to target the latest minor updates / revisions (although this may be affected by
|
||||
delays between a toolchain's release and when it becomes widely available for use).
|
||||
Below is a table showing the versions currently being tested.
|
||||
|
||||
Compiler |Toolset Versions Currently Tested
|
||||
:------- |--:
|
||||
XCode | 13.2.1 & 12.5.1
|
||||
GCC | 11[^1] & 10[^2]
|
||||
Clang | 12[^2] & 11[^2]
|
||||
Visual Studio with MSVC | VS2022[^3] & VS2019[^4]
|
||||
Visual Studio with LLVM | VS2022[^3] & VS2019[^4]
|
||||
|
||||
|
||||
[^1]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26).
|
||||
[^2]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the version specified [here](https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md#language-and-runtime).
|
||||
[^3]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the version specified [here](https://github.com/actions/virtual-environments/blob/main/images/win/Windows2022-Readme.md#visual-studio-enterprise-2022).
|
||||
[^4]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the version specified [here](https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#visual-studio-enterprise-2019).
|
||||
|
||||
---
|
||||
If you successfully port GSL to another platform, we would love to hear from you!
|
||||
- Submit an issue specifying the platform and target.
|
||||
- Consider contributing your changes by filing a pull request with any necessary changes.
|
||||
- If at all possible, add a CI/CD step and add the button to the table below!
|
||||
|
||||
Target | CI/CD Status
|
||||
:------- | -----------:
|
||||
iOS | ![CI_iOS](https://github.com/microsoft/GSL/workflows/CI_iOS/badge.svg)
|
||||
Android | ![CI_Android](https://github.com/microsoft/GSL/workflows/CI_Android/badge.svg)
|
||||
|
||||
Note: These CI/CD steps are run with each pull request, however failures in them are non-blocking.
|
||||
|
||||
## Building the tests
|
||||
To build the tests, you will require the following:
|
||||
|
||||
* [CMake](http://cmake.org), version 3.14 or later to be installed and in your PATH.
|
||||
|
||||
These steps assume the source code of this repository has been cloned into a directory named `c:\GSL`.
|
||||
|
||||
1. Create a directory to contain the build outputs for a particular architecture (we name it `c:\GSL\build-x86` in this example).
|
||||
|
||||
cd GSL
|
||||
md build-x86
|
||||
cd build-x86
|
||||
|
||||
2. Configure CMake to use the compiler of your choice (you can see a list by running `cmake --help`).
|
||||
|
||||
cmake -G "Visual Studio 15 2017" c:\GSL
|
||||
|
||||
3. Build the test suite (in this case, in the Debug configuration, Release is another good choice).
|
||||
|
||||
cmake --build . --config Debug
|
||||
|
||||
4. Run the test suite.
|
||||
|
||||
ctest -C Debug
|
||||
|
||||
All tests should pass - indicating your platform is fully supported and you are ready to use the GSL types!
|
||||
|
||||
## Building GSL - Using vcpkg
|
||||
|
||||
You can download and install GSL using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
|
||||
|
||||
git clone https://github.com/Microsoft/vcpkg.git
|
||||
cd vcpkg
|
||||
./bootstrap-vcpkg.sh
|
||||
./vcpkg integrate install
|
||||
vcpkg install ms-gsl
|
||||
|
||||
The GSL port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
|
||||
|
||||
## Using the libraries
|
||||
As the types are entirely implemented inline in headers, there are no linking requirements.
|
||||
|
||||
You can copy the [gsl](./include/gsl) directory into your source tree so it is available
|
||||
to your compiler, then include the appropriate headers in your program.
|
||||
|
||||
Alternatively set your compiler's *include path* flag to point to the GSL development folder (`c:\GSL\include` in the example above) or installation folder (after running the install). Eg.
|
||||
|
||||
MSVC++
|
||||
|
||||
/I c:\GSL\include
|
||||
|
||||
GCC/clang
|
||||
|
||||
-I$HOME/dev/GSL/include
|
||||
|
||||
Include the library using:
|
||||
|
||||
#include <gsl/gsl>
|
||||
|
||||
## Usage in CMake
|
||||
|
||||
The library provides a Config file for CMake, once installed it can be found via `find_package`.
|
||||
|
||||
Which, when successful, will add library target called `Microsoft.GSL::GSL` which you can use via the usual
|
||||
`target_link_libraries` mechanism.
|
||||
|
||||
```cmake
|
||||
find_package(Microsoft.GSL CONFIG REQUIRED)
|
||||
|
||||
target_link_libraries(foobar PRIVATE Microsoft.GSL::GSL)
|
||||
```
|
||||
|
||||
### FetchContent
|
||||
|
||||
If you are using CMake version 3.11+ you can use the offical [FetchContent module](https://cmake.org/cmake/help/latest/module/FetchContent.html).
|
||||
This allows you to easily incorporate GSL into your project.
|
||||
|
||||
```cmake
|
||||
# NOTE: This example uses CMake version 3.14 (FetchContent_MakeAvailable).
|
||||
# Since it streamlines the FetchContent process
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
FetchContent_Declare(GSL
|
||||
GIT_REPOSITORY "https://github.com/microsoft/GSL"
|
||||
GIT_TAG "v4.0.0"
|
||||
GIT_SHALLOW ON
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(GSL)
|
||||
|
||||
target_link_libraries(foobar PRIVATE Microsoft.GSL::GSL)
|
||||
```
|
||||
|
||||
## Debugging visualization support
|
||||
|
||||
For Visual Studio users, the file [GSL.natvis](./GSL.natvis) in the root directory of the repository can be added to your project if you would like more helpful visualization of GSL types in the Visual Studio debugger than would be offered by default.
|
41
deps/GSL/SECURITY.md
vendored
41
deps/GSL/SECURITY.md
vendored
@ -1,41 +0,0 @@
|
||||
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->
|
||||
|
||||
## Security
|
||||
|
||||
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
|
||||
|
||||
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
|
||||
|
||||
## Reporting Security Issues
|
||||
|
||||
**Please do not report security vulnerabilities through public GitHub issues.**
|
||||
|
||||
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
|
||||
|
||||
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
|
||||
|
||||
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
|
||||
|
||||
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
|
||||
|
||||
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
|
||||
* Full paths of source file(s) related to the manifestation of the issue
|
||||
* The location of the affected source code (tag/branch/commit or direct URL)
|
||||
* Any special configuration required to reproduce the issue
|
||||
* Step-by-step instructions to reproduce the issue
|
||||
* Proof-of-concept or exploit code (if possible)
|
||||
* Impact of the issue, including how an attacker might exploit the issue
|
||||
|
||||
This information will help us triage your report more quickly.
|
||||
|
||||
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
|
||||
|
||||
## Preferred Languages
|
||||
|
||||
We prefer all communications to be in English.
|
||||
|
||||
## Policy
|
||||
|
||||
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
|
||||
|
||||
<!-- END MICROSOFT SECURITY.MD BLOCK -->
|
41
deps/GSL/ThirdPartyNotices.txt
vendored
41
deps/GSL/ThirdPartyNotices.txt
vendored
@ -1,41 +0,0 @@
|
||||
|
||||
THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
|
||||
Do Not Translate or Localize
|
||||
|
||||
GSL: Guidelines Support Library incorporates third party material from the projects listed below.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Software: Google Test
|
||||
Owner: Google Inc.
|
||||
Source URL: github.com/google/googletest
|
||||
License: BSD 3 - Clause
|
||||
Text:
|
||||
Copyright 2008, Google Inc.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
-------------------------------------------------------------------------------
|
66
deps/GSL/azure-pipelines.yml
vendored
66
deps/GSL/azure-pipelines.yml
vendored
@ -1,66 +0,0 @@
|
||||
trigger:
|
||||
- main
|
||||
|
||||
pr:
|
||||
autoCancel: true
|
||||
|
||||
stages:
|
||||
- stage: GCC
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: ./pipelines/jobs.yml
|
||||
parameters:
|
||||
compiler: gcc
|
||||
image: ubuntu-20.04
|
||||
compilerVersions: [ 11, 10 ]
|
||||
setupfile: 'setup_gcc.yml'
|
||||
|
||||
- stage: Clang
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: ./pipelines/jobs.yml
|
||||
parameters:
|
||||
compiler: clang
|
||||
image: ubuntu-20.04
|
||||
compilerVersions: [ 12, 11 ]
|
||||
setupfile: 'setup_clang.yml'
|
||||
|
||||
- stage: Xcode
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: ./pipelines/jobs.yml
|
||||
parameters:
|
||||
compiler: 'Xcode'
|
||||
image: macOS-11
|
||||
compilerVersions: [ '12.5.1', '13.2.1' ]
|
||||
setupfile: 'setup_apple.yml'
|
||||
|
||||
- stage: VS_MSVC
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: ./pipelines/jobs.yml
|
||||
parameters:
|
||||
compiler: 'VS2019 (MSVC)'
|
||||
compilerVersions: [ 'default' ]
|
||||
image: windows-2019
|
||||
- template: ./pipelines/jobs.yml
|
||||
parameters:
|
||||
compiler: 'VS2022 (MSVC)'
|
||||
compilerVersions: [ 'default' ]
|
||||
image: windows-2022
|
||||
|
||||
- stage: VS_LLVM
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- template: ./pipelines/jobs.yml
|
||||
parameters:
|
||||
compiler: 'VS2019 (LLVM)'
|
||||
compilerVersions: [ 'default' ]
|
||||
image: windows-2019
|
||||
extraCmakeArgs: '-T ClangCL'
|
||||
- template: ./pipelines/jobs.yml
|
||||
parameters:
|
||||
compiler: 'VS2022 (LLVM)'
|
||||
compilerVersions: [ 'default' ]
|
||||
image: windows-2022
|
||||
extraCmakeArgs: '-T ClangCL'
|
853
deps/GSL/docs/headers.md
vendored
853
deps/GSL/docs/headers.md
vendored
@ -1,853 +0,0 @@
|
||||
The Guidelines Support Library (GSL) interface is very lightweight and exposed via a header-only library. This document attempts to document all of the headers and their exposed classes and functions.
|
||||
|
||||
Types and functions are exported in the namespace `gsl`.
|
||||
|
||||
See [GSL: Guidelines support library](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-gsl)
|
||||
|
||||
# <a name="H" />Headers
|
||||
|
||||
- [`<algorithms>`](#user-content-H-algorithms)
|
||||
- [`<assert>`](#user-content-H-assert)
|
||||
- [`<byte>`](#user-content-H-byte)
|
||||
- [`<gsl>`](#user-content-H-gsl)
|
||||
- [`<narrow>`](#user-content-H-narrow)
|
||||
- [`<pointers>`](#user-content-H-pointers)
|
||||
- [`<span>`](#user-content-H-span)
|
||||
- [`<span_ext>`](#user-content-H-span_ext)
|
||||
- [`<zstring>`](#user-content-H-zstring)
|
||||
- [`<util>`](#user-content-H-util)
|
||||
|
||||
## <a name="H-algorithms" />`<algorithms>`
|
||||
|
||||
This header contains some common algorithms that have been wrapped in GSL safety features.
|
||||
|
||||
- [`gsl::copy`](#user-content-H-algorithms-copy)
|
||||
|
||||
### <a name="H-algorithms-copy" />`gsl::copy`
|
||||
|
||||
```cpp
|
||||
template <class SrcElementType, std::size_t SrcExtent, class DestElementType,
|
||||
std::size_t DestExtent>
|
||||
void copy(span<SrcElementType, SrcExtent> src, span<DestElementType, DestExtent> dest);
|
||||
```
|
||||
|
||||
This function copies the content from the `src` [`span`](#user-content-H-span-span) to the `dest` [`span`](#user-content-H-span-span). It [`Expects`](#user-content-H-assert-expects)
|
||||
that the destination `span` is at least as large as the source `span`.
|
||||
|
||||
## <a name="H-assert" />`<assert>`
|
||||
|
||||
This header contains some macros used for contract checking and suppressing code analysis warnings.
|
||||
|
||||
See [GSL.assert: Assertions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-assertions)
|
||||
|
||||
- [`GSL_SUPPRESS`](#user-content-H-assert-gsl_suppress)
|
||||
- [`Expects`](#user-content-H-assert-expects)
|
||||
- [`Ensures`](#user-content-H-assert-ensures)
|
||||
|
||||
### <a name="H-assert-gsl_suppress" />`GSL_SUPPRESS`
|
||||
|
||||
This macro can be used to suppress a code analysis warning.
|
||||
|
||||
The core guidelines request tools that check for the rules to respect suppressing a rule by writing
|
||||
`[[gsl::suppress(tag)]]` or `[[gsl::suppress(tag, justification: "message")]]`.
|
||||
|
||||
Clang does not use exactly that syntax, but requires `tag` to be put in double quotes `[[gsl::suppress("tag")]]`.
|
||||
|
||||
For portable code you can use `GSL_SUPPRESS(tag)`.
|
||||
|
||||
See [In.force: Enforcement](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#inforce-enforcement).
|
||||
|
||||
### <a name="H-assert-expects" />`Expects`
|
||||
|
||||
This macro can be used for expressing a precondition. If the precondition is not held, then `std::terminate` will be called.
|
||||
|
||||
See [I.6: Prefer `Expects()` for expressing preconditions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i6-prefer-expects-for-expressing-preconditions)
|
||||
|
||||
### <a name="H-assert-ensures" />`Ensures`
|
||||
|
||||
This macro can be used for expressing a postcondition. If the postcondition is not held, then `std::terminate` will be called.
|
||||
|
||||
See [I.8: Prefer `Ensures()` for expressing postconditions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i8-prefer-ensures-for-expressing-postconditions)
|
||||
|
||||
## <a name="H-byte" />`<byte>`
|
||||
|
||||
This header contains the definition of a byte type, implementing `std::byte` before it was standardized into C++17.
|
||||
|
||||
- [`gsl::byte`](#user-content-H-byte-byte)
|
||||
|
||||
### <a name="H-byte-byte" />`gsl::byte`
|
||||
|
||||
If `GSL_USE_STD_BYTE` is defined to be `1`, then `gsl::byte` will be an alias to `std::byte`.
|
||||
If `GSL_USE_STD_BYTE` is defined to be `0`, then `gsl::byte` will be a distinct type that implements the concept of byte.
|
||||
If `GSL_USE_STD_BYTE` is not defined, then the header file will check if `std::byte` is available (C\+\+17 or higher). If yes,
|
||||
`gsl::byte` will be an alias to `std::byte`, otherwise `gsl::byte` will be a distinct type that implements the concept of byte.
|
||||
|
||||
⚠ Take care when linking projects that were compiled with different language standards (before C\+\+17 and C\+\+17 or higher).
|
||||
If you do so, you might want to `#define GSL_USE_STD_BYTE 0` to a fixed value to be sure that both projects use exactly
|
||||
the same type. Otherwise you might get linker errors.
|
||||
|
||||
See [SL.str.5: Use `std::byte` to refer to byte values that do not necessarily represent characters](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rstr-byte)
|
||||
|
||||
### Non-member functions
|
||||
|
||||
```cpp
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept;
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte operator<<(byte b, IntegerType shift) noexcept;
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept;
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte operator>>(byte b, IntegerType shift) noexcept;
|
||||
```
|
||||
|
||||
Left or right shift a `byte` by a given number of bits.
|
||||
|
||||
```cpp
|
||||
constexpr byte& operator|=(byte& l, byte r) noexcept;
|
||||
constexpr byte operator|(byte l, byte r) noexcept;
|
||||
```
|
||||
|
||||
Bitwise "or" of two `byte`s.
|
||||
|
||||
```cpp
|
||||
constexpr byte& operator&=(byte& l, byte r) noexcept;
|
||||
constexpr byte operator&(byte l, byte r) noexcept;
|
||||
```
|
||||
|
||||
Bitwise "and" of two `byte`s.
|
||||
|
||||
```cpp
|
||||
constexpr byte& operator^=(byte& l, byte r) noexcept;
|
||||
constexpr byte operator^(byte l, byte r) noexcept;
|
||||
```
|
||||
|
||||
Bitwise xor of two `byte`s.
|
||||
|
||||
```cpp
|
||||
constexpr byte operator~(byte b) noexcept;
|
||||
```
|
||||
|
||||
Bitwise negation of a `byte`. Flips all bits. Zeroes become ones, ones become zeroes.
|
||||
|
||||
```cpp
|
||||
template <typename T>
|
||||
constexpr byte to_byte(T t) noexcept;
|
||||
```
|
||||
|
||||
Convert the given value to a `byte`. The template requires `T` to be an `unsigned char` so that no data loss can occur.
|
||||
If you want to convert an integer constant to a `byte` you probably want to call `to_byte<integer constant>()`.
|
||||
|
||||
```cpp
|
||||
template <int I>
|
||||
constexpr byte to_byte() noexcept;
|
||||
```
|
||||
|
||||
Convert the given value `I` to a `byte`. The template requires `I` to be in the valid range 0..255 for a `gsl::byte`.
|
||||
|
||||
## <a name="H-gsl" />`<gsl>`
|
||||
|
||||
This header is a convenience header that includes all other [GSL headers](#user-content-H).
|
||||
Since `<narrow>` requires exceptions, it will only be included if exceptions are enabled.
|
||||
|
||||
## <a name="H-narrow" />`<narrow>`
|
||||
|
||||
This header contains utility functions and classes, for narrowing casts, which require exceptions. The narrowing-related utilities that don't require exceptions are found inside [util](#user-content-H-util).
|
||||
|
||||
See [GSL.util: Utilities](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-utilities)
|
||||
|
||||
- [`gsl::narrowing_error`](#user-content-H-narrow-narrowing_error)
|
||||
- [`gsl::narrow`](#user-content-H-narrow-narrow)
|
||||
|
||||
### <a name="H-narrow-narrowing_error" />`gsl::narrowing_error`
|
||||
|
||||
`gsl::narrowing_error` is the exception thrown by [`gsl::narrow`](#user-content-H-narrow-narrow) when a narrowing conversion fails. It is derived from `std::exception`.
|
||||
|
||||
### <a name="H-narrow-narrow" />`gsl::narrow`
|
||||
|
||||
`gsl::narrow<T>(x)` is a named cast that does a `static_cast<T>(x)` for narrowing conversions with no signedness promotions.
|
||||
If the argument `x` cannot be represented in the target type `T`, then the function throws a [`gsl::narrowing_error`](#user-content-H-narrow-narrowing_error) (e.g., `narrow<unsigned>(-42)` and `narrow<char>(300)` throw).
|
||||
|
||||
Note: compare [`gsl::narrow_cast`](#user-content-H-util-narrow_cast) in header [util](#user-content-H-util).
|
||||
|
||||
See [ES.46: Avoid lossy (narrowing, truncating) arithmetic conversions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-narrowing) and [ES.49: If you must use a cast, use a named cast](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-casts-named)
|
||||
|
||||
## <a name="H-pointers" />`<pointers>`
|
||||
|
||||
This header contains some pointer types.
|
||||
|
||||
See [GSL.view](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-views)
|
||||
|
||||
- [`gsl::unique_ptr`](#user-content-H-pointers-unique_ptr)
|
||||
- [`gsl::shared_ptr`](#user-content-H-pointers-shared_ptr)
|
||||
- [`gsl::owner`](#user-content-H-pointers-owner)
|
||||
- [`gsl::not_null`](#user-content-H-pointers-not_null)
|
||||
- [`gsl::strict_not_null`](#user-content-H-pointers-strict_not_null)
|
||||
|
||||
### <a name="H-pointers-unique_ptr" />`gsl::unique_ptr`
|
||||
|
||||
`gsl::unique_ptr` is an alias to `std::unique_ptr`.
|
||||
|
||||
See [GSL.owner: Ownership pointers](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-ownership)
|
||||
|
||||
### <a name="H-pointers-shared_ptr" />`gsl::shared_ptr`
|
||||
|
||||
`gsl::shared_ptr` is an alias to `std::shared_ptr`.
|
||||
|
||||
See [GSL.owner: Ownership pointers](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-ownership)
|
||||
|
||||
### <a name="H-pointers-owner" />`gsl::owner`
|
||||
|
||||
`gsl::owner<T>` is designed as a safety mechanism for code that must deal directly with raw pointers that own memory. Ideally such code should be restricted to the implementation of low-level abstractions. `gsl::owner` can also be used as a stepping point in converting legacy code to use more modern RAII constructs such as smart pointers.
|
||||
`T` must be a pointer type (`std::is_pointer<T>`).
|
||||
|
||||
A `gsl::owner<T>` is a typedef to `T`. It adds no runtime overhead whatsoever, as it is purely syntactic and does not add any runtime checks. Instead, it serves as an annotation for static analysis tools which check for memory safety, and as a code comprehension guide for human readers.
|
||||
|
||||
See Enforcement section of [C.31: All resources acquired by a class must be released by the class’s destructor](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-release).
|
||||
|
||||
### <a name="H-pointers-not_null" />`gsl::not_null`
|
||||
|
||||
`gsl::not_null<T>` restricts a pointer or smart pointer to only hold non-null values. It has no size overhead over `T`.
|
||||
|
||||
The checks for ensuring that the pointer is not null are done in the constructor. There is no overhead when retrieving or dereferencing the checked pointer.
|
||||
When a nullptr check fails, `std::terminate` is called.
|
||||
|
||||
See [F.23: Use a `not_null<T>` to indicate that “null” is not a valid value](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr)
|
||||
|
||||
#### Member functions
|
||||
|
||||
##### Construct/Copy
|
||||
|
||||
```cpp
|
||||
template <typename U, typename = std::enable_if_t<std::is_convertible<U, T>::value>>
|
||||
constexpr not_null(U&& u);
|
||||
|
||||
template <typename = std::enable_if_t<!std::is_same<std::nullptr_t, T>::value>>
|
||||
constexpr not_null(T u);
|
||||
```
|
||||
|
||||
Constructs a `gsl_owner<T>` from a pointer that is convertible to `T` or that is a `T`. It [`Expects`](#user-content-H-assert-expects) that the provided pointer is not `== nullptr`.
|
||||
|
||||
```cpp
|
||||
template <typename U, typename = std::enable_if_t<std::is_convertible<U, T>::value>>
|
||||
constexpr not_null(const not_null<U>& other);
|
||||
```
|
||||
|
||||
Constructs a `gsl_owner<T>` from another `gsl_owner` where the other pointer is convertible to `T`. It [`Expects`](#user-content-H-assert-expects) that the provided pointer is not `== nullptr`.
|
||||
|
||||
```cpp
|
||||
not_null(const not_null& other) = default;
|
||||
not_null& operator=(const not_null& other) = default;
|
||||
```
|
||||
|
||||
Copy construction and assignment.
|
||||
|
||||
```cpp
|
||||
not_null(std::nullptr_t) = delete;
|
||||
not_null& operator=(std::nullptr_t) = delete;
|
||||
```
|
||||
|
||||
Construction from `std::nullptr_t` and assignment of `std::nullptr_t` are explicitly deleted.
|
||||
|
||||
##### Modifiers
|
||||
|
||||
```cpp
|
||||
not_null& operator++() = delete;
|
||||
not_null& operator--() = delete;
|
||||
not_null operator++(int) = delete;
|
||||
not_null operator--(int) = delete;
|
||||
not_null& operator+=(std::ptrdiff_t) = delete;
|
||||
not_null& operator-=(std::ptrdiff_t) = delete;
|
||||
```
|
||||
|
||||
Explicitly deleted operators. Pointers point to single objects ([I.13: Do not pass an array as a single pointer](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array)), so don't allow these operators.
|
||||
|
||||
##### Observers
|
||||
|
||||
```cpp
|
||||
constexpr details::value_or_reference_return_t<T> get() const;
|
||||
constexpr operator T() const { return get(); }
|
||||
```
|
||||
|
||||
Get the underlying pointer.
|
||||
|
||||
```cpp
|
||||
constexpr decltype(auto) operator->() const { return get(); }
|
||||
constexpr decltype(auto) operator*() const { return *get(); }
|
||||
```
|
||||
|
||||
Dereference the underlying pointer.
|
||||
|
||||
```cpp
|
||||
void operator[](std::ptrdiff_t) const = delete;
|
||||
```
|
||||
|
||||
Array index operator is explicitly deleted. Pointers point to single objects ([I.13: Do not pass an array as a single pointer](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array)), so don't allow treating them as an array.
|
||||
|
||||
#### Non-member functions
|
||||
|
||||
```cpp
|
||||
template <class T>
|
||||
auto make_not_null(T&& t) noexcept;
|
||||
```
|
||||
|
||||
Creates a `gsl::not_null` object, deducing the target type from the type of the argument.
|
||||
|
||||
```cpp
|
||||
template <class T, class U>
|
||||
auto operator==(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() == rhs.get()))
|
||||
-> decltype(lhs.get() == rhs.get());
|
||||
template <class T, class U>
|
||||
auto operator!=(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() != rhs.get()))
|
||||
-> decltype(lhs.get() != rhs.get());
|
||||
template <class T, class U>
|
||||
auto operator<(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() < rhs.get()))
|
||||
-> decltype(lhs.get() < rhs.get());
|
||||
template <class T, class U>
|
||||
auto operator<=(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() <= rhs.get()))
|
||||
-> decltype(lhs.get() <= rhs.get());
|
||||
template <class T, class U>
|
||||
auto operator>(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() > rhs.get()))
|
||||
-> decltype(lhs.get() > rhs.get());
|
||||
template <class T, class U>
|
||||
auto operator>=(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() >= rhs.get()))
|
||||
-> decltype(lhs.get() >= rhs.get());
|
||||
```
|
||||
|
||||
Comparison of pointers that are convertible to each other.
|
||||
|
||||
##### Input/Output
|
||||
|
||||
```cpp
|
||||
template <class T>
|
||||
std::ostream& operator<<(std::ostream& os, const not_null<T>& val);
|
||||
```
|
||||
|
||||
Performs stream output on a `not_null` pointer, invoking `os << val.get()`. This function is only available when `GSL_NO_IOSTREAMS` is not defined.
|
||||
|
||||
##### Modifiers
|
||||
|
||||
```cpp
|
||||
template <class T, class U>
|
||||
std::ptrdiff_t operator-(const not_null<T>&, const not_null<U>&) = delete;
|
||||
template <class T>
|
||||
not_null<T> operator-(const not_null<T>&, std::ptrdiff_t) = delete;
|
||||
template <class T>
|
||||
not_null<T> operator+(const not_null<T>&, std::ptrdiff_t) = delete;
|
||||
template <class T>
|
||||
not_null<T> operator+(std::ptrdiff_t, const not_null<T>&) = delete;
|
||||
```
|
||||
|
||||
Addition and subtraction are explicitly deleted. Pointers point to single objects ([I.13: Do not pass an array as a single pointer](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array)), so don't allow these operators.
|
||||
|
||||
##### STL integration
|
||||
|
||||
```cpp
|
||||
template <class T>
|
||||
struct std::hash<gsl::not_null<T>> { ... };
|
||||
```
|
||||
|
||||
Specialization of `std::hash` for `gsl::not_null`.
|
||||
|
||||
### <a name="H-pointers-strict_not_null" />`gsl::strict_not_null`
|
||||
|
||||
`strict_not_null` is the same as [`not_null`](#user-content-H-pointers-not_null) except that the constructors are `explicit`.
|
||||
|
||||
The free function that deduces the target type from the type of the argument and creates a `gsl::strict_not_null` object is `gsl::make_strict_not_null`.
|
||||
|
||||
## <a name="H-span" />`<span>`
|
||||
|
||||
This header file exports the class `gsl::span`, a bounds-checked implementation of `std::span`.
|
||||
|
||||
- [`gsl::span`](#user-content-H-span-span)
|
||||
|
||||
### <a name="H-span-span" />`gsl::span`
|
||||
|
||||
```cpp
|
||||
template <class ElementType, std::size_t Extent>
|
||||
class span;
|
||||
```
|
||||
|
||||
`gsl::span` is a view over memory. It does not own the memory and is only a way to access contiguous sequences of objects.
|
||||
The extent can be either a fixed size or [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent).
|
||||
|
||||
The `gsl::span` is based on the standardized version of `std::span` which was added to C++20. Originally, the plan was to
|
||||
deprecate `gsl::span` when `std::span` finished standardization, however that plan changed when the runtime bounds checking
|
||||
was removed from `std::span`'s design.
|
||||
|
||||
The only difference between `gsl::span` and `std::span` is that `gsl::span` strictly enforces runtime bounds checking.
|
||||
Any violations of the bounds check results in termination of the program.
|
||||
Like `gsl::span`, `gsl::span`'s iterators also differ from `std::span`'s iterator in that all access operations are bounds checked.
|
||||
|
||||
#### Which version of span should I use?
|
||||
|
||||
##### Use `gsl::span` if
|
||||
|
||||
- you want to guarantee bounds safety in your project.
|
||||
- All data accessing operations use bounds checking to ensure you are only accessing valid memory.
|
||||
- your project uses C++14 or C++17.
|
||||
- `std::span` is not available as it was not introduced into the STL until C++20.
|
||||
|
||||
##### Use `std::span` if
|
||||
|
||||
- your project is C++20 and you need the performance offered by `std::span`.
|
||||
|
||||
#### Types
|
||||
|
||||
```cpp
|
||||
using element_type = ElementType;
|
||||
using value_type = std::remove_cv_t<ElementType>;
|
||||
using size_type = std::size_t;
|
||||
using pointer = element_type*;
|
||||
using const_pointer = const element_type*;
|
||||
using reference = element_type&;
|
||||
using const_reference = const element_type&;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
|
||||
using iterator = details::span_iterator<ElementType>;
|
||||
using reverse_iterator = std::reverse_iterator<iterator>;
|
||||
```
|
||||
|
||||
#### Member functions
|
||||
|
||||
```cpp
|
||||
constexpr span() noexcept;
|
||||
```
|
||||
|
||||
Constructs an empty `span`. This constructor is only available if `Extent` is 0 or [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent).
|
||||
`span::data()` will return `nullptr`.
|
||||
|
||||
```cpp
|
||||
constexpr explicit(Extent != gsl::dynamic_extent) span(pointer ptr, size_type count) noexcept;
|
||||
```
|
||||
|
||||
Constructs a `span` from a pointer and a size. If `Extent` is not [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent),
|
||||
then the constructor [`Expects`](#user-content-H-assert-expects) that `count == Extent`.
|
||||
|
||||
```cpp
|
||||
constexpr explicit(Extent != gsl::dynamic_extent) span(pointer firstElem, pointer lastElem) noexcept;
|
||||
```
|
||||
|
||||
Constructs a `span` from a pointer to the begin and the end of the data. If `Extent` is not [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent),
|
||||
then the constructor [`Expects`](#user-content-H-assert-expects) that `lastElem - firstElem == Extent`.
|
||||
|
||||
```cpp
|
||||
template <std::size_t N>
|
||||
constexpr span(element_type (&arr)[N]) noexcept;
|
||||
```
|
||||
|
||||
Constructs a `span` from a C style array. This overload is available if `Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent)
|
||||
or `N == Extent`.
|
||||
|
||||
```cpp
|
||||
template <class T, std::size_t N>
|
||||
constexpr span(std::array<T, N>& arr) noexcept;
|
||||
|
||||
template <class T, std::size_t N>
|
||||
constexpr span(const std::array<T, N>& arr) noexcept;
|
||||
```
|
||||
|
||||
Constructs a `span` from a `std::array`. These overloads are available if `Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent)
|
||||
or `N == Extent`, and if the array can be interpreted as a `ElementType` array.
|
||||
|
||||
```cpp
|
||||
template <class Container>
|
||||
constexpr explicit(Extent != gsl::dynamic_extent) span(Container& cont) noexcept;
|
||||
|
||||
template <class Container>
|
||||
constexpr explicit(Extent != gsl::dynamic_extent) span(const Container& cont) noexcept;
|
||||
```
|
||||
|
||||
Constructs a `span` from a container. These overloads are available if `Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent)
|
||||
or `N == Extent`, and if the container can be interpreted as a contiguous `ElementType` array.
|
||||
|
||||
```cpp
|
||||
constexpr span(const span& other) noexcept = default;
|
||||
```
|
||||
|
||||
Copy constructor.
|
||||
|
||||
```cpp
|
||||
template <class OtherElementType, std::size_t OtherExtent>
|
||||
explicit(Extent != gsl::dynamic_extent && OtherExtent == dynamic_extent)
|
||||
constexpr span(const span<OtherElementType, OtherExtent>& other) noexcept;
|
||||
```
|
||||
|
||||
Constructs a `span` from another `span`. This constructor is available if `OtherExtent == Extent || Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent)` || OtherExtent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent)
|
||||
and if `ElementType` and `OtherElementType` are compatible.
|
||||
|
||||
If `Extent !=`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) and `OtherExtent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent),
|
||||
then the constructor [`Expects`](#user-content-H-assert-expects) that `other.size() == Extent`.
|
||||
|
||||
```cpp
|
||||
constexpr span& operator=(const span& other) noexcept = default;
|
||||
```
|
||||
|
||||
Copy assignment
|
||||
|
||||
```cpp
|
||||
template <std::size_t Count>
|
||||
constexpr span<element_type, Count> first() const noexcept;
|
||||
|
||||
constexpr span<element_type, dynamic_extent> first(size_type count) const noexcept;
|
||||
|
||||
template <std::size_t Count>
|
||||
constexpr span<element_type, Count> last() const noexcept;
|
||||
|
||||
constexpr span<element_type, dynamic_extent> last(size_type count) const noexcept;
|
||||
```
|
||||
|
||||
Return a subspan of the first/last `Count` elements. [`Expects`](#user-content-H-assert-expects) that `Count` does not exceed the `span`'s size.
|
||||
|
||||
```cpp
|
||||
template <std::size_t offset, std::size_t count = dynamic_extent>
|
||||
constexpr auto subspan() const noexcept;
|
||||
|
||||
constexpr span<element_type, dynamic_extent>
|
||||
subspan(size_type offset, size_type count = dynamic_extent) const noexcept;
|
||||
```
|
||||
|
||||
Return a subspan starting at `offset` and having size `count`. [`Expects`](#user-content-H-assert-expects) that `offset` does not exceed the `span`'s size,
|
||||
and that `offset == `[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) or `offset + count` does not exceed the `span`'s size.
|
||||
If `count` is `gsl::dynamic_extent`, the number of elements in the subspan is `size() - offset`.
|
||||
|
||||
```cpp
|
||||
constexpr size_type size() const noexcept;
|
||||
|
||||
constexpr size_type size_bytes() const noexcept;
|
||||
```
|
||||
|
||||
Returns the size respective the size in bytes of the `span`.
|
||||
|
||||
```cpp
|
||||
constexpr bool empty() const noexcept;
|
||||
```
|
||||
|
||||
Is the `span` empty?
|
||||
|
||||
```cpp
|
||||
constexpr reference operator[](size_type idx) const noexcept;
|
||||
```
|
||||
|
||||
Returns a reference to the element at the given index. [`Expects`](#user-content-H-assert-expects) that `idx` is less than the `span`'s size.
|
||||
|
||||
```cpp
|
||||
constexpr reference front() const noexcept;
|
||||
constexpr reference back() const noexcept;
|
||||
```
|
||||
|
||||
Returns a reference to the first/last element in the `span`. [`Expects`](#user-content-H-assert-expects) that the `span` is not empty.
|
||||
|
||||
```cpp
|
||||
constexpr pointer data() const noexcept;
|
||||
```
|
||||
|
||||
Returns a pointer to the beginning of the contained data.
|
||||
|
||||
```cpp
|
||||
constexpr iterator begin() const noexcept;
|
||||
constexpr iterator end() const noexcept;
|
||||
constexpr reverse_iterator rbegin() const noexcept;
|
||||
constexpr reverse_iterator rend() const noexcept;
|
||||
```
|
||||
|
||||
Returns an iterator to the first/last normal/reverse iterator.
|
||||
|
||||
```cpp
|
||||
template <class Type, std::size_t Extent>
|
||||
span(Type (&)[Extent]) -> span<Type, Extent>;
|
||||
|
||||
template <class Type, std::size_t Size>
|
||||
span(std::array<Type, Size>&) -> span<Type, Size>;
|
||||
|
||||
template <class Type, std::size_t Size>
|
||||
span(const std::array<Type, Size>&) -> span<const Type, Size>;
|
||||
|
||||
template <class Container,
|
||||
class Element = std::remove_pointer_t<decltype(std::declval<Container&>().data())>>
|
||||
span(Container&) -> span<Element>;
|
||||
|
||||
template <class Container,
|
||||
class Element = std::remove_pointer_t<decltype(std::declval<const Container&>().data())>>
|
||||
span(const Container&) -> span<Element>;
|
||||
```
|
||||
|
||||
Deduction guides.
|
||||
|
||||
```cpp
|
||||
template <class ElementType, std::size_t Extent>
|
||||
span<const byte, details::calculate_byte_size<ElementType, Extent>::value>
|
||||
as_bytes(span<ElementType, Extent> s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
span<byte, details::calculate_byte_size<ElementType, Extent>::value>
|
||||
as_writable_bytes(span<ElementType, Extent> s) noexcept;
|
||||
```
|
||||
|
||||
Converts a `span` into a `span` of `byte`s.
|
||||
|
||||
`as_writable_bytes` will only be available for non-const `ElementType`s.
|
||||
|
||||
## <a name="H-span_ext" />`<span_ext>`
|
||||
|
||||
This file is a companion for and included by [`<gsl/span>`](#user-content-H-span), and should not be used on its own. It contains useful features that aren't part of the `std::span` API as found inside the STL `<span>` header (with the exception of [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent), which is included here due to implementation constraints).
|
||||
|
||||
- [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent)
|
||||
- [`gsl::span`](#user-content-H-span_ext-span)
|
||||
- [`gsl::span` comparison operators](#user-content-H-span_ext-span_comparison_operators)
|
||||
- [`gsl::make_span`](#user-content-H-span_ext-make_span)
|
||||
- [`gsl::at`](#user-content-H-span_ext-at)
|
||||
- [`gsl::ssize`](#user-content-H-span_ext-ssize)
|
||||
- [`gsl::span` iterator functions](#user-content-H-span_ext-span_iterator_functions)
|
||||
|
||||
### <a name="H-span_ext-dynamic_extent" />`gsl::dynamic_extent`
|
||||
|
||||
Defines the extent value to be used by all `gsl::span` with dynamic extent.
|
||||
|
||||
Note: `std::dynamic_extent` is exposed by the STL `<span>` header and so ideally `gsl::dynamic_extent` would be under [`<gsl/span>`](#user-content-H-span), but to avoid cyclic dependency issues it is under `<span_ext>` instead.
|
||||
|
||||
### <a name="H-span_ext-span" />`gsl::span`
|
||||
|
||||
```cpp
|
||||
template <class ElementType, std::size_t Extent = dynamic_extent>
|
||||
class span;
|
||||
```
|
||||
|
||||
Forward declaration of `gsl::span`.
|
||||
|
||||
### <a name="H-span_ext-span_comparison_operators" />`gsl::span` comparison operators
|
||||
|
||||
```cpp
|
||||
template <class ElementType, std::size_t FirstExtent, std::size_t SecondExtent>
|
||||
constexpr bool operator==(span<ElementType, FirstExtent> l, span<ElementType, SecondExtent> r);
|
||||
template <class ElementType, std::size_t FirstExtent, std::size_t SecondExtent>
|
||||
constexpr bool operator!=(span<ElementType, FirstExtent> l, span<ElementType, SecondExtent> r);
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator<(span<ElementType, Extent> l, span<ElementType, Extent> r);
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator<=(span<ElementType, Extent> l, span<ElementType, Extent> r);
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator>(span<ElementType, Extent> l, span<ElementType, Extent> r);
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator>=(span<ElementType, Extent> l, span<ElementType, Extent> r);
|
||||
```
|
||||
|
||||
The comparison operators for two `span`s lexicographically compare the elements in the `span`s.
|
||||
|
||||
### <a name="H-span_ext-make_span" />`gsl::make_span`
|
||||
|
||||
```cpp
|
||||
template <class ElementType>
|
||||
constexpr span<ElementType> make_span(ElementType* ptr, typename span<ElementType>::size_type count);
|
||||
template <class ElementType>
|
||||
constexpr span<ElementType> make_span(ElementType* firstElem, ElementType* lastElem);
|
||||
template <class ElementType, std::size_t N>
|
||||
constexpr span<ElementType, N> make_span(ElementType (&arr)[N]) noexcept;
|
||||
template <class Container>
|
||||
constexpr span<typename Container::value_type> make_span(Container& cont);
|
||||
template <class Container>
|
||||
constexpr span<const typename Container::value_type> make_span(const Container& cont);
|
||||
template <class Ptr>
|
||||
constexpr span<typename Ptr::element_type> make_span(Ptr& cont, std::size_t count);
|
||||
template <class Ptr>
|
||||
constexpr span<typename Ptr::element_type> make_span(Ptr& cont);
|
||||
```
|
||||
|
||||
Utility function for creating a `span` with [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) from
|
||||
- pointer and length,
|
||||
- pointer to start and pointer to end,
|
||||
- a C style array, or
|
||||
- a container.
|
||||
|
||||
### <a name="H-span_ext-at" />`gsl::at`
|
||||
|
||||
```cpp
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr ElementType& at(span<ElementType, Extent> s, index i);
|
||||
```
|
||||
|
||||
The function `gsl::at` offers a safe way to access data with index bounds checking.
|
||||
|
||||
This is the specialization of [`gsl::at`](#user-content-H-util-at) for [`span`](#user-content-H-span-span). It returns a reference to the `i`th element and
|
||||
[`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the `span`.
|
||||
|
||||
Note: `gsl::at` supports indexes up to `PTRDIFF_MAX`.
|
||||
|
||||
### <a name="H-span_ext-ssize" />`gsl::ssize`
|
||||
|
||||
```cpp
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr std::ptrdiff_t ssize(const span<ElementType, Extent>& s) noexcept;
|
||||
```
|
||||
|
||||
Return the size of a [`span`](#user-content-H-span-span) as a `ptrdiff_t`.
|
||||
|
||||
### <a name="H-span_ext-span_iterator_functions" />`gsl::span` iterator functions
|
||||
|
||||
```cpp
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
begin(const span<ElementType, Extent>& s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent = dynamic_extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
end(const span<ElementType, Extent>& s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
rbegin(const span<ElementType, Extent>& s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
rend(const span<ElementType, Extent>& s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
cbegin(const span<ElementType, Extent>& s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent = dynamic_extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
cend(const span<ElementType, Extent>& s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
crbegin(const span<ElementType, Extent>& s) noexcept;
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
crend(const span<ElementType, Extent>& s) noexcept;
|
||||
```
|
||||
|
||||
Free functions for getting a non-const/const begin/end normal/reverse iterator for a [`span`](#user-content-H-span-span).
|
||||
|
||||
## <a name="H-zstring" />`<zstring>`
|
||||
|
||||
This header exports a family of `*zstring` types.
|
||||
|
||||
A `gsl::XXzstring<T>` is a typedef to `T`. It adds no checks whatsoever, it is just for having a syntax to describe
|
||||
that a pointer points to a zero terminated C style string. This helps static code analysis, and it helps human readers.
|
||||
|
||||
`basic_zstring` is a pointer to a C-string (zero-terminated array) with a templated char type. Used to implement the rest of the `*zstring` family.
|
||||
`zstring` is a zero terminated `char` string.
|
||||
`czstring` is a const zero terminated `char` string.
|
||||
`wzstring` is a zero terminated `wchar_t` string.
|
||||
`cwzstring` is a const zero terminated `wchar_t` string.
|
||||
`u16zstring` is a zero terminated `char16_t` string.
|
||||
`cu16zstring` is a const zero terminated `char16_t` string.
|
||||
`u32zstring` is a zero terminated `char32_t` string.
|
||||
`cu32zstring` is a const zero terminated `char32_t` string.
|
||||
|
||||
See [GSL.view](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-views) and [SL.str.3: Use zstring or czstring to refer to a C-style, zero-terminated, sequence of characters](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rstr-zstring).
|
||||
|
||||
## <a name="H-util" />`<util>`
|
||||
|
||||
This header contains utility functions and classes. This header works without exceptions being available. The parts that require
|
||||
exceptions being available are in their own header file [narrow](#user-content-H-narrow).
|
||||
|
||||
See [GSL.util: Utilities](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-utilities)
|
||||
|
||||
- [`gsl::narrow_cast`](#user-content-H-util-narrow_cast)
|
||||
- [`gsl::final_action`](#user-content-H-util-final_action)
|
||||
- [`gsl::at`](#user-content-H-util-at)
|
||||
|
||||
### <a name="H-util-index" />`gsl::index`
|
||||
|
||||
An alias to `std::ptrdiff_t`. It serves as the index type for all container indexes/subscripts/sizes.
|
||||
|
||||
### <a name="H-util-narrow_cast" />`gsl::narrow_cast`
|
||||
|
||||
`gsl::narrow_cast<T>(x)` is a named cast that is identical to a `static_cast<T>(x)`. It exists to make clear to static code analysis tools and to human readers that a lossy conversion is acceptable.
|
||||
|
||||
Note: compare the throwing version [`gsl::narrow`](#user-content-H-narrow-narrow) in header [narrow](#user-content-H-narrow).
|
||||
|
||||
See [ES.46: Avoid lossy (narrowing, truncating) arithmetic conversions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-narrowing) and [ES.49: If you must use a cast, use a named cast](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-casts-named)
|
||||
|
||||
### <a name="H-util-final_action" />`gsl::final_action`
|
||||
|
||||
```cpp
|
||||
template <class F>
|
||||
class final_action { ... };
|
||||
```
|
||||
|
||||
`final_action` allows you to ensure something gets run at the end of a scope.
|
||||
|
||||
See [E.19: Use a final_action object to express cleanup if no suitable resource handle is available](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Re-finally)
|
||||
|
||||
#### Member functions
|
||||
|
||||
```cpp
|
||||
explicit final_action(const F& ff) noexcept;
|
||||
explicit final_action(F&& ff) noexcept;
|
||||
```
|
||||
|
||||
Construct an object with the action to invoke in the destructor.
|
||||
|
||||
```cpp
|
||||
~final_action() noexcept;
|
||||
```
|
||||
|
||||
The destructor will call the action that was passed in the constructor.
|
||||
|
||||
```cpp
|
||||
final_action(final_action&& other) noexcept;
|
||||
final_action(const final_action&) = delete;
|
||||
void operator=(const final_action&) = delete;
|
||||
void operator=(final_action&&) = delete;
|
||||
```
|
||||
|
||||
Move construction is allowed. Copy construction is deleted. Copy and move assignment are also explicitely deleted.
|
||||
|
||||
#### <a name="H-util-finally" />Non-member functions
|
||||
```cpp
|
||||
template <class F>
|
||||
auto finally(F&& f) noexcept;
|
||||
```
|
||||
|
||||
Creates a `gsl::final_action` object, deducing the template argument type from the type of the argument.
|
||||
|
||||
### <a name="H-util-at" />`gsl::at`
|
||||
|
||||
The function `gsl::at` offers a safe way to access data with index bounds checking.
|
||||
|
||||
Note: `gsl::at` supports indexes up to `PTRDIFF_MAX`.
|
||||
|
||||
See [ES.42: Keep use of pointers simple and straightforward](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-ptr)
|
||||
|
||||
```cpp
|
||||
template <class T, std::size_t N>
|
||||
constexpr T& at(T (&arr)[N], const index i);
|
||||
```
|
||||
|
||||
This overload returns a reference to the `i`s element of a C style array `arr`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array.
|
||||
|
||||
```cpp
|
||||
template <class Cont>
|
||||
constexpr auto at(Cont& cont, const index i) -> decltype(cont[cont.size()]);
|
||||
```
|
||||
|
||||
This overload returns a reference to the `i`s element of the container `cont`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array.
|
||||
|
||||
```cpp
|
||||
template <class T>
|
||||
constexpr T at(const std::initializer_list<T> cont, const index i);
|
||||
```
|
||||
|
||||
This overload returns a reference to the `i`s element of the initializer list `cont`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array.
|
||||
|
||||
```cpp
|
||||
template <class T, std::size_t extent = std::dynamic_extent>
|
||||
constexpr auto at(std::span<T, extent> sp, const index i) -> decltype(sp[sp.size()]);
|
||||
```
|
||||
|
||||
This overload returns a reference to the `i`s element of the `std::span` `sp`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array.
|
||||
|
||||
For [`gsl::at`](#user-content-H-span_ext-at) for [`gsl::span`](#user-content-H-span-span) see header [`span_ext`](#user-content-H-span_ext).
|
13
deps/GSL/include/CMakeLists.txt
vendored
13
deps/GSL/include/CMakeLists.txt
vendored
@ -1,13 +0,0 @@
|
||||
# Add include folders to the library and targets that consume it
|
||||
# the SYSTEM keyword suppresses warnings for users of the library
|
||||
#
|
||||
# By adding this directory as an include directory the user gets a
|
||||
# namespace effect.
|
||||
#
|
||||
# IE:
|
||||
# #include <gsl/gsl>
|
||||
if(PROJECT_IS_TOP_LEVEL)
|
||||
target_include_directories(GSL INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
|
||||
else()
|
||||
target_include_directories(GSL SYSTEM INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
|
||||
endif()
|
63
deps/GSL/include/gsl/algorithm
vendored
63
deps/GSL/include/gsl/algorithm
vendored
@ -1,63 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_ALGORITHM_H
|
||||
#define GSL_ALGORITHM_H
|
||||
|
||||
#include "assert" // for Expects
|
||||
#include "span" // for dynamic_extent, span
|
||||
|
||||
#include <algorithm> // for copy_n
|
||||
#include <cstddef> // for ptrdiff_t
|
||||
#include <type_traits> // for is_assignable
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
|
||||
// turn off some warnings that are noisy about our Expects statements
|
||||
#pragma warning(disable : 4127) // conditional expression is constant
|
||||
#pragma warning(disable : 4996) // unsafe use of std::copy_n
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
// Note: this will generate faster code than std::copy using span iterator in older msvc+stl
|
||||
// not necessary for msvc since VS2017 15.8 (_MSC_VER >= 1915)
|
||||
template <class SrcElementType, std::size_t SrcExtent, class DestElementType,
|
||||
std::size_t DestExtent>
|
||||
void copy(span<SrcElementType, SrcExtent> src, span<DestElementType, DestExtent> dest)
|
||||
{
|
||||
static_assert(std::is_assignable<decltype(*dest.data()), decltype(*src.data())>::value,
|
||||
"Elements of source span can not be assigned to elements of destination span");
|
||||
static_assert(SrcExtent == dynamic_extent || DestExtent == dynamic_extent ||
|
||||
(SrcExtent <= DestExtent),
|
||||
"Source range is longer than target range");
|
||||
|
||||
Expects(dest.size() >= src.size());
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(stl.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
std::copy_n(src.data(), src.size(), dest.data());
|
||||
}
|
||||
|
||||
} // namespace gsl
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif // _MSC_VER
|
||||
|
||||
#endif // GSL_ALGORITHM_H
|
133
deps/GSL/include/gsl/assert
vendored
133
deps/GSL/include/gsl/assert
vendored
@ -1,133 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_ASSERT_H
|
||||
#define GSL_ASSERT_H
|
||||
|
||||
//
|
||||
// Temporary until MSVC STL supports no-exceptions mode.
|
||||
// Currently terminate is a no-op in this mode, so we add termination behavior back
|
||||
//
|
||||
#if defined(_MSC_VER) && (defined(_KERNEL_MODE) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS))
|
||||
#define GSL_KERNEL_MODE
|
||||
|
||||
#define GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND
|
||||
#include <intrin.h>
|
||||
#define RANGE_CHECKS_FAILURE 0
|
||||
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Winvalid-noreturn"
|
||||
#endif // defined(__clang__)
|
||||
|
||||
#else // defined(_MSC_VER) && (defined(_KERNEL_MODE) || (defined(_HAS_EXCEPTIONS) &&
|
||||
// !_HAS_EXCEPTIONS))
|
||||
|
||||
#include <exception>
|
||||
|
||||
#endif // defined(_MSC_VER) && (defined(_KERNEL_MODE) || (defined(_HAS_EXCEPTIONS) &&
|
||||
// !_HAS_EXCEPTIONS))
|
||||
|
||||
//
|
||||
// make suppress attributes parse for some compilers
|
||||
// Hopefully temporary until suppression standardization occurs
|
||||
//
|
||||
#if defined(__clang__)
|
||||
#define GSL_SUPPRESS(x) [[gsl::suppress(#x)]]
|
||||
#else
|
||||
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__NVCC__)
|
||||
#define GSL_SUPPRESS(x) [[gsl::suppress(x)]]
|
||||
#else
|
||||
#define GSL_SUPPRESS(x)
|
||||
#endif // _MSC_VER
|
||||
#endif // __clang__
|
||||
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#define GSL_LIKELY(x) __builtin_expect(!!(x), 1)
|
||||
#define GSL_UNLIKELY(x) __builtin_expect(!!(x), 0)
|
||||
|
||||
#else
|
||||
|
||||
#define GSL_LIKELY(x) (!!(x))
|
||||
#define GSL_UNLIKELY(x) (!!(x))
|
||||
#endif // defined(__clang__) || defined(__GNUC__)
|
||||
|
||||
//
|
||||
// GSL_ASSUME(cond)
|
||||
//
|
||||
// Tell the optimizer that the predicate cond must hold. It is unspecified
|
||||
// whether or not cond is actually evaluated.
|
||||
//
|
||||
#ifdef _MSC_VER
|
||||
#define GSL_ASSUME(cond) __assume(cond)
|
||||
#elif defined(__GNUC__)
|
||||
#define GSL_ASSUME(cond) ((cond) ? static_cast<void>(0) : __builtin_unreachable())
|
||||
#else
|
||||
#define GSL_ASSUME(cond) static_cast<void>((cond) ? 0 : 0)
|
||||
#endif
|
||||
|
||||
//
|
||||
// GSL.assert: assertions
|
||||
//
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
|
||||
namespace details
|
||||
{
|
||||
#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND)
|
||||
|
||||
typedef void(__cdecl* terminate_handler)();
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(f.6) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
[[noreturn]] inline void __cdecl default_terminate_handler()
|
||||
{
|
||||
__fastfail(RANGE_CHECKS_FAILURE);
|
||||
}
|
||||
|
||||
inline gsl::details::terminate_handler& get_terminate_handler() noexcept
|
||||
{
|
||||
static terminate_handler handler = &default_terminate_handler;
|
||||
return handler;
|
||||
}
|
||||
|
||||
#endif // defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND)
|
||||
|
||||
[[noreturn]] inline void terminate() noexcept
|
||||
{
|
||||
#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND)
|
||||
(*gsl::details::get_terminate_handler())();
|
||||
#else
|
||||
std::terminate();
|
||||
#endif // defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND)
|
||||
}
|
||||
|
||||
} // namespace details
|
||||
} // namespace gsl
|
||||
|
||||
#define GSL_CONTRACT_CHECK(type, cond) \
|
||||
(GSL_LIKELY(cond) ? static_cast<void>(0) : gsl::details::terminate())
|
||||
|
||||
#define Expects(cond) GSL_CONTRACT_CHECK("Precondition", cond)
|
||||
#define Ensures(cond) GSL_CONTRACT_CHECK("Postcondition", cond)
|
||||
|
||||
#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND) && defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
#endif // GSL_ASSERT_H
|
188
deps/GSL/include/gsl/byte
vendored
188
deps/GSL/include/gsl/byte
vendored
@ -1,188 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_BYTE_H
|
||||
#define GSL_BYTE_H
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
// VS2017 15.8 added support for the __cpp_lib_byte definition
|
||||
// To do: drop _HAS_STD_BYTE when support for pre 15.8 expires
|
||||
#ifdef _MSC_VER
|
||||
|
||||
#pragma warning(push)
|
||||
|
||||
// Turn MSVC /analyze rules that generate too much noise. TODO: fix in the tool.
|
||||
#pragma warning(disable : 26493) // don't use c-style casts // TODO: MSVC suppression in templates
|
||||
// does not always work
|
||||
|
||||
#ifndef GSL_USE_STD_BYTE
|
||||
// this tests if we are under MSVC and the standard lib has std::byte and it is enabled
|
||||
#if (defined(_HAS_STD_BYTE) && _HAS_STD_BYTE) || \
|
||||
(defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603)
|
||||
|
||||
#define GSL_USE_STD_BYTE 1
|
||||
|
||||
#else // (defined(_HAS_STD_BYTE) && _HAS_STD_BYTE) || (defined(__cpp_lib_byte) && __cpp_lib_byte >=
|
||||
// 201603)
|
||||
|
||||
#define GSL_USE_STD_BYTE 0
|
||||
|
||||
#endif // (defined(_HAS_STD_BYTE) && _HAS_STD_BYTE) || (defined(__cpp_lib_byte) && __cpp_lib_byte >=
|
||||
// 201603)
|
||||
#endif // GSL_USE_STD_BYTE
|
||||
|
||||
#else // _MSC_VER
|
||||
|
||||
#ifndef GSL_USE_STD_BYTE
|
||||
#include <cstddef> /* __cpp_lib_byte */
|
||||
// this tests if we are under GCC or Clang with enough -std=c++1z power to get us std::byte
|
||||
// also check if libc++ version is sufficient (> 5.0) or libstdc++ actually contains std::byte
|
||||
#if defined(__cplusplus) && (__cplusplus >= 201703L) && \
|
||||
(defined(__cpp_lib_byte) && (__cpp_lib_byte >= 201603) || \
|
||||
defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 5000))
|
||||
|
||||
#define GSL_USE_STD_BYTE 1
|
||||
|
||||
#else // defined(__cplusplus) && (__cplusplus >= 201703L) &&
|
||||
// (defined(__cpp_lib_byte) && (__cpp_lib_byte >= 201603) ||
|
||||
// defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 5000))
|
||||
|
||||
#define GSL_USE_STD_BYTE 0
|
||||
|
||||
#endif // defined(__cplusplus) && (__cplusplus >= 201703L) &&
|
||||
// (defined(__cpp_lib_byte) && (__cpp_lib_byte >= 201603) ||
|
||||
// defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 5000))
|
||||
#endif // GSL_USE_STD_BYTE
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
||||
// Use __may_alias__ attribute on gcc and clang
|
||||
#if defined __clang__ || (defined(__GNUC__) && __GNUC__ > 5)
|
||||
#define byte_may_alias __attribute__((__may_alias__))
|
||||
#else // defined __clang__ || defined __GNUC__
|
||||
#define byte_may_alias
|
||||
#endif // defined __clang__ || defined __GNUC__
|
||||
|
||||
#if GSL_USE_STD_BYTE
|
||||
#include <cstddef>
|
||||
#endif
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
#if GSL_USE_STD_BYTE
|
||||
|
||||
using std::byte;
|
||||
using std::to_integer;
|
||||
|
||||
#else // GSL_USE_STD_BYTE
|
||||
|
||||
// This is a simple definition for now that allows
|
||||
// use of byte within span<> to be standards-compliant
|
||||
enum class byte_may_alias byte : unsigned char
|
||||
{
|
||||
};
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept
|
||||
{
|
||||
return b = byte(static_cast<unsigned char>(b) << shift);
|
||||
}
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte operator<<(byte b, IntegerType shift) noexcept
|
||||
{
|
||||
return byte(static_cast<unsigned char>(b) << shift);
|
||||
}
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept
|
||||
{
|
||||
return b = byte(static_cast<unsigned char>(b) >> shift);
|
||||
}
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr byte operator>>(byte b, IntegerType shift) noexcept
|
||||
{
|
||||
return byte(static_cast<unsigned char>(b) >> shift);
|
||||
}
|
||||
|
||||
constexpr byte& operator|=(byte& l, byte r) noexcept
|
||||
{
|
||||
return l = byte(static_cast<unsigned char>(l) | static_cast<unsigned char>(r));
|
||||
}
|
||||
|
||||
constexpr byte operator|(byte l, byte r) noexcept
|
||||
{
|
||||
return byte(static_cast<unsigned char>(l) | static_cast<unsigned char>(r));
|
||||
}
|
||||
|
||||
constexpr byte& operator&=(byte& l, byte r) noexcept
|
||||
{
|
||||
return l = byte(static_cast<unsigned char>(l) & static_cast<unsigned char>(r));
|
||||
}
|
||||
|
||||
constexpr byte operator&(byte l, byte r) noexcept
|
||||
{
|
||||
return byte(static_cast<unsigned char>(l) & static_cast<unsigned char>(r));
|
||||
}
|
||||
|
||||
constexpr byte& operator^=(byte& l, byte r) noexcept
|
||||
{
|
||||
return l = byte(static_cast<unsigned char>(l) ^ static_cast<unsigned char>(r));
|
||||
}
|
||||
|
||||
constexpr byte operator^(byte l, byte r) noexcept
|
||||
{
|
||||
return byte(static_cast<unsigned char>(l) ^ static_cast<unsigned char>(r));
|
||||
}
|
||||
|
||||
constexpr byte operator~(byte b) noexcept { return byte(~static_cast<unsigned char>(b)); }
|
||||
|
||||
template <class IntegerType, class = std::enable_if_t<std::is_integral<IntegerType>::value>>
|
||||
constexpr IntegerType to_integer(byte b) noexcept
|
||||
{
|
||||
return static_cast<IntegerType>(b);
|
||||
}
|
||||
|
||||
#endif // GSL_USE_STD_BYTE
|
||||
|
||||
template <typename T>
|
||||
// NOTE: need suppression since c++14 does not allow "return {t}"
|
||||
// GSL_SUPPRESS(type.4) // NO-FORMAT: attribute // TODO: suppression does not work
|
||||
constexpr byte to_byte(T t) noexcept
|
||||
{
|
||||
static_assert(std::is_same<T, unsigned char>::value,
|
||||
"gsl::to_byte(t) must be provided an unsigned char, otherwise data loss may occur. "
|
||||
"If you are calling to_byte with an integer contant use: gsl::to_byte<t>() version.");
|
||||
return byte(t);
|
||||
}
|
||||
|
||||
template <int I>
|
||||
constexpr byte to_byte() noexcept
|
||||
{
|
||||
static_assert(I >= 0 && I <= 255,
|
||||
"gsl::byte only has 8 bits of storage, values must be in range 0-255");
|
||||
return static_cast<byte>(I);
|
||||
}
|
||||
|
||||
} // namespace gsl
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif // _MSC_VER
|
||||
|
||||
#endif // GSL_BYTE_H
|
32
deps/GSL/include/gsl/gsl
vendored
32
deps/GSL/include/gsl/gsl
vendored
@ -1,32 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_GSL_H
|
||||
#define GSL_GSL_H
|
||||
|
||||
#include "algorithm" // copy
|
||||
#include "assert" // Ensures/Expects
|
||||
#include "byte" // byte
|
||||
#include "pointers" // owner, not_null
|
||||
#include "span" // span
|
||||
#include "zstring" // zstring
|
||||
#include "util" // finally()/narrow_cast()...
|
||||
|
||||
#ifdef __cpp_exceptions
|
||||
#include "narrow" // narrow()
|
||||
#endif
|
||||
|
||||
#endif // GSL_GSL_H
|
84
deps/GSL/include/gsl/narrow
vendored
84
deps/GSL/include/gsl/narrow
vendored
@ -1,84 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_NARROW_H
|
||||
#define GSL_NARROW_H
|
||||
#include "assert" // for GSL_SUPPRESS
|
||||
#include "util" // for narrow_cast
|
||||
#include <exception> // for std::exception
|
||||
namespace gsl
|
||||
{
|
||||
struct narrowing_error : public std::exception
|
||||
{
|
||||
const char* what() const noexcept override { return "narrowing_error"; }
|
||||
};
|
||||
|
||||
// narrow() : a checked version of narrow_cast() that throws if the cast changed the value
|
||||
template <class T, class U, typename std::enable_if<std::is_arithmetic<T>::value>::type* = nullptr>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
GSL_SUPPRESS(f.6) // NO-FORMAT: attribute // TODO: MSVC /analyze does not recognise noexcept(false)
|
||||
GSL_SUPPRESS(es.46) // NO-FORMAT: attribute // The warning suggests that a floating->unsigned conversion can occur
|
||||
// in the static_cast below, and that gsl::narrow should be used instead.
|
||||
// Suppress this warning, since gsl::narrow is defined in terms of
|
||||
// static_cast
|
||||
// clang-format on
|
||||
constexpr T narrow(U u) noexcept(false)
|
||||
{
|
||||
constexpr const bool is_different_signedness =
|
||||
(std::is_signed<T>::value != std::is_signed<U>::value);
|
||||
|
||||
GSL_SUPPRESS(es.103) // NO-FORMAT: attribute // don't overflow
|
||||
GSL_SUPPRESS(es.104) // NO-FORMAT: attribute // don't underflow
|
||||
GSL_SUPPRESS(p.2) // NO-FORMAT: attribute // don't rely on undefined behavior
|
||||
const T t = narrow_cast<T>(u); // While this is technically undefined behavior in some cases (i.e., if the source value is of floating-point type
|
||||
// and cannot fit into the destination integral type), the resultant behavior is benign on the platforms
|
||||
// that we target (i.e., no hardware trap representations are hit).
|
||||
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wfloat-equal"
|
||||
#endif
|
||||
// Note: NaN will always throw, since NaN != NaN
|
||||
if (static_cast<U>(t) != u || (is_different_signedness && ((t < T{}) != (u < U{}))))
|
||||
{
|
||||
throw narrowing_error{};
|
||||
}
|
||||
#if defined(__clang__) || defined(__GNUC__)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
template <class T, class U, typename std::enable_if<!std::is_arithmetic<T>::value>::type* = nullptr>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
GSL_SUPPRESS(f.6) // NO-FORMAT: attribute // TODO: MSVC /analyze does not recognise noexcept(false)
|
||||
// clang-format on
|
||||
constexpr T narrow(U u) noexcept(false)
|
||||
{
|
||||
const T t = narrow_cast<T>(u);
|
||||
|
||||
if (static_cast<U>(t) != u)
|
||||
{
|
||||
throw narrowing_error{};
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
} // namespace gsl
|
||||
#endif // GSL_NARROW_H
|
348
deps/GSL/include/gsl/pointers
vendored
348
deps/GSL/include/gsl/pointers
vendored
@ -1,348 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_POINTERS_H
|
||||
#define GSL_POINTERS_H
|
||||
|
||||
#include "assert" // for Ensures, Expects
|
||||
|
||||
#include <algorithm> // for forward
|
||||
#include <cstddef> // for ptrdiff_t, nullptr_t, size_t
|
||||
#include <memory> // for shared_ptr, unique_ptr
|
||||
#include <system_error> // for hash
|
||||
#include <type_traits> // for enable_if_t, is_convertible, is_assignable
|
||||
#include <utility> // for declval
|
||||
|
||||
#if !defined(GSL_NO_IOSTREAMS)
|
||||
#include <iosfwd> // for ostream
|
||||
#endif // !defined(GSL_NO_IOSTREAMS)
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
|
||||
namespace details
|
||||
{
|
||||
template <typename T, typename = void>
|
||||
struct is_comparable_to_nullptr : std::false_type
|
||||
{
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct is_comparable_to_nullptr<
|
||||
T,
|
||||
std::enable_if_t<std::is_convertible<decltype(std::declval<T>() != nullptr), bool>::value>>
|
||||
: std::true_type
|
||||
{
|
||||
};
|
||||
|
||||
// Resolves to the more efficient of `const T` or `const T&`, in the context of returning a const-qualified value
|
||||
// of type T.
|
||||
//
|
||||
// Copied from cppfront's implementation of the CppCoreGuidelines F.16 (https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-in)
|
||||
template<typename T>
|
||||
using value_or_reference_return_t = std::conditional_t<
|
||||
sizeof(T) < 2*sizeof(void*) && std::is_trivially_copy_constructible<T>::value,
|
||||
const T,
|
||||
const T&>;
|
||||
|
||||
} // namespace details
|
||||
|
||||
//
|
||||
// GSL.owner: ownership pointers
|
||||
//
|
||||
using std::shared_ptr;
|
||||
using std::unique_ptr;
|
||||
|
||||
//
|
||||
// owner
|
||||
//
|
||||
// `gsl::owner<T>` is designed as a safety mechanism for code that must deal directly with raw pointers that own memory.
|
||||
// Ideally such code should be restricted to the implementation of low-level abstractions. `gsl::owner` can also be used
|
||||
// as a stepping point in converting legacy code to use more modern RAII constructs, such as smart pointers.
|
||||
//
|
||||
// T must be a pointer type
|
||||
// - disallow construction from any type other than pointer type
|
||||
//
|
||||
template <class T, class = std::enable_if_t<std::is_pointer<T>::value>>
|
||||
using owner = T;
|
||||
|
||||
//
|
||||
// not_null
|
||||
//
|
||||
// Restricts a pointer or smart pointer to only hold non-null values.
|
||||
//
|
||||
// Has zero size overhead over T.
|
||||
//
|
||||
// If T is a pointer (i.e. T == U*) then
|
||||
// - allow construction from U*
|
||||
// - disallow construction from nullptr_t
|
||||
// - disallow default construction
|
||||
// - ensure construction from null U* fails
|
||||
// - allow implicit conversion to U*
|
||||
//
|
||||
template <class T>
|
||||
class not_null
|
||||
{
|
||||
public:
|
||||
static_assert(details::is_comparable_to_nullptr<T>::value, "T cannot be compared to nullptr.");
|
||||
|
||||
template <typename U, typename = std::enable_if_t<std::is_convertible<U, T>::value>>
|
||||
constexpr not_null(U&& u) noexcept(std::is_nothrow_move_constructible<T>::value) : ptr_(std::forward<U>(u))
|
||||
{
|
||||
Expects(ptr_ != nullptr);
|
||||
}
|
||||
|
||||
template <typename = std::enable_if_t<!std::is_same<std::nullptr_t, T>::value>>
|
||||
constexpr not_null(T u) noexcept(std::is_nothrow_move_constructible<T>::value) : ptr_(std::move(u))
|
||||
{
|
||||
Expects(ptr_ != nullptr);
|
||||
}
|
||||
|
||||
template <typename U, typename = std::enable_if_t<std::is_convertible<U, T>::value>>
|
||||
constexpr not_null(const not_null<U>& other) noexcept(std::is_nothrow_move_constructible<T>::value) : not_null(other.get())
|
||||
{}
|
||||
|
||||
not_null(const not_null& other) = default;
|
||||
not_null& operator=(const not_null& other) = default;
|
||||
constexpr details::value_or_reference_return_t<T> get() const
|
||||
noexcept(noexcept(details::value_or_reference_return_t<T>{std::declval<T&>()}))
|
||||
{
|
||||
return ptr_;
|
||||
}
|
||||
|
||||
constexpr operator T() const { return get(); }
|
||||
constexpr decltype(auto) operator->() const { return get(); }
|
||||
constexpr decltype(auto) operator*() const { return *get(); }
|
||||
|
||||
// prevents compilation when someone attempts to assign a null pointer constant
|
||||
not_null(std::nullptr_t) = delete;
|
||||
not_null& operator=(std::nullptr_t) = delete;
|
||||
|
||||
// unwanted operators...pointers only point to single objects!
|
||||
not_null& operator++() = delete;
|
||||
not_null& operator--() = delete;
|
||||
not_null operator++(int) = delete;
|
||||
not_null operator--(int) = delete;
|
||||
not_null& operator+=(std::ptrdiff_t) = delete;
|
||||
not_null& operator-=(std::ptrdiff_t) = delete;
|
||||
void operator[](std::ptrdiff_t) const = delete;
|
||||
|
||||
private:
|
||||
T ptr_;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
auto make_not_null(T&& t) noexcept
|
||||
{
|
||||
return not_null<std::remove_cv_t<std::remove_reference_t<T>>>{std::forward<T>(t)};
|
||||
}
|
||||
|
||||
#if !defined(GSL_NO_IOSTREAMS)
|
||||
template <class T>
|
||||
std::ostream& operator<<(std::ostream& os, const not_null<T>& val)
|
||||
{
|
||||
os << val.get();
|
||||
return os;
|
||||
}
|
||||
#endif // !defined(GSL_NO_IOSTREAMS)
|
||||
|
||||
template <class T, class U>
|
||||
auto operator==(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() == rhs.get()))
|
||||
-> decltype(lhs.get() == rhs.get())
|
||||
{
|
||||
return lhs.get() == rhs.get();
|
||||
}
|
||||
|
||||
template <class T, class U>
|
||||
auto operator!=(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(lhs.get() != rhs.get()))
|
||||
-> decltype(lhs.get() != rhs.get())
|
||||
{
|
||||
return lhs.get() != rhs.get();
|
||||
}
|
||||
|
||||
template <class T, class U>
|
||||
auto operator<(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(std::less<>{}(lhs.get(), rhs.get())))
|
||||
-> decltype(std::less<>{}(lhs.get(), rhs.get()))
|
||||
{
|
||||
return std::less<>{}(lhs.get(), rhs.get());
|
||||
}
|
||||
|
||||
template <class T, class U>
|
||||
auto operator<=(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(std::less_equal<>{}(lhs.get(), rhs.get())))
|
||||
-> decltype(std::less_equal<>{}(lhs.get(), rhs.get()))
|
||||
{
|
||||
return std::less_equal<>{}(lhs.get(), rhs.get());
|
||||
}
|
||||
|
||||
template <class T, class U>
|
||||
auto operator>(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(std::greater<>{}(lhs.get(), rhs.get())))
|
||||
-> decltype(std::greater<>{}(lhs.get(), rhs.get()))
|
||||
{
|
||||
return std::greater<>{}(lhs.get(), rhs.get());
|
||||
}
|
||||
|
||||
template <class T, class U>
|
||||
auto operator>=(const not_null<T>& lhs,
|
||||
const not_null<U>& rhs) noexcept(noexcept(std::greater_equal<>{}(lhs.get(), rhs.get())))
|
||||
-> decltype(std::greater_equal<>{}(lhs.get(), rhs.get()))
|
||||
{
|
||||
return std::greater_equal<>{}(lhs.get(), rhs.get());
|
||||
}
|
||||
|
||||
// more unwanted operators
|
||||
template <class T, class U>
|
||||
std::ptrdiff_t operator-(const not_null<T>&, const not_null<U>&) = delete;
|
||||
template <class T>
|
||||
not_null<T> operator-(const not_null<T>&, std::ptrdiff_t) = delete;
|
||||
template <class T>
|
||||
not_null<T> operator+(const not_null<T>&, std::ptrdiff_t) = delete;
|
||||
template <class T>
|
||||
not_null<T> operator+(std::ptrdiff_t, const not_null<T>&) = delete;
|
||||
|
||||
|
||||
template <class T, class U = decltype(std::declval<const T&>().get()), bool = std::is_default_constructible<std::hash<U>>::value>
|
||||
struct not_null_hash
|
||||
{
|
||||
std::size_t operator()(const T& value) const { return std::hash<U>{}(value.get()); }
|
||||
};
|
||||
|
||||
template <class T, class U>
|
||||
struct not_null_hash<T, U, false>
|
||||
{
|
||||
not_null_hash() = delete;
|
||||
not_null_hash(const not_null_hash&) = delete;
|
||||
not_null_hash& operator=(const not_null_hash&) = delete;
|
||||
};
|
||||
|
||||
} // namespace gsl
|
||||
|
||||
namespace std
|
||||
{
|
||||
template <class T>
|
||||
struct hash<gsl::not_null<T>> : gsl::not_null_hash<gsl::not_null<T>>
|
||||
{
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
|
||||
//
|
||||
// strict_not_null
|
||||
//
|
||||
// Restricts a pointer or smart pointer to only hold non-null values,
|
||||
//
|
||||
// - provides a strict (i.e. explicit constructor from T) wrapper of not_null
|
||||
// - to be used for new code that wishes the design to be cleaner and make not_null
|
||||
// checks intentional, or in old code that would like to make the transition.
|
||||
//
|
||||
// To make the transition from not_null, incrementally replace not_null
|
||||
// by strict_not_null and fix compilation errors
|
||||
//
|
||||
// Expect to
|
||||
// - remove all unneeded conversions from raw pointer to not_null and back
|
||||
// - make API clear by specifying not_null in parameters where needed
|
||||
// - remove unnecessary asserts
|
||||
//
|
||||
template <class T>
|
||||
class strict_not_null : public not_null<T>
|
||||
{
|
||||
public:
|
||||
template <typename U, typename = std::enable_if_t<std::is_convertible<U, T>::value>>
|
||||
constexpr explicit strict_not_null(U&& u) : not_null<T>(std::forward<U>(u))
|
||||
{}
|
||||
|
||||
template <typename = std::enable_if_t<!std::is_same<std::nullptr_t, T>::value>>
|
||||
constexpr explicit strict_not_null(T u) : not_null<T>(u)
|
||||
{}
|
||||
|
||||
template <typename U, typename = std::enable_if_t<std::is_convertible<U, T>::value>>
|
||||
constexpr strict_not_null(const not_null<U>& other) : not_null<T>(other)
|
||||
{}
|
||||
|
||||
template <typename U, typename = std::enable_if_t<std::is_convertible<U, T>::value>>
|
||||
constexpr strict_not_null(const strict_not_null<U>& other) : not_null<T>(other)
|
||||
{}
|
||||
|
||||
// To avoid invalidating the "not null" invariant, the contained pointer is actually copied
|
||||
// instead of moved. If it is a custom pointer, its constructor could in theory throw exceptions.
|
||||
strict_not_null(strict_not_null&& other) noexcept(std::is_nothrow_copy_constructible<T>::value) = default;
|
||||
strict_not_null(const strict_not_null& other) = default;
|
||||
strict_not_null& operator=(const strict_not_null& other) = default;
|
||||
strict_not_null& operator=(const not_null<T>& other)
|
||||
{
|
||||
not_null<T>::operator=(other);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// prevents compilation when someone attempts to assign a null pointer constant
|
||||
strict_not_null(std::nullptr_t) = delete;
|
||||
strict_not_null& operator=(std::nullptr_t) = delete;
|
||||
|
||||
// unwanted operators...pointers only point to single objects!
|
||||
strict_not_null& operator++() = delete;
|
||||
strict_not_null& operator--() = delete;
|
||||
strict_not_null operator++(int) = delete;
|
||||
strict_not_null operator--(int) = delete;
|
||||
strict_not_null& operator+=(std::ptrdiff_t) = delete;
|
||||
strict_not_null& operator-=(std::ptrdiff_t) = delete;
|
||||
void operator[](std::ptrdiff_t) const = delete;
|
||||
};
|
||||
|
||||
// more unwanted operators
|
||||
template <class T, class U>
|
||||
std::ptrdiff_t operator-(const strict_not_null<T>&, const strict_not_null<U>&) = delete;
|
||||
template <class T>
|
||||
strict_not_null<T> operator-(const strict_not_null<T>&, std::ptrdiff_t) = delete;
|
||||
template <class T>
|
||||
strict_not_null<T> operator+(const strict_not_null<T>&, std::ptrdiff_t) = delete;
|
||||
template <class T>
|
||||
strict_not_null<T> operator+(std::ptrdiff_t, const strict_not_null<T>&) = delete;
|
||||
|
||||
template <class T>
|
||||
auto make_strict_not_null(T&& t) noexcept
|
||||
{
|
||||
return strict_not_null<std::remove_cv_t<std::remove_reference_t<T>>>{std::forward<T>(t)};
|
||||
}
|
||||
|
||||
#if (defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L))
|
||||
|
||||
// deduction guides to prevent the ctad-maybe-unsupported warning
|
||||
template <class T>
|
||||
not_null(T) -> not_null<T>;
|
||||
template <class T>
|
||||
strict_not_null(T) -> strict_not_null<T>;
|
||||
|
||||
#endif // ( defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L) )
|
||||
|
||||
} // namespace gsl
|
||||
|
||||
namespace std
|
||||
{
|
||||
template <class T>
|
||||
struct hash<gsl::strict_not_null<T>> : gsl::not_null_hash<gsl::strict_not_null<T>>
|
||||
{
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
|
||||
#endif // GSL_POINTERS_H
|
849
deps/GSL/include/gsl/span
vendored
849
deps/GSL/include/gsl/span
vendored
@ -1,849 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_SPAN_H
|
||||
#define GSL_SPAN_H
|
||||
|
||||
#include "assert" // for Expects
|
||||
#include "byte" // for byte
|
||||
#include "span_ext" // for span specialization of gsl::at and other span-related extensions
|
||||
#include "util" // for narrow_cast
|
||||
|
||||
#include <array> // for array
|
||||
#include <cstddef> // for ptrdiff_t, size_t, nullptr_t
|
||||
#include <iterator> // for reverse_iterator, distance, random_access_...
|
||||
#include <memory> // for pointer_traits
|
||||
#include <type_traits> // for enable_if_t, declval, is_convertible, inte...
|
||||
|
||||
#if defined(__has_include) && __has_include(<version>)
|
||||
#include <version>
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
#pragma warning(push)
|
||||
|
||||
// turn off some warnings that are noisy about our Expects statements
|
||||
#pragma warning(disable : 4127) // conditional expression is constant
|
||||
#pragma warning( \
|
||||
disable : 4146) // unary minus operator applied to unsigned type, result still unsigned
|
||||
#pragma warning(disable : 4702) // unreachable code
|
||||
|
||||
// Turn MSVC /analyze rules that generate too much noise. TODO: fix in the tool.
|
||||
#pragma warning(disable : 26495) // uninitalized member when constructor calls constructor
|
||||
#pragma warning(disable : 26446) // parser bug does not allow attributes on some templates
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
||||
// See if we have enough C++17 power to use a static constexpr data member
|
||||
// without needing an out-of-line definition
|
||||
#if !(defined(__cplusplus) && (__cplusplus >= 201703L))
|
||||
#define GSL_USE_STATIC_CONSTEXPR_WORKAROUND
|
||||
#endif // !(defined(__cplusplus) && (__cplusplus >= 201703L))
|
||||
|
||||
// GCC 7 does not like the signed unsigned missmatch (size_t ptrdiff_t)
|
||||
// While there is a conversion from signed to unsigned, it happens at
|
||||
// compiletime, so the compiler wouldn't have to warn indiscriminately, but
|
||||
// could check if the source value actually doesn't fit into the target type
|
||||
// and only warn in those cases.
|
||||
#if defined(__GNUC__) && __GNUC__ > 6
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wsign-conversion"
|
||||
#endif
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
|
||||
// implementation details
|
||||
namespace details
|
||||
{
|
||||
template <class T>
|
||||
struct is_span_oracle : std::false_type
|
||||
{
|
||||
};
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
struct is_span_oracle<gsl::span<ElementType, Extent>> : std::true_type
|
||||
{
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct is_span : public is_span_oracle<std::remove_cv_t<T>>
|
||||
{
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct is_std_array_oracle : std::false_type
|
||||
{
|
||||
};
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
struct is_std_array_oracle<std::array<ElementType, Extent>> : std::true_type
|
||||
{
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct is_std_array : is_std_array_oracle<std::remove_cv_t<T>>
|
||||
{
|
||||
};
|
||||
|
||||
template <std::size_t From, std::size_t To>
|
||||
struct is_allowed_extent_conversion
|
||||
: std::integral_constant<bool, From == To || To == dynamic_extent>
|
||||
{
|
||||
};
|
||||
|
||||
template <class From, class To>
|
||||
struct is_allowed_element_type_conversion
|
||||
: std::integral_constant<bool, std::is_convertible<From (*)[], To (*)[]>::value>
|
||||
{
|
||||
};
|
||||
|
||||
template <class Type>
|
||||
class span_iterator
|
||||
{
|
||||
public:
|
||||
#if defined(__cpp_lib_ranges) || (defined(_MSVC_STL_VERSION) && defined(__cpp_lib_concepts))
|
||||
using iterator_concept = std::contiguous_iterator_tag;
|
||||
#endif // __cpp_lib_ranges
|
||||
using iterator_category = std::random_access_iterator_tag;
|
||||
using value_type = std::remove_cv_t<Type>;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using pointer = Type*;
|
||||
using reference = Type&;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
using _Unchecked_type = pointer;
|
||||
using _Prevent_inheriting_unwrap = span_iterator;
|
||||
#endif // _MSC_VER
|
||||
constexpr span_iterator() = default;
|
||||
|
||||
constexpr span_iterator(pointer begin, pointer end, pointer current)
|
||||
: begin_(begin), end_(end), current_(current)
|
||||
{}
|
||||
|
||||
constexpr operator span_iterator<const Type>() const noexcept
|
||||
{
|
||||
return {begin_, end_, current_};
|
||||
}
|
||||
|
||||
constexpr reference operator*() const noexcept
|
||||
{
|
||||
Expects(begin_ && end_);
|
||||
Expects(begin_ <= current_ && current_ < end_);
|
||||
return *current_;
|
||||
}
|
||||
|
||||
constexpr pointer operator->() const noexcept
|
||||
{
|
||||
Expects(begin_ && end_);
|
||||
Expects(begin_ <= current_ && current_ < end_);
|
||||
return current_;
|
||||
}
|
||||
constexpr span_iterator& operator++() noexcept
|
||||
{
|
||||
Expects(begin_ && current_ && end_);
|
||||
Expects(current_ < end_);
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
++current_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr span_iterator operator++(int) noexcept
|
||||
{
|
||||
span_iterator ret = *this;
|
||||
++*this;
|
||||
return ret;
|
||||
}
|
||||
|
||||
constexpr span_iterator& operator--() noexcept
|
||||
{
|
||||
Expects(begin_ && end_);
|
||||
Expects(begin_ < current_);
|
||||
--current_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr span_iterator operator--(int) noexcept
|
||||
{
|
||||
span_iterator ret = *this;
|
||||
--*this;
|
||||
return ret;
|
||||
}
|
||||
|
||||
constexpr span_iterator& operator+=(const difference_type n) noexcept
|
||||
{
|
||||
if (n != 0) Expects(begin_ && current_ && end_);
|
||||
if (n > 0) Expects(end_ - current_ >= n);
|
||||
if (n < 0) Expects(current_ - begin_ >= -n);
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
current_ += n;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr span_iterator operator+(const difference_type n) const noexcept
|
||||
{
|
||||
span_iterator ret = *this;
|
||||
ret += n;
|
||||
return ret;
|
||||
}
|
||||
|
||||
friend constexpr span_iterator operator+(const difference_type n,
|
||||
const span_iterator& rhs) noexcept
|
||||
{
|
||||
return rhs + n;
|
||||
}
|
||||
|
||||
constexpr span_iterator& operator-=(const difference_type n) noexcept
|
||||
{
|
||||
if (n != 0) Expects(begin_ && current_ && end_);
|
||||
if (n > 0) Expects(current_ - begin_ >= n);
|
||||
if (n < 0) Expects(end_ - current_ >= -n);
|
||||
GSL_SUPPRESS(bounds .1)
|
||||
current_ -= n;
|
||||
return *this;
|
||||
}
|
||||
|
||||
constexpr span_iterator operator-(const difference_type n) const noexcept
|
||||
{
|
||||
span_iterator ret = *this;
|
||||
ret -= n;
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <
|
||||
class Type2,
|
||||
std::enable_if_t<std::is_same<std::remove_cv_t<Type2>, value_type>::value, int> = 0>
|
||||
constexpr difference_type operator-(const span_iterator<Type2>& rhs) const noexcept
|
||||
{
|
||||
Expects(begin_ == rhs.begin_ && end_ == rhs.end_);
|
||||
return current_ - rhs.current_;
|
||||
}
|
||||
|
||||
constexpr reference operator[](const difference_type n) const noexcept
|
||||
{
|
||||
return *(*this + n);
|
||||
}
|
||||
|
||||
template <
|
||||
class Type2,
|
||||
std::enable_if_t<std::is_same<std::remove_cv_t<Type2>, value_type>::value, int> = 0>
|
||||
constexpr bool operator==(const span_iterator<Type2>& rhs) const noexcept
|
||||
{
|
||||
Expects(begin_ == rhs.begin_ && end_ == rhs.end_);
|
||||
return current_ == rhs.current_;
|
||||
}
|
||||
|
||||
template <
|
||||
class Type2,
|
||||
std::enable_if_t<std::is_same<std::remove_cv_t<Type2>, value_type>::value, int> = 0>
|
||||
constexpr bool operator!=(const span_iterator<Type2>& rhs) const noexcept
|
||||
{
|
||||
return !(*this == rhs);
|
||||
}
|
||||
|
||||
template <
|
||||
class Type2,
|
||||
std::enable_if_t<std::is_same<std::remove_cv_t<Type2>, value_type>::value, int> = 0>
|
||||
constexpr bool operator<(const span_iterator<Type2>& rhs) const noexcept
|
||||
{
|
||||
Expects(begin_ == rhs.begin_ && end_ == rhs.end_);
|
||||
return current_ < rhs.current_;
|
||||
}
|
||||
|
||||
template <
|
||||
class Type2,
|
||||
std::enable_if_t<std::is_same<std::remove_cv_t<Type2>, value_type>::value, int> = 0>
|
||||
constexpr bool operator>(const span_iterator<Type2>& rhs) const noexcept
|
||||
{
|
||||
return rhs < *this;
|
||||
}
|
||||
|
||||
template <
|
||||
class Type2,
|
||||
std::enable_if_t<std::is_same<std::remove_cv_t<Type2>, value_type>::value, int> = 0>
|
||||
constexpr bool operator<=(const span_iterator<Type2>& rhs) const noexcept
|
||||
{
|
||||
return !(rhs < *this);
|
||||
}
|
||||
|
||||
template <
|
||||
class Type2,
|
||||
std::enable_if_t<std::is_same<std::remove_cv_t<Type2>, value_type>::value, int> = 0>
|
||||
constexpr bool operator>=(const span_iterator<Type2>& rhs) const noexcept
|
||||
{
|
||||
return !(*this < rhs);
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// MSVC++ iterator debugging support; allows STL algorithms in 15.8+
|
||||
// to unwrap span_iterator to a pointer type after a range check in STL
|
||||
// algorithm calls
|
||||
friend constexpr void _Verify_range(span_iterator lhs, span_iterator rhs) noexcept
|
||||
{ // test that [lhs, rhs) forms a valid range inside an STL algorithm
|
||||
Expects(lhs.begin_ == rhs.begin_ // range spans have to match
|
||||
&& lhs.end_ == rhs.end_ &&
|
||||
lhs.current_ <= rhs.current_); // range must not be transposed
|
||||
}
|
||||
|
||||
constexpr void _Verify_offset(const difference_type n) const noexcept
|
||||
{ // test that *this + n is within the range of this call
|
||||
if (n != 0) Expects(begin_ && current_ && end_);
|
||||
if (n > 0) Expects(end_ - current_ >= n);
|
||||
if (n < 0) Expects(current_ - begin_ >= -n);
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr pointer _Unwrapped() const noexcept
|
||||
{ // after seeking *this to a high water mark, or using one of the
|
||||
// _Verify_xxx functions above, unwrap this span_iterator to a raw
|
||||
// pointer
|
||||
return current_;
|
||||
}
|
||||
|
||||
// Tell the STL that span_iterator should not be unwrapped if it can't
|
||||
// validate in advance, even in release / optimized builds:
|
||||
#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND)
|
||||
static constexpr const bool _Unwrap_when_unverified = false;
|
||||
#else
|
||||
static constexpr bool _Unwrap_when_unverified = false;
|
||||
#endif
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(con.3) // NO-FORMAT: attribute // TODO: false positive
|
||||
// clang-format on
|
||||
constexpr void _Seek_to(const pointer p) noexcept
|
||||
{ // adjust the position of *this to previously verified location p
|
||||
// after _Unwrapped
|
||||
current_ = p;
|
||||
}
|
||||
#endif
|
||||
|
||||
pointer begin_ = nullptr;
|
||||
pointer end_ = nullptr;
|
||||
pointer current_ = nullptr;
|
||||
|
||||
template <typename Ptr>
|
||||
friend struct std::pointer_traits;
|
||||
};
|
||||
}} // namespace gsl::details
|
||||
|
||||
namespace std
|
||||
{
|
||||
template <class Type>
|
||||
struct pointer_traits<::gsl::details::span_iterator<Type>>
|
||||
{
|
||||
using pointer = ::gsl::details::span_iterator<Type>;
|
||||
using element_type = Type;
|
||||
using difference_type = ptrdiff_t;
|
||||
|
||||
static constexpr element_type* to_address(const pointer i) noexcept { return i.current_; }
|
||||
};
|
||||
} // namespace std
|
||||
|
||||
namespace gsl { namespace details {
|
||||
template <std::size_t Ext>
|
||||
class extent_type
|
||||
{
|
||||
public:
|
||||
using size_type = std::size_t;
|
||||
|
||||
constexpr extent_type() noexcept = default;
|
||||
|
||||
constexpr explicit extent_type(extent_type<dynamic_extent>);
|
||||
|
||||
constexpr explicit extent_type(size_type size) { Expects(size == Ext); }
|
||||
|
||||
constexpr size_type size() const noexcept { return Ext; }
|
||||
|
||||
private:
|
||||
#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND)
|
||||
static constexpr const size_type size_ = Ext; // static size equal to Ext
|
||||
#else
|
||||
static constexpr size_type size_ = Ext; // static size equal to Ext
|
||||
#endif
|
||||
};
|
||||
|
||||
template <>
|
||||
class extent_type<dynamic_extent>
|
||||
{
|
||||
public:
|
||||
using size_type = std::size_t;
|
||||
|
||||
template <size_type Other>
|
||||
constexpr explicit extent_type(extent_type<Other> ext) : size_(ext.size())
|
||||
{}
|
||||
|
||||
constexpr explicit extent_type(size_type size) : size_(size)
|
||||
{
|
||||
Expects(size != dynamic_extent);
|
||||
}
|
||||
|
||||
constexpr size_type size() const noexcept { return size_; }
|
||||
|
||||
private:
|
||||
size_type size_;
|
||||
};
|
||||
|
||||
template <std::size_t Ext>
|
||||
constexpr extent_type<Ext>::extent_type(extent_type<dynamic_extent> ext)
|
||||
{
|
||||
Expects(ext.size() == Ext);
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent, std::size_t Offset, std::size_t Count>
|
||||
struct calculate_subspan_type
|
||||
{
|
||||
using type = span<ElementType, Count != dynamic_extent
|
||||
? Count
|
||||
: (Extent != dynamic_extent ? Extent - Offset : Extent)>;
|
||||
};
|
||||
} // namespace details
|
||||
|
||||
// [span], class template span
|
||||
template <class ElementType, std::size_t Extent>
|
||||
class span
|
||||
{
|
||||
public:
|
||||
// constants and types
|
||||
using element_type = ElementType;
|
||||
using value_type = std::remove_cv_t<ElementType>;
|
||||
using size_type = std::size_t;
|
||||
using pointer = element_type*;
|
||||
using const_pointer = const element_type*;
|
||||
using reference = element_type&;
|
||||
using const_reference = const element_type&;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
|
||||
using iterator = details::span_iterator<ElementType>;
|
||||
using reverse_iterator = std::reverse_iterator<iterator>;
|
||||
|
||||
#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND)
|
||||
static constexpr const size_type extent{Extent};
|
||||
#else
|
||||
static constexpr size_type extent{Extent};
|
||||
#endif
|
||||
|
||||
// [span.cons], span constructors, copy, assignment, and destructor
|
||||
template <bool Dependent = false,
|
||||
// "Dependent" is needed to make "std::enable_if_t<Dependent || Extent == 0 || Extent
|
||||
// == dynamic_extent>" SFINAE, since "std::enable_if_t<Extent == 0 || Extent ==
|
||||
// dynamic_extent>" is ill-formed when Extent is greater than 0.
|
||||
class = std::enable_if_t<(Dependent ||
|
||||
details::is_allowed_extent_conversion<0, Extent>::value)>>
|
||||
constexpr span() noexcept : storage_(nullptr, details::extent_type<0>())
|
||||
{}
|
||||
|
||||
template <std::size_t MyExtent = Extent, std::enable_if_t<MyExtent != dynamic_extent, int> = 0>
|
||||
constexpr explicit span(pointer ptr, size_type count) noexcept : storage_(ptr, count)
|
||||
{
|
||||
Expects(count == Extent);
|
||||
}
|
||||
|
||||
template <std::size_t MyExtent = Extent, std::enable_if_t<MyExtent == dynamic_extent, int> = 0>
|
||||
constexpr span(pointer ptr, size_type count) noexcept : storage_(ptr, count)
|
||||
{}
|
||||
|
||||
template <std::size_t MyExtent = Extent, std::enable_if_t<MyExtent != dynamic_extent, int> = 0>
|
||||
constexpr explicit span(pointer firstElem, pointer lastElem) noexcept
|
||||
: storage_(firstElem, narrow_cast<std::size_t>(lastElem - firstElem))
|
||||
{
|
||||
Expects(lastElem - firstElem == static_cast<difference_type>(Extent));
|
||||
}
|
||||
|
||||
template <std::size_t MyExtent = Extent, std::enable_if_t<MyExtent == dynamic_extent, int> = 0>
|
||||
constexpr span(pointer firstElem, pointer lastElem) noexcept
|
||||
: storage_(firstElem, narrow_cast<std::size_t>(lastElem - firstElem))
|
||||
{}
|
||||
|
||||
template <std::size_t N,
|
||||
std::enable_if_t<details::is_allowed_extent_conversion<N, Extent>::value, int> = 0>
|
||||
constexpr span(element_type (&arr)[N]) noexcept
|
||||
: storage_(KnownNotNull{arr}, details::extent_type<N>())
|
||||
{}
|
||||
|
||||
template <
|
||||
class T, std::size_t N,
|
||||
std::enable_if_t<(details::is_allowed_extent_conversion<N, Extent>::value &&
|
||||
details::is_allowed_element_type_conversion<T, element_type>::value),
|
||||
int> = 0>
|
||||
constexpr span(std::array<T, N>& arr) noexcept
|
||||
: storage_(KnownNotNull{arr.data()}, details::extent_type<N>())
|
||||
{}
|
||||
|
||||
template <class T, std::size_t N,
|
||||
std::enable_if_t<
|
||||
(details::is_allowed_extent_conversion<N, Extent>::value &&
|
||||
details::is_allowed_element_type_conversion<const T, element_type>::value),
|
||||
int> = 0>
|
||||
constexpr span(const std::array<T, N>& arr) noexcept
|
||||
: storage_(KnownNotNull{arr.data()}, details::extent_type<N>())
|
||||
{}
|
||||
|
||||
// NB: the SFINAE on these constructors uses .data() as an incomplete/imperfect proxy for the
|
||||
// requirement on Container to be a contiguous sequence container.
|
||||
template <std::size_t MyExtent = Extent, class Container,
|
||||
std::enable_if_t<
|
||||
MyExtent != dynamic_extent && !details::is_span<Container>::value &&
|
||||
!details::is_std_array<Container>::value &&
|
||||
std::is_pointer<decltype(std::declval<Container&>().data())>::value &&
|
||||
std::is_convertible<
|
||||
std::remove_pointer_t<decltype(std::declval<Container&>().data())> (*)[],
|
||||
element_type (*)[]>::value,
|
||||
int> = 0>
|
||||
constexpr explicit span(Container& cont) noexcept : span(cont.data(), cont.size())
|
||||
{}
|
||||
|
||||
template <std::size_t MyExtent = Extent, class Container,
|
||||
std::enable_if_t<
|
||||
MyExtent == dynamic_extent && !details::is_span<Container>::value &&
|
||||
!details::is_std_array<Container>::value &&
|
||||
std::is_pointer<decltype(std::declval<Container&>().data())>::value &&
|
||||
std::is_convertible<
|
||||
std::remove_pointer_t<decltype(std::declval<Container&>().data())> (*)[],
|
||||
element_type (*)[]>::value,
|
||||
int> = 0>
|
||||
constexpr span(Container& cont) noexcept : span(cont.data(), cont.size())
|
||||
{}
|
||||
|
||||
template <
|
||||
std::size_t MyExtent = Extent, class Container,
|
||||
std::enable_if_t<
|
||||
MyExtent != dynamic_extent && std::is_const<element_type>::value &&
|
||||
!details::is_span<Container>::value && !details::is_std_array<Container>::value &&
|
||||
std::is_pointer<decltype(std::declval<const Container&>().data())>::value &&
|
||||
std::is_convertible<
|
||||
std::remove_pointer_t<decltype(std::declval<const Container&>().data())> (*)[],
|
||||
element_type (*)[]>::value,
|
||||
int> = 0>
|
||||
constexpr explicit span(const Container& cont) noexcept : span(cont.data(), cont.size())
|
||||
{}
|
||||
|
||||
template <
|
||||
std::size_t MyExtent = Extent, class Container,
|
||||
std::enable_if_t<
|
||||
MyExtent == dynamic_extent && std::is_const<element_type>::value &&
|
||||
!details::is_span<Container>::value && !details::is_std_array<Container>::value &&
|
||||
std::is_pointer<decltype(std::declval<const Container&>().data())>::value &&
|
||||
std::is_convertible<
|
||||
std::remove_pointer_t<decltype(std::declval<const Container&>().data())> (*)[],
|
||||
element_type (*)[]>::value,
|
||||
int> = 0>
|
||||
constexpr span(const Container& cont) noexcept : span(cont.data(), cont.size())
|
||||
{}
|
||||
|
||||
constexpr span(const span& other) noexcept = default;
|
||||
|
||||
template <class OtherElementType, std::size_t OtherExtent, std::size_t MyExtent = Extent,
|
||||
std::enable_if_t<(MyExtent == dynamic_extent || MyExtent == OtherExtent) &&
|
||||
details::is_allowed_element_type_conversion<OtherElementType,
|
||||
element_type>::value,
|
||||
int> = 0>
|
||||
constexpr span(const span<OtherElementType, OtherExtent>& other) noexcept
|
||||
: storage_(other.data(), details::extent_type<OtherExtent>(other.size()))
|
||||
{}
|
||||
|
||||
template <class OtherElementType, std::size_t OtherExtent, std::size_t MyExtent = Extent,
|
||||
std::enable_if_t<MyExtent != dynamic_extent && OtherExtent == dynamic_extent &&
|
||||
details::is_allowed_element_type_conversion<OtherElementType,
|
||||
element_type>::value,
|
||||
int> = 0>
|
||||
constexpr explicit span(const span<OtherElementType, OtherExtent>& other) noexcept
|
||||
: storage_(other.data(), details::extent_type<OtherExtent>(other.size()))
|
||||
{}
|
||||
|
||||
~span() noexcept = default;
|
||||
constexpr span& operator=(const span& other) noexcept = default;
|
||||
|
||||
// [span.sub], span subviews
|
||||
template <std::size_t Count>
|
||||
constexpr span<element_type, Count> first() const noexcept
|
||||
{
|
||||
Expects(Count <= size());
|
||||
return span<element_type, Count>{data(), Count};
|
||||
}
|
||||
|
||||
template <std::size_t Count>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr span<element_type, Count> last() const noexcept
|
||||
{
|
||||
Expects(Count <= size());
|
||||
return span<element_type, Count>{data() + (size() - Count), Count};
|
||||
}
|
||||
|
||||
template <std::size_t Offset, std::size_t Count = dynamic_extent>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr auto subspan() const noexcept ->
|
||||
typename details::calculate_subspan_type<ElementType, Extent, Offset, Count>::type
|
||||
{
|
||||
Expects((size() >= Offset) && (Count == dynamic_extent || (Count <= size() - Offset)));
|
||||
using type =
|
||||
typename details::calculate_subspan_type<ElementType, Extent, Offset, Count>::type;
|
||||
return type{data() + Offset, Count == dynamic_extent ? size() - Offset : Count};
|
||||
}
|
||||
|
||||
constexpr span<element_type, dynamic_extent> first(size_type count) const noexcept
|
||||
{
|
||||
Expects(count <= size());
|
||||
return {data(), count};
|
||||
}
|
||||
|
||||
constexpr span<element_type, dynamic_extent> last(size_type count) const noexcept
|
||||
{
|
||||
Expects(count <= size());
|
||||
return make_subspan(size() - count, dynamic_extent, subspan_selector<Extent>{});
|
||||
}
|
||||
|
||||
constexpr span<element_type, dynamic_extent>
|
||||
subspan(size_type offset, size_type count = dynamic_extent) const noexcept
|
||||
{
|
||||
return make_subspan(offset, count, subspan_selector<Extent>{});
|
||||
}
|
||||
|
||||
// [span.obs], span observers
|
||||
constexpr size_type size() const noexcept { return storage_.size(); }
|
||||
|
||||
constexpr size_type size_bytes() const noexcept { return size() * sizeof(element_type); }
|
||||
|
||||
constexpr bool empty() const noexcept { return size() == 0; }
|
||||
|
||||
// [span.elem], span element access
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr reference operator[](size_type idx) const noexcept
|
||||
{
|
||||
Expects(idx < size());
|
||||
return data()[idx];
|
||||
}
|
||||
|
||||
constexpr reference front() const noexcept
|
||||
{
|
||||
Expects(size() > 0);
|
||||
return data()[0];
|
||||
}
|
||||
|
||||
constexpr reference back() const noexcept
|
||||
{
|
||||
Expects(size() > 0);
|
||||
return data()[size() - 1];
|
||||
}
|
||||
|
||||
constexpr pointer data() const noexcept { return storage_.data(); }
|
||||
|
||||
// [span.iter], span iterator support
|
||||
constexpr iterator begin() const noexcept
|
||||
{
|
||||
const auto data = storage_.data();
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return {data, data + size(), data};
|
||||
}
|
||||
|
||||
constexpr iterator end() const noexcept
|
||||
{
|
||||
const auto data = storage_.data();
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
const auto endData = data + storage_.size();
|
||||
return {data, endData, endData};
|
||||
}
|
||||
|
||||
constexpr reverse_iterator rbegin() const noexcept { return reverse_iterator{end()}; }
|
||||
constexpr reverse_iterator rend() const noexcept { return reverse_iterator{begin()}; }
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// Tell MSVC how to unwrap spans in range-based-for
|
||||
constexpr pointer _Unchecked_begin() const noexcept { return data(); }
|
||||
constexpr pointer _Unchecked_end() const noexcept
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return data() + size();
|
||||
}
|
||||
#endif // _MSC_VER
|
||||
|
||||
private:
|
||||
// Needed to remove unnecessary null check in subspans
|
||||
struct KnownNotNull
|
||||
{
|
||||
pointer p;
|
||||
};
|
||||
|
||||
// this implementation detail class lets us take advantage of the
|
||||
// empty base class optimization to pay for only storage of a single
|
||||
// pointer in the case of fixed-size spans
|
||||
template <class ExtentType>
|
||||
class storage_type : public ExtentType
|
||||
{
|
||||
public:
|
||||
// KnownNotNull parameter is needed to remove unnecessary null check
|
||||
// in subspans and constructors from arrays
|
||||
template <class OtherExtentType>
|
||||
constexpr storage_type(KnownNotNull data, OtherExtentType ext)
|
||||
: ExtentType(ext), data_(data.p)
|
||||
{}
|
||||
|
||||
template <class OtherExtentType>
|
||||
constexpr storage_type(pointer data, OtherExtentType ext) : ExtentType(ext), data_(data)
|
||||
{
|
||||
Expects(data || ExtentType::size() == 0);
|
||||
}
|
||||
|
||||
constexpr pointer data() const noexcept { return data_; }
|
||||
|
||||
private:
|
||||
pointer data_;
|
||||
};
|
||||
|
||||
storage_type<details::extent_type<Extent>> storage_;
|
||||
|
||||
// The rest is needed to remove unnecessary null check
|
||||
// in subspans and constructors from arrays
|
||||
constexpr span(KnownNotNull ptr, size_type count) noexcept : storage_(ptr, count) {}
|
||||
|
||||
template <std::size_t CallerExtent>
|
||||
class subspan_selector
|
||||
{
|
||||
};
|
||||
|
||||
template <std::size_t CallerExtent>
|
||||
constexpr span<element_type, dynamic_extent>
|
||||
make_subspan(size_type offset, size_type count, subspan_selector<CallerExtent>) const noexcept
|
||||
{
|
||||
const span<element_type, dynamic_extent> tmp(*this);
|
||||
return tmp.subspan(offset, count);
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr span<element_type, dynamic_extent>
|
||||
make_subspan(size_type offset, size_type count, subspan_selector<dynamic_extent>) const noexcept
|
||||
{
|
||||
Expects(size() >= offset);
|
||||
|
||||
if (count == dynamic_extent) { return {KnownNotNull{data() + offset}, size() - offset}; }
|
||||
|
||||
Expects(size() - offset >= count);
|
||||
return {KnownNotNull{data() + offset}, count};
|
||||
}
|
||||
};
|
||||
|
||||
#if (defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L))
|
||||
|
||||
// Deduction Guides
|
||||
template <class Type, std::size_t Extent>
|
||||
span(Type (&)[Extent]) -> span<Type, Extent>;
|
||||
|
||||
template <class Type, std::size_t Size>
|
||||
span(std::array<Type, Size>&) -> span<Type, Size>;
|
||||
|
||||
template <class Type, std::size_t Size>
|
||||
span(const std::array<Type, Size>&) -> span<const Type, Size>;
|
||||
|
||||
template <class Container,
|
||||
class Element = std::remove_pointer_t<decltype(std::declval<Container&>().data())>>
|
||||
span(Container&) -> span<Element>;
|
||||
|
||||
template <class Container,
|
||||
class Element = std::remove_pointer_t<decltype(std::declval<const Container&>().data())>>
|
||||
span(const Container&) -> span<Element>;
|
||||
|
||||
#endif // ( defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L) )
|
||||
|
||||
#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND)
|
||||
#if defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated" // Bug in clang-cl.exe which raises a C++17 -Wdeprecated warning about this static constexpr workaround in C++14 mode.
|
||||
#endif // defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L)
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr const typename span<ElementType, Extent>::size_type span<ElementType, Extent>::extent;
|
||||
#if defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L)
|
||||
#pragma clang diagnostic pop
|
||||
#endif // defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L)
|
||||
#endif
|
||||
|
||||
namespace details
|
||||
{
|
||||
// if we only supported compilers with good constexpr support then
|
||||
// this pair of classes could collapse down to a constexpr function
|
||||
|
||||
// we should use a narrow_cast<> to go to std::size_t, but older compilers may not see it as
|
||||
// constexpr
|
||||
// and so will fail compilation of the template
|
||||
template <class ElementType, std::size_t Extent>
|
||||
struct calculate_byte_size : std::integral_constant<std::size_t, sizeof(ElementType) * Extent>
|
||||
{
|
||||
static_assert(Extent < dynamic_extent / sizeof(ElementType), "Size is too big.");
|
||||
};
|
||||
|
||||
template <class ElementType>
|
||||
struct calculate_byte_size<ElementType, dynamic_extent>
|
||||
: std::integral_constant<std::size_t, dynamic_extent>
|
||||
{
|
||||
};
|
||||
} // namespace details
|
||||
|
||||
// [span.objectrep], views of object representation
|
||||
template <class ElementType, std::size_t Extent>
|
||||
span<const byte, details::calculate_byte_size<ElementType, Extent>::value>
|
||||
as_bytes(span<ElementType, Extent> s) noexcept
|
||||
{
|
||||
using type = span<const byte, details::calculate_byte_size<ElementType, Extent>::value>;
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return type{reinterpret_cast<const byte*>(s.data()), s.size_bytes()};
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent,
|
||||
std::enable_if_t<!std::is_const<ElementType>::value, int> = 0>
|
||||
span<byte, details::calculate_byte_size<ElementType, Extent>::value>
|
||||
as_writable_bytes(span<ElementType, Extent> s) noexcept
|
||||
{
|
||||
using type = span<byte, details::calculate_byte_size<ElementType, Extent>::value>;
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return type{reinterpret_cast<byte*>(s.data()), s.size_bytes()};
|
||||
}
|
||||
|
||||
} // namespace gsl
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
|
||||
#pragma warning(pop)
|
||||
#endif // _MSC_VER
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ > 6
|
||||
#pragma GCC diagnostic pop
|
||||
#endif // __GNUC__ > 6
|
||||
|
||||
#endif // GSL_SPAN_H
|
214
deps/GSL/include/gsl/span_ext
vendored
214
deps/GSL/include/gsl/span_ext
vendored
@ -1,214 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_SPAN_EXT_H
|
||||
#define GSL_SPAN_EXT_H
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// File: span_ext
|
||||
// Purpose: continue offering features that have been cut from the official
|
||||
// implementation of span.
|
||||
// While modernizing gsl::span a number of features needed to be removed to
|
||||
// be compliant with the design of std::span
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "assert" // GSL_KERNEL_MODE
|
||||
#include "util" // for narrow_cast, narrow
|
||||
|
||||
#include <cstddef> // for ptrdiff_t, size_t
|
||||
#include <utility>
|
||||
|
||||
#ifndef GSL_KERNEL_MODE
|
||||
#include <algorithm> // for lexicographical_compare
|
||||
#endif // GSL_KERNEL_MODE
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
|
||||
// [span.views.constants], constants
|
||||
GSL_INLINE constexpr const std::size_t dynamic_extent = narrow_cast<std::size_t>(-1);
|
||||
|
||||
template <class ElementType, std::size_t Extent = dynamic_extent>
|
||||
class span;
|
||||
|
||||
// std::equal and std::lexicographical_compare are not /kernel compatible
|
||||
// so all comparison operators must be removed for kernel mode.
|
||||
#ifndef GSL_KERNEL_MODE
|
||||
|
||||
// [span.comparison], span comparison operators
|
||||
template <class ElementType, std::size_t FirstExtent, std::size_t SecondExtent>
|
||||
constexpr bool operator==(span<ElementType, FirstExtent> l, span<ElementType, SecondExtent> r)
|
||||
{
|
||||
return std::equal(l.begin(), l.end(), r.begin(), r.end());
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator!=(span<ElementType, Extent> l, span<ElementType, Extent> r)
|
||||
{
|
||||
return !(l == r);
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator<(span<ElementType, Extent> l, span<ElementType, Extent> r)
|
||||
{
|
||||
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator<=(span<ElementType, Extent> l, span<ElementType, Extent> r)
|
||||
{
|
||||
return !(l > r);
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator>(span<ElementType, Extent> l, span<ElementType, Extent> r)
|
||||
{
|
||||
return r < l;
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr bool operator>=(span<ElementType, Extent> l, span<ElementType, Extent> r)
|
||||
{
|
||||
return !(l < r);
|
||||
}
|
||||
|
||||
#endif // GSL_KERNEL_MODE
|
||||
|
||||
//
|
||||
// make_span() - Utility functions for creating spans
|
||||
//
|
||||
template <class ElementType>
|
||||
constexpr span<ElementType> make_span(ElementType* ptr, typename span<ElementType>::size_type count)
|
||||
{
|
||||
return span<ElementType>(ptr, count);
|
||||
}
|
||||
|
||||
template <class ElementType>
|
||||
constexpr span<ElementType> make_span(ElementType* firstElem, ElementType* lastElem)
|
||||
{
|
||||
return span<ElementType>(firstElem, lastElem);
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t N>
|
||||
constexpr span<ElementType, N> make_span(ElementType (&arr)[N]) noexcept
|
||||
{
|
||||
return span<ElementType, N>(arr);
|
||||
}
|
||||
|
||||
template <class Container>
|
||||
constexpr span<typename Container::value_type> make_span(Container& cont)
|
||||
{
|
||||
return span<typename Container::value_type>(cont);
|
||||
}
|
||||
|
||||
template <class Container>
|
||||
constexpr span<const typename Container::value_type> make_span(const Container& cont)
|
||||
{
|
||||
return span<const typename Container::value_type>(cont);
|
||||
}
|
||||
|
||||
template <class Ptr>
|
||||
[[deprecated("This function is deprecated. See GSL issue #1092.")]]
|
||||
constexpr span<typename Ptr::element_type> make_span(Ptr& cont, std::size_t count)
|
||||
{
|
||||
return span<typename Ptr::element_type>(cont, count);
|
||||
}
|
||||
|
||||
template <class Ptr>
|
||||
[[deprecated("This function is deprecated. See GSL issue #1092.")]]
|
||||
constexpr span<typename Ptr::element_type> make_span(Ptr& cont)
|
||||
{
|
||||
return span<typename Ptr::element_type>(cont);
|
||||
}
|
||||
|
||||
// Specialization of gsl::at for span
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr ElementType& at(span<ElementType, Extent> s, index i)
|
||||
{
|
||||
// No bounds checking here because it is done in span::operator[] called below
|
||||
Ensures(i >= 0);
|
||||
return s[narrow_cast<std::size_t>(i)];
|
||||
}
|
||||
|
||||
// [span.obs] Free observer functions
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr std::ptrdiff_t ssize(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return static_cast<std::ptrdiff_t>(s.size());
|
||||
}
|
||||
|
||||
// [span.iter] Free functions for begin/end functions
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
begin(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.begin();
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent = dynamic_extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
end(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.end();
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
rbegin(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.rbegin();
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
rend(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.rend();
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
cbegin(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.begin();
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent = dynamic_extent>
|
||||
constexpr typename span<ElementType, Extent>::iterator
|
||||
cend(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.end();
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
crbegin(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.rbegin();
|
||||
}
|
||||
|
||||
template <class ElementType, std::size_t Extent>
|
||||
constexpr typename span<ElementType, Extent>::reverse_iterator
|
||||
crend(const span<ElementType, Extent>& s) noexcept
|
||||
{
|
||||
return s.rend();
|
||||
}
|
||||
|
||||
} // namespace gsl
|
||||
|
||||
#endif // GSL_SPAN_EXT_H
|
4
deps/GSL/include/gsl/string_span
vendored
4
deps/GSL/include/gsl/string_span
vendored
@ -1,4 +0,0 @@
|
||||
#pragma once
|
||||
#pragma message( \
|
||||
"This header will soon be removed. Use <gsl/zstring> instead of <gsl/string_span>")
|
||||
#include "zstring"
|
157
deps/GSL/include/gsl/util
vendored
157
deps/GSL/include/gsl/util
vendored
@ -1,157 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_UTIL_H
|
||||
#define GSL_UTIL_H
|
||||
|
||||
#include "assert" // for Expects
|
||||
|
||||
#include <array>
|
||||
#include <cstddef> // for ptrdiff_t, size_t
|
||||
#include <limits> // for numeric_limits
|
||||
#include <initializer_list> // for initializer_list
|
||||
#include <type_traits> // for is_signed, integral_constant
|
||||
#include <utility> // for exchange, forward
|
||||
|
||||
#if defined(__has_include) && __has_include(<version>)
|
||||
#include <version>
|
||||
#if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
|
||||
#include <span>
|
||||
#endif // __cpp_lib_span >= 202002L
|
||||
#endif //__has_include(<version>)
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4127) // conditional expression is constant
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
||||
#if defined(__cplusplus) && (__cplusplus >= 201703L)
|
||||
#define GSL_NODISCARD [[nodiscard]]
|
||||
#else
|
||||
#define GSL_NODISCARD
|
||||
#endif // defined(__cplusplus) && (__cplusplus >= 201703L)
|
||||
|
||||
#if defined(__cpp_inline_variables)
|
||||
#define GSL_INLINE inline
|
||||
#else
|
||||
#define GSL_INLINE
|
||||
#endif
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
//
|
||||
// GSL.util: utilities
|
||||
//
|
||||
|
||||
// index type for all container indexes/subscripts/sizes
|
||||
using index = std::ptrdiff_t;
|
||||
|
||||
// final_action allows you to ensure something gets run at the end of a scope
|
||||
template <class F>
|
||||
class final_action
|
||||
{
|
||||
public:
|
||||
explicit final_action(const F& ff) noexcept : f{ff} { }
|
||||
explicit final_action(F&& ff) noexcept : f{std::move(ff)} { }
|
||||
|
||||
~final_action() noexcept { if (invoke) f(); }
|
||||
|
||||
final_action(final_action&& other) noexcept
|
||||
: f(std::move(other.f)), invoke(std::exchange(other.invoke, false))
|
||||
{ }
|
||||
|
||||
final_action(const final_action&) = delete;
|
||||
void operator=(const final_action&) = delete;
|
||||
void operator=(final_action&&) = delete;
|
||||
|
||||
private:
|
||||
F f;
|
||||
bool invoke = true;
|
||||
};
|
||||
|
||||
// finally() - convenience function to generate a final_action
|
||||
template <class F>
|
||||
GSL_NODISCARD auto finally(F&& f) noexcept
|
||||
{
|
||||
return final_action<std::decay_t<F>>{std::forward<F>(f)};
|
||||
}
|
||||
|
||||
// narrow_cast(): a searchable way to do narrowing casts of values
|
||||
template <class T, class U>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr T narrow_cast(U&& u) noexcept
|
||||
{
|
||||
return static_cast<T>(std::forward<U>(u));
|
||||
}
|
||||
|
||||
//
|
||||
// at() - Bounds-checked way of accessing builtin arrays, std::array, std::vector
|
||||
//
|
||||
template <class T, std::size_t N>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
|
||||
GSL_SUPPRESS(bounds.2) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr T& at(T (&arr)[N], const index i)
|
||||
{
|
||||
static_assert(N <= static_cast<std::size_t>((std::numeric_limits<std::ptrdiff_t>::max)()), "We only support arrays up to PTRDIFF_MAX bytes.");
|
||||
Expects(i >= 0 && i < narrow_cast<index>(N));
|
||||
return arr[narrow_cast<std::size_t>(i)];
|
||||
}
|
||||
|
||||
template <class Cont>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute
|
||||
GSL_SUPPRESS(bounds.2) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr auto at(Cont& cont, const index i) -> decltype(cont[cont.size()])
|
||||
{
|
||||
Expects(i >= 0 && i < narrow_cast<index>(cont.size()));
|
||||
using size_type = decltype(cont.size());
|
||||
return cont[narrow_cast<size_type>(i)];
|
||||
}
|
||||
|
||||
template <class T>
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
constexpr T at(const std::initializer_list<T> cont, const index i)
|
||||
{
|
||||
Expects(i >= 0 && i < narrow_cast<index>(cont.size()));
|
||||
return *(cont.begin() + i);
|
||||
}
|
||||
|
||||
#if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
|
||||
template <class T, std::size_t extent = std::dynamic_extent>
|
||||
constexpr auto at(std::span<T, extent> sp, const index i) -> decltype(sp[sp.size()])
|
||||
{
|
||||
Expects(i >= 0 && i < narrow_cast<index>(sp.size()));
|
||||
return sp[gsl::narrow_cast<std::size_t>(i)];
|
||||
}
|
||||
#endif // __cpp_lib_span >= 202002L
|
||||
} // namespace gsl
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
|
||||
#pragma warning(pop)
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
||||
#endif // GSL_UTIL_H
|
58
deps/GSL/include/gsl/zstring
vendored
58
deps/GSL/include/gsl/zstring
vendored
@ -1,58 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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 GSL_ZSTRING_H
|
||||
#define GSL_ZSTRING_H
|
||||
|
||||
#include "span_ext" // for dynamic_extent
|
||||
|
||||
#include <cstddef> // for size_t, nullptr_t
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
//
|
||||
// czstring and wzstring
|
||||
//
|
||||
// These are "tag" typedefs for C-style strings (i.e. null-terminated character arrays)
|
||||
// that allow static analysis to help find bugs.
|
||||
//
|
||||
// There are no additional features/semantics that we can find a way to add inside the
|
||||
// type system for these types that will not either incur significant runtime costs or
|
||||
// (sometimes needlessly) break existing programs when introduced.
|
||||
//
|
||||
|
||||
template <typename CharT, std::size_t Extent = dynamic_extent>
|
||||
using basic_zstring = CharT*;
|
||||
|
||||
using czstring = basic_zstring<const char, dynamic_extent>;
|
||||
|
||||
using cwzstring = basic_zstring<const wchar_t, dynamic_extent>;
|
||||
|
||||
using cu16zstring = basic_zstring<const char16_t, dynamic_extent>;
|
||||
|
||||
using cu32zstring = basic_zstring<const char32_t, dynamic_extent>;
|
||||
|
||||
using zstring = basic_zstring<char, dynamic_extent>;
|
||||
|
||||
using wzstring = basic_zstring<wchar_t, dynamic_extent>;
|
||||
|
||||
using u16zstring = basic_zstring<char16_t, dynamic_extent>;
|
||||
|
||||
using u32zstring = basic_zstring<char32_t, dynamic_extent>;
|
||||
|
||||
} // namespace gsl
|
||||
|
||||
#endif // GSL_ZSTRING_H
|
43
deps/GSL/pipelines/jobs.yml
vendored
43
deps/GSL/pipelines/jobs.yml
vendored
@ -1,43 +0,0 @@
|
||||
parameters:
|
||||
CXXVersions: [ 14, 17, 20 ]
|
||||
buildTypes: [ 'Debug', 'Release' ]
|
||||
image: ''
|
||||
|
||||
compiler: ''
|
||||
compilerVersions: ["default"] # if default value, simply uses whatever version is on the machine.
|
||||
# the text of this default value doesn't actually matter.
|
||||
setupfile: ''
|
||||
extraCmakeArgs: ''
|
||||
|
||||
jobs:
|
||||
- ${{ each compilerVersion in parameters.compilerVersions }}:
|
||||
- ${{ each CXXVersion in parameters.CXXVersions }}:
|
||||
- ${{ each buildType in parameters.buildTypes }}:
|
||||
- job:
|
||||
displayName: ${{ format('{0} {1} C++{2} {3}', parameters.compiler, compilerVersion, CXXVersion, buildType) }}
|
||||
pool:
|
||||
vmImage: ${{ parameters.image }}
|
||||
continueOnError: false
|
||||
|
||||
steps:
|
||||
- ${{ if not(eq(parameters.setupfile, '')) }}:
|
||||
- template: ${{ parameters.setupfile }}
|
||||
parameters:
|
||||
version: ${{ compilerVersion }}
|
||||
|
||||
- task: CMake@1
|
||||
name: Configure
|
||||
inputs:
|
||||
workingDirectory: build
|
||||
cmakeArgs: '-DGSL_CXX_STANDARD=${{ CXXVersion }} -DCMAKE_BUILD_TYPE=${{ buildType }} -DCI_TESTING:BOOL=ON -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -Werror=dev ${{ parameters.extraCmakeArgs }} .. '
|
||||
|
||||
- task: CMake@1
|
||||
name: Build
|
||||
inputs:
|
||||
workingDirectory: build
|
||||
cmakeArgs: '--build . '
|
||||
|
||||
- script: ctest . --output-on-failure --no-compress-output
|
||||
name: CTest
|
||||
workingDirectory: build
|
||||
failOnStderr: true
|
9
deps/GSL/pipelines/setup_apple.yml
vendored
9
deps/GSL/pipelines/setup_apple.yml
vendored
@ -1,9 +0,0 @@
|
||||
parameters:
|
||||
version: 0
|
||||
|
||||
steps:
|
||||
- script: |
|
||||
if [ "${{ parameters.version }}" != "default" ]; then sudo xcode-select -switch /Applications/Xcode_${{ parameters.version }}.app; fi
|
||||
|
||||
displayName: "Setup Xcode Version"
|
||||
failOnStderr: true
|
13
deps/GSL/pipelines/setup_clang.yml
vendored
13
deps/GSL/pipelines/setup_clang.yml
vendored
@ -1,13 +0,0 @@
|
||||
parameters:
|
||||
version: 0
|
||||
|
||||
steps:
|
||||
- script: |
|
||||
echo "##vso[task.setvariable variable=CXX;]${CXX}"
|
||||
echo "##vso[task.setvariable variable=CC;]${CC}"
|
||||
|
||||
displayName: "Setup Clang Version"
|
||||
failOnStderr: true
|
||||
env:
|
||||
CC: clang-${{ parameters.version }}
|
||||
CXX: clang++-${{ parameters.version }}
|
14
deps/GSL/pipelines/setup_gcc.yml
vendored
14
deps/GSL/pipelines/setup_gcc.yml
vendored
@ -1,14 +0,0 @@
|
||||
parameters:
|
||||
version: 0
|
||||
|
||||
steps:
|
||||
- script: |
|
||||
echo "##vso[task.setvariable variable=CXX;]${CXX}"
|
||||
echo "##vso[task.setvariable variable=CC;]${CC}"
|
||||
if [ "${{ parameters.version }}" = "11" ]; then sudo apt-get install $CXX; fi
|
||||
|
||||
displayName: "Setup GCC Version"
|
||||
failOnStderr: true
|
||||
env:
|
||||
CC: gcc-${{ parameters.version }}
|
||||
CXX: g++-${{ parameters.version }}
|
0
deps/GSL/pipelines/steps.yml
vendored
0
deps/GSL/pipelines/steps.yml
vendored
316
deps/GSL/tests/CMakeLists.txt
vendored
316
deps/GSL/tests/CMakeLists.txt
vendored
@ -1,316 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.14...3.16)
|
||||
|
||||
project(GSLTests LANGUAGES CXX)
|
||||
|
||||
set(GSL_CXX_STANDARD "14" CACHE STRING "Use c++ standard")
|
||||
|
||||
set(CMAKE_CXX_STANDARD ${GSL_CXX_STANDARD})
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include(FindPkgConfig)
|
||||
include(ExternalProject)
|
||||
|
||||
# will make visual studio generated project group files
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
if(CI_TESTING AND GSL_CXX_STANDARD EQUAL 20)
|
||||
add_compile_definitions(FORCE_STD_SPAN_TESTS=1)
|
||||
endif()
|
||||
|
||||
if(IOS)
|
||||
add_compile_definitions(GTEST_HAS_DEATH_TEST=1 IOS_PROCESS_DELAY_WORKAROUND=1)
|
||||
endif()
|
||||
|
||||
pkg_search_module(GTestMain gtest_main)
|
||||
if (NOT GTestMain_FOUND)
|
||||
# No pre-installed GTest is available, try to download it using Git.
|
||||
find_package(Git REQUIRED QUIET)
|
||||
|
||||
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} --build .
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
||||
endif()
|
||||
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
set(GTestMain_LIBRARIES gtest_main)
|
||||
|
||||
add_subdirectory(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/googletest-src
|
||||
${CMAKE_CURRENT_BINARY_DIR}/googletest-build
|
||||
EXCLUDE_FROM_ALL
|
||||
)
|
||||
endif()
|
||||
|
||||
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||
find_package(Microsoft.GSL CONFIG REQUIRED)
|
||||
enable_testing()
|
||||
|
||||
if (NOT DEFINED Microsoft.GSL_VERSION)
|
||||
message(FATAL_ERROR "Microsoft.GSL_VERSION not defined!")
|
||||
endif()
|
||||
|
||||
message(STATUS "Microsoft.GSL_VERSION = ${Microsoft.GSL_VERSION}")
|
||||
endif()
|
||||
|
||||
if (MSVC AND (GSL_CXX_STANDARD GREATER_EQUAL 17))
|
||||
set(GSL_CPLUSPLUS_OPT -Zc:__cplusplus -permissive-)
|
||||
endif()
|
||||
|
||||
include(CheckCXXCompilerFlag)
|
||||
# this interface adds compile options to how the tests are run
|
||||
# please try to keep entries ordered =)
|
||||
add_library(gsl_tests_config INTERFACE)
|
||||
if(MSVC) # MSVC or simulating MSVC
|
||||
target_compile_options(gsl_tests_config INTERFACE
|
||||
${GSL_CPLUSPLUS_OPT}
|
||||
/EHsc
|
||||
/W4
|
||||
/WX
|
||||
$<$<CXX_COMPILER_ID:MSVC>:
|
||||
/wd4996 # Use of function or classes marked [[deprecated]]
|
||||
/wd26409 # CppCoreCheck - GTest
|
||||
/wd26426 # CppCoreCheck - GTest
|
||||
/wd26440 # CppCoreCheck - GTest
|
||||
/wd26446 # CppCoreCheck - prefer gsl::at()
|
||||
/wd26472 # CppCoreCheck - use gsl::narrow(_cast)
|
||||
/wd26481 # CppCoreCheck - use span instead of pointer arithmetic
|
||||
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,1920>: # VS2015
|
||||
/wd4189 # variable is initialized but not referenced
|
||||
$<$<NOT:$<CONFIG:Debug>>: # Release, RelWithDebInfo
|
||||
/wd4702 # Unreachable code
|
||||
>
|
||||
>
|
||||
>
|
||||
$<$<CXX_COMPILER_ID:Clang>:
|
||||
-Weverything
|
||||
-Wfloat-equal
|
||||
-Wno-c++98-compat
|
||||
-Wno-c++98-compat-pedantic
|
||||
-Wno-covered-switch-default # GTest
|
||||
-Wno-deprecated-declarations # Allow tests for [[deprecated]] elements
|
||||
-Wno-global-constructors # GTest
|
||||
-Wno-language-extension-token # GTest gtest-port.h
|
||||
-Wno-missing-braces
|
||||
-Wno-missing-prototypes
|
||||
-Wno-shift-sign-overflow # GTest gtest-port.h
|
||||
-Wno-undef # GTest
|
||||
-Wno-used-but-marked-unused # GTest EXPECT_DEATH
|
||||
$<$<EQUAL:${GSL_CXX_STANDARD},14>: # no support for [[maybe_unused]]
|
||||
-Wno-unused-member-function
|
||||
-Wno-unused-variable
|
||||
$<$<VERSION_EQUAL:$<CXX_COMPILER_VERSION>,15.0.1>:
|
||||
-Wno-deprecated # False positive in MSVC Clang 15.0.1 raises a C++17 warning
|
||||
>
|
||||
>
|
||||
>
|
||||
)
|
||||
check_cxx_compiler_flag("-Wno-reserved-identifier" WARN_RESERVED_ID)
|
||||
if (WARN_RESERVED_ID)
|
||||
target_compile_options(gsl_tests_config INTERFACE "-Wno-reserved-identifier")
|
||||
endif()
|
||||
check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER)
|
||||
if (WARN_UNSAFE_BUFFER)
|
||||
# This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer"
|
||||
target_compile_options(gsl_tests_config INTERFACE "-Wno-unsafe-buffer-usage")
|
||||
endif()
|
||||
else()
|
||||
target_compile_options(gsl_tests_config INTERFACE
|
||||
-fno-strict-aliasing
|
||||
-Wall
|
||||
-Wcast-align
|
||||
-Wconversion
|
||||
-Wctor-dtor-privacy
|
||||
-Werror
|
||||
-Wextra
|
||||
-Wpedantic
|
||||
-Wshadow
|
||||
-Wsign-conversion
|
||||
-Wfloat-equal
|
||||
-Wno-deprecated-declarations # Allow tests for [[deprecated]] elements
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
|
||||
-Weverything
|
||||
-Wno-c++98-compat
|
||||
-Wno-c++98-compat-pedantic
|
||||
-Wno-missing-braces
|
||||
-Wno-covered-switch-default # GTest
|
||||
-Wno-global-constructors # GTest
|
||||
-Wno-missing-prototypes
|
||||
-Wno-padded
|
||||
-Wno-unknown-attributes
|
||||
-Wno-used-but-marked-unused # GTest EXPECT_DEATH
|
||||
-Wno-weak-vtables
|
||||
$<$<EQUAL:${GSL_CXX_STANDARD},14>: # no support for [[maybe_unused]]
|
||||
-Wno-unused-member-function
|
||||
-Wno-unused-variable
|
||||
>
|
||||
>
|
||||
$<$<CXX_COMPILER_ID:Clang>:
|
||||
$<$<AND:$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,4.99>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,6>>:
|
||||
$<$<EQUAL:${GSL_CXX_STANDARD},17>:-Wno-undefined-func-template>
|
||||
>
|
||||
$<$<AND:$<EQUAL:${GSL_CXX_STANDARD},20>,$<OR:$<CXX_COMPILER_VERSION:11.0.0>,$<CXX_COMPILER_VERSION:10.0.0>>>:
|
||||
-Wno-zero-as-null-pointer-constant # failing Clang Ubuntu 20.04 tests, seems to be a bug with clang 10.0.0
|
||||
# and clang 11.0.0. (operator< is being re-written by the compiler
|
||||
# as operator<=> and raising the warning)
|
||||
>
|
||||
>
|
||||
$<$<CXX_COMPILER_ID:AppleClang>:
|
||||
$<$<AND:$<VERSION_GREATER:$<CXX_COMPILER_VERSION>,9.1>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,10>>:
|
||||
$<$<EQUAL:${GSL_CXX_STANDARD},17>:-Wno-undefined-func-template>
|
||||
>
|
||||
>
|
||||
$<$<CXX_COMPILER_ID:GNU>:
|
||||
-Wdouble-promotion # float implicit to double
|
||||
-Wlogical-op # suspicious uses of logical operators
|
||||
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,6>>:
|
||||
-Wduplicated-cond # duplicated if-else conditions
|
||||
-Wmisleading-indentation
|
||||
-Wnull-dereference
|
||||
$<$<EQUAL:${GSL_CXX_STANDARD},14>: # no support for [[maybe_unused]]
|
||||
-Wno-unused-variable
|
||||
>
|
||||
>
|
||||
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,7>>:
|
||||
-Wduplicated-branches # identical if-else branches
|
||||
>
|
||||
>
|
||||
)
|
||||
endif(MSVC)
|
||||
|
||||
# for tests to find the gtest header
|
||||
target_include_directories(gsl_tests_config SYSTEM INTERFACE
|
||||
googletest/googletest/include
|
||||
)
|
||||
|
||||
add_executable(gsl_tests
|
||||
algorithm_tests.cpp
|
||||
assertion_tests.cpp
|
||||
at_tests.cpp
|
||||
byte_tests.cpp
|
||||
notnull_tests.cpp
|
||||
owner_tests.cpp
|
||||
span_compatibility_tests.cpp
|
||||
span_ext_tests.cpp
|
||||
span_tests.cpp
|
||||
strict_notnull_tests.cpp
|
||||
|
||||
utils_tests.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(gsl_tests
|
||||
Microsoft.GSL::GSL
|
||||
gsl_tests_config
|
||||
${GTestMain_LIBRARIES}
|
||||
)
|
||||
add_test(gsl_tests gsl_tests)
|
||||
|
||||
# No exception tests
|
||||
|
||||
foreach(flag_var
|
||||
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
||||
STRING (REGEX REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}")
|
||||
endforeach(flag_var)
|
||||
|
||||
# this interface adds compile options to how the tests are run
|
||||
# please try to keep entries ordered =)
|
||||
add_library(gsl_tests_config_noexcept INTERFACE)
|
||||
if(MSVC) # MSVC or simulating MSVC
|
||||
target_compile_definitions(gsl_tests_config_noexcept INTERFACE
|
||||
_HAS_EXCEPTIONS=0 # disable exceptions in the Microsoft STL
|
||||
)
|
||||
target_compile_options(gsl_tests_config_noexcept INTERFACE
|
||||
${GSL_CPLUSPLUS_OPT}
|
||||
/W4
|
||||
/WX
|
||||
$<$<CXX_COMPILER_ID:MSVC>:
|
||||
/wd4577
|
||||
/wd4702
|
||||
/wd26440 # CppCoreCheck - GTest
|
||||
/wd26446 # CppCoreCheck - prefer gsl::at()
|
||||
>
|
||||
$<$<CXX_COMPILER_ID:Clang>:
|
||||
-Weverything
|
||||
-Wfloat-equal
|
||||
-Wno-c++98-compat
|
||||
-Wno-c++98-compat-pedantic
|
||||
-Wno-missing-prototypes
|
||||
-Wno-unknown-attributes
|
||||
$<$<EQUAL:${GSL_CXX_STANDARD},14>:
|
||||
$<$<VERSION_EQUAL:$<CXX_COMPILER_VERSION>,15.0.1>:
|
||||
-Wno-deprecated # False positive in MSVC Clang 15.0.1 raises a C++17 warning
|
||||
>
|
||||
>
|
||||
>
|
||||
)
|
||||
check_cxx_compiler_flag("-Wno-reserved-identifier" WARN_RESERVED_ID)
|
||||
if (WARN_RESERVED_ID)
|
||||
target_compile_options(gsl_tests_config_noexcept INTERFACE "-Wno-reserved-identifier")
|
||||
endif()
|
||||
check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER)
|
||||
if (WARN_UNSAFE_BUFFER)
|
||||
# This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer"
|
||||
target_compile_options(gsl_tests_config_noexcept INTERFACE "-Wno-unsafe-buffer-usage")
|
||||
endif()
|
||||
else()
|
||||
target_compile_options(gsl_tests_config_noexcept INTERFACE
|
||||
-fno-exceptions
|
||||
-fno-strict-aliasing
|
||||
-Wall
|
||||
-Wcast-align
|
||||
-Wconversion
|
||||
-Wctor-dtor-privacy
|
||||
-Werror
|
||||
-Wextra
|
||||
-Wpedantic
|
||||
-Wshadow
|
||||
-Wsign-conversion
|
||||
-Wfloat-equal
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
|
||||
-Weverything
|
||||
-Wno-c++98-compat
|
||||
-Wno-c++98-compat-pedantic
|
||||
-Wno-missing-prototypes
|
||||
-Wno-unknown-attributes
|
||||
-Wno-weak-vtables
|
||||
>
|
||||
$<$<CXX_COMPILER_ID:GNU>:
|
||||
-Wdouble-promotion # float implicit to double
|
||||
-Wlogical-op # suspicious uses of logical operators
|
||||
-Wuseless-cast # casting to its own type
|
||||
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,6>>:
|
||||
-Wduplicated-cond # duplicated if-else conditions
|
||||
-Wmisleading-indentation
|
||||
-Wnull-dereference
|
||||
>
|
||||
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,7>>:
|
||||
-Wduplicated-branches # identical if-else branches
|
||||
>
|
||||
$<$<NOT:$<VERSION_LESS:$<CXX_COMPILER_VERSION>,8>>:
|
||||
-Wcast-align=strict # increase alignment (i.e. char* to int*)
|
||||
>
|
||||
>
|
||||
)
|
||||
endif(MSVC)
|
||||
|
||||
add_executable(gsl_noexcept_tests no_exception_ensure_tests.cpp)
|
||||
target_link_libraries(gsl_noexcept_tests
|
||||
Microsoft.GSL::GSL
|
||||
gsl_tests_config_noexcept
|
||||
)
|
||||
add_test(gsl_noexcept_tests gsl_noexcept_tests)
|
14
deps/GSL/tests/CMakeLists.txt.in
vendored
14
deps/GSL/tests/CMakeLists.txt.in
vendored
@ -1,14 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.0.2)
|
||||
project(googletest-download NONE)
|
||||
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(googletest
|
||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
GIT_TAG 1b18723e874b256c1e39378c6774a90701d70f7a
|
||||
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src"
|
||||
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build"
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
224
deps/GSL/tests/algorithm_tests.cpp
vendored
224
deps/GSL/tests/algorithm_tests.cpp
vendored
@ -1,224 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <array> // for array
|
||||
#include <cstddef> // for size_t
|
||||
#include <gsl/algorithm> // for copy
|
||||
#include <gsl/span> // for span
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "deathTestCommon.h"
|
||||
|
||||
namespace gsl
|
||||
{
|
||||
struct fail_fast;
|
||||
} // namespace gsl
|
||||
|
||||
using namespace gsl;
|
||||
|
||||
TEST(algorithm_tests, same_type)
|
||||
{
|
||||
// dynamic source and destination span
|
||||
{
|
||||
std::array<int, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const span<int> src_span(src);
|
||||
const span<int> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// static source and dynamic destination span
|
||||
{
|
||||
std::array<int, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const span<int, 5> src_span(src);
|
||||
const span<int> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// dynamic source and static destination span
|
||||
{
|
||||
std::array<int, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const gsl::span<int> src_span(src);
|
||||
const gsl::span<int, 10> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// static source and destination span
|
||||
{
|
||||
std::array<int, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const span<int, 5> src_span(src);
|
||||
const span<int, 10> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST(algorithm_tests, compatible_type)
|
||||
{
|
||||
// dynamic source and destination span
|
||||
{
|
||||
std::array<short, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const span<short> src_span(src);
|
||||
const span<int> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// static source and dynamic destination span
|
||||
{
|
||||
std::array<short, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const span<short, 5> src_span(src);
|
||||
const span<int> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// dynamic source and static destination span
|
||||
{
|
||||
std::array<short, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const span<short> src_span(src);
|
||||
const span<int, 10> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// static source and destination span
|
||||
{
|
||||
std::array<short, 5> src{1, 2, 3, 4, 5};
|
||||
std::array<int, 10> dst{};
|
||||
|
||||
const span<short, 5> src_span(src);
|
||||
const span<int, 10> dst_span(dst);
|
||||
|
||||
copy(src_span, dst_span);
|
||||
copy(src_span, dst_span.subspan(src_span.size()));
|
||||
|
||||
for (std::size_t i = 0; i < src.size(); ++i)
|
||||
{
|
||||
EXPECT_TRUE(dst[i] == src[i]);
|
||||
EXPECT_TRUE(dst[i + src.size()] == src[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
TEST(algorithm_tests, incompatible_type)
|
||||
{
|
||||
std::array<int, 4> src{1, 2, 3, 4};
|
||||
std::array<int*, 12> dst{};
|
||||
|
||||
span<int> src_span_dyn(src);
|
||||
span<int, 4> src_span_static(src);
|
||||
span<int*> dst_span_dyn(dst);
|
||||
span<int*, 4> dst_span_static(dst);
|
||||
|
||||
// every line should produce a compilation error
|
||||
copy(src_span_dyn, dst_span_dyn);
|
||||
copy(src_span_dyn, dst_span_static);
|
||||
copy(src_span_static, dst_span_dyn);
|
||||
copy(src_span_static, dst_span_static);
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST(algorithm_tests, small_destination_span)
|
||||
{
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. small_destination_span";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
std::array<int, 12> src{1, 2, 3, 4};
|
||||
std::array<int, 4> dst{};
|
||||
|
||||
const span<int> src_span_dyn(src);
|
||||
const span<int, 12> src_span_static(src);
|
||||
const span<int> dst_span_dyn(dst);
|
||||
const span<int, 4> dst_span_static(dst);
|
||||
|
||||
EXPECT_DEATH(copy(src_span_dyn, dst_span_dyn), expected);
|
||||
EXPECT_DEATH(copy(src_span_dyn, dst_span_static), expected);
|
||||
EXPECT_DEATH(copy(src_span_static, dst_span_dyn), expected);
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
copy(src_span_static, dst_span_static);
|
||||
#endif
|
||||
}
|
60
deps/GSL/tests/assertion_tests.cpp
vendored
60
deps/GSL/tests/assertion_tests.cpp
vendored
@ -1,60 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "deathTestCommon.h"
|
||||
#include <gsl/assert> // for Ensures, Expects
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
using namespace gsl;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
int f(int i)
|
||||
{
|
||||
Expects(i > 0 && i < 10);
|
||||
return i;
|
||||
}
|
||||
|
||||
int g(int i)
|
||||
{
|
||||
i++;
|
||||
Ensures(i > 0 && i < 10);
|
||||
return i;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
TEST(assertion_tests, expects)
|
||||
{
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. expects";
|
||||
std::abort();
|
||||
});
|
||||
|
||||
EXPECT_TRUE(f(2) == 2);
|
||||
EXPECT_DEATH(f(10), GetExpectedDeathString(terminateHandler));
|
||||
}
|
||||
|
||||
TEST(assertion_tests, ensures)
|
||||
{
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. ensures";
|
||||
std::abort();
|
||||
});
|
||||
|
||||
EXPECT_TRUE(g(2) == 3);
|
||||
EXPECT_DEATH(g(9), GetExpectedDeathString(terminateHandler));
|
||||
}
|
173
deps/GSL/tests/at_tests.cpp
vendored
173
deps/GSL/tests/at_tests.cpp
vendored
@ -1,173 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <gsl/util> // for at
|
||||
|
||||
#include <array> // for array
|
||||
#include <cstddef> // for size_t
|
||||
#include <exception> // for terminate
|
||||
#include <initializer_list> // for initializer_list
|
||||
#include <vector> // for vector
|
||||
#if defined(__cplusplus) && __cplusplus >= 202002L
|
||||
#include <span>
|
||||
#endif // __cplusplus >= 202002L
|
||||
|
||||
#include "deathTestCommon.h"
|
||||
|
||||
TEST(at_tests, static_array)
|
||||
{
|
||||
int a[4] = {1, 2, 3, 4};
|
||||
const int(&c_a)[4] = a;
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
EXPECT_TRUE(&gsl::at(a, i) == &a[i]);
|
||||
EXPECT_TRUE(&gsl::at(c_a, i) == &a[i]);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. static_array";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
EXPECT_DEATH(gsl::at(a, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(a, 4), expected);
|
||||
EXPECT_DEATH(gsl::at(c_a, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(c_a, 4), expected);
|
||||
}
|
||||
|
||||
TEST(at_tests, std_array)
|
||||
{
|
||||
std::array<int, 4> a = {1, 2, 3, 4};
|
||||
const std::array<int, 4>& c_a = a;
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
EXPECT_TRUE(&gsl::at(a, i) == &a[static_cast<std::size_t>(i)]);
|
||||
EXPECT_TRUE(&gsl::at(c_a, i) == &a[static_cast<std::size_t>(i)]);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. std_array";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
EXPECT_DEATH(gsl::at(a, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(a, 4), expected);
|
||||
EXPECT_DEATH(gsl::at(c_a, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(c_a, 4), expected);
|
||||
}
|
||||
|
||||
TEST(at_tests, std_vector)
|
||||
{
|
||||
std::vector<int> a = {1, 2, 3, 4};
|
||||
const std::vector<int>& c_a = a;
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
EXPECT_TRUE(&gsl::at(a, i) == &a[static_cast<std::size_t>(i)]);
|
||||
EXPECT_TRUE(&gsl::at(c_a, i) == &a[static_cast<std::size_t>(i)]);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. std_vector";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
EXPECT_DEATH(gsl::at(a, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(a, 4), expected);
|
||||
EXPECT_DEATH(gsl::at(c_a, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(c_a, 4), expected);
|
||||
}
|
||||
|
||||
TEST(at_tests, InitializerList)
|
||||
{
|
||||
const std::initializer_list<int> a = {1, 2, 3, 4};
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
EXPECT_TRUE(gsl::at(a, i) == i + 1);
|
||||
EXPECT_TRUE(gsl::at({1, 2, 3, 4}, i) == i + 1);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. InitializerList";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
EXPECT_DEATH(gsl::at(a, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(a, 4), expected);
|
||||
EXPECT_DEATH(gsl::at({1, 2, 3, 4}, -1), expected);
|
||||
EXPECT_DEATH(gsl::at({1, 2, 3, 4}, 4), expected);
|
||||
}
|
||||
|
||||
#if defined(FORCE_STD_SPAN_TESTS) || defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
|
||||
TEST(at_tests, std_span)
|
||||
{
|
||||
std::vector<int> vec{1, 2, 3, 4, 5};
|
||||
std::span sp{vec};
|
||||
|
||||
std::vector<int> cvec{1, 2, 3, 4, 5};
|
||||
std::span csp{cvec};
|
||||
|
||||
for (gsl::index i = 0; i < gsl::narrow_cast<gsl::index>(vec.size()); ++i)
|
||||
{
|
||||
EXPECT_TRUE(&gsl::at(sp, i) == &vec[gsl::narrow_cast<size_t>(i)]);
|
||||
EXPECT_TRUE(&gsl::at(csp, i) == &cvec[gsl::narrow_cast<size_t>(i)]);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. std_span";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
EXPECT_DEATH(gsl::at(sp, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(sp, gsl::narrow_cast<gsl::index>(sp.size())), expected);
|
||||
EXPECT_DEATH(gsl::at(csp, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(csp, gsl::narrow_cast<gsl::index>(sp.size())), expected);
|
||||
}
|
||||
#endif // defined(FORCE_STD_SPAN_TESTS) || defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
|
||||
|
||||
#if !defined(_MSC_VER) || defined(__clang__) || _MSC_VER >= 1910
|
||||
static constexpr bool test_constexpr()
|
||||
{
|
||||
int a1[4] = {1, 2, 3, 4};
|
||||
const int(&c_a1)[4] = a1;
|
||||
std::array<int, 4> a2 = {1, 2, 3, 4};
|
||||
const std::array<int, 4>& c_a2 = a2;
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
if (&gsl::at(a1, i) != &a1[i]) return false;
|
||||
if (&gsl::at(c_a1, i) != &a1[i]) return false;
|
||||
// requires C++17:
|
||||
// if (&gsl::at(a2, i) != &a2[static_cast<std::size_t>(i)]) return false;
|
||||
if (&gsl::at(c_a2, i) != &c_a2[static_cast<std::size_t>(i)]) return false;
|
||||
if (gsl::at({1, 2, 3, 4}, i) != i + 1) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static_assert(test_constexpr(), "FAIL");
|
||||
#endif
|
134
deps/GSL/tests/byte_tests.cpp
vendored
134
deps/GSL/tests/byte_tests.cpp
vendored
@ -1,134 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <gsl/byte> // for to_byte, to_integer, byte, operator&, ope...
|
||||
|
||||
using namespace std;
|
||||
using namespace gsl;
|
||||
|
||||
namespace
|
||||
{
|
||||
int modify_both(gsl::byte& b, int& i)
|
||||
{
|
||||
i = 10;
|
||||
b = to_byte<5>();
|
||||
return i;
|
||||
}
|
||||
|
||||
TEST(byte_tests, construction)
|
||||
{
|
||||
{
|
||||
const byte b = static_cast<byte>(4);
|
||||
EXPECT_TRUE(static_cast<unsigned char>(b) == 4);
|
||||
}
|
||||
|
||||
{
|
||||
const byte b = byte(12);
|
||||
EXPECT_TRUE(static_cast<unsigned char>(b) == 12);
|
||||
}
|
||||
|
||||
{
|
||||
const byte b = to_byte<12>();
|
||||
EXPECT_TRUE(static_cast<unsigned char>(b) == 12);
|
||||
}
|
||||
{
|
||||
const unsigned char uc = 12;
|
||||
const byte b = to_byte(uc);
|
||||
EXPECT_TRUE(static_cast<unsigned char>(b) == 12);
|
||||
}
|
||||
|
||||
#if defined(__cplusplus) && (__cplusplus >= 201703L)
|
||||
{
|
||||
const byte b{14};
|
||||
EXPECT_TRUE(static_cast<unsigned char>(b) == 14);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
to_byte(char{});
|
||||
to_byte(3);
|
||||
to_byte(3u);
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(byte_tests, bitwise_operations)
|
||||
{
|
||||
const byte b = to_byte<0xFF>();
|
||||
|
||||
byte a = to_byte<0x00>();
|
||||
EXPECT_TRUE((b | a) == to_byte<0xFF>());
|
||||
EXPECT_TRUE(a == to_byte<0x00>());
|
||||
|
||||
a |= b;
|
||||
EXPECT_TRUE(a == to_byte<0xFF>());
|
||||
|
||||
a = to_byte<0x01>();
|
||||
EXPECT_TRUE((b & a) == to_byte<0x01>());
|
||||
|
||||
a &= b;
|
||||
EXPECT_TRUE(a == to_byte<0x01>());
|
||||
|
||||
EXPECT_TRUE((b ^ a) == to_byte<0xFE>());
|
||||
|
||||
EXPECT_TRUE(a == to_byte<0x01>());
|
||||
a ^= b;
|
||||
EXPECT_TRUE(a == to_byte<0xFE>());
|
||||
|
||||
a = to_byte<0x01>();
|
||||
EXPECT_TRUE(~a == to_byte<0xFE>());
|
||||
|
||||
a = to_byte<0xFF>();
|
||||
EXPECT_TRUE((a << 4) == to_byte<0xF0>());
|
||||
EXPECT_TRUE((a >> 4) == to_byte<0x0F>());
|
||||
|
||||
a <<= 4;
|
||||
EXPECT_TRUE(a == to_byte<0xF0>());
|
||||
a >>= 4;
|
||||
EXPECT_TRUE(a == to_byte<0x0F>());
|
||||
}
|
||||
|
||||
TEST(byte_tests, to_integer)
|
||||
{
|
||||
const byte b = to_byte<0x12>();
|
||||
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<char>(b));
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<short>(b));
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<long>(b));
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<long long>(b));
|
||||
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<unsigned char>(b));
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<unsigned short>(b));
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<unsigned long>(b));
|
||||
EXPECT_TRUE(0x12 == gsl::to_integer<unsigned long long>(b));
|
||||
|
||||
// EXPECT_TRUE(0x12 == gsl::to_integer<float>(b)); // expect compile-time error
|
||||
// EXPECT_TRUE(0x12 == gsl::to_integer<double>(b)); // expect compile-time error
|
||||
}
|
||||
|
||||
TEST(byte_tests, aliasing)
|
||||
{
|
||||
int i{0};
|
||||
const int res = modify_both(reinterpret_cast<byte&>(i), i);
|
||||
EXPECT_TRUE(res == i);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
copy(src_span_static, dst_span_static);
|
||||
#endif
|
11
deps/GSL/tests/deathTestCommon.h
vendored
11
deps/GSL/tests/deathTestCommon.h
vendored
@ -1,11 +0,0 @@
|
||||
#pragma once
|
||||
#include <gsl/assert>
|
||||
|
||||
constexpr char deathstring[] = "Expected Death";
|
||||
constexpr char failed_set_terminate_deathstring[] = ".*";
|
||||
|
||||
// This prevents a failed call to set_terminate from failing the test suite.
|
||||
constexpr const char* GetExpectedDeathString(std::terminate_handler handle)
|
||||
{
|
||||
return handle ? deathstring : failed_set_terminate_deathstring;
|
||||
}
|
55
deps/GSL/tests/no_exception_ensure_tests.cpp
vendored
55
deps/GSL/tests/no_exception_ensure_tests.cpp
vendored
@ -1,55 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdlib> // for std::exit
|
||||
#include <gsl/span> // for span
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
|
||||
int operator_subscript_no_throw() noexcept
|
||||
{
|
||||
int arr[10];
|
||||
const gsl::span<int> sp{arr};
|
||||
return sp[11];
|
||||
}
|
||||
|
||||
[[noreturn]] void test_terminate() { std::exit(0); }
|
||||
|
||||
void setup_termination_handler() noexcept
|
||||
{
|
||||
#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND)
|
||||
|
||||
auto& handler = gsl::details::get_terminate_handler();
|
||||
handler = &test_terminate;
|
||||
|
||||
#else
|
||||
|
||||
std::set_terminate(test_terminate);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
int main() noexcept
|
||||
{
|
||||
std::cout << "Running main() from " __FILE__ "\n";
|
||||
#if defined(IOS_PROCESS_DELAY_WORKAROUND)
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
#endif
|
||||
setup_termination_handler();
|
||||
operator_subscript_no_throw();
|
||||
return -1;
|
||||
}
|
648
deps/GSL/tests/notnull_tests.cpp
vendored
648
deps/GSL/tests/notnull_tests.cpp
vendored
@ -1,648 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <gsl/pointers> // for not_null, operator<, operator<=, operator>
|
||||
|
||||
#include <algorithm> // for addressof
|
||||
#include <cstdint> // for uint16_t
|
||||
#include <memory> // for shared_ptr, make_shared, operator<, opera...
|
||||
#include <sstream> // for operator<<, ostringstream, basic_ostream:...
|
||||
#include <string> // for basic_string, operator==, string, operator<<
|
||||
#include <typeinfo> // for type_info
|
||||
#include <variant> // for variant, monostate, get
|
||||
|
||||
#include "deathTestCommon.h"
|
||||
using namespace gsl;
|
||||
|
||||
struct MyBase
|
||||
{
|
||||
};
|
||||
struct MyDerived : public MyBase
|
||||
{
|
||||
};
|
||||
struct Unrelated
|
||||
{
|
||||
};
|
||||
|
||||
// stand-in for a user-defined ref-counted class
|
||||
template <typename T>
|
||||
struct RefCounted
|
||||
{
|
||||
RefCounted(T* p) : p_(p) {}
|
||||
operator T*() { return p_; }
|
||||
T* p_;
|
||||
};
|
||||
|
||||
// user defined smart pointer with comparison operators returning non bool value
|
||||
template <typename T>
|
||||
struct CustomPtr
|
||||
{
|
||||
CustomPtr(T* p) : p_(p) {}
|
||||
operator T*() const { return p_; }
|
||||
bool operator!=(std::nullptr_t) const { return p_ != nullptr; }
|
||||
T* p_ = nullptr;
|
||||
};
|
||||
|
||||
template <typename T, typename U>
|
||||
std::string operator==(CustomPtr<T> const& lhs, CustomPtr<U> const& rhs)
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return reinterpret_cast<const void*>(lhs.p_) == reinterpret_cast<const void*>(rhs.p_) ? "true"
|
||||
: "false";
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
std::string operator!=(CustomPtr<T> const& lhs, CustomPtr<U> const& rhs)
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return reinterpret_cast<const void*>(lhs.p_) != reinterpret_cast<const void*>(rhs.p_) ? "true"
|
||||
: "false";
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
std::string operator<(CustomPtr<T> const& lhs, CustomPtr<U> const& rhs)
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return reinterpret_cast<const void*>(lhs.p_) < reinterpret_cast<const void*>(rhs.p_) ? "true"
|
||||
: "false";
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
std::string operator>(CustomPtr<T> const& lhs, CustomPtr<U> const& rhs)
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return reinterpret_cast<const void*>(lhs.p_) > reinterpret_cast<const void*>(rhs.p_) ? "true"
|
||||
: "false";
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
std::string operator<=(CustomPtr<T> const& lhs, CustomPtr<U> const& rhs)
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return reinterpret_cast<const void*>(lhs.p_) <= reinterpret_cast<const void*>(rhs.p_) ? "true"
|
||||
: "false";
|
||||
}
|
||||
|
||||
template <typename T, typename U>
|
||||
std::string operator>=(CustomPtr<T> const& lhs, CustomPtr<U> const& rhs)
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(type.1) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
return reinterpret_cast<const void*>(lhs.p_) >= reinterpret_cast<const void*>(rhs.p_) ? "true"
|
||||
: "false";
|
||||
}
|
||||
|
||||
struct NonCopyableNonMovable
|
||||
{
|
||||
NonCopyableNonMovable() = default;
|
||||
NonCopyableNonMovable(const NonCopyableNonMovable&) = delete;
|
||||
NonCopyableNonMovable& operator=(const NonCopyableNonMovable&) = delete;
|
||||
NonCopyableNonMovable(NonCopyableNonMovable&&) = delete;
|
||||
NonCopyableNonMovable& operator=(NonCopyableNonMovable&&) = delete;
|
||||
};
|
||||
|
||||
namespace
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(f .4) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
bool helper(not_null<int*> p) { return *p == 12; }
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(f .4) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
bool helper_const(not_null<const int*> p) { return *p == 12; }
|
||||
|
||||
int* return_pointer() { return nullptr; }
|
||||
} // namespace
|
||||
|
||||
TEST(notnull_tests, TestNotNullConstructors)
|
||||
{
|
||||
{
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
not_null<int*> p = nullptr; // yay...does not compile!
|
||||
not_null<std::vector<char>*> p1 = 0; // yay...does not compile!
|
||||
not_null<int*> p2; // yay...does not compile!
|
||||
std::unique_ptr<int> up = std::make_unique<int>(120);
|
||||
not_null<int*> p3 = up;
|
||||
|
||||
// Forbid non-nullptr assignable types
|
||||
not_null<std::vector<int>> f(std::vector<int>{1});
|
||||
not_null<int> z(10);
|
||||
not_null<std::vector<int>> y({1, 2});
|
||||
#endif
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. TestNotNullConstructors";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
{
|
||||
// from shared pointer
|
||||
int i = 12;
|
||||
auto rp = RefCounted<int>(&i);
|
||||
not_null<int*> p(rp);
|
||||
EXPECT_TRUE(p.get() == &i);
|
||||
|
||||
not_null<std::shared_ptr<int>> x(
|
||||
std::make_shared<int>(10)); // shared_ptr<int> is nullptr assignable
|
||||
|
||||
int* pi = nullptr;
|
||||
EXPECT_DEATH((not_null<decltype(pi)>(pi)), expected);
|
||||
}
|
||||
|
||||
{
|
||||
// from pointer to local
|
||||
int t = 42;
|
||||
|
||||
not_null<int*> x = &t;
|
||||
helper(&t);
|
||||
helper_const(&t);
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
// from raw pointer
|
||||
// from not_null pointer
|
||||
|
||||
int t = 42;
|
||||
int* p = &t;
|
||||
|
||||
not_null<int*> x = p;
|
||||
helper(p);
|
||||
helper_const(p);
|
||||
helper(x);
|
||||
helper_const(x);
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
// from raw const pointer
|
||||
// from not_null const pointer
|
||||
|
||||
int t = 42;
|
||||
const int* cp = &t;
|
||||
|
||||
not_null<const int*> x = cp;
|
||||
helper_const(cp);
|
||||
helper_const(x);
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
// from not_null const pointer, using auto
|
||||
int t = 42;
|
||||
const int* cp = &t;
|
||||
|
||||
auto x = not_null<const int*>{cp};
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
// from returned pointer
|
||||
|
||||
EXPECT_DEATH(helper(return_pointer()), expected);
|
||||
EXPECT_DEATH(helper_const(return_pointer()), expected);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void ostream_helper(T v)
|
||||
{
|
||||
not_null<T*> p(&v);
|
||||
{
|
||||
std::ostringstream os;
|
||||
std::ostringstream ref;
|
||||
os << static_cast<void*>(p);
|
||||
ref << static_cast<void*>(&v);
|
||||
EXPECT_TRUE(os.str() == ref.str());
|
||||
}
|
||||
{
|
||||
std::ostringstream os;
|
||||
std::ostringstream ref;
|
||||
os << *p;
|
||||
ref << v;
|
||||
EXPECT_TRUE(os.str() == ref.str());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestNotNullostream)
|
||||
{
|
||||
ostream_helper<int>(17);
|
||||
ostream_helper<float>(21.5f);
|
||||
ostream_helper<double>(3.4566e-7);
|
||||
ostream_helper<char>('c');
|
||||
ostream_helper<uint16_t>(0x0123u);
|
||||
ostream_helper<const char*>("cstring");
|
||||
ostream_helper<std::string>("string");
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestNotNullCasting)
|
||||
{
|
||||
MyBase base;
|
||||
MyDerived derived;
|
||||
Unrelated unrelated;
|
||||
not_null<Unrelated*> u{&unrelated};
|
||||
(void) u;
|
||||
not_null<MyDerived*> p{&derived};
|
||||
not_null<MyBase*> q(&base);
|
||||
q = p; // allowed with heterogeneous copy ctor
|
||||
EXPECT_TRUE(q == p);
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
q = u; // no viable conversion possible between MyBase* and Unrelated*
|
||||
p = q; // not possible to implicitly convert MyBase* to MyDerived*
|
||||
|
||||
not_null<Unrelated*> r = p;
|
||||
not_null<Unrelated*> s = reinterpret_cast<Unrelated*>(p);
|
||||
#endif
|
||||
not_null<Unrelated*> t(reinterpret_cast<Unrelated*>(p.get()));
|
||||
EXPECT_TRUE(reinterpret_cast<void*>(p.get()) == reinterpret_cast<void*>(t.get()));
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestNotNullAssignment)
|
||||
{
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. TestNotNullAssignmentd";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
int i = 12;
|
||||
not_null<int*> p(&i);
|
||||
EXPECT_TRUE(helper(p));
|
||||
|
||||
int* q = nullptr;
|
||||
EXPECT_DEATH(p = not_null<int*>(q), expected);
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestNotNullRawPointerComparison)
|
||||
{
|
||||
int ints[2] = {42, 43};
|
||||
int* p1 = &ints[0];
|
||||
const int* p2 = &ints[1];
|
||||
|
||||
using NotNull1 = not_null<decltype(p1)>;
|
||||
using NotNull2 = not_null<decltype(p2)>;
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) == NotNull1(p1)) == true);
|
||||
EXPECT_TRUE((NotNull1(p1) == NotNull2(p2)) == false);
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) != NotNull1(p1)) == false);
|
||||
EXPECT_TRUE((NotNull1(p1) != NotNull2(p2)) == true);
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) < NotNull1(p1)) == false);
|
||||
EXPECT_TRUE((NotNull1(p1) < NotNull2(p2)) == (p1 < p2));
|
||||
EXPECT_TRUE((NotNull2(p2) < NotNull1(p1)) == (p2 < p1));
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) > NotNull1(p1)) == false);
|
||||
EXPECT_TRUE((NotNull1(p1) > NotNull2(p2)) == (p1 > p2));
|
||||
EXPECT_TRUE((NotNull2(p2) > NotNull1(p1)) == (p2 > p1));
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) <= NotNull1(p1)) == true);
|
||||
EXPECT_TRUE((NotNull1(p1) <= NotNull2(p2)) == (p1 <= p2));
|
||||
EXPECT_TRUE((NotNull2(p2) <= NotNull1(p1)) == (p2 <= p1));
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestNotNullDereferenceOperator)
|
||||
{
|
||||
{
|
||||
auto sp1 = std::make_shared<NonCopyableNonMovable>();
|
||||
|
||||
using NotNullSp1 = not_null<decltype(sp1)>;
|
||||
EXPECT_TRUE(typeid(*sp1) == typeid(*NotNullSp1(sp1)));
|
||||
EXPECT_TRUE(std::addressof(*NotNullSp1(sp1)) == std::addressof(*sp1));
|
||||
}
|
||||
|
||||
{
|
||||
int ints[1] = {42};
|
||||
CustomPtr<int> p1(&ints[0]);
|
||||
|
||||
using NotNull1 = not_null<decltype(p1)>;
|
||||
EXPECT_TRUE(typeid(*NotNull1(p1)) == typeid(*p1));
|
||||
EXPECT_TRUE(*NotNull1(p1) == 42);
|
||||
*NotNull1(p1) = 43;
|
||||
EXPECT_TRUE(ints[0] == 43);
|
||||
}
|
||||
|
||||
{
|
||||
int v = 42;
|
||||
gsl::not_null<int*> p(&v);
|
||||
EXPECT_TRUE(typeid(*p) == typeid(*(&v)));
|
||||
*p = 43;
|
||||
EXPECT_TRUE(v == 43);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestNotNullSharedPtrComparison)
|
||||
{
|
||||
auto sp1 = std::make_shared<int>(42);
|
||||
auto sp2 = std::make_shared<const int>(43);
|
||||
|
||||
using NotNullSp1 = not_null<decltype(sp1)>;
|
||||
using NotNullSp2 = not_null<decltype(sp2)>;
|
||||
|
||||
EXPECT_TRUE((NotNullSp1(sp1) == NotNullSp1(sp1)) == true);
|
||||
EXPECT_TRUE((NotNullSp1(sp1) == NotNullSp2(sp2)) == false);
|
||||
|
||||
EXPECT_TRUE((NotNullSp1(sp1) != NotNullSp1(sp1)) == false);
|
||||
EXPECT_TRUE((NotNullSp1(sp1) != NotNullSp2(sp2)) == true);
|
||||
|
||||
EXPECT_TRUE((NotNullSp1(sp1) < NotNullSp1(sp1)) == false);
|
||||
EXPECT_TRUE((NotNullSp1(sp1) < NotNullSp2(sp2)) == (sp1 < sp2));
|
||||
EXPECT_TRUE((NotNullSp2(sp2) < NotNullSp1(sp1)) == (sp2 < sp1));
|
||||
|
||||
EXPECT_TRUE((NotNullSp1(sp1) > NotNullSp1(sp1)) == false);
|
||||
EXPECT_TRUE((NotNullSp1(sp1) > NotNullSp2(sp2)) == (sp1 > sp2));
|
||||
EXPECT_TRUE((NotNullSp2(sp2) > NotNullSp1(sp1)) == (sp2 > sp1));
|
||||
|
||||
EXPECT_TRUE((NotNullSp1(sp1) <= NotNullSp1(sp1)) == true);
|
||||
EXPECT_TRUE((NotNullSp1(sp1) <= NotNullSp2(sp2)) == (sp1 <= sp2));
|
||||
EXPECT_TRUE((NotNullSp2(sp2) <= NotNullSp1(sp1)) == (sp2 <= sp1));
|
||||
|
||||
EXPECT_TRUE((NotNullSp1(sp1) >= NotNullSp1(sp1)) == true);
|
||||
EXPECT_TRUE((NotNullSp1(sp1) >= NotNullSp2(sp2)) == (sp1 >= sp2));
|
||||
EXPECT_TRUE((NotNullSp2(sp2) >= NotNullSp1(sp1)) == (sp2 >= sp1));
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestNotNullCustomPtrComparison)
|
||||
{
|
||||
int ints[2] = {42, 43};
|
||||
CustomPtr<int> p1(&ints[0]);
|
||||
CustomPtr<const int> p2(&ints[1]);
|
||||
|
||||
using NotNull1 = not_null<decltype(p1)>;
|
||||
using NotNull2 = not_null<decltype(p2)>;
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) == NotNull1(p1)) == "true");
|
||||
EXPECT_TRUE((NotNull1(p1) == NotNull2(p2)) == "false");
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) != NotNull1(p1)) == "false");
|
||||
EXPECT_TRUE((NotNull1(p1) != NotNull2(p2)) == "true");
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) < NotNull1(p1)) == "false");
|
||||
EXPECT_TRUE((NotNull1(p1) < NotNull2(p2)) == (p1 < p2));
|
||||
EXPECT_TRUE((NotNull2(p2) < NotNull1(p1)) == (p2 < p1));
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) > NotNull1(p1)) == "false");
|
||||
EXPECT_TRUE((NotNull1(p1) > NotNull2(p2)) == (p1 > p2));
|
||||
EXPECT_TRUE((NotNull2(p2) > NotNull1(p1)) == (p2 > p1));
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) <= NotNull1(p1)) == "true");
|
||||
EXPECT_TRUE((NotNull1(p1) <= NotNull2(p2)) == (p1 <= p2));
|
||||
EXPECT_TRUE((NotNull2(p2) <= NotNull1(p1)) == (p2 <= p1));
|
||||
|
||||
EXPECT_TRUE((NotNull1(p1) >= NotNull1(p1)) == "true");
|
||||
EXPECT_TRUE((NotNull1(p1) >= NotNull2(p2)) == (p1 >= p2));
|
||||
EXPECT_TRUE((NotNull2(p2) >= NotNull1(p1)) == (p2 >= p1));
|
||||
}
|
||||
|
||||
#if defined(__cplusplus) && (__cplusplus >= 201703L)
|
||||
|
||||
TEST(notnull_tests, TestNotNullConstructorTypeDeduction)
|
||||
{
|
||||
{
|
||||
int i = 42;
|
||||
|
||||
not_null x{&i};
|
||||
helper(not_null{&i});
|
||||
helper_const(not_null{&i});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
const int i = 42;
|
||||
|
||||
not_null x{&i};
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(not_null{&i});
|
||||
#endif
|
||||
helper_const(not_null{&i});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
int i = 42;
|
||||
int* p = &i;
|
||||
|
||||
not_null x{p};
|
||||
helper(not_null{p});
|
||||
helper_const(not_null{p});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
const int i = 42;
|
||||
const int* p = &i;
|
||||
|
||||
not_null x{p};
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(not_null{p});
|
||||
#endif
|
||||
helper_const(not_null{p});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. TestNotNullConstructorTypeDeduction";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
{
|
||||
auto workaround_macro = []() {
|
||||
int* p1 = nullptr;
|
||||
const not_null x{p1};
|
||||
};
|
||||
EXPECT_DEATH(workaround_macro(), expected);
|
||||
}
|
||||
|
||||
{
|
||||
auto workaround_macro = []() {
|
||||
const int* p1 = nullptr;
|
||||
const not_null x{p1};
|
||||
};
|
||||
EXPECT_DEATH(workaround_macro(), expected);
|
||||
}
|
||||
|
||||
{
|
||||
int* p = nullptr;
|
||||
|
||||
EXPECT_DEATH(helper(not_null{p}), expected);
|
||||
EXPECT_DEATH(helper_const(not_null{p}), expected);
|
||||
}
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
{
|
||||
not_null x{nullptr};
|
||||
helper(not_null{nullptr});
|
||||
helper_const(not_null{nullptr});
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestVariantEmplace)
|
||||
{
|
||||
int i = 0;
|
||||
std::variant<std::monostate, not_null<int*>> v;
|
||||
v.emplace<not_null<int*>>(&i);
|
||||
|
||||
EXPECT_FALSE(v.valueless_by_exception());
|
||||
EXPECT_TRUE(v.index() == 1);
|
||||
EXPECT_TRUE(std::get<not_null<int*>>(v) == &i);
|
||||
}
|
||||
#endif // #if defined(__cplusplus) && (__cplusplus >= 201703L)
|
||||
|
||||
TEST(notnull_tests, TestMakeNotNull)
|
||||
{
|
||||
{
|
||||
int i = 42;
|
||||
|
||||
const auto x = make_not_null(&i);
|
||||
helper(make_not_null(&i));
|
||||
helper_const(make_not_null(&i));
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
const int i = 42;
|
||||
|
||||
const auto x = make_not_null(&i);
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(make_not_null(&i));
|
||||
#endif
|
||||
helper_const(make_not_null(&i));
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
int i = 42;
|
||||
int* p = &i;
|
||||
|
||||
const auto x = make_not_null(p);
|
||||
helper(make_not_null(p));
|
||||
helper_const(make_not_null(p));
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
const int i = 42;
|
||||
const int* p = &i;
|
||||
|
||||
const auto x = make_not_null(p);
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(make_not_null(p));
|
||||
#endif
|
||||
helper_const(make_not_null(p));
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. TestMakeNotNull";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
{
|
||||
const auto workaround_macro = []() {
|
||||
int* p1 = nullptr;
|
||||
const auto x = make_not_null(p1);
|
||||
EXPECT_TRUE(*x == 42);
|
||||
};
|
||||
EXPECT_DEATH(workaround_macro(), expected);
|
||||
}
|
||||
|
||||
{
|
||||
const auto workaround_macro = []() {
|
||||
const int* p1 = nullptr;
|
||||
const auto x = make_not_null(p1);
|
||||
EXPECT_TRUE(*x == 42);
|
||||
};
|
||||
EXPECT_DEATH(workaround_macro(), expected);
|
||||
}
|
||||
|
||||
{
|
||||
int* p = nullptr;
|
||||
|
||||
EXPECT_DEATH(helper(make_not_null(p)), expected);
|
||||
EXPECT_DEATH(helper_const(make_not_null(p)), expected);
|
||||
}
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
{
|
||||
EXPECT_DEATH(make_not_null(nullptr), expected);
|
||||
EXPECT_DEATH(helper(make_not_null(nullptr)), expected);
|
||||
EXPECT_DEATH(helper_const(make_not_null(nullptr)), expected);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST(notnull_tests, TestStdHash)
|
||||
{
|
||||
{
|
||||
int x = 42;
|
||||
int y = 99;
|
||||
not_null<int*> nn{&x};
|
||||
const not_null<int*> cnn{&x};
|
||||
|
||||
std::hash<not_null<int*>> hash_nn;
|
||||
std::hash<int*> hash_intptr;
|
||||
|
||||
EXPECT_TRUE(hash_nn(nn) == hash_intptr(&x));
|
||||
EXPECT_FALSE(hash_nn(nn) == hash_intptr(&y));
|
||||
EXPECT_FALSE(hash_nn(nn) == hash_intptr(nullptr));
|
||||
}
|
||||
|
||||
{
|
||||
const int x = 42;
|
||||
const int y = 99;
|
||||
not_null<const int*> nn{&x};
|
||||
const not_null<const int*> cnn{&x};
|
||||
|
||||
std::hash<not_null<const int*>> hash_nn;
|
||||
std::hash<const int*> hash_intptr;
|
||||
|
||||
EXPECT_TRUE(hash_nn(nn) == hash_intptr(&x));
|
||||
EXPECT_FALSE(hash_nn(nn) == hash_intptr(&y));
|
||||
EXPECT_FALSE(hash_nn(nn) == hash_intptr(nullptr));
|
||||
}
|
||||
}
|
43
deps/GSL/tests/owner_tests.cpp
vendored
43
deps/GSL/tests/owner_tests.cpp
vendored
@ -1,43 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <gsl/pointers> // for owner
|
||||
|
||||
using namespace gsl;
|
||||
|
||||
GSL_SUPPRESS(f .23) // NO-FORMAT: attribute
|
||||
void f(int* i) { *i += 1; }
|
||||
|
||||
TEST(owner_tests, basic_test)
|
||||
{
|
||||
owner<int*> p = new int(120);
|
||||
EXPECT_TRUE(*p == 120);
|
||||
f(p);
|
||||
EXPECT_TRUE(*p == 121);
|
||||
delete p;
|
||||
}
|
||||
|
||||
TEST(owner_tests, check_pointer_constraint)
|
||||
{
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
{
|
||||
owner<int> integerTest = 10;
|
||||
owner<std::shared_ptr<int>> sharedPtrTest(new int(10));
|
||||
}
|
||||
#endif
|
||||
}
|
1023
deps/GSL/tests/span_compatibility_tests.cpp
vendored
1023
deps/GSL/tests/span_compatibility_tests.cpp
vendored
File diff suppressed because it is too large
Load Diff
380
deps/GSL/tests/span_ext_tests.cpp
vendored
380
deps/GSL/tests/span_ext_tests.cpp
vendored
@ -1,380 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <gsl/span> // for span and span_ext
|
||||
#include <gsl/util> // for narrow_cast, at
|
||||
|
||||
#include <array> // for array
|
||||
#include <exception> // for terminate
|
||||
#include <iostream> // for cerr
|
||||
#include <vector> // for vector
|
||||
|
||||
using namespace std;
|
||||
using namespace gsl;
|
||||
|
||||
#include "deathTestCommon.h"
|
||||
|
||||
TEST(span_ext_test, make_span_from_pointer_length_constructor)
|
||||
{
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. from_pointer_length_constructor";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
int arr[4] = {1, 2, 3, 4};
|
||||
|
||||
{
|
||||
auto s = make_span(&arr[0], 2);
|
||||
EXPECT_TRUE(s.size() == 2);
|
||||
EXPECT_TRUE(s.data() == &arr[0]);
|
||||
EXPECT_TRUE(s[0] == 1);
|
||||
EXPECT_TRUE(s[1] == 2);
|
||||
}
|
||||
|
||||
{
|
||||
int* p = nullptr;
|
||||
auto s = make_span(p, narrow_cast<gsl::span<int>::size_type>(0));
|
||||
EXPECT_TRUE(s.size() == 0);
|
||||
EXPECT_TRUE(s.data() == nullptr);
|
||||
}
|
||||
|
||||
{
|
||||
int* p = nullptr;
|
||||
auto workaround_macro = [=]() { make_span(p, 2); };
|
||||
EXPECT_DEATH(workaround_macro(), expected);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(span_ext_test, make_span_from_pointer_pointer_construction)
|
||||
{
|
||||
int arr[4] = {1, 2, 3, 4};
|
||||
|
||||
{
|
||||
auto s = make_span(&arr[0], &arr[2]);
|
||||
EXPECT_TRUE(s.size() == 2);
|
||||
EXPECT_TRUE(s.data() == &arr[0]);
|
||||
EXPECT_TRUE(s[0] == 1);
|
||||
EXPECT_TRUE(s[1] == 2);
|
||||
}
|
||||
|
||||
{
|
||||
auto s = make_span(&arr[0], &arr[0]);
|
||||
EXPECT_TRUE(s.size() == 0);
|
||||
EXPECT_TRUE(s.data() == &arr[0]);
|
||||
}
|
||||
|
||||
{
|
||||
int* p = nullptr;
|
||||
auto s = make_span(p, p);
|
||||
EXPECT_TRUE(s.size() == 0);
|
||||
EXPECT_TRUE(s.data() == nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(span_ext_test, make_span_from_array_constructor)
|
||||
{
|
||||
int arr[5] = {1, 2, 3, 4, 5};
|
||||
int arr2d[2][3] = {1, 2, 3, 4, 5, 6};
|
||||
int arr3d[2][3][2] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
|
||||
|
||||
{
|
||||
const auto s = make_span(arr);
|
||||
EXPECT_TRUE(s.size() == 5);
|
||||
EXPECT_TRUE(s.data() == std::addressof(arr[0]));
|
||||
}
|
||||
|
||||
{
|
||||
const auto s = make_span(std::addressof(arr2d[0]), 1);
|
||||
EXPECT_TRUE(s.size() == 1);
|
||||
EXPECT_TRUE(s.data() == std::addressof(arr2d[0]));
|
||||
}
|
||||
|
||||
{
|
||||
const auto s = make_span(std::addressof(arr3d[0]), 1);
|
||||
EXPECT_TRUE(s.size() == 1);
|
||||
EXPECT_TRUE(s.data() == std::addressof(arr3d[0]));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(span_ext_test, make_span_from_dynamic_array_constructor)
|
||||
{
|
||||
double(*arr)[3][4] = new double[100][3][4];
|
||||
|
||||
{
|
||||
auto s = make_span(&arr[0][0][0], 10);
|
||||
EXPECT_TRUE(s.size() == 10);
|
||||
EXPECT_TRUE(s.data() == &arr[0][0][0]);
|
||||
}
|
||||
|
||||
delete[] arr;
|
||||
}
|
||||
|
||||
TEST(span_ext_test, make_span_from_std_array_constructor)
|
||||
{
|
||||
std::array<int, 4> arr = {1, 2, 3, 4};
|
||||
|
||||
{
|
||||
auto s = make_span(arr);
|
||||
EXPECT_TRUE(s.size() == arr.size());
|
||||
EXPECT_TRUE(s.data() == arr.data());
|
||||
}
|
||||
|
||||
// This test checks for the bug found in gcc 6.1, 6.2, 6.3, 6.4, 6.5 7.1, 7.2, 7.3 - issue #590
|
||||
{
|
||||
gsl::span<int> s1 = make_span(arr);
|
||||
|
||||
static gsl::span<int> s2;
|
||||
s2 = s1;
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ == 6 && (__GNUC_MINOR__ == 4 || __GNUC_MINOR__ == 5) && \
|
||||
__GNUC_PATCHLEVEL__ == 0 && defined(__OPTIMIZE__)
|
||||
// Known to be broken in gcc 6.4 and 6.5 with optimizations
|
||||
// Issue in gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83116
|
||||
EXPECT_TRUE(s1.size() == 4);
|
||||
EXPECT_TRUE(s2.size() == 0);
|
||||
#else
|
||||
EXPECT_TRUE(s1.size() == s2.size());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
TEST(span_ext_test, make_span_from_const_std_array_constructor)
|
||||
{
|
||||
const std::array<int, 4> arr = {1, 2, 3, 4};
|
||||
|
||||
{
|
||||
auto s = make_span(arr);
|
||||
EXPECT_TRUE(s.size() == arr.size());
|
||||
EXPECT_TRUE(s.data() == arr.data());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(span_ext_test, make_span_from_std_array_const_constructor)
|
||||
{
|
||||
std::array<const int, 4> arr = {1, 2, 3, 4};
|
||||
|
||||
{
|
||||
auto s = make_span(arr);
|
||||
EXPECT_TRUE(s.size() == arr.size());
|
||||
EXPECT_TRUE(s.data() == arr.data());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(span_ext_test, make_span_from_container_constructor)
|
||||
{
|
||||
std::vector<int> v = {1, 2, 3};
|
||||
const std::vector<int> cv = v;
|
||||
|
||||
{
|
||||
auto s = make_span(v);
|
||||
EXPECT_TRUE(s.size() == v.size());
|
||||
EXPECT_TRUE(s.data() == v.data());
|
||||
|
||||
auto cs = make_span(cv);
|
||||
EXPECT_TRUE(cs.size() == cv.size());
|
||||
EXPECT_TRUE(cs.data() == cv.data());
|
||||
}
|
||||
}
|
||||
|
||||
TEST(span_test, interop_with_gsl_at)
|
||||
{
|
||||
std::vector<int> vec{1, 2, 3, 4, 5};
|
||||
gsl::span<int> sp{vec};
|
||||
|
||||
std::vector<int> cvec{1, 2, 3, 4, 5};
|
||||
gsl::span<int> csp{cvec};
|
||||
|
||||
for (gsl::index i = 0; i < gsl::narrow_cast<gsl::index>(vec.size()); ++i)
|
||||
{
|
||||
EXPECT_TRUE(&gsl::at(sp, i) == &vec[gsl::narrow_cast<size_t>(i)]);
|
||||
EXPECT_TRUE(&gsl::at(csp, i) == &cvec[gsl::narrow_cast<size_t>(i)]);
|
||||
}
|
||||
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. interop_with_gsl_at";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
EXPECT_DEATH(gsl::at(sp, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(sp, gsl::narrow_cast<gsl::index>(sp.size())), expected);
|
||||
EXPECT_DEATH(gsl::at(csp, -1), expected);
|
||||
EXPECT_DEATH(gsl::at(csp, gsl::narrow_cast<gsl::index>(sp.size())), expected);
|
||||
}
|
||||
|
||||
TEST(span_ext_test, iterator_free_functions)
|
||||
{
|
||||
int a[] = {1, 2, 3, 4};
|
||||
gsl::span<int> s{a};
|
||||
|
||||
EXPECT_TRUE((std::is_same<decltype(s.begin()), decltype(begin(s))>::value));
|
||||
EXPECT_TRUE((std::is_same<decltype(s.end()), decltype(end(s))>::value));
|
||||
|
||||
EXPECT_TRUE((std::is_same<decltype(std::cbegin(s)), decltype(cbegin(s))>::value));
|
||||
EXPECT_TRUE((std::is_same<decltype(std::cend(s)), decltype(cend(s))>::value));
|
||||
|
||||
EXPECT_TRUE((std::is_same<decltype(s.rbegin()), decltype(rbegin(s))>::value));
|
||||
EXPECT_TRUE((std::is_same<decltype(s.rend()), decltype(rend(s))>::value));
|
||||
|
||||
EXPECT_TRUE((std::is_same<decltype(std::crbegin(s)), decltype(crbegin(s))>::value));
|
||||
EXPECT_TRUE((std::is_same<decltype(std::crend(s)), decltype(crend(s))>::value));
|
||||
|
||||
EXPECT_TRUE(s.begin() == begin(s));
|
||||
EXPECT_TRUE(s.end() == end(s));
|
||||
|
||||
EXPECT_TRUE(s.rbegin() == rbegin(s));
|
||||
EXPECT_TRUE(s.rend() == rend(s));
|
||||
|
||||
EXPECT_TRUE(s.begin() == cbegin(s));
|
||||
EXPECT_TRUE(s.end() == cend(s));
|
||||
|
||||
EXPECT_TRUE(s.rbegin() == crbegin(s));
|
||||
EXPECT_TRUE(s.rend() == crend(s));
|
||||
}
|
||||
|
||||
TEST(span_ext_test, ssize_free_function)
|
||||
{
|
||||
int a[] = {1, 2, 3, 4};
|
||||
gsl::span<int> s{a};
|
||||
|
||||
EXPECT_FALSE((std::is_same<decltype(s.size()), decltype(ssize(s))>::value));
|
||||
EXPECT_TRUE(s.size() == static_cast<std::size_t>(ssize(s)));
|
||||
}
|
||||
|
||||
#ifndef GSL_KERNEL_MODE
|
||||
TEST(span_ext_test, comparison_operators)
|
||||
{
|
||||
{
|
||||
gsl::span<int> s1;
|
||||
gsl::span<int> s2;
|
||||
EXPECT_TRUE(s1 == s2);
|
||||
EXPECT_FALSE(s1 != s2);
|
||||
EXPECT_FALSE(s1 < s2);
|
||||
EXPECT_TRUE(s1 <= s2);
|
||||
EXPECT_FALSE(s1 > s2);
|
||||
EXPECT_TRUE(s1 >= s2);
|
||||
EXPECT_TRUE(s2 == s1);
|
||||
EXPECT_FALSE(s2 != s1);
|
||||
EXPECT_FALSE(s2 != s1);
|
||||
EXPECT_TRUE(s2 <= s1);
|
||||
EXPECT_FALSE(s2 > s1);
|
||||
EXPECT_TRUE(s2 >= s1);
|
||||
}
|
||||
|
||||
{
|
||||
int arr[] = {2, 1};
|
||||
gsl::span<int> s1 = arr;
|
||||
gsl::span<int> s2 = arr;
|
||||
|
||||
EXPECT_TRUE(s1 == s2);
|
||||
EXPECT_FALSE(s1 != s2);
|
||||
EXPECT_FALSE(s1 < s2);
|
||||
EXPECT_TRUE(s1 <= s2);
|
||||
EXPECT_FALSE(s1 > s2);
|
||||
EXPECT_TRUE(s1 >= s2);
|
||||
EXPECT_TRUE(s2 == s1);
|
||||
EXPECT_FALSE(s2 != s1);
|
||||
EXPECT_FALSE(s2 < s1);
|
||||
EXPECT_TRUE(s2 <= s1);
|
||||
EXPECT_FALSE(s2 > s1);
|
||||
EXPECT_TRUE(s2 >= s1);
|
||||
}
|
||||
|
||||
{
|
||||
int arr[] = {2, 1}; // bigger
|
||||
|
||||
gsl::span<int> s1;
|
||||
gsl::span<int> s2 = arr;
|
||||
|
||||
EXPECT_TRUE(s1 != s2);
|
||||
EXPECT_TRUE(s2 != s1);
|
||||
EXPECT_FALSE(s1 == s2);
|
||||
EXPECT_FALSE(s2 == s1);
|
||||
EXPECT_TRUE(s1 < s2);
|
||||
EXPECT_FALSE(s2 < s1);
|
||||
EXPECT_TRUE(s1 <= s2);
|
||||
EXPECT_FALSE(s2 <= s1);
|
||||
EXPECT_TRUE(s2 > s1);
|
||||
EXPECT_FALSE(s1 > s2);
|
||||
EXPECT_TRUE(s2 >= s1);
|
||||
EXPECT_FALSE(s1 >= s2);
|
||||
}
|
||||
|
||||
{
|
||||
int arr1[] = {1, 2};
|
||||
int arr2[] = {1, 2};
|
||||
gsl::span<int> s1 = arr1;
|
||||
gsl::span<int> s2 = arr2;
|
||||
|
||||
EXPECT_TRUE(s1 == s2);
|
||||
EXPECT_FALSE(s1 != s2);
|
||||
EXPECT_FALSE(s1 < s2);
|
||||
EXPECT_TRUE(s1 <= s2);
|
||||
EXPECT_FALSE(s1 > s2);
|
||||
EXPECT_TRUE(s1 >= s2);
|
||||
EXPECT_TRUE(s2 == s1);
|
||||
EXPECT_FALSE(s2 != s1);
|
||||
EXPECT_FALSE(s2 < s1);
|
||||
EXPECT_TRUE(s2 <= s1);
|
||||
EXPECT_FALSE(s2 > s1);
|
||||
EXPECT_TRUE(s2 >= s1);
|
||||
}
|
||||
|
||||
{
|
||||
int arr[] = {1, 2, 3};
|
||||
|
||||
gsl::span<int> s1 = {&arr[0], 2}; // shorter
|
||||
gsl::span<int> s2 = arr; // longer
|
||||
|
||||
EXPECT_TRUE(s1 != s2);
|
||||
EXPECT_TRUE(s2 != s1);
|
||||
EXPECT_FALSE(s1 == s2);
|
||||
EXPECT_FALSE(s2 == s1);
|
||||
EXPECT_TRUE(s1 < s2);
|
||||
EXPECT_FALSE(s2 < s1);
|
||||
EXPECT_TRUE(s1 <= s2);
|
||||
EXPECT_FALSE(s2 <= s1);
|
||||
EXPECT_TRUE(s2 > s1);
|
||||
EXPECT_FALSE(s1 > s2);
|
||||
EXPECT_TRUE(s2 >= s1);
|
||||
EXPECT_FALSE(s1 >= s2);
|
||||
}
|
||||
|
||||
{
|
||||
int arr1[] = {1, 2}; // smaller
|
||||
int arr2[] = {2, 1}; // bigger
|
||||
|
||||
gsl::span<int> s1 = arr1;
|
||||
gsl::span<int> s2 = arr2;
|
||||
|
||||
EXPECT_TRUE(s1 != s2);
|
||||
EXPECT_TRUE(s2 != s1);
|
||||
EXPECT_FALSE(s1 == s2);
|
||||
EXPECT_FALSE(s2 == s1);
|
||||
EXPECT_TRUE(s1 < s2);
|
||||
EXPECT_FALSE(s2 < s1);
|
||||
EXPECT_TRUE(s1 <= s2);
|
||||
EXPECT_FALSE(s2 <= s1);
|
||||
EXPECT_TRUE(s2 > s1);
|
||||
EXPECT_FALSE(s1 > s2);
|
||||
EXPECT_TRUE(s2 >= s1);
|
||||
EXPECT_FALSE(s1 >= s2);
|
||||
}
|
||||
}
|
||||
#endif // GSL_KERNEL_MODE
|
1383
deps/GSL/tests/span_tests.cpp
vendored
1383
deps/GSL/tests/span_tests.cpp
vendored
File diff suppressed because it is too large
Load Diff
304
deps/GSL/tests/strict_notnull_tests.cpp
vendored
304
deps/GSL/tests/strict_notnull_tests.cpp
vendored
@ -1,304 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <gsl/pointers> // for not_null, operator<, operator<=, operator>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "deathTestCommon.h"
|
||||
|
||||
using namespace gsl;
|
||||
|
||||
namespace
|
||||
{
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(f.4) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
bool helper(not_null<int*> p) { return *p == 12; }
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(f.4) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
bool helper_const(not_null<const int*> p) { return *p == 12; }
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(f.4) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
bool strict_helper(strict_not_null<int*> p) { return *p == 12; }
|
||||
|
||||
// clang-format off
|
||||
GSL_SUPPRESS(f.4) // NO-FORMAT: attribute
|
||||
// clang-format on
|
||||
bool strict_helper_const(strict_not_null<const int*> p) { return *p == 12; }
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
int* return_pointer() { return nullptr; }
|
||||
const int* return_pointer_const() { return nullptr; }
|
||||
#endif
|
||||
} // namespace
|
||||
|
||||
TEST(strict_notnull_tests, TestStrictNotNull)
|
||||
{
|
||||
{
|
||||
// raw ptr <-> strict_not_null
|
||||
int x = 42;
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
strict_not_null<int*> snn = &x;
|
||||
strict_helper(&x);
|
||||
strict_helper_const(&x);
|
||||
strict_helper(return_pointer());
|
||||
strict_helper_const(return_pointer_const());
|
||||
#endif
|
||||
|
||||
const strict_not_null<int*> snn1{&x};
|
||||
|
||||
helper(snn1);
|
||||
helper_const(snn1);
|
||||
|
||||
EXPECT_TRUE(*snn1 == 42);
|
||||
}
|
||||
|
||||
{
|
||||
// raw ptr <-> strict_not_null
|
||||
const int x = 42;
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
strict_not_null<int*> snn = &x;
|
||||
strict_helper(&x);
|
||||
strict_helper_const(&x);
|
||||
strict_helper(return_pointer());
|
||||
strict_helper_const(return_pointer_const());
|
||||
#endif
|
||||
|
||||
const strict_not_null<const int*> snn1{&x};
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(snn1);
|
||||
#endif
|
||||
helper_const(snn1);
|
||||
|
||||
EXPECT_TRUE(*snn1 == 42);
|
||||
}
|
||||
|
||||
{
|
||||
// strict_not_null -> strict_not_null
|
||||
int x = 42;
|
||||
|
||||
strict_not_null<int*> snn1{&x};
|
||||
const strict_not_null<int*> snn2{&x};
|
||||
|
||||
strict_helper(snn1);
|
||||
strict_helper_const(snn1);
|
||||
strict_helper_const(snn2);
|
||||
|
||||
EXPECT_TRUE(snn1 == snn2);
|
||||
}
|
||||
|
||||
{
|
||||
// strict_not_null -> strict_not_null
|
||||
const int x = 42;
|
||||
|
||||
strict_not_null<const int*> snn1{&x};
|
||||
const strict_not_null<const int*> snn2{&x};
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
strict_helper(snn1);
|
||||
#endif
|
||||
strict_helper_const(snn1);
|
||||
strict_helper_const(snn2);
|
||||
|
||||
EXPECT_TRUE(snn1 == snn2);
|
||||
}
|
||||
|
||||
{
|
||||
// strict_not_null -> not_null
|
||||
int x = 42;
|
||||
|
||||
strict_not_null<int*> snn{&x};
|
||||
|
||||
const not_null<int*> nn1 = snn;
|
||||
const not_null<int*> nn2{snn};
|
||||
|
||||
helper(snn);
|
||||
helper_const(snn);
|
||||
|
||||
EXPECT_TRUE(snn == nn1);
|
||||
EXPECT_TRUE(snn == nn2);
|
||||
}
|
||||
|
||||
{
|
||||
// strict_not_null -> not_null
|
||||
const int x = 42;
|
||||
|
||||
strict_not_null<const int*> snn{&x};
|
||||
|
||||
const not_null<const int*> nn1 = snn;
|
||||
const not_null<const int*> nn2{snn};
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(snn);
|
||||
#endif
|
||||
helper_const(snn);
|
||||
|
||||
EXPECT_TRUE(snn == nn1);
|
||||
EXPECT_TRUE(snn == nn2);
|
||||
}
|
||||
|
||||
{
|
||||
// not_null -> strict_not_null
|
||||
int x = 42;
|
||||
|
||||
not_null<int*> nn{&x};
|
||||
|
||||
const strict_not_null<int*> snn1{nn};
|
||||
const strict_not_null<int*> snn2{nn};
|
||||
|
||||
strict_helper(nn);
|
||||
strict_helper_const(nn);
|
||||
|
||||
EXPECT_TRUE(snn1 == nn);
|
||||
EXPECT_TRUE(snn2 == nn);
|
||||
|
||||
std::hash<strict_not_null<int*>> hash_snn;
|
||||
std::hash<not_null<int*>> hash_nn;
|
||||
|
||||
EXPECT_TRUE(hash_nn(snn1) == hash_nn(nn));
|
||||
EXPECT_TRUE(hash_snn(snn1) == hash_nn(nn));
|
||||
EXPECT_TRUE(hash_nn(snn1) == hash_nn(snn2));
|
||||
EXPECT_TRUE(hash_snn(snn1) == hash_snn(nn));
|
||||
}
|
||||
|
||||
{
|
||||
// not_null -> strict_not_null
|
||||
const int x = 42;
|
||||
|
||||
not_null<const int*> nn{&x};
|
||||
|
||||
const strict_not_null<const int*> snn1{nn};
|
||||
const strict_not_null<const int*> snn2{nn};
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
strict_helper(nn);
|
||||
#endif
|
||||
strict_helper_const(nn);
|
||||
|
||||
EXPECT_TRUE(snn1 == nn);
|
||||
EXPECT_TRUE(snn2 == nn);
|
||||
|
||||
std::hash<strict_not_null<const int*>> hash_snn;
|
||||
std::hash<not_null<const int*>> hash_nn;
|
||||
|
||||
EXPECT_TRUE(hash_nn(snn1) == hash_nn(nn));
|
||||
EXPECT_TRUE(hash_snn(snn1) == hash_nn(nn));
|
||||
EXPECT_TRUE(hash_nn(snn1) == hash_nn(snn2));
|
||||
EXPECT_TRUE(hash_snn(snn1) == hash_snn(nn));
|
||||
}
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
{
|
||||
strict_not_null<int*> p{nullptr};
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(__cplusplus) && (__cplusplus >= 201703L)
|
||||
|
||||
TEST(strict_notnull_tests, TestStrictNotNullConstructorTypeDeduction)
|
||||
{
|
||||
const auto terminateHandler = std::set_terminate([] {
|
||||
std::cerr << "Expected Death. TestStrictNotNullConstructorTypeDeduction";
|
||||
std::abort();
|
||||
});
|
||||
const auto expected = GetExpectedDeathString(terminateHandler);
|
||||
|
||||
{
|
||||
int i = 42;
|
||||
|
||||
strict_not_null x{&i};
|
||||
helper(strict_not_null{&i});
|
||||
helper_const(strict_not_null{&i});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
const int i = 42;
|
||||
|
||||
strict_not_null x{&i};
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(strict_not_null{&i});
|
||||
#endif
|
||||
helper_const(strict_not_null{&i});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
int i = 42;
|
||||
int* p = &i;
|
||||
|
||||
strict_not_null x{p};
|
||||
helper(strict_not_null{p});
|
||||
helper_const(strict_not_null{p});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
const int i = 42;
|
||||
const int* p = &i;
|
||||
|
||||
strict_not_null x{p};
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
helper(strict_not_null{p});
|
||||
#endif
|
||||
helper_const(strict_not_null{p});
|
||||
|
||||
EXPECT_TRUE(*x == 42);
|
||||
}
|
||||
|
||||
{
|
||||
auto workaround_macro = []() {
|
||||
int* p1 = nullptr;
|
||||
const strict_not_null x{p1};
|
||||
};
|
||||
EXPECT_DEATH(workaround_macro(), expected);
|
||||
}
|
||||
|
||||
{
|
||||
auto workaround_macro = []() {
|
||||
const int* p1 = nullptr;
|
||||
const strict_not_null x{p1};
|
||||
};
|
||||
EXPECT_DEATH(workaround_macro(), expected);
|
||||
}
|
||||
|
||||
{
|
||||
int* p = nullptr;
|
||||
|
||||
EXPECT_DEATH(helper(strict_not_null{p}), expected);
|
||||
EXPECT_DEATH(helper_const(strict_not_null{p}), expected);
|
||||
}
|
||||
|
||||
#ifdef CONFIRM_COMPILATION_ERRORS
|
||||
{
|
||||
strict_not_null x{nullptr};
|
||||
helper(strict_not_null{nullptr});
|
||||
helper_const(strict_not_null{nullptr});
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif // #if defined(__cplusplus) && (__cplusplus >= 201703L)
|
165
deps/GSL/tests/utils_tests.cpp
vendored
165
deps/GSL/tests/utils_tests.cpp
vendored
@ -1,165 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// This code is licensed under the MIT License (MIT).
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <algorithm> // for move
|
||||
#include <complex>
|
||||
#include <cstddef> // for std::ptrdiff_t
|
||||
#include <cstdint> // for uint32_t, int32_t
|
||||
#include <functional> // for reference_wrapper, _Bind_helper<>::type
|
||||
#include <gsl/narrow> // for narrow, narrowing_error
|
||||
#include <gsl/util> // finally, narrow_cast
|
||||
#include <limits> // for numeric_limits
|
||||
#include <type_traits> // for is_same
|
||||
|
||||
using namespace gsl;
|
||||
|
||||
namespace
|
||||
{
|
||||
void f(int& i) { i += 1; }
|
||||
static int j = 0;
|
||||
void g() { j += 1; }
|
||||
} // namespace
|
||||
|
||||
TEST(utils_tests, sanity_check_for_gsl_index_typedef)
|
||||
{
|
||||
static_assert(std::is_same<gsl::index, std::ptrdiff_t>::value,
|
||||
"gsl::index represents wrong arithmetic type");
|
||||
}
|
||||
|
||||
TEST(utils_tests, finally_lambda)
|
||||
{
|
||||
int i = 0;
|
||||
{
|
||||
auto _ = finally([&]() { f(i); });
|
||||
EXPECT_TRUE(i == 0);
|
||||
}
|
||||
EXPECT_TRUE(i == 1);
|
||||
}
|
||||
|
||||
TEST(utils_tests, finally_lambda_move)
|
||||
{
|
||||
int i = 0;
|
||||
{
|
||||
auto _1 = finally([&]() { f(i); });
|
||||
{
|
||||
auto _2 = std::move(_1);
|
||||
EXPECT_TRUE(i == 0);
|
||||
}
|
||||
EXPECT_TRUE(i == 1);
|
||||
{
|
||||
auto _2 = std::move(_1);
|
||||
EXPECT_TRUE(i == 1);
|
||||
}
|
||||
EXPECT_TRUE(i == 1);
|
||||
}
|
||||
EXPECT_TRUE(i == 1);
|
||||
}
|
||||
|
||||
TEST(utils_tests, finally_const_lvalue_lambda)
|
||||
{
|
||||
int i = 0;
|
||||
{
|
||||
const auto const_lvalue_lambda = [&]() { f(i); };
|
||||
auto _ = finally(const_lvalue_lambda);
|
||||
EXPECT_TRUE(i == 0);
|
||||
}
|
||||
EXPECT_TRUE(i == 1);
|
||||
}
|
||||
|
||||
TEST(utils_tests, finally_mutable_lvalue_lambda)
|
||||
{
|
||||
int i = 0;
|
||||
{
|
||||
auto mutable_lvalue_lambda = [&]() { f(i); };
|
||||
auto _ = finally(mutable_lvalue_lambda);
|
||||
EXPECT_TRUE(i == 0);
|
||||
}
|
||||
EXPECT_TRUE(i == 1);
|
||||
}
|
||||
|
||||
TEST(utils_tests, finally_function_with_bind)
|
||||
{
|
||||
int i = 0;
|
||||
{
|
||||
auto _ = finally([&i] { return f(i); });
|
||||
EXPECT_TRUE(i == 0);
|
||||
}
|
||||
EXPECT_TRUE(i == 1);
|
||||
}
|
||||
|
||||
TEST(utils_tests, finally_function_ptr)
|
||||
{
|
||||
j = 0;
|
||||
{
|
||||
auto _ = finally(&g);
|
||||
EXPECT_TRUE(j == 0);
|
||||
}
|
||||
EXPECT_TRUE(j == 1);
|
||||
}
|
||||
|
||||
TEST(utils_tests, finally_function)
|
||||
{
|
||||
j = 0;
|
||||
{
|
||||
auto _ = finally(g);
|
||||
EXPECT_TRUE(j == 0);
|
||||
}
|
||||
EXPECT_TRUE(j == 1);
|
||||
}
|
||||
|
||||
TEST(utils_tests, narrow_cast)
|
||||
{
|
||||
int n = 120;
|
||||
char c = narrow_cast<char>(n);
|
||||
EXPECT_TRUE(c == 120);
|
||||
|
||||
n = 300;
|
||||
unsigned char uc = narrow_cast<unsigned char>(n);
|
||||
EXPECT_TRUE(uc == 44);
|
||||
}
|
||||
|
||||
#ifndef GSL_KERNEL_MODE
|
||||
TEST(utils_tests, narrow)
|
||||
{
|
||||
int n = 120;
|
||||
const char c = narrow<char>(n);
|
||||
EXPECT_TRUE(c == 120);
|
||||
|
||||
n = 300;
|
||||
EXPECT_THROW(narrow<char>(n), narrowing_error);
|
||||
|
||||
const auto int32_max = std::numeric_limits<int32_t>::max();
|
||||
const auto int32_min = std::numeric_limits<int32_t>::min();
|
||||
|
||||
EXPECT_TRUE(narrow<uint32_t>(int32_t(0)) == 0);
|
||||
EXPECT_TRUE(narrow<uint32_t>(int32_t(1)) == 1);
|
||||
EXPECT_TRUE(narrow<uint32_t>(int32_max) == static_cast<uint32_t>(int32_max));
|
||||
|
||||
EXPECT_THROW(narrow<uint32_t>(int32_t(-1)), narrowing_error);
|
||||
EXPECT_THROW(narrow<uint32_t>(int32_min), narrowing_error);
|
||||
|
||||
n = -42;
|
||||
EXPECT_THROW(narrow<unsigned>(n), narrowing_error);
|
||||
|
||||
EXPECT_TRUE(
|
||||
narrow<std::complex<float>>(std::complex<double>(4, 2)) == std::complex<float>(4, 2));
|
||||
EXPECT_THROW(narrow<std::complex<float>>(std::complex<double>(4.2)), narrowing_error);
|
||||
|
||||
EXPECT_TRUE(narrow<int>(float(1)) == 1);
|
||||
}
|
||||
#endif // GSL_KERNEL_MODE
|
1
deps/discord-rpc
vendored
Submodule
1
deps/discord-rpc
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 963aa9f3e5ce81a4682c6ca3d136cddda614db33
|
92
deps/discord-rpc/.clang-format
vendored
92
deps/discord-rpc/.clang-format
vendored
@ -1,92 +0,0 @@
|
||||
---
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: true
|
||||
AlignConsecutiveAssignments: false
|
||||
AlignConsecutiveDeclarations: false
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: false
|
||||
AlignTrailingComments: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: InlineOnly
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Stroustrup
|
||||
BreakBeforeInheritanceComma: true
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 100
|
||||
CommentPragmas: ''
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||
ConstructorInitializerIndentWidth: 2
|
||||
ContinuationIndentWidth: 2
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
FixNamespaceComments: true
|
||||
ForEachMacros: []
|
||||
IndentCaseLabels: false
|
||||
IncludeCategories:
|
||||
- Regex: '^("|<)stdafx\.h(pp)?("|>)'
|
||||
Priority: -1
|
||||
- Regex: '^<(W|w)indows.h>'
|
||||
Priority: 1
|
||||
- Regex: '^<'
|
||||
Priority: 2
|
||||
- Regex: '.*'
|
||||
Priority: 3
|
||||
IncludeIsMainRegex: '(_test|_win|_linux|_mac|_ios|_osx|_null)?$'
|
||||
IndentCaseLabels: false
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
MacroBlockBegin: ''
|
||||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
PenaltyBreakAssignment: 0
|
||||
PenaltyBreakBeforeFirstCallParameter: 1
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 9999999
|
||||
PointerAlignment: Left
|
||||
ReflowComments: true
|
||||
SortIncludes: false
|
||||
SortUsingDeclarations: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Cpp11
|
||||
TabWidth: 4
|
||||
UseTab: Never
|
||||
---
|
||||
Language: Cpp
|
||||
---
|
||||
Language: ObjC
|
||||
ObjCBlockIndentWidth: 4
|
||||
ObjCSpaceAfterProperty: true
|
||||
ObjCSpaceBeforeProtocolList: false
|
||||
---
|
||||
Language: Java
|
||||
BasedOnStyle: Google
|
||||
BreakAfterJavaFieldAnnotations: true
|
||||
...
|
5
deps/discord-rpc/.gitignore
vendored
5
deps/discord-rpc/.gitignore
vendored
@ -1,5 +0,0 @@
|
||||
/build*/
|
||||
/.vscode/
|
||||
/thirdparty/
|
||||
.vs/
|
||||
.DS_Store
|
47
deps/discord-rpc/.travis.yml
vendored
47
deps/discord-rpc/.travis.yml
vendored
@ -1,47 +0,0 @@
|
||||
language: cpp
|
||||
|
||||
env:
|
||||
global:
|
||||
- CLANG_FORMAT_SUFFIX="-dummy" # don't use formatting on Travis, this is
|
||||
# needed not to use default 3.5 version
|
||||
# which is too old.
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
env: MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-5
|
||||
- os: linux
|
||||
env: MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- llvm-toolchain-trusty-4.0
|
||||
packages:
|
||||
- clang-4.0
|
||||
- os: linux
|
||||
env: MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- llvm-toolchain-trusty-5.0
|
||||
packages:
|
||||
- clang-5.0
|
||||
- os: osx
|
||||
osx_image: xcode9
|
||||
|
||||
# prevent Travis from overwriting our CXX variables
|
||||
before_install:
|
||||
- eval "${MATRIX_EVAL}"
|
||||
- echo $CXX
|
||||
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake -DCLANG_FORMAT_SUFFIX=$CLANG_FORMAT_SUFFIX -DWARNINGS_AS_ERRORS=On --config Release ..
|
||||
- cmake --build . -- -j2
|
56
deps/discord-rpc/CMakeLists.txt
vendored
56
deps/discord-rpc/CMakeLists.txt
vendored
@ -1,56 +0,0 @@
|
||||
cmake_minimum_required (VERSION 3.2.0)
|
||||
project (DiscordRPC)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
option(BUILD_EXAMPLES "Build example apps" ON)
|
||||
|
||||
# format
|
||||
file(GLOB_RECURSE ALL_SOURCE_FILES
|
||||
examples/*.cpp examples/*.h examples/*.c
|
||||
include/*.h
|
||||
src/*.cpp src/*.h src/*.c
|
||||
)
|
||||
|
||||
# Set CLANG_FORMAT_SUFFIX if you are using custom clang-format, e.g. clang-format-5.0
|
||||
find_program(CLANG_FORMAT_CMD clang-format${CLANG_FORMAT_SUFFIX})
|
||||
|
||||
if (CLANG_FORMAT_CMD)
|
||||
add_custom_target(
|
||||
clangformat
|
||||
COMMAND ${CLANG_FORMAT_CMD}
|
||||
-i -style=file -fallback-style=none
|
||||
${ALL_SOURCE_FILES}
|
||||
DEPENDS
|
||||
${ALL_SOURCE_FILES}
|
||||
)
|
||||
endif(CLANG_FORMAT_CMD)
|
||||
|
||||
# thirdparty stuff
|
||||
execute_process(
|
||||
COMMAND mkdir ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty
|
||||
ERROR_QUIET
|
||||
)
|
||||
|
||||
find_file(RAPIDJSONTEST NAMES rapidjson rapidjson-1.1.0 PATHS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty CMAKE_FIND_ROOT_PATH_BOTH)
|
||||
if (NOT RAPIDJSONTEST)
|
||||
message("no rapidjson, download")
|
||||
set(RJ_TAR_FILE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/v1.1.0.tar.gz)
|
||||
file(DOWNLOAD https://github.com/miloyip/rapidjson/archive/v1.1.0.tar.gz ${RJ_TAR_FILE})
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xzf ${RJ_TAR_FILE}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty
|
||||
)
|
||||
file(REMOVE ${RJ_TAR_FILE})
|
||||
endif(NOT RAPIDJSONTEST)
|
||||
|
||||
find_file(RAPIDJSON NAMES rapidjson rapidjson-1.1.0 PATHS ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty CMAKE_FIND_ROOT_PATH_BOTH)
|
||||
|
||||
add_library(rapidjson STATIC IMPORTED ${RAPIDJSON})
|
||||
|
||||
# add subdirs
|
||||
|
||||
add_subdirectory(src)
|
||||
if (BUILD_EXAMPLES)
|
||||
add_subdirectory(examples/send-presence)
|
||||
endif(BUILD_EXAMPLES)
|
19
deps/discord-rpc/LICENSE
vendored
19
deps/discord-rpc/LICENSE
vendored
@ -1,19 +0,0 @@
|
||||
Copyright 2017 Discord, Inc.
|
||||
|
||||
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.
|
158
deps/discord-rpc/README.md
vendored
158
deps/discord-rpc/README.md
vendored
@ -1,158 +0,0 @@
|
||||
# Discord RPC
|
||||
|
||||
## Deprecation Notice
|
||||
|
||||
This library has been deprecated in favor of Discord's GameSDK. [Learn more here](https://discordapp.com/developers/docs/game-sdk/sdk-starter-guide)
|
||||
|
||||
---
|
||||
|
||||
This is a library for interfacing your game with a locally running Discord desktop client. It's known to work on Windows, macOS, and Linux. You can use the lib directly if you like, or use it as a guide to writing your own if it doesn't suit your game as is. PRs/feedback welcome if you have an improvement everyone might want, or can describe how this doesn't meet your needs.
|
||||
|
||||
Included here are some quick demos that implement the very minimal subset to show current status, and
|
||||
have callbacks for where a more complete game would do more things (joining, spectating, etc).
|
||||
|
||||
## Documentation
|
||||
|
||||
The most up to date documentation for Rich Presence can always be found on our [developer site](https://discordapp.com/developers/docs/rich-presence/how-to)! If you're interested in rolling your own native implementation of Rich Presence via IPC sockets instead of using our SDK—hey, you've got free time, right?—check out the ["Hard Mode" documentation](https://github.com/discordapp/discord-rpc/blob/master/documentation/hard-mode.md).
|
||||
|
||||
## Basic Usage
|
||||
|
||||
Zeroith, you should be set up to build things because you are a game developer, right?
|
||||
|
||||
First, head on over to the [Discord developers site](https://discordapp.com/developers/applications/me) and make yourself an app. Keep track of `Client ID` -- you'll need it here to pass to the init function.
|
||||
|
||||
### Unreal Engine 4 Setup
|
||||
|
||||
To use the Rich Presense plugin with Unreal Engine Projects:
|
||||
|
||||
1. Download the latest [release](https://github.com/discordapp/discord-rpc/releases) for each operating system you are targeting and the zipped source code
|
||||
2. In the source code zip, copy the UE plugin—`examples/unrealstatus/Plugins/discordrpc`—to your project's plugin directory
|
||||
3. At `[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/`, create an `Include` folder and copy `discord_rpc.h` and `discord_register.h` to it from the zip
|
||||
4. Follow the steps below for each OS
|
||||
5. Build your UE4 project
|
||||
6. Launch the editor, and enable the Discord plugin.
|
||||
|
||||
#### Windows
|
||||
|
||||
- At `[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/`, create a `Win64` folder
|
||||
- Copy `lib/discord-rpc.lib` and `bin/discord-rpc.dll` from `[RELEASE_ZIP]/win64-dynamic` to the `Win64` folder
|
||||
|
||||
#### Mac
|
||||
|
||||
- At `[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/`, create a `Mac` folder
|
||||
- Copy `libdiscord-rpc.dylib` from `[RELEASE_ZIP]/osx-dynamic/lib` to the `Mac` folder
|
||||
|
||||
#### Linux
|
||||
|
||||
- At `[YOUR_UE_PROJECT]/Plugins/discordrpc/source/ThirdParty/DiscordRpcLibrary/`, create a `Linux` folder
|
||||
- Inside, create another folder `x86_64-unknown-linux-gnu`
|
||||
- Copy `libdiscord-rpc.so` from `[RELEASE_ZIP]/linux-dynamic/lib` to `Linux/x86_64-unknown-linux-gnu`
|
||||
|
||||
### Unity Setup
|
||||
|
||||
If you're a Unity developer looking to integrate Rich Presence into your game, follow this simple guide to get started towards success:
|
||||
|
||||
1. Download the DLLs for any platform that you need from [our releases](https://github.com/discordapp/discord-rpc/releases)
|
||||
2. In your Unity project, create a `Plugins` folder inside your `Assets` folder if you don't already have one
|
||||
3. Copy the file `DiscordRpc.cs` from [here](https://github.com/discordapp/discord-rpc/blob/master/examples/button-clicker/Assets/DiscordRpc.cs) into your `Assets` folder. This is basically your header file for the SDK
|
||||
|
||||
We've got our `Plugins` folder ready, so let's get platform-specific!
|
||||
|
||||
#### Windows
|
||||
|
||||
4. Create `x86` and `x86_64` folders inside `Assets/Plugins/`
|
||||
5. Copy `discord-rpc-win/win64-dynamic/bin/discord-rpc.dll` to `Assets/Plugins/x86_64/`
|
||||
6. Copy `discord-rpc-win/win32-dynamic/bin/discord-rpc.dll` to `Assets/Plugins/x86/`
|
||||
7. Click on both DLLs and make sure they are targetting the correct architectures in the Unity editor properties pane
|
||||
8. Done!
|
||||
|
||||
#### MacOS
|
||||
|
||||
4. Copy `discord-rpc-osx/osx-dynamic/lib/libdiscord-rpc.dylib` to `Assets/Plugins/`
|
||||
5. Rename `libdiscord-rpc.dylib` to `discord-rpc.bundle`
|
||||
6. Done!
|
||||
|
||||
#### Linux
|
||||
|
||||
4. Copy `discord-rpc-linux/linux-dynamic-lib/libdiscord-rpc.so` to `Assets/Plugins/`
|
||||
5. Done!
|
||||
|
||||
You're ready to roll! For code examples on how to interact with the SDK using the `DiscordRpc.cs` header file, check out [our example](https://github.com/discordapp/discord-rpc/blob/master/examples/button-clicker/Assets/DiscordController.cs)
|
||||
|
||||
### From package
|
||||
|
||||
Download a release package for your platform(s) -- they have subdirs with various prebuilt options, select the one you need add `/include` to your compile includes, `/lib` to your linker paths, and link with `discord-rpc`. For the dynamically linked builds, you'll need to ship the associated file along with your game.
|
||||
|
||||
### From repo
|
||||
|
||||
First-eth, you'll want `CMake`. There's a few different ways to install it on your system, and you should refer to [their website](https://cmake.org/install/). Many package managers provide ways of installing CMake as well.
|
||||
|
||||
To make sure it's installed correctly, type `cmake --version` into your flavor of terminal/cmd. If you get a response with a version number, you're good to go!
|
||||
|
||||
There's a [CMake](https://cmake.org/download/) file that should be able to generate the lib for you; Sometimes I use it like this:
|
||||
|
||||
```sh
|
||||
cd <path to discord-rpc>
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=<path to install discord-rpc to>
|
||||
cmake --build . --config Release --target install
|
||||
```
|
||||
|
||||
There is a wrapper build script `build.py` that runs `cmake` with a few different options.
|
||||
|
||||
Usually, I run `build.py` to get things started, then use the generated project files as I work on things. It does depend on `click` library, so do a quick `pip install click` to make sure you have it if you want to run `build.py`.
|
||||
|
||||
There are some CMake options you might care about:
|
||||
|
||||
| flag | default | does |
|
||||
| ---------------------------------------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `ENABLE_IO_THREAD` | `ON` | When enabled, we start up a thread to do io processing, if disabled you should call `Discord_UpdateConnection` yourself. |
|
||||
| `USE_STATIC_CRT` | `OFF` | (Windows) Enable to statically link the CRT, avoiding requiring users install the redistributable package. (The prebuilt binaries enable this option) |
|
||||
| [`BUILD_SHARED_LIBS`](https://cmake.org/cmake/help/v3.7/variable/BUILD_SHARED_LIBS.html) | `OFF` | Build library as a DLL |
|
||||
| `WARNINGS_AS_ERRORS` | `OFF` | When enabled, compiles with `-Werror` (on \*nix platforms). |
|
||||
|
||||
## Continuous Builds
|
||||
|
||||
Why do we have three of these? Three times the fun!
|
||||
|
||||
| CI | badge |
|
||||
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| TravisCI | [![Build status](https://travis-ci.org/discordapp/discord-rpc.svg?branch=master)](https://travis-ci.org/discordapp/discord-rpc) |
|
||||
| AppVeyor | [![Build status](https://ci.appveyor.com/api/projects/status/qvkoc0w1c4f4b8tj?svg=true)](https://ci.appveyor.com/project/crmarsh/discord-rpc) |
|
||||
| Buildkite (internal) | [![Build status](https://badge.buildkite.com/e103d79d247f6776605a15246352a04b8fd83d69211b836111.svg)](https://buildkite.com/discord/discord-rpc) |
|
||||
|
||||
## Sample: send-presence
|
||||
|
||||
This is a text adventure "game" that inits/deinits the connection to Discord, and sends a presence update on each command.
|
||||
|
||||
## Sample: button-clicker
|
||||
|
||||
This is a sample [Unity](https://unity3d.com/) project that wraps a DLL version of the library, and sends presence updates when you click on a button. Run `python build.py unity` in the root directory to build the correct library files and place them in their respective folders.
|
||||
|
||||
## Sample: unrealstatus
|
||||
|
||||
This is a sample [Unreal](https://www.unrealengine.com) project that wraps the DLL version of the library with an Unreal plugin, exposes a blueprint class for interacting with it, and uses that to make a very simple UI. Run `python build.py unreal` in the root directory to build the correct library files and place them in their respective folders.
|
||||
|
||||
## Wrappers and Implementations
|
||||
|
||||
Below is a table of unofficial, community-developed wrappers for and implementations of Rich Presence in various languages. If you would like to have yours added, please make a pull request adding your repository to the table. The repository should include:
|
||||
|
||||
- The code
|
||||
- A brief ReadMe of how to use it
|
||||
- A working example
|
||||
|
||||
###### Rich Presence Wrappers and Implementations
|
||||
|
||||
| Name | Language |
|
||||
| ------------------------------------------------------------------------- | --------------------------------- |
|
||||
| [Discord RPC C#](https://github.com/Lachee/discord-rpc-csharp) | C# |
|
||||
| [Discord RPC D](https://github.com/voidblaster/discord-rpc-d) | [D](https://dlang.org/) |
|
||||
| [discord-rpc.jar](https://github.com/Vatuu/discord-rpc 'Discord-RPC.jar') | Java |
|
||||
| [java-discord-rpc](https://github.com/MinnDevelopment/java-discord-rpc) | Java |
|
||||
| [Discord-IPC](https://github.com/jagrosh/DiscordIPC) | Java |
|
||||
| [Discord Rich Presence](https://npmjs.org/discord-rich-presence) | JavaScript |
|
||||
| [drpc4k](https://github.com/Bluexin/drpc4k) | [Kotlin](https://kotlinlang.org/) |
|
||||
| [lua-discordRPC](https://github.com/pfirsich/lua-discordRPC) | LuaJIT (FFI) |
|
||||
| [pypresence](https://github.com/qwertyquerty/pypresence) | [Python](https://python.org/) |
|
||||
| [SwordRPC](https://github.com/Azoy/SwordRPC) | [Swift](https://swift.org) |
|
17
deps/discord-rpc/appveyor.yml
vendored
17
deps/discord-rpc/appveyor.yml
vendored
@ -1,17 +0,0 @@
|
||||
version: '{build}'
|
||||
install:
|
||||
- python -m pip install click
|
||||
|
||||
build_script:
|
||||
- mkdir examples\unrealstatus\Plugins\discordrpc\Binaries\ThirdParty\discordrpcLibrary\Win64
|
||||
- python build.py
|
||||
|
||||
artifacts:
|
||||
- path: builds\install\win32-dynamic
|
||||
name: win32-dynamic
|
||||
- path: builds\install\win32-static
|
||||
name: win32-static
|
||||
- path: builds\install\win64-dynamic
|
||||
name: win64-dynamic
|
||||
- path: builds\install\win64-static
|
||||
name: win64-static
|
304
deps/discord-rpc/build.py
vendored
304
deps/discord-rpc/build.py
vendored
@ -1,304 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import shutil
|
||||
import zipfile
|
||||
from contextlib import contextmanager
|
||||
import click
|
||||
|
||||
|
||||
def get_platform():
|
||||
""" a name for the platform """
|
||||
if sys.platform.startswith('win'):
|
||||
return 'win'
|
||||
elif sys.platform == 'darwin':
|
||||
return 'osx'
|
||||
elif sys.platform.startswith('linux'):
|
||||
return 'linux'
|
||||
raise Exception('Unsupported platform ' + sys.platform)
|
||||
|
||||
|
||||
SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||
# we use Buildkite which sets this env variable by default
|
||||
IS_BUILD_MACHINE = os.environ.get('CI', '') == 'true'
|
||||
PLATFORM = get_platform()
|
||||
INSTALL_ROOT = os.path.join(SCRIPT_PATH, 'builds', 'install')
|
||||
|
||||
|
||||
def get_signtool():
|
||||
""" get path to code signing tool """
|
||||
if PLATFORM == 'win':
|
||||
sdk_dir = 'c:\\Program Files (x86)\\Windows Kits\\10' # os.environ['WindowsSdkDir']
|
||||
return os.path.join(sdk_dir, 'bin', 'x86', 'signtool.exe')
|
||||
elif PLATFORM == 'osx':
|
||||
return '/usr/bin/codesign'
|
||||
|
||||
|
||||
@contextmanager
|
||||
def cd(new_dir):
|
||||
""" Temporarily change current directory """
|
||||
if new_dir:
|
||||
old_dir = os.getcwd()
|
||||
os.chdir(new_dir)
|
||||
yield
|
||||
if new_dir:
|
||||
os.chdir(old_dir)
|
||||
|
||||
|
||||
def mkdir_p(path):
|
||||
""" mkdir -p """
|
||||
if not os.path.isdir(path):
|
||||
click.secho('Making ' + path, fg='yellow')
|
||||
os.makedirs(path)
|
||||
|
||||
|
||||
@click.group(invoke_without_command=True)
|
||||
@click.pass_context
|
||||
@click.option('--clean', is_flag=True)
|
||||
def cli(ctx, clean):
|
||||
""" click wrapper for command line stuff """
|
||||
if ctx.invoked_subcommand is None:
|
||||
ctx.invoke(libs, clean=clean)
|
||||
if IS_BUILD_MACHINE:
|
||||
ctx.invoke(sign)
|
||||
ctx.invoke(archive)
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.pass_context
|
||||
def unity(ctx):
|
||||
""" build just dynamic libs for use in unity project """
|
||||
ctx.invoke(libs, clean=False, static=False, shared=True, skip_formatter=True, just_release=True)
|
||||
BUILDS = []
|
||||
|
||||
click.echo('--- Copying libs and header into unity example')
|
||||
UNITY_PROJECT_PATH = os.path.join(SCRIPT_PATH, 'examples', 'button-clicker', 'Assets', 'Plugins')
|
||||
|
||||
if sys.platform.startswith('win'):
|
||||
LIBRARY_NAME = 'discord-rpc.dll'
|
||||
BUILD_64_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'win64-dynamic', 'src', 'Release')
|
||||
UNITY_64_DLL_PATH = os.path.join(UNITY_PROJECT_PATH, 'x86_64')
|
||||
BUILDS.append({BUILD_64_BASE_PATH: UNITY_64_DLL_PATH})
|
||||
|
||||
BUILD_32_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'win32-dynamic', 'src', 'Release')
|
||||
UNITY_32_DLL_PATH = os.path.join(UNITY_PROJECT_PATH, 'x86')
|
||||
BUILDS.append({BUILD_32_BASE_PATH: UNITY_32_DLL_PATH})
|
||||
|
||||
elif sys.platform == 'darwin':
|
||||
LIBRARY_NAME = 'discord-rpc.bundle'
|
||||
BUILD_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'osx-dynamic', 'src')
|
||||
UNITY_DLL_PATH = UNITY_PROJECT_PATH
|
||||
os.rename(
|
||||
os.path.join(BUILD_BASE_PATH, 'libdiscord-rpc.dylib'), os.path.join(BUILD_BASE_PATH, 'discord-rpc.bundle'))
|
||||
|
||||
BUILDS.append({BUILD_BASE_PATH: UNITY_DLL_PATH})
|
||||
|
||||
elif sys.platform.startswith('linux'):
|
||||
LIBRARY_NAME = 'discord-rpc.so'
|
||||
BUILD_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'linux-dynamic', 'src')
|
||||
UNITY_DLL_PATH = os.path.join(UNITY_PROJECT_PATH, 'x86')
|
||||
os.rename(os.path.join(BUILD_BASE_PATH, 'libdiscord-rpc.so'), os.path.join(BUILD_BASE_PATH, 'discord-rpc.so'))
|
||||
|
||||
BUILDS.append({BUILD_BASE_PATH: UNITY_DLL_PATH})
|
||||
|
||||
else:
|
||||
raise Exception('Unsupported platform ' + sys.platform)
|
||||
|
||||
for build in BUILDS:
|
||||
for i in build:
|
||||
mkdir_p(build[i])
|
||||
shutil.copy(os.path.join(i, LIBRARY_NAME), build[i])
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.pass_context
|
||||
def unreal(ctx):
|
||||
""" build libs and copy them into the unreal project """
|
||||
ctx.invoke(libs, clean=False, static=False, shared=True, skip_formatter=True, just_release=True)
|
||||
BUILDS = []
|
||||
|
||||
click.echo('--- Copying libs and header into unreal example')
|
||||
UNREAL_PROJECT_PATH = os.path.join(SCRIPT_PATH, 'examples', 'unrealstatus', 'Plugins', 'discordrpc')
|
||||
UNREAL_INCLUDE_PATH = os.path.join(UNREAL_PROJECT_PATH, 'Source', 'ThirdParty', 'DiscordRpcLibrary', 'Include')
|
||||
mkdir_p(UNREAL_INCLUDE_PATH)
|
||||
shutil.copy(os.path.join(SCRIPT_PATH, 'include', 'discord_rpc.h'), UNREAL_INCLUDE_PATH)
|
||||
|
||||
if sys.platform.startswith('win'):
|
||||
LIBRARY_NAME = 'discord-rpc.lib'
|
||||
BUILD_64_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'win64-dynamic', 'src', 'Release')
|
||||
UNREAL_64_DLL_PATH = os.path.join(UNREAL_PROJECT_PATH, 'Source', 'ThirdParty', 'DiscordRpcLibrary', 'Win64')
|
||||
BUILDS.append({BUILD_64_BASE_PATH: UNREAL_64_DLL_PATH})
|
||||
|
||||
BUILD_32_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'win32-dynamic', 'src', 'Release')
|
||||
UNREAL_32_DLL_PATH = os.path.join(UNREAL_PROJECT_PATH, 'Source', 'ThirdParty', 'DiscordRpcLibrary', 'Win32')
|
||||
BUILDS.append({BUILD_32_BASE_PATH: UNREAL_32_DLL_PATH})
|
||||
|
||||
elif sys.platform == 'darwin':
|
||||
LIBRARY_NAME = 'libdiscord-rpc.dylib'
|
||||
BUILD_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'osx-dynamic', 'src')
|
||||
UNREAL_DLL_PATH = os.path.join(UNREAL_PROJECT_PATH, 'Source', 'ThirdParty', 'DiscordRpcLibrary', 'Mac')
|
||||
|
||||
BUILDS.append({BUILD_BASE_PATH: UNREAL_DLL_PATH})
|
||||
|
||||
elif sys.platform.startswith('linux'):
|
||||
LIBRARY_NAME = 'libdiscord-rpc.so'
|
||||
BUILD_BASE_PATH = os.path.join(SCRIPT_PATH, 'builds', 'linux-dynamic', 'src')
|
||||
UNREAL_DLL_PATH = os.path.join(UNREAL_PROJECT_PATH, 'Source', 'ThirdParty', 'DiscordRpcLibrary', 'Linux')
|
||||
|
||||
BUILDS.append({BUILD_BASE_PATH: UNREAL_DLL_PATH})
|
||||
|
||||
else:
|
||||
raise Exception('Unsupported platform ' + sys.platform)
|
||||
|
||||
for build in BUILDS:
|
||||
for i in build:
|
||||
mkdir_p(build[i])
|
||||
shutil.copy(os.path.join(i, LIBRARY_NAME), build[i])
|
||||
|
||||
|
||||
def build_lib(build_name, generator, options, just_release):
|
||||
""" Create a dir under builds, run build and install in it """
|
||||
build_path = os.path.join(SCRIPT_PATH, 'builds', build_name)
|
||||
install_path = os.path.join(INSTALL_ROOT, build_name)
|
||||
mkdir_p(build_path)
|
||||
mkdir_p(install_path)
|
||||
with cd(build_path):
|
||||
initial_cmake = ['cmake', SCRIPT_PATH, '-DCMAKE_INSTALL_PREFIX=%s' % os.path.join('..', 'install', build_name)]
|
||||
if generator:
|
||||
initial_cmake.extend(['-G', generator])
|
||||
for key in options:
|
||||
val = options[key]
|
||||
if type(val) is bool:
|
||||
val = 'ON' if val else 'OFF'
|
||||
initial_cmake.append('-D%s=%s' % (key, val))
|
||||
click.echo('--- Building ' + build_name)
|
||||
subprocess.check_call(initial_cmake)
|
||||
if not just_release:
|
||||
subprocess.check_call(['cmake', '--build', '.', '--config', 'Debug'])
|
||||
subprocess.check_call(['cmake', '--build', '.', '--config', 'Release', '--target', 'install'])
|
||||
|
||||
|
||||
@cli.command()
|
||||
def archive():
|
||||
""" create zip of install dir """
|
||||
click.echo('--- Archiving')
|
||||
archive_file_path = os.path.join(SCRIPT_PATH, 'builds', 'discord-rpc-%s.zip' % get_platform())
|
||||
archive_file = zipfile.ZipFile(archive_file_path, 'w', zipfile.ZIP_DEFLATED)
|
||||
archive_src_base_path = INSTALL_ROOT
|
||||
archive_dst_base_path = 'discord-rpc'
|
||||
with cd(archive_src_base_path):
|
||||
for path, _, filenames in os.walk('.'):
|
||||
for fname in filenames:
|
||||
fpath = os.path.join(path, fname)
|
||||
dst_path = os.path.normpath(os.path.join(archive_dst_base_path, fpath))
|
||||
click.echo('Adding ' + dst_path)
|
||||
archive_file.write(fpath, dst_path)
|
||||
|
||||
|
||||
@cli.command()
|
||||
def sign():
|
||||
""" Do code signing within install directory using our cert """
|
||||
tool = get_signtool()
|
||||
signable_extensions = set()
|
||||
if PLATFORM == 'win':
|
||||
signable_extensions.add('.dll')
|
||||
sign_command_base = [
|
||||
tool,
|
||||
'sign',
|
||||
'/n',
|
||||
'Discord Inc.',
|
||||
'/a',
|
||||
'/tr',
|
||||
'http://timestamp.digicert.com/rfc3161',
|
||||
'/as',
|
||||
'/td',
|
||||
'sha256',
|
||||
'/fd',
|
||||
'sha256',
|
||||
]
|
||||
elif PLATFORM == 'osx':
|
||||
signable_extensions.add('.dylib')
|
||||
sign_command_base = [
|
||||
tool,
|
||||
'--keychain',
|
||||
os.path.expanduser('~/Library/Keychains/login.keychain'),
|
||||
'-vvvv',
|
||||
'--deep',
|
||||
'--force',
|
||||
'--sign',
|
||||
'Developer ID Application: Hammer & Chisel Inc. (53Q6R32WPB)',
|
||||
]
|
||||
else:
|
||||
click.secho('Not signing things on this platform yet', fg='red')
|
||||
return
|
||||
|
||||
click.echo('--- Signing')
|
||||
for path, _, filenames in os.walk(INSTALL_ROOT):
|
||||
for fname in filenames:
|
||||
ext = os.path.splitext(fname)[1]
|
||||
if ext not in signable_extensions:
|
||||
continue
|
||||
fpath = os.path.join(path, fname)
|
||||
click.echo('Sign ' + fpath)
|
||||
sign_command = sign_command_base + [fpath]
|
||||
subprocess.check_call(sign_command)
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option('--clean', is_flag=True)
|
||||
@click.option('--static', is_flag=True)
|
||||
@click.option('--shared', is_flag=True)
|
||||
@click.option('--skip_formatter', is_flag=True)
|
||||
@click.option('--just_release', is_flag=True)
|
||||
def libs(clean, static, shared, skip_formatter, just_release):
|
||||
""" Do all the builds for this platform """
|
||||
if clean:
|
||||
shutil.rmtree('builds', ignore_errors=True)
|
||||
|
||||
mkdir_p('builds')
|
||||
|
||||
if not (static or shared):
|
||||
static = True
|
||||
shared = True
|
||||
|
||||
static_options = {}
|
||||
dynamic_options = {
|
||||
'BUILD_SHARED_LIBS': True,
|
||||
'USE_STATIC_CRT': True,
|
||||
}
|
||||
|
||||
if skip_formatter or IS_BUILD_MACHINE:
|
||||
static_options['CLANG_FORMAT_SUFFIX'] = 'none'
|
||||
dynamic_options['CLANG_FORMAT_SUFFIX'] = 'none'
|
||||
|
||||
if IS_BUILD_MACHINE:
|
||||
just_release = True
|
||||
static_options['WARNINGS_AS_ERRORS'] = True
|
||||
dynamic_options['WARNINGS_AS_ERRORS'] = True
|
||||
|
||||
if PLATFORM == 'win':
|
||||
generator32 = 'Visual Studio 14 2015'
|
||||
generator64 = 'Visual Studio 14 2015 Win64'
|
||||
if static:
|
||||
build_lib('win32-static', generator32, static_options, just_release)
|
||||
build_lib('win64-static', generator64, static_options, just_release)
|
||||
if shared:
|
||||
build_lib('win32-dynamic', generator32, dynamic_options, just_release)
|
||||
build_lib('win64-dynamic', generator64, dynamic_options, just_release)
|
||||
elif PLATFORM == 'osx':
|
||||
if static:
|
||||
build_lib('osx-static', None, static_options, just_release)
|
||||
if shared:
|
||||
build_lib('osx-dynamic', None, dynamic_options, just_release)
|
||||
elif PLATFORM == 'linux':
|
||||
if static:
|
||||
build_lib('linux-static', None, static_options, just_release)
|
||||
if shared:
|
||||
build_lib('linux-dynamic', None, dynamic_options, just_release)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
os.chdir(SCRIPT_PATH)
|
||||
sys.exit(cli())
|
164
deps/discord-rpc/documentation/hard-mode.md
vendored
164
deps/discord-rpc/documentation/hard-mode.md
vendored
@ -1,164 +0,0 @@
|
||||
# Hard Mode: Roll Your Own Client
|
||||
|
||||
Discord's Rich Presence feature is designed as an obfuscated addition to our existing [RPC infrastructure](https://discordapp.com/developers/docs/topics/rpc). The standalone library and header files make it easy for any dev to drop it into their game.
|
||||
|
||||
Our library communicates with Discord over the local Discord RPC socket. We've already done the work in connecting properly, handling disconnects and reconnects, and other RPC intracacies, but those who have done this implementation for our private alpha Voice and Chat SDK can simply make use of the new RPC commands and events to implement Rich Presence.
|
||||
|
||||
## Hark! A warning!
|
||||
|
||||
By committing to an RPC-only integration, you decide to forego the work our library and header file have done for you in the way of error handling, state storage, disconnecting and reconnecting, and other quality of life abstractions. While simply implementing the new RPC command and events will enable Rich Presence for your game, we highly suggest that you do your best to mimic the functionality of the SDK the most that you can. It ensure not only code quality on your part, but also an excellent experience on the part of your players.
|
||||
|
||||
## Application Protocol Registration
|
||||
|
||||
One thing that cannot be explicitly done over RPC is registering an application protocol for your game. If you choose to do an RPC-only implementation, you will have to register your application protocol yourself in the format of `discord-[your_app_id]://`. You can use `Discord_Register()` as a good(?) example of how to properly register an application protocol for use with Discord. For OSX and Linux it is probably simpler to handle the protocol registration as part of your install/packaging.
|
||||
|
||||
## New RPC Command
|
||||
|
||||
The new RPC command for Rich Presence is `SET_ACTIVITY`. The fields are similar to what is outlined in the SDK; we've combined similar fields into objects for the sake of less data on the wire.
|
||||
|
||||
The one major difference is the `party.size` field. It is an array with a size of two. The first element is the current party size, `partySize` from the main documentation. The second element is the maximum party size, `partyMax` from the main documentation.
|
||||
|
||||
Below is a full example of a `SET_ACTIVITY` command. Field restrictions like size are the same as outlined in the main documentation.
|
||||
|
||||
```
|
||||
{
|
||||
"cmd": "SET_ACTIVITY",
|
||||
"args": {
|
||||
"pid": 9999, // Your application's process id - required field
|
||||
"activity": {
|
||||
"state": "In a Group",
|
||||
"details": "Competitive | In a Match",
|
||||
"timestamps": {
|
||||
"start": time(nullptr),
|
||||
"end": time(nullptr) + ((60 * 5) + 23)
|
||||
},
|
||||
"assets": {
|
||||
"large_image": "numbani_map",
|
||||
"large_text": "Numbani",
|
||||
"small_image": "pharah_profile",
|
||||
"small_text": "Pharah"
|
||||
},
|
||||
"party": {
|
||||
"id": GameEngine.GetPartyId(),
|
||||
"size": [3, 6]
|
||||
},
|
||||
"secrets": {
|
||||
"join": "025ed05c71f639de8bfaa0d679d7c94b2fdce12f",
|
||||
"spectate": "e7eb30d2ee025ed05c71ea495f770b76454ee4e0",
|
||||
"match": "4b2fdce12f639de8bfa7e3591b71a0d679d7c93f"
|
||||
},
|
||||
"instance": true
|
||||
}
|
||||
},
|
||||
"nonce": "647d814a-4cf8-4fbb-948f-898abd24f55b"
|
||||
}
|
||||
```
|
||||
|
||||
## New RPC Events
|
||||
|
||||
The three new RPC events for Rich Presence power the ability to join and spectate your friends' games.
|
||||
|
||||
First is the `ACTIVITY_JOIN` event:
|
||||
|
||||
```json
|
||||
{
|
||||
"cmd": "DISPATCH",
|
||||
"data": {
|
||||
"secret": "025ed05c71f639de8bfaa0d679d7c94b2fdce12f"
|
||||
},
|
||||
"evt": "ACTIVITY_JOIN"
|
||||
}
|
||||
```
|
||||
|
||||
Second is the `ACTIVITY_SPECTATE` event:
|
||||
|
||||
```json
|
||||
{
|
||||
"cmd": "DISPATCH",
|
||||
"data": {
|
||||
"secret": "e7eb30d2ee025ed05c71ea495f770b76454ee4e0"
|
||||
},
|
||||
"evt": "ACTIVITY_SPECTATE"
|
||||
}
|
||||
```
|
||||
|
||||
And third is the `ACTIVITY_JOIN_REQUEST` event:
|
||||
|
||||
```json
|
||||
{
|
||||
"cmd": "DISPATCH",
|
||||
"data": {
|
||||
"user": {
|
||||
"id": "53908232506183680",
|
||||
"username": "Mason",
|
||||
"discriminator": "1337",
|
||||
"avatar": "a_bab14f271d565501444b2ca3be944b25"
|
||||
}
|
||||
},
|
||||
"evt": "ACTIVITY_JOIN_REQUEST"
|
||||
}
|
||||
```
|
||||
|
||||
In order to receive these events, you need to [subscribe](https://discordapp.com/developers/docs/topics/rpc#subscribe) to them like so:
|
||||
|
||||
```json
|
||||
{
|
||||
"nonce": "be9a6de3-31d0-4767-a8e9-4818c5690015",
|
||||
"evt": "ACTIVITY_JOIN",
|
||||
"cmd": "SUBSCRIBE"
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"nonce": "ae9qdde3-31d0-8989-a8e9-dnakwy174he",
|
||||
"evt": "ACTIVITY_SPECTATE",
|
||||
"cmd": "SUBSCRIBE"
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"nonce": "5dc0c062-98c6-47a0-8922-bbb52e9d6afa",
|
||||
"evt": "ACTIVITY_JOIN_REQUEST",
|
||||
"cmd": "SUBSCRIBE"
|
||||
}
|
||||
```
|
||||
|
||||
To unsubscribe from these events, resend with the command `UNSUBSCRIBE`
|
||||
|
||||
## Responding
|
||||
A discord user will request access to the game. If the ACTIVITY_JOIN_REQUEST has been subscribed too, the ACTIVITY_JOIN_REQUEST event will be sent to the host's game. Accept it with following model:
|
||||
```json
|
||||
{
|
||||
"nonce": "5dc0c062-98c6-47a0-8922-15aerg126",
|
||||
"cmd": "SEND_ACTIVITY_JOIN_INVITE",
|
||||
"args":
|
||||
{
|
||||
"user_id": "53908232506183680"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
To reject the request, use `CLOSE_ACTIVITY_REQUEST`:
|
||||
```json
|
||||
{
|
||||
"nonce": "5dc0c062-98c6-47a0-8922-dasg256eafg",
|
||||
"cmd": "CLOSE_ACTIVITY_REQUEST",
|
||||
"args":
|
||||
{
|
||||
"user_id": "53908232506183680"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
Here are just some quick notes to help with some common troubleshooting problems.
|
||||
* IPC will echo back every command you send as a response. Use this as a lock-step feature to avoid flooding messages. Can be used to validate messages such as the Presence or Subscribes.
|
||||
* The pipe expects for frames to be written in a single byte array. You cannot do multiple `stream.Write(opcode);` `stream.Write(length);` as it will break the pipe. Instead create a buffer, write the data to the buffer, then send the entire buffer to the stream.
|
||||
* Discord can be on any pipe ranging from `discord-ipc-0` to `discord-ipc-9`. It is a good idea to try and connect to each one and keeping the first one you connect too. For multiple clients (eg Discord and Canary), you might want to add a feature to manually select the pipe so you can more easily debug the application.
|
||||
* All enums are `lower_snake_case`.
|
||||
* The opcode and length in the header are `Little Endian Unsigned Integers (32bits)`. In some languages, you must convert them as they can be architecture specific.
|
||||
* [Discord Rich Presence How-To](https://discordapp.com/developers/docs/rich-presence/how-to) contains a lot of the information this document doesn't. For example, it will tell you about the response payload.
|
||||
* In the documentation, DISCORD_REPLY_IGNORE is just implemented the same as DISCORD_REPLY_NO.
|
||||
* You can test the Join / Spectate feature by enabling them in your profile and whitelisting a test account. Use Canary to run 2 accounts on the same machine.
|
Binary file not shown.
Before Width: | Height: | Size: 318 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
Before Width: | Height: | Size: 14 KiB |
@ -1,8 +0,0 @@
|
||||
/Library/
|
||||
/Temp/
|
||||
/obj/
|
||||
/Assets/Plugins/
|
||||
/Assets/Plugins.meta
|
||||
*.sln
|
||||
*.csproj
|
||||
*.userprefs
|
@ -1,125 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
[System.Serializable]
|
||||
public class DiscordJoinEvent : UnityEngine.Events.UnityEvent<string> { }
|
||||
|
||||
[System.Serializable]
|
||||
public class DiscordSpectateEvent : UnityEngine.Events.UnityEvent<string> { }
|
||||
|
||||
[System.Serializable]
|
||||
public class DiscordJoinRequestEvent : UnityEngine.Events.UnityEvent<DiscordRpc.DiscordUser> { }
|
||||
|
||||
public class DiscordController : MonoBehaviour
|
||||
{
|
||||
public DiscordRpc.RichPresence presence = new DiscordRpc.RichPresence();
|
||||
public string applicationId;
|
||||
public string optionalSteamId;
|
||||
public int clickCounter;
|
||||
public DiscordRpc.DiscordUser joinRequest;
|
||||
public UnityEngine.Events.UnityEvent onConnect;
|
||||
public UnityEngine.Events.UnityEvent onDisconnect;
|
||||
public UnityEngine.Events.UnityEvent hasResponded;
|
||||
public DiscordJoinEvent onJoin;
|
||||
public DiscordJoinEvent onSpectate;
|
||||
public DiscordJoinRequestEvent onJoinRequest;
|
||||
|
||||
DiscordRpc.EventHandlers handlers;
|
||||
|
||||
public void OnClick()
|
||||
{
|
||||
Debug.Log("Discord: on click!");
|
||||
clickCounter++;
|
||||
|
||||
presence.details = string.Format("Button clicked {0} times", clickCounter);
|
||||
presence.joinSecret = "aSecret";
|
||||
presence.partyId = "aPartyId";
|
||||
presence.partySize = 1;
|
||||
presence.partyMax = 3;
|
||||
presence.partyPrivacy = DiscordRpc.PartyPrivacy.Public;
|
||||
|
||||
DiscordRpc.UpdatePresence(presence);
|
||||
}
|
||||
|
||||
public void RequestRespondYes()
|
||||
{
|
||||
Debug.Log("Discord: responding yes to Ask to Join request");
|
||||
DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.Yes);
|
||||
hasResponded.Invoke();
|
||||
}
|
||||
|
||||
public void RequestRespondNo()
|
||||
{
|
||||
Debug.Log("Discord: responding no to Ask to Join request");
|
||||
DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.No);
|
||||
hasResponded.Invoke();
|
||||
}
|
||||
|
||||
public void ReadyCallback(ref DiscordRpc.DiscordUser connectedUser)
|
||||
{
|
||||
Debug.Log(string.Format("Discord: connected to {0}#{1}: {2}", connectedUser.username, connectedUser.discriminator, connectedUser.userId));
|
||||
onConnect.Invoke();
|
||||
}
|
||||
|
||||
public void DisconnectedCallback(int errorCode, string message)
|
||||
{
|
||||
Debug.Log(string.Format("Discord: disconnect {0}: {1}", errorCode, message));
|
||||
onDisconnect.Invoke();
|
||||
}
|
||||
|
||||
public void ErrorCallback(int errorCode, string message)
|
||||
{
|
||||
Debug.Log(string.Format("Discord: error {0}: {1}", errorCode, message));
|
||||
}
|
||||
|
||||
public void JoinCallback(string secret)
|
||||
{
|
||||
Debug.Log(string.Format("Discord: join ({0})", secret));
|
||||
onJoin.Invoke(secret);
|
||||
}
|
||||
|
||||
public void SpectateCallback(string secret)
|
||||
{
|
||||
Debug.Log(string.Format("Discord: spectate ({0})", secret));
|
||||
onSpectate.Invoke(secret);
|
||||
}
|
||||
|
||||
public void RequestCallback(ref DiscordRpc.DiscordUser request)
|
||||
{
|
||||
Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.username, request.discriminator, request.userId));
|
||||
joinRequest = request;
|
||||
onJoinRequest.Invoke(request);
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
DiscordRpc.RunCallbacks();
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
Debug.Log("Discord: init");
|
||||
handlers = new DiscordRpc.EventHandlers();
|
||||
handlers.readyCallback += ReadyCallback;
|
||||
handlers.disconnectedCallback += DisconnectedCallback;
|
||||
handlers.errorCallback += ErrorCallback;
|
||||
handlers.joinCallback += JoinCallback;
|
||||
handlers.spectateCallback += SpectateCallback;
|
||||
handlers.requestCallback += RequestCallback;
|
||||
DiscordRpc.Initialize(applicationId, ref handlers, true, optionalSteamId);
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
Debug.Log("Discord: shutdown");
|
||||
DiscordRpc.Shutdown();
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@ -1,231 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using AOT;
|
||||
|
||||
public class DiscordRpc
|
||||
{
|
||||
[MonoPInvokeCallback(typeof(OnReadyInfo))]
|
||||
public static void ReadyCallback(ref DiscordUser connectedUser) { Callbacks.readyCallback(ref connectedUser); }
|
||||
public delegate void OnReadyInfo(ref DiscordUser connectedUser);
|
||||
|
||||
[MonoPInvokeCallback(typeof(OnDisconnectedInfo))]
|
||||
public static void DisconnectedCallback(int errorCode, string message) { Callbacks.disconnectedCallback(errorCode, message); }
|
||||
public delegate void OnDisconnectedInfo(int errorCode, string message);
|
||||
|
||||
[MonoPInvokeCallback(typeof(OnErrorInfo))]
|
||||
public static void ErrorCallback(int errorCode, string message) { Callbacks.errorCallback(errorCode, message); }
|
||||
public delegate void OnErrorInfo(int errorCode, string message);
|
||||
|
||||
[MonoPInvokeCallback(typeof(OnJoinInfo))]
|
||||
public static void JoinCallback(string secret) { Callbacks.joinCallback(secret); }
|
||||
public delegate void OnJoinInfo(string secret);
|
||||
|
||||
[MonoPInvokeCallback(typeof(OnSpectateInfo))]
|
||||
public static void SpectateCallback(string secret) { Callbacks.spectateCallback(secret); }
|
||||
public delegate void OnSpectateInfo(string secret);
|
||||
|
||||
[MonoPInvokeCallback(typeof(OnRequestInfo))]
|
||||
public static void RequestCallback(ref DiscordUser request) { Callbacks.requestCallback(ref request); }
|
||||
public delegate void OnRequestInfo(ref DiscordUser request);
|
||||
|
||||
static EventHandlers Callbacks { get; set; }
|
||||
|
||||
public struct EventHandlers
|
||||
{
|
||||
public OnReadyInfo readyCallback;
|
||||
public OnDisconnectedInfo disconnectedCallback;
|
||||
public OnErrorInfo errorCallback;
|
||||
public OnJoinInfo joinCallback;
|
||||
public OnSpectateInfo spectateCallback;
|
||||
public OnRequestInfo requestCallback;
|
||||
}
|
||||
|
||||
[Serializable, StructLayout(LayoutKind.Sequential)]
|
||||
public struct RichPresenceStruct
|
||||
{
|
||||
public IntPtr state; /* max 128 bytes */
|
||||
public IntPtr details; /* max 128 bytes */
|
||||
public long startTimestamp;
|
||||
public long endTimestamp;
|
||||
public IntPtr largeImageKey; /* max 32 bytes */
|
||||
public IntPtr largeImageText; /* max 128 bytes */
|
||||
public IntPtr smallImageKey; /* max 32 bytes */
|
||||
public IntPtr smallImageText; /* max 128 bytes */
|
||||
public IntPtr partyId; /* max 128 bytes */
|
||||
public int partySize;
|
||||
public int partyMax;
|
||||
public int partyPrivacy;
|
||||
public IntPtr matchSecret; /* max 128 bytes */
|
||||
public IntPtr joinSecret; /* max 128 bytes */
|
||||
public IntPtr spectateSecret; /* max 128 bytes */
|
||||
public bool instance;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public struct DiscordUser
|
||||
{
|
||||
public string userId;
|
||||
public string username;
|
||||
public string discriminator;
|
||||
public string avatar;
|
||||
}
|
||||
|
||||
public enum Reply
|
||||
{
|
||||
No = 0,
|
||||
Yes = 1,
|
||||
Ignore = 2
|
||||
}
|
||||
|
||||
public enum PartyPrivacy
|
||||
{
|
||||
Private = 0,
|
||||
Public = 1
|
||||
}
|
||||
|
||||
public static void Initialize(string applicationId, ref EventHandlers handlers, bool autoRegister, string optionalSteamId)
|
||||
{
|
||||
Callbacks = handlers;
|
||||
|
||||
EventHandlers staticEventHandlers = new EventHandlers();
|
||||
staticEventHandlers.readyCallback += DiscordRpc.ReadyCallback;
|
||||
staticEventHandlers.disconnectedCallback += DiscordRpc.DisconnectedCallback;
|
||||
staticEventHandlers.errorCallback += DiscordRpc.ErrorCallback;
|
||||
staticEventHandlers.joinCallback += DiscordRpc.JoinCallback;
|
||||
staticEventHandlers.spectateCallback += DiscordRpc.SpectateCallback;
|
||||
staticEventHandlers.requestCallback += DiscordRpc.RequestCallback;
|
||||
|
||||
InitializeInternal(applicationId, ref staticEventHandlers, autoRegister, optionalSteamId);
|
||||
}
|
||||
|
||||
[DllImport("discord-rpc", EntryPoint = "Discord_Initialize", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void InitializeInternal(string applicationId, ref EventHandlers handlers, bool autoRegister, string optionalSteamId);
|
||||
|
||||
[DllImport("discord-rpc", EntryPoint = "Discord_Shutdown", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void Shutdown();
|
||||
|
||||
[DllImport("discord-rpc", EntryPoint = "Discord_RunCallbacks", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void RunCallbacks();
|
||||
|
||||
[DllImport("discord-rpc", EntryPoint = "Discord_UpdatePresence", CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern void UpdatePresenceNative(ref RichPresenceStruct presence);
|
||||
|
||||
[DllImport("discord-rpc", EntryPoint = "Discord_ClearPresence", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void ClearPresence();
|
||||
|
||||
[DllImport("discord-rpc", EntryPoint = "Discord_Respond", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void Respond(string userId, Reply reply);
|
||||
|
||||
[DllImport("discord-rpc", EntryPoint = "Discord_UpdateHandlers", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void UpdateHandlers(ref EventHandlers handlers);
|
||||
|
||||
public static void UpdatePresence(RichPresence presence)
|
||||
{
|
||||
var presencestruct = presence.GetStruct();
|
||||
UpdatePresenceNative(ref presencestruct);
|
||||
presence.FreeMem();
|
||||
}
|
||||
|
||||
public class RichPresence
|
||||
{
|
||||
private RichPresenceStruct _presence;
|
||||
private readonly List<IntPtr> _buffers = new List<IntPtr>(10);
|
||||
|
||||
public string state; /* max 128 bytes */
|
||||
public string details; /* max 128 bytes */
|
||||
public long startTimestamp;
|
||||
public long endTimestamp;
|
||||
public string largeImageKey; /* max 32 bytes */
|
||||
public string largeImageText; /* max 128 bytes */
|
||||
public string smallImageKey; /* max 32 bytes */
|
||||
public string smallImageText; /* max 128 bytes */
|
||||
public string partyId; /* max 128 bytes */
|
||||
public int partySize;
|
||||
public int partyMax;
|
||||
public PartyPrivacy partyPrivacy;
|
||||
public string matchSecret; /* max 128 bytes */
|
||||
public string joinSecret; /* max 128 bytes */
|
||||
public string spectateSecret; /* max 128 bytes */
|
||||
public bool instance;
|
||||
|
||||
/// <summary>
|
||||
/// Get the <see cref="RichPresenceStruct"/> reprensentation of this instance
|
||||
/// </summary>
|
||||
/// <returns><see cref="RichPresenceStruct"/> reprensentation of this instance</returns>
|
||||
internal RichPresenceStruct GetStruct()
|
||||
{
|
||||
if (_buffers.Count > 0)
|
||||
{
|
||||
FreeMem();
|
||||
}
|
||||
|
||||
_presence.state = StrToPtr(state);
|
||||
_presence.details = StrToPtr(details);
|
||||
_presence.startTimestamp = startTimestamp;
|
||||
_presence.endTimestamp = endTimestamp;
|
||||
_presence.largeImageKey = StrToPtr(largeImageKey);
|
||||
_presence.largeImageText = StrToPtr(largeImageText);
|
||||
_presence.smallImageKey = StrToPtr(smallImageKey);
|
||||
_presence.smallImageText = StrToPtr(smallImageText);
|
||||
_presence.partyId = StrToPtr(partyId);
|
||||
_presence.partySize = partySize;
|
||||
_presence.partyMax = partyMax;
|
||||
_presence.partyPrivacy = (int)partyPrivacy;
|
||||
_presence.matchSecret = StrToPtr(matchSecret);
|
||||
_presence.joinSecret = StrToPtr(joinSecret);
|
||||
_presence.spectateSecret = StrToPtr(spectateSecret);
|
||||
_presence.instance = instance;
|
||||
|
||||
return _presence;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a pointer to a representation of the given string with a size of maxbytes
|
||||
/// </summary>
|
||||
/// <param name="input">String to convert</param>
|
||||
/// <returns>Pointer to the UTF-8 representation of <see cref="input"/></returns>
|
||||
private IntPtr StrToPtr(string input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input)) return IntPtr.Zero;
|
||||
var convbytecnt = Encoding.UTF8.GetByteCount(input);
|
||||
var buffer = Marshal.AllocHGlobal(convbytecnt + 1);
|
||||
for (int i = 0; i < convbytecnt + 1; i++)
|
||||
{
|
||||
Marshal.WriteByte(buffer, i, 0);
|
||||
}
|
||||
_buffers.Add(buffer);
|
||||
Marshal.Copy(Encoding.UTF8.GetBytes(input), 0, buffer, convbytecnt);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert string to UTF-8 and add null termination
|
||||
/// </summary>
|
||||
/// <param name="toconv">string to convert</param>
|
||||
/// <returns>UTF-8 representation of <see cref="toconv"/> with added null termination</returns>
|
||||
private static string StrToUtf8NullTerm(string toconv)
|
||||
{
|
||||
var str = toconv.Trim();
|
||||
var bytes = Encoding.Default.GetBytes(str);
|
||||
if (bytes.Length > 0 && bytes[bytes.Length - 1] != 0)
|
||||
{
|
||||
str += "\0\0";
|
||||
}
|
||||
return Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(str));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Free the allocated memory for conversion to <see cref="RichPresenceStruct"/>
|
||||
/// </summary>
|
||||
internal void FreeMem()
|
||||
{
|
||||
for (var i = _buffers.Count - 1; i >= 0; i--)
|
||||
{
|
||||
Marshal.FreeHGlobal(_buffers[i]);
|
||||
_buffers.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,101 +0,0 @@
|
||||
using UnityEditor;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public class ScriptBatch
|
||||
{
|
||||
static ScriptBatch()
|
||||
{
|
||||
EnsureDLL();
|
||||
}
|
||||
|
||||
public static bool FileExists(string filename)
|
||||
{
|
||||
return new FileInfo(filename).Exists;
|
||||
}
|
||||
|
||||
public static bool RunRpcBuildScript()
|
||||
{
|
||||
UnityEngine.Debug.Log("Try to run build script");
|
||||
|
||||
Process proc = new Process();
|
||||
#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
|
||||
proc.StartInfo.UseShellExecute = false;
|
||||
// brew installs cmake in /usr/local/bin, which Unity seems to strip from PATH?
|
||||
string newPath = proc.StartInfo.EnvironmentVariables["PATH"] + ":/usr/local/bin";
|
||||
proc.StartInfo.EnvironmentVariables["PATH"] = newPath;
|
||||
#endif
|
||||
proc.StartInfo.FileName = "python";
|
||||
proc.StartInfo.Arguments = "build.py unity";
|
||||
proc.StartInfo.WorkingDirectory = "../..";
|
||||
proc.Start();
|
||||
proc.WaitForExit();
|
||||
return proc.ExitCode == 0;
|
||||
}
|
||||
|
||||
public static void EnsureDLL()
|
||||
{
|
||||
#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
|
||||
string[] dstDirs = { "Assets/Plugins", "Assets/Plugins/x86", "Assets/Plugins/x86_64" };
|
||||
string[] dstDlls = { "Assets/Plugins/x86/discord-rpc.dll", "Assets/Plugins/x86_64/discord-rpc.dll" };
|
||||
string[] srcDlls = { "../../builds/install/win64-dynamic/bin/discord-rpc.dll", "../../builds/install/win64-dynamic/bin/discord-rpc.dll" };
|
||||
#elif UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
|
||||
string[] dstDirs = { "Assets/Plugins" };
|
||||
string[] dstDlls = { "Assets/Plugins/discord-rpc.bundle" };
|
||||
string[] srcDlls = { "../../builds/install/osx-dynamic/lib/libdiscord-rpc.dylib" };
|
||||
#else
|
||||
string[] dstDirs = { "Assets/Plugins", "Assets/Plugins/x86", "Assets/Plugins/x86_64" };
|
||||
string[] dstDlls = { "Assets/Plugins/discord-rpc.so" };
|
||||
string[] srcDlls = { "../../builds/install/linux-dynamic/lib/libdiscord-rpc.so" };
|
||||
#endif
|
||||
|
||||
Debug.Assert(dstDlls.Length == srcDlls.Length);
|
||||
|
||||
bool exists = true;
|
||||
foreach (string fname in dstDlls)
|
||||
{
|
||||
if (!FileExists(fname))
|
||||
{
|
||||
exists = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (exists)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
exists = true;
|
||||
foreach (string fname in srcDlls)
|
||||
{
|
||||
if (!FileExists(fname))
|
||||
{
|
||||
exists = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!exists)
|
||||
{
|
||||
if (!RunRpcBuildScript())
|
||||
{
|
||||
UnityEngine.Debug.LogError("Build failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// make sure the dirs exist
|
||||
foreach (string dirname in dstDirs)
|
||||
{
|
||||
Directory.CreateDirectory(dirname);
|
||||
}
|
||||
|
||||
// Copy dlls
|
||||
for (int i = 0; i < dstDlls.Length; ++i)
|
||||
{
|
||||
FileUtil.CopyFileOrDirectory(srcDlls[i], dstDlls[i]);
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,17 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!11 &1
|
||||
AudioManager:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Volume: 1
|
||||
Rolloff Scale: 1
|
||||
Doppler Factor: 1
|
||||
Default Speaker Mode: 2
|
||||
m_SampleRate: 0
|
||||
m_DSPBufferSize: 0
|
||||
m_VirtualVoiceCount: 512
|
||||
m_RealVoiceCount: 32
|
||||
m_SpatializerPlugin:
|
||||
m_AmbisonicDecoderPlugin:
|
||||
m_DisableAudio: 0
|
||||
m_VirtualizeEffects: 1
|
@ -1,6 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!236 &1
|
||||
ClusterInputManager:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Inputs: []
|
@ -1,20 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!55 &1
|
||||
PhysicsManager:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 3
|
||||
m_Gravity: {x: 0, y: -9.81, z: 0}
|
||||
m_DefaultMaterial: {fileID: 0}
|
||||
m_BounceThreshold: 2
|
||||
m_SleepThreshold: 0.005
|
||||
m_DefaultContactOffset: 0.01
|
||||
m_DefaultSolverIterations: 6
|
||||
m_DefaultSolverVelocityIterations: 1
|
||||
m_QueriesHitBackfaces: 0
|
||||
m_QueriesHitTriggers: 1
|
||||
m_EnableAdaptiveForce: 0
|
||||
m_EnablePCM: 1
|
||||
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||
m_AutoSimulation: 1
|
||||
m_AutoSyncTransforms: 1
|
@ -1,10 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1045 &1
|
||||
EditorBuildSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Scenes:
|
||||
- enabled: 1
|
||||
path: Assets/main.unity
|
||||
guid: 3b03d21bb25fa494e8694cd6e4b6d769
|
@ -1,16 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!159 &1
|
||||
EditorSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 4
|
||||
m_ExternalVersionControlSupport: Visible Meta Files
|
||||
m_SerializationMode: 2
|
||||
m_DefaultBehaviorMode: 1
|
||||
m_SpritePackerMode: 4
|
||||
m_SpritePackerPaddingPower: 1
|
||||
m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd
|
||||
m_ProjectGenerationRootNamespace:
|
||||
m_UserGeneratedProjectSuffix:
|
||||
m_CollabEditorSettings:
|
||||
inProgressEnabled: 1
|
@ -1,61 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!30 &1
|
||||
GraphicsSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 12
|
||||
m_Deferred:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_DeferredReflections:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_ScreenSpaceShadows:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_LegacyDeferred:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_DepthNormals:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_MotionVectors:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_LightHalo:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_LensFlare:
|
||||
m_Mode: 1
|
||||
m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_AlwaysIncludedShaders:
|
||||
- {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
|
||||
- {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_PreloadedShaders: []
|
||||
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
|
||||
type: 0}
|
||||
m_CustomRenderPipeline: {fileID: 0}
|
||||
m_TransparencySortMode: 0
|
||||
m_TransparencySortAxis: {x: 0, y: 0, z: 1}
|
||||
m_DefaultRenderingPath: 1
|
||||
m_DefaultMobileRenderingPath: 1
|
||||
m_TierSettings: []
|
||||
m_LightmapStripping: 0
|
||||
m_FogStripping: 0
|
||||
m_InstancingStripping: 0
|
||||
m_LightmapKeepPlain: 1
|
||||
m_LightmapKeepDirCombined: 1
|
||||
m_LightmapKeepDynamicPlain: 1
|
||||
m_LightmapKeepDynamicDirCombined: 1
|
||||
m_LightmapKeepShadowMask: 1
|
||||
m_LightmapKeepSubtractive: 1
|
||||
m_FogKeepLinear: 1
|
||||
m_FogKeepExp: 1
|
||||
m_FogKeepExp2: 1
|
||||
m_AlbedoSwatchInfos: []
|
||||
m_LightsUseLinearIntensity: 0
|
||||
m_LightsUseColorTemperature: 0
|
@ -1,295 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!13 &1
|
||||
InputManager:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Axes:
|
||||
- serializedVersion: 3
|
||||
m_Name: Horizontal
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton: left
|
||||
positiveButton: right
|
||||
altNegativeButton: a
|
||||
altPositiveButton: d
|
||||
gravity: 3
|
||||
dead: 0.001
|
||||
sensitivity: 3
|
||||
snap: 1
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Vertical
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton: down
|
||||
positiveButton: up
|
||||
altNegativeButton: s
|
||||
altPositiveButton: w
|
||||
gravity: 3
|
||||
dead: 0.001
|
||||
sensitivity: 3
|
||||
snap: 1
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire1
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left ctrl
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 0
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire2
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left alt
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 1
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire3
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: left shift
|
||||
altNegativeButton:
|
||||
altPositiveButton: mouse 2
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Jump
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: space
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Mouse X
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0
|
||||
sensitivity: 0.1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 1
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Mouse Y
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0
|
||||
sensitivity: 0.1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 1
|
||||
axis: 1
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Mouse ScrollWheel
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0
|
||||
sensitivity: 0.1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 1
|
||||
axis: 2
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Horizontal
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0.19
|
||||
sensitivity: 1
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 2
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Vertical
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton:
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 0
|
||||
dead: 0.19
|
||||
sensitivity: 1
|
||||
snap: 0
|
||||
invert: 1
|
||||
type: 2
|
||||
axis: 1
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire1
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 0
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire2
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 1
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Fire3
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 2
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Jump
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: joystick button 3
|
||||
altNegativeButton:
|
||||
altPositiveButton:
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Submit
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: return
|
||||
altNegativeButton:
|
||||
altPositiveButton: joystick button 0
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Submit
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: enter
|
||||
altNegativeButton:
|
||||
altPositiveButton: space
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
||||
- serializedVersion: 3
|
||||
m_Name: Cancel
|
||||
descriptiveName:
|
||||
descriptiveNegativeName:
|
||||
negativeButton:
|
||||
positiveButton: escape
|
||||
altNegativeButton:
|
||||
altPositiveButton: joystick button 1
|
||||
gravity: 1000
|
||||
dead: 0.001
|
||||
sensitivity: 1000
|
||||
snap: 0
|
||||
invert: 0
|
||||
type: 0
|
||||
axis: 0
|
||||
joyNum: 0
|
@ -1,89 +0,0 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!126 &1
|
||||
NavMeshProjectSettings:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
areas:
|
||||
- name: Walkable
|
||||
cost: 1
|
||||
- name: Not Walkable
|
||||
cost: 1
|
||||
- name: Jump
|
||||
cost: 2
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
- name:
|
||||
cost: 1
|
||||
m_LastAgentTypeID: -887442657
|
||||
m_Settings:
|
||||
- serializedVersion: 2
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
agentSlope: 45
|
||||
agentClimb: 0.75
|
||||
ledgeDropHeight: 0
|
||||
maxJumpAcrossDistance: 0
|
||||
minRegionArea: 2
|
||||
manualCellSize: 0
|
||||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
accuratePlacement: 0
|
||||
m_SettingNames:
|
||||
- Humanoid
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user