Merge: Codechange: Use null pointer literal instead of the NULL macro
This commit is contained in:
@@ -31,7 +31,7 @@ ScriptConfigItem _start_date_config = {
|
||||
AI::START_NEXT_DEVIATION,
|
||||
30,
|
||||
SCRIPTCONFIG_NONE,
|
||||
NULL,
|
||||
nullptr,
|
||||
false
|
||||
};
|
||||
|
||||
@@ -52,7 +52,7 @@ AIConfig::AIConfig(const AIConfig *config) : ScriptConfig(config)
|
||||
} else {
|
||||
config = &_settings_game.ai_config[company];
|
||||
}
|
||||
if (*config == NULL) *config = new AIConfig();
|
||||
if (*config == nullptr) *config = new AIConfig();
|
||||
return *config;
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ ScriptInfo *AIConfig::FindInfo(const char *name, int version, bool force_exact_m
|
||||
bool AIConfig::ResetInfo(bool force_exact_match)
|
||||
{
|
||||
this->info = (ScriptInfo *)AI::FindInfo(this->name, force_exact_match ? this->version : -1, force_exact_match);
|
||||
return this->info != NULL;
|
||||
return this->info != nullptr;
|
||||
}
|
||||
|
||||
void AIConfig::PushExtraConfigList()
|
||||
@@ -90,7 +90,7 @@ void AIConfig::ClearConfigList()
|
||||
|
||||
int AIConfig::GetSetting(const char *name) const
|
||||
{
|
||||
if (this->info == NULL) {
|
||||
if (this->info == nullptr) {
|
||||
SettingValueList::const_iterator it = this->settings.find(name);
|
||||
if (it == this->settings.end()) {
|
||||
assert(strcmp("start_date", name) == 0);
|
||||
@@ -111,7 +111,7 @@ int AIConfig::GetSetting(const char *name) const
|
||||
|
||||
void AIConfig::SetSetting(const char *name, int value)
|
||||
{
|
||||
if (this->info == NULL) {
|
||||
if (this->info == nullptr) {
|
||||
if (strcmp("start_date", name) != 0) return;
|
||||
value = Clamp(value, AI::START_NEXT_MIN, AI::START_NEXT_MAX);
|
||||
|
||||
|
@@ -26,8 +26,8 @@
|
||||
#include "../safeguards.h"
|
||||
|
||||
/* static */ uint AI::frame_counter = 0;
|
||||
/* static */ AIScannerInfo *AI::scanner_info = NULL;
|
||||
/* static */ AIScannerLibrary *AI::scanner_library = NULL;
|
||||
/* static */ AIScannerInfo *AI::scanner_info = nullptr;
|
||||
/* static */ AIScannerLibrary *AI::scanner_library = nullptr;
|
||||
|
||||
/* static */ bool AI::CanStartNew()
|
||||
{
|
||||
@@ -44,9 +44,9 @@
|
||||
|
||||
AIConfig *config = AIConfig::GetConfig(company, AIConfig::SSS_FORCE_GAME);
|
||||
AIInfo *info = config->GetInfo();
|
||||
if (info == NULL || (rerandomise_ai && config->IsRandom())) {
|
||||
if (info == nullptr || (rerandomise_ai && config->IsRandom())) {
|
||||
info = AI::scanner_info->SelectRandomAI();
|
||||
assert(info != NULL);
|
||||
assert(info != nullptr);
|
||||
/* Load default data and store the name in the settings */
|
||||
config->Change(info->GetName(), -1, false, true);
|
||||
}
|
||||
@@ -56,7 +56,7 @@
|
||||
Company *c = Company::Get(company);
|
||||
|
||||
c->ai_info = info;
|
||||
assert(c->ai_instance == NULL);
|
||||
assert(c->ai_instance == nullptr);
|
||||
c->ai_instance = new AIInstance();
|
||||
c->ai_instance->Initialize(info);
|
||||
|
||||
@@ -111,8 +111,8 @@
|
||||
Company *c = Company::Get(company);
|
||||
|
||||
delete c->ai_instance;
|
||||
c->ai_instance = NULL;
|
||||
c->ai_info = NULL;
|
||||
c->ai_instance = nullptr;
|
||||
c->ai_info = nullptr;
|
||||
|
||||
cur_company.Restore();
|
||||
|
||||
@@ -164,10 +164,10 @@
|
||||
|
||||
/* static */ void AI::Initialize()
|
||||
{
|
||||
if (AI::scanner_info != NULL) AI::Uninitialize(true);
|
||||
if (AI::scanner_info != nullptr) AI::Uninitialize(true);
|
||||
|
||||
AI::frame_counter = 0;
|
||||
if (AI::scanner_info == NULL) {
|
||||
if (AI::scanner_info == nullptr) {
|
||||
TarScanner::DoScan(TarScanner::AI);
|
||||
AI::scanner_info = new AIScannerInfo();
|
||||
AI::scanner_info->Initialize();
|
||||
@@ -187,17 +187,17 @@
|
||||
} else {
|
||||
delete AI::scanner_info;
|
||||
delete AI::scanner_library;
|
||||
AI::scanner_info = NULL;
|
||||
AI::scanner_library = NULL;
|
||||
AI::scanner_info = nullptr;
|
||||
AI::scanner_library = nullptr;
|
||||
|
||||
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
||||
if (_settings_game.ai_config[c] != NULL) {
|
||||
if (_settings_game.ai_config[c] != nullptr) {
|
||||
delete _settings_game.ai_config[c];
|
||||
_settings_game.ai_config[c] = NULL;
|
||||
_settings_game.ai_config[c] = nullptr;
|
||||
}
|
||||
if (_settings_newgame.ai_config[c] != NULL) {
|
||||
if (_settings_newgame.ai_config[c] != nullptr) {
|
||||
delete _settings_newgame.ai_config[c];
|
||||
_settings_newgame.ai_config[c] = NULL;
|
||||
_settings_newgame.ai_config[c] = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -209,10 +209,10 @@
|
||||
* the AIConfig. If not, remove the AI from the list (which will assign
|
||||
* a random new AI on reload). */
|
||||
for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) {
|
||||
if (_settings_game.ai_config[c] != NULL && _settings_game.ai_config[c]->HasScript()) {
|
||||
if (_settings_game.ai_config[c] != nullptr && _settings_game.ai_config[c]->HasScript()) {
|
||||
if (!_settings_game.ai_config[c]->ResetInfo(true)) {
|
||||
DEBUG(script, 0, "After a reload, the AI by the name '%s' was no longer found, and removed from the list.", _settings_game.ai_config[c]->GetName());
|
||||
_settings_game.ai_config[c]->Change(NULL);
|
||||
_settings_game.ai_config[c]->Change(nullptr);
|
||||
if (Company::IsValidAiID(c)) {
|
||||
/* The code belonging to an already running AI was deleted. We can only do
|
||||
* one thing here to keep everything sane and that is kill the AI. After
|
||||
@@ -226,10 +226,10 @@
|
||||
Company::Get(c)->ai_info = _settings_game.ai_config[c]->GetInfo();
|
||||
}
|
||||
}
|
||||
if (_settings_newgame.ai_config[c] != NULL && _settings_newgame.ai_config[c]->HasScript()) {
|
||||
if (_settings_newgame.ai_config[c] != nullptr && _settings_newgame.ai_config[c]->HasScript()) {
|
||||
if (!_settings_newgame.ai_config[c]->ResetInfo(false)) {
|
||||
DEBUG(script, 0, "After a reload, the AI by the name '%s' was no longer found, and removed from the list.", _settings_newgame.ai_config[c]->GetName());
|
||||
_settings_newgame.ai_config[c]->Change(NULL);
|
||||
_settings_newgame.ai_config[c]->Change(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -283,7 +283,7 @@
|
||||
{
|
||||
if (!_networking || _network_server) {
|
||||
Company *c = Company::GetIfValid(company);
|
||||
assert(c != NULL && c->ai_instance != NULL);
|
||||
assert(c != nullptr && c->ai_instance != nullptr);
|
||||
|
||||
Backup<CompanyByte> cur_company(_current_company, company, FILE_LINE);
|
||||
c->ai_instance->Save();
|
||||
@@ -297,7 +297,7 @@
|
||||
{
|
||||
if (!_networking || _network_server) {
|
||||
Company *c = Company::GetIfValid(company);
|
||||
assert(c != NULL && c->ai_instance != NULL);
|
||||
assert(c != nullptr && c->ai_instance != nullptr);
|
||||
|
||||
Backup<CompanyByte> cur_company(_current_company, company, FILE_LINE);
|
||||
c->ai_instance->Load(version);
|
||||
|
@@ -139,13 +139,13 @@ struct AIListWindow : public Window {
|
||||
break;
|
||||
}
|
||||
case WID_AIL_INFO_BG: {
|
||||
AIInfo *selected_info = NULL;
|
||||
AIInfo *selected_info = nullptr;
|
||||
ScriptInfoList::const_iterator it = this->info_list->begin();
|
||||
for (int i = 1; selected_info == NULL && it != this->info_list->end(); i++, it++) {
|
||||
for (int i = 1; selected_info == nullptr && it != this->info_list->end(); i++, it++) {
|
||||
if (this->selected == i - 1) selected_info = static_cast<AIInfo *>((*it).second);
|
||||
}
|
||||
/* Some info about the currently selected AI. */
|
||||
if (selected_info != NULL) {
|
||||
if (selected_info != nullptr) {
|
||||
int y = r.top + WD_FRAMERECT_TOP;
|
||||
SetDParamStr(0, selected_info->GetAuthor());
|
||||
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, y, STR_AI_LIST_AUTHOR);
|
||||
@@ -153,7 +153,7 @@ struct AIListWindow : public Window {
|
||||
SetDParam(0, selected_info->GetVersion());
|
||||
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, y, STR_AI_LIST_VERSION);
|
||||
y += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||
if (selected_info->GetURL() != NULL) {
|
||||
if (selected_info->GetURL() != nullptr) {
|
||||
SetDParamStr(0, selected_info->GetURL());
|
||||
DrawString(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, y, STR_AI_LIST_URL);
|
||||
y += FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL;
|
||||
@@ -172,7 +172,7 @@ struct AIListWindow : public Window {
|
||||
void ChangeAI()
|
||||
{
|
||||
if (this->selected == -1) {
|
||||
GetConfig(slot)->Change(NULL);
|
||||
GetConfig(slot)->Change(nullptr);
|
||||
} else {
|
||||
ScriptInfoList::const_iterator it = this->info_list->begin();
|
||||
for (int i = 0; i < this->selected; i++) it++;
|
||||
@@ -407,7 +407,7 @@ struct AISettingsWindow : public Window {
|
||||
} else {
|
||||
DrawArrowButtons(buttons_left, y + button_y_offset, COLOUR_YELLOW, (this->clicked_button == i) ? 1 + (this->clicked_increase != rtl) : 0, editable && current_value > config_item.min_value, editable && current_value < config_item.max_value);
|
||||
}
|
||||
if (config_item.labels != NULL && config_item.labels->Contains(current_value)) {
|
||||
if (config_item.labels != nullptr && config_item.labels->Contains(current_value)) {
|
||||
SetDParam(idx++, STR_JUST_RAW_STRING);
|
||||
SetDParamStr(idx++, config_item.labels->Find(current_value)->second);
|
||||
} else {
|
||||
@@ -805,7 +805,7 @@ struct AIConfigWindow : public Window {
|
||||
*/
|
||||
static bool IsEditable(CompanyID slot)
|
||||
{
|
||||
if (slot == OWNER_DEITY) return _game_mode != GM_NORMAL || Game::GetInstance() != NULL;
|
||||
if (slot == OWNER_DEITY) return _game_mode != GM_NORMAL || Game::GetInstance() != nullptr;
|
||||
|
||||
if (_game_mode != GM_NORMAL) {
|
||||
return slot > 0 && slot <= GetGameSettings().difficulty.max_no_competitors;
|
||||
@@ -825,7 +825,7 @@ struct AIConfigWindow : public Window {
|
||||
case WID_AIC_GAMELIST: {
|
||||
StringID text = STR_AI_CONFIG_NONE;
|
||||
|
||||
if (GameConfig::GetConfig()->GetInfo() != NULL) {
|
||||
if (GameConfig::GetConfig()->GetInfo() != nullptr) {
|
||||
SetDParamStr(0, GameConfig::GetConfig()->GetInfo()->GetName());
|
||||
text = STR_JUST_RAW_STRING;
|
||||
}
|
||||
@@ -843,7 +843,7 @@ struct AIConfigWindow : public Window {
|
||||
|
||||
if ((_game_mode != GM_NORMAL && i == 0) || (_game_mode == GM_NORMAL && Company::IsValidHumanID(i))) {
|
||||
text = STR_AI_CONFIG_HUMAN_PLAYER;
|
||||
} else if (AIConfig::GetConfig((CompanyID)i)->GetInfo() != NULL) {
|
||||
} else if (AIConfig::GetConfig((CompanyID)i)->GetInfo() != nullptr) {
|
||||
SetDParamStr(0, AIConfig::GetConfig((CompanyID)i)->GetInfo()->GetName());
|
||||
text = STR_JUST_RAW_STRING;
|
||||
} else {
|
||||
@@ -861,7 +861,7 @@ struct AIConfigWindow : public Window {
|
||||
void OnClick(Point pt, int widget, int click_count) override
|
||||
{
|
||||
if (widget >= WID_AIC_TEXTFILE && widget < WID_AIC_TEXTFILE + TFT_END) {
|
||||
if (this->selected_slot == INVALID_COMPANY || GetConfig(this->selected_slot) == NULL) return;
|
||||
if (this->selected_slot == INVALID_COMPANY || GetConfig(this->selected_slot) == nullptr) return;
|
||||
|
||||
ShowScriptTextfileWindow((TextfileType)(widget - WID_AIC_TEXTFILE), this->selected_slot);
|
||||
return;
|
||||
@@ -928,7 +928,7 @@ struct AIConfigWindow : public Window {
|
||||
if (!_network_available) {
|
||||
ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR);
|
||||
} else {
|
||||
ShowNetworkContentListWindow(NULL, CONTENT_TYPE_AI, CONTENT_TYPE_GAME);
|
||||
ShowNetworkContentListWindow(nullptr, CONTENT_TYPE_AI, CONTENT_TYPE_GAME);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -955,7 +955,7 @@ struct AIConfigWindow : public Window {
|
||||
this->SetWidgetDisabledState(WID_AIC_MOVE_DOWN, this->selected_slot == OWNER_DEITY || this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot + 1)));
|
||||
|
||||
for (TextfileType tft = TFT_BEGIN; tft < TFT_END; tft++) {
|
||||
this->SetWidgetDisabledState(WID_AIC_TEXTFILE + tft, this->selected_slot == INVALID_COMPANY || (GetConfig(this->selected_slot)->GetTextfile(tft, this->selected_slot) == NULL));
|
||||
this->SetWidgetDisabledState(WID_AIC_TEXTFILE + tft, this->selected_slot == INVALID_COMPANY || (GetConfig(this->selected_slot)->GetTextfile(tft, this->selected_slot) == nullptr));
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -1024,7 +1024,7 @@ struct AIDebugWindow : public Window {
|
||||
{
|
||||
if (ai_debug_company == OWNER_DEITY) {
|
||||
GameInstance *game = Game::GetInstance();
|
||||
return game == NULL || game->IsDead();
|
||||
return game == nullptr || game->IsDead();
|
||||
}
|
||||
return !Company::IsValidAiID(ai_debug_company) || Company::Get(ai_debug_company)->ai_instance->IsDead();
|
||||
}
|
||||
@@ -1038,7 +1038,7 @@ struct AIDebugWindow : public Window {
|
||||
{
|
||||
switch (company) {
|
||||
case INVALID_COMPANY: return false;
|
||||
case OWNER_DEITY: return Game::GetInstance() != NULL;
|
||||
case OWNER_DEITY: return Game::GetInstance() != nullptr;
|
||||
default: return Company::IsValidAiID(company);
|
||||
}
|
||||
}
|
||||
@@ -1063,7 +1063,7 @@ struct AIDebugWindow : public Window {
|
||||
}
|
||||
|
||||
/* If no AI is available, see if there is a game script. */
|
||||
if (Game::GetInstance() != NULL) ChangeToAI(OWNER_DEITY);
|
||||
if (Game::GetInstance() != nullptr) ChangeToAI(OWNER_DEITY);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1140,7 +1140,7 @@ struct AIDebugWindow : public Window {
|
||||
|
||||
/* Set button colour for Game Script. */
|
||||
GameInstance *game = Game::GetInstance();
|
||||
bool valid = game != NULL;
|
||||
bool valid = game != nullptr;
|
||||
bool dead = valid && game->IsDead();
|
||||
bool paused = valid && game->IsPaused();
|
||||
|
||||
@@ -1154,7 +1154,7 @@ struct AIDebugWindow : public Window {
|
||||
|
||||
ScriptLog::LogData *log = this->GetLogPointer();
|
||||
|
||||
int scroll_count = (log == NULL) ? 0 : log->used;
|
||||
int scroll_count = (log == nullptr) ? 0 : log->used;
|
||||
if (this->vscroll->GetCount() != scroll_count) {
|
||||
this->vscroll->SetCount(scroll_count);
|
||||
|
||||
@@ -1162,7 +1162,7 @@ struct AIDebugWindow : public Window {
|
||||
this->SetWidgetDirty(WID_AID_SCROLLBAR);
|
||||
}
|
||||
|
||||
if (log == NULL) return;
|
||||
if (log == nullptr) return;
|
||||
|
||||
/* Detect when the user scrolls the window. Enable autoscroll when the
|
||||
* bottom-most line becomes visible. */
|
||||
@@ -1188,7 +1188,7 @@ struct AIDebugWindow : public Window {
|
||||
case WID_AID_NAME_TEXT:
|
||||
if (ai_debug_company == OWNER_DEITY) {
|
||||
const GameInfo *info = Game::GetInfo();
|
||||
assert(info != NULL);
|
||||
assert(info != nullptr);
|
||||
SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION);
|
||||
SetDParamStr(1, info->GetName());
|
||||
SetDParam(2, info->GetVersion());
|
||||
@@ -1196,7 +1196,7 @@ struct AIDebugWindow : public Window {
|
||||
SetDParam(0, STR_EMPTY);
|
||||
} else {
|
||||
const AIInfo *info = Company::Get(ai_debug_company)->ai_info;
|
||||
assert(info != NULL);
|
||||
assert(info != nullptr);
|
||||
SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION);
|
||||
SetDParamStr(1, info->GetName());
|
||||
SetDParam(2, info->GetVersion());
|
||||
@@ -1212,12 +1212,12 @@ struct AIDebugWindow : public Window {
|
||||
switch (widget) {
|
||||
case WID_AID_LOG_PANEL: {
|
||||
ScriptLog::LogData *log = this->GetLogPointer();
|
||||
if (log == NULL) return;
|
||||
if (log == nullptr) return;
|
||||
|
||||
int y = this->top_offset;
|
||||
for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < log->used; i++) {
|
||||
int pos = (i + log->pos + 1 - log->used + log->count) % log->count;
|
||||
if (log->lines[pos] == NULL) break;
|
||||
if (log->lines[pos] == nullptr) break;
|
||||
|
||||
TextColour colour;
|
||||
switch (log->type[pos]) {
|
||||
@@ -1357,7 +1357,7 @@ struct AIDebugWindow : public Window {
|
||||
/* Get the log instance of the active company */
|
||||
ScriptLog::LogData *log = this->GetLogPointer();
|
||||
|
||||
if (log != NULL) {
|
||||
if (log != nullptr) {
|
||||
this->break_string_filter.ResetState();
|
||||
this->break_string_filter.AddLine(log->lines[log->pos]);
|
||||
if (this->break_string_filter.GetState()) {
|
||||
@@ -1385,8 +1385,8 @@ struct AIDebugWindow : public Window {
|
||||
|
||||
this->SelectValidDebugCompany();
|
||||
|
||||
ScriptLog::LogData *log = ai_debug_company != INVALID_COMPANY ? this->GetLogPointer() : NULL;
|
||||
this->vscroll->SetCount((log == NULL) ? 0 : log->used);
|
||||
ScriptLog::LogData *log = ai_debug_company != INVALID_COMPANY ? this->GetLogPointer() : nullptr;
|
||||
this->vscroll->SetCount((log == nullptr) ? 0 : log->used);
|
||||
|
||||
/* Update company buttons */
|
||||
for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) {
|
||||
@@ -1394,7 +1394,7 @@ struct AIDebugWindow : public Window {
|
||||
this->SetWidgetLoweredState(i + WID_AID_COMPANY_BUTTON_START, ai_debug_company == i);
|
||||
}
|
||||
|
||||
this->SetWidgetDisabledState(WID_AID_SCRIPT_GAME, Game::GetGameInstance() == NULL);
|
||||
this->SetWidgetDisabledState(WID_AID_SCRIPT_GAME, Game::GetGameInstance() == nullptr);
|
||||
this->SetWidgetLoweredState(WID_AID_SCRIPT_GAME, ai_debug_company == OWNER_DEITY);
|
||||
|
||||
this->SetWidgetLoweredState(WID_AID_BREAK_STR_ON_OFF_BTN, this->break_check_enabled);
|
||||
@@ -1437,7 +1437,7 @@ static EventState AIDebugGlobalHotkeys(int hotkey)
|
||||
{
|
||||
if (_game_mode != GM_NORMAL) return ES_NOT_HANDLED;
|
||||
Window *w = ShowAIDebugWindow(INVALID_COMPANY);
|
||||
if (w == NULL) return ES_NOT_HANDLED;
|
||||
if (w == nullptr) return ES_NOT_HANDLED;
|
||||
return w->OnHotkey(hotkey);
|
||||
}
|
||||
|
||||
@@ -1530,14 +1530,14 @@ Window *ShowAIDebugWindow(CompanyID show_company)
|
||||
{
|
||||
if (!_networking || _network_server) {
|
||||
AIDebugWindow *w = (AIDebugWindow *)BringWindowToFrontById(WC_AI_DEBUG, 0);
|
||||
if (w == NULL) w = new AIDebugWindow(&_ai_debug_desc, 0);
|
||||
if (w == nullptr) w = new AIDebugWindow(&_ai_debug_desc, 0);
|
||||
if (show_company != INVALID_COMPANY) w->ChangeToAI(show_company);
|
||||
return w;
|
||||
} else {
|
||||
ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, WL_INFO);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1563,7 +1563,7 @@ void ShowAIDebugWindowIfAIError()
|
||||
}
|
||||
|
||||
GameInstance *g = Game::GetGameInstance();
|
||||
if (g != NULL && g->IsDead()) {
|
||||
if (g != nullptr && g->IsDead()) {
|
||||
ShowAIDebugWindow(OWNER_DEITY);
|
||||
}
|
||||
}
|
||||
|
@@ -65,8 +65,8 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
||||
/* static */ SQInteger AIInfo::Constructor(HSQUIRRELVM vm)
|
||||
{
|
||||
/* Get the AIInfo */
|
||||
SQUserPointer instance = NULL;
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == NULL) return sq_throwerror(vm, "Pass an instance of a child class of AIInfo to RegisterAI");
|
||||
SQUserPointer instance = nullptr;
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of AIInfo to RegisterAI");
|
||||
AIInfo *info = (AIInfo *)instance;
|
||||
|
||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||
@@ -100,7 +100,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
||||
}
|
||||
|
||||
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
||||
sq_setinstanceup(vm, 2, NULL);
|
||||
sq_setinstanceup(vm, 2, nullptr);
|
||||
/* Register the AI to the base system */
|
||||
info->GetScanner()->RegisterScript(info);
|
||||
return 0;
|
||||
@@ -112,7 +112,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
||||
SQUserPointer instance;
|
||||
sq_getinstanceup(vm, 2, &instance, 0);
|
||||
AIInfo *info = (AIInfo *)instance;
|
||||
info->api_version = NULL;
|
||||
info->api_version = nullptr;
|
||||
|
||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||
if (res != 0) return res;
|
||||
@@ -122,7 +122,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
||||
info->api_version = stredup(buf);
|
||||
|
||||
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
||||
sq_setinstanceup(vm, 2, NULL);
|
||||
sq_setinstanceup(vm, 2, nullptr);
|
||||
/* Register the AI to the base system */
|
||||
static_cast<AIScannerInfo *>(info->GetScanner())->SetDummyAI(info);
|
||||
return 0;
|
||||
@@ -131,7 +131,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
||||
AIInfo::AIInfo() :
|
||||
min_loadable_version(0),
|
||||
use_as_random(false),
|
||||
api_version(NULL)
|
||||
api_version(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -59,7 +59,7 @@ private:
|
||||
/** All static information from an AI library like name, version, etc. */
|
||||
class AILibrary : public ScriptInfo {
|
||||
public:
|
||||
AILibrary() : ScriptInfo(), category(NULL) {};
|
||||
AILibrary() : ScriptInfo(), category(nullptr) {};
|
||||
~AILibrary();
|
||||
|
||||
/**
|
||||
|
@@ -216,10 +216,10 @@ void AIInstance::Died()
|
||||
ShowAIDebugWindow(_current_company);
|
||||
|
||||
const AIInfo *info = AIConfig::GetConfig(_current_company, AIConfig::SSS_FORCE_GAME)->GetInfo();
|
||||
if (info != NULL) {
|
||||
if (info != nullptr) {
|
||||
ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING);
|
||||
|
||||
if (info->GetURL() != NULL) {
|
||||
if (info->GetURL() != nullptr) {
|
||||
ScriptLog::Info("Please report the error to the following URL:");
|
||||
ScriptLog::Info(info->GetURL());
|
||||
}
|
||||
@@ -258,7 +258,7 @@ void CcAI(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||
* when the company does not exist anymore.
|
||||
*/
|
||||
const Company *c = Company::GetIfValid(_current_company);
|
||||
if (c == NULL || c->ai_instance == NULL) return;
|
||||
if (c == nullptr || c->ai_instance == nullptr) return;
|
||||
|
||||
c->ai_instance->DoCommandCallback(result, tile, p1, p2);
|
||||
c->ai_instance->Continue();
|
||||
|
@@ -23,7 +23,7 @@
|
||||
|
||||
AIScannerInfo::AIScannerInfo() :
|
||||
ScriptScanner(),
|
||||
info_dummy(NULL)
|
||||
info_dummy(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -94,14 +94,14 @@ AIInfo *AIScannerInfo::SelectRandomAI() const
|
||||
|
||||
AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool force_exact_match)
|
||||
{
|
||||
if (this->info_list.size() == 0) return NULL;
|
||||
if (nameParam == NULL) return NULL;
|
||||
if (this->info_list.size() == 0) return nullptr;
|
||||
if (nameParam == nullptr) return nullptr;
|
||||
|
||||
char ai_name[1024];
|
||||
strecpy(ai_name, nameParam, lastof(ai_name));
|
||||
strtolower(ai_name);
|
||||
|
||||
AIInfo *info = NULL;
|
||||
AIInfo *info = nullptr;
|
||||
int version = -1;
|
||||
|
||||
if (versionParam == -1) {
|
||||
@@ -110,7 +110,7 @@ AIInfo *AIScannerInfo::FindInfo(const char *nameParam, int versionParam, bool fo
|
||||
|
||||
/* If we didn't find a match AI, maybe the user included a version */
|
||||
char *e = strrchr(ai_name, '.');
|
||||
if (e == NULL) return NULL;
|
||||
if (e == nullptr) return nullptr;
|
||||
*e = '\0';
|
||||
e++;
|
||||
versionParam = atoi(e);
|
||||
@@ -165,7 +165,7 @@ AILibrary *AIScannerLibrary::FindLibrary(const char *library, int version)
|
||||
|
||||
/* Check if the library + version exists */
|
||||
ScriptInfoList::iterator iter = this->info_list.find(library_name);
|
||||
if (iter == this->info_list.end()) return NULL;
|
||||
if (iter == this->info_list.end()) return nullptr;
|
||||
|
||||
return static_cast<AILibrary *>((*iter).second);
|
||||
}
|
||||
|
@@ -32,7 +32,7 @@ public:
|
||||
* @param nameParam The name of the AI.
|
||||
* @param versionParam The version of the AI, or -1 if you want the latest.
|
||||
* @param force_exact_match Only match name+version, never latest.
|
||||
* @return NULL if no match found, otherwise the AI that matched.
|
||||
* @return nullptr if no match found, otherwise the AI that matched.
|
||||
*/
|
||||
class AIInfo *FindInfo(const char *nameParam, int versionParam, bool force_exact_match);
|
||||
|
||||
@@ -60,7 +60,7 @@ public:
|
||||
* Find a library in the pool.
|
||||
* @param library The library name to find.
|
||||
* @param version The version the library should have.
|
||||
* @return The library if found, NULL otherwise.
|
||||
* @return The library if found, nullptr otherwise.
|
||||
*/
|
||||
class AILibrary *FindLibrary(const char *library, int version);
|
||||
|
||||
|
@@ -144,7 +144,7 @@ static StationID FindNearestHangar(const Aircraft *v)
|
||||
if (v->acache.cached_max_range_sqr != 0) {
|
||||
/* Check if our current destination can be reached from the depot airport. */
|
||||
const Station *cur_dest = GetTargetAirportIfValid(v);
|
||||
if (cur_dest != NULL && DistanceSquare(st->airport.tile, cur_dest->airport.tile) > v->acache.cached_max_range_sqr) continue;
|
||||
if (cur_dest != nullptr && DistanceSquare(st->airport.tile, cur_dest->airport.tile) > v->acache.cached_max_range_sqr) continue;
|
||||
}
|
||||
if (distance < best || index == INVALID_STATION) {
|
||||
best = distance;
|
||||
@@ -294,7 +294,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *
|
||||
v->cargo_type = e->GetDefaultCargoType();
|
||||
u->cargo_type = CT_MAIL;
|
||||
|
||||
v->name = NULL;
|
||||
v->name = nullptr;
|
||||
v->last_station_visited = INVALID_STATION;
|
||||
v->last_loading_station = INVALID_STATION;
|
||||
|
||||
@@ -386,7 +386,7 @@ bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination,
|
||||
{
|
||||
const Station *st = GetTargetAirportIfValid(this);
|
||||
/* If the station is not a valid airport or if it has no hangars */
|
||||
if (st == NULL || !CanVehicleUseStation(this, st) || !st->airport.HasHangar()) {
|
||||
if (st == nullptr || !CanVehicleUseStation(this, st) || !st->airport.HasHangar()) {
|
||||
/* the aircraft has to search for a hangar on its own */
|
||||
StationID station = FindNearestHangar(this);
|
||||
|
||||
@@ -395,8 +395,8 @@ bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination,
|
||||
st = Station::Get(station);
|
||||
}
|
||||
|
||||
if (location != NULL) *location = st->xy;
|
||||
if (destination != NULL) *destination = st->index;
|
||||
if (location != nullptr) *location = st->xy;
|
||||
if (destination != nullptr) *destination = st->index;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -415,7 +415,7 @@ static void CheckIfAircraftNeedsService(Aircraft *v)
|
||||
|
||||
const Station *st = Station::Get(v->current_order.GetDestination());
|
||||
|
||||
assert(st != NULL);
|
||||
assert(st != nullptr);
|
||||
|
||||
/* only goto depot if the target airport has a depot */
|
||||
if (st->airport.HasHangar() && CanVehicleUseStation(v, st)) {
|
||||
@@ -542,7 +542,7 @@ void SetAircraftPosition(Aircraft *v, int x, int y, int z)
|
||||
u->UpdatePositionAndViewport();
|
||||
|
||||
u = u->Next();
|
||||
if (u != NULL) {
|
||||
if (u != nullptr) {
|
||||
u->x_pos = x;
|
||||
u->y_pos = y;
|
||||
u->z_pos = z + ROTOR_Z_OFFSET;
|
||||
@@ -563,7 +563,7 @@ void HandleAircraftEnterHangar(Aircraft *v)
|
||||
Aircraft *u = v->Next();
|
||||
u->vehstatus |= VS_HIDDEN;
|
||||
u = u->Next();
|
||||
if (u != NULL) {
|
||||
if (u != nullptr) {
|
||||
u->vehstatus |= VS_HIDDEN;
|
||||
u->cur_speed = 0;
|
||||
}
|
||||
@@ -737,8 +737,8 @@ void GetAircraftFlightLevelBounds(const Vehicle *v, int *min_level, int *max_lev
|
||||
/* Make faster planes fly higher so that they can overtake slower ones */
|
||||
base_altitude += min(20 * (v->vcache.cached_max_speed / 200) - 90, 0);
|
||||
|
||||
if (min_level != NULL) *min_level = base_altitude + AIRCRAFT_MIN_FLYING_ALTITUDE;
|
||||
if (max_level != NULL) *max_level = base_altitude + AIRCRAFT_MAX_FLYING_ALTITUDE;
|
||||
if (min_level != nullptr) *min_level = base_altitude + AIRCRAFT_MIN_FLYING_ALTITUDE;
|
||||
if (max_level != nullptr) *max_level = base_altitude + AIRCRAFT_MAX_FLYING_ALTITUDE;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -813,8 +813,8 @@ template int GetAircraftFlightLevel(Aircraft *v, bool takeoff);
|
||||
*/
|
||||
static byte AircraftGetEntryPoint(const Aircraft *v, const AirportFTAClass *apc, Direction rotation)
|
||||
{
|
||||
assert(v != NULL);
|
||||
assert(apc != NULL);
|
||||
assert(v != nullptr);
|
||||
assert(apc != nullptr);
|
||||
|
||||
/* In the case the station doesn't exit anymore, set target tile 0.
|
||||
* It doesn't hurt much, aircraft will go to next order, nearest hangar
|
||||
@@ -822,7 +822,7 @@ static byte AircraftGetEntryPoint(const Aircraft *v, const AirportFTAClass *apc,
|
||||
TileIndex tile = 0;
|
||||
|
||||
const Station *st = Station::GetIfValid(v->targetairport);
|
||||
if (st != NULL) {
|
||||
if (st != nullptr) {
|
||||
/* Make sure we don't go to INVALID_TILE if the airport has been removed. */
|
||||
tile = (st->airport.tile != INVALID_TILE) ? st->airport.tile : st->xy;
|
||||
}
|
||||
@@ -856,13 +856,13 @@ static bool AircraftController(Aircraft *v)
|
||||
{
|
||||
int count;
|
||||
|
||||
/* NULL if station is invalid */
|
||||
/* nullptr if station is invalid */
|
||||
const Station *st = Station::GetIfValid(v->targetairport);
|
||||
/* INVALID_TILE if there is no station */
|
||||
TileIndex tile = INVALID_TILE;
|
||||
Direction rotation = DIR_N;
|
||||
uint size_x = 1, size_y = 1;
|
||||
if (st != NULL) {
|
||||
if (st != nullptr) {
|
||||
if (st->airport.tile != INVALID_TILE) {
|
||||
tile = st->airport.tile;
|
||||
rotation = st->airport.rotation;
|
||||
@@ -876,7 +876,7 @@ static bool AircraftController(Aircraft *v)
|
||||
const AirportFTAClass *afc = tile == INVALID_TILE ? GetAirport(AT_DUMMY) : st->airport.GetFTA();
|
||||
|
||||
/* prevent going to INVALID_TILE if airport is deleted. */
|
||||
if (st == NULL || st->airport.tile == INVALID_TILE) {
|
||||
if (st == nullptr || st->airport.tile == INVALID_TILE) {
|
||||
/* Jump into our "holding pattern" state machine if possible */
|
||||
if (v->pos >= afc->nofelements) {
|
||||
v->pos = v->previous_pos = AircraftGetEntryPoint(v, afc, DIR_N);
|
||||
@@ -916,7 +916,7 @@ static bool AircraftController(Aircraft *v)
|
||||
v->tile = 0;
|
||||
|
||||
int z_dest;
|
||||
GetAircraftFlightLevelBounds(v, &z_dest, NULL);
|
||||
GetAircraftFlightLevelBounds(v, &z_dest, nullptr);
|
||||
|
||||
/* Reached altitude? */
|
||||
if (v->z_pos >= z_dest) {
|
||||
@@ -933,7 +933,7 @@ static bool AircraftController(Aircraft *v)
|
||||
if (amd.flag & AMED_HELI_LOWER) {
|
||||
SetBit(v->flags, VAF_HELI_DIRECT_DESCENT);
|
||||
|
||||
if (st == NULL) {
|
||||
if (st == nullptr) {
|
||||
/* FIXME - AircraftController -> if station no longer exists, do not land
|
||||
* helicopter will circle until sign disappears, then go to next order
|
||||
* what to do when it is the only order left, right now it just stays in 1 place */
|
||||
@@ -1139,7 +1139,7 @@ void FindBreakdownDestination(Aircraft *v)
|
||||
DestinationID destination = INVALID_STATION;
|
||||
if (v->breakdown_type == BREAKDOWN_AIRCRAFT_DEPOT) {
|
||||
/* Go to a hangar, if possible at our current destination */
|
||||
v->FindClosestDepot(NULL, &destination, NULL);
|
||||
v->FindClosestDepot(nullptr, &destination, nullptr);
|
||||
} else if (v->breakdown_type == BREAKDOWN_AIRCRAFT_EM_LANDING) {
|
||||
/* Go to the nearest airport with a hangar */
|
||||
destination = FindNearestHangar(v);
|
||||
@@ -1184,7 +1184,7 @@ static bool HandleCrashedAircraft(Aircraft *v)
|
||||
Station *st = GetTargetAirportIfValid(v);
|
||||
|
||||
/* make aircraft crash down to the ground */
|
||||
if (v->crashed_counter < 500 && st == NULL && ((v->crashed_counter % 3) == 0) ) {
|
||||
if (v->crashed_counter < 500 && st == nullptr && ((v->crashed_counter % 3) == 0) ) {
|
||||
int z = GetSlopePixelZ(Clamp(v->x_pos, 0, MapMaxX() * TILE_SIZE), Clamp(v->y_pos, 0, MapMaxY() * TILE_SIZE));
|
||||
v->z_pos -= 1;
|
||||
if (v->z_pos == z) {
|
||||
@@ -1215,7 +1215,7 @@ static bool HandleCrashedAircraft(Aircraft *v)
|
||||
/* clear runway-in on all airports, set by crashing plane
|
||||
* small airports use AIRPORT_BUSY, city airports use RUNWAY_IN_OUT_block, etc.
|
||||
* but they all share the same number */
|
||||
if (st != NULL) {
|
||||
if (st != nullptr) {
|
||||
CLRBITS(st->airport.flags, RUNWAY_IN_block);
|
||||
CLRBITS(st->airport.flags, RUNWAY_IN_OUT_block); // commuter airport
|
||||
CLRBITS(st->airport.flags, RUNWAY_IN2_block); // intercontinental
|
||||
@@ -1290,7 +1290,7 @@ void HandleMissingAircraftOrders(Aircraft *v)
|
||||
* actually stops.
|
||||
*/
|
||||
const Station *st = GetTargetAirportIfValid(v);
|
||||
if (st == NULL) {
|
||||
if (st == nullptr) {
|
||||
Backup<CompanyByte> cur_company(_current_company, v->owner, FILE_LINE);
|
||||
CommandCost ret = DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_SEND_VEHICLE_TO_DEPOT);
|
||||
cur_company.Restore();
|
||||
@@ -1349,17 +1349,17 @@ static void CrashAirplane(Aircraft *v)
|
||||
v->Next()->cargo.Truncate();
|
||||
const Station *st = GetTargetAirportIfValid(v);
|
||||
StringID newsitem;
|
||||
if (st == NULL) {
|
||||
if (st == nullptr) {
|
||||
newsitem = STR_NEWS_PLANE_CRASH_OUT_OF_FUEL;
|
||||
} else {
|
||||
SetDParam(1, st->index);
|
||||
newsitem = STR_NEWS_AIRCRAFT_CRASH;
|
||||
}
|
||||
|
||||
AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, st == NULL ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING));
|
||||
Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, st == NULL ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING));
|
||||
AI::NewEvent(v->owner, new ScriptEventVehicleCrashed(v->index, v->tile, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING));
|
||||
Game::NewEvent(new ScriptEventVehicleCrashed(v->index, v->tile, st == nullptr ? ScriptEventVehicleCrashed::CRASH_AIRCRAFT_NO_AIRPORT : ScriptEventVehicleCrashed::CRASH_PLANE_LANDING));
|
||||
|
||||
AddVehicleNewsItem(newsitem, NT_ACCIDENT, v->index, st != NULL ? st->index : INVALID_STATION);
|
||||
AddVehicleNewsItem(newsitem, NT_ACCIDENT, v->index, st != nullptr ? st->index : INVALID_STATION);
|
||||
|
||||
ModifyStationRatingAround(v->tile, v->owner, -160, 30);
|
||||
if (_settings_client.sound.disaster) SndPlayVehicleFx(SND_12_EXPLOSION, v);
|
||||
@@ -1457,8 +1457,8 @@ void AircraftNextAirportPos_and_Order(Aircraft *v)
|
||||
}
|
||||
|
||||
const Station *st = GetTargetAirportIfValid(v);
|
||||
const AirportFTAClass *apc = st == NULL ? GetAirport(AT_DUMMY) : st->airport.GetFTA();
|
||||
Direction rotation = st == NULL ? DIR_N : st->airport.rotation;
|
||||
const AirportFTAClass *apc = st == nullptr ? GetAirport(AT_DUMMY) : st->airport.GetFTA();
|
||||
Direction rotation = st == nullptr ? DIR_N : st->airport.rotation;
|
||||
v->pos = v->previous_pos = AircraftGetEntryPoint(v, apc, rotation);
|
||||
}
|
||||
|
||||
@@ -1483,7 +1483,7 @@ void AircraftLeaveHangar(Aircraft *v, Direction exit_dir)
|
||||
|
||||
/* Rotor blades */
|
||||
u = u->Next();
|
||||
if (u != NULL) {
|
||||
if (u != nullptr) {
|
||||
u->vehstatus &= ~VS_HIDDEN;
|
||||
u->cur_speed = 80;
|
||||
}
|
||||
@@ -1677,7 +1677,7 @@ static void AircraftEventHandler_Flying(Aircraft *v, const AirportFTAClass *apc)
|
||||
* it is possible to choose from multiple landing runways, so loop until a free one is found */
|
||||
byte landingtype = (v->subtype == AIR_HELICOPTER) ? HELILANDING : LANDING;
|
||||
const AirportFTA *current = apc->layout[v->pos].next;
|
||||
while (current != NULL) {
|
||||
while (current != nullptr) {
|
||||
if (current->heading == landingtype) {
|
||||
/* save speed before, since if AirportHasBlock is false, it resets them to 0
|
||||
* we don't want that for plane in air
|
||||
@@ -1833,7 +1833,7 @@ static bool AirportMove(Aircraft *v, const AirportFTAClass *apc)
|
||||
v->previous_pos = v->pos; // save previous location
|
||||
|
||||
/* there is only one choice to move to */
|
||||
if (current->next == NULL) {
|
||||
if (current->next == nullptr) {
|
||||
if (AirportSetBlocks(v, current, apc)) {
|
||||
v->pos = current->next_position;
|
||||
UpdateAircraftCache(v);
|
||||
@@ -1852,7 +1852,7 @@ static bool AirportMove(Aircraft *v, const AirportFTAClass *apc)
|
||||
return false;
|
||||
}
|
||||
current = current->next;
|
||||
} while (current != NULL);
|
||||
} while (current != nullptr);
|
||||
|
||||
DEBUG(misc, 0, "[Ap] cannot move further on Airport! (pos %d state %d) for vehicle %d", v->pos, v->state, v->index);
|
||||
NOT_REACHED();
|
||||
@@ -1902,7 +1902,7 @@ static bool AirportSetBlocks(Aircraft *v, const AirportFTA *current_pos, const A
|
||||
* this means more blocks should be checked/set */
|
||||
const AirportFTA *current = current_pos;
|
||||
if (current == reference) current = current->next;
|
||||
while (current != NULL) {
|
||||
while (current != nullptr) {
|
||||
if (current->heading == current_pos->heading && current->block != 0) {
|
||||
airport_flags |= current->block;
|
||||
break;
|
||||
@@ -2010,7 +2010,7 @@ static bool AirportFindFreeTerminal(Aircraft *v, const AirportFTAClass *apc)
|
||||
const Station *st = Station::Get(v->targetairport);
|
||||
const AirportFTA *temp = apc->layout[v->pos].next;
|
||||
|
||||
while (temp != NULL) {
|
||||
while (temp != nullptr) {
|
||||
if (temp->heading == 255) {
|
||||
if (!(st->airport.flags & temp->block)) {
|
||||
/* read which group do we want to go to?
|
||||
@@ -2109,9 +2109,9 @@ static bool AircraftEventHandler(Aircraft *v, int loop)
|
||||
/* Check the distance to the next destination. This code works because the target
|
||||
* airport is only updated after take off and not on the ground. */
|
||||
Station *cur_st = Station::GetIfValid(v->targetairport);
|
||||
Station *next_st = v->current_order.IsType(OT_GOTO_STATION) || v->current_order.IsType(OT_GOTO_DEPOT) ? Station::GetIfValid(v->current_order.GetDestination()) : NULL;
|
||||
Station *next_st = v->current_order.IsType(OT_GOTO_STATION) || v->current_order.IsType(OT_GOTO_DEPOT) ? Station::GetIfValid(v->current_order.GetDestination()) : nullptr;
|
||||
|
||||
if (cur_st != NULL && cur_st->airport.tile != INVALID_TILE && next_st != NULL && next_st->airport.tile != INVALID_TILE) {
|
||||
if (cur_st != nullptr && cur_st->airport.tile != INVALID_TILE && next_st != nullptr && next_st->airport.tile != INVALID_TILE) {
|
||||
uint dist = DistanceSquare(cur_st->airport.tile, next_st->airport.tile);
|
||||
AircraftHandleDestTooFar(v, dist > v->acache.cached_max_range_sqr);
|
||||
}
|
||||
@@ -2147,16 +2147,16 @@ bool Aircraft::Tick()
|
||||
* Returns aircraft's target station if v->target_airport
|
||||
* is a valid station with airport.
|
||||
* @param v vehicle to get target airport for
|
||||
* @return pointer to target station, NULL if invalid
|
||||
* @return pointer to target station, nullptr if invalid
|
||||
*/
|
||||
Station *GetTargetAirportIfValid(const Aircraft *v)
|
||||
{
|
||||
assert(v->type == VEH_AIRCRAFT);
|
||||
|
||||
Station *st = Station::GetIfValid(v->targetairport);
|
||||
if (st == NULL) return NULL;
|
||||
if (st == nullptr) return nullptr;
|
||||
|
||||
return st->airport.tile == INVALID_TILE ? NULL : st;
|
||||
return st->airport.tile == INVALID_TILE ? nullptr : st;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -36,7 +36,7 @@ void DrawAircraftDetails(const Aircraft *v, int left, int right, int y)
|
||||
int y_offset = (v->Next()->cargo_cap != 0) ? -(FONT_HEIGHT_NORMAL + 1): 0;
|
||||
Money feeder_share = 0;
|
||||
|
||||
for (const Aircraft *u = v; u != NULL; u = u->Next()) {
|
||||
for (const Aircraft *u = v; u != nullptr; u = u->Next()) {
|
||||
if (u->IsNormalAircraft()) {
|
||||
SetDParam(0, u->engine_type);
|
||||
SetDParam(1, u->build_year);
|
||||
|
@@ -46,7 +46,7 @@
|
||||
* @param delta_z Height of the airport above the land.
|
||||
*/
|
||||
#define HELIPORT(name, num_helipads, delta_z) \
|
||||
AIRPORT_GENERIC(name, NULL, num_helipads, AirportFTAClass::HELICOPTERS, delta_z)
|
||||
AIRPORT_GENERIC(name, nullptr, num_helipads, AirportFTAClass::HELICOPTERS, delta_z)
|
||||
|
||||
AIRPORT(country, 0, true)
|
||||
AIRPORT(city, 0, false)
|
||||
@@ -58,7 +58,7 @@ HELIPORT(helidepot, 1, 0)
|
||||
AIRPORT(intercontinental, 2, false)
|
||||
HELIPORT(helistation, 3, 0)
|
||||
HELIPORT(oilrig, 1, 54)
|
||||
AIRPORT_GENERIC(dummy, NULL, 0, AirportFTAClass::ALL, 0)
|
||||
AIRPORT_GENERIC(dummy, nullptr, 0, AirportFTAClass::ALL, 0)
|
||||
|
||||
#undef HELIPORT
|
||||
#undef AIRPORT
|
||||
@@ -135,7 +135,7 @@ AirportFTAClass::~AirportFTAClass()
|
||||
{
|
||||
for (uint i = 0; i < nofelements; i++) {
|
||||
AirportFTA *current = layout[i].next;
|
||||
while (current != NULL) {
|
||||
while (current != nullptr) {
|
||||
AirportFTA *next = current->next;
|
||||
free(current);
|
||||
current = next;
|
||||
@@ -195,7 +195,7 @@ static AirportFTA *AirportBuildAutomata(uint nofelements, const AirportFTAbuildu
|
||||
current = current->next;
|
||||
internalcounter++;
|
||||
}
|
||||
current->next = NULL;
|
||||
current->next = nullptr;
|
||||
internalcounter++;
|
||||
}
|
||||
return FAutomata;
|
||||
|
@@ -161,7 +161,7 @@ static EventState AirportToolbarGlobalHotkeys(int hotkey)
|
||||
{
|
||||
if (_game_mode != GM_NORMAL || !CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) return ES_NOT_HANDLED;
|
||||
Window *w = ShowBuildAirToolbar();
|
||||
if (w == NULL) return ES_NOT_HANDLED;
|
||||
if (w == nullptr) return ES_NOT_HANDLED;
|
||||
return w->OnHotkey(hotkey);
|
||||
}
|
||||
|
||||
@@ -198,11 +198,11 @@ static WindowDesc _air_toolbar_desc(
|
||||
*
|
||||
* If the terraform toolbar is linked to the toolbar, that window is also opened.
|
||||
*
|
||||
* @return newly opened airport toolbar, or NULL if the toolbar could not be opened.
|
||||
* @return newly opened airport toolbar, or nullptr if the toolbar could not be opened.
|
||||
*/
|
||||
Window *ShowBuildAirToolbar()
|
||||
{
|
||||
if (!Company::IsValidID(_local_company)) return NULL;
|
||||
if (!Company::IsValidID(_local_company)) return nullptr;
|
||||
|
||||
DeleteWindowByClass(WC_BUILD_TOOLBAR);
|
||||
return AllocateWindowDescFront<BuildAirToolbarWindow>(&_air_toolbar_desc, TRANSPORT_AIR);
|
||||
|
@@ -32,9 +32,9 @@ static const uint MAX_ARTICULATED_PARTS = 100; ///< Maximum of articulated parts
|
||||
* @param mirrored Returns whether the part shall be flipped.
|
||||
* @return engine to add or INVALID_ENGINE
|
||||
*/
|
||||
static EngineID GetNextArticulatedPart(uint index, EngineID front_type, Vehicle *front = NULL, bool *mirrored = NULL)
|
||||
static EngineID GetNextArticulatedPart(uint index, EngineID front_type, Vehicle *front = nullptr, bool *mirrored = nullptr)
|
||||
{
|
||||
assert(front == NULL || front->engine_type == front_type);
|
||||
assert(front == nullptr || front->engine_type == front_type);
|
||||
|
||||
const Engine *front_engine = Engine::Get(front_type);
|
||||
|
||||
@@ -45,12 +45,12 @@ static EngineID GetNextArticulatedPart(uint index, EngineID front_type, Vehicle
|
||||
/* 8 bits, bit 7 for mirroring */
|
||||
callback = GB(callback, 0, 8);
|
||||
if (callback == 0xFF) return INVALID_ENGINE;
|
||||
if (mirrored != NULL) *mirrored = HasBit(callback, 7);
|
||||
if (mirrored != nullptr) *mirrored = HasBit(callback, 7);
|
||||
callback = GB(callback, 0, 7);
|
||||
} else {
|
||||
/* 15 bits, bit 14 for mirroring */
|
||||
if (callback == 0x7FFF) return INVALID_ENGINE;
|
||||
if (mirrored != NULL) *mirrored = HasBit(callback, 14);
|
||||
if (mirrored != nullptr) *mirrored = HasBit(callback, 14);
|
||||
callback = GB(callback, 0, 14);
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ uint CountArticulatedParts(EngineID engine_type, bool purchase_window)
|
||||
* either, so it doesn't matter how many articulated parts there are. */
|
||||
if (!Vehicle::CanAllocateItem()) return 0;
|
||||
|
||||
Vehicle *v = NULL;
|
||||
Vehicle *v = nullptr;
|
||||
if (!purchase_window) {
|
||||
v = new Vehicle();
|
||||
v->engine_type = engine_type;
|
||||
@@ -113,7 +113,7 @@ void GetArticulatedPartsEngineIDs(EngineID engine_type, bool purchase_window, st
|
||||
* either, so it doesn't matter how many articulated parts there are. */
|
||||
if (!Vehicle::CanAllocateItem()) return;
|
||||
|
||||
Vehicle *v = NULL;
|
||||
Vehicle *v = nullptr;
|
||||
if (!purchase_window) {
|
||||
v = new Vehicle();
|
||||
v->engine_type = engine_type;
|
||||
@@ -141,7 +141,7 @@ static inline uint16 GetVehicleDefaultCapacity(EngineID engine, CargoID *cargo_t
|
||||
{
|
||||
const Engine *e = Engine::Get(engine);
|
||||
CargoID cargo = (e->CanCarryCargo() ? e->GetDefaultCargoType() : (CargoID)CT_INVALID);
|
||||
if (cargo_type != NULL) *cargo_type = cargo;
|
||||
if (cargo_type != nullptr) *cargo_type = cargo;
|
||||
if (cargo == CT_INVALID) return 0;
|
||||
return e->GetDisplayDefaultCapacity();
|
||||
}
|
||||
@@ -323,15 +323,15 @@ bool IsArticulatedVehicleCarryingDifferentCargoes(const Vehicle *v, CargoID *car
|
||||
if (v->cargo_type != CT_INVALID && v->GetEngine()->CanCarryCargo()) {
|
||||
if (first_cargo == CT_INVALID) first_cargo = v->cargo_type;
|
||||
if (first_cargo != v->cargo_type) {
|
||||
if (cargo_type != NULL) *cargo_type = CT_INVALID;
|
||||
if (cargo_type != nullptr) *cargo_type = CT_INVALID;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL;
|
||||
} while (v != NULL);
|
||||
v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : nullptr;
|
||||
} while (v != nullptr);
|
||||
|
||||
if (cargo_type != NULL) *cargo_type = first_cargo;
|
||||
if (cargo_type != nullptr) *cargo_type = first_cargo;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -363,8 +363,8 @@ void CheckConsistencyOfArticulatedVehicle(const Vehicle *v)
|
||||
assert(v->cargo_type < NUM_CARGO);
|
||||
real_default_capacity[v->cargo_type] += v->cargo_cap;
|
||||
|
||||
v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL;
|
||||
} while (v != NULL);
|
||||
v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : nullptr;
|
||||
} while (v != nullptr);
|
||||
|
||||
/* Check whether the vehicle carries more cargoes than expected */
|
||||
bool carries_more = false;
|
||||
|
@@ -29,11 +29,11 @@ static EngineRenew *GetEngineReplacement(EngineRenewList erl, EngineID engine, G
|
||||
{
|
||||
EngineRenew *er = (EngineRenew *)erl;
|
||||
|
||||
while (er != NULL) {
|
||||
while (er != nullptr) {
|
||||
if (er->from == engine && GroupIsInGroup(group, er->group_id)) return er;
|
||||
er = er->next;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -46,12 +46,12 @@ void RemoveAllEngineReplacement(EngineRenewList *erl)
|
||||
EngineRenew *er = (EngineRenew *)(*erl);
|
||||
EngineRenew *next;
|
||||
|
||||
while (er != NULL) {
|
||||
while (er != nullptr) {
|
||||
next = er->next;
|
||||
delete er;
|
||||
er = next;
|
||||
}
|
||||
*erl = NULL; // Empty list
|
||||
*erl = nullptr; // Empty list
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,12 +66,12 @@ void RemoveAllEngineReplacement(EngineRenewList *erl)
|
||||
EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group, bool *replace_when_old)
|
||||
{
|
||||
const EngineRenew *er = GetEngineReplacement(erl, engine, group);
|
||||
if (er == NULL && (group == DEFAULT_GROUP || (Group::IsValidID(group) && !Group::Get(group)->replace_protection))) {
|
||||
if (er == nullptr && (group == DEFAULT_GROUP || (Group::IsValidID(group) && !Group::Get(group)->replace_protection))) {
|
||||
/* We didn't find anything useful in the vehicle's own group so we will try ALL_GROUP */
|
||||
er = GetEngineReplacement(erl, engine, ALL_GROUP);
|
||||
}
|
||||
if (replace_when_old != NULL) *replace_when_old = er == NULL ? false : er->replace_when_old;
|
||||
return er == NULL ? INVALID_ENGINE : er->to;
|
||||
if (replace_when_old != nullptr) *replace_when_old = er == nullptr ? false : er->replace_when_old;
|
||||
return er == nullptr ? INVALID_ENGINE : er->to;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -88,7 +88,7 @@ CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, Engi
|
||||
{
|
||||
/* Check if the old vehicle is already in the list */
|
||||
EngineRenew *er = GetEngineReplacement(*erl, old_engine, group);
|
||||
if (er != NULL) {
|
||||
if (er != nullptr) {
|
||||
if (flags & DC_EXEC) {
|
||||
er->to = new_engine;
|
||||
er->replace_when_old = replace_when_old;
|
||||
@@ -122,12 +122,12 @@ CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, Engi
|
||||
CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, DoCommandFlag flags)
|
||||
{
|
||||
EngineRenew *er = (EngineRenew *)(*erl);
|
||||
EngineRenew *prev = NULL;
|
||||
EngineRenew *prev = nullptr;
|
||||
|
||||
while (er != NULL) {
|
||||
while (er != nullptr) {
|
||||
if (er->from == engine && er->group_id == group) {
|
||||
if (flags & DC_EXEC) {
|
||||
if (prev == NULL) { // First element
|
||||
if (prev == nullptr) { // First element
|
||||
/* The second becomes the new first element */
|
||||
*erl = (EngineRenewList)er->next;
|
||||
} else {
|
||||
|
@@ -99,9 +99,9 @@ bool CheckAutoreplaceValidity(EngineID from, EngineID to, CompanyID company)
|
||||
*/
|
||||
void CheckCargoCapacity(Vehicle *v)
|
||||
{
|
||||
assert(v == NULL || v->First() == v);
|
||||
assert(v == nullptr || v->First() == v);
|
||||
|
||||
for (Vehicle *src = v; src != NULL; src = src->Next()) {
|
||||
for (Vehicle *src = v; src != nullptr; src = src->Next()) {
|
||||
assert(src->cargo.TotalCount() == src->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||
|
||||
/* Do we need to more cargo away? */
|
||||
@@ -109,7 +109,7 @@ void CheckCargoCapacity(Vehicle *v)
|
||||
|
||||
/* We need to move a particular amount. Try that on the other vehicles. */
|
||||
uint to_spread = src->cargo.TotalCount() - src->cargo_cap;
|
||||
for (Vehicle *dest = v; dest != NULL && to_spread != 0; dest = dest->Next()) {
|
||||
for (Vehicle *dest = v; dest != nullptr && to_spread != 0; dest = dest->Next()) {
|
||||
assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||
if (dest->cargo.TotalCount() >= dest->cargo_cap || dest->cargo_type != src->cargo_type) continue;
|
||||
|
||||
@@ -136,7 +136,7 @@ static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chai
|
||||
{
|
||||
assert(!part_of_chain || new_head->IsPrimaryVehicle());
|
||||
/* Loop through source parts */
|
||||
for (Vehicle *src = old_veh; src != NULL; src = src->Next()) {
|
||||
for (Vehicle *src = old_veh; src != nullptr; src = src->Next()) {
|
||||
assert(src->cargo.TotalCount() == src->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||
if (!part_of_chain && src->type == VEH_TRAIN && src != old_veh && src != Train::From(old_veh)->other_multiheaded_part && !src->IsArticulatedPart()) {
|
||||
/* Skip vehicles, which do not belong to old_veh */
|
||||
@@ -146,7 +146,7 @@ static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chai
|
||||
if (src->cargo_type >= NUM_CARGO || src->cargo.TotalCount() == 0) continue;
|
||||
|
||||
/* Find free space in the new chain */
|
||||
for (Vehicle *dest = new_head; dest != NULL && src->cargo.TotalCount() > 0; dest = dest->Next()) {
|
||||
for (Vehicle *dest = new_head; dest != nullptr && src->cargo.TotalCount() > 0; dest = dest->Next()) {
|
||||
assert(dest->cargo.TotalCount() == dest->cargo.ActionCount(VehicleCargoList::MTA_KEEP));
|
||||
if (!part_of_chain && dest->type == VEH_TRAIN && dest != new_head && dest != Train::From(new_head)->other_multiheaded_part && !dest->IsArticulatedPart()) {
|
||||
/* Skip vehicles, which do not belong to new_head */
|
||||
@@ -217,7 +217,7 @@ static CargoID GetNewCargoTypeForReplace(Vehicle *v, EngineID engine_type, bool
|
||||
/* the old engine didn't have cargo capacity, but the new one does
|
||||
* now we will figure out what cargo the train is carrying and refit to fit this */
|
||||
|
||||
for (v = v->First(); v != NULL; v = v->Next()) {
|
||||
for (v = v->First(); v != nullptr; v = v->Next()) {
|
||||
if (!v->GetEngine()->CanCarryCargo()) continue;
|
||||
/* Now we found a cargo type being carried on the train and we will see if it is possible to carry to this one */
|
||||
if (HasBit(available_cargo_types, v->cargo_type)) return v->cargo_type;
|
||||
@@ -285,7 +285,7 @@ static CommandCost GetNewEngineType(const Vehicle *v, const Company *c, bool alw
|
||||
*/
|
||||
static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehicle, bool part_of_chain, bool same_type_only)
|
||||
{
|
||||
*new_vehicle = NULL;
|
||||
*new_vehicle = nullptr;
|
||||
|
||||
/* Shall the vehicle be replaced? */
|
||||
const Company *c = Company::Get(_current_company);
|
||||
@@ -335,14 +335,14 @@ static inline CommandCost CmdStartStopVehicle(const Vehicle *v, bool evaluate_ca
|
||||
/**
|
||||
* Issue a train vehicle move command
|
||||
* @param v The vehicle to move
|
||||
* @param after The vehicle to insert 'v' after, or NULL to start new chain
|
||||
* @param after The vehicle to insert 'v' after, or nullptr to start new chain
|
||||
* @param flags the command flags to use
|
||||
* @param whole_chain move all vehicles following 'v' (true), or only 'v' (false)
|
||||
* @return success or error
|
||||
*/
|
||||
static inline CommandCost CmdMoveVehicle(const Vehicle *v, const Vehicle *after, DoCommandFlag flags, bool whole_chain)
|
||||
{
|
||||
return DoCommand(0, v->index | (whole_chain ? 1 : 0) << 20, after != NULL ? after->index : INVALID_VEHICLE, flags | DC_NO_CARGO_CAP_CHECK, CMD_MOVE_RAIL_VEHICLE);
|
||||
return DoCommand(0, v->index | (whole_chain ? 1 : 0) << 20, after != nullptr ? after->index : INVALID_VEHICLE, flags | DC_NO_CARGO_CAP_CHECK, CMD_MOVE_RAIL_VEHICLE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -401,11 +401,11 @@ static CommandCost ReplaceFreeUnit(Vehicle **single_unit, DoCommandFlag flags, b
|
||||
CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES, 0);
|
||||
|
||||
/* Build and refit replacement vehicle */
|
||||
Vehicle *new_v = NULL;
|
||||
Vehicle *new_v = nullptr;
|
||||
cost.AddCost(BuildReplacementVehicle(old_v, &new_v, false, same_type_only));
|
||||
|
||||
/* Was a new vehicle constructed? */
|
||||
if (cost.Succeeded() && new_v != NULL) {
|
||||
if (cost.Succeeded() && new_v != nullptr) {
|
||||
*nothing_to_do = false;
|
||||
|
||||
if ((flags & DC_EXEC) != 0) {
|
||||
@@ -456,17 +456,17 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
uint16 old_total_length = CeilDiv(Train::From(old_head)->gcache.cached_total_length, TILE_SIZE) * TILE_SIZE;
|
||||
|
||||
int num_units = 0; ///< Number of units in the chain
|
||||
for (Train *w = Train::From(old_head); w != NULL; w = w->GetNextUnit()) num_units++;
|
||||
for (Train *w = Train::From(old_head); w != nullptr; w = w->GetNextUnit()) num_units++;
|
||||
|
||||
Train **old_vehs = CallocT<Train *>(num_units); ///< Will store vehicles of the old chain in their order
|
||||
Train **new_vehs = CallocT<Train *>(num_units); ///< New vehicles corresponding to old_vehs or NULL if no replacement
|
||||
Train **new_vehs = CallocT<Train *>(num_units); ///< New vehicles corresponding to old_vehs or nullptr if no replacement
|
||||
Money *new_costs = MallocT<Money>(num_units); ///< Costs for buying and refitting the new vehicles
|
||||
|
||||
/* Collect vehicles and build replacements
|
||||
* Note: The replacement vehicles can only successfully build as long as the old vehicles are still in their chain */
|
||||
int i;
|
||||
Train *w;
|
||||
for (w = Train::From(old_head), i = 0; w != NULL; w = w->GetNextUnit(), i++) {
|
||||
for (w = Train::From(old_head), i = 0; w != nullptr; w = w->GetNextUnit(), i++) {
|
||||
assert(i < num_units);
|
||||
old_vehs[i] = w;
|
||||
|
||||
@@ -475,41 +475,41 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
if (cost.Failed()) break;
|
||||
|
||||
new_costs[i] = ret.GetCost();
|
||||
if (new_vehs[i] != NULL) *nothing_to_do = false;
|
||||
if (new_vehs[i] != nullptr) *nothing_to_do = false;
|
||||
}
|
||||
Train *new_head = (new_vehs[0] != NULL ? new_vehs[0] : old_vehs[0]);
|
||||
Train *new_head = (new_vehs[0] != nullptr ? new_vehs[0] : old_vehs[0]);
|
||||
|
||||
/* Note: When autoreplace has already failed here, old_vehs[] is not completely initialized. But it is also not needed. */
|
||||
if (cost.Succeeded()) {
|
||||
/* Separate the head, so we can start constructing the new chain */
|
||||
Train *second = Train::From(old_head)->GetNextUnit();
|
||||
if (second != NULL) cost.AddCost(CmdMoveVehicle(second, NULL, DC_EXEC | DC_AUTOREPLACE, true));
|
||||
if (second != nullptr) cost.AddCost(CmdMoveVehicle(second, nullptr, DC_EXEC | DC_AUTOREPLACE, true));
|
||||
|
||||
assert(Train::From(new_head)->GetNextUnit() == NULL);
|
||||
assert(Train::From(new_head)->GetNextUnit() == nullptr);
|
||||
|
||||
/* Append engines to the new chain
|
||||
* We do this from back to front, so that the head of the temporary vehicle chain does not change all the time.
|
||||
* That way we also have less trouble when exceeding the unitnumber limit.
|
||||
* OTOH the vehicle attach callback is more expensive this way :s */
|
||||
Train *last_engine = NULL; ///< Shall store the last engine unit after this step
|
||||
Train *last_engine = nullptr; ///< Shall store the last engine unit after this step
|
||||
if (cost.Succeeded()) {
|
||||
for (int i = num_units - 1; i > 0; i--) {
|
||||
Train *append = (new_vehs[i] != NULL ? new_vehs[i] : old_vehs[i]);
|
||||
Train *append = (new_vehs[i] != nullptr ? new_vehs[i] : old_vehs[i]);
|
||||
|
||||
if (RailVehInfo(append->engine_type)->railveh_type == RAILVEH_WAGON) continue;
|
||||
|
||||
if (new_vehs[i] != NULL) {
|
||||
if (new_vehs[i] != nullptr) {
|
||||
/* Move the old engine to a separate row with DC_AUTOREPLACE. Else
|
||||
* moving the wagon in front may fail later due to unitnumber limit.
|
||||
* (We have to attach wagons without DC_AUTOREPLACE.) */
|
||||
CmdMoveVehicle(old_vehs[i], NULL, DC_EXEC | DC_AUTOREPLACE, false);
|
||||
CmdMoveVehicle(old_vehs[i], nullptr, DC_EXEC | DC_AUTOREPLACE, false);
|
||||
}
|
||||
|
||||
if (last_engine == NULL) last_engine = append;
|
||||
if (last_engine == nullptr) last_engine = append;
|
||||
cost.AddCost(CmdMoveVehicle(append, new_head, DC_EXEC, false));
|
||||
if (cost.Failed()) break;
|
||||
}
|
||||
if (last_engine == NULL) last_engine = new_head;
|
||||
if (last_engine == nullptr) last_engine = new_head;
|
||||
}
|
||||
|
||||
/* When wagon removal is enabled and the new engines without any wagons are already longer than the old, we have to fail */
|
||||
@@ -520,8 +520,8 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
*/
|
||||
if (cost.Succeeded()) {
|
||||
for (int i = num_units - 1; i > 0; i--) {
|
||||
assert(last_engine != NULL);
|
||||
Vehicle *append = (new_vehs[i] != NULL ? new_vehs[i] : old_vehs[i]);
|
||||
assert(last_engine != nullptr);
|
||||
Vehicle *append = (new_vehs[i] != nullptr ? new_vehs[i] : old_vehs[i]);
|
||||
|
||||
if (RailVehInfo(append->engine_type)->railveh_type == RAILVEH_WAGON) {
|
||||
/* Insert wagon after 'last_engine' */
|
||||
@@ -531,7 +531,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
* to the train becoming too long, or the train becoming longer
|
||||
* would move the vehicle to the empty vehicle chain. */
|
||||
if (wagon_removal && (res.Failed() ? res.GetErrorMessage() == STR_ERROR_TRAIN_TOO_LONG : new_head->gcache.cached_total_length > old_total_length)) {
|
||||
CmdMoveVehicle(append, NULL, DC_EXEC | DC_AUTOREPLACE, false);
|
||||
CmdMoveVehicle(append, nullptr, DC_EXEC | DC_AUTOREPLACE, false);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -550,7 +550,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
assert(new_head->gcache.cached_total_length <= _settings_game.vehicle.max_train_length * TILE_SIZE);
|
||||
for (int i = 1; i < num_units; i++) {
|
||||
Vehicle *wagon = new_vehs[i];
|
||||
if (wagon == NULL) continue;
|
||||
if (wagon == nullptr) continue;
|
||||
if (wagon->First() == new_head) break;
|
||||
|
||||
assert(RailVehInfo(wagon->engine_type)->railveh_type == RAILVEH_WAGON);
|
||||
@@ -558,7 +558,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
/* Sell wagon */
|
||||
CommandCost ret = DoCommand(0, wagon->index, 0, DC_EXEC, GetCmdSellVeh(wagon));
|
||||
assert(ret.Succeeded());
|
||||
new_vehs[i] = NULL;
|
||||
new_vehs[i] = nullptr;
|
||||
|
||||
/* Revert the money subtraction when the vehicle was built.
|
||||
* This value is different from the sell value, esp. because of refitting */
|
||||
@@ -584,7 +584,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
for (int i = 0; i < num_units; i++) {
|
||||
Vehicle *w = old_vehs[i];
|
||||
/* Is the vehicle again part of the new chain?
|
||||
* Note: We cannot test 'new_vehs[i] != NULL' as wagon removal might cause to remove both */
|
||||
* Note: We cannot test 'new_vehs[i] != nullptr' as wagon removal might cause to remove both */
|
||||
if (w->First() == new_head) continue;
|
||||
|
||||
if ((flags & DC_EXEC) != 0) TransferCargo(w, new_head, true);
|
||||
@@ -594,8 +594,8 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
* it from failing due to engine limits. */
|
||||
cost.AddCost(DoCommand(0, w->index, 0, flags | DC_AUTOREPLACE, GetCmdSellVeh(w)));
|
||||
if ((flags & DC_EXEC) != 0) {
|
||||
old_vehs[i] = NULL;
|
||||
if (i == 0) old_head = NULL;
|
||||
old_vehs[i] = nullptr;
|
||||
if (i == 0) old_head = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -608,9 +608,9 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
if ((flags & DC_EXEC) == 0) {
|
||||
/* Separate the head, so we can reattach the old vehicles */
|
||||
Train *second = Train::From(old_head)->GetNextUnit();
|
||||
if (second != NULL) CmdMoveVehicle(second, NULL, DC_EXEC | DC_AUTOREPLACE, true);
|
||||
if (second != nullptr) CmdMoveVehicle(second, nullptr, DC_EXEC | DC_AUTOREPLACE, true);
|
||||
|
||||
assert(Train::From(old_head)->GetNextUnit() == NULL);
|
||||
assert(Train::From(old_head)->GetNextUnit() == nullptr);
|
||||
|
||||
for (int i = num_units - 1; i > 0; i--) {
|
||||
CommandCost ret = CmdMoveVehicle(old_vehs[i], old_head, DC_EXEC | DC_AUTOREPLACE, false);
|
||||
@@ -622,9 +622,9 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
/* Finally undo buying of new vehicles */
|
||||
if ((flags & DC_EXEC) == 0) {
|
||||
for (int i = num_units - 1; i >= 0; i--) {
|
||||
if (new_vehs[i] != NULL) {
|
||||
if (new_vehs[i] != nullptr) {
|
||||
DoCommand(0, new_vehs[i]->index, 0, DC_EXEC, GetCmdSellVeh(new_vehs[i]));
|
||||
new_vehs[i] = NULL;
|
||||
new_vehs[i] = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -634,11 +634,11 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
free(new_costs);
|
||||
} else {
|
||||
/* Build and refit replacement vehicle */
|
||||
Vehicle *new_head = NULL;
|
||||
Vehicle *new_head = nullptr;
|
||||
cost.AddCost(BuildReplacementVehicle(old_head, &new_head, true, same_type_only));
|
||||
|
||||
/* Was a new vehicle constructed? */
|
||||
if (cost.Succeeded() && new_head != NULL) {
|
||||
if (cost.Succeeded() && new_head != nullptr) {
|
||||
*nothing_to_do = false;
|
||||
|
||||
/* The new vehicle is constructed, now take over orders and everything... */
|
||||
@@ -679,7 +679,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlag flags, bool wagon
|
||||
CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Vehicle *v = Vehicle::GetIfValid(p1);
|
||||
if (v == NULL) return CMD_ERROR;
|
||||
if (v == nullptr) return CMD_ERROR;
|
||||
|
||||
CommandCost ret = CheckOwnership(v->owner);
|
||||
if (ret.Failed()) return ret;
|
||||
@@ -704,12 +704,12 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||
/* Test whether any replacement is set, before issuing a whole lot of commands that would end in nothing changed */
|
||||
Vehicle *w = v;
|
||||
bool any_replacements = false;
|
||||
while (w != NULL) {
|
||||
while (w != nullptr) {
|
||||
EngineID e;
|
||||
CommandCost cost = GetNewEngineType(w, c, false, same_type_only, e);
|
||||
if (cost.Failed()) return cost;
|
||||
any_replacements |= (e != INVALID_ENGINE);
|
||||
w = (!free_wagon && w->type == VEH_TRAIN ? Train::From(w)->GetNextUnit() : NULL);
|
||||
w = (!free_wagon && w->type == VEH_TRAIN ? Train::From(w)->GetNextUnit() : nullptr);
|
||||
}
|
||||
|
||||
CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES, 0);
|
||||
@@ -770,7 +770,7 @@ CommandCost CmdAutoreplaceVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||
CommandCost CmdSetAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Company *c = Company::GetIfValid(_current_company);
|
||||
if (c == NULL) return CMD_ERROR;
|
||||
if (c == nullptr) return CMD_ERROR;
|
||||
|
||||
EngineID old_engine_type = GB(p2, 0, 16);
|
||||
EngineID new_engine_type = GB(p2, 16, 16);
|
||||
|
@@ -16,7 +16,7 @@
|
||||
#include "company_base.h"
|
||||
|
||||
void RemoveAllEngineReplacement(EngineRenewList *erl);
|
||||
EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group, bool *replace_when_old = NULL);
|
||||
EngineID EngineReplacement(EngineRenewList erl, EngineID engine, GroupID group, bool *replace_when_old = nullptr);
|
||||
CommandCost AddEngineReplacement(EngineRenewList *erl, EngineID old_engine, EngineID new_engine, GroupID group, bool replace_when_old, DoCommandFlag flags);
|
||||
CommandCost RemoveEngineReplacement(EngineRenewList *erl, EngineID engine, GroupID group, DoCommandFlag flags);
|
||||
|
||||
@@ -38,7 +38,7 @@ static inline void RemoveAllEngineReplacementForCompany(Company *c)
|
||||
* @return The engine type to replace with, or INVALID_ENGINE if no
|
||||
* replacement is in the list.
|
||||
*/
|
||||
static inline EngineID EngineReplacementForCompany(const Company *c, EngineID engine, GroupID group, bool *replace_when_old = NULL)
|
||||
static inline EngineID EngineReplacementForCompany(const Company *c, EngineID engine, GroupID group, bool *replace_when_old = nullptr)
|
||||
{
|
||||
return EngineReplacement(c->engine_renew_list, engine, group, replace_when_old);
|
||||
}
|
||||
|
@@ -30,7 +30,7 @@ void BaseConsist::CopyConsistPropertiesFrom(const BaseConsist *src)
|
||||
if (this == src) return;
|
||||
|
||||
free(this->name);
|
||||
this->name = src->name != NULL ? stredup(src->name) : NULL;
|
||||
this->name = src->name != nullptr ? stredup(src->name) : nullptr;
|
||||
|
||||
this->current_order_time = src->current_order_time;
|
||||
this->lateness_counter = src->lateness_counter;
|
||||
|
@@ -34,7 +34,7 @@ struct BaseConsist {
|
||||
|
||||
uint16 vehicle_flags; ///< Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
|
||||
|
||||
BaseConsist() : name(NULL) {}
|
||||
BaseConsist() : name(nullptr) {}
|
||||
virtual ~BaseConsist();
|
||||
|
||||
void CopyConsistPropertiesFrom(const BaseConsist *src);
|
||||
|
@@ -118,9 +118,9 @@ struct BaseSet {
|
||||
* @param isocode the isocode to search for
|
||||
* @return the description
|
||||
*/
|
||||
const char *GetDescription(const char *isocode = NULL) const
|
||||
const char *GetDescription(const char *isocode = nullptr) const
|
||||
{
|
||||
if (isocode != NULL) {
|
||||
if (isocode != nullptr) {
|
||||
/* First the full ISO code */
|
||||
for (const auto &pair : this->description) {
|
||||
if (strcmp(pair.first, isocode) == 0) return pair.second;
|
||||
@@ -151,17 +151,17 @@ struct BaseSet {
|
||||
/**
|
||||
* Search a textfile file next to this base media.
|
||||
* @param type The type of the textfile to search for.
|
||||
* @return The filename for the textfile, \c NULL otherwise.
|
||||
* @return The filename for the textfile, \c nullptr otherwise.
|
||||
*/
|
||||
const char *GetTextfile(TextfileType type) const
|
||||
{
|
||||
for (uint i = 0; i < NUM_FILES; i++) {
|
||||
const char *textfile = ::GetTextfile(type, BASESET_DIR, this->files[i].filename);
|
||||
if (textfile != NULL) {
|
||||
if (textfile != nullptr) {
|
||||
return textfile;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -231,7 +231,7 @@ template <class Tbase_set> /* static */ Tbase_set *BaseMedia<Tbase_set>::duplica
|
||||
* @param ci The content info to compare it to.
|
||||
* @param md5sum Should the MD5 checksum be tested as well?
|
||||
* @param s The list with sets.
|
||||
* @return The filename of the first file of the base set, or \c NULL if there is no match.
|
||||
* @return The filename of the first file of the base set, or \c nullptr if there is no match.
|
||||
*/
|
||||
template <class Tbase_set>
|
||||
const char *TryGetBaseSetFile(const ContentInfo *ci, bool md5sum, const Tbase_set *s);
|
||||
|
@@ -23,7 +23,7 @@
|
||||
*/
|
||||
#define fetch_metadata(name) \
|
||||
item = metadata->GetItem(name, false); \
|
||||
if (item == NULL || StrEmpty(item->value)) { \
|
||||
if (item == nullptr || StrEmpty(item->value)) { \
|
||||
DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: %s field missing.", name); \
|
||||
DEBUG(grf, 0, " Is %s readable for the user running OpenTTD?", full_filename); \
|
||||
return false; \
|
||||
@@ -50,7 +50,7 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
this->description[stredup("")] = stredup(item->value);
|
||||
|
||||
/* Add the translations of the descriptions too. */
|
||||
for (const IniItem *item = metadata->item; item != NULL; item = item->next) {
|
||||
for (const IniItem *item = metadata->item; item != nullptr; item = item->next) {
|
||||
if (strncmp("description.", item->name, 12) != 0) continue;
|
||||
|
||||
this->description[stredup(item->name + 12)] = stredup(item->value);
|
||||
@@ -65,7 +65,7 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
this->version = atoi(item->value);
|
||||
|
||||
item = metadata->GetItem("fallback", false);
|
||||
this->fallback = (item != NULL && strcmp(item->value, "0") != 0 && strcmp(item->value, "false") != 0);
|
||||
this->fallback = (item != nullptr && strcmp(item->value, "0") != 0 && strcmp(item->value, "false") != 0);
|
||||
|
||||
/* For each of the file types we want to find the file, MD5 checksums and warning messages. */
|
||||
IniGroup *files = ini->GetGroup("files");
|
||||
@@ -75,14 +75,14 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
MD5File *file = &this->files[i];
|
||||
/* Find the filename first. */
|
||||
item = files->GetItem(BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], false);
|
||||
if (item == NULL || (item->value == NULL && !allow_empty_filename)) {
|
||||
if (item == nullptr || (item->value == nullptr && !allow_empty_filename)) {
|
||||
DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], full_filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *filename = item->value;
|
||||
if (filename == NULL) {
|
||||
file->filename = NULL;
|
||||
if (filename == nullptr) {
|
||||
file->filename = nullptr;
|
||||
/* If we list no file, that file must be valid */
|
||||
this->valid_files++;
|
||||
this->found_files++;
|
||||
@@ -93,7 +93,7 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
|
||||
/* Then find the MD5 checksum */
|
||||
item = md5s->GetItem(filename, false);
|
||||
if (item == NULL || item->value == NULL) {
|
||||
if (item == nullptr || item->value == nullptr) {
|
||||
DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename, full_filename);
|
||||
return false;
|
||||
}
|
||||
@@ -119,8 +119,8 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
|
||||
/* Then find the warning message when the file's missing */
|
||||
item = origin->GetItem(filename, false);
|
||||
if (item == NULL) item = origin->GetItem("default", false);
|
||||
if (item == NULL) {
|
||||
if (item == nullptr) item = origin->GetItem("default", false);
|
||||
if (item == nullptr) {
|
||||
DEBUG(grf, 1, "No origin warning message specified for: %s", filename);
|
||||
file->missing_warning = stredup("");
|
||||
} else {
|
||||
@@ -163,21 +163,21 @@ bool BaseMedia<Tbase_set>::AddFile(const char *filename, size_t basepath_length,
|
||||
|
||||
char *path = stredup(filename + basepath_length);
|
||||
char *psep = strrchr(path, PATHSEPCHAR);
|
||||
if (psep != NULL) {
|
||||
if (psep != nullptr) {
|
||||
psep[1] = '\0';
|
||||
} else {
|
||||
*path = '\0';
|
||||
}
|
||||
|
||||
if (set->FillSetDetails(ini, path, filename)) {
|
||||
Tbase_set *duplicate = NULL;
|
||||
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != NULL; c = c->next) {
|
||||
Tbase_set *duplicate = nullptr;
|
||||
for (Tbase_set *c = BaseMedia<Tbase_set>::available_sets; c != nullptr; c = c->next) {
|
||||
if (strcmp(c->name, set->name) == 0 || c->shortname == set->shortname) {
|
||||
duplicate = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (duplicate != NULL) {
|
||||
if (duplicate != nullptr) {
|
||||
/* The more complete set takes precedence over the version number. */
|
||||
if ((duplicate->valid_files == set->valid_files && duplicate->version >= set->version) ||
|
||||
duplicate->valid_files > set->valid_files) {
|
||||
@@ -205,7 +205,7 @@ bool BaseMedia<Tbase_set>::AddFile(const char *filename, size_t basepath_length,
|
||||
}
|
||||
} else {
|
||||
Tbase_set **last = &BaseMedia<Tbase_set>::available_sets;
|
||||
while (*last != NULL) last = &(*last)->next;
|
||||
while (*last != nullptr) last = &(*last)->next;
|
||||
|
||||
*last = set;
|
||||
ret = true;
|
||||
@@ -238,7 +238,7 @@ template <class Tbase_set>
|
||||
return true;
|
||||
}
|
||||
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != nullptr; s = s->next) {
|
||||
if (strcmp(name, s->name) == 0) {
|
||||
BaseMedia<Tbase_set>::used_set = s;
|
||||
CheckExternalFiles();
|
||||
@@ -258,7 +258,7 @@ template <class Tbase_set>
|
||||
/* static */ char *BaseMedia<Tbase_set>::GetSetsList(char *p, const char *last)
|
||||
{
|
||||
p += seprintf(p, last, "List of " SET_TYPE " sets:\n");
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != nullptr; s = s->next) {
|
||||
p += seprintf(p, last, "%18s: %s", s->name, s->GetDescription());
|
||||
int invalid = s->GetNumInvalid();
|
||||
if (invalid != 0) {
|
||||
@@ -281,7 +281,7 @@ template <class Tbase_set>
|
||||
|
||||
template <class Tbase_set> const char *TryGetBaseSetFile(const ContentInfo *ci, bool md5sum, const Tbase_set *s)
|
||||
{
|
||||
for (; s != NULL; s = s->next) {
|
||||
for (; s != nullptr; s = s->next) {
|
||||
if (s->GetNumMissing() != 0) continue;
|
||||
|
||||
if (s->shortname != ci->unique_id) continue;
|
||||
@@ -296,14 +296,14 @@ template <class Tbase_set> const char *TryGetBaseSetFile(const ContentInfo *ci,
|
||||
}
|
||||
if (memcmp(md5, ci->md5sum, sizeof(md5)) == 0) return s->files[0].filename;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <class Tbase_set>
|
||||
/* static */ bool BaseMedia<Tbase_set>::HasSet(const ContentInfo *ci, bool md5sum)
|
||||
{
|
||||
return (TryGetBaseSetFile(ci, md5sum, BaseMedia<Tbase_set>::available_sets) != NULL) ||
|
||||
(TryGetBaseSetFile(ci, md5sum, BaseMedia<Tbase_set>::duplicate_sets) != NULL);
|
||||
return (TryGetBaseSetFile(ci, md5sum, BaseMedia<Tbase_set>::available_sets) != nullptr) ||
|
||||
(TryGetBaseSetFile(ci, md5sum, BaseMedia<Tbase_set>::duplicate_sets) != nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -314,7 +314,7 @@ template <class Tbase_set>
|
||||
/* static */ int BaseMedia<Tbase_set>::GetNumSets()
|
||||
{
|
||||
int n = 0;
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != nullptr; s = s->next) {
|
||||
if (s != BaseMedia<Tbase_set>::used_set && s->GetNumMissing() != 0) continue;
|
||||
n++;
|
||||
}
|
||||
@@ -329,7 +329,7 @@ template <class Tbase_set>
|
||||
/* static */ int BaseMedia<Tbase_set>::GetIndexOfUsedSet()
|
||||
{
|
||||
int n = 0;
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != nullptr; s = s->next) {
|
||||
if (s == BaseMedia<Tbase_set>::used_set) return n;
|
||||
if (s->GetNumMissing() != 0) continue;
|
||||
n++;
|
||||
@@ -344,7 +344,7 @@ template <class Tbase_set>
|
||||
template <class Tbase_set>
|
||||
/* static */ const Tbase_set *BaseMedia<Tbase_set>::GetSet(int index)
|
||||
{
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
|
||||
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != nullptr; s = s->next) {
|
||||
if (s != BaseMedia<Tbase_set>::used_set && s->GetNumMissing() != 0) continue;
|
||||
if (index == 0) return s;
|
||||
index--;
|
||||
|
@@ -233,7 +233,7 @@ struct SpecializedStation : public BaseStation {
|
||||
*/
|
||||
static inline T *GetIfValid(size_t index)
|
||||
{
|
||||
return IsValidID(index) ? Get(index) : NULL;
|
||||
return IsValidID(index) ? Get(index) : nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -270,7 +270,7 @@ struct SpecializedStation : public BaseStation {
|
||||
};
|
||||
|
||||
#define FOR_ALL_BASE_STATIONS_OF_TYPE(name, var) \
|
||||
for (size_t station_index = 0; var = NULL, station_index < name::GetPoolSize(); station_index++) \
|
||||
if ((var = name::GetIfValid(station_index)) != NULL)
|
||||
for (size_t station_index = 0; var = nullptr, station_index < name::GetPoolSize(); station_index++) \
|
||||
if ((var = name::GetIfValid(station_index)) != nullptr)
|
||||
|
||||
#endif /* BASE_STATION_BASE_H */
|
||||
|
@@ -496,7 +496,7 @@ void Blitter_32bppAnim::CopyToBuffer(const void *video, void *dst, int width, in
|
||||
uint32 *udst = (uint32 *)dst;
|
||||
const uint32 *src = (const uint32 *)video;
|
||||
|
||||
if (this->anim_buf == NULL) return;
|
||||
if (this->anim_buf == nullptr) return;
|
||||
|
||||
const uint16 *anim_line = this->ScreenToAnimOffset((const uint32 *)video) + this->anim_buf;
|
||||
|
||||
|
@@ -26,8 +26,8 @@ protected:
|
||||
|
||||
public:
|
||||
Blitter_32bppAnim() :
|
||||
anim_buf(NULL),
|
||||
anim_alloc(NULL),
|
||||
anim_buf(nullptr),
|
||||
anim_alloc(nullptr),
|
||||
anim_buf_width(0),
|
||||
anim_buf_pitch(0),
|
||||
anim_buf_height(0)
|
||||
|
@@ -167,7 +167,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloca
|
||||
uint trans = 0;
|
||||
uint pixels = 0;
|
||||
uint last_colour = 0;
|
||||
byte *count_dst = NULL;
|
||||
byte *count_dst = nullptr;
|
||||
|
||||
/* Store the scaled image */
|
||||
const SpriteLoader::CommonPixel *src = &sprite[i].data[y * sprite[i].width];
|
||||
@@ -176,11 +176,11 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloca
|
||||
uint colour = src++->m;
|
||||
|
||||
if (last_colour == 0 || colour == 0 || pixels == 255) {
|
||||
if (count_dst != NULL) {
|
||||
if (count_dst != nullptr) {
|
||||
/* Write how many non-transparent bytes we get */
|
||||
*count_dst = pixels;
|
||||
pixels = 0;
|
||||
count_dst = NULL;
|
||||
count_dst = nullptr;
|
||||
}
|
||||
/* As long as we find transparency bytes, keep counting */
|
||||
if (colour == 0 && trans != 255) {
|
||||
@@ -206,7 +206,7 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::Sprite *sprite, Alloca
|
||||
}
|
||||
}
|
||||
|
||||
if (count_dst != NULL) *count_dst = pixels;
|
||||
if (count_dst != nullptr) *count_dst = pixels;
|
||||
|
||||
/* Write line-ending */
|
||||
*dst = 0; dst++;
|
||||
|
@@ -48,7 +48,7 @@ private:
|
||||
*/
|
||||
static Blitter **GetActiveBlitter()
|
||||
{
|
||||
static Blitter *s_blitter = NULL;
|
||||
static Blitter *s_blitter = nullptr;
|
||||
return &s_blitter;
|
||||
}
|
||||
|
||||
@@ -58,8 +58,8 @@ protected:
|
||||
* @param name The name of the blitter.
|
||||
* @param description A longer description for the blitter.
|
||||
* @param usable Whether the blitter is usable (on the current computer). For example for disabling SSE blitters when the CPU can't handle them.
|
||||
* @pre name != NULL.
|
||||
* @pre description != NULL.
|
||||
* @pre name != nullptr.
|
||||
* @pre description != nullptr.
|
||||
* @pre There is no blitter registered with this name.
|
||||
*/
|
||||
BlitterFactory(const char *name, const char *description, bool usable = true) :
|
||||
@@ -96,7 +96,7 @@ public:
|
||||
static Blitter *SelectBlitter(const char *name)
|
||||
{
|
||||
BlitterFactory *b = GetBlitterFactory(name);
|
||||
if (b == NULL) return NULL;
|
||||
if (b == nullptr) return nullptr;
|
||||
|
||||
Blitter *newb = b->CreateInstance();
|
||||
delete *GetActiveBlitter();
|
||||
@@ -109,7 +109,7 @@ public:
|
||||
/**
|
||||
* Get the blitter factory with the given name.
|
||||
* @param name the blitter factory to select.
|
||||
* @return The blitter factory, or NULL when there isn't one with the wanted name.
|
||||
* @return The blitter factory, or nullptr when there isn't one with the wanted name.
|
||||
*/
|
||||
static BlitterFactory *GetBlitterFactory(const char *name)
|
||||
{
|
||||
@@ -128,7 +128,7 @@ public:
|
||||
}
|
||||
#endif /* defined(WITH_COCOA) */
|
||||
#endif /* defined(DEDICATED) */
|
||||
if (GetBlitters().size() == 0) return NULL;
|
||||
if (GetBlitters().size() == 0) return nullptr;
|
||||
const char *bname = (StrEmpty(name)) ? default_blitter : name;
|
||||
|
||||
Blitters::iterator it = GetBlitters().begin();
|
||||
@@ -138,7 +138,7 @@ public:
|
||||
return b;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -21,7 +21,7 @@ public:
|
||||
void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override {};
|
||||
void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override {};
|
||||
Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override;
|
||||
void *MoveTo(void *video, int x, int y) override { return NULL; };
|
||||
void *MoveTo(void *video, int x, int y) override { return nullptr; };
|
||||
void SetPixel(void *video, int x, int y, uint8 colour) override {};
|
||||
void DrawRect(void *video, int width, int height, uint8 colour) override {};
|
||||
void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) override {};
|
||||
|
@@ -319,7 +319,7 @@ static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||
bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||
{
|
||||
uint32 header_size;
|
||||
assert(info != NULL);
|
||||
assert(info != nullptr);
|
||||
MemSetT(info, 0);
|
||||
|
||||
/* Reading BMP header */
|
||||
@@ -390,7 +390,7 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||
*/
|
||||
bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||
{
|
||||
assert(info != NULL && data != NULL);
|
||||
assert(info != nullptr && data != nullptr);
|
||||
|
||||
data->bitmap = CallocT<byte>(info->width * info->height * ((info->bpp == 24) ? 3 : 1));
|
||||
|
||||
@@ -413,7 +413,7 @@ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
|
||||
|
||||
void BmpDestroyData(BmpData *data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
assert(data != nullptr);
|
||||
free(data->palette);
|
||||
free(data->bitmap);
|
||||
}
|
||||
|
@@ -40,7 +40,7 @@ static const struct NWidgetPart _background_widgets[] = {
|
||||
* Window description for the background window to prevent smearing.
|
||||
*/
|
||||
static WindowDesc _background_desc(
|
||||
WDP_MANUAL, NULL, 0, 0,
|
||||
WDP_MANUAL, nullptr, 0, 0,
|
||||
WC_BOOTSTRAP, WC_NONE,
|
||||
0,
|
||||
_background_widgets, lengthof(_background_widgets)
|
||||
@@ -73,7 +73,7 @@ static const NWidgetPart _nested_boostrap_download_status_window_widgets[] = {
|
||||
|
||||
/** Window description for the download window */
|
||||
static WindowDesc _bootstrap_download_status_window_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_NETWORK_STATUS_WINDOW, WC_NONE,
|
||||
WDF_MODAL,
|
||||
_nested_boostrap_download_status_window_widgets, lengthof(_nested_boostrap_download_status_window_widgets)
|
||||
@@ -118,7 +118,7 @@ static const NWidgetPart _bootstrap_query_widgets[] = {
|
||||
|
||||
/** The window description for the query. */
|
||||
static WindowDesc _bootstrap_query_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_CONFIRM_POPUP_QUERY, WC_NONE,
|
||||
0,
|
||||
_bootstrap_query_widgets, lengthof(_bootstrap_query_widgets)
|
||||
@@ -214,7 +214,7 @@ public:
|
||||
*/
|
||||
bool HandleBootstrap()
|
||||
{
|
||||
if (BaseGraphics::GetUsedSet() != NULL) return true;
|
||||
if (BaseGraphics::GetUsedSet() != nullptr) return true;
|
||||
|
||||
/* No user interface, bail out with an error. */
|
||||
if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) goto failure;
|
||||
@@ -255,7 +255,7 @@ bool HandleBootstrap()
|
||||
if (_exit_game) return false;
|
||||
|
||||
/* Try to probe the graphics. Should work this time. */
|
||||
if (!BaseGraphics::SetSet(NULL)) goto failure;
|
||||
if (!BaseGraphics::SetSet(nullptr)) goto failure;
|
||||
|
||||
/* Finally we can continue heading for the menu. */
|
||||
_game_mode = GM_MENU;
|
||||
|
@@ -398,7 +398,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
|
||||
|
||||
const bool query_per_bridge_type = ret.Failed() && (ret.GetErrorMessage() == STR_ERROR_BRIDGE_TOO_LOW_FOR_STATION || ret.GetErrorMessage() == STR_ERROR_BRIDGE_PILLARS_OBSTRUCT_STATION);
|
||||
|
||||
GUIBridgeList *bl = NULL;
|
||||
GUIBridgeList *bl = nullptr;
|
||||
if (ret.Failed()) {
|
||||
errmsg = ret.GetErrorMessage();
|
||||
}
|
||||
@@ -436,7 +436,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
|
||||
}
|
||||
}
|
||||
|
||||
if (bl != NULL && bl->size() != 0) {
|
||||
if (bl != nullptr && bl->size() != 0) {
|
||||
new BuildBridgeWindow(&_build_bridge_desc, start, end, type, bl);
|
||||
} else {
|
||||
delete bl;
|
||||
|
@@ -834,7 +834,7 @@ static int DrawAircraftPurchaseInfo(int left, int right, int y, EngineID engine_
|
||||
*/
|
||||
static uint ShowAdditionalText(int left, int right, int y, EngineID engine)
|
||||
{
|
||||
uint16 callback = GetVehicleCallback(CBID_VEHICLE_ADDITIONAL_TEXT, 0, 0, engine, NULL);
|
||||
uint16 callback = GetVehicleCallback(CBID_VEHICLE_ADDITIONAL_TEXT, 0, 0, engine, nullptr);
|
||||
if (callback == CALLBACK_FAILED || callback == 0x400) return y;
|
||||
const GRFFile *grffile = Engine::Get(engine)->GetGRF();
|
||||
if (callback > 0x400) {
|
||||
@@ -1063,7 +1063,7 @@ struct BuildVehicleWindow : Window {
|
||||
this->vehicle_type = type;
|
||||
this->window_number = tile == INVALID_TILE ? (int)type : tile;
|
||||
this->virtual_train_out = virtual_train_out;
|
||||
this->virtual_train_mode = (virtual_train_out != NULL);
|
||||
this->virtual_train_mode = (virtual_train_out != nullptr);
|
||||
if (this->virtual_train_mode) this->window_number = 0;
|
||||
|
||||
this->sel_engine = INVALID_ENGINE;
|
||||
@@ -1193,7 +1193,7 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
if (!this->listview_mode) {
|
||||
/* Query for cost and refitted capacity */
|
||||
CommandCost ret = DoCommand(this->window_number, this->sel_engine | (cargo << 24), 0, DC_QUERY_COST, GetCmdBuildVeh(this->vehicle_type), NULL);
|
||||
CommandCost ret = DoCommand(this->window_number, this->sel_engine | (cargo << 24), 0, DC_QUERY_COST, GetCmdBuildVeh(this->vehicle_type), nullptr);
|
||||
if (ret.Succeeded()) {
|
||||
this->te.cost = ret.GetCost() - e->GetCost();
|
||||
this->te.capacity = _returned_refit_capacity;
|
||||
@@ -1329,7 +1329,7 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
this->eng_list.clear();
|
||||
|
||||
const Station *st = this->listview_mode ? NULL : Station::GetByTile(this->window_number);
|
||||
const Station *st = this->listview_mode ? nullptr : Station::GetByTile(this->window_number);
|
||||
|
||||
/* Make list of all available planes.
|
||||
* Also check to see if the previously selected plane is still available,
|
||||
@@ -1421,8 +1421,8 @@ struct BuildVehicleWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_BV_SHOW_HIDE: {
|
||||
const Engine *e = (this->sel_engine == INVALID_ENGINE) ? NULL : Engine::Get(this->sel_engine);
|
||||
if (e != NULL) {
|
||||
const Engine *e = (this->sel_engine == INVALID_ENGINE) ? nullptr : Engine::Get(this->sel_engine);
|
||||
if (e != nullptr) {
|
||||
DoCommandP(0, 0, this->sel_engine | (e->IsHidden(_current_company) ? 0 : (1u << 31)), CMD_SET_VEHICLE_VISIBILITY);
|
||||
}
|
||||
break;
|
||||
@@ -1499,8 +1499,8 @@ struct BuildVehicleWindow : Window {
|
||||
break;
|
||||
|
||||
case WID_BV_SHOW_HIDE: {
|
||||
const Engine *e = (this->sel_engine == INVALID_ENGINE) ? NULL : Engine::Get(this->sel_engine);
|
||||
if (e != NULL && e->IsHidden(_local_company)) {
|
||||
const Engine *e = (this->sel_engine == INVALID_ENGINE) ? nullptr : Engine::Get(this->sel_engine);
|
||||
if (e != nullptr && e->IsHidden(_local_company)) {
|
||||
SetDParam(0, STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON + this->vehicle_type);
|
||||
} else {
|
||||
SetDParam(0, STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON + this->vehicle_type);
|
||||
@@ -1589,9 +1589,9 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
void OnQueryTextFinished(char *str) override
|
||||
{
|
||||
if (str == NULL) return;
|
||||
if (str == nullptr) return;
|
||||
|
||||
DoCommandP(0, this->rename_engine, 0, CMD_RENAME_ENGINE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type), NULL, str);
|
||||
DoCommandP(0, this->rename_engine, 0, CMD_RENAME_ENGINE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type), nullptr, str);
|
||||
}
|
||||
|
||||
void OnDropdownSelect(int widget, int index) override
|
||||
@@ -1626,9 +1626,9 @@ struct BuildVehicleWindow : Window {
|
||||
|
||||
void AddVirtualEngine(Train *toadd)
|
||||
{
|
||||
if (this->virtual_train_out == NULL) return;
|
||||
if (this->virtual_train_out == nullptr) return;
|
||||
|
||||
if (*(this->virtual_train_out) == NULL) {
|
||||
if (*(this->virtual_train_out) == nullptr) {
|
||||
*(this->virtual_train_out) = toadd;
|
||||
} else {
|
||||
VehicleID target = (*(this->virtual_train_out))->GetLastUnit()->index;
|
||||
@@ -1677,7 +1677,7 @@ void ShowBuildVehicleWindow(TileIndex tile, VehicleType type)
|
||||
|
||||
DeleteWindowById(WC_BUILD_VEHICLE, num);
|
||||
|
||||
new BuildVehicleWindow(&_build_vehicle_desc, tile, type, NULL);
|
||||
new BuildVehicleWindow(&_build_vehicle_desc, tile, type, nullptr);
|
||||
}
|
||||
|
||||
void ShowTemplateTrainBuildVehicleWindow(Train **virtual_train)
|
||||
|
@@ -121,7 +121,7 @@ bool CargoDelivery::operator()(CargoPacket *cp)
|
||||
bool CargoLoad::operator()(CargoPacket *cp)
|
||||
{
|
||||
CargoPacket *cp_new = this->Preprocess(cp);
|
||||
if (cp_new == NULL) return false;
|
||||
if (cp_new == nullptr) return false;
|
||||
cp_new->SetLoadPlace(this->load_place);
|
||||
this->source->RemoveFromCache(cp_new, cp_new->Count());
|
||||
this->destination->Append(cp_new, VehicleCargoList::MTA_KEEP);
|
||||
@@ -136,7 +136,7 @@ bool CargoLoad::operator()(CargoPacket *cp)
|
||||
bool CargoReservation::operator()(CargoPacket *cp)
|
||||
{
|
||||
CargoPacket *cp_new = this->Preprocess(cp);
|
||||
if (cp_new == NULL) return false;
|
||||
if (cp_new == nullptr) return false;
|
||||
cp_new->SetLoadPlace(this->load_place);
|
||||
this->source->reserved_count += cp_new->Count();
|
||||
this->source->RemoveFromCache(cp_new, cp_new->Count());
|
||||
@@ -152,7 +152,7 @@ bool CargoReservation::operator()(CargoPacket *cp)
|
||||
bool CargoReturn::operator()(CargoPacket *cp)
|
||||
{
|
||||
CargoPacket *cp_new = this->Preprocess(cp);
|
||||
if (cp_new == NULL) cp_new = cp;
|
||||
if (cp_new == nullptr) cp_new = cp;
|
||||
assert(cp_new->Count() <= this->destination->reserved_count);
|
||||
this->source->RemoveFromMeta(cp_new, VehicleCargoList::MTA_LOAD, cp_new->Count());
|
||||
this->destination->reserved_count -= cp_new->Count();
|
||||
@@ -168,7 +168,7 @@ bool CargoReturn::operator()(CargoPacket *cp)
|
||||
bool CargoTransfer::operator()(CargoPacket *cp)
|
||||
{
|
||||
CargoPacket *cp_new = this->Preprocess(cp);
|
||||
if (cp_new == NULL) return false;
|
||||
if (cp_new == nullptr) return false;
|
||||
this->source->RemoveFromMeta(cp_new, VehicleCargoList::MTA_TRANSFER, cp_new->Count());
|
||||
/* No transfer credits here as they were already granted during Stage(). */
|
||||
this->destination->Append(cp_new, cp_new->NextStation());
|
||||
@@ -183,7 +183,7 @@ bool CargoTransfer::operator()(CargoPacket *cp)
|
||||
bool CargoShift::operator()(CargoPacket *cp)
|
||||
{
|
||||
CargoPacket *cp_new = this->Preprocess(cp);
|
||||
if (cp_new == NULL) cp_new = cp;
|
||||
if (cp_new == nullptr) cp_new = cp;
|
||||
this->source->RemoveFromMeta(cp_new, VehicleCargoList::MTA_KEEP, cp_new->Count());
|
||||
this->destination->Append(cp_new, VehicleCargoList::MTA_KEEP);
|
||||
return cp_new == cp;
|
||||
@@ -197,7 +197,7 @@ bool CargoShift::operator()(CargoPacket *cp)
|
||||
bool StationCargoReroute::operator()(CargoPacket *cp)
|
||||
{
|
||||
CargoPacket *cp_new = this->Preprocess(cp);
|
||||
if (cp_new == NULL) cp_new = cp;
|
||||
if (cp_new == nullptr) cp_new = cp;
|
||||
StationID next = this->ge->GetVia(cp_new->SourceStation(), this->avoid, this->avoid2);
|
||||
assert(next != this->avoid && next != this->avoid2);
|
||||
if (this->source != this->destination) {
|
||||
@@ -221,7 +221,7 @@ bool StationCargoReroute::operator()(CargoPacket *cp)
|
||||
bool VehicleCargoReroute::operator()(CargoPacket *cp, std::vector<CargoPacket *> &front_insert)
|
||||
{
|
||||
CargoPacket *cp_new = this->Preprocess(cp);
|
||||
if (cp_new == NULL) cp_new = cp;
|
||||
if (cp_new == nullptr) cp_new = cp;
|
||||
if (cp_new->NextStation() == this->avoid || cp_new->NextStation() == this->avoid2) {
|
||||
cp->SetNextStation(this->ge->GetVia(cp_new->SourceStation(), this->avoid, this->avoid2));
|
||||
}
|
||||
|
@@ -171,11 +171,11 @@ CargoPacket::~CargoPacket()
|
||||
/**
|
||||
* Split this packet in two and return the split off part.
|
||||
* @param new_size Size of the split part.
|
||||
* @return Split off part, or NULL if no packet could be allocated!
|
||||
* @return Split off part, or nullptr if no packet could be allocated!
|
||||
*/
|
||||
CargoPacket *CargoPacket::Split(uint new_size)
|
||||
{
|
||||
if (!CargoPacket::CanAllocateItem()) return NULL;
|
||||
if (!CargoPacket::CanAllocateItem()) return nullptr;
|
||||
|
||||
Money fs = this->FeederShare(new_size);
|
||||
CargoPacket *cp_new = new CargoPacket(new_size, this->days_in_transit, this->source, this->source_xy, this->loaded_at_xy, fs, this->source_type, this->source_id);
|
||||
@@ -394,12 +394,12 @@ template <class Tinst, class Tcont>
|
||||
* @param cp Cargo packet to add.
|
||||
* @param action Either MTA_KEEP if you want to add the packet directly or MTA_LOAD
|
||||
* if you want to reserve it first.
|
||||
* @pre cp != NULL
|
||||
* @pre cp != nullptr
|
||||
* @pre action == MTA_LOAD || (action == MTA_KEEP && this->designation_counts[MTA_LOAD] == 0)
|
||||
*/
|
||||
void VehicleCargoList::Append(CargoPacket *cp, MoveToAction action)
|
||||
{
|
||||
assert(cp != NULL);
|
||||
assert(cp != nullptr);
|
||||
assert(action == MTA_LOAD ||
|
||||
(action == MTA_KEEP && this->action_counts[MTA_LOAD] == 0));
|
||||
this->AddToMeta(cp, action);
|
||||
@@ -867,11 +867,11 @@ uint VehicleCargoList::Reroute(uint max_move, VehicleCargoList *dest, StationID
|
||||
* @note Do not use the cargo packet anymore after it has been appended to this CargoList!
|
||||
* @param next the next hop
|
||||
* @param cp the cargo packet to add
|
||||
* @pre cp != NULL
|
||||
* @pre cp != nullptr
|
||||
*/
|
||||
void StationCargoList::Append(CargoPacket *cp, StationID next)
|
||||
{
|
||||
assert(cp != NULL);
|
||||
assert(cp != nullptr);
|
||||
this->AddToCache(cp);
|
||||
|
||||
StationCargoPacketMap::List &list = this->packets[next];
|
||||
@@ -954,7 +954,7 @@ uint StationCargoList::Truncate(uint max_move, StationCargoAmountMap *cargo_per_
|
||||
uint prev_count = this->count;
|
||||
uint moved = 0;
|
||||
uint loop = 0;
|
||||
bool do_count = cargo_per_source != NULL;
|
||||
bool do_count = cargo_per_source != nullptr;
|
||||
while (max_move > moved) {
|
||||
for (Iterator it(this->packets.begin()); it != this->packets.end();) {
|
||||
CargoPacket *cp = *it;
|
||||
|
@@ -584,7 +584,7 @@ public:
|
||||
|
||||
uint Reserve(uint max_move, VehicleCargoList *dest, TileIndex load_place, StationIDStack next);
|
||||
uint Load(uint max_move, VehicleCargoList *dest, TileIndex load_place, StationIDStack next);
|
||||
uint Truncate(uint max_move = UINT_MAX, StationCargoAmountMap *cargo_per_source = NULL);
|
||||
uint Truncate(uint max_move = UINT_MAX, StationCargoAmountMap *cargo_per_source = nullptr);
|
||||
uint Reroute(uint max_move, StationCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge);
|
||||
|
||||
/**
|
||||
|
@@ -152,7 +152,7 @@ static inline bool IsCargoInClass(CargoID c, CargoClass cc)
|
||||
return (CargoSpec::Get(c)->classes & cc) != 0;
|
||||
}
|
||||
|
||||
#define FOR_ALL_CARGOSPECS_FROM(var, start) for (size_t cargospec_index = start; var = NULL, cargospec_index < CargoSpec::GetArraySize(); cargospec_index++) \
|
||||
#define FOR_ALL_CARGOSPECS_FROM(var, start) for (size_t cargospec_index = start; var = nullptr, cargospec_index < CargoSpec::GetArraySize(); cargospec_index++) \
|
||||
if ((var = CargoSpec::Get(cargospec_index))->IsValid())
|
||||
#define FOR_ALL_CARGOSPECS(var) FOR_ALL_CARGOSPECS_FROM(var, 0)
|
||||
|
||||
|
@@ -186,9 +186,9 @@ struct CheatEntry {
|
||||
static const CheatEntry _cheats_ui[] = {
|
||||
{SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat },
|
||||
{SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat },
|
||||
{SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, NULL },
|
||||
{SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, NULL },
|
||||
{SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, NULL },
|
||||
{SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr },
|
||||
{SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr },
|
||||
{SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr },
|
||||
{SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat },
|
||||
{SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.max_heightlevel, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat },
|
||||
{SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat },
|
||||
@@ -365,7 +365,7 @@ struct CheatWindow : Window {
|
||||
switch (ce->type) {
|
||||
case SLE_BOOL:
|
||||
value ^= 1;
|
||||
if (ce->proc != NULL) ce->proc(value, 0);
|
||||
if (ce->proc != nullptr) ce->proc(value, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -393,7 +393,7 @@ struct CheatWindow : Window {
|
||||
void OnQueryTextFinished(char *str) override
|
||||
{
|
||||
/* Was 'cancel' pressed or nothing entered? */
|
||||
if (str == NULL || StrEmpty(str)) return;
|
||||
if (str == nullptr || StrEmpty(str)) return;
|
||||
|
||||
const CheatEntry *ce = &_cheats_ui[clicked_widget];
|
||||
int oldvalue = (int32)ReadValue(ce->variable, ce->type);
|
||||
|
@@ -413,15 +413,15 @@ extern const TileTypeProcs _tile_type_clear_procs = {
|
||||
DrawTile_Clear, ///< draw_tile_proc
|
||||
GetSlopePixelZ_Clear, ///< get_slope_z_proc
|
||||
ClearTile_Clear, ///< clear_tile_proc
|
||||
NULL, ///< add_accepted_cargo_proc
|
||||
nullptr, ///< add_accepted_cargo_proc
|
||||
GetTileDesc_Clear, ///< get_tile_desc_proc
|
||||
GetTileTrackStatus_Clear, ///< get_tile_track_status_proc
|
||||
NULL, ///< click_tile_proc
|
||||
NULL, ///< animate_tile_proc
|
||||
nullptr, ///< click_tile_proc
|
||||
nullptr, ///< animate_tile_proc
|
||||
TileLoop_Clear, ///< tile_loop_proc
|
||||
ChangeTileOwner_Clear, ///< change_tile_owner_proc
|
||||
NULL, ///< add_produced_cargo_proc
|
||||
NULL, ///< vehicle_enter_tile_proc
|
||||
nullptr, ///< add_produced_cargo_proc
|
||||
nullptr, ///< vehicle_enter_tile_proc
|
||||
GetFoundation_Clear, ///< get_foundation_proc
|
||||
TerraformTile_Clear, ///< terraform_tile_proc
|
||||
};
|
||||
|
@@ -560,7 +560,7 @@ char *DumpCommandLog(char *buffer, const char *last)
|
||||
}
|
||||
|
||||
/*!
|
||||
* This function range-checks a cmd, and checks if the cmd is not NULL
|
||||
* This function range-checks a cmd, and checks if the cmd is not nullptr
|
||||
*
|
||||
* @param cmd The integer value of a command
|
||||
* @return true if the command is valid (and got a CommandProc function)
|
||||
@@ -569,7 +569,7 @@ bool IsValidCommand(uint32 cmd)
|
||||
{
|
||||
cmd &= CMD_ID_MASK;
|
||||
|
||||
return cmd < lengthof(_command_proc_table) && _command_proc_table[cmd].proc != NULL;
|
||||
return cmd < lengthof(_command_proc_table) && _command_proc_table[cmd].proc != nullptr;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -833,7 +833,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
|
||||
ShowCostOrIncomeAnimation(x, y, GetSlopePixelZ(x, y), res.GetCost());
|
||||
}
|
||||
|
||||
if (!estimate_only && !only_sending && callback != NULL) {
|
||||
if (!estimate_only && !only_sending && callback != nullptr) {
|
||||
callback(res, tile, p1, p2);
|
||||
}
|
||||
|
||||
@@ -893,7 +893,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
|
||||
const Command &command = _command_proc_table[cmd_id];
|
||||
/* Shouldn't happen, but you never know when someone adds
|
||||
* NULLs to the _command_proc_table. */
|
||||
assert(command.proc != NULL);
|
||||
assert(command.proc != nullptr);
|
||||
|
||||
/* Command flags are used internally */
|
||||
CommandFlags cmd_flags = GetCommandFlags(cmd);
|
||||
@@ -1008,7 +1008,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd,
|
||||
/* update last build coordinate of company. */
|
||||
if (tile != 0) {
|
||||
Company *c = Company::GetIfValid(_current_company);
|
||||
if (c != NULL) c->last_build_coordinate = tile;
|
||||
if (c != nullptr) c->last_build_coordinate = tile;
|
||||
}
|
||||
|
||||
SubtractMoneyFromCompany(res2);
|
||||
|
@@ -34,10 +34,10 @@ static const CommandCost CMD_ERROR = CommandCost(INVALID_STRING_ID);
|
||||
*/
|
||||
#define return_cmd_error(errcode) return CommandCost(errcode);
|
||||
|
||||
CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, uint32 cmd, const char *text = NULL, uint32 binary_length = 0);
|
||||
CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, uint32 cmd, const char *text = nullptr, uint32 binary_length = 0);
|
||||
CommandCost DoCommand(const CommandContainer *container, DoCommandFlag flags);
|
||||
|
||||
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = NULL, const char *text = NULL, bool my_cmd = true, uint32 binary_length = 0);
|
||||
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = nullptr, const char *text = nullptr, bool my_cmd = true, uint32 binary_length = 0);
|
||||
bool DoCommandP(const CommandContainer *container, bool my_cmd = true);
|
||||
|
||||
CommandCost DoCommandPScript(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd, bool estimate_only, uint32 binary_length);
|
||||
|
@@ -38,12 +38,12 @@ public:
|
||||
/**
|
||||
* Creates a command cost return with no cost and no error
|
||||
*/
|
||||
CommandCost() : expense_type(INVALID_EXPENSES), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_grffile(NULL), textref_stack_size(0) {}
|
||||
CommandCost() : expense_type(INVALID_EXPENSES), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_grffile(nullptr), textref_stack_size(0) {}
|
||||
|
||||
/**
|
||||
* Creates a command return value the is failed with the given message
|
||||
*/
|
||||
explicit CommandCost(StringID msg) : expense_type(INVALID_EXPENSES), cost(0), message(msg), success(false), textref_stack_grffile(NULL), textref_stack_size(0) {}
|
||||
explicit CommandCost(StringID msg) : expense_type(INVALID_EXPENSES), cost(0), message(msg), success(false), textref_stack_grffile(nullptr), textref_stack_size(0) {}
|
||||
|
||||
/**
|
||||
* Creates a command return value the is failed with the given message
|
||||
@@ -59,14 +59,14 @@ public:
|
||||
* Creates a command cost with given expense type and start cost of 0
|
||||
* @param ex_t the expense type
|
||||
*/
|
||||
explicit CommandCost(ExpensesType ex_t) : expense_type(ex_t), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_grffile(NULL), textref_stack_size(0) {}
|
||||
explicit CommandCost(ExpensesType ex_t) : expense_type(ex_t), cost(0), message(INVALID_STRING_ID), success(true), textref_stack_grffile(nullptr), textref_stack_size(0) {}
|
||||
|
||||
/**
|
||||
* Creates a command return value with the given start cost and expense type
|
||||
* @param ex_t the expense type
|
||||
* @param cst the initial cost of this command
|
||||
*/
|
||||
CommandCost(ExpensesType ex_t, const Money &cst) : expense_type(ex_t), cost(cst), message(INVALID_STRING_ID), success(true), textref_stack_grffile(NULL), textref_stack_size(0) {}
|
||||
CommandCost(ExpensesType ex_t, const Money &cst) : expense_type(ex_t), cost(cst), message(INVALID_STRING_ID), success(true), textref_stack_grffile(nullptr), textref_stack_size(0) {}
|
||||
|
||||
|
||||
/**
|
||||
|
@@ -101,7 +101,7 @@ struct CompanyProperties {
|
||||
|
||||
// TODO: Change some of these member variables to use relevant INVALID_xxx constants
|
||||
CompanyProperties()
|
||||
: name_2(0), name_1(0), name(NULL), president_name_1(0), president_name_2(0), president_name(NULL),
|
||||
: name_2(0), name_1(0), name(nullptr), president_name_1(0), president_name_2(0), president_name(nullptr),
|
||||
face(0), money(0), money_fraction(0), current_loan(0), colour(0), block_preview(0),
|
||||
location_of_HQ(0), last_build_coordinate(0), share_owners(), inaugurated_year(0),
|
||||
months_of_bankruptcy(0), bankrupt_asked(0), bankrupt_timeout(0), bankrupt_value(0),
|
||||
@@ -140,7 +140,7 @@ struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties {
|
||||
static inline bool IsValidAiID(size_t index)
|
||||
{
|
||||
const Company *c = Company::GetIfValid(index);
|
||||
return c != NULL && c->is_ai;
|
||||
return c != nullptr && c->is_ai;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -152,7 +152,7 @@ struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties {
|
||||
static inline bool IsValidHumanID(size_t index)
|
||||
{
|
||||
const Company *c = Company::GetIfValid(index);
|
||||
return c != NULL && !c->is_ai;
|
||||
return c != nullptr && !c->is_ai;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -196,7 +196,7 @@ bool CheckCompanyHasMoney(CommandCost &cost)
|
||||
{
|
||||
if (cost.GetCost() > 0) {
|
||||
const Company *c = Company::GetIfValid(_current_company);
|
||||
if (c != NULL && cost.GetCost() > c->money) {
|
||||
if (c != nullptr && cost.GetCost() > c->money) {
|
||||
SetDParam(0, cost.GetCost());
|
||||
cost.MakeError(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY);
|
||||
return false;
|
||||
@@ -244,7 +244,7 @@ static void SubtractMoneyFromAnyCompany(Company *c, CommandCost cost)
|
||||
void SubtractMoneyFromCompany(CommandCost cost)
|
||||
{
|
||||
Company *c = Company::GetIfValid(_current_company);
|
||||
if (c != NULL) SubtractMoneyFromAnyCompany(c, cost);
|
||||
if (c != nullptr) SubtractMoneyFromAnyCompany(c, cost);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -359,7 +359,7 @@ static void GenerateCompanyName(Company *c)
|
||||
|
||||
StringID str;
|
||||
uint32 strp;
|
||||
if (t->name == NULL && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) {
|
||||
if (t->name == nullptr && IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST + 1)) {
|
||||
str = t->townnametype - SPECSTR_TOWNNAME_START + SPECSTR_COMPANY_NAME_START;
|
||||
strp = t->townnameparts;
|
||||
|
||||
@@ -545,7 +545,7 @@ void ResetCompanyLivery(Company *c)
|
||||
*/
|
||||
Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
|
||||
{
|
||||
if (!Company::CanAllocateItem()) return NULL;
|
||||
if (!Company::CanAllocateItem()) return nullptr;
|
||||
|
||||
/* we have to generate colour before this company is valid */
|
||||
Colours colour = GenerateCompanyColour();
|
||||
@@ -554,7 +554,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY)
|
||||
if (company == INVALID_COMPANY) {
|
||||
c = new Company(STR_SV_UNNAMED, is_ai);
|
||||
} else {
|
||||
if (Company::IsValidID(company)) return NULL;
|
||||
if (Company::IsValidID(company)) return nullptr;
|
||||
c = new (company) Company(STR_SV_UNNAMED, is_ai);
|
||||
}
|
||||
|
||||
@@ -678,7 +678,7 @@ static void HandleBankruptcyTakeover(Company *c)
|
||||
/* Did we ask everyone for bankruptcy? If so, bail out. */
|
||||
if (c->bankrupt_asked == MAX_UVALUE(CompanyMask)) return;
|
||||
|
||||
Company *c2, *best = NULL;
|
||||
Company *c2, *best = nullptr;
|
||||
int32 best_performance = -1;
|
||||
|
||||
/* Ask the company with the highest performance history first */
|
||||
@@ -714,7 +714,7 @@ void OnTick_Companies()
|
||||
if (_game_mode == GM_EDITOR) return;
|
||||
|
||||
Company *c = Company::GetIfValid(_cur_company_tick_index);
|
||||
if (c != NULL) {
|
||||
if (c != nullptr) {
|
||||
if (c->name_1 != 0) GenerateCompanyName(c);
|
||||
if (c->bankrupt_asked != 0) HandleBankruptcyTakeover(c);
|
||||
}
|
||||
@@ -767,14 +767,14 @@ void CompaniesYearlyLoop()
|
||||
/**
|
||||
* Fill the CompanyNewsInformation struct with the required data.
|
||||
* @param c the current company.
|
||||
* @param other the other company (use \c NULL if not relevant).
|
||||
* @param other the other company (use \c nullptr if not relevant).
|
||||
*/
|
||||
void CompanyNewsInformation::FillData(const Company *c, const Company *other)
|
||||
{
|
||||
SetDParam(0, c->index);
|
||||
GetString(this->company_name, STR_COMPANY_NAME, lastof(this->company_name));
|
||||
|
||||
if (other == NULL) {
|
||||
if (other == nullptr) {
|
||||
*this->other_company_name = '\0';
|
||||
} else {
|
||||
SetDParam(0, other->index);
|
||||
@@ -840,8 +840,8 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
/* When replaying the client ID is not a valid client; there
|
||||
* are actually no clients at all. However, the company has to
|
||||
* be created, otherwise we cannot rerun the game properly.
|
||||
* So only allow a NULL client info in that case. */
|
||||
if (ci == NULL) return CommandCost();
|
||||
* So only allow a nullptr client info in that case. */
|
||||
if (ci == nullptr) return CommandCost();
|
||||
#endif /* NOT DEBUG_DUMP_COMMANDS */
|
||||
|
||||
/* Delete multiplayer progress bar */
|
||||
@@ -850,7 +850,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
Company *c = DoStartupNewCompany(false);
|
||||
|
||||
/* A new company could not be created, revert to being a spectator */
|
||||
if (c == NULL) {
|
||||
if (c == nullptr) {
|
||||
if (_network_server) {
|
||||
ci->client_playas = COMPANY_SPECTATOR;
|
||||
NetworkUpdateClientInfo(ci->client_id);
|
||||
@@ -882,7 +882,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
|
||||
if (company_id != INVALID_COMPANY && (company_id >= MAX_COMPANIES || Company::IsValidID(company_id))) return CMD_ERROR;
|
||||
Company *c = DoStartupNewCompany(true, company_id);
|
||||
if (c != NULL) NetworkServerNewCompany(c, NULL);
|
||||
if (c != nullptr) NetworkServerNewCompany(c, nullptr);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -891,7 +891,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
if (reason >= CRR_END) return CMD_ERROR;
|
||||
|
||||
Company *c = Company::GetIfValid(company_id);
|
||||
if (c == NULL) return CMD_ERROR;
|
||||
if (c == nullptr) return CMD_ERROR;
|
||||
|
||||
if (!(flags & DC_EXEC)) return CommandCost();
|
||||
|
||||
@@ -1063,7 +1063,7 @@ static bool IsUniqueCompanyName(const char *name)
|
||||
const Company *c;
|
||||
|
||||
FOR_ALL_COMPANIES(c) {
|
||||
if (c->name != NULL && strcmp(c->name, name) == 0) return false;
|
||||
if (c->name != nullptr && strcmp(c->name, name) == 0) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1090,7 +1090,7 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||
if (flags & DC_EXEC) {
|
||||
Company *c = Company::Get(_current_company);
|
||||
free(c->name);
|
||||
c->name = reset ? NULL : stredup(text);
|
||||
c->name = reset ? nullptr : stredup(text);
|
||||
MarkWholeScreenDirty();
|
||||
CompanyAdminUpdate(c);
|
||||
}
|
||||
@@ -1108,7 +1108,7 @@ static bool IsUniquePresidentName(const char *name)
|
||||
const Company *c;
|
||||
|
||||
FOR_ALL_COMPANIES(c) {
|
||||
if (c->president_name != NULL && strcmp(c->president_name, name) == 0) return false;
|
||||
if (c->president_name != nullptr && strcmp(c->president_name, name) == 0) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1137,11 +1137,11 @@ CommandCost CmdRenamePresident(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||
free(c->president_name);
|
||||
|
||||
if (reset) {
|
||||
c->president_name = NULL;
|
||||
c->president_name = nullptr;
|
||||
} else {
|
||||
c->president_name = stredup(text);
|
||||
|
||||
if (c->name_1 == STR_SV_UNNAMED && c->name == NULL) {
|
||||
if (c->name_1 == STR_SV_UNNAMED && c->name == nullptr) {
|
||||
char buf[80];
|
||||
|
||||
seprintf(buf, lastof(buf), "%s Transport", text);
|
||||
@@ -1158,13 +1158,13 @@ CommandCost CmdRenamePresident(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||
|
||||
/**
|
||||
* Get the service interval for the given company and vehicle type.
|
||||
* @param c The company, or NULL for client-default settings.
|
||||
* @param c The company, or nullptr for client-default settings.
|
||||
* @param type The vehicle type to get the interval for.
|
||||
* @return The service interval.
|
||||
*/
|
||||
int CompanyServiceInterval(const Company *c, VehicleType type)
|
||||
{
|
||||
const VehicleDefaultSettings *vds = (c == NULL) ? &_settings_client.company.vehicle : &c->settings.vehicle;
|
||||
const VehicleDefaultSettings *vds = (c == nullptr) ? &_settings_client.company.vehicle : &c->settings.vehicle;
|
||||
switch (type) {
|
||||
default: NOT_REACHED();
|
||||
case VEH_TRAIN: return vds->servint_trains;
|
||||
|
@@ -573,7 +573,7 @@ private:
|
||||
{
|
||||
uint32 used_colours = 0;
|
||||
const Company *c;
|
||||
const Livery *livery, *default_livery = NULL;
|
||||
const Livery *livery, *default_livery = nullptr;
|
||||
bool primary = widget == WID_SCL_PRI_COL_DROPDOWN;
|
||||
byte default_col;
|
||||
|
||||
@@ -607,7 +607,7 @@ private:
|
||||
}
|
||||
|
||||
DropDownList list;
|
||||
if (default_livery != NULL) {
|
||||
if (default_livery != nullptr) {
|
||||
/* Add COLOUR_END to put the colour out of range, but also allow us to show what the default is */
|
||||
default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END;
|
||||
list.emplace_back(new DropDownListColourItem(default_col, false));
|
||||
@@ -616,13 +616,13 @@ private:
|
||||
list.emplace_back(new DropDownListColourItem(i, HasBit(used_colours, i)));
|
||||
}
|
||||
|
||||
byte sel = (default_livery == NULL || HasBit(livery->in_use, primary ? 0 : 1)) ? (primary ? livery->colour1 : livery->colour2) : default_col;
|
||||
byte sel = (default_livery == nullptr || HasBit(livery->in_use, primary ? 0 : 1)) ? (primary ? livery->colour1 : livery->colour2) : default_col;
|
||||
ShowDropDownList(this, std::move(list), sel, widget);
|
||||
}
|
||||
|
||||
static int CDECL GroupNameSorter(const Group * const *a, const Group * const *b)
|
||||
{
|
||||
static const Group *last_group[2] = { NULL, NULL };
|
||||
static const Group *last_group[2] = { nullptr, nullptr };
|
||||
static char last_name[2][64] = { "", "" };
|
||||
|
||||
if (*a != last_group[0]) {
|
||||
@@ -1104,7 +1104,7 @@ static WindowDesc _select_company_livery_desc(
|
||||
void ShowCompanyLiveryWindow(CompanyID company, GroupID group)
|
||||
{
|
||||
SelectCompanyLiveryWindow *w = (SelectCompanyLiveryWindow *)BringWindowToFrontById(WC_COMPANY_COLOUR, company);
|
||||
if (w == NULL) {
|
||||
if (w == nullptr) {
|
||||
new SelectCompanyLiveryWindow(&_select_company_livery_desc, company, group);
|
||||
} else if (group != INVALID_GROUP) {
|
||||
w->SetSelectedGroup(company, group);
|
||||
@@ -1715,10 +1715,10 @@ public:
|
||||
|
||||
void OnQueryTextFinished(char *str) override
|
||||
{
|
||||
if (str == NULL) return;
|
||||
if (str == nullptr) return;
|
||||
/* Set a new company manager face number */
|
||||
if (!StrEmpty(str)) {
|
||||
this->face = strtoul(str, NULL, 10);
|
||||
this->face = strtoul(str, nullptr, 10);
|
||||
ScaleAllCompanyManagerFaceBits(this->face);
|
||||
ShowErrorMessage(STR_FACE_FACECODE_SET, INVALID_STRING_ID, WL_INFO);
|
||||
this->UpdateData();
|
||||
@@ -2661,7 +2661,7 @@ struct CompanyWindow : Window
|
||||
|
||||
void OnQueryTextFinished(char *str) override
|
||||
{
|
||||
if (str == NULL) return;
|
||||
if (str == nullptr) return;
|
||||
|
||||
switch (this->query_widget) {
|
||||
default: NOT_REACHED();
|
||||
@@ -2671,11 +2671,11 @@ struct CompanyWindow : Window
|
||||
break;
|
||||
|
||||
case WID_C_PRESIDENT_NAME:
|
||||
DoCommandP(0, 0, 0, CMD_RENAME_PRESIDENT | CMD_MSG(STR_ERROR_CAN_T_CHANGE_PRESIDENT), NULL, str);
|
||||
DoCommandP(0, 0, 0, CMD_RENAME_PRESIDENT | CMD_MSG(STR_ERROR_CAN_T_CHANGE_PRESIDENT), nullptr, str);
|
||||
break;
|
||||
|
||||
case WID_C_COMPANY_NAME:
|
||||
DoCommandP(0, 0, 0, CMD_RENAME_COMPANY | CMD_MSG(STR_ERROR_CAN_T_CHANGE_COMPANY_NAME), NULL, str);
|
||||
DoCommandP(0, 0, 0, CMD_RENAME_COMPANY | CMD_MSG(STR_ERROR_CAN_T_CHANGE_COMPANY_NAME), nullptr, str);
|
||||
break;
|
||||
|
||||
case WID_C_COMPANY_JOIN:
|
||||
@@ -2837,7 +2837,7 @@ static const NWidgetPart _nested_buy_company_widgets[] = {
|
||||
};
|
||||
|
||||
static WindowDesc _buy_company_desc(
|
||||
WDP_AUTO, NULL, 0, 0,
|
||||
WDP_AUTO, nullptr, 0, 0,
|
||||
WC_BUY_COMPANY, WC_NONE,
|
||||
WDF_CONSTRUCTION,
|
||||
_nested_buy_company_widgets, lengthof(_nested_buy_company_widgets)
|
||||
|
@@ -32,7 +32,7 @@ FILE *_iconsole_output_file;
|
||||
|
||||
void IConsoleInit()
|
||||
{
|
||||
_iconsole_output_file = NULL;
|
||||
_iconsole_output_file = nullptr;
|
||||
_redirect_console_to_client = INVALID_CLIENT_ID;
|
||||
_redirect_console_to_admin = INVALID_ADMIN_ID;
|
||||
|
||||
@@ -43,14 +43,14 @@ void IConsoleInit()
|
||||
|
||||
static void IConsoleWriteToLogFile(const char *string)
|
||||
{
|
||||
if (_iconsole_output_file != NULL) {
|
||||
if (_iconsole_output_file != nullptr) {
|
||||
/* if there is an console output file ... also print it there */
|
||||
const char *header = GetLogPrefix();
|
||||
if ((strlen(header) != 0 && fwrite(header, strlen(header), 1, _iconsole_output_file) != 1) ||
|
||||
fwrite(string, strlen(string), 1, _iconsole_output_file) != 1 ||
|
||||
fwrite("\n", 1, 1, _iconsole_output_file) != 1) {
|
||||
fclose(_iconsole_output_file);
|
||||
_iconsole_output_file = NULL;
|
||||
_iconsole_output_file = nullptr;
|
||||
IConsolePrintF(CC_DEFAULT, "cannot write to log file");
|
||||
}
|
||||
}
|
||||
@@ -58,10 +58,10 @@ static void IConsoleWriteToLogFile(const char *string)
|
||||
|
||||
bool CloseConsoleLogIfActive()
|
||||
{
|
||||
if (_iconsole_output_file != NULL) {
|
||||
if (_iconsole_output_file != nullptr) {
|
||||
IConsolePrintF(CC_DEFAULT, "file output complete");
|
||||
fclose(_iconsole_output_file);
|
||||
_iconsole_output_file = NULL;
|
||||
_iconsole_output_file = nullptr;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -203,22 +203,22 @@ bool GetArgumentInteger(uint32 *value, const char *arg)
|
||||
template<class T>
|
||||
void IConsoleAddSorted(T **base, T *item_new)
|
||||
{
|
||||
if (*base == NULL) {
|
||||
if (*base == nullptr) {
|
||||
*base = item_new;
|
||||
return;
|
||||
}
|
||||
|
||||
T *item_before = NULL;
|
||||
T *item_before = nullptr;
|
||||
T *item = *base;
|
||||
/* The list is alphabetically sorted, insert the new item at the correct location */
|
||||
while (item != NULL) {
|
||||
while (item != nullptr) {
|
||||
if (strcmp(item->name, item_new->name) > 0) break; // insert here
|
||||
|
||||
item_before = item;
|
||||
item = item->next;
|
||||
}
|
||||
|
||||
if (item_before == NULL) {
|
||||
if (item_before == nullptr) {
|
||||
*base = item_new;
|
||||
} else {
|
||||
item_before->next = item_new;
|
||||
@@ -251,7 +251,7 @@ void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *
|
||||
{
|
||||
IConsoleCmd *item_new = MallocT<IConsoleCmd>(1);
|
||||
item_new->name = RemoveUnderscores(stredup(name));
|
||||
item_new->next = NULL;
|
||||
item_new->next = nullptr;
|
||||
item_new->proc = proc;
|
||||
item_new->hook = hook;
|
||||
item_new->unlisted = unlisted;
|
||||
@@ -262,16 +262,16 @@ void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *
|
||||
/**
|
||||
* Find the command pointed to by its string
|
||||
* @param name command to be found
|
||||
* @return return Cmdstruct of the found command, or NULL on failure
|
||||
* @return return Cmdstruct of the found command, or nullptr on failure
|
||||
*/
|
||||
IConsoleCmd *IConsoleCmdGet(const char *name)
|
||||
{
|
||||
IConsoleCmd *item;
|
||||
|
||||
for (item = _iconsole_cmds; item != NULL; item = item->next) {
|
||||
for (item = _iconsole_cmds; item != nullptr; item = item->next) {
|
||||
if (strcmp(item->name, name) == 0) return item;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -281,7 +281,7 @@ IConsoleCmd *IConsoleCmdGet(const char *name)
|
||||
*/
|
||||
void IConsoleAliasRegister(const char *name, const char *cmd)
|
||||
{
|
||||
if (IConsoleAliasGet(name) != NULL) {
|
||||
if (IConsoleAliasGet(name) != nullptr) {
|
||||
IConsoleError("an alias with this name already exists; insertion aborted");
|
||||
return;
|
||||
}
|
||||
@@ -290,7 +290,7 @@ void IConsoleAliasRegister(const char *name, const char *cmd)
|
||||
char *cmd_aliased = stredup(cmd);
|
||||
IConsoleAlias *item_new = MallocT<IConsoleAlias>(1);
|
||||
|
||||
item_new->next = NULL;
|
||||
item_new->next = nullptr;
|
||||
item_new->cmdline = cmd_aliased;
|
||||
item_new->name = new_alias;
|
||||
|
||||
@@ -300,17 +300,17 @@ void IConsoleAliasRegister(const char *name, const char *cmd)
|
||||
/**
|
||||
* Find the alias pointed to by its string
|
||||
* @param name alias to be found
|
||||
* @return return Aliasstruct of the found alias, or NULL on failure
|
||||
* @return return Aliasstruct of the found alias, or nullptr on failure
|
||||
*/
|
||||
IConsoleAlias *IConsoleAliasGet(const char *name)
|
||||
{
|
||||
IConsoleAlias *item;
|
||||
|
||||
for (item = _iconsole_aliases; item != NULL; item = item->next) {
|
||||
for (item = _iconsole_aliases; item != nullptr; item = item->next) {
|
||||
if (strcmp(item->name, name) == 0) return item;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
/**
|
||||
* An alias is just another name for a command, or for more commands
|
||||
@@ -479,7 +479,7 @@ void IConsoleCmdExec(const char *cmdstr)
|
||||
}
|
||||
}
|
||||
|
||||
for (uint i = 0; i < lengthof(tokens) && tokens[i] != NULL; i++) {
|
||||
for (uint i = 0; i < lengthof(tokens) && tokens[i] != nullptr; i++) {
|
||||
DEBUG(console, 8, "Token %d is: '%s'", i, tokens[i]);
|
||||
}
|
||||
|
||||
@@ -490,12 +490,12 @@ void IConsoleCmdExec(const char *cmdstr)
|
||||
*/
|
||||
RemoveUnderscores(tokens[0]);
|
||||
IConsoleCmd *cmd = IConsoleCmdGet(tokens[0]);
|
||||
if (cmd != NULL) {
|
||||
ConsoleHookResult chr = (cmd->hook == NULL ? CHR_ALLOW : cmd->hook(true));
|
||||
if (cmd != nullptr) {
|
||||
ConsoleHookResult chr = (cmd->hook == nullptr ? CHR_ALLOW : cmd->hook(true));
|
||||
switch (chr) {
|
||||
case CHR_ALLOW:
|
||||
if (!cmd->proc(t_index, tokens)) { // index started with 0
|
||||
cmd->proc(0, NULL); // if command failed, give help
|
||||
cmd->proc(0, nullptr); // if command failed, give help
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -506,7 +506,7 @@ void IConsoleCmdExec(const char *cmdstr)
|
||||
|
||||
t_index--;
|
||||
IConsoleAlias *alias = IConsoleAliasGet(tokens[0]);
|
||||
if (alias != NULL) {
|
||||
if (alias != nullptr) {
|
||||
IConsoleAliasExec(alias, t_index, &tokens[1]);
|
||||
return;
|
||||
}
|
||||
|
@@ -352,7 +352,7 @@ DEF_CONSOLE_CMD(ConLoad)
|
||||
const char *file = argv[1];
|
||||
_console_file_list.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list.FindItem(file);
|
||||
if (item != NULL) {
|
||||
if (item != nullptr) {
|
||||
if (GetAbstractFileType(item->type) == FT_SAVEGAME) {
|
||||
_switch_mode = SM_LOAD_GAME;
|
||||
_file_to_saveload.SetMode(item->type);
|
||||
@@ -381,7 +381,7 @@ DEF_CONSOLE_CMD(ConRemove)
|
||||
const char *file = argv[1];
|
||||
_console_file_list.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list.FindItem(file);
|
||||
if (item != NULL) {
|
||||
if (item != nullptr) {
|
||||
if (!FiosDelete(item->name)) {
|
||||
IConsolePrintF(CC_ERROR, "%s: Failed to delete file", file);
|
||||
}
|
||||
@@ -423,7 +423,7 @@ DEF_CONSOLE_CMD(ConChangeDirectory)
|
||||
const char *file = argv[1];
|
||||
_console_file_list.ValidateFileList(true);
|
||||
const FiosItem *item = _console_file_list.FindItem(file);
|
||||
if (item != NULL) {
|
||||
if (item != nullptr) {
|
||||
switch (item->type) {
|
||||
case FIOS_TYPE_DIR: case FIOS_TYPE_DRIVE: case FIOS_TYPE_PARENT:
|
||||
FiosBrowseTo(item);
|
||||
@@ -451,7 +451,7 @@ DEF_CONSOLE_CMD(ConPrintWorkingDirectory)
|
||||
_console_file_list.ValidateFileList(true);
|
||||
_console_file_list.InvalidateFileList();
|
||||
|
||||
FiosGetDescText(&path, NULL);
|
||||
FiosGetDescText(&path, nullptr);
|
||||
IConsolePrint(CC_DEFAULT, path);
|
||||
return true;
|
||||
}
|
||||
@@ -477,7 +477,7 @@ static bool ConKickOrBan(const char *argv, bool ban)
|
||||
{
|
||||
uint n;
|
||||
|
||||
if (strchr(argv, '.') == NULL && strchr(argv, ':') == NULL) { // banning with ID
|
||||
if (strchr(argv, '.') == nullptr && strchr(argv, ':') == nullptr) { // banning with ID
|
||||
ClientID client_id = (ClientID)atoi(argv);
|
||||
|
||||
/* Don't kill the server, or the client doing the rcon. The latter can't be kicked because
|
||||
@@ -490,7 +490,7 @@ static bool ConKickOrBan(const char *argv, bool ban)
|
||||
}
|
||||
|
||||
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
|
||||
if (ci == NULL) {
|
||||
if (ci == nullptr) {
|
||||
IConsoleError("Invalid client");
|
||||
return true;
|
||||
}
|
||||
@@ -691,7 +691,7 @@ DEF_CONSOLE_CMD(ConClientNickChange)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (NetworkClientInfo::GetByClientID(client_id) == NULL) {
|
||||
if (NetworkClientInfo::GetByClientID(client_id) == nullptr) {
|
||||
IConsoleError("Invalid client");
|
||||
return true;
|
||||
}
|
||||
@@ -762,7 +762,7 @@ DEF_CONSOLE_CMD(ConMoveClient)
|
||||
CompanyID company_id = (CompanyID)(atoi(argv[2]) <= MAX_COMPANIES ? atoi(argv[2]) - 1 : atoi(argv[2]));
|
||||
|
||||
/* check the client exists */
|
||||
if (ci == NULL) {
|
||||
if (ci == nullptr) {
|
||||
IConsoleError("Invalid client-id, check the command 'clients' for valid client-id's.");
|
||||
return true;
|
||||
}
|
||||
@@ -890,8 +890,8 @@ DEF_CONSOLE_CMD(ConNetworkConnect)
|
||||
if (argc < 2) return false;
|
||||
if (_networking) NetworkDisconnect(); // we are in network-mode, first close it!
|
||||
|
||||
const char *port = NULL;
|
||||
const char *company = NULL;
|
||||
const char *port = nullptr;
|
||||
const char *company = nullptr;
|
||||
char *ip = argv[1];
|
||||
/* Default settings: default port and new company */
|
||||
uint16 rport = NETWORK_DEFAULT_PORT;
|
||||
@@ -900,7 +900,7 @@ DEF_CONSOLE_CMD(ConNetworkConnect)
|
||||
ParseConnectionString(&company, &port, ip);
|
||||
|
||||
IConsolePrintF(CC_DEFAULT, "Connecting to %s...", ip);
|
||||
if (company != NULL) {
|
||||
if (company != nullptr) {
|
||||
join_as = (CompanyID)atoi(company);
|
||||
IConsolePrintF(CC_DEFAULT, " company-no: %d", join_as);
|
||||
|
||||
@@ -911,7 +911,7 @@ DEF_CONSOLE_CMD(ConNetworkConnect)
|
||||
join_as--;
|
||||
}
|
||||
}
|
||||
if (port != NULL) {
|
||||
if (port != nullptr) {
|
||||
rport = atoi(port);
|
||||
IConsolePrintF(CC_DEFAULT, " port: %s", port);
|
||||
}
|
||||
@@ -936,7 +936,7 @@ DEF_CONSOLE_CMD(ConExec)
|
||||
|
||||
FILE *script_file = FioFOpenFile(argv[1], "r", BASE_DIR);
|
||||
|
||||
if (script_file == NULL) {
|
||||
if (script_file == nullptr) {
|
||||
if (argc == 2 || atoi(argv[2]) != 0) IConsoleError("script file not found");
|
||||
return true;
|
||||
}
|
||||
@@ -944,7 +944,7 @@ DEF_CONSOLE_CMD(ConExec)
|
||||
_script_running = true;
|
||||
|
||||
char cmdline[ICON_CMDLN_SIZE];
|
||||
while (_script_running && fgets(cmdline, sizeof(cmdline), script_file) != NULL) {
|
||||
while (_script_running && fgets(cmdline, sizeof(cmdline), script_file) != nullptr) {
|
||||
/* Remove newline characters from the executing script */
|
||||
for (char *cmdptr = cmdline; *cmdptr != '\0'; cmdptr++) {
|
||||
if (*cmdptr == '\n' || *cmdptr == '\r') {
|
||||
@@ -995,7 +995,7 @@ DEF_CONSOLE_CMD(ConScript)
|
||||
|
||||
IConsolePrintF(CC_DEFAULT, "file output started to: %s", argv[1]);
|
||||
_iconsole_output_file = fopen(argv[1], "ab");
|
||||
if (_iconsole_output_file == NULL) IConsoleError("could not open file");
|
||||
if (_iconsole_output_file == nullptr) IConsoleError("could not open file");
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1034,7 +1034,7 @@ DEF_CONSOLE_CMD(ConNewGame)
|
||||
return true;
|
||||
}
|
||||
|
||||
StartNewGameWithoutGUI((argc == 2) ? strtoul(argv[1], NULL, 10) : GENERATE_NEW_SEED);
|
||||
StartNewGameWithoutGUI((argc == 2) ? strtoul(argv[1], nullptr, 10) : GENERATE_NEW_SEED);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1286,7 +1286,7 @@ DEF_CONSOLE_CMD(ConRescanNewGRF)
|
||||
return true;
|
||||
}
|
||||
|
||||
ScanNewGRFFiles(NULL);
|
||||
ScanNewGRFFiles(nullptr);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1327,7 +1327,7 @@ DEF_CONSOLE_CMD(ConAlias)
|
||||
if (argc < 3) return false;
|
||||
|
||||
alias = IConsoleAliasGet(argv[1]);
|
||||
if (alias == NULL) {
|
||||
if (alias == nullptr) {
|
||||
IConsoleAliasRegister(argv[1], argv[2]);
|
||||
} else {
|
||||
free(alias->cmdline);
|
||||
@@ -1349,7 +1349,7 @@ DEF_CONSOLE_CMD(ConScreenShot)
|
||||
if (argc > 3) return false;
|
||||
|
||||
ScreenshotType type = SC_VIEWPORT;
|
||||
const char *name = NULL;
|
||||
const char *name = nullptr;
|
||||
|
||||
if (argc > 1) {
|
||||
if (strcmp(argv[1], "big") == 0) {
|
||||
@@ -1385,7 +1385,7 @@ DEF_CONSOLE_CMD(ConMinimap)
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *name = NULL;
|
||||
const char *name = nullptr;
|
||||
if (argc > 1) {
|
||||
if (strcmp(argv[1], "owner") != 0) {
|
||||
/* invalid mode */
|
||||
@@ -1410,7 +1410,7 @@ DEF_CONSOLE_CMD(ConInfoCmd)
|
||||
if (argc < 2) return false;
|
||||
|
||||
const IConsoleCmd *cmd = IConsoleCmdGet(argv[1]);
|
||||
if (cmd == NULL) {
|
||||
if (cmd == nullptr) {
|
||||
IConsoleError("the given command was not found");
|
||||
return true;
|
||||
}
|
||||
@@ -1418,7 +1418,7 @@ DEF_CONSOLE_CMD(ConInfoCmd)
|
||||
IConsolePrintF(CC_DEFAULT, "command name: %s", cmd->name);
|
||||
IConsolePrintF(CC_DEFAULT, "command proc: %p", cmd->proc);
|
||||
|
||||
if (cmd->hook != NULL) IConsoleWarning("command is hooked");
|
||||
if (cmd->hook != nullptr) IConsoleWarning("command is hooked");
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1476,16 +1476,16 @@ DEF_CONSOLE_CMD(ConHelp)
|
||||
|
||||
RemoveUnderscores(argv[1]);
|
||||
cmd = IConsoleCmdGet(argv[1]);
|
||||
if (cmd != NULL) {
|
||||
cmd->proc(0, NULL);
|
||||
if (cmd != nullptr) {
|
||||
cmd->proc(0, nullptr);
|
||||
return true;
|
||||
}
|
||||
|
||||
alias = IConsoleAliasGet(argv[1]);
|
||||
if (alias != NULL) {
|
||||
if (alias != nullptr) {
|
||||
cmd = IConsoleCmdGet(alias->cmdline);
|
||||
if (cmd != NULL) {
|
||||
cmd->proc(0, NULL);
|
||||
if (cmd != nullptr) {
|
||||
cmd->proc(0, nullptr);
|
||||
return true;
|
||||
}
|
||||
IConsolePrintF(CC_ERROR, "ERROR: alias is of special type, please see its execution-line: '%s'", alias->cmdline);
|
||||
@@ -1515,9 +1515,9 @@ DEF_CONSOLE_CMD(ConListCommands)
|
||||
return true;
|
||||
}
|
||||
|
||||
for (const IConsoleCmd *cmd = _iconsole_cmds; cmd != NULL; cmd = cmd->next) {
|
||||
if (argv[1] == NULL || strstr(cmd->name, argv[1]) != NULL) {
|
||||
if (cmd->unlisted == false && (cmd->hook == NULL || cmd->hook(false) != CHR_HIDE)) IConsolePrintF(CC_DEFAULT, "%s", cmd->name);
|
||||
for (const IConsoleCmd *cmd = _iconsole_cmds; cmd != nullptr; cmd = cmd->next) {
|
||||
if (argv[1] == nullptr || strstr(cmd->name, argv[1]) != nullptr) {
|
||||
if (cmd->unlisted == false && (cmd->hook == nullptr || cmd->hook(false) != CHR_HIDE)) IConsolePrintF(CC_DEFAULT, "%s", cmd->name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1531,8 +1531,8 @@ DEF_CONSOLE_CMD(ConListAliases)
|
||||
return true;
|
||||
}
|
||||
|
||||
for (const IConsoleAlias *alias = _iconsole_aliases; alias != NULL; alias = alias->next) {
|
||||
if (argv[1] == NULL || strstr(alias->name, argv[1]) != NULL) {
|
||||
for (const IConsoleAlias *alias = _iconsole_aliases; alias != nullptr; alias = alias->next) {
|
||||
if (argv[1] == nullptr || strstr(alias->name, argv[1]) != nullptr) {
|
||||
IConsolePrintF(CC_DEFAULT, "%s => %s", alias->name, alias->cmdline);
|
||||
}
|
||||
}
|
||||
@@ -1741,8 +1741,8 @@ static void OutputContentState(const ContentInfo *const ci)
|
||||
|
||||
DEF_CONSOLE_CMD(ConContent)
|
||||
{
|
||||
static ContentCallback *cb = NULL;
|
||||
if (cb == NULL) {
|
||||
static ContentCallback *cb = nullptr;
|
||||
if (cb == nullptr) {
|
||||
cb = new ConsoleContentCallback();
|
||||
_network_content_client.AddCallback(cb);
|
||||
}
|
||||
@@ -1800,7 +1800,7 @@ DEF_CONSOLE_CMD(ConContent)
|
||||
if (strcasecmp(argv[1], "state") == 0) {
|
||||
IConsolePrintF(CC_WHITE, "id, type, state, name");
|
||||
for (ConstContentIterator iter = _network_content_client.Begin(); iter != _network_content_client.End(); iter++) {
|
||||
if (argc > 2 && strcasestr((*iter)->name, argv[2]) == NULL) continue;
|
||||
if (argc > 2 && strcasestr((*iter)->name, argv[2]) == nullptr) continue;
|
||||
OutputContentState(*iter);
|
||||
}
|
||||
return true;
|
||||
@@ -1865,7 +1865,7 @@ DEF_CONSOLE_CMD(ConListSettings)
|
||||
|
||||
if (argc > 2) return false;
|
||||
|
||||
IConsoleListSettings((argc == 2) ? argv[1] : NULL);
|
||||
IConsoleListSettings((argc == 2) ? argv[1] : nullptr);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -78,7 +78,7 @@ struct IConsoleLine {
|
||||
static const IConsoleLine *Get(uint index)
|
||||
{
|
||||
const IConsoleLine *item = IConsoleLine::front;
|
||||
while (index != 0 && item != NULL) {
|
||||
while (index != 0 && item != nullptr) {
|
||||
index--;
|
||||
item = item->previous;
|
||||
}
|
||||
@@ -96,14 +96,14 @@ struct IConsoleLine {
|
||||
static bool Truncate()
|
||||
{
|
||||
IConsoleLine *cur = IConsoleLine::front;
|
||||
if (cur == NULL) return false;
|
||||
if (cur == nullptr) return false;
|
||||
|
||||
int count = 1;
|
||||
for (IConsoleLine *item = cur->previous; item != NULL; count++, cur = item, item = item->previous) {
|
||||
for (IConsoleLine *item = cur->previous; item != nullptr; count++, cur = item, item = item->previous) {
|
||||
if (item->time > _settings_client.gui.console_backlog_timeout &&
|
||||
count > _settings_client.gui.console_backlog_length) {
|
||||
delete item;
|
||||
cur->previous = NULL;
|
||||
cur->previous = nullptr;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -119,12 +119,12 @@ struct IConsoleLine {
|
||||
static void Reset()
|
||||
{
|
||||
delete IConsoleLine::front;
|
||||
IConsoleLine::front = NULL;
|
||||
IConsoleLine::front = nullptr;
|
||||
IConsoleLine::size = 0;
|
||||
}
|
||||
};
|
||||
|
||||
/* static */ IConsoleLine *IConsoleLine::front = NULL;
|
||||
/* static */ IConsoleLine *IConsoleLine::front = nullptr;
|
||||
/* static */ int IConsoleLine::size = 0;
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ static const struct NWidgetPart _nested_console_window_widgets[] = {
|
||||
};
|
||||
|
||||
static WindowDesc _console_window_desc(
|
||||
WDP_MANUAL, NULL, 0, 0,
|
||||
WDP_MANUAL, nullptr, 0, 0,
|
||||
WC_CONSOLE, WC_NONE,
|
||||
0,
|
||||
_nested_console_window_widgets, lengthof(_nested_console_window_widgets)
|
||||
@@ -207,7 +207,7 @@ struct IConsoleWindow : Window
|
||||
|
||||
GfxFillRect(0, 0, this->width - 1, this->height - 1, PC_BLACK);
|
||||
int ypos = this->height - this->line_height;
|
||||
for (const IConsoleLine *print = IConsoleLine::Get(IConsoleWindow::scroll); print != NULL; print = print->previous) {
|
||||
for (const IConsoleLine *print = IConsoleLine::Get(IConsoleWindow::scroll); print != nullptr; print = print->previous) {
|
||||
SetDParamStr(0, print->buffer);
|
||||
ypos = DrawStringMultiLine(5, right, -this->line_height, ypos, STR_JUST_RAW_STRING, print->colour, SA_LEFT | SA_BOTTOM | SA_FORCE) - ICON_LINE_SPACING;
|
||||
if (ypos < 0) break;
|
||||
@@ -287,7 +287,7 @@ struct IConsoleWindow : Window
|
||||
const char *cmd = IConsoleHistoryAdd(_iconsole_cmdline.buf);
|
||||
IConsoleClearCommand();
|
||||
|
||||
if (cmd != NULL) IConsoleCmdExec(cmd);
|
||||
if (cmd != nullptr) IConsoleCmdExec(cmd);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ struct IConsoleWindow : Window
|
||||
|
||||
const char *GetMarkedText(size_t *length) const override
|
||||
{
|
||||
if (_iconsole_cmdline.markend == 0) return NULL;
|
||||
if (_iconsole_cmdline.markend == 0) return nullptr;
|
||||
|
||||
*length = _iconsole_cmdline.markend - _iconsole_cmdline.markpos;
|
||||
return _iconsole_cmdline.buf + _iconsole_cmdline.markpos;
|
||||
@@ -364,7 +364,7 @@ struct IConsoleWindow : Window
|
||||
{
|
||||
int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
|
||||
|
||||
if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return NULL;
|
||||
if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return nullptr;
|
||||
|
||||
return GetCharAtPosition(_iconsole_cmdline.buf, pt.x - delta);
|
||||
}
|
||||
@@ -459,10 +459,10 @@ static const char *IConsoleHistoryAdd(const char *cmd)
|
||||
while (IsWhitespace(*cmd)) cmd++;
|
||||
|
||||
/* Do not put empty command in history */
|
||||
if (StrEmpty(cmd)) return NULL;
|
||||
if (StrEmpty(cmd)) return nullptr;
|
||||
|
||||
/* Do not put in history if command is same as previous */
|
||||
if (_iconsole_history[0] == NULL || strcmp(_iconsole_history[0], cmd) != 0) {
|
||||
if (_iconsole_history[0] == nullptr || strcmp(_iconsole_history[0], cmd) != 0) {
|
||||
free(_iconsole_history[ICON_HISTORY_SIZE - 1]);
|
||||
memmove(&_iconsole_history[1], &_iconsole_history[0], sizeof(_iconsole_history[0]) * (ICON_HISTORY_SIZE - 1));
|
||||
_iconsole_history[0] = stredup(cmd);
|
||||
@@ -479,10 +479,10 @@ static const char *IConsoleHistoryAdd(const char *cmd)
|
||||
*/
|
||||
static void IConsoleHistoryNavigate(int direction)
|
||||
{
|
||||
if (_iconsole_history[0] == NULL) return; // Empty history
|
||||
if (_iconsole_history[0] == nullptr) return; // Empty history
|
||||
_iconsole_historypos = Clamp(_iconsole_historypos + direction, -1, ICON_HISTORY_SIZE - 1);
|
||||
|
||||
if (direction > 0 && _iconsole_history[_iconsole_historypos] == NULL) _iconsole_historypos--;
|
||||
if (direction > 0 && _iconsole_history[_iconsole_historypos] == nullptr) _iconsole_historypos--;
|
||||
|
||||
if (_iconsole_historypos == -1) {
|
||||
_iconsole_cmdline.DeleteAll();
|
||||
|
@@ -70,7 +70,7 @@ extern IConsoleAlias *_iconsole_aliases; ///< List of registered aliases.
|
||||
void IConsoleClearBuffer();
|
||||
|
||||
/* Commands */
|
||||
void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *hook = NULL, bool unlisted = false);
|
||||
void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *hook = nullptr, bool unlisted = false);
|
||||
void IConsoleAliasRegister(const char *name, const char *cmd);
|
||||
IConsoleCmd *IConsoleCmdGet(const char *name);
|
||||
IConsoleAlias *IConsoleAliasGet(const char *name);
|
||||
|
@@ -53,23 +53,23 @@ static inline void CheckAllocationConstraints(size_t num_elements)
|
||||
* @note the memory contains garbage data (i.e. possibly non-zero values).
|
||||
* @tparam T the type of the variable(s) to allocation.
|
||||
* @param num_elements the number of elements to allocate of the given type.
|
||||
* @return NULL when num_elements == 0, non-NULL otherwise.
|
||||
* @return nullptr when num_elements == 0, non-nullptr otherwise.
|
||||
*/
|
||||
template <typename T>
|
||||
static inline T *MallocT(size_t num_elements)
|
||||
{
|
||||
/*
|
||||
* MorphOS cannot handle 0 elements allocations, or rather that always
|
||||
* returns NULL. So we do that for *all* allocations, thus causing it
|
||||
* returns nullptr. So we do that for *all* allocations, thus causing it
|
||||
* to behave the same on all OSes.
|
||||
*/
|
||||
if (num_elements == 0) return NULL;
|
||||
if (num_elements == 0) return nullptr;
|
||||
|
||||
/* Ensure the size does not overflow. */
|
||||
CheckAllocationConstraints<T>(num_elements);
|
||||
|
||||
T *t_ptr = (T*)malloc(num_elements * sizeof(T));
|
||||
if (t_ptr == NULL) MallocError(num_elements * sizeof(T));
|
||||
if (t_ptr == nullptr) MallocError(num_elements * sizeof(T));
|
||||
return t_ptr;
|
||||
}
|
||||
|
||||
@@ -81,20 +81,20 @@ static inline T *MallocT(size_t num_elements)
|
||||
* @note the memory contains all zero values.
|
||||
* @tparam T the type of the variable(s) to allocation.
|
||||
* @param num_elements the number of elements to allocate of the given type.
|
||||
* @return NULL when num_elements == 0, non-NULL otherwise.
|
||||
* @return nullptr when num_elements == 0, non-nullptr otherwise.
|
||||
*/
|
||||
template <typename T>
|
||||
static inline T *CallocT(size_t num_elements)
|
||||
{
|
||||
/*
|
||||
* MorphOS cannot handle 0 elements allocations, or rather that always
|
||||
* returns NULL. So we do that for *all* allocations, thus causing it
|
||||
* returns nullptr. So we do that for *all* allocations, thus causing it
|
||||
* to behave the same on all OSes.
|
||||
*/
|
||||
if (num_elements == 0) return NULL;
|
||||
if (num_elements == 0) return nullptr;
|
||||
|
||||
T *t_ptr = (T*)calloc(num_elements, sizeof(T));
|
||||
if (t_ptr == NULL) MallocError(num_elements * sizeof(T));
|
||||
if (t_ptr == nullptr) MallocError(num_elements * sizeof(T));
|
||||
return t_ptr;
|
||||
}
|
||||
|
||||
@@ -107,26 +107,26 @@ static inline T *CallocT(size_t num_elements)
|
||||
* @tparam T the type of the variable(s) to allocation.
|
||||
* @param t_ptr the previous allocation to extend/shrink.
|
||||
* @param num_elements the number of elements to allocate of the given type.
|
||||
* @return NULL when num_elements == 0, non-NULL otherwise.
|
||||
* @return nullptr when num_elements == 0, non-nullptr otherwise.
|
||||
*/
|
||||
template <typename T>
|
||||
static inline T *ReallocT(T *t_ptr, size_t num_elements)
|
||||
{
|
||||
/*
|
||||
* MorphOS cannot handle 0 elements allocations, or rather that always
|
||||
* returns NULL. So we do that for *all* allocations, thus causing it
|
||||
* returns nullptr. So we do that for *all* allocations, thus causing it
|
||||
* to behave the same on all OSes.
|
||||
*/
|
||||
if (num_elements == 0) {
|
||||
free(t_ptr);
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/* Ensure the size does not overflow. */
|
||||
CheckAllocationConstraints<T>(num_elements);
|
||||
|
||||
t_ptr = (T*)realloc(static_cast<void *>(t_ptr), num_elements * sizeof(T));
|
||||
if (t_ptr == NULL) ReallocError(num_elements * sizeof(T));
|
||||
if (t_ptr == nullptr) ReallocError(num_elements * sizeof(T));
|
||||
return t_ptr;
|
||||
}
|
||||
|
||||
|
@@ -73,7 +73,7 @@ private:
|
||||
|
||||
public:
|
||||
/** Create a new buffer */
|
||||
ReusableBuffer() : buffer(NULL), count(0) {}
|
||||
ReusableBuffer() : buffer(nullptr), count(0) {}
|
||||
/** Clear the buffer */
|
||||
~ReusableBuffer() { free(this->buffer); }
|
||||
|
||||
|
@@ -108,11 +108,11 @@ class Kdtree {
|
||||
std::vector<T> elements = this->FreeSubtree(this->root);
|
||||
elements.push_back(root_element);
|
||||
|
||||
if (include_element != NULL) {
|
||||
if (include_element != nullptr) {
|
||||
elements.push_back(*include_element);
|
||||
initial_count++;
|
||||
}
|
||||
if (exclude_element != NULL) {
|
||||
if (exclude_element != nullptr) {
|
||||
typename std::vector<T>::iterator removed = std::remove(elements.begin(), elements.end(), *exclude_element);
|
||||
elements.erase(removed, elements.end());
|
||||
initial_count--;
|
||||
@@ -377,7 +377,7 @@ public:
|
||||
*/
|
||||
void Rebuild()
|
||||
{
|
||||
this->Rebuild(NULL, NULL);
|
||||
this->Rebuild(nullptr, nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -390,7 +390,7 @@ public:
|
||||
if (this->Count() == 0) {
|
||||
this->root = this->AddNode(element);
|
||||
} else {
|
||||
if (!this->IsUnbalanced() || !this->Rebuild(&element, NULL)) {
|
||||
if (!this->IsUnbalanced() || !this->Rebuild(&element, nullptr)) {
|
||||
this->InsertRecursive(element, this->root, 0);
|
||||
this->IncrementUnbalanced();
|
||||
}
|
||||
@@ -408,7 +408,7 @@ public:
|
||||
{
|
||||
size_t count = this->Count();
|
||||
if (count == 0) return;
|
||||
if (!this->IsUnbalanced() || !this->Rebuild(NULL, &element)) {
|
||||
if (!this->IsUnbalanced() || !this->Rebuild(nullptr, &element)) {
|
||||
/* If the removed element is the root node, this modifies this->root */
|
||||
this->root = this->RemoveRecursive(element, this->root, 0);
|
||||
this->IncrementUnbalanced();
|
||||
|
@@ -78,7 +78,7 @@ static inline int MemCmpT(const T *ptr1, const T *ptr2, size_t num = 1)
|
||||
template <typename T>
|
||||
static inline void MemReverseT(T *ptr1, T *ptr2)
|
||||
{
|
||||
assert(ptr1 != NULL && ptr2 != NULL);
|
||||
assert(ptr1 != nullptr && ptr2 != nullptr);
|
||||
assert(ptr1 < ptr2);
|
||||
|
||||
do {
|
||||
@@ -95,7 +95,7 @@ static inline void MemReverseT(T *ptr1, T *ptr2)
|
||||
template <typename T>
|
||||
static inline void MemReverseT(T *ptr, size_t num)
|
||||
{
|
||||
assert(ptr != NULL);
|
||||
assert(ptr != nullptr);
|
||||
|
||||
MemReverseT(ptr, ptr + (num - 1));
|
||||
}
|
||||
|
@@ -39,8 +39,8 @@ DEFINE_POOL_METHOD(inline)::Pool(const char *name) :
|
||||
checked(0),
|
||||
#endif /* OTTD_ASSERT */
|
||||
cleaning(false),
|
||||
data(NULL),
|
||||
alloc_cache(NULL)
|
||||
data(nullptr),
|
||||
alloc_cache(nullptr)
|
||||
{ }
|
||||
|
||||
/**
|
||||
@@ -71,7 +71,7 @@ DEFINE_POOL_METHOD(inline size_t)::FindFirstFree()
|
||||
size_t index = this->first_free;
|
||||
|
||||
for (; index < this->first_unused; index++) {
|
||||
if (this->data[index] == NULL) return index;
|
||||
if (this->data[index] == nullptr) return index;
|
||||
}
|
||||
|
||||
if (index < this->size) {
|
||||
@@ -96,17 +96,17 @@ DEFINE_POOL_METHOD(inline size_t)::FindFirstFree()
|
||||
* @param size size of item
|
||||
* @param index index of item
|
||||
* @pre index < this->size
|
||||
* @pre this->Get(index) == NULL
|
||||
* @pre this->Get(index) == nullptr
|
||||
*/
|
||||
DEFINE_POOL_METHOD(inline void *)::AllocateItem(size_t size, size_t index)
|
||||
{
|
||||
assert(this->data[index] == NULL);
|
||||
assert(this->data[index] == nullptr);
|
||||
|
||||
this->first_unused = max(this->first_unused, index + 1);
|
||||
this->items++;
|
||||
|
||||
Titem *item;
|
||||
if (Tcache && this->alloc_cache != NULL) {
|
||||
if (Tcache && this->alloc_cache != nullptr) {
|
||||
assert(sizeof(Titem) == size);
|
||||
item = (Titem *)this->alloc_cache;
|
||||
this->alloc_cache = this->alloc_cache->next;
|
||||
@@ -164,7 +164,7 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size, size_t index)
|
||||
|
||||
if (index >= this->size) this->ResizeFor(index);
|
||||
|
||||
if (this->data[index] != NULL) {
|
||||
if (this->data[index] != nullptr) {
|
||||
SlErrorCorruptFmt("%s index " PRINTF_SIZE " already in use", this->name, index);
|
||||
}
|
||||
|
||||
@@ -174,13 +174,13 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size, size_t index)
|
||||
/**
|
||||
* Deallocates memory used by this index and marks item as free
|
||||
* @param index item to deallocate
|
||||
* @pre unit is allocated (non-NULL)
|
||||
* @note 'delete NULL' doesn't cause call of this function, so it is safe
|
||||
* @pre unit is allocated (non-nullptr)
|
||||
* @note 'delete nullptr' doesn't cause call of this function, so it is safe
|
||||
*/
|
||||
DEFINE_POOL_METHOD(void)::FreeItem(size_t index)
|
||||
{
|
||||
assert(index < this->size);
|
||||
assert(this->data[index] != NULL);
|
||||
assert(this->data[index] != nullptr);
|
||||
if (Tcache) {
|
||||
AllocCache *ac = (AllocCache *)this->data[index];
|
||||
ac->next = this->alloc_cache;
|
||||
@@ -188,7 +188,7 @@ DEFINE_POOL_METHOD(void)::FreeItem(size_t index)
|
||||
} else {
|
||||
free(this->data[index]);
|
||||
}
|
||||
this->data[index] = NULL;
|
||||
this->data[index] = nullptr;
|
||||
this->first_free = min(this->first_free, index);
|
||||
this->items--;
|
||||
if (!this->cleaning) Titem::PostDestructor(index);
|
||||
@@ -200,16 +200,16 @@ DEFINE_POOL_METHOD(void)::CleanPool()
|
||||
this->cleaning = true;
|
||||
Titem::PreCleanPool();
|
||||
for (size_t i = 0; i < this->first_unused; i++) {
|
||||
delete this->Get(i); // 'delete NULL;' is very valid
|
||||
delete this->Get(i); // 'delete nullptr;' is very valid
|
||||
}
|
||||
assert(this->items == 0);
|
||||
free(this->data);
|
||||
this->first_unused = this->first_free = this->size = 0;
|
||||
this->data = NULL;
|
||||
this->data = nullptr;
|
||||
this->cleaning = false;
|
||||
|
||||
if (Tcache) {
|
||||
while (this->alloc_cache != NULL) {
|
||||
while (this->alloc_cache != nullptr) {
|
||||
AllocCache *ac = this->alloc_cache;
|
||||
this->alloc_cache = ac->next;
|
||||
free(ac);
|
||||
|
@@ -91,7 +91,7 @@ struct Pool : PoolBase {
|
||||
size_t size; ///< Current allocated size
|
||||
size_t first_free; ///< No item with index lower than this is free (doesn't say anything about this one!)
|
||||
size_t first_unused; ///< This and all higher indexes are free (doesn't say anything about first_unused-1 !)
|
||||
size_t items; ///< Number of used indexes (non-NULL)
|
||||
size_t items; ///< Number of used indexes (non-nullptr)
|
||||
#ifdef OTTD_ASSERT
|
||||
size_t checked; ///< Number of items we checked for
|
||||
#endif /* OTTD_ASSERT */
|
||||
@@ -115,13 +115,13 @@ struct Pool : PoolBase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether given index can be used to get valid (non-NULL) Titem
|
||||
* Tests whether given index can be used to get valid (non-nullptr) Titem
|
||||
* @param index index to examine
|
||||
* @return true if PoolItem::Get(index) will return non-NULL pointer
|
||||
* @return true if PoolItem::Get(index) will return non-nullptr pointer
|
||||
*/
|
||||
inline bool IsValidID(size_t index)
|
||||
{
|
||||
return index < this->first_unused && this->Get(index) != NULL;
|
||||
return index < this->first_unused && this->Get(index) != nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -150,7 +150,7 @@ struct Pool : PoolBase {
|
||||
* Allocates space for new Titem
|
||||
* @param size size of Titem
|
||||
* @return pointer to allocated memory
|
||||
* @note can never fail (return NULL), use CanAllocate() to check first!
|
||||
* @note can never fail (return nullptr), use CanAllocate() to check first!
|
||||
*/
|
||||
inline void *operator new(size_t size)
|
||||
{
|
||||
@@ -164,7 +164,7 @@ struct Pool : PoolBase {
|
||||
*/
|
||||
inline void operator delete(void *p)
|
||||
{
|
||||
if (p == NULL) return;
|
||||
if (p == nullptr) return;
|
||||
Titem *pn = (Titem *)p;
|
||||
assert_msg(pn == Tpool->Get(pn->index), "name: %s", Tpool->name);
|
||||
Tpool->FreeItem(pn->index);
|
||||
@@ -175,7 +175,7 @@ struct Pool : PoolBase {
|
||||
* @param size size of Titem
|
||||
* @param index index of item
|
||||
* @return pointer to allocated memory
|
||||
* @note can never fail (return NULL), use CanAllocate() to check first!
|
||||
* @note can never fail (return nullptr), use CanAllocate() to check first!
|
||||
* @pre index has to be unused! Else it will crash
|
||||
*/
|
||||
inline void *operator new(size_t size, size_t index)
|
||||
@@ -228,9 +228,9 @@ struct Pool : PoolBase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether given index can be used to get valid (non-NULL) Titem
|
||||
* Tests whether given index can be used to get valid (non-nullptr) Titem
|
||||
* @param index index to examine
|
||||
* @return true if PoolItem::Get(index) will return non-NULL pointer
|
||||
* @return true if PoolItem::Get(index) will return non-nullptr pointer
|
||||
*/
|
||||
static inline bool IsValidID(size_t index)
|
||||
{
|
||||
@@ -252,11 +252,11 @@ struct Pool : PoolBase {
|
||||
* Returns Titem with given index
|
||||
* @param index of item to get
|
||||
* @return pointer to Titem
|
||||
* @note returns NULL for invalid index
|
||||
* @note returns nullptr for invalid index
|
||||
*/
|
||||
static inline Titem *GetIfValid(size_t index)
|
||||
{
|
||||
return index < Tpool->first_unused ? Tpool->Get(index) : NULL;
|
||||
return index < Tpool->first_unused ? Tpool->Get(index) : nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -282,7 +282,7 @@ struct Pool : PoolBase {
|
||||
* Dummy function called after destructor of each member.
|
||||
* If you want to use it, override it in PoolItem's subclass.
|
||||
* @param index index of deleted item
|
||||
* @note when this function is called, PoolItem::Get(index) == NULL.
|
||||
* @note when this function is called, PoolItem::Get(index) == nullptr.
|
||||
* @note it's called only when !CleaningPool()
|
||||
*/
|
||||
static inline void PostDestructor(size_t index) { }
|
||||
@@ -321,8 +321,8 @@ private:
|
||||
};
|
||||
|
||||
#define FOR_ALL_ITEMS_FROM(type, iter, var, start) \
|
||||
for (size_t iter = start; var = NULL, iter < type::GetPoolSize(); iter++) \
|
||||
if ((var = type::Get(iter)) != NULL)
|
||||
for (size_t iter = start; var = nullptr, iter < type::GetPoolSize(); iter++) \
|
||||
if ((var = type::Get(iter)) != nullptr)
|
||||
|
||||
#define FOR_ALL_ITEMS(type, iter, var) FOR_ALL_ITEMS_FROM(type, iter, var, 0)
|
||||
|
||||
|
@@ -46,13 +46,13 @@ protected:
|
||||
|
||||
public:
|
||||
|
||||
SmallMatrix() : data(NULL), width(0), height(0), capacity(0) {}
|
||||
SmallMatrix() : data(nullptr), width(0), height(0), capacity(0) {}
|
||||
|
||||
/**
|
||||
* Copy constructor.
|
||||
* @param other The other matrix to copy.
|
||||
*/
|
||||
SmallMatrix(const SmallMatrix &other) : data(NULL), width(0), height(0), capacity(0)
|
||||
SmallMatrix(const SmallMatrix &other) : data(nullptr), width(0), height(0), capacity(0)
|
||||
{
|
||||
this->Assign(other);
|
||||
}
|
||||
@@ -112,7 +112,7 @@ public:
|
||||
this->width = 0;
|
||||
this->capacity = 0;
|
||||
free(this->data);
|
||||
this->data = NULL;
|
||||
this->data = nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -216,8 +216,8 @@ public:
|
||||
inline void Resize(uint new_width, uint new_height)
|
||||
{
|
||||
uint new_capacity = new_width * new_height;
|
||||
T *new_data = NULL;
|
||||
void (*copy)(T *dest, const T *src, size_t count) = NULL;
|
||||
T *new_data = nullptr;
|
||||
void (*copy)(T *dest, const T *src, size_t count) = nullptr;
|
||||
if (new_capacity > this->capacity) {
|
||||
/* If the data doesn't fit into current capacity, resize and copy ... */
|
||||
new_data = MallocT<T>(new_capacity);
|
||||
|
@@ -53,8 +53,8 @@ static inline void GSortT(T *base, size_t num, int (CDECL *comparator)(const T*,
|
||||
{
|
||||
if (num < 2) return;
|
||||
|
||||
assert(base != NULL);
|
||||
assert(comparator != NULL);
|
||||
assert(base != nullptr);
|
||||
assert(comparator != nullptr);
|
||||
|
||||
T *a = base;
|
||||
T *b = base + 1;
|
||||
|
@@ -74,10 +74,10 @@
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
/* static */ const char *CrashLog::message = NULL;
|
||||
/* static */ char *CrashLog::gamelog_buffer = NULL;
|
||||
/* static */ const char *CrashLog::gamelog_last = NULL;
|
||||
/* static */ const CrashLog *CrashLog::main_thread_pending_crashlog = NULL;
|
||||
/* static */ const char *CrashLog::message = nullptr;
|
||||
/* static */ char *CrashLog::gamelog_buffer = nullptr;
|
||||
/* static */ const char *CrashLog::gamelog_last = nullptr;
|
||||
/* static */ const CrashLog *CrashLog::main_thread_pending_crashlog = nullptr;
|
||||
|
||||
char *CrashLog::LogCompiler(char *buffer, const char *last) const
|
||||
{
|
||||
@@ -190,18 +190,18 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
|
||||
" Sound driver: %s\n"
|
||||
" Sound set: %s (%u)\n"
|
||||
" Video driver: %s\n\n",
|
||||
BlitterFactory::GetCurrentBlitter() == NULL ? "none" : BlitterFactory::GetCurrentBlitter()->GetName(),
|
||||
BaseGraphics::GetUsedSet() == NULL ? "none" : BaseGraphics::GetUsedSet()->name,
|
||||
BaseGraphics::GetUsedSet() == NULL ? UINT32_MAX : BaseGraphics::GetUsedSet()->version,
|
||||
_current_language == NULL ? "none" : _current_language->file,
|
||||
MusicDriver::GetInstance() == NULL ? "none" : MusicDriver::GetInstance()->GetName(),
|
||||
BaseMusic::GetUsedSet() == NULL ? "none" : BaseMusic::GetUsedSet()->name,
|
||||
BaseMusic::GetUsedSet() == NULL ? UINT32_MAX : BaseMusic::GetUsedSet()->version,
|
||||
BlitterFactory::GetCurrentBlitter() == nullptr ? "none" : BlitterFactory::GetCurrentBlitter()->GetName(),
|
||||
BaseGraphics::GetUsedSet() == nullptr ? "none" : BaseGraphics::GetUsedSet()->name,
|
||||
BaseGraphics::GetUsedSet() == nullptr ? UINT32_MAX : BaseGraphics::GetUsedSet()->version,
|
||||
_current_language == nullptr ? "none" : _current_language->file,
|
||||
MusicDriver::GetInstance() == nullptr ? "none" : MusicDriver::GetInstance()->GetName(),
|
||||
BaseMusic::GetUsedSet() == nullptr ? "none" : BaseMusic::GetUsedSet()->name,
|
||||
BaseMusic::GetUsedSet() == nullptr ? UINT32_MAX : BaseMusic::GetUsedSet()->version,
|
||||
_networking ? (_network_server ? "server" : "client") : "no",
|
||||
SoundDriver::GetInstance() == NULL ? "none" : SoundDriver::GetInstance()->GetName(),
|
||||
BaseSounds::GetUsedSet() == NULL ? "none" : BaseSounds::GetUsedSet()->name,
|
||||
BaseSounds::GetUsedSet() == NULL ? UINT32_MAX : BaseSounds::GetUsedSet()->version,
|
||||
VideoDriver::GetInstance() == NULL ? "none" : VideoDriver::GetInstance()->GetName()
|
||||
SoundDriver::GetInstance() == nullptr ? "none" : SoundDriver::GetInstance()->GetName(),
|
||||
BaseSounds::GetUsedSet() == nullptr ? "none" : BaseSounds::GetUsedSet()->name,
|
||||
BaseSounds::GetUsedSet() == nullptr ? UINT32_MAX : BaseSounds::GetUsedSet()->version,
|
||||
VideoDriver::GetInstance() == nullptr ? "none" : VideoDriver::GetInstance()->GetName()
|
||||
);
|
||||
|
||||
buffer += seprintf(buffer, last,
|
||||
@@ -221,14 +221,14 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const
|
||||
buffer += seprintf(buffer, last, "AI Configuration (local: %i) (current: %i):\n", (int)_local_company, (int)_current_company);
|
||||
const Company *c;
|
||||
FOR_ALL_COMPANIES(c) {
|
||||
if (c->ai_info == NULL) {
|
||||
if (c->ai_info == nullptr) {
|
||||
buffer += seprintf(buffer, last, " %2i: Human\n", (int)c->index);
|
||||
} else {
|
||||
buffer += seprintf(buffer, last, " %2i: %s (v%d)\n", (int)c->index, c->ai_info->GetName(), c->ai_info->GetVersion());
|
||||
}
|
||||
}
|
||||
|
||||
if (Game::GetInfo() != NULL) {
|
||||
if (Game::GetInfo() != nullptr) {
|
||||
buffer += seprintf(buffer, last, " GS: %s (v%d)\n", Game::GetInfo()->GetName(), Game::GetInfo()->GetVersion());
|
||||
}
|
||||
buffer += seprintf(buffer, last, "\n");
|
||||
@@ -287,7 +287,7 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const
|
||||
#endif
|
||||
|
||||
#ifdef WITH_PNG
|
||||
buffer += seprintf(buffer, last, " PNG: %s\n", png_get_libpng_ver(NULL));
|
||||
buffer += seprintf(buffer, last, " PNG: %s\n", png_get_libpng_ver(nullptr));
|
||||
#endif /* WITH_PNG */
|
||||
|
||||
#ifdef WITH_SDL
|
||||
@@ -335,14 +335,14 @@ char *CrashLog::LogGamelog(char *buffer, const char *last) const
|
||||
char *CrashLog::LogRecentNews(char *buffer, const char *last) const
|
||||
{
|
||||
uint total = 0;
|
||||
for (NewsItem *news = _oldest_news; news != NULL; news = news->next) {
|
||||
for (NewsItem *news = _oldest_news; news != nullptr; news = news->next) {
|
||||
total++;
|
||||
}
|
||||
uint show = min<uint>(total, 32);
|
||||
buffer += seprintf(buffer, last, "Recent news messages (%u of %u):\n", show, total);
|
||||
|
||||
uint skip = total - show;
|
||||
for (NewsItem *news = _oldest_news; news != NULL; news = news->next) {
|
||||
for (NewsItem *news = _oldest_news; news != nullptr; news = news->next) {
|
||||
if (skip) {
|
||||
skip--;
|
||||
continue;
|
||||
@@ -378,7 +378,7 @@ char *CrashLog::LogCommandLog(char *buffer, const char *last) const
|
||||
*/
|
||||
char *CrashLog::FillCrashLog(char *buffer, const char *last) const
|
||||
{
|
||||
time_t cur_time = time(NULL);
|
||||
time_t cur_time = time(nullptr);
|
||||
buffer += seprintf(buffer, last, "*** OpenTTD Crash Report ***\n\n");
|
||||
|
||||
if (GamelogTestEmergency()) {
|
||||
@@ -439,7 +439,7 @@ bool CrashLog::WriteCrashLog(const char *buffer, char *filename, const char *fil
|
||||
seprintf(filename, filename_last, "%scrash.log", _personal_dir);
|
||||
|
||||
FILE *file = FioFOpenFile(filename, "w", NO_DIRECTORY);
|
||||
if (file == NULL) return false;
|
||||
if (file == nullptr) return false;
|
||||
|
||||
size_t len = strlen(buffer);
|
||||
size_t written = fwrite(buffer, 1, len, file);
|
||||
@@ -466,7 +466,7 @@ bool CrashLog::WriteSavegame(char *filename, const char *filename_last) const
|
||||
{
|
||||
/* If the map array doesn't exist, saving will fail too. If the map got
|
||||
* initialised, there is a big chance the rest is initialised too. */
|
||||
if (_m == NULL) return false;
|
||||
if (_m == nullptr) return false;
|
||||
|
||||
try {
|
||||
GamelogEmergency();
|
||||
@@ -491,7 +491,7 @@ bool CrashLog::WriteSavegame(char *filename, const char *filename_last) const
|
||||
bool CrashLog::WriteScreenshot(char *filename, const char *filename_last) const
|
||||
{
|
||||
/* Don't draw when we have invalid screen size */
|
||||
if (_screen.width < 1 || _screen.height < 1 || _screen.dst_ptr == NULL) return false;
|
||||
if (_screen.width < 1 || _screen.height < 1 || _screen.dst_ptr == nullptr) return false;
|
||||
|
||||
bool res = MakeScreenshot(SC_CRASHLOG, "crash");
|
||||
if (res) strecpy(filename, _full_screenshot_name, filename_last);
|
||||
@@ -611,14 +611,14 @@ bool CrashLog::MakeCrashSavegameAndScreenshot() const
|
||||
*/
|
||||
/* static */ void CrashLog::AfterCrashLogCleanup()
|
||||
{
|
||||
if (MusicDriver::GetInstance() != NULL) MusicDriver::GetInstance()->Stop();
|
||||
if (SoundDriver::GetInstance() != NULL) SoundDriver::GetInstance()->Stop();
|
||||
if (VideoDriver::GetInstance() != NULL) VideoDriver::GetInstance()->Stop();
|
||||
if (MusicDriver::GetInstance() != nullptr) MusicDriver::GetInstance()->Stop();
|
||||
if (SoundDriver::GetInstance() != nullptr) SoundDriver::GetInstance()->Stop();
|
||||
if (VideoDriver::GetInstance() != nullptr) VideoDriver::GetInstance()->Stop();
|
||||
}
|
||||
|
||||
/* static */ const char *CrashLog::GetAbortCrashlogReason()
|
||||
{
|
||||
if (_settings_client.gui.developer > 0) return NULL;
|
||||
if (_settings_client.gui.developer > 0) return nullptr;
|
||||
|
||||
if (GamelogTestEmergency()) {
|
||||
return "As you loaded an emergency savegame no crash information will be generated.\n";
|
||||
@@ -629,17 +629,17 @@ bool CrashLog::MakeCrashSavegameAndScreenshot() const
|
||||
"no crash information will be generated.\n";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#if defined(WITH_BFD)
|
||||
sym_info_bfd::sym_info_bfd(bfd_vma addr_) : addr(addr_), abfd(NULL), syms(NULL), sym_count(0),
|
||||
file_name(NULL), function_name(NULL), function_addr(0), line(0), found(false) {}
|
||||
sym_info_bfd::sym_info_bfd(bfd_vma addr_) : addr(addr_), abfd(nullptr), syms(nullptr), sym_count(0),
|
||||
file_name(nullptr), function_name(nullptr), function_addr(0), line(0), found(false) {}
|
||||
|
||||
sym_info_bfd::~sym_info_bfd()
|
||||
{
|
||||
free(syms);
|
||||
if (abfd != NULL) bfd_close(abfd);
|
||||
if (abfd != nullptr) bfd_close(abfd);
|
||||
}
|
||||
|
||||
static void find_address_in_section(bfd *abfd, asection *section, void *data)
|
||||
@@ -684,9 +684,9 @@ static void find_address_in_section(bfd *abfd, asection *section, void *data)
|
||||
|
||||
void lookup_addr_bfd(const char *obj_file_name, sym_info_bfd &info)
|
||||
{
|
||||
info.abfd = bfd_openr(obj_file_name, NULL);
|
||||
info.abfd = bfd_openr(obj_file_name, nullptr);
|
||||
|
||||
if (info.abfd == NULL) return;
|
||||
if (info.abfd == nullptr) return;
|
||||
|
||||
if (!bfd_check_format(info.abfd, bfd_object) || (bfd_get_file_flags(info.abfd) & HAS_SYMS) == 0) return;
|
||||
|
||||
|
@@ -56,7 +56,7 @@ protected:
|
||||
* Writes actually encountered error to the buffer.
|
||||
* @param buffer The begin where to write at.
|
||||
* @param last The last position in the buffer to write to.
|
||||
* @param message Message passed to use for possible errors. Can be NULL.
|
||||
* @param message Message passed to use for possible errors. Can be nullptr.
|
||||
* @return the position of the \c '\0' character after the buffer.
|
||||
*/
|
||||
virtual char *LogError(char *buffer, const char *last, const char *message) const = 0;
|
||||
|
@@ -148,7 +148,7 @@ struct SetDateWindow : Window {
|
||||
ShowDateDropDown(widget);
|
||||
break;
|
||||
case WID_SD_SET_DATE:
|
||||
if (this->callback != NULL) {
|
||||
if (this->callback != nullptr) {
|
||||
this->callback(this, ConvertYMDToDate(this->date.year, this->date.month, this->date.day)
|
||||
* DAY_TICKS * _settings_game.economy.day_length_factor);
|
||||
}
|
||||
@@ -266,7 +266,7 @@ struct SetMinutesWindow : SetDateWindow
|
||||
break;
|
||||
|
||||
case WID_SD_SET_DATE:
|
||||
if (this->callback != NULL) {
|
||||
if (this->callback != nullptr) {
|
||||
this->callback(this, ((DateTicks)minutes - _settings_client.gui.clock_offset) * _settings_client.gui.ticks_per_minute);
|
||||
}
|
||||
delete this;
|
||||
@@ -338,14 +338,14 @@ static const NWidgetPart _nested_set_minutes_widgets[] = {
|
||||
|
||||
/** Description of the date setting window. */
|
||||
static WindowDesc _set_date_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_SET_DATE, WC_NONE,
|
||||
0,
|
||||
_nested_set_date_widgets, lengthof(_nested_set_date_widgets)
|
||||
);
|
||||
|
||||
static WindowDesc _set_minutes_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_SET_DATE, WC_NONE,
|
||||
0,
|
||||
_nested_set_minutes_widgets, lengthof(_nested_set_minutes_widgets)
|
||||
|
@@ -130,7 +130,7 @@ static void debug_print(const char *dbg, const char *buf)
|
||||
}
|
||||
if (strcmp(dbg, "desync") == 0) {
|
||||
static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR);
|
||||
if (f != NULL) {
|
||||
if (f != nullptr) {
|
||||
fprintf(f, "%s%s\n", GetLogPrefix(), buf);
|
||||
fflush(f);
|
||||
}
|
||||
@@ -138,18 +138,18 @@ static void debug_print(const char *dbg, const char *buf)
|
||||
} else if (strcmp(dbg, "random") == 0) {
|
||||
#if defined(UNIX) && defined(__GLIBC__)
|
||||
static bool have_inited = false;
|
||||
static FILE *f = NULL;
|
||||
static FILE *f = nullptr;
|
||||
|
||||
if (!have_inited) {
|
||||
have_inited = true;
|
||||
unsigned int num = 0;
|
||||
int pid = getpid();
|
||||
const char *fn = NULL;
|
||||
const char *fn = nullptr;
|
||||
for(;;) {
|
||||
free(fn);
|
||||
fn = str_fmt("random-out-%d-%u.log", pid, num);
|
||||
f = FioFOpenFile(fn, "wx", AUTOSAVE_DIR);
|
||||
if (f == NULL && errno == EEXIST) {
|
||||
if (f == nullptr && errno == EEXIST) {
|
||||
num++;
|
||||
continue;
|
||||
}
|
||||
@@ -160,7 +160,7 @@ static void debug_print(const char *dbg, const char *buf)
|
||||
#else
|
||||
static FILE *f = FioFOpenFile("random-out.log", "wb", AUTOSAVE_DIR);
|
||||
#endif
|
||||
if (f != NULL) {
|
||||
if (f != nullptr) {
|
||||
fprintf(f, "%s\n", buf);
|
||||
return;
|
||||
}
|
||||
@@ -242,7 +242,7 @@ void SetDebugString(const char *s)
|
||||
while (*s >= 'a' && *s <= 'z') s++;
|
||||
|
||||
/* check debugging levels */
|
||||
p = NULL;
|
||||
p = nullptr;
|
||||
for (i = debug_level; i != endof(debug_level); ++i) {
|
||||
if (s == t + strlen(i->name) && strncmp(t, i->name, s - t) == 0) {
|
||||
p = i->level;
|
||||
@@ -253,7 +253,7 @@ void SetDebugString(const char *s)
|
||||
if (*s == '=') s++;
|
||||
v = strtoul(s, &end, 0);
|
||||
s = end;
|
||||
if (p != NULL) {
|
||||
if (p != nullptr) {
|
||||
*p = v;
|
||||
} else {
|
||||
ShowInfoF("Unknown debug level '%.*s'", (int)(s - t), t);
|
||||
@@ -288,13 +288,13 @@ const char *GetDebugString()
|
||||
/**
|
||||
* Get the prefix for logs; if show_date_in_logs is enabled it returns
|
||||
* the date, otherwise it returns nothing.
|
||||
* @return the prefix for logs (do not free), never NULL
|
||||
* @return the prefix for logs (do not free), never nullptr
|
||||
*/
|
||||
const char *GetLogPrefix()
|
||||
{
|
||||
static char _log_prefix[24];
|
||||
if (_settings_client.gui.show_date_in_logs) {
|
||||
time_t cur_time = time(NULL);
|
||||
time_t cur_time = time(nullptr);
|
||||
strftime(_log_prefix, sizeof(_log_prefix), "[%Y-%m-%d %H:%M:%S] ", localtime(&cur_time));
|
||||
} else {
|
||||
*_log_prefix = '\0';
|
||||
|
@@ -11,8 +11,8 @@
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
char *_log_file = NULL; ///< File to reroute output of a forked OpenTTD to
|
||||
FILE *_log_fd = NULL; ///< File to reroute output of a forked OpenTTD to
|
||||
char *_log_file = nullptr; ///< File to reroute output of a forked OpenTTD to
|
||||
FILE *_log_fd = nullptr; ///< File to reroute output of a forked OpenTTD to
|
||||
|
||||
#if defined(UNIX)
|
||||
|
||||
@@ -41,7 +41,7 @@ void DedicatedFork()
|
||||
case 0: { // We're the child
|
||||
/* Open the log-file to log all stuff too */
|
||||
_log_fd = fopen(_log_file, "a");
|
||||
if (_log_fd == NULL) {
|
||||
if (_log_fd == nullptr) {
|
||||
perror("Unable to open logfile");
|
||||
exit(1);
|
||||
}
|
||||
|
@@ -229,7 +229,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
DateTicksScaled date_fract_scaled = ((DateTicksScaled)_date_fract * _settings_game.economy.day_length_factor) + _tick_skip_counter;
|
||||
|
||||
/* The scheduled order in next_orders with the earliest expected_date field. */
|
||||
OrderDate *least_order = NULL;
|
||||
OrderDate *least_order = nullptr;
|
||||
|
||||
/* Cache for scheduled departure time */
|
||||
schdispatch_cache_t schdispatch_last_planned_dispatch;
|
||||
@@ -259,7 +259,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
bool carries_passengers = false;
|
||||
|
||||
const Vehicle *u = v;
|
||||
while (u != NULL) {
|
||||
while (u != nullptr) {
|
||||
if (u->cargo_cap > 0 && IsCargoInClass(u->cargo_type, CC_PASSENGERS)) {
|
||||
carries_passengers = true;
|
||||
break;
|
||||
@@ -326,7 +326,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
status = D_TRAVELLING;
|
||||
}
|
||||
order = v->GetOrder(order->GetConditionSkipToOrder());
|
||||
if (order == NULL) {
|
||||
if (order == nullptr) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -339,7 +339,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
if (status != D_CANCELLED) {
|
||||
status = D_TRAVELLING;
|
||||
}
|
||||
order = (order->next == NULL) ? v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? v->GetFirstOrder() : order->next;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -347,7 +347,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
|
||||
/* Skip it if it's an automatic order. */
|
||||
if (order->IsType(OT_IMPLICIT)) {
|
||||
order = (order->next == NULL) ? v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? v->GetFirstOrder() : order->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -386,7 +386,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
}
|
||||
|
||||
/* Update least_order if this is the current least order. */
|
||||
if (least_order == NULL) {
|
||||
if (least_order == nullptr) {
|
||||
least_order = od;
|
||||
} else if (int(least_order->expected_date - least_order->lateness - (type == D_ARRIVAL ? (least_order->scheduled_waiting_time > 0 ? least_order->scheduled_waiting_time : least_order->order->GetWaitTime()) : 0)) > int(od->expected_date - od->lateness - (type == D_ARRIVAL ? (od->scheduled_waiting_time > 0 ? od->scheduled_waiting_time : od->order->GetWaitTime()) : 0))) {
|
||||
/* Somehow my compiler perform an unsigned comparition above so integer cast is required */
|
||||
@@ -402,7 +402,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
if (status != D_CANCELLED) {
|
||||
status = D_TRAVELLING;
|
||||
}
|
||||
order = (order->next == NULL) ? v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? v->GetFirstOrder() : order->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -461,7 +461,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
|
||||
/* Go through the order list, looping if necessary, to find a terminus. */
|
||||
/* Get the next order, which may be the vehicle's first order. */
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
/* We only need to consider each order at most once. */
|
||||
bool found_terminus = false;
|
||||
CallAt c = CallAt((StationID)order->GetDestination(), d->scheduled_date);
|
||||
@@ -483,14 +483,14 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
case 1: {
|
||||
/* Take the branch */
|
||||
order = least_order->v->GetOrder(order->GetConditionSkipToOrder());
|
||||
if (order == NULL) {
|
||||
if (order == nullptr) {
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
case 2: {
|
||||
/* Do not take the branch */
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -532,7 +532,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
order->GetNonStopType() == ONSF_NO_STOP_AT_ANY_STATION ||
|
||||
order->GetNonStopType() == ONSF_NO_STOP_AT_DESTINATION_STATION) {
|
||||
c.scheduled_date += order->GetWaitTime();
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -566,7 +566,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
c.scheduled_date += order->GetWaitTime();
|
||||
|
||||
/* Get the next order, which may be the vehicle's first order. */
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
}
|
||||
|
||||
if (found_terminus) {
|
||||
@@ -620,7 +620,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
/* However, the very first thing we do is use the arrival time as the scheduled time instead of the departure time. */
|
||||
d->scheduled_date -= d->scheduled_waiting_time > 0 ? d->scheduled_waiting_time : order->GetWaitTime();
|
||||
|
||||
const Order *candidate_origin = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
const Order *candidate_origin = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
bool found_origin = false;
|
||||
|
||||
while (candidate_origin != least_order->order) {
|
||||
@@ -629,7 +629,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
(candidate_origin->GetType() == OT_GOTO_STATION ||
|
||||
candidate_origin->GetType() == OT_IMPLICIT) &&
|
||||
candidate_origin->GetDestination() != station) {
|
||||
const Order *o = (candidate_origin->next == NULL) ? least_order->v->GetFirstOrder() : candidate_origin->next;
|
||||
const Order *o = (candidate_origin->next == nullptr) ? least_order->v->GetFirstOrder() : candidate_origin->next;
|
||||
bool found_collision = false;
|
||||
|
||||
/* Check if the candidate origin's destination appears again before the original order or the station does. */
|
||||
@@ -647,7 +647,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
break;
|
||||
}
|
||||
|
||||
o = (o->next == NULL) ? least_order->v->GetFirstOrder() : o->next;
|
||||
o = (o->next == nullptr) ? least_order->v->GetFirstOrder() : o->next;
|
||||
}
|
||||
|
||||
/* If it doesn't, then we have found the origin. */
|
||||
@@ -657,10 +657,10 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
}
|
||||
}
|
||||
|
||||
candidate_origin = (candidate_origin->next == NULL) ? least_order->v->GetFirstOrder() : candidate_origin->next;
|
||||
candidate_origin = (candidate_origin->next == nullptr) ? least_order->v->GetFirstOrder() : candidate_origin->next;
|
||||
}
|
||||
|
||||
order = (candidate_origin->next == NULL) ? least_order->v->GetFirstOrder() : candidate_origin->next;
|
||||
order = (candidate_origin->next == nullptr) ? least_order->v->GetFirstOrder() : candidate_origin->next;
|
||||
|
||||
while (order != least_order->order) {
|
||||
if (order->GetType() == OT_GOTO_STATION &&
|
||||
@@ -669,7 +669,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
d->calling_at.push_back(CallAt((StationID)order->GetDestination()));
|
||||
}
|
||||
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
}
|
||||
|
||||
d->terminus = CallAt((StationID)candidate_origin->GetDestination());
|
||||
@@ -699,7 +699,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
/* We do this in a similar way to finding the first suitable order for the vehicle. */
|
||||
|
||||
/* Go to the next order so we don't add the current order again. */
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
if (VehicleSetNextDepartureTime(&least_order->expected_date, &least_order->scheduled_waiting_time, date_only_scaled, least_order->v, order, false, schdispatch_last_planned_dispatch)) {
|
||||
least_order->lateness = 0;
|
||||
}
|
||||
@@ -718,7 +718,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
case 1: {
|
||||
/* Take the branch */
|
||||
order = least_order->v->GetOrder(order->GetConditionSkipToOrder());
|
||||
if (order == NULL) {
|
||||
if (order == nullptr) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -730,7 +730,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
}
|
||||
case 2: {
|
||||
/* Do not take the branch */
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
if (VehicleSetNextDepartureTime(&least_order->expected_date, &least_order->scheduled_waiting_time, date_only_scaled, least_order->v, order, false, schdispatch_last_planned_dispatch)) {
|
||||
least_order->lateness = 0;
|
||||
}
|
||||
@@ -741,7 +741,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
|
||||
/* Skip it if it's an automatic order. */
|
||||
if (order->IsType(OT_IMPLICIT)) {
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -764,7 +764,7 @@ DepartureList* MakeDepartureList(StationID station, bool show_vehicle_types[5],
|
||||
break;
|
||||
}
|
||||
|
||||
order = (order->next == NULL) ? least_order->v->GetFirstOrder() : order->next;
|
||||
order = (order->next == nullptr) ? least_order->v->GetFirstOrder() : order->next;
|
||||
if (VehicleSetNextDepartureTime(&least_order->expected_date, &least_order->scheduled_waiting_time, date_only_scaled, least_order->v, order, false, schdispatch_last_planned_dispatch)) {
|
||||
least_order->lateness = 0;
|
||||
}
|
||||
|
@@ -67,7 +67,7 @@ static const NWidgetPart _nested_departures_list[] = {
|
||||
};
|
||||
|
||||
static WindowDesc _departures_desc(
|
||||
WDP_AUTO, NULL, 260, 246,
|
||||
WDP_AUTO, nullptr, 260, 246,
|
||||
WC_DEPARTURES_BOARD, WC_NONE,
|
||||
0,
|
||||
_nested_departures_list, lengthof(_nested_departures_list)
|
||||
@@ -519,10 +519,10 @@ void DeparturesWindow<Twaypoint>::DeleteDeparturesList(DepartureList *list)
|
||||
Departure **d = &(*list)[i];
|
||||
delete *d;
|
||||
/* Make sure a double free doesn't happen. */
|
||||
*d = NULL;
|
||||
*d = nullptr;
|
||||
}
|
||||
delete list;
|
||||
list = NULL;
|
||||
list = nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -75,7 +75,7 @@ struct Departure {
|
||||
const Vehicle *vehicle; ///< The vehicle performing this departure
|
||||
const Order *order; ///< The order corresponding to this departure
|
||||
uint scheduled_waiting_time; ///< Scheduled waiting time if scheduled dispatch is used
|
||||
Departure() : terminus(INVALID_STATION), via(INVALID_STATION), vehicle(NULL), order(NULL) { }
|
||||
Departure() : terminus(INVALID_STATION), via(INVALID_STATION), vehicle(nullptr), order(nullptr) { }
|
||||
|
||||
inline bool operator==(const Departure& d) const {
|
||||
if (this->calling_at.size() != d.calling_at.size()) return false;
|
||||
|
@@ -54,7 +54,7 @@
|
||||
*
|
||||
* Copies the source string to the destination buffer with respect of the
|
||||
* terminating null-character and the last pointer to the last element in
|
||||
* the destination buffer. If the last pointer is set to NULL no boundary
|
||||
* the destination buffer. If the last pointer is set to nullptr no boundary
|
||||
* check is performed.
|
||||
*
|
||||
* @note usage: strecpy(dst, src, lastof(dst));
|
||||
@@ -85,7 +85,7 @@ char *strecpy(char *dst, const char *src, const char *last)
|
||||
*
|
||||
* Appends the source string to the destination string with respect of the
|
||||
* terminating null-character and and the last pointer to the last element
|
||||
* in the destination buffer. If the last pointer is set to NULL no
|
||||
* in the destination buffer. If the last pointer is set to nullptr no
|
||||
* boundary check is performed.
|
||||
*
|
||||
* @note usage: strecat(dst, src, lastof(dst));
|
||||
@@ -163,13 +163,13 @@ public:
|
||||
File(const char *filename)
|
||||
{
|
||||
this->fp = fopen(filename, "r");
|
||||
if (this->fp == NULL) {
|
||||
if (this->fp == nullptr) {
|
||||
fprintf(stdout, "Could not open %s for reading\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
this->dirname = strdup(filename);
|
||||
char *last = strrchr(this->dirname, '/');
|
||||
if (last != NULL) {
|
||||
if (last != nullptr) {
|
||||
*last = '\0';
|
||||
} else {
|
||||
*this->dirname = '\0';
|
||||
@@ -247,7 +247,7 @@ public:
|
||||
* Create the lexer and fill the keywords table.
|
||||
* @param file the file to read from.
|
||||
*/
|
||||
Lexer(const File *file) : file(file), current_char('\0'), string(NULL), token(TOKEN_UNKNOWN)
|
||||
Lexer(const File *file) : file(file), current_char('\0'), string(nullptr), token(TOKEN_UNKNOWN)
|
||||
{
|
||||
this->keywords["define"] = TOKEN_DEFINE;
|
||||
this->keywords["defined"] = TOKEN_DEFINED;
|
||||
@@ -293,7 +293,7 @@ public:
|
||||
|
||||
/**
|
||||
* Read the currenty processed string.
|
||||
* @return the string, can be NULL.
|
||||
* @return the string, can be nullptr.
|
||||
*/
|
||||
const char *GetString() const
|
||||
{
|
||||
@@ -308,7 +308,7 @@ public:
|
||||
{
|
||||
for (;;) {
|
||||
free(this->string);
|
||||
this->string = NULL;
|
||||
this->string = nullptr;
|
||||
this->token = TOKEN_UNKNOWN;
|
||||
|
||||
switch (this->current_char) {
|
||||
@@ -503,7 +503,7 @@ private:
|
||||
* @param dirname the directory to look in.
|
||||
* @param filename the file to look for.
|
||||
* @param local whether to look locally (in dirname) for the file.
|
||||
* @return the absolute path, or NULL if the file doesn't exist.
|
||||
* @return the absolute path, or nullptr if the file doesn't exist.
|
||||
*/
|
||||
const char *GeneratePath(const char *dirname, const char *filename, bool local)
|
||||
{
|
||||
@@ -517,7 +517,7 @@ const char *GeneratePath(const char *dirname, const char *filename, bool local)
|
||||
while (*p == '.') {
|
||||
if (*(++p) == '.') {
|
||||
char *s = strrchr(path, '/');
|
||||
if (s != NULL) *s = '\0';
|
||||
if (s != nullptr) *s = '\0';
|
||||
p += 2;
|
||||
}
|
||||
}
|
||||
@@ -535,7 +535,7 @@ const char *GeneratePath(const char *dirname, const char *filename, bool local)
|
||||
while (*p == '.') {
|
||||
if (*(++p) == '.') {
|
||||
char *s = strrchr(path, '/');
|
||||
if (s != NULL) *s = '\0';
|
||||
if (s != nullptr) *s = '\0';
|
||||
p += 2;
|
||||
}
|
||||
}
|
||||
@@ -545,7 +545,7 @@ const char *GeneratePath(const char *dirname, const char *filename, bool local)
|
||||
if (access(path, R_OK) == 0) return strdup(path);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -730,7 +730,7 @@ void ScanFile(const char *filename, const char *ext, bool header, bool verbose)
|
||||
break;
|
||||
}
|
||||
const char *h = GeneratePath(file.GetDirname(), lexer.GetString(), lexer.GetToken() == TOKEN_LOCAL);
|
||||
if (h != NULL) {
|
||||
if (h != nullptr) {
|
||||
StringMap::iterator it = _headers.find(h);
|
||||
if (it == _headers.end()) {
|
||||
it = (_headers.insert(StringMapItem(strdup(h), new StringSet()))).first;
|
||||
@@ -745,7 +745,7 @@ void ScanFile(const char *filename, const char *ext, bool header, bool verbose)
|
||||
char path[PATH_MAX];
|
||||
strecpy(path, filename, lastof(path));
|
||||
*(strrchr(path, '.')) = '\0';
|
||||
strecat(path, ext != NULL ? ext : ".o", lastof(path));
|
||||
strecat(path, ext != nullptr ? ext : ".o", lastof(path));
|
||||
curfile = _files.find(path);
|
||||
if (curfile == _files.end()) {
|
||||
curfile = (_files.insert(StringMapItem(strdup(path), new StringSet()))).first;
|
||||
@@ -909,9 +909,9 @@ void ScanFile(const char *filename, const char *ext, bool header, bool verbose)
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
bool ignorenext = true;
|
||||
char *filename = NULL;
|
||||
char *ext = NULL;
|
||||
char *delimiter = NULL;
|
||||
char *filename = nullptr;
|
||||
char *ext = nullptr;
|
||||
char *delimiter = nullptr;
|
||||
bool append = false;
|
||||
bool verbose = false;
|
||||
|
||||
@@ -936,25 +936,25 @@ int main(int argc, char *argv[])
|
||||
/* Define */
|
||||
if (strncmp(argv[i], "-D", 2) == 0) {
|
||||
char *p = strchr(argv[i], '=');
|
||||
if (p != NULL) *p = '\0';
|
||||
if (p != nullptr) *p = '\0';
|
||||
_defines.insert(strdup(&argv[i][2]));
|
||||
continue;
|
||||
}
|
||||
/* Output file */
|
||||
if (strncmp(argv[i], "-f", 2) == 0) {
|
||||
if (filename != NULL) continue;
|
||||
if (filename != nullptr) continue;
|
||||
filename = strdup(&argv[i][2]);
|
||||
continue;
|
||||
}
|
||||
/* Object file extension */
|
||||
if (strncmp(argv[i], "-o", 2) == 0) {
|
||||
if (ext != NULL) continue;
|
||||
if (ext != nullptr) continue;
|
||||
ext = strdup(&argv[i][2]);
|
||||
continue;
|
||||
}
|
||||
/* Starting string delimiter */
|
||||
if (strncmp(argv[i], "-s", 2) == 0) {
|
||||
if (delimiter != NULL) continue;
|
||||
if (delimiter != nullptr) continue;
|
||||
delimiter = strdup(&argv[i][2]);
|
||||
continue;
|
||||
}
|
||||
@@ -966,22 +966,22 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
/* Default output file is Makefile */
|
||||
if (filename == NULL) filename = strdup("Makefile");
|
||||
if (filename == nullptr) filename = strdup("Makefile");
|
||||
|
||||
/* Default delimiter string */
|
||||
if (delimiter == NULL) delimiter = strdup("# DO NOT DELETE");
|
||||
if (delimiter == nullptr) delimiter = strdup("# DO NOT DELETE");
|
||||
|
||||
char backup[PATH_MAX];
|
||||
strecpy(backup, filename, lastof(backup));
|
||||
strecat(backup, ".bak", lastof(backup));
|
||||
|
||||
char *content = NULL;
|
||||
char *content = nullptr;
|
||||
long size = 0;
|
||||
|
||||
/* Read in the current file; so we can overwrite everything from the
|
||||
* end of non-depend data marker down till the end. */
|
||||
FILE *src = fopen(filename, "rb");
|
||||
if (src != NULL) {
|
||||
if (src != nullptr) {
|
||||
fseek(src, 0, SEEK_END);
|
||||
if ((size = ftell(src)) < 0) {
|
||||
fprintf(stderr, "Could not read %s\n", filename);
|
||||
@@ -1009,7 +1009,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* Then append it to the real file. */
|
||||
src = fopen(backup, "r");
|
||||
while (fgets(content, size, src) != NULL) {
|
||||
while (fgets(content, size, src) != nullptr) {
|
||||
fputs(content, dst);
|
||||
if (!strncmp(content, delimiter, strlen(delimiter))) found_delimiter = true;
|
||||
if (!append && found_delimiter) break;
|
||||
|
@@ -33,7 +33,7 @@ static bool IsUniqueDepotName(const char *name)
|
||||
const Depot *d;
|
||||
|
||||
FOR_ALL_DEPOTS(d) {
|
||||
if (d->name != NULL && strcmp(d->name, name) == 0) return false;
|
||||
if (d->name != nullptr && strcmp(d->name, name) == 0) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -51,7 +51,7 @@ static bool IsUniqueDepotName(const char *name)
|
||||
CommandCost CmdRenameDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Depot *d = Depot::GetIfValid(p1);
|
||||
if (d == NULL) return CMD_ERROR;
|
||||
if (d == nullptr) return CMD_ERROR;
|
||||
|
||||
CommandCost ret = CheckTileOwnership(d->xy);
|
||||
if (ret.Failed()) return ret;
|
||||
@@ -67,7 +67,7 @@ CommandCost CmdRenameDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
||||
free(d->name);
|
||||
|
||||
if (reset) {
|
||||
d->name = NULL;
|
||||
d->name = nullptr;
|
||||
MakeDefaultName(d);
|
||||
} else {
|
||||
d->name = stredup(text);
|
||||
|
@@ -135,16 +135,16 @@ static void TrainDepotMoveVehicle(const Vehicle *wagon, VehicleID sel, const Veh
|
||||
|
||||
if (v == wagon) return;
|
||||
|
||||
if (wagon == NULL) {
|
||||
if (head != NULL) wagon = head->Last();
|
||||
if (wagon == nullptr) {
|
||||
if (head != nullptr) wagon = head->Last();
|
||||
} else {
|
||||
wagon = wagon->Previous();
|
||||
if (wagon == NULL) return;
|
||||
if (wagon == nullptr) return;
|
||||
}
|
||||
|
||||
if (wagon == v) return;
|
||||
|
||||
DoCommandP(v->tile, v->index | (_ctrl_pressed ? 1 : 0) << 20, wagon == NULL ? INVALID_VEHICLE : wagon->index, CMD_MOVE_RAIL_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_MOVE_VEHICLE));
|
||||
DoCommandP(v->tile, v->index | (_ctrl_pressed ? 1 : 0) << 20, wagon == nullptr ? INVALID_VEHICLE : wagon->index, CMD_MOVE_RAIL_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_MOVE_VEHICLE));
|
||||
}
|
||||
|
||||
static VehicleCellSize _base_block_sizes_depot[VEH_COMPANY_END]; ///< Cell size for vehicle images in the depot view.
|
||||
@@ -230,7 +230,7 @@ void InitDepotWindowBlockSizes()
|
||||
if (!e->IsEnabled()) continue;
|
||||
|
||||
uint w = TRAININFO_DEFAULT_VEHICLE_WIDTH;
|
||||
if (e->GetGRF() != NULL && is_custom_sprite(e->u.rail.image_index)) {
|
||||
if (e->GetGRF() != nullptr && is_custom_sprite(e->u.rail.image_index)) {
|
||||
w = e->GetGRF()->traininfo_vehicle_width;
|
||||
if (w != VEHICLEINFO_FULL_VEHICLE_WIDTH) {
|
||||
/* Hopeless.
|
||||
@@ -281,7 +281,7 @@ struct DepotWindow : Window {
|
||||
this->unitnumber_digits = 2;
|
||||
|
||||
this->CreateNestedTree();
|
||||
this->hscroll = (this->type == VEH_TRAIN ? this->GetScrollbar(WID_D_H_SCROLL) : NULL);
|
||||
this->hscroll = (this->type == VEH_TRAIN ? this->GetScrollbar(WID_D_H_SCROLL) : nullptr);
|
||||
this->vscroll = this->GetScrollbar(WID_D_V_SCROLL);
|
||||
/* Don't show 'rename button' of aircraft hangar */
|
||||
this->GetWidget<NWidgetStacked>(WID_D_SHOW_RENAME)->SetDisplayedPlane(type == VEH_AIRCRAFT ? SZSP_NONE : 0);
|
||||
@@ -471,8 +471,8 @@ struct DepotWindow : Window {
|
||||
/* Clicking on 'line' / 'block' without a vehicle */
|
||||
if (this->type == VEH_TRAIN) {
|
||||
/* End the dragging */
|
||||
d->head = NULL;
|
||||
d->wagon = NULL;
|
||||
d->head = nullptr;
|
||||
d->wagon = nullptr;
|
||||
return MODE_DRAG_VEHICLE;
|
||||
} else {
|
||||
return MODE_ERROR; // empty block, so no vehicle is selected
|
||||
@@ -492,7 +492,7 @@ struct DepotWindow : Window {
|
||||
wagon = true;
|
||||
}
|
||||
|
||||
const Train *v = NULL;
|
||||
const Train *v = nullptr;
|
||||
if (this->type == VEH_TRAIN) {
|
||||
v = Train::From(*veh);
|
||||
d->head = d->wagon = v;
|
||||
@@ -527,12 +527,12 @@ struct DepotWindow : Window {
|
||||
x -= this->header_width;
|
||||
|
||||
/* find the vehicle in this row that was clicked */
|
||||
for (; v != NULL; v = v->Next()) {
|
||||
for (; v != nullptr; v = v->Next()) {
|
||||
x -= v->GetDisplayImageWidth();
|
||||
if (x < 0) break;
|
||||
}
|
||||
|
||||
d->wagon = (v != NULL ? v->GetFirstEnginePart() : NULL);
|
||||
d->wagon = (v != nullptr ? v->GetFirstEnginePart() : nullptr);
|
||||
|
||||
return MODE_DRAG_VEHICLE;
|
||||
}
|
||||
@@ -544,8 +544,8 @@ struct DepotWindow : Window {
|
||||
*/
|
||||
void DepotClick(int x, int y)
|
||||
{
|
||||
GetDepotVehiclePtData gdvp = { NULL, NULL };
|
||||
const Vehicle *v = NULL;
|
||||
GetDepotVehiclePtData gdvp = { nullptr, nullptr };
|
||||
const Vehicle *v = nullptr;
|
||||
DepotGUIAction mode = this->GetVehicleFromDepotWndPt(x, y, &v, &gdvp);
|
||||
|
||||
if (this->type == VEH_TRAIN) v = gdvp.wagon;
|
||||
@@ -555,14 +555,14 @@ struct DepotWindow : Window {
|
||||
return;
|
||||
|
||||
case MODE_DRAG_VEHICLE: { // start dragging of vehicle
|
||||
if (v != NULL && VehicleClicked(v)) return;
|
||||
if (v != nullptr && VehicleClicked(v)) return;
|
||||
|
||||
VehicleID sel = this->sel;
|
||||
|
||||
if (this->type == VEH_TRAIN && sel != INVALID_VEHICLE) {
|
||||
this->sel = INVALID_VEHICLE;
|
||||
TrainDepotMoveVehicle(v, sel, gdvp.head);
|
||||
} else if (v != NULL) {
|
||||
} else if (v != nullptr) {
|
||||
SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this);
|
||||
SetMouseCursorVehicle(v, EIT_IN_DEPOT);
|
||||
_cursor.vehchain = _ctrl_pressed;
|
||||
@@ -730,7 +730,7 @@ struct DepotWindow : Window {
|
||||
uint max_width = ScaleGUITrad(VEHICLEINFO_FULL_VEHICLE_WIDTH);
|
||||
for (uint num = 0; num < this->vehicle_list.size(); num++) {
|
||||
uint width = 0;
|
||||
for (const Train *v = Train::From(this->vehicle_list[num]); v != NULL; v = v->Next()) {
|
||||
for (const Train *v = Train::From(this->vehicle_list[num]); v != nullptr; v = v->Next()) {
|
||||
width += v->GetDisplayImageWidth();
|
||||
}
|
||||
max_width = max(max_width, width);
|
||||
@@ -841,24 +841,24 @@ struct DepotWindow : Window {
|
||||
|
||||
void OnQueryTextFinished(char *str) override
|
||||
{
|
||||
if (str == NULL) return;
|
||||
if (str == nullptr) return;
|
||||
|
||||
/* Do depot renaming */
|
||||
DoCommandP(0, GetDepotIndex(this->window_number), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), NULL, str);
|
||||
DoCommandP(0, GetDepotIndex(this->window_number), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), nullptr, str);
|
||||
}
|
||||
|
||||
bool OnRightClick(Point pt, int widget) override
|
||||
{
|
||||
if (widget != WID_D_MATRIX) return false;
|
||||
|
||||
GetDepotVehiclePtData gdvp = { NULL, NULL };
|
||||
const Vehicle *v = NULL;
|
||||
GetDepotVehiclePtData gdvp = { nullptr, nullptr };
|
||||
const Vehicle *v = nullptr;
|
||||
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_D_MATRIX);
|
||||
DepotGUIAction mode = this->GetVehicleFromDepotWndPt(pt.x - nwi->pos_x, pt.y - nwi->pos_y, &v, &gdvp);
|
||||
|
||||
if (this->type == VEH_TRAIN) v = gdvp.wagon;
|
||||
|
||||
if (v == NULL || mode != MODE_DRAG_VEHICLE) return false;
|
||||
if (v == nullptr || mode != MODE_DRAG_VEHICLE) return false;
|
||||
|
||||
CargoArray capacity, loaded;
|
||||
|
||||
@@ -867,7 +867,7 @@ struct DepotWindow : Window {
|
||||
|
||||
/* loop through vehicle chain and collect cargoes */
|
||||
uint num = 0;
|
||||
for (const Vehicle *w = v; w != NULL; w = w->Next()) {
|
||||
for (const Vehicle *w = v; w != nullptr; w = w->Next()) {
|
||||
if (w->cargo_cap > 0 && w->cargo_type < NUM_CARGO) {
|
||||
capacity[w->cargo_type] += w->cargo_cap;
|
||||
loaded [w->cargo_type] += w->cargo.StoredCount();
|
||||
@@ -913,7 +913,7 @@ struct DepotWindow : Window {
|
||||
if (_ctrl_pressed) {
|
||||
/* Share-clone, do not open new viewport, and keep tool active */
|
||||
DoCommandP(this->window_number, v->index, 1, CMD_CLONE_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_BUY_TRAIN + v->type),
|
||||
_settings_client.gui.open_vehicle_gui_clone_share ? CcCloneVehicle : NULL);
|
||||
_settings_client.gui.open_vehicle_gui_clone_share ? CcCloneVehicle : nullptr);
|
||||
} else {
|
||||
/* Copy-clone, open viewport for new vehicle, and deselect the tool (assume player wants to changs things on new vehicle) */
|
||||
if (DoCommandP(this->window_number, v->index, 0, CMD_CLONE_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_BUY_TRAIN + v->type), CcCloneVehicle)) {
|
||||
@@ -968,20 +968,20 @@ struct DepotWindow : Window {
|
||||
}
|
||||
|
||||
NWidgetBase *matrix = this->GetWidget<NWidgetBase>(widget);
|
||||
const Vehicle *v = NULL;
|
||||
GetDepotVehiclePtData gdvp = {NULL, NULL};
|
||||
const Vehicle *v = nullptr;
|
||||
GetDepotVehiclePtData gdvp = {nullptr, nullptr};
|
||||
|
||||
if (this->GetVehicleFromDepotWndPt(pt.x - matrix->pos_x, pt.y - matrix->pos_y, &v, &gdvp) != MODE_DRAG_VEHICLE) return;
|
||||
|
||||
VehicleID new_vehicle_over = INVALID_VEHICLE;
|
||||
if (gdvp.head != NULL) {
|
||||
if (gdvp.wagon == NULL && gdvp.head->Last()->index != this->sel) { // ..at the end of the train.
|
||||
if (gdvp.head != nullptr) {
|
||||
if (gdvp.wagon == nullptr && gdvp.head->Last()->index != this->sel) { // ..at the end of the train.
|
||||
/* NOTE: As a wagon can't be moved at the begin of a train, head index isn't used to mark a drag-and-drop
|
||||
* destination inside a train. This head index is then used to indicate that a wagon is inserted at
|
||||
* the end of the train.
|
||||
*/
|
||||
new_vehicle_over = gdvp.head->index;
|
||||
} else if (gdvp.wagon != NULL && gdvp.head != gdvp.wagon &&
|
||||
} else if (gdvp.wagon != nullptr && gdvp.head != gdvp.wagon &&
|
||||
gdvp.wagon->index != this->sel &&
|
||||
gdvp.wagon->Previous()->index != this->sel) { // ..over an existing wagon.
|
||||
new_vehicle_over = gdvp.wagon->index;
|
||||
@@ -998,7 +998,7 @@ struct DepotWindow : Window {
|
||||
{
|
||||
switch (widget) {
|
||||
case WID_D_MATRIX: {
|
||||
const Vehicle *v = NULL;
|
||||
const Vehicle *v = nullptr;
|
||||
VehicleID sel = this->sel;
|
||||
|
||||
this->sel = INVALID_VEHICLE;
|
||||
@@ -1006,20 +1006,20 @@ struct DepotWindow : Window {
|
||||
|
||||
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_D_MATRIX);
|
||||
if (this->type == VEH_TRAIN) {
|
||||
GetDepotVehiclePtData gdvp = { NULL, NULL };
|
||||
GetDepotVehiclePtData gdvp = { nullptr, nullptr };
|
||||
|
||||
if (this->GetVehicleFromDepotWndPt(pt.x - nwi->pos_x, pt.y - nwi->pos_y, &v, &gdvp) == MODE_DRAG_VEHICLE && sel != INVALID_VEHICLE) {
|
||||
if (gdvp.wagon != NULL && gdvp.wagon->index == sel && _ctrl_pressed) {
|
||||
if (gdvp.wagon != nullptr && gdvp.wagon->index == sel && _ctrl_pressed) {
|
||||
DoCommandP(Vehicle::Get(sel)->tile, Vehicle::Get(sel)->index, true,
|
||||
CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE));
|
||||
} else if (gdvp.wagon == NULL || gdvp.wagon->index != sel) {
|
||||
} else if (gdvp.wagon == nullptr || gdvp.wagon->index != sel) {
|
||||
this->vehicle_over = INVALID_VEHICLE;
|
||||
TrainDepotMoveVehicle(gdvp.wagon, sel, gdvp.head);
|
||||
} else if (gdvp.head != NULL && gdvp.head->IsFrontEngine()) {
|
||||
} else if (gdvp.head != nullptr && gdvp.head->IsFrontEngine()) {
|
||||
ShowVehicleViewWindow(gdvp.head);
|
||||
}
|
||||
}
|
||||
} else if (this->GetVehicleFromDepotWndPt(pt.x - nwi->pos_x, pt.y - nwi->pos_y, &v, NULL) == MODE_DRAG_VEHICLE && v != NULL && sel == v->index) {
|
||||
} else if (this->GetVehicleFromDepotWndPt(pt.x - nwi->pos_x, pt.y - nwi->pos_y, &v, nullptr) == MODE_DRAG_VEHICLE && v != nullptr && sel == v->index) {
|
||||
ShowVehicleViewWindow(v);
|
||||
}
|
||||
break;
|
||||
@@ -1055,7 +1055,7 @@ struct DepotWindow : Window {
|
||||
this->RaiseWidget(WID_D_SELL);
|
||||
this->SetWidgetDirty(WID_D_SELL);
|
||||
}
|
||||
if (this->nested_array[WID_D_SELL] != NULL && !this->IsWidgetDisabled(WID_D_SELL_CHAIN)) {
|
||||
if (this->nested_array[WID_D_SELL] != nullptr && !this->IsWidgetDisabled(WID_D_SELL_CHAIN)) {
|
||||
this->RaiseWidget(WID_D_SELL_CHAIN);
|
||||
this->SetWidgetDirty(WID_D_SELL_CHAIN);
|
||||
}
|
||||
@@ -1101,7 +1101,7 @@ static void DepotSellAllConfirmationCallback(Window *win, bool confirmed)
|
||||
*/
|
||||
void ShowDepotWindow(TileIndex tile, VehicleType type)
|
||||
{
|
||||
if (BringWindowToFrontById(WC_VEHICLE_DEPOT, tile) != NULL) return;
|
||||
if (BringWindowToFrontById(WC_VEHICLE_DEPOT, tile) != nullptr) return;
|
||||
|
||||
WindowDesc *desc;
|
||||
switch (type) {
|
||||
@@ -1129,7 +1129,7 @@ void DeleteDepotHighlightOfVehicle(const Vehicle *v)
|
||||
if (_special_mouse_mode != WSM_DRAGDROP) return;
|
||||
|
||||
w = dynamic_cast<DepotWindow*>(FindWindowById(WC_VEHICLE_DEPOT, v->tile));
|
||||
if (w != NULL) {
|
||||
if (w != nullptr) {
|
||||
if (w->sel == v->index) ResetObjectToPlace();
|
||||
}
|
||||
}
|
||||
|
@@ -138,11 +138,11 @@ DisasterVehicle::DisasterVehicle(int x, int y, Direction direction, DisasterSubT
|
||||
case ST_HELICOPTER:
|
||||
case ST_BIG_UFO:
|
||||
case ST_BIG_UFO_DESTROYER:
|
||||
GetAircraftFlightLevelBounds(this, &this->z_pos, NULL);
|
||||
GetAircraftFlightLevelBounds(this, &this->z_pos, nullptr);
|
||||
break;
|
||||
|
||||
case ST_HELICOPTER_ROTORS:
|
||||
GetAircraftFlightLevelBounds(this, &this->z_pos, NULL);
|
||||
GetAircraftFlightLevelBounds(this, &this->z_pos, nullptr);
|
||||
this->z_pos += ROTOR_Z_OFFSET;
|
||||
break;
|
||||
|
||||
@@ -192,7 +192,7 @@ void DisasterVehicle::UpdatePosition(int x, int y, int z)
|
||||
this->UpdatePositionAndViewport();
|
||||
|
||||
DisasterVehicle *u = this->Next();
|
||||
if (u != NULL) {
|
||||
if (u != nullptr) {
|
||||
int safe_x = Clamp(x, 0, MapMaxX() * TILE_SIZE);
|
||||
int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE);
|
||||
|
||||
@@ -206,7 +206,7 @@ void DisasterVehicle::UpdatePosition(int x, int y, int z)
|
||||
u->UpdateImage();
|
||||
u->UpdatePositionAndViewport();
|
||||
|
||||
if ((u = u->Next()) != NULL) {
|
||||
if ((u = u->Next()) != nullptr) {
|
||||
u->x_pos = x;
|
||||
u->y_pos = y;
|
||||
u->z_pos = z + ROTOR_Z_OFFSET;
|
||||
@@ -360,7 +360,7 @@ static bool DisasterTick_Ufo(DisasterVehicle *v)
|
||||
} else {
|
||||
/* Target a vehicle */
|
||||
RoadVehicle *u = RoadVehicle::Get(v->dest_tile);
|
||||
assert(u != NULL && u->type == VEH_ROAD && u->IsFrontEngine());
|
||||
assert(u != nullptr && u->type == VEH_ROAD && u->IsFrontEngine());
|
||||
|
||||
uint dist = Delta(v->x_pos, u->x_pos) + Delta(v->y_pos, u->y_pos);
|
||||
|
||||
@@ -758,16 +758,16 @@ static void Disaster_Airplane_Init()
|
||||
{
|
||||
if (!Vehicle::CanAllocateItem(2)) return;
|
||||
|
||||
Industry *i, *found = NULL;
|
||||
Industry *i, *found = nullptr;
|
||||
|
||||
FOR_ALL_INDUSTRIES(i) {
|
||||
if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_AIRPLANE_ATTACKS) &&
|
||||
(found == NULL || Chance16(1, 2))) {
|
||||
(found == nullptr || Chance16(1, 2))) {
|
||||
found = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (found == NULL) return;
|
||||
if (found == nullptr) return;
|
||||
|
||||
/* Start from the bottom (south side) of the map */
|
||||
int x = (MapSizeX() + 9) * TILE_SIZE - 1;
|
||||
@@ -786,16 +786,16 @@ static void Disaster_Helicopter_Init()
|
||||
{
|
||||
if (!Vehicle::CanAllocateItem(3)) return;
|
||||
|
||||
Industry *i, *found = NULL;
|
||||
Industry *i, *found = nullptr;
|
||||
|
||||
FOR_ALL_INDUSTRIES(i) {
|
||||
if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_CHOPPER_ATTACKS) &&
|
||||
(found == NULL || Chance16(1, 2))) {
|
||||
(found == nullptr || Chance16(1, 2))) {
|
||||
found = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (found == NULL) return;
|
||||
if (found == nullptr) return;
|
||||
|
||||
int x = -16 * (int)TILE_SIZE;
|
||||
int y = TileY(found->location.tile) * TILE_SIZE + 37;
|
||||
@@ -984,7 +984,7 @@ void ReleaseDisastersTargetingVehicle(VehicleID vehicle)
|
||||
/* Revert to target-searching */
|
||||
v->current_order.SetDestination(0);
|
||||
v->dest_tile = RandomTile();
|
||||
GetAircraftFlightLevelBounds(v, &v->z_pos, NULL);
|
||||
GetAircraftFlightLevelBounds(v, &v->z_pos, nullptr);
|
||||
v->age = 0;
|
||||
}
|
||||
}
|
||||
|
@@ -30,7 +30,7 @@ INSTANTIATE_POOL_METHODS(Dock)
|
||||
|
||||
for (Dock *d = st->GetPrimaryDock();; d = d->next) {
|
||||
if (d->sloped == tile || d->flat == tile) return d;
|
||||
assert(d->next != NULL);
|
||||
assert(d->next != nullptr);
|
||||
}
|
||||
|
||||
NOT_REACHED();
|
||||
|
@@ -26,7 +26,7 @@ struct Dock : DockPool::PoolItem<&_dock_pool> {
|
||||
TileIndex flat; ///< Position on the map of the flat tile.
|
||||
Dock *next; ///< Next dock of the given type at this station.
|
||||
|
||||
Dock(TileIndex s = INVALID_TILE, TileIndex f = INVALID_TILE) : sloped(s), flat(f), next(NULL) { }
|
||||
Dock(TileIndex s = INVALID_TILE, TileIndex f = INVALID_TILE) : sloped(s), flat(f), next(nullptr) { }
|
||||
|
||||
~Dock() {}
|
||||
|
||||
|
@@ -60,7 +60,7 @@ void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p
|
||||
* @param[out] tile_to The tile till where to show a selection for the aqueduct.
|
||||
* @return The other end of the aqueduct, or otherwise a tile in line with the aqueduct to cause the right error message.
|
||||
*/
|
||||
static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = NULL)
|
||||
static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = nullptr)
|
||||
{
|
||||
int z;
|
||||
DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile_from, &z));
|
||||
@@ -83,7 +83,7 @@ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = N
|
||||
if (length > max_length) break;
|
||||
|
||||
if (GetTileMaxZ(endtile) > z) {
|
||||
if (tile_to != NULL) *tile_to = endtile;
|
||||
if (tile_to != nullptr) *tile_to = endtile;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -288,7 +288,7 @@ static EventState DockToolbarGlobalHotkeys(int hotkey)
|
||||
{
|
||||
if (_game_mode != GM_NORMAL) return ES_NOT_HANDLED;
|
||||
Window *w = ShowBuildDocksToolbar();
|
||||
if (w == NULL) return ES_NOT_HANDLED;
|
||||
if (w == nullptr) return ES_NOT_HANDLED;
|
||||
return w->OnHotkey(hotkey);
|
||||
}
|
||||
|
||||
@@ -343,11 +343,11 @@ static WindowDesc _build_docks_toolbar_desc(
|
||||
*
|
||||
* If the terraform toolbar is linked to the toolbar, that window is also opened.
|
||||
*
|
||||
* @return newly opened water toolbar, or NULL if the toolbar could not be opened.
|
||||
* @return newly opened water toolbar, or nullptr if the toolbar could not be opened.
|
||||
*/
|
||||
Window *ShowBuildDocksToolbar()
|
||||
{
|
||||
if (!Company::IsValidID(_local_company)) return NULL;
|
||||
if (!Company::IsValidID(_local_company)) return nullptr;
|
||||
|
||||
DeleteWindowByClass(WC_BUILD_TOOLBAR);
|
||||
return AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_toolbar_desc, TRANSPORT_WATER);
|
||||
@@ -384,7 +384,7 @@ static WindowDesc _build_docks_scen_toolbar_desc(
|
||||
/**
|
||||
* Open the build water toolbar window for the scenario editor.
|
||||
*
|
||||
* @return newly opened water toolbar, or NULL if the toolbar could not be opened.
|
||||
* @return newly opened water toolbar, or nullptr if the toolbar could not be opened.
|
||||
*/
|
||||
Window *ShowBuildDocksScenToolbar()
|
||||
{
|
||||
@@ -478,7 +478,7 @@ static const NWidgetPart _nested_build_dock_station_widgets[] = {
|
||||
};
|
||||
|
||||
static WindowDesc _build_dock_station_desc(
|
||||
WDP_AUTO, NULL, 0, 0,
|
||||
WDP_AUTO, nullptr, 0, 0,
|
||||
WC_BUILD_STATION, WC_BUILD_TOOLBAR,
|
||||
WDF_CONSTRUCTION,
|
||||
_nested_build_dock_station_widgets, lengthof(_nested_build_dock_station_widgets)
|
||||
@@ -571,7 +571,7 @@ static const NWidgetPart _nested_build_docks_depot_widgets[] = {
|
||||
};
|
||||
|
||||
static WindowDesc _build_docks_depot_desc(
|
||||
WDP_AUTO, NULL, 0, 0,
|
||||
WDP_AUTO, nullptr, 0, 0,
|
||||
WC_BUILD_DEPOT, WC_BUILD_TOOLBAR,
|
||||
WDF_CONSTRUCTION,
|
||||
_nested_build_docks_depot_widgets, lengthof(_nested_build_docks_depot_widgets)
|
||||
|
@@ -41,10 +41,10 @@ const char *GetDriverParam(const char * const *parm, const char *name)
|
||||
{
|
||||
size_t len;
|
||||
|
||||
if (parm == NULL) return NULL;
|
||||
if (parm == nullptr) return nullptr;
|
||||
|
||||
len = strlen(name);
|
||||
for (; *parm != NULL; parm++) {
|
||||
for (; *parm != nullptr; parm++) {
|
||||
const char *p = *parm;
|
||||
|
||||
if (strncmp(p, name, len) == 0) {
|
||||
@@ -52,7 +52,7 @@ const char *GetDriverParam(const char * const *parm, const char *name)
|
||||
if (p[len] == '\0') return p + len;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -63,7 +63,7 @@ const char *GetDriverParam(const char * const *parm, const char *name)
|
||||
*/
|
||||
bool GetDriverParamBool(const char * const *parm, const char *name)
|
||||
{
|
||||
return GetDriverParam(parm, name) != NULL;
|
||||
return GetDriverParam(parm, name) != nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -76,7 +76,7 @@ bool GetDriverParamBool(const char * const *parm, const char *name)
|
||||
int GetDriverParamInt(const char * const *parm, const char *name, int def)
|
||||
{
|
||||
const char *p = GetDriverParam(parm, name);
|
||||
return p != NULL ? atoi(p) : def;
|
||||
return p != nullptr ? atoi(p) : def;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,8 +120,8 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type)
|
||||
Driver *newd = d->CreateInstance();
|
||||
*GetActiveDriver(type) = newd;
|
||||
|
||||
const char *err = newd->Start(NULL);
|
||||
if (err == NULL) {
|
||||
const char *err = newd->Start(nullptr);
|
||||
if (err == nullptr) {
|
||||
DEBUG(driver, 1, "Successfully probed %s driver '%s'", GetDriverTypeName(type), d->name);
|
||||
delete oldd;
|
||||
return true;
|
||||
@@ -141,8 +141,8 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type)
|
||||
/* Extract the driver name and put parameter list in parm */
|
||||
strecpy(buffer, name, lastof(buffer));
|
||||
parm = strchr(buffer, ':');
|
||||
parms[0] = NULL;
|
||||
if (parm != NULL) {
|
||||
parms[0] = nullptr;
|
||||
if (parm != nullptr) {
|
||||
uint np = 0;
|
||||
/* Tokenize the parm. */
|
||||
do {
|
||||
@@ -150,7 +150,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type)
|
||||
if (np < lengthof(parms) - 1) parms[np++] = parm;
|
||||
while (*parm != '\0' && *parm != ',') parm++;
|
||||
} while (*parm == ',');
|
||||
parms[np] = NULL;
|
||||
parms[np] = nullptr;
|
||||
}
|
||||
|
||||
/* Find this driver */
|
||||
@@ -168,7 +168,7 @@ bool DriverFactoryBase::SelectDriverImpl(const char *name, Driver::Type type)
|
||||
Driver *newd = d->CreateInstance();
|
||||
|
||||
const char *err = newd->Start(parms);
|
||||
if (err != NULL) {
|
||||
if (err != nullptr) {
|
||||
delete newd;
|
||||
usererror("Unable to load driver '%s'. The error was: %s", d->name, err);
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@ public:
|
||||
/**
|
||||
* Start this driver.
|
||||
* @param parm Parameters passed to the driver.
|
||||
* @return NULL if everything went okay, otherwise an error message.
|
||||
* @return nullptr if everything went okay, otherwise an error message.
|
||||
*/
|
||||
virtual const char *Start(const char * const *parm) = 0;
|
||||
|
||||
@@ -86,7 +86,7 @@ private:
|
||||
*/
|
||||
static Driver **GetActiveDriver(Driver::Type type)
|
||||
{
|
||||
static Driver *s_driver[3] = { NULL, NULL, NULL };
|
||||
static Driver *s_driver[3] = { nullptr, nullptr, nullptr };
|
||||
return &s_driver[type];
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ public:
|
||||
{
|
||||
for (Driver::Type dt = Driver::DT_BEGIN; dt < Driver::DT_END; dt++) {
|
||||
Driver *driver = *GetActiveDriver(dt);
|
||||
if (driver != NULL) driver->Stop();
|
||||
if (driver != nullptr) driver->Stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -405,7 +405,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||
FOR_ALL_VEHICLES(v) {
|
||||
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
|
||||
if (new_owner == INVALID_OWNER) {
|
||||
if (v->Previous() == NULL) {
|
||||
if (v->Previous() == nullptr) {
|
||||
if (_settings_game.economy.infrastructure_sharing[VEH_TRAIN] && v->type == VEH_TRAIN && Train::From(v)->IsFrontEngine() && !Train::From(v)->IsVirtual()) {
|
||||
DeleteVisibleTrain(Train::From(v));
|
||||
} else {
|
||||
@@ -487,7 +487,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||
}
|
||||
|
||||
/* Invalidate the vehicle's cargo payment "owner cache". */
|
||||
if (v->cargo_payment != NULL) v->cargo_payment->owner = NULL;
|
||||
if (v->cargo_payment != nullptr) v->cargo_payment->owner = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -991,7 +991,7 @@ Money GetPrice(Price index, uint cost_factor, const GRFFile *grf_file, int shift
|
||||
if (index >= PR_END) return 0;
|
||||
|
||||
Money cost = _price[index] * cost_factor;
|
||||
if (grf_file != NULL) shift += grf_file->price_base_multipliers[index];
|
||||
if (grf_file != nullptr) shift += grf_file->price_base_multipliers[index];
|
||||
|
||||
if (shift >= 0) {
|
||||
cost <<= shift;
|
||||
@@ -1212,7 +1212,7 @@ CargoPayment::~CargoPayment()
|
||||
{
|
||||
if (this->CleaningPool()) return;
|
||||
|
||||
this->front->cargo_payment = NULL;
|
||||
this->front->cargo_payment = nullptr;
|
||||
|
||||
if (this->visual_profit == 0 && this->visual_transfer == 0) return;
|
||||
|
||||
@@ -1243,7 +1243,7 @@ CargoPayment::~CargoPayment()
|
||||
*/
|
||||
void CargoPayment::PayFinalDelivery(CargoPacket *cp, uint count)
|
||||
{
|
||||
if (this->owner == NULL) {
|
||||
if (this->owner == nullptr) {
|
||||
this->owner = Company::Get(this->front->owner);
|
||||
}
|
||||
|
||||
@@ -1289,7 +1289,7 @@ Money CargoPayment::PayTransfer(CargoPacket *cp, uint count)
|
||||
/**
|
||||
* Returns the load type of a vehicle.
|
||||
* In case of cargo type order, the load type returned depends on the cargo carriable by the vehicle.
|
||||
* @pre v != NULL
|
||||
* @pre v != nullptr
|
||||
* @param v A pointer to a vehicle.
|
||||
* @return the load type of this vehicle.
|
||||
*/
|
||||
@@ -1301,7 +1301,7 @@ static OrderLoadFlags GetLoadType(const Vehicle *v)
|
||||
/**
|
||||
* Returns the unload type of a vehicle.
|
||||
* In case of cargo type order, the unload type returned depends on the cargo carriable by the vehicle.
|
||||
* @pre v != NULL
|
||||
* @pre v != nullptr
|
||||
* @param v A pointer to a vehicle.
|
||||
* @return The unload type of this vehicle.
|
||||
*/
|
||||
@@ -1325,7 +1325,7 @@ void PrepareUnload(Vehicle *front_v)
|
||||
/* Start unloading at the first possible moment */
|
||||
front_v->load_unload_ticks = 1;
|
||||
|
||||
assert(front_v->cargo_payment == NULL);
|
||||
assert(front_v->cargo_payment == nullptr);
|
||||
/* One CargoPayment per vehicle and the vehicle limit equals the
|
||||
* limit in number of CargoPayments. Can't go wrong. */
|
||||
assert_compile(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE);
|
||||
@@ -1333,9 +1333,9 @@ void PrepareUnload(Vehicle *front_v)
|
||||
front_v->cargo_payment = new CargoPayment(front_v);
|
||||
|
||||
CargoStationIDStackSet next_station = front_v->GetNextStoppingStation();
|
||||
if (front_v->orders.list == NULL || (front_v->current_order.GetUnloadType() & OUFB_NO_UNLOAD) == 0) {
|
||||
if (front_v->orders.list == nullptr || (front_v->current_order.GetUnloadType() & OUFB_NO_UNLOAD) == 0) {
|
||||
Station *st = Station::Get(front_v->last_station_visited);
|
||||
for (Vehicle *v = front_v; v != NULL; v = v->Next()) {
|
||||
for (Vehicle *v = front_v; v != nullptr; v = v->Next()) {
|
||||
if (GetUnloadType(v) & OUFB_NO_UNLOAD) continue;
|
||||
const GoodsEntry *ge = &st->goods[v->cargo_type];
|
||||
if (v->cargo_cap > 0 && v->cargo.TotalCount() > 0) {
|
||||
@@ -1367,7 +1367,7 @@ static uint GetLoadAmount(Vehicle *v)
|
||||
|
||||
if (_settings_game.order.gradual_loading) {
|
||||
uint16 cb_load_amount = CALLBACK_FAILED;
|
||||
if (e->GetGRF() != NULL && e->GetGRF()->grf_version >= 8) {
|
||||
if (e->GetGRF() != nullptr && e->GetGRF()->grf_version >= 8) {
|
||||
/* Use callback 36 */
|
||||
cb_load_amount = GetVehicleProperty(v, PROP_VEHICLE_LOAD_AMOUNT, CALLBACK_FAILED);
|
||||
} else if (HasBit(e->info.callback_mask, CBM_VEHICLE_LOAD_AMOUNT)) {
|
||||
@@ -1404,8 +1404,8 @@ static uint GetLoadAmount(Vehicle *v)
|
||||
template<class Taction>
|
||||
bool IterateVehicleParts(Vehicle *v, Taction action, bool ignore_multihead_rear = false)
|
||||
{
|
||||
for (Vehicle *w = v; w != NULL;
|
||||
w = w->HasArticulatedPart() ? w->GetNextArticulatedPart() : NULL) {
|
||||
for (Vehicle *w = v; w != nullptr;
|
||||
w = w->HasArticulatedPart() ? w->GetNextArticulatedPart() : nullptr) {
|
||||
if (!action(w)) return false;
|
||||
if (!ignore_multihead_rear && w->type == VEH_TRAIN) {
|
||||
Train *train = Train::From(w);
|
||||
@@ -1536,7 +1536,7 @@ struct FinalizeRefitAction
|
||||
*/
|
||||
bool operator()(Vehicle *v)
|
||||
{
|
||||
if (this->do_reserve || (cargo_type_loading == NULL || (cargo_type_loading->current_order.GetCargoLoadTypeRaw(v->cargo_type) & OLFB_FULL_LOAD))) {
|
||||
if (this->do_reserve || (cargo_type_loading == nullptr || (cargo_type_loading->current_order.GetCargoLoadTypeRaw(v->cargo_type) & OLFB_FULL_LOAD))) {
|
||||
this->st->goods[v->cargo_type].cargo.Reserve(v->cargo_cap - v->cargo.RemainingCount(),
|
||||
&v->cargo, st->xy, this->next_station.Get(v->cargo_type));
|
||||
}
|
||||
@@ -1607,7 +1607,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
|
||||
/* Add new capacity to consist capacity and reserve cargo */
|
||||
IterateVehicleParts(v_start, FinalizeRefitAction(consist_capleft, st, next_station,
|
||||
is_auto_refit || (v->First()->current_order.GetLoadType() & OLFB_FULL_LOAD) != 0,
|
||||
(v->First()->current_order.GetLoadType() == OLFB_CARGO_TYPE_LOAD) ? v->First() : NULL));
|
||||
(v->First()->current_order.GetLoadType() == OLFB_CARGO_TYPE_LOAD) ? v->First() : nullptr));
|
||||
|
||||
cur_company.Restore();
|
||||
}
|
||||
@@ -1637,7 +1637,7 @@ struct ReserveCargoAction {
|
||||
/* Don't try to reserve cargo if the vehicle has already advanced beyond the station platform */
|
||||
if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_BEYOND_PLATFORM_END)) return true;
|
||||
|
||||
if (cargo_type_loading != NULL) {
|
||||
if (cargo_type_loading != nullptr) {
|
||||
OrderLoadFlags flags = cargo_type_loading->current_order.GetCargoLoadTypeRaw(v->cargo_type);
|
||||
if (flags & OLFB_NO_LOAD) return true;
|
||||
if (!(flags & OLFB_FULL_LOAD) && !through_load) return true;
|
||||
@@ -1668,8 +1668,8 @@ static void ReserveConsist(Station *st, Vehicle *u, CargoArray *consist_capleft,
|
||||
/* If there is a cargo payment not all vehicles of the consist have tried to do the refit.
|
||||
* In that case, only reserve if it's a fixed refit and the equivalent of "articulated chain"
|
||||
* a vehicle belongs to already has the right cargo. */
|
||||
bool must_reserve = !u->current_order.IsRefit() || u->cargo_payment == NULL;
|
||||
for (Vehicle *v = u; v != NULL; v = v->Next()) {
|
||||
bool must_reserve = !u->current_order.IsRefit() || u->cargo_payment == nullptr;
|
||||
for (Vehicle *v = u; v != nullptr; v = v->Next()) {
|
||||
assert(v->cargo_cap >= v->cargo.RemainingCount());
|
||||
|
||||
/* Exclude various ways in which the vehicle might not be the head of an equivalent of
|
||||
@@ -1679,11 +1679,11 @@ static void ReserveConsist(Station *st, Vehicle *u, CargoArray *consist_capleft,
|
||||
(v->type != VEH_TRAIN || !Train::From(v)->IsRearDualheaded()) &&
|
||||
(v->type != VEH_AIRCRAFT || Aircraft::From(v)->IsNormalAircraft()) &&
|
||||
(must_reserve || u->current_order.GetRefitCargo() == v->cargo_type)) {
|
||||
IterateVehicleParts(v, ReserveCargoAction(st, next_station, cargo_type_loading ? u : NULL, through_load), through_load);
|
||||
IterateVehicleParts(v, ReserveCargoAction(st, next_station, cargo_type_loading ? u : nullptr, through_load), through_load);
|
||||
} else if (through_load && v->type == VEH_TRAIN && Train::From(v)->IsRearDualheaded()) {
|
||||
ReserveCargoAction(st, next_station, cargo_type_loading ? u : NULL, through_load)(v);
|
||||
ReserveCargoAction(st, next_station, cargo_type_loading ? u : nullptr, through_load)(v);
|
||||
}
|
||||
if (consist_capleft == NULL || v->cargo_cap == 0) continue;
|
||||
if (consist_capleft == nullptr || v->cargo_cap == 0) continue;
|
||||
if (cargo_type_loading) {
|
||||
OrderLoadFlags flags = u->current_order.GetCargoLoadTypeRaw(v->cargo_type);
|
||||
if (flags & OLFB_NO_LOAD) continue;
|
||||
@@ -1740,7 +1740,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
if (order->IsType(OT_GOTO_STATION) && order->GetDestination() == last_visited &&
|
||||
order->GetStopLocation() == OSL_PLATFORM_THROUGH) {
|
||||
pull_through_mode = true;
|
||||
for (Vehicle *v = front; v != NULL; v = v->Next()) {
|
||||
for (Vehicle *v = front; v != nullptr; v = v->Next()) {
|
||||
/* Passengers may not be through-loaded */
|
||||
if (v->cargo_cap > 0 && IsCargoInClass(v->cargo_type, CC_PASSENGERS)) {
|
||||
pull_through_mode = false;
|
||||
@@ -1768,7 +1768,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
bool should_reserve_consist = false;
|
||||
bool reserve_consist_cargo_type_loading = false;
|
||||
if (_settings_game.order.improved_load && use_autorefit) {
|
||||
if (front->cargo_payment == NULL) should_reserve_consist = true;
|
||||
if (front->cargo_payment == nullptr) should_reserve_consist = true;
|
||||
} else {
|
||||
if ((front->current_order.GetLoadType() & OLFB_FULL_LOAD) || (front->current_order.GetLoadType() == OLFB_CARGO_TYPE_LOAD) || pull_through_mode) {
|
||||
should_reserve_consist = true;
|
||||
@@ -1777,7 +1777,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
}
|
||||
if (should_reserve_consist) {
|
||||
ReserveConsist(st, front,
|
||||
(use_autorefit && front->load_unload_ticks != 0) ? &consist_capleft : NULL,
|
||||
(use_autorefit && front->load_unload_ticks != 0) ? &consist_capleft : nullptr,
|
||||
next_station,
|
||||
reserve_consist_cargo_type_loading,
|
||||
pull_through_mode);
|
||||
@@ -1813,7 +1813,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
CargoPayment *payment = front->cargo_payment;
|
||||
|
||||
uint artic_part = 0; // Articulated part we are currently trying to load. (not counting parts without capacity)
|
||||
for (Vehicle *v = front; v != NULL; v = v->Next()) {
|
||||
for (Vehicle *v = front; v != nullptr; v = v->Next()) {
|
||||
if (pull_through_mode && HasBit(Train::From(v)->flags, VRF_BEYOND_PLATFORM_END)) continue;
|
||||
if (pull_through_mode && !v->IsArticulatedPart()) {
|
||||
int length = Train::From(v)->gcache.cached_veh_length;
|
||||
@@ -1823,7 +1823,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
length += Train::From(u)->gcache.cached_veh_length;
|
||||
}
|
||||
if (v != station_vehicle && !HasBit(Train::From(v->Previous())->flags, VRF_BEYOND_PLATFORM_END) && length > platform_length_left) {
|
||||
for (Vehicle *skip = v; skip != NULL; skip = skip->Next()) {
|
||||
for (Vehicle *skip = v; skip != nullptr; skip = skip->Next()) {
|
||||
SetBit(Train::From(skip)->flags, VRF_NOT_YET_IN_PLATFORM);
|
||||
if (HasBit(skip->vehicle_flags, VF_CARGO_UNLOADING)) {
|
||||
unload_payment_not_yet_in_station = true;
|
||||
@@ -1854,7 +1854,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
uint amount_unloaded = _settings_game.order.gradual_loading ? min(cargo_count, GetLoadAmount(v)) : cargo_count;
|
||||
bool remaining = false; // Are there cargo entities in this vehicle that can still be unloaded here?
|
||||
|
||||
assert(payment != NULL);
|
||||
assert(payment != nullptr);
|
||||
payment->SetCargo(v->cargo_type);
|
||||
|
||||
if (!HasBit(ge->status, GoodsEntry::GES_ACCEPTANCE) && v->cargo.ActionCount(VehicleCargoList::MTA_DELIVER) > 0) {
|
||||
@@ -2025,7 +2025,7 @@ static void LoadUnloadVehicle(Vehicle *front)
|
||||
|
||||
bool has_full_load_order = front->current_order.GetLoadType() & OLFB_FULL_LOAD;
|
||||
if (front->current_order.GetLoadType() == OLFB_CARGO_TYPE_LOAD) {
|
||||
for (Vehicle *v = front; v != NULL; v = v->Next()) {
|
||||
for (Vehicle *v = front; v != nullptr; v = v->Next()) {
|
||||
if (front->current_order.GetCargoLoadTypeRaw(v->cargo_type) & OLFB_FULL_LOAD) {
|
||||
has_full_load_order = true;
|
||||
break;
|
||||
@@ -2139,7 +2139,7 @@ void LoadUnloadStation(Station *st)
|
||||
/* No vehicle is here... */
|
||||
if (st->loading_vehicles.empty()) return;
|
||||
|
||||
Vehicle *last_loading = NULL;
|
||||
Vehicle *last_loading = nullptr;
|
||||
|
||||
/* Check if anything will be loaded at all. Otherwise we don't need to reserve either. */
|
||||
for (Vehicle *v : st->loading_vehicles) {
|
||||
@@ -2156,7 +2156,7 @@ void LoadUnloadStation(Station *st)
|
||||
* consist in a station which is not allowed to load yet because its
|
||||
* load_unload_ticks is still not 0.
|
||||
*/
|
||||
if (last_loading == NULL) return;
|
||||
if (last_loading == nullptr) return;
|
||||
|
||||
for (Vehicle *v : st->loading_vehicles) {
|
||||
if (!(v->vehstatus & (VS_STOPPED | VS_CRASHED)) && !v->current_order.IsType(OT_LOADING_ADVANCE)) LoadUnloadVehicle(v);
|
||||
@@ -2238,7 +2238,7 @@ CommandCost CmdBuyShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
|
||||
/* Check if buying shares is allowed (protection against modified clients)
|
||||
* Cannot buy own shares */
|
||||
if (c == NULL || !_settings_game.economy.allow_shares || _current_company == target_company) return CMD_ERROR;
|
||||
if (c == nullptr || !_settings_game.economy.allow_shares || _current_company == target_company) return CMD_ERROR;
|
||||
|
||||
/* Protect new companies from hostile takeovers */
|
||||
if (_cur_year - c->inaugurated_year < 6) return_cmd_error(STR_ERROR_PROTECTED);
|
||||
@@ -2288,7 +2288,7 @@ CommandCost CmdSellShareInCompany(TileIndex tile, DoCommandFlag flags, uint32 p1
|
||||
Company *c = Company::GetIfValid(target_company);
|
||||
|
||||
/* Cannot sell own shares */
|
||||
if (c == NULL || _current_company == target_company) return CMD_ERROR;
|
||||
if (c == nullptr || _current_company == target_company) return CMD_ERROR;
|
||||
|
||||
/* Check if selling shares is allowed (protection against modified clients).
|
||||
* However, we must sell shares of companies being closed down. */
|
||||
@@ -2327,7 +2327,7 @@ CommandCost CmdBuyCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
{
|
||||
CompanyID target_company = (CompanyID)p1;
|
||||
Company *c = Company::GetIfValid(target_company);
|
||||
if (c == NULL) return CMD_ERROR;
|
||||
if (c == nullptr) return CMD_ERROR;
|
||||
|
||||
/* Disable takeovers when not asked */
|
||||
if (!HasBit(c->bankrupt_asked, _current_company)) return CMD_ERROR;
|
||||
|
@@ -619,7 +619,7 @@ assert_compile(lengthof(_effect_transparency_options) == EV_END);
|
||||
*/
|
||||
EffectVehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicleType type)
|
||||
{
|
||||
if (!Vehicle::CanAllocateItem()) return NULL;
|
||||
if (!Vehicle::CanAllocateItem()) return nullptr;
|
||||
|
||||
EffectVehicle *v = new EffectVehicle();
|
||||
v->subtype = type;
|
||||
|
@@ -87,7 +87,7 @@ struct DualTrackBits {
|
||||
/**
|
||||
* Finds which Electrified Rail Bits are present on a given tile.
|
||||
* @param t tile to check
|
||||
* @param override pointer to PCP override, can be NULL
|
||||
* @param override pointer to PCP override, can be nullptr
|
||||
* @return trackbits of tile if it is electrified
|
||||
*/
|
||||
static DualTrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override)
|
||||
@@ -128,7 +128,7 @@ static DualTrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override)
|
||||
if (secondary_bits && HasRailCatenary(GetSecondaryRailType(t))) {
|
||||
out.secondary = secondary_bits;
|
||||
}
|
||||
if ((out.primary | out.secondary) && override != NULL && (IsTunnel(t) || GetTunnelBridgeLength(t, GetOtherBridgeEnd(t)) > 0)) {
|
||||
if ((out.primary | out.secondary) && override != nullptr && (IsTunnel(t) || GetTunnelBridgeLength(t, GetOtherBridgeEnd(t)) > 0)) {
|
||||
*override = 1 << GetTunnelBridgeDirection(t);
|
||||
}
|
||||
break;
|
||||
@@ -396,7 +396,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||
/* Here's one of the main headaches. GetTileSlope does not correct for possibly
|
||||
* existing foundataions, so we do have to do that manually later on.*/
|
||||
tileh[TS_NEIGHBOUR] = GetTileSlope(neighbour);
|
||||
DualTrackBits neighbour_track_config = GetRailTrackBitsUniversal(neighbour, NULL);
|
||||
DualTrackBits neighbour_track_config = GetRailTrackBitsUniversal(neighbour, nullptr);
|
||||
trackconfig[TS_NEIGHBOUR] = neighbour_track_config.primary | neighbour_track_config.secondary;
|
||||
wireconfig[TS_NEIGHBOUR] = MaskWireBits(neighbour, trackconfig[TS_NEIGHBOUR]);
|
||||
if (IsTunnelTile(neighbour) && i != GetTunnelBridgeDirection(neighbour)) wireconfig[TS_NEIGHBOUR] = trackconfig[TS_NEIGHBOUR] = TRACK_BIT_NONE;
|
||||
|
@@ -70,9 +70,9 @@ assert_compile(lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_i
|
||||
const uint EngineOverrideManager::NUM_DEFAULT_ENGINES = _engine_counts[VEH_TRAIN] + _engine_counts[VEH_ROAD] + _engine_counts[VEH_SHIP] + _engine_counts[VEH_AIRCRAFT];
|
||||
|
||||
Engine::Engine() :
|
||||
name(NULL),
|
||||
name(nullptr),
|
||||
overrides_count(0),
|
||||
overrides(NULL)
|
||||
overrides(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ bool Engine::IsEnabled() const
|
||||
uint32 Engine::GetGRFID() const
|
||||
{
|
||||
const GRFFile *file = this->GetGRF();
|
||||
return file == NULL ? 0 : file->grfid;
|
||||
return file == nullptr ? 0 : file->grfid;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -200,28 +200,28 @@ bool Engine::CanCarryCargo() const
|
||||
/**
|
||||
* Determines capacity of a given vehicle from scratch.
|
||||
* For aircraft the main capacity is determined. Mail might be present as well.
|
||||
* @param v Vehicle of interest; NULL in purchase list
|
||||
* @param v Vehicle of interest; nullptr in purchase list
|
||||
* @param mail_capacity returns secondary cargo (mail) capacity of aircraft
|
||||
* @return Capacity
|
||||
*/
|
||||
uint Engine::DetermineCapacity(const Vehicle *v, uint16 *mail_capacity) const
|
||||
{
|
||||
assert(v == NULL || this->index == v->engine_type);
|
||||
if (mail_capacity != NULL) *mail_capacity = 0;
|
||||
assert(v == nullptr || this->index == v->engine_type);
|
||||
if (mail_capacity != nullptr) *mail_capacity = 0;
|
||||
|
||||
if (!this->CanCarryCargo()) return 0;
|
||||
|
||||
bool new_multipliers = HasBit(this->info.misc_flags, EF_NO_DEFAULT_CARGO_MULTIPLIER);
|
||||
CargoID default_cargo = this->GetDefaultCargoType();
|
||||
CargoID cargo_type = (v != NULL) ? v->cargo_type : default_cargo;
|
||||
CargoID cargo_type = (v != nullptr) ? v->cargo_type : default_cargo;
|
||||
|
||||
if (mail_capacity != NULL && this->type == VEH_AIRCRAFT && IsCargoInClass(cargo_type, CC_PASSENGERS)) {
|
||||
if (mail_capacity != nullptr && this->type == VEH_AIRCRAFT && IsCargoInClass(cargo_type, CC_PASSENGERS)) {
|
||||
*mail_capacity = GetEngineProperty(this->index, PROP_AIRCRAFT_MAIL_CAPACITY, this->u.air.mail_capacity, v);
|
||||
}
|
||||
|
||||
/* Check the refit capacity callback if we are not in the default configuration, or if we are using the new multiplier algorithm. */
|
||||
if (HasBit(this->info.callback_mask, CBM_VEHICLE_REFIT_CAPACITY) &&
|
||||
(new_multipliers || default_cargo != cargo_type || (v != NULL && v->cargo_subtype != 0))) {
|
||||
(new_multipliers || default_cargo != cargo_type || (v != nullptr && v->cargo_subtype != 0))) {
|
||||
uint16 callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, this->index, v);
|
||||
if (callback != CALLBACK_FAILED) return callback;
|
||||
}
|
||||
@@ -234,7 +234,7 @@ uint Engine::DetermineCapacity(const Vehicle *v, uint16 *mail_capacity) const
|
||||
capacity = GetEngineProperty(this->index, PROP_TRAIN_CARGO_CAPACITY, this->u.rail.capacity, v);
|
||||
|
||||
/* In purchase list add the capacity of the second head. Always use the plain property for this. */
|
||||
if (v == NULL && this->u.rail.railveh_type == RAILVEH_MULTIHEAD) capacity += this->u.rail.capacity;
|
||||
if (v == nullptr && this->u.rail.railveh_type == RAILVEH_MULTIHEAD) capacity += this->u.rail.capacity;
|
||||
break;
|
||||
|
||||
case VEH_ROAD:
|
||||
@@ -879,7 +879,7 @@ void ClearEnginesHiddenFlagOfCompany(CompanyID cid)
|
||||
CommandCost CmdSetVehicleVisibility(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Engine *e = Engine::GetIfValid(GB(p2, 0, 31));
|
||||
if (e == NULL || _current_company >= MAX_COMPANIES) return CMD_ERROR;
|
||||
if (e == nullptr || _current_company >= MAX_COMPANIES) return CMD_ERROR;
|
||||
if (!IsEngineBuildable(e->index, e->type, _current_company)) return CMD_ERROR;
|
||||
|
||||
if ((flags & DC_EXEC) != 0) {
|
||||
@@ -903,7 +903,7 @@ CommandCost CmdSetVehicleVisibility(TileIndex tile, DoCommandFlag flags, uint32
|
||||
CommandCost CmdWantEnginePreview(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Engine *e = Engine::GetIfValid(p1);
|
||||
if (e == NULL || !(e->flags & ENGINE_EXCLUSIVE_PREVIEW) || e->preview_company != _current_company) return CMD_ERROR;
|
||||
if (e == nullptr || !(e->flags & ENGINE_EXCLUSIVE_PREVIEW) || e->preview_company != _current_company) return CMD_ERROR;
|
||||
|
||||
if (flags & DC_EXEC) AcceptEnginePreview(p1, _current_company);
|
||||
|
||||
@@ -1031,7 +1031,7 @@ static bool IsUniqueEngineName(const char *name)
|
||||
const Engine *e;
|
||||
|
||||
FOR_ALL_ENGINES(e) {
|
||||
if (e->name != NULL && strcmp(e->name, name) == 0) return false;
|
||||
if (e->name != nullptr && strcmp(e->name, name) == 0) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1049,7 +1049,7 @@ static bool IsUniqueEngineName(const char *name)
|
||||
CommandCost CmdRenameEngine(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
|
||||
{
|
||||
Engine *e = Engine::GetIfValid(p1);
|
||||
if (e == NULL) return CMD_ERROR;
|
||||
if (e == nullptr) return CMD_ERROR;
|
||||
|
||||
bool reset = StrEmpty(text);
|
||||
|
||||
@@ -1062,7 +1062,7 @@ CommandCost CmdRenameEngine(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||
free(e->name);
|
||||
|
||||
if (reset) {
|
||||
e->name = NULL;
|
||||
e->name = nullptr;
|
||||
} else {
|
||||
e->name = stredup(text);
|
||||
}
|
||||
@@ -1087,7 +1087,7 @@ bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company)
|
||||
const Engine *e = Engine::GetIfValid(engine);
|
||||
|
||||
/* check if it's an engine that is in the engine array */
|
||||
if (e == NULL) return false;
|
||||
if (e == nullptr) return false;
|
||||
|
||||
/* check if it's an engine of specified type */
|
||||
if (e->type != type) return false;
|
||||
@@ -1123,7 +1123,7 @@ bool IsEngineRefittable(EngineID engine)
|
||||
const Engine *e = Engine::GetIfValid(engine);
|
||||
|
||||
/* check if it's an engine that is in the engine array */
|
||||
if (e == NULL) return false;
|
||||
if (e == nullptr) return false;
|
||||
|
||||
if (!e->CanCarryCargo()) return false;
|
||||
|
||||
|
@@ -83,7 +83,7 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
|
||||
return this->info.cargo_type;
|
||||
}
|
||||
|
||||
uint DetermineCapacity(const Vehicle *v, uint16 *mail_capacity = NULL) const;
|
||||
uint DetermineCapacity(const Vehicle *v, uint16 *mail_capacity = nullptr) const;
|
||||
|
||||
bool CanCarryCargo() const;
|
||||
|
||||
@@ -98,9 +98,9 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> {
|
||||
* @return The default capacity
|
||||
* @see GetDefaultCargoType
|
||||
*/
|
||||
uint GetDisplayDefaultCapacity(uint16 *mail_capacity = NULL) const
|
||||
uint GetDisplayDefaultCapacity(uint16 *mail_capacity = nullptr) const
|
||||
{
|
||||
return this->DetermineCapacity(NULL, mail_capacity);
|
||||
return this->DetermineCapacity(nullptr, mail_capacity);
|
||||
}
|
||||
|
||||
Money GetRunningCost() const;
|
||||
|
@@ -44,7 +44,7 @@ protected:
|
||||
public:
|
||||
ErrorMessageData(const ErrorMessageData &data);
|
||||
~ErrorMessageData();
|
||||
ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration = 0, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = NULL, uint textref_stack_size = 0, const uint32 *textref_stack = NULL, StringID extra_msg = INVALID_STRING_ID);
|
||||
ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration = 0, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = nullptr, uint textref_stack_size = 0, const uint32 *textref_stack = nullptr, StringID extra_msg = INVALID_STRING_ID);
|
||||
|
||||
/** Check whether error window shall display a company manager face */
|
||||
bool HasFace() const { return face != INVALID_COMPANY; }
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
|
||||
void ScheduleErrorMessage(const ErrorMessageData &data);
|
||||
|
||||
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = NULL, uint textref_stack_size = 0, const uint32 *textref_stack = NULL, StringID extra_msg = INVALID_STRING_ID);
|
||||
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = nullptr, uint textref_stack_size = 0, const uint32 *textref_stack = nullptr, StringID extra_msg = INVALID_STRING_ID);
|
||||
void ClearErrorMessages();
|
||||
void ShowFirstError();
|
||||
void UnshowCriticalError();
|
||||
|
@@ -76,7 +76,7 @@ ErrorMessageData::ErrorMessageData(const ErrorMessageData &data)
|
||||
{
|
||||
*this = data;
|
||||
for (size_t i = 0; i < lengthof(this->strings); i++) {
|
||||
if (this->strings[i] != NULL) {
|
||||
if (this->strings[i] != nullptr) {
|
||||
this->strings[i] = stredup(this->strings[i]);
|
||||
this->decode_params[i] = (size_t)this->strings[i];
|
||||
}
|
||||
@@ -377,7 +377,7 @@ void ShowFirstError()
|
||||
void UnshowCriticalError()
|
||||
{
|
||||
ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0);
|
||||
if (_window_system_initialized && w != NULL) {
|
||||
if (_window_system_initialized && w != nullptr) {
|
||||
if (w->IsCritical()) _error_list.push_front(*w);
|
||||
_window_system_initialized = false;
|
||||
delete w;
|
||||
@@ -398,7 +398,7 @@ void UnshowCriticalError()
|
||||
*/
|
||||
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x, int y, const GRFFile *textref_stack_grffile, uint textref_stack_size, const uint32 *textref_stack, StringID extra_msg)
|
||||
{
|
||||
assert(textref_stack_size == 0 || (textref_stack_grffile != NULL && textref_stack != NULL));
|
||||
assert(textref_stack_size == 0 || (textref_stack_grffile != nullptr && textref_stack != nullptr));
|
||||
if (summary_msg == STR_NULL) summary_msg = STR_EMPTY;
|
||||
|
||||
if (wl != WL_INFO) {
|
||||
@@ -433,7 +433,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel
|
||||
data.CopyOutDParams();
|
||||
|
||||
ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0);
|
||||
if (w != NULL && w->IsCritical()) {
|
||||
if (w != nullptr && w->IsCritical()) {
|
||||
/* A critical error is currently shown. */
|
||||
if (wl == WL_CRITICAL) {
|
||||
/* Push another critical error in the queue of errors,
|
||||
|
152
src/fileio.cpp
152
src/fileio.cpp
@@ -99,7 +99,7 @@ void FioSeekTo(size_t pos, int mode)
|
||||
static void FioRestoreFile(int slot)
|
||||
{
|
||||
/* Do we still have the file open, or should we reopen it? */
|
||||
if (_fio.handles[slot] == NULL) {
|
||||
if (_fio.handles[slot] == nullptr) {
|
||||
DEBUG(misc, 6, "Restoring file '%s' in slot '%d' from disk", _fio.filenames[slot], slot);
|
||||
FioOpenFile(slot, _fio.filenames[slot]);
|
||||
}
|
||||
@@ -120,7 +120,7 @@ void FioSeekToFile(uint slot, size_t pos)
|
||||
FioRestoreFile(slot);
|
||||
#endif /* LIMITED_FDS */
|
||||
f = _fio.handles[slot];
|
||||
assert(f != NULL);
|
||||
assert(f != nullptr);
|
||||
_fio.cur_fh = f;
|
||||
_fio.filename = _fio.filenames[slot];
|
||||
FioSeekTo(pos, SEEK_SET);
|
||||
@@ -196,13 +196,13 @@ void FioReadBlock(void *ptr, size_t size)
|
||||
*/
|
||||
static inline void FioCloseFile(int slot)
|
||||
{
|
||||
if (_fio.handles[slot] != NULL) {
|
||||
if (_fio.handles[slot] != nullptr) {
|
||||
fclose(_fio.handles[slot]);
|
||||
|
||||
free(_fio.shortnames[slot]);
|
||||
_fio.shortnames[slot] = NULL;
|
||||
_fio.shortnames[slot] = nullptr;
|
||||
|
||||
_fio.handles[slot] = NULL;
|
||||
_fio.handles[slot] = nullptr;
|
||||
#if defined(LIMITED_FDS)
|
||||
_fio.open_handles--;
|
||||
#endif /* LIMITED_FDS */
|
||||
@@ -229,7 +229,7 @@ static void FioFreeHandle()
|
||||
slot = -1;
|
||||
/* Find the file that is used the least */
|
||||
for (i = 0; i < lengthof(_fio.handles); i++) {
|
||||
if (_fio.handles[i] != NULL && _fio.usage_count[i] < count) {
|
||||
if (_fio.handles[i] != nullptr && _fio.usage_count[i] < count) {
|
||||
count = _fio.usage_count[i];
|
||||
slot = i;
|
||||
}
|
||||
@@ -255,7 +255,7 @@ void FioOpenFile(uint slot, const char *filename, Subdirectory subdir)
|
||||
FioFreeHandle();
|
||||
#endif /* LIMITED_FDS */
|
||||
f = FioFOpenFile(filename, "rb", subdir);
|
||||
if (f == NULL) usererror("Cannot open file '%s'", filename);
|
||||
if (f == nullptr) usererror("Cannot open file '%s'", filename);
|
||||
long pos = ftell(f);
|
||||
if (pos < 0) usererror("Cannot read file '%s'", filename);
|
||||
|
||||
@@ -265,9 +265,9 @@ void FioOpenFile(uint slot, const char *filename, Subdirectory subdir)
|
||||
|
||||
/* Store the filename without path and extension */
|
||||
const char *t = strrchr(filename, PATHSEPCHAR);
|
||||
_fio.shortnames[slot] = stredup(t == NULL ? filename : t);
|
||||
_fio.shortnames[slot] = stredup(t == nullptr ? filename : t);
|
||||
char *t2 = strrchr(_fio.shortnames[slot], '.');
|
||||
if (t2 != NULL) *t2 = '\0';
|
||||
if (t2 != nullptr) *t2 = '\0';
|
||||
strtolower(_fio.shortnames[slot]);
|
||||
|
||||
#if defined(LIMITED_FDS)
|
||||
@@ -312,7 +312,7 @@ static TarLinkList _tar_linklist[NUM_SUBDIRS]; ///< List of directory links
|
||||
bool FioCheckFileExists(const char *filename, Subdirectory subdir)
|
||||
{
|
||||
FILE *f = FioFOpenFile(filename, "rb", subdir);
|
||||
if (f == NULL) return false;
|
||||
if (f == nullptr) return false;
|
||||
|
||||
FioFCloseFile(f);
|
||||
return true;
|
||||
@@ -351,7 +351,7 @@ char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory su
|
||||
* @param last End of the destination buffer.
|
||||
* @param subdir Subdirectory to try.
|
||||
* @param filename Filename to look for.
|
||||
* @return \a buf containing the path if the path was found, else \c NULL.
|
||||
* @return \a buf containing the path if the path was found, else \c nullptr.
|
||||
*/
|
||||
char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const char *filename)
|
||||
{
|
||||
@@ -369,7 +369,7 @@ char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const ch
|
||||
#endif
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
char *FioAppendDirectory(char *buf, const char *last, Searchpath sp, Subdirectory subdir)
|
||||
@@ -407,7 +407,7 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s
|
||||
wchar_t Lmode[5];
|
||||
MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, lengthof(Lmode));
|
||||
#endif
|
||||
FILE *f = NULL;
|
||||
FILE *f = nullptr;
|
||||
char buf[MAX_PATH];
|
||||
|
||||
if (subdir == NO_DIRECTORY) {
|
||||
@@ -417,16 +417,16 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf)) == INVALID_FILE_ATTRIBUTES) return NULL;
|
||||
if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf)) == INVALID_FILE_ATTRIBUTES) return nullptr;
|
||||
#endif
|
||||
|
||||
f = fopen(buf, mode);
|
||||
#if !defined(_WIN32)
|
||||
if (f == NULL && strtolower(buf + ((subdir == NO_DIRECTORY) ? 0 : strlen(_searchpaths[sp]) - 1))) {
|
||||
if (f == nullptr && strtolower(buf + ((subdir == NO_DIRECTORY) ? 0 : strlen(_searchpaths[sp]) - 1))) {
|
||||
f = fopen(buf, mode);
|
||||
}
|
||||
#endif
|
||||
if (f != NULL && filesize != NULL) {
|
||||
if (f != nullptr && filesize != nullptr) {
|
||||
/* Find the size of the file */
|
||||
fseek(f, 0, SEEK_END);
|
||||
*filesize = ftell(f);
|
||||
@@ -438,21 +438,21 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s
|
||||
/**
|
||||
* Opens a file from inside a tar archive.
|
||||
* @param entry The entry to open.
|
||||
* @param[out] filesize If not \c NULL, size of the opened file.
|
||||
* @return File handle of the opened file, or \c NULL if the file is not available.
|
||||
* @param[out] filesize If not \c nullptr, size of the opened file.
|
||||
* @return File handle of the opened file, or \c nullptr if the file is not available.
|
||||
* @note The file is read from within the tar file, and may not return \c EOF after reading the whole file.
|
||||
*/
|
||||
FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize)
|
||||
{
|
||||
FILE *f = fopen(entry->tar_filename, "rb");
|
||||
if (f == NULL) return f;
|
||||
if (f == nullptr) return f;
|
||||
|
||||
if (fseek(f, entry->position, SEEK_SET) < 0) {
|
||||
fclose(f);
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (filesize != NULL) *filesize = entry->size;
|
||||
if (filesize != nullptr) *filesize = entry->size;
|
||||
return f;
|
||||
}
|
||||
|
||||
@@ -460,22 +460,22 @@ FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize)
|
||||
* Opens a OpenTTD file somewhere in a personal or global directory.
|
||||
* @param filename Name of the file to open.
|
||||
* @param subdir Subdirectory to open.
|
||||
* @return File handle of the opened file, or \c NULL if the file is not available.
|
||||
* @return File handle of the opened file, or \c nullptr if the file is not available.
|
||||
*/
|
||||
FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize)
|
||||
{
|
||||
FILE *f = NULL;
|
||||
FILE *f = nullptr;
|
||||
Searchpath sp;
|
||||
|
||||
assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY);
|
||||
|
||||
FOR_ALL_SEARCHPATHS(sp) {
|
||||
f = FioFOpenFileSp(filename, mode, sp, subdir, filesize);
|
||||
if (f != NULL || subdir == NO_DIRECTORY) break;
|
||||
if (f != nullptr || subdir == NO_DIRECTORY) break;
|
||||
}
|
||||
|
||||
/* We can only use .tar in case of data-dir, and read-mode */
|
||||
if (f == NULL && mode[0] == 'r' && subdir != NO_DIRECTORY) {
|
||||
if (f == nullptr && mode[0] == 'r' && subdir != NO_DIRECTORY) {
|
||||
static const uint MAX_RESOLVED_LENGTH = 2 * (100 + 100 + 155) + 1; // Enough space to hold two filenames plus link. See 'TarHeader'.
|
||||
char resolved_name[MAX_RESOLVED_LENGTH];
|
||||
|
||||
@@ -508,11 +508,11 @@ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir,
|
||||
|
||||
/* Sometimes a full path is given. To support
|
||||
* the 'subdirectory' must be 'removed'. */
|
||||
if (f == NULL && subdir != NO_DIRECTORY) {
|
||||
if (f == nullptr && subdir != NO_DIRECTORY) {
|
||||
switch (subdir) {
|
||||
case BASESET_DIR:
|
||||
f = FioFOpenFile(filename, mode, OLD_GM_DIR, filesize);
|
||||
if (f != NULL) break;
|
||||
if (f != nullptr) break;
|
||||
FALLTHROUGH;
|
||||
case NEWGRF_DIR:
|
||||
f = FioFOpenFile(filename, mode, OLD_DATA_DIR, filesize);
|
||||
@@ -536,7 +536,7 @@ void FioCreateDirectory(const char *name)
|
||||
/* Ignore directory creation errors; they'll surface later on, and most
|
||||
* of the time they are 'directory already exists' errors anyhow. */
|
||||
#if defined(_WIN32)
|
||||
CreateDirectory(OTTD2FS(name), NULL);
|
||||
CreateDirectory(OTTD2FS(name), nullptr);
|
||||
#elif defined(OS2) && !defined(__INNOTEK_LIBC__)
|
||||
mkdir(OTTD2FS(name));
|
||||
#else
|
||||
@@ -573,7 +573,7 @@ bool AppendPathSeparator(char *buf, const char *last)
|
||||
const char *FioTarFirstDir(const char *tarname, Subdirectory subdir)
|
||||
{
|
||||
TarList::iterator it = _tar_list[subdir].find(tarname);
|
||||
if (it == _tar_list[subdir].end()) return NULL;
|
||||
if (it == _tar_list[subdir].end()) return nullptr;
|
||||
return (*it).second.dirname;
|
||||
}
|
||||
|
||||
@@ -675,7 +675,7 @@ bool TarScanner::AddFile(Subdirectory sd, const char *filename)
|
||||
bool TarScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename)
|
||||
{
|
||||
/* No tar within tar. */
|
||||
assert(tar_filename == NULL);
|
||||
assert(tar_filename == nullptr);
|
||||
|
||||
/* The TAR-header, repeated for every file */
|
||||
struct TarHeader {
|
||||
@@ -708,11 +708,11 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha
|
||||
* a number of reasons we cannot open the file.
|
||||
* Most common case is when we simply have not
|
||||
* been given read access. */
|
||||
if (f == NULL) return false;
|
||||
if (f == nullptr) return false;
|
||||
|
||||
const char *dupped_filename = stredup(filename);
|
||||
_tar_list[this->subdir][filename].filename = dupped_filename;
|
||||
_tar_list[this->subdir][filename].dirname = NULL;
|
||||
_tar_list[this->subdir][filename].dirname = nullptr;
|
||||
|
||||
TarLinkList links; ///< Temporary list to collect links
|
||||
|
||||
@@ -801,13 +801,13 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha
|
||||
* Note: The destination of links must not contain any directory-links. */
|
||||
strecpy(dest, name, lastof(dest));
|
||||
char *destpos = strrchr(dest, PATHSEPCHAR);
|
||||
if (destpos == NULL) destpos = dest;
|
||||
if (destpos == nullptr) destpos = dest;
|
||||
*destpos = '\0';
|
||||
|
||||
char *pos = link;
|
||||
while (*pos != '\0') {
|
||||
char *next = strchr(pos, PATHSEPCHAR);
|
||||
if (next == NULL) {
|
||||
if (next == nullptr) {
|
||||
next = pos + strlen(pos);
|
||||
} else {
|
||||
/* Terminate the substring up to the path separator character. */
|
||||
@@ -826,7 +826,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha
|
||||
/* Truncate 'dest' after last PATHSEPCHAR.
|
||||
* This assumes that the truncated part is a real directory and not a link. */
|
||||
destpos = strrchr(dest, PATHSEPCHAR);
|
||||
if (destpos == NULL) destpos = dest;
|
||||
if (destpos == nullptr) destpos = dest;
|
||||
*destpos = '\0';
|
||||
} else {
|
||||
/* Append at end of 'dest' */
|
||||
@@ -856,7 +856,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha
|
||||
|
||||
/* Store the first directory name we detect */
|
||||
DEBUG(misc, 6, "Found dir in tar: %s", name);
|
||||
if (_tar_list[this->subdir][filename].dirname == NULL) _tar_list[this->subdir][filename].dirname = stredup(name);
|
||||
if (_tar_list[this->subdir][filename].dirname == nullptr) _tar_list[this->subdir][filename].dirname = stredup(name);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -911,13 +911,13 @@ bool ExtractTar(const char *tar_filename, Subdirectory subdir)
|
||||
const char *dirname = (*it).second.dirname;
|
||||
|
||||
/* The file doesn't have a sub directory! */
|
||||
if (dirname == NULL) return false;
|
||||
if (dirname == nullptr) return false;
|
||||
|
||||
char filename[MAX_PATH];
|
||||
strecpy(filename, tar_filename, lastof(filename));
|
||||
char *p = strrchr(filename, PATHSEPCHAR);
|
||||
/* The file's path does not have a separator? */
|
||||
if (p == NULL) return false;
|
||||
if (p == nullptr) return false;
|
||||
|
||||
p++;
|
||||
strecpy(p, dirname, lastof(filename));
|
||||
@@ -934,14 +934,14 @@ bool ExtractTar(const char *tar_filename, Subdirectory subdir)
|
||||
/* First open the file in the .tar. */
|
||||
size_t to_copy = 0;
|
||||
FILE *in = FioFOpenFileTar(&(*it2).second, &to_copy);
|
||||
if (in == NULL) {
|
||||
if (in == nullptr) {
|
||||
DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename, tar_filename);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Now open the 'output' file. */
|
||||
FILE *out = fopen(filename, "wb");
|
||||
if (out == NULL) {
|
||||
if (out == nullptr) {
|
||||
DEBUG(misc, 6, "Extracting %s failed; could not open %s", filename, filename);
|
||||
fclose(in);
|
||||
return false;
|
||||
@@ -993,12 +993,12 @@ static bool ChangeWorkingDirectoryToExecutable(const char *exe)
|
||||
bool success = false;
|
||||
#ifdef WITH_COCOA
|
||||
char *app_bundle = strchr(tmp, '.');
|
||||
while (app_bundle != NULL && strncasecmp(app_bundle, ".app", 4) != 0) app_bundle = strchr(&app_bundle[1], '.');
|
||||
while (app_bundle != nullptr && strncasecmp(app_bundle, ".app", 4) != 0) app_bundle = strchr(&app_bundle[1], '.');
|
||||
|
||||
if (app_bundle != NULL) *app_bundle = '\0';
|
||||
if (app_bundle != nullptr) *app_bundle = '\0';
|
||||
#endif /* WITH_COCOA */
|
||||
char *s = strrchr(tmp, PATHSEPCHAR);
|
||||
if (s != NULL) {
|
||||
if (s != nullptr) {
|
||||
*s = '\0';
|
||||
if (chdir(tmp) != 0) {
|
||||
DEBUG(misc, 0, "Directory with the binary does not exist?");
|
||||
@@ -1022,13 +1022,13 @@ static bool ChangeWorkingDirectoryToExecutable(const char *exe)
|
||||
bool DoScanWorkingDirectory()
|
||||
{
|
||||
/* No working directory, so nothing to do. */
|
||||
if (_searchpaths[SP_WORKING_DIR] == NULL) return false;
|
||||
if (_searchpaths[SP_WORKING_DIR] == nullptr) return false;
|
||||
|
||||
/* Working directory is root, so do nothing. */
|
||||
if (strcmp(_searchpaths[SP_WORKING_DIR], PATHSEP) == 0) return false;
|
||||
|
||||
/* No personal/home directory, so the working directory won't be that. */
|
||||
if (_searchpaths[SP_PERSONAL_DIR] == NULL) return true;
|
||||
if (_searchpaths[SP_PERSONAL_DIR] == nullptr) return true;
|
||||
|
||||
char tmp[MAX_PATH];
|
||||
seprintf(tmp, lastof(tmp), "%s%s", _searchpaths[SP_WORKING_DIR], PERSONAL_DIR);
|
||||
@@ -1044,7 +1044,7 @@ void DetermineBasePaths(const char *exe)
|
||||
{
|
||||
char tmp[MAX_PATH];
|
||||
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
||||
const char *xdg_data_home = xdgDataHome(NULL);
|
||||
const char *xdg_data_home = xdgDataHome(nullptr);
|
||||
seprintf(tmp, lastof(tmp), "%s" PATHSEP "%s", xdg_data_home,
|
||||
PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR);
|
||||
free(xdg_data_home);
|
||||
@@ -1053,7 +1053,7 @@ void DetermineBasePaths(const char *exe)
|
||||
_searchpaths[SP_PERSONAL_DIR_XDG] = stredup(tmp);
|
||||
#endif
|
||||
#if defined(OS2) || !defined(WITH_PERSONAL_DIR)
|
||||
_searchpaths[SP_PERSONAL_DIR] = NULL;
|
||||
_searchpaths[SP_PERSONAL_DIR] = nullptr;
|
||||
#else
|
||||
#ifdef __HAIKU__
|
||||
BPath path;
|
||||
@@ -1065,17 +1065,17 @@ void DetermineBasePaths(const char *exe)
|
||||
* variables in any way. It can also contain all kinds of
|
||||
* unvalidated data we rather not want internally. */
|
||||
const char *homedir = getenv("HOME");
|
||||
if (homedir != NULL) {
|
||||
if (homedir != nullptr) {
|
||||
homedir = stredup(homedir);
|
||||
}
|
||||
|
||||
if (homedir == NULL) {
|
||||
if (homedir == nullptr) {
|
||||
const struct passwd *pw = getpwuid(getuid());
|
||||
homedir = (pw == NULL) ? NULL : stredup(pw->pw_dir);
|
||||
homedir = (pw == nullptr) ? nullptr : stredup(pw->pw_dir);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (homedir != NULL) {
|
||||
if (homedir != nullptr) {
|
||||
ValidateString(homedir);
|
||||
seprintf(tmp, lastof(tmp), "%s" PATHSEP "%s", homedir, PERSONAL_DIR);
|
||||
AppendPathSeparator(tmp, lastof(tmp));
|
||||
@@ -1083,7 +1083,7 @@ void DetermineBasePaths(const char *exe)
|
||||
_searchpaths[SP_PERSONAL_DIR] = stredup(tmp);
|
||||
free(homedir);
|
||||
} else {
|
||||
_searchpaths[SP_PERSONAL_DIR] = NULL;
|
||||
_searchpaths[SP_PERSONAL_DIR] = nullptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1092,10 +1092,10 @@ void DetermineBasePaths(const char *exe)
|
||||
AppendPathSeparator(tmp, lastof(tmp));
|
||||
_searchpaths[SP_SHARED_DIR] = stredup(tmp);
|
||||
#else
|
||||
_searchpaths[SP_SHARED_DIR] = NULL;
|
||||
_searchpaths[SP_SHARED_DIR] = nullptr;
|
||||
#endif
|
||||
|
||||
if (getcwd(tmp, MAX_PATH) == NULL) *tmp = '\0';
|
||||
if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0';
|
||||
AppendPathSeparator(tmp, lastof(tmp));
|
||||
_searchpaths[SP_WORKING_DIR] = stredup(tmp);
|
||||
|
||||
@@ -1103,14 +1103,14 @@ void DetermineBasePaths(const char *exe)
|
||||
|
||||
/* Change the working directory to that one of the executable */
|
||||
if (ChangeWorkingDirectoryToExecutable(exe)) {
|
||||
if (getcwd(tmp, MAX_PATH) == NULL) *tmp = '\0';
|
||||
if (getcwd(tmp, MAX_PATH) == nullptr) *tmp = '\0';
|
||||
AppendPathSeparator(tmp, lastof(tmp));
|
||||
_searchpaths[SP_BINARY_DIR] = stredup(tmp);
|
||||
} else {
|
||||
_searchpaths[SP_BINARY_DIR] = NULL;
|
||||
_searchpaths[SP_BINARY_DIR] = nullptr;
|
||||
}
|
||||
|
||||
if (_searchpaths[SP_WORKING_DIR] != NULL) {
|
||||
if (_searchpaths[SP_WORKING_DIR] != nullptr) {
|
||||
/* Go back to the current working directory. */
|
||||
if (chdir(_searchpaths[SP_WORKING_DIR]) != 0) {
|
||||
DEBUG(misc, 0, "Failed to return to working directory!");
|
||||
@@ -1118,7 +1118,7 @@ void DetermineBasePaths(const char *exe)
|
||||
}
|
||||
|
||||
#if !defined(GLOBAL_DATA_DIR)
|
||||
_searchpaths[SP_INSTALLATION_DIR] = NULL;
|
||||
_searchpaths[SP_INSTALLATION_DIR] = nullptr;
|
||||
#else
|
||||
seprintf(tmp, lastof(tmp), "%s", GLOBAL_DATA_DIR);
|
||||
AppendPathSeparator(tmp, lastof(tmp));
|
||||
@@ -1128,7 +1128,7 @@ void DetermineBasePaths(const char *exe)
|
||||
extern void cocoaSetApplicationBundleDir();
|
||||
cocoaSetApplicationBundleDir();
|
||||
#else
|
||||
_searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL;
|
||||
_searchpaths[SP_APPLICATION_BUNDLE_DIR] = nullptr;
|
||||
#endif
|
||||
}
|
||||
#endif /* defined(_WIN32) */
|
||||
@@ -1148,7 +1148,7 @@ void DeterminePaths(const char *exe)
|
||||
#if defined(WITH_XDG_BASEDIR) && defined(WITH_PERSONAL_DIR)
|
||||
char config_home[MAX_PATH];
|
||||
|
||||
const char *xdg_config_home = xdgConfigHome(NULL);
|
||||
const char *xdg_config_home = xdgConfigHome(nullptr);
|
||||
seprintf(config_home, lastof(config_home), "%s" PATHSEP "%s", xdg_config_home,
|
||||
PERSONAL_DIR[0] == '.' ? &PERSONAL_DIR[1] : PERSONAL_DIR);
|
||||
free(xdg_config_home);
|
||||
@@ -1163,19 +1163,19 @@ void DeterminePaths(const char *exe)
|
||||
}
|
||||
|
||||
char *config_dir;
|
||||
if (_config_file != NULL) {
|
||||
if (_config_file != nullptr) {
|
||||
config_dir = stredup(_config_file);
|
||||
char *end = strrchr(config_dir, PATHSEPCHAR);
|
||||
if (end == NULL) {
|
||||
if (end == nullptr) {
|
||||
config_dir[0] = '\0';
|
||||
} else {
|
||||
end[1] = '\0';
|
||||
}
|
||||
} else {
|
||||
char personal_dir[MAX_PATH];
|
||||
if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != NULL) {
|
||||
if (FioFindFullPath(personal_dir, lastof(personal_dir), BASE_DIR, "openttd.cfg") != nullptr) {
|
||||
char *end = strrchr(personal_dir, PATHSEPCHAR);
|
||||
if (end != NULL) end[1] = '\0';
|
||||
if (end != nullptr) end[1] = '\0';
|
||||
config_dir = stredup(personal_dir);
|
||||
_config_file = str_fmt("%sopenttd.cfg", config_dir);
|
||||
} else {
|
||||
@@ -1187,14 +1187,14 @@ void DeterminePaths(const char *exe)
|
||||
SP_PERSONAL_DIR, SP_BINARY_DIR, SP_WORKING_DIR, SP_SHARED_DIR, SP_INSTALLATION_DIR
|
||||
};
|
||||
|
||||
config_dir = NULL;
|
||||
config_dir = nullptr;
|
||||
for (uint i = 0; i < lengthof(new_openttd_cfg_order); i++) {
|
||||
if (IsValidSearchPath(new_openttd_cfg_order[i])) {
|
||||
config_dir = stredup(_searchpaths[new_openttd_cfg_order[i]]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
assert(config_dir != NULL);
|
||||
assert(config_dir != nullptr);
|
||||
#endif
|
||||
_config_file = str_fmt("%sopenttd.cfg", config_dir);
|
||||
}
|
||||
@@ -1277,27 +1277,27 @@ void SanitizeFilename(char *filename)
|
||||
* @param filename Name of the file to load.
|
||||
* @param[out] lenp Length of loaded data.
|
||||
* @param maxsize Maximum size to load.
|
||||
* @return Pointer to new memory containing the loaded data, or \c NULL if loading failed.
|
||||
* @return Pointer to new memory containing the loaded data, or \c nullptr if loading failed.
|
||||
* @note If \a maxsize less than the length of the file, loading fails.
|
||||
*/
|
||||
void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize)
|
||||
{
|
||||
FILE *in = fopen(filename, "rb");
|
||||
if (in == NULL) return NULL;
|
||||
if (in == nullptr) return nullptr;
|
||||
|
||||
fseek(in, 0, SEEK_END);
|
||||
size_t len = ftell(in);
|
||||
fseek(in, 0, SEEK_SET);
|
||||
if (len > maxsize) {
|
||||
fclose(in);
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
byte *mem = MallocT<byte>(len + 1);
|
||||
mem[len] = 0;
|
||||
if (fread(mem, len, 1, in) != 1) {
|
||||
fclose(in);
|
||||
free(mem);
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
fclose(in);
|
||||
|
||||
@@ -1309,14 +1309,14 @@ void *ReadFileToMem(const char *filename, size_t *lenp, size_t maxsize)
|
||||
* Helper to see whether a given filename matches the extension.
|
||||
* @param extension The extension to look for.
|
||||
* @param filename The filename to look in for the extension.
|
||||
* @return True iff the extension is NULL, or the filename ends with it.
|
||||
* @return True iff the extension is nullptr, or the filename ends with it.
|
||||
*/
|
||||
static bool MatchesExtension(const char *extension, const char *filename)
|
||||
{
|
||||
if (extension == NULL) return true;
|
||||
if (extension == nullptr) return true;
|
||||
|
||||
const char *ext = strrchr(filename, extension[0]);
|
||||
return ext != NULL && strcasecmp(ext, extension) == 0;
|
||||
return ext != nullptr && strcasecmp(ext, extension) == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1337,9 +1337,9 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s
|
||||
struct dirent *dirent;
|
||||
DIR *dir;
|
||||
|
||||
if (path == NULL || (dir = ttd_opendir(path)) == NULL) return 0;
|
||||
if (path == nullptr || (dir = ttd_opendir(path)) == nullptr) return 0;
|
||||
|
||||
while ((dirent = readdir(dir)) != NULL) {
|
||||
while ((dirent = readdir(dir)) != nullptr) {
|
||||
const char *d_name = FS2OTTD(dirent->d_name);
|
||||
char filename[MAX_PATH];
|
||||
|
||||
@@ -1355,7 +1355,7 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s
|
||||
num += ScanPath(fs, extension, filename, basepath_length, recursive);
|
||||
} else if (S_ISREG(sb.st_mode)) {
|
||||
/* File */
|
||||
if (MatchesExtension(extension, filename) && fs->AddFile(filename, basepath_length, NULL)) num++;
|
||||
if (MatchesExtension(extension, filename) && fs->AddFile(filename, basepath_length, nullptr)) num++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -30,7 +30,7 @@ void FioSkipBytes(int n);
|
||||
/**
|
||||
* The search paths OpenTTD could search through.
|
||||
* At least one of the slots has to be filled with a path.
|
||||
* NULL paths tell that there is no such path for the
|
||||
* nullptr paths tell that there is no such path for the
|
||||
* current operating system.
|
||||
*/
|
||||
extern const char *_searchpaths[NUM_SEARCHPATHS];
|
||||
@@ -42,14 +42,14 @@ extern const char *_searchpaths[NUM_SEARCHPATHS];
|
||||
*/
|
||||
static inline bool IsValidSearchPath(Searchpath sp)
|
||||
{
|
||||
return sp < NUM_SEARCHPATHS && _searchpaths[sp] != NULL;
|
||||
return sp < NUM_SEARCHPATHS && _searchpaths[sp] != nullptr;
|
||||
}
|
||||
|
||||
/** Iterator for all the search paths */
|
||||
#define FOR_ALL_SEARCHPATHS(sp) for (sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) if (IsValidSearchPath(sp))
|
||||
|
||||
void FioFCloseFile(FILE *f);
|
||||
FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = NULL);
|
||||
FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr);
|
||||
bool FioCheckFileExists(const char *filename, Subdirectory subdir);
|
||||
char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory subdir, const char *filename);
|
||||
char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const char *filename);
|
||||
@@ -107,7 +107,7 @@ public:
|
||||
ALL = BASESET | NEWGRF | AI | SCENARIO | GAME, ///< Scan for everything.
|
||||
};
|
||||
|
||||
bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename = NULL) override;
|
||||
bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename = nullptr) override;
|
||||
|
||||
bool AddFile(Subdirectory sd, const char *filename);
|
||||
|
||||
|
74
src/fios.cpp
74
src/fios.cpp
@@ -105,7 +105,7 @@ void FileList::BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperati
|
||||
* Find file information of a file by its name from the file list.
|
||||
* @param file The filename to return information about. Can be the actual name
|
||||
* or a numbered entry into the filename list.
|
||||
* @return The information on the file, or \c NULL if the file is not available.
|
||||
* @return The information on the file, or \c nullptr if the file is not available.
|
||||
*/
|
||||
const FiosItem *FileList::FindItem(const char *file)
|
||||
{
|
||||
@@ -130,14 +130,14 @@ const FiosItem *FileList::FindItem(const char *file)
|
||||
if (strcmp(long_file, item->title) == 0) return item;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get descriptive texts. Returns the path and free space
|
||||
* left on the device
|
||||
* @param path string describing the path
|
||||
* @param total_free total free space in megabytes, optional (can be NULL)
|
||||
* @param total_free total free space in megabytes, optional (can be nullptr)
|
||||
* @return StringID describing the path (free space or failure)
|
||||
*/
|
||||
StringID FiosGetDescText(const char **path, uint64 *total_free)
|
||||
@@ -149,7 +149,7 @@ StringID FiosGetDescText(const char **path, uint64 *total_free)
|
||||
/**
|
||||
* Browse to a new path based on the passed \a item, starting at #_fios_path.
|
||||
* @param *item Item telling us what to do.
|
||||
* @return A filename w/path if we reached a file, otherwise \c NULL.
|
||||
* @return A filename w/path if we reached a file, otherwise \c nullptr.
|
||||
*/
|
||||
const char *FiosBrowseTo(const FiosItem *item)
|
||||
{
|
||||
@@ -164,13 +164,13 @@ const char *FiosBrowseTo(const FiosItem *item)
|
||||
break;
|
||||
|
||||
case FIOS_TYPE_PARENT: {
|
||||
/* Check for possible NULL ptr */
|
||||
/* Check for possible nullptr ptr */
|
||||
char *s = strrchr(_fios_path, PATHSEPCHAR);
|
||||
if (s != NULL && s != _fios_path) {
|
||||
if (s != nullptr && s != _fios_path) {
|
||||
s[0] = '\0'; // Remove last path separator character, so we can go up one level.
|
||||
}
|
||||
s = strrchr(_fios_path, PATHSEPCHAR);
|
||||
if (s != NULL) {
|
||||
if (s != nullptr) {
|
||||
s[1] = '\0'; // go up a directory
|
||||
}
|
||||
break;
|
||||
@@ -194,13 +194,13 @@ const char *FiosBrowseTo(const FiosItem *item)
|
||||
return item->name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a filename from its components in destination buffer \a buf.
|
||||
* @param buf Destination buffer.
|
||||
* @param path Directory path, may be \c NULL.
|
||||
* @param path Directory path, may be \c nullptr.
|
||||
* @param name Filename.
|
||||
* @param ext Filename extension (use \c "" for no extension).
|
||||
* @param last Last element of buffer \a buf.
|
||||
@@ -211,7 +211,7 @@ static void FiosMakeFilename(char *buf, const char *path, const char *name, cons
|
||||
|
||||
/* Don't append the extension if it is already there */
|
||||
period = strrchr(name, '.');
|
||||
if (period != NULL && strcasecmp(period, ext) == 0) ext = "";
|
||||
if (period != nullptr && strcasecmp(period, ext) == 0) ext = "";
|
||||
seprintf(buf, last, "%s" PATHSEP "%s%s", path, name, ext);
|
||||
}
|
||||
|
||||
@@ -288,7 +288,7 @@ public:
|
||||
bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, const char *tar_filename)
|
||||
{
|
||||
const char *ext = strrchr(filename, '.');
|
||||
if (ext == NULL) return false;
|
||||
if (ext == nullptr) return false;
|
||||
|
||||
char fios_title[64];
|
||||
fios_title[0] = '\0'; // reset the title;
|
||||
@@ -320,7 +320,7 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons
|
||||
const char *t = fios_title;
|
||||
if (StrEmpty(fios_title)) {
|
||||
t = strrchr(filename, PATHSEPCHAR);
|
||||
t = (t == NULL) ? filename : (t + 1);
|
||||
t = (t == nullptr) ? filename : (t + 1);
|
||||
}
|
||||
strecpy(fios->title, t, lastof(fios->title));
|
||||
str_validate(fios->title, lastof(fios->title));
|
||||
@@ -357,8 +357,8 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c
|
||||
}
|
||||
|
||||
/* Show subdirectories */
|
||||
if ((dir = ttd_opendir(_fios_path)) != NULL) {
|
||||
while ((dirent = readdir(dir)) != NULL) {
|
||||
if ((dir = ttd_opendir(_fios_path)) != nullptr) {
|
||||
while ((dirent = readdir(dir)) != nullptr) {
|
||||
strecpy(d_name, FS2OTTD(dirent->d_name), lastof(d_name));
|
||||
|
||||
/* found file must be directory, but not '.' or '..' */
|
||||
@@ -390,9 +390,9 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c
|
||||
/* Show files */
|
||||
FiosFileScanner scanner(fop, callback_proc, file_list);
|
||||
if (subdir == NO_DIRECTORY) {
|
||||
scanner.Scan(NULL, _fios_path, false);
|
||||
scanner.Scan(nullptr, _fios_path, false);
|
||||
} else {
|
||||
scanner.Scan(NULL, subdir, true, true);
|
||||
scanner.Scan(nullptr, subdir, true, true);
|
||||
}
|
||||
|
||||
QSortT(file_list.Get(sort_start), file_list.Length() - sort_start, CompareFiosItems);
|
||||
@@ -418,7 +418,7 @@ static void GetFileTitle(const char *file, char *title, const char *last, Subdir
|
||||
strecat(buf, ".title", lastof(buf));
|
||||
|
||||
FILE *f = FioFOpenFile(buf, "r", subdir);
|
||||
if (f == NULL) return;
|
||||
if (f == nullptr) return;
|
||||
|
||||
size_t read = fread(title, 1, last - title, f);
|
||||
assert(title + read <= last);
|
||||
@@ -432,8 +432,8 @@ static void GetFileTitle(const char *file, char *title, const char *last, Subdir
|
||||
* @param fop Purpose of collecting the list.
|
||||
* @param file Name of the file to check.
|
||||
* @param ext A pointer to the extension identifier inside file
|
||||
* @param title Buffer if a callback wants to lookup the title of the file; NULL to skip the lookup
|
||||
* @param last Last available byte in buffer (to prevent buffer overflows); not used when title == NULL
|
||||
* @param title Buffer if a callback wants to lookup the title of the file; nullptr to skip the lookup
|
||||
* @param last Last available byte in buffer (to prevent buffer overflows); not used when title == nullptr
|
||||
* @return a FIOS_TYPE_* type of the found file, FIOS_TYPE_INVALID if not a savegame
|
||||
* @see FiosGetFileList
|
||||
* @see FiosGetSavegameList
|
||||
@@ -447,7 +447,7 @@ FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, co
|
||||
* .SV2 Transport Tycoon Deluxe (Patch) saved 2-player game */
|
||||
|
||||
/* Don't crash if we supply no extension */
|
||||
if (ext == NULL) return FIOS_TYPE_INVALID;
|
||||
if (ext == nullptr) return FIOS_TYPE_INVALID;
|
||||
|
||||
if (strcasecmp(ext, ".sav") == 0) {
|
||||
GetFileTitle(file, title, last, SAVE_DIR);
|
||||
@@ -457,7 +457,7 @@ FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, co
|
||||
if (fop == SLO_LOAD) {
|
||||
if (strcasecmp(ext, ".ss1") == 0 || strcasecmp(ext, ".sv1") == 0 ||
|
||||
strcasecmp(ext, ".sv2") == 0) {
|
||||
if (title != NULL) GetOldSaveGameName(file, title, last);
|
||||
if (title != nullptr) GetOldSaveGameName(file, title, last);
|
||||
return FIOS_TYPE_OLDFILE;
|
||||
}
|
||||
}
|
||||
@@ -473,10 +473,10 @@ FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const char *file, co
|
||||
*/
|
||||
void FiosGetSavegameList(SaveLoadOperation fop, FileList &file_list)
|
||||
{
|
||||
static char *fios_save_path = NULL;
|
||||
static char *fios_save_path_last = NULL;
|
||||
static char *fios_save_path = nullptr;
|
||||
static char *fios_save_path_last = nullptr;
|
||||
|
||||
if (fios_save_path == NULL) {
|
||||
if (fios_save_path == nullptr) {
|
||||
fios_save_path = MallocT<char>(MAX_PATH);
|
||||
fios_save_path_last = fios_save_path + MAX_PATH - 1;
|
||||
FioGetDirectory(fios_save_path, fios_save_path_last, SAVE_DIR);
|
||||
@@ -528,11 +528,11 @@ static FiosType FiosGetScenarioListCallback(SaveLoadOperation fop, const char *f
|
||||
*/
|
||||
void FiosGetScenarioList(SaveLoadOperation fop, FileList &file_list)
|
||||
{
|
||||
static char *fios_scn_path = NULL;
|
||||
static char *fios_scn_path_last = NULL;
|
||||
static char *fios_scn_path = nullptr;
|
||||
static char *fios_scn_path_last = nullptr;
|
||||
|
||||
/* Copy the default path on first run or on 'New Game' */
|
||||
if (fios_scn_path == NULL) {
|
||||
if (fios_scn_path == nullptr) {
|
||||
fios_scn_path = MallocT<char>(MAX_PATH);
|
||||
fios_scn_path_last = fios_scn_path + MAX_PATH - 1;
|
||||
FioGetDirectory(fios_scn_path, fios_scn_path_last, SCENARIO_DIR);
|
||||
@@ -599,10 +599,10 @@ static FiosType FiosGetHeightmapListCallback(SaveLoadOperation fop, const char *
|
||||
*/
|
||||
void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list)
|
||||
{
|
||||
static char *fios_hmap_path = NULL;
|
||||
static char *fios_hmap_path_last = NULL;
|
||||
static char *fios_hmap_path = nullptr;
|
||||
static char *fios_hmap_path_last = nullptr;
|
||||
|
||||
if (fios_hmap_path == NULL) {
|
||||
if (fios_hmap_path == nullptr) {
|
||||
fios_hmap_path = MallocT<char>(MAX_PATH);
|
||||
fios_hmap_path_last = fios_hmap_path + MAX_PATH - 1;
|
||||
FioGetDirectory(fios_hmap_path, fios_hmap_path_last, HEIGHTMAP_DIR);
|
||||
@@ -624,9 +624,9 @@ void FiosGetHeightmapList(SaveLoadOperation fop, FileList &file_list)
|
||||
*/
|
||||
const char *FiosGetScreenshotDir()
|
||||
{
|
||||
static char *fios_screenshot_path = NULL;
|
||||
static char *fios_screenshot_path = nullptr;
|
||||
|
||||
if (fios_screenshot_path == NULL) {
|
||||
if (fios_screenshot_path == nullptr) {
|
||||
fios_screenshot_path = MallocT<char>(MAX_PATH);
|
||||
FioGetDirectory(fios_screenshot_path, fios_screenshot_path + MAX_PATH - 1, SCREENSHOT_DIR);
|
||||
}
|
||||
@@ -676,7 +676,7 @@ public:
|
||||
bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override
|
||||
{
|
||||
FILE *f = FioFOpenFile(filename, "r", SCENARIO_DIR);
|
||||
if (f == NULL) return false;
|
||||
if (f == nullptr) return false;
|
||||
|
||||
ScenarioIdentifier id;
|
||||
int fret = fscanf(f, "%i", &id.scenid);
|
||||
@@ -695,7 +695,7 @@ public:
|
||||
strecpy(basename, filename, lastof(basename));
|
||||
*strrchr(basename, '.') = '\0';
|
||||
f = FioFOpenFile(basename, "rb", SCENARIO_DIR, &size);
|
||||
if (f == NULL) return false;
|
||||
if (f == nullptr) return false;
|
||||
|
||||
/* calculate md5sum */
|
||||
while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) {
|
||||
@@ -718,7 +718,7 @@ static ScenarioScanner _scanner;
|
||||
* Find a given scenario based on its unique ID.
|
||||
* @param ci The content info to compare it to.
|
||||
* @param md5sum Whether to look at the md5sum or the id.
|
||||
* @return The filename of the file, else \c NULL.
|
||||
* @return The filename of the file, else \c nullptr.
|
||||
*/
|
||||
const char *FindScenario(const ContentInfo *ci, bool md5sum)
|
||||
{
|
||||
@@ -731,7 +731,7 @@ const char *FindScenario(const ContentInfo *ci, bool md5sum)
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -742,7 +742,7 @@ const char *FindScenario(const ContentInfo *ci, bool md5sum)
|
||||
*/
|
||||
bool HasScenario(const ContentInfo *ci, bool md5sum)
|
||||
{
|
||||
return (FindScenario(ci, md5sum) != NULL);
|
||||
return (FindScenario(ci, md5sum) != nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -48,8 +48,8 @@ struct LoadCheckData {
|
||||
struct LoggedAction *gamelog_action; ///< Gamelog actions
|
||||
uint gamelog_actions; ///< Number of gamelog actions
|
||||
|
||||
LoadCheckData() : error_data(NULL), grfconfig(NULL),
|
||||
grf_compatibility(GLC_NOT_FOUND), gamelog_action(NULL), gamelog_actions(0)
|
||||
LoadCheckData() : error_data(nullptr), grfconfig(nullptr),
|
||||
grf_compatibility(GLC_NOT_FOUND), gamelog_action(nullptr), gamelog_actions(0)
|
||||
{
|
||||
this->Clear();
|
||||
}
|
||||
@@ -77,7 +77,7 @@ struct LoadCheckData {
|
||||
*/
|
||||
bool HasNewGrfs()
|
||||
{
|
||||
return this->checkable && this->error == INVALID_STRING_ID && this->grfconfig != NULL;
|
||||
return this->checkable && this->error == INVALID_STRING_ID && this->grfconfig != nullptr;
|
||||
}
|
||||
|
||||
void Clear();
|
||||
|
@@ -51,7 +51,7 @@ void LoadCheckData::Clear()
|
||||
this->checkable = false;
|
||||
this->error = INVALID_STRING_ID;
|
||||
free(this->error_data);
|
||||
this->error_data = NULL;
|
||||
this->error_data = nullptr;
|
||||
|
||||
this->map_size_x = this->map_size_y = 256; // Default for old savegames which do not store mapsize.
|
||||
this->current_date = 0;
|
||||
@@ -63,7 +63,7 @@ void LoadCheckData::Clear()
|
||||
companies.clear();
|
||||
|
||||
GamelogFree(this->gamelog_action, this->gamelog_actions);
|
||||
this->gamelog_action = NULL;
|
||||
this->gamelog_action = nullptr;
|
||||
this->gamelog_actions = 0;
|
||||
|
||||
ClearGRFConfigList(&this->grfconfig);
|
||||
@@ -275,7 +275,7 @@ private:
|
||||
SaveLoadOperation fop; ///< File operation to perform.
|
||||
FileList fios_items; ///< Save game list.
|
||||
FiosItem o_dir;
|
||||
const FiosItem *selected; ///< Selected game in #fios_items, or \c NULL.
|
||||
const FiosItem *selected; ///< Selected game in #fios_items, or \c nullptr.
|
||||
Scrollbar *vscroll;
|
||||
|
||||
StringFilter string_filter; ///< Filter for available games.
|
||||
@@ -419,7 +419,7 @@ public:
|
||||
break;
|
||||
|
||||
case WID_SL_BACKGROUND: {
|
||||
static const char *path = NULL;
|
||||
static const char *path = nullptr;
|
||||
static StringID str = STR_ERROR_UNABLE_TO_READ_DRIVE;
|
||||
static uint64 tot = 0;
|
||||
|
||||
@@ -463,7 +463,7 @@ public:
|
||||
r.right - WD_FRAMERECT_RIGHT, r.top + FONT_HEIGHT_NORMAL * 2 + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM, PC_GREY);
|
||||
DrawString(r.left, r.right, r.top + FONT_HEIGHT_NORMAL / 2 + WD_FRAMERECT_TOP, STR_SAVELOAD_DETAIL_CAPTION, TC_FROMSTRING, SA_HOR_CENTER);
|
||||
|
||||
if (this->selected == NULL) break;
|
||||
if (this->selected == nullptr) break;
|
||||
|
||||
uint y = r.top + FONT_HEIGHT_NORMAL * 2 + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
|
||||
uint y_max = r.bottom - FONT_HEIGHT_NORMAL - WD_FRAMERECT_BOTTOM;
|
||||
@@ -530,7 +530,7 @@ public:
|
||||
if (y > y_max) break;
|
||||
|
||||
/* NewGrf compatibility */
|
||||
SetDParam(0, _load_check_data.grfconfig == NULL ? STR_NEWGRF_LIST_NONE :
|
||||
SetDParam(0, _load_check_data.grfconfig == nullptr ? STR_NEWGRF_LIST_NONE :
|
||||
STR_NEWGRF_LIST_ALL_FOUND + _load_check_data.grf_compatibility);
|
||||
DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_SAVELOAD_DETAIL_GRFSTATUS);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
@@ -546,7 +546,7 @@ public:
|
||||
for (auto &pair : _load_check_data.companies) {
|
||||
SetDParam(0, pair.first + 1);
|
||||
const CompanyProperties &c = *pair.second;
|
||||
if (c.name != NULL) {
|
||||
if (c.name != nullptr) {
|
||||
SetDParam(1, STR_JUST_RAW_STRING);
|
||||
SetDParamStr(2, c.name);
|
||||
} else {
|
||||
@@ -620,7 +620,7 @@ public:
|
||||
break;
|
||||
|
||||
case WID_SL_LOAD_BUTTON:
|
||||
if (this->selected != NULL && !_load_check_data.HasErrors()) {
|
||||
if (this->selected != nullptr && !_load_check_data.HasErrors()) {
|
||||
const char *name = FiosBrowseTo(this->selected);
|
||||
_file_to_saveload.SetMode(this->selected->type);
|
||||
_file_to_saveload.SetName(name);
|
||||
@@ -665,7 +665,7 @@ public:
|
||||
const FiosItem *file = this->fios_items.Get(y);
|
||||
|
||||
const char *name = FiosBrowseTo(file);
|
||||
if (name != NULL) {
|
||||
if (name != nullptr) {
|
||||
if (click_count == 1) {
|
||||
if (this->selected != file) {
|
||||
this->selected = file;
|
||||
@@ -713,8 +713,8 @@ public:
|
||||
assert(this->fop == SLO_LOAD);
|
||||
switch (this->abstract_filetype) {
|
||||
default: NOT_REACHED();
|
||||
case FT_SCENARIO: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_SCENARIO); break;
|
||||
case FT_HEIGHTMAP: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_HEIGHTMAP); break;
|
||||
case FT_SCENARIO: ShowNetworkContentListWindow(nullptr, CONTENT_TYPE_SCENARIO); break;
|
||||
case FT_HEIGHTMAP: ShowNetworkContentListWindow(nullptr, CONTENT_TYPE_HEIGHTMAP); break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -795,14 +795,14 @@ public:
|
||||
switch (data) {
|
||||
case SLIWD_RESCAN_FILES:
|
||||
/* Rescan files */
|
||||
this->selected = NULL;
|
||||
this->selected = nullptr;
|
||||
_load_check_data.Clear();
|
||||
if (!gui_scope) break;
|
||||
|
||||
_fios_path_changed = true;
|
||||
this->fios_items.BuildFileList(this->abstract_filetype, this->fop);
|
||||
this->vscroll->SetCount((uint)this->fios_items.Length());
|
||||
this->selected = NULL;
|
||||
this->selected = nullptr;
|
||||
_load_check_data.Clear();
|
||||
|
||||
/* We reset the files filtered */
|
||||
@@ -818,12 +818,12 @@ public:
|
||||
|
||||
switch (this->abstract_filetype) {
|
||||
case FT_HEIGHTMAP:
|
||||
this->SetWidgetDisabledState(WID_SL_LOAD_BUTTON, this->selected == NULL || _load_check_data.HasErrors());
|
||||
this->SetWidgetDisabledState(WID_SL_LOAD_BUTTON, this->selected == nullptr || _load_check_data.HasErrors());
|
||||
break;
|
||||
|
||||
case FT_SAVEGAME:
|
||||
case FT_SCENARIO: {
|
||||
bool disabled = this->selected == NULL || _load_check_data.HasErrors();
|
||||
bool disabled = this->selected == nullptr || _load_check_data.HasErrors();
|
||||
if (!_settings_client.gui.UserIsAllowedToChangeNewGRFs()) {
|
||||
disabled |= _load_check_data.HasNewGrfs() && _load_check_data.grf_compatibility == GLC_NOT_FOUND;
|
||||
}
|
||||
@@ -858,7 +858,7 @@ public:
|
||||
|
||||
if (&(this->fios_items[i]) == this->selected && this->fios_items_shown[i] == false) {
|
||||
/* The selected element has been filtered out */
|
||||
this->selected = NULL;
|
||||
this->selected = nullptr;
|
||||
this->OnInvalidateData(SLIWD_SELECTION_CHANGES);
|
||||
}
|
||||
}
|
||||
|
@@ -41,7 +41,7 @@ FontCache::FontCache(FontSize fs) : parent(FontCache::Get(fs)), fs(fs), height(_
|
||||
ascender(_default_font_ascender[fs]), descender(_default_font_ascender[fs] - _default_font_height[fs]),
|
||||
units_per_em(1)
|
||||
{
|
||||
assert(this->parent == NULL || this->fs == this->parent->fs);
|
||||
assert(this->parent == nullptr || this->fs == this->parent->fs);
|
||||
FontCache::caches[this->fs] = this;
|
||||
font_height_cache[this->fs] = this->height;
|
||||
Layouter::ResetFontCache(this->fs);
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
virtual int GetHeight() const;
|
||||
virtual bool GetDrawGlyphShadow();
|
||||
virtual GlyphID MapCharToGlyph(WChar key) { assert(IsPrintable(key)); return SPRITE_GLYPH | key; }
|
||||
virtual const void *GetFontTable(uint32 tag, size_t &length) { length = 0; return NULL; }
|
||||
virtual const void *GetFontTable(uint32 tag, size_t &length) { length = 0; return nullptr; }
|
||||
virtual const char *GetFontName() { return "sprite"; }
|
||||
virtual bool IsBuiltInFont() { return true; }
|
||||
};
|
||||
@@ -82,7 +82,7 @@ public:
|
||||
* Create a new sprite font cache.
|
||||
* @param fs The font size to create the cache for.
|
||||
*/
|
||||
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs), glyph_to_spriteid_map(NULL)
|
||||
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs), glyph_to_spriteid_map(nullptr)
|
||||
{
|
||||
this->InitializeUnicodeGlyphMap();
|
||||
}
|
||||
@@ -97,14 +97,14 @@ SpriteFontCache::~SpriteFontCache()
|
||||
|
||||
SpriteID SpriteFontCache::GetUnicodeGlyph(GlyphID key)
|
||||
{
|
||||
if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == NULL) return 0;
|
||||
if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) return 0;
|
||||
return this->glyph_to_spriteid_map[GB(key, 8, 8)][GB(key, 0, 8)];
|
||||
}
|
||||
|
||||
void SpriteFontCache::SetUnicodeGlyph(GlyphID key, SpriteID sprite)
|
||||
{
|
||||
if (this->glyph_to_spriteid_map == NULL) this->glyph_to_spriteid_map = CallocT<SpriteID*>(256);
|
||||
if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == NULL) this->glyph_to_spriteid_map[GB(key, 8, 8)] = CallocT<SpriteID>(256);
|
||||
if (this->glyph_to_spriteid_map == nullptr) this->glyph_to_spriteid_map = CallocT<SpriteID*>(256);
|
||||
if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) this->glyph_to_spriteid_map[GB(key, 8, 8)] = CallocT<SpriteID>(256);
|
||||
this->glyph_to_spriteid_map[GB(key, 8, 8)][GB(key, 0, 8)] = sprite;
|
||||
}
|
||||
|
||||
@@ -149,13 +149,13 @@ void SpriteFontCache::InitializeUnicodeGlyphMap()
|
||||
*/
|
||||
void SpriteFontCache::ClearGlyphToSpriteMap()
|
||||
{
|
||||
if (this->glyph_to_spriteid_map == NULL) return;
|
||||
if (this->glyph_to_spriteid_map == nullptr) return;
|
||||
|
||||
for (uint i = 0; i < 256; i++) {
|
||||
free(this->glyph_to_spriteid_map[i]);
|
||||
}
|
||||
free(this->glyph_to_spriteid_map);
|
||||
this->glyph_to_spriteid_map = NULL;
|
||||
this->glyph_to_spriteid_map = nullptr;
|
||||
}
|
||||
|
||||
void SpriteFontCache::ClearFontCache()
|
||||
@@ -262,7 +262,7 @@ public:
|
||||
virtual bool IsBuiltInFont() { return false; }
|
||||
};
|
||||
|
||||
FT_Library _library = NULL;
|
||||
FT_Library _library = nullptr;
|
||||
|
||||
FreeTypeSettings _freetype;
|
||||
|
||||
@@ -275,9 +275,9 @@ static const byte SHADOW_COLOUR = 2;
|
||||
* @param face The font that has to be loaded.
|
||||
* @param pixels The number of pixels this font should be high.
|
||||
*/
|
||||
FreeTypeFontCache::FreeTypeFontCache(FontSize fs, FT_Face face, int pixels) : FontCache(fs), face(face), req_size(pixels), glyph_to_sprite(NULL)
|
||||
FreeTypeFontCache::FreeTypeFontCache(FontSize fs, FT_Face face, int pixels) : FontCache(fs), face(face), req_size(pixels), glyph_to_sprite(nullptr)
|
||||
{
|
||||
assert(face != NULL);
|
||||
assert(face != nullptr);
|
||||
|
||||
this->SetFontSize(fs, face, pixels);
|
||||
}
|
||||
@@ -290,7 +290,7 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
|
||||
pixels = scaled_height;
|
||||
|
||||
TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head);
|
||||
if (head != NULL) {
|
||||
if (head != nullptr) {
|
||||
/* Font height is minimum height plus the difference between the default
|
||||
* height for this font size and the small size. */
|
||||
int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]);
|
||||
@@ -344,7 +344,7 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels)
|
||||
*/
|
||||
static void LoadFreeTypeFont(FontSize fs)
|
||||
{
|
||||
FreeTypeSubSetting *settings = NULL;
|
||||
FreeTypeSubSetting *settings = nullptr;
|
||||
switch (fs) {
|
||||
default: NOT_REACHED();
|
||||
case FS_SMALL: settings = &_freetype.small; break;
|
||||
@@ -355,7 +355,7 @@ static void LoadFreeTypeFont(FontSize fs)
|
||||
|
||||
if (StrEmpty(settings->font)) return;
|
||||
|
||||
if (_library == NULL) {
|
||||
if (_library == nullptr) {
|
||||
if (FT_Init_FreeType(&_library) != FT_Err_Ok) {
|
||||
ShowInfoF("Unable to initialize FreeType, using sprite fonts instead");
|
||||
return;
|
||||
@@ -364,7 +364,7 @@ static void LoadFreeTypeFont(FontSize fs)
|
||||
DEBUG(freetype, 2, "Initialized");
|
||||
}
|
||||
|
||||
FT_Face face = NULL;
|
||||
FT_Face face = nullptr;
|
||||
FT_Error error = FT_New_Face(_library, settings->font, 0, &face);
|
||||
|
||||
if (error != FT_Err_Ok) error = GetFontByFaceName(settings->font, &face);
|
||||
@@ -390,7 +390,7 @@ static void LoadFreeTypeFont(FontSize fs)
|
||||
}
|
||||
}
|
||||
|
||||
if (found != NULL) {
|
||||
if (found != nullptr) {
|
||||
error = FT_Set_Charmap(face, found);
|
||||
if (error == FT_Err_Ok) goto found_face;
|
||||
}
|
||||
@@ -414,7 +414,7 @@ found_face:
|
||||
FreeTypeFontCache::~FreeTypeFontCache()
|
||||
{
|
||||
FT_Done_Face(this->face);
|
||||
this->face = NULL;
|
||||
this->face = nullptr;
|
||||
this->ClearFontCache();
|
||||
|
||||
for (auto &iter : this->font_tables) {
|
||||
@@ -428,12 +428,12 @@ FreeTypeFontCache::~FreeTypeFontCache()
|
||||
void FreeTypeFontCache::ClearFontCache()
|
||||
{
|
||||
/* Font scaling might have changed, determine font size anew if it was automatically selected. */
|
||||
if (this->face != NULL) this->SetFontSize(this->fs, this->face, this->req_size);
|
||||
if (this->face != nullptr) this->SetFontSize(this->fs, this->face, this->req_size);
|
||||
|
||||
if (this->glyph_to_sprite == NULL) return;
|
||||
if (this->glyph_to_sprite == nullptr) return;
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
if (this->glyph_to_sprite[i] == NULL) continue;
|
||||
if (this->glyph_to_sprite[i] == nullptr) continue;
|
||||
|
||||
for (int j = 0; j < 256; j++) {
|
||||
if (this->glyph_to_sprite[i][j].duplicate) continue;
|
||||
@@ -444,27 +444,27 @@ void FreeTypeFontCache::ClearFontCache()
|
||||
}
|
||||
|
||||
free(this->glyph_to_sprite);
|
||||
this->glyph_to_sprite = NULL;
|
||||
this->glyph_to_sprite = nullptr;
|
||||
|
||||
Layouter::ResetFontCache(this->fs);
|
||||
}
|
||||
|
||||
FreeTypeFontCache::GlyphEntry *FreeTypeFontCache::GetGlyphPtr(GlyphID key)
|
||||
{
|
||||
if (this->glyph_to_sprite == NULL) return NULL;
|
||||
if (this->glyph_to_sprite[GB(key, 8, 8)] == NULL) return NULL;
|
||||
if (this->glyph_to_sprite == nullptr) return nullptr;
|
||||
if (this->glyph_to_sprite[GB(key, 8, 8)] == nullptr) return nullptr;
|
||||
return &this->glyph_to_sprite[GB(key, 8, 8)][GB(key, 0, 8)];
|
||||
}
|
||||
|
||||
|
||||
void FreeTypeFontCache::SetGlyphPtr(GlyphID key, const GlyphEntry *glyph, bool duplicate)
|
||||
{
|
||||
if (this->glyph_to_sprite == NULL) {
|
||||
if (this->glyph_to_sprite == nullptr) {
|
||||
DEBUG(freetype, 3, "Allocating root glyph cache for size %u", this->fs);
|
||||
this->glyph_to_sprite = CallocT<GlyphEntry*>(256);
|
||||
}
|
||||
|
||||
if (this->glyph_to_sprite[GB(key, 8, 8)] == NULL) {
|
||||
if (this->glyph_to_sprite[GB(key, 8, 8)] == nullptr) {
|
||||
DEBUG(freetype, 3, "Allocating glyph cache for range 0x%02X00, size %u", GB(key, 8, 8), this->fs);
|
||||
this->glyph_to_sprite[GB(key, 8, 8)] = CallocT<GlyphEntry>(256);
|
||||
}
|
||||
@@ -503,7 +503,7 @@ const Sprite *FreeTypeFontCache::GetGlyph(GlyphID key)
|
||||
|
||||
/* Check for the glyph in our cache */
|
||||
GlyphEntry *glyph = this->GetGlyphPtr(key);
|
||||
if (glyph != NULL && glyph->sprite != NULL) return glyph->sprite;
|
||||
if (glyph != nullptr && glyph->sprite != nullptr) return glyph->sprite;
|
||||
|
||||
FT_GlyphSlot slot = this->face->glyph;
|
||||
|
||||
@@ -541,7 +541,7 @@ const Sprite *FreeTypeFontCache::GetGlyph(GlyphID key)
|
||||
};
|
||||
|
||||
Sprite *spr = BlitterFactory::GetCurrentBlitter()->Encode(&builtin_questionmark, AllocateFont);
|
||||
assert(spr != NULL);
|
||||
assert(spr != nullptr);
|
||||
new_glyph.sprite = spr;
|
||||
new_glyph.width = spr->width + (this->fs != FS_NORMAL);
|
||||
this->SetGlyphPtr(key, &new_glyph, false);
|
||||
@@ -617,7 +617,7 @@ uint FreeTypeFontCache::GetGlyphWidth(GlyphID key)
|
||||
if ((key & SPRITE_GLYPH) != 0) return this->parent->GetGlyphWidth(key);
|
||||
|
||||
GlyphEntry *glyph = this->GetGlyphPtr(key);
|
||||
if (glyph == NULL || glyph->sprite == NULL) {
|
||||
if (glyph == nullptr || glyph->sprite == nullptr) {
|
||||
this->GetGlyph(key);
|
||||
glyph = this->GetGlyphPtr(key);
|
||||
}
|
||||
@@ -645,9 +645,9 @@ const void *FreeTypeFontCache::GetFontTable(uint32 tag, size_t &length)
|
||||
}
|
||||
|
||||
FT_ULong len = 0;
|
||||
FT_Byte *result = NULL;
|
||||
FT_Byte *result = nullptr;
|
||||
|
||||
FT_Load_Sfnt_Table(this->face, tag, 0, NULL, &len);
|
||||
FT_Load_Sfnt_Table(this->face, tag, 0, nullptr, &len);
|
||||
|
||||
if (len > 0) {
|
||||
result = MallocT<FT_Byte>(len);
|
||||
@@ -691,6 +691,6 @@ void UninitFreeType()
|
||||
|
||||
#ifdef WITH_FREETYPE
|
||||
FT_Done_FreeType(_library);
|
||||
_library = NULL;
|
||||
_library = nullptr;
|
||||
#endif /* WITH_FREETYPE */
|
||||
}
|
||||
|
@@ -151,7 +151,7 @@ public:
|
||||
*/
|
||||
inline bool HasParent()
|
||||
{
|
||||
return this->parent != NULL;
|
||||
return this->parent != nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -53,7 +53,7 @@ const char *GetShortPath(const TCHAR *long_path)
|
||||
#ifdef UNICODE
|
||||
WCHAR short_path_w[MAX_PATH];
|
||||
GetShortPathName(long_path, short_path_w, lengthof(short_path_w));
|
||||
WideCharToMultiByte(CP_ACP, 0, short_path_w, -1, short_path, lengthof(short_path), NULL, NULL);
|
||||
WideCharToMultiByte(CP_ACP, 0, short_path_w, -1, short_path, lengthof(short_path), nullptr, nullptr);
|
||||
#else
|
||||
/* Technically not needed, but do it for consistency. */
|
||||
GetShortPathName(long_path, short_path, lengthof(short_path));
|
||||
@@ -101,7 +101,7 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
||||
DWORD vbuflen = lengthof(vbuffer);
|
||||
DWORD dbuflen = lengthof(dbuffer);
|
||||
|
||||
ret = RegEnumValue(hKey, index, vbuffer, &vbuflen, NULL, NULL, (byte*)dbuffer, &dbuflen);
|
||||
ret = RegEnumValue(hKey, index, vbuffer, &vbuflen, nullptr, nullptr, (byte*)dbuffer, &dbuflen);
|
||||
if (ret != ERROR_SUCCESS) goto registry_no_font_found;
|
||||
|
||||
/* The font names in the registry are of the following 3 forms:
|
||||
@@ -114,16 +114,16 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
||||
* by '&'. Our best bet will be to do substr match for the fontname
|
||||
* and then let FreeType figure out which index to load */
|
||||
s = _tcschr(vbuffer, _T('('));
|
||||
if (s != NULL) s[-1] = '\0';
|
||||
if (s != nullptr) s[-1] = '\0';
|
||||
|
||||
if (_tcschr(vbuffer, _T('&')) == NULL) {
|
||||
if (_tcschr(vbuffer, _T('&')) == nullptr) {
|
||||
if (_tcsicmp(vbuffer, font_namep) == 0) break;
|
||||
} else {
|
||||
if (_tcsstr(vbuffer, font_namep) != NULL) break;
|
||||
if (_tcsstr(vbuffer, font_namep) != nullptr) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!SUCCEEDED(OTTDSHGetFolderPath(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, vbuffer))) {
|
||||
if (!SUCCEEDED(OTTDSHGetFolderPath(nullptr, CSIDL_FONTS, nullptr, SHGFP_TYPE_CURRENT, vbuffer))) {
|
||||
DEBUG(freetype, 0, "SHGetFolderPath cannot return fonts directory");
|
||||
goto folder_error;
|
||||
}
|
||||
@@ -175,7 +175,7 @@ registry_no_font_found:
|
||||
static const char *GetEnglishFontName(const ENUMLOGFONTEX *logfont)
|
||||
{
|
||||
static char font_name[MAX_PATH];
|
||||
const char *ret_font_name = NULL;
|
||||
const char *ret_font_name = nullptr;
|
||||
uint pos = 0;
|
||||
HDC dc;
|
||||
HGDIOBJ oldfont;
|
||||
@@ -184,11 +184,11 @@ static const char *GetEnglishFontName(const ENUMLOGFONTEX *logfont)
|
||||
uint16 format, count, stringOffset, platformId, encodingId, languageId, nameId, length, offset;
|
||||
|
||||
HFONT font = CreateFontIndirect(&logfont->elfLogFont);
|
||||
if (font == NULL) goto err1;
|
||||
if (font == nullptr) goto err1;
|
||||
|
||||
dc = GetDC(NULL);
|
||||
dc = GetDC(nullptr);
|
||||
oldfont = SelectObject(dc, font);
|
||||
dw = GetFontData(dc, 'eman', 0, NULL, 0);
|
||||
dw = GetFontData(dc, 'eman', 0, nullptr, 0);
|
||||
if (dw == GDI_ERROR) goto err2;
|
||||
|
||||
buf = MallocT<byte>(dw);
|
||||
@@ -236,10 +236,10 @@ err3:
|
||||
free(buf);
|
||||
err2:
|
||||
SelectObject(dc, oldfont);
|
||||
ReleaseDC(NULL, dc);
|
||||
ReleaseDC(nullptr, dc);
|
||||
DeleteObject(font);
|
||||
err1:
|
||||
return ret_font_name == NULL ? WIDE_TO_MB((const TCHAR*)logfont->elfFullName) : ret_font_name;
|
||||
return ret_font_name == nullptr ? WIDE_TO_MB((const TCHAR*)logfont->elfFullName) : ret_font_name;
|
||||
}
|
||||
|
||||
class FontList {
|
||||
@@ -249,10 +249,10 @@ protected:
|
||||
uint capacity;
|
||||
|
||||
public:
|
||||
FontList() : fonts(NULL), items(0), capacity(0) { };
|
||||
FontList() : fonts(nullptr), items(0), capacity(0) { };
|
||||
|
||||
~FontList() {
|
||||
if (this->fonts == NULL) return;
|
||||
if (this->fonts == nullptr) return;
|
||||
|
||||
for (uint i = 0; i < this->items; i++) {
|
||||
free(this->fonts[i]);
|
||||
@@ -303,12 +303,12 @@ static int CALLBACK EnumFontCallback(const ENUMLOGFONTEX *logfont, const NEWTEXT
|
||||
FONTSIGNATURE fs;
|
||||
memset(&fs, 0, sizeof(fs));
|
||||
HFONT font = CreateFontIndirect(&logfont->elfLogFont);
|
||||
if (font != NULL) {
|
||||
HDC dc = GetDC(NULL);
|
||||
if (font != nullptr) {
|
||||
HDC dc = GetDC(nullptr);
|
||||
HGDIOBJ oldfont = SelectObject(dc, font);
|
||||
GetTextCharsetInfo(dc, &fs, 0);
|
||||
SelectObject(dc, oldfont);
|
||||
ReleaseDC(NULL, dc);
|
||||
ReleaseDC(nullptr, dc);
|
||||
DeleteObject(font);
|
||||
}
|
||||
if ((fs.fsCsb[0] & info->locale.lsCsbSupported[0]) == 0 && (fs.fsCsb[1] & info->locale.lsCsbSupported[1]) == 0) return 1;
|
||||
@@ -322,7 +322,7 @@ static int CALLBACK EnumFontCallback(const ENUMLOGFONTEX *logfont, const NEWTEXT
|
||||
strecpy(font_name + strlen(font_name) + 1, english_name, lastof(font_name));
|
||||
|
||||
/* Check whether we can actually load the font. */
|
||||
bool ft_init = _library != NULL;
|
||||
bool ft_init = _library != nullptr;
|
||||
bool found = false;
|
||||
FT_Face face;
|
||||
/* Init FreeType if needed. */
|
||||
@@ -333,13 +333,13 @@ static int CALLBACK EnumFontCallback(const ENUMLOGFONTEX *logfont, const NEWTEXT
|
||||
if (!ft_init) {
|
||||
/* Uninit FreeType if we did the init. */
|
||||
FT_Done_FreeType(_library);
|
||||
_library = NULL;
|
||||
_library = nullptr;
|
||||
}
|
||||
|
||||
if (!found) return 1;
|
||||
|
||||
info->callback->SetFontNames(info->settings, font_name);
|
||||
if (info->callback->FindMissingGlyphs(NULL)) return 1;
|
||||
if (info->callback->FindMissingGlyphs(nullptr)) return 1;
|
||||
DEBUG(freetype, 1, "Fallback font: %s (%s)", font_name, english_name);
|
||||
return 0; // stop enumerating
|
||||
}
|
||||
@@ -362,9 +362,9 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
font.lfFaceName[0] = '\0';
|
||||
font.lfPitchAndFamily = 0;
|
||||
|
||||
HDC dc = GetDC(NULL);
|
||||
HDC dc = GetDC(nullptr);
|
||||
int ret = EnumFontFamiliesEx(dc, &font, (FONTENUMPROC)&EnumFontCallback, (LPARAM)&langInfo, 0);
|
||||
ReleaseDC(NULL, dc);
|
||||
ReleaseDC(nullptr, dc);
|
||||
return ret == 0;
|
||||
}
|
||||
|
||||
@@ -400,14 +400,14 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
||||
CFRelease(name);
|
||||
|
||||
/* Loop over all matches until we can get a path for one of them. */
|
||||
for (CFIndex i = 0; descs != NULL && i < CFArrayGetCount(descs) && os_err != noErr; i++) {
|
||||
CTFontRef font = CTFontCreateWithFontDescriptor((CTFontDescriptorRef)CFArrayGetValueAtIndex(descs, i), 0.0, NULL);
|
||||
for (CFIndex i = 0; descs != nullptr && i < CFArrayGetCount(descs) && os_err != noErr; i++) {
|
||||
CTFontRef font = CTFontCreateWithFontDescriptor((CTFontDescriptorRef)CFArrayGetValueAtIndex(descs, i), 0.0, nullptr);
|
||||
CFURLRef fontURL = (CFURLRef)CTFontCopyAttribute(font, kCTFontURLAttribute);
|
||||
if (CFURLGetFileSystemRepresentation(fontURL, true, file_path, lengthof(file_path))) os_err = noErr;
|
||||
CFRelease(font);
|
||||
CFRelease(fontURL);
|
||||
}
|
||||
if (descs != NULL) CFRelease(descs);
|
||||
if (descs != nullptr) CFRelease(descs);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
@@ -467,7 +467,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
/* Just copy the first part of the isocode. */
|
||||
strecpy(lang, language_isocode, lastof(lang));
|
||||
char *sep = strchr(lang, '_');
|
||||
if (sep != NULL) *sep = '\0';
|
||||
if (sep != nullptr) *sep = '\0';
|
||||
}
|
||||
|
||||
/* Create a font descriptor matching the wanted language and latin (english) glyphs. */
|
||||
@@ -487,7 +487,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
CFRelease(mandatory_attribs);
|
||||
CFRelease(lang_desc);
|
||||
|
||||
for (CFIndex i = 0; descs != NULL && i < CFArrayGetCount(descs); i++) {
|
||||
for (CFIndex i = 0; descs != nullptr && i < CFArrayGetCount(descs); i++) {
|
||||
CTFontDescriptorRef font = (CTFontDescriptorRef)CFArrayGetValueAtIndex(descs, i);
|
||||
|
||||
/* Get font traits. */
|
||||
@@ -515,13 +515,13 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
|
||||
/* Save result. */
|
||||
callback->SetFontNames(settings, name);
|
||||
if (!callback->FindMissingGlyphs(NULL)) {
|
||||
if (!callback->FindMissingGlyphs(nullptr)) {
|
||||
DEBUG(freetype, 2, "CT-Font for %s: %s", language_isocode, name);
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (descs != NULL) CFRelease(descs);
|
||||
if (descs != nullptr) CFRelease(descs);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
@@ -530,7 +530,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
* are available to the application. */
|
||||
ATSFontIterator itr;
|
||||
ATSFontRef font;
|
||||
ATSFontIteratorCreate(kATSFontContextLocal, NULL, NULL, kATSOptionFlagsDefaultScope, &itr);
|
||||
ATSFontIteratorCreate(kATSFontContextLocal, nullptr, nullptr, kATSOptionFlagsDefaultScope, &itr);
|
||||
while (!result && ATSFontIteratorNext(itr, &font) == noErr) {
|
||||
/* Get font name. */
|
||||
char name[128];
|
||||
@@ -545,14 +545,14 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
if (monospace != callback->Monospace()) continue;
|
||||
|
||||
/* We only want the base font and not bold or italic variants. */
|
||||
if (strstr(name, "Italic") != NULL || strstr(name, "Bold")) continue;
|
||||
if (strstr(name, "Italic") != nullptr || strstr(name, "Bold")) continue;
|
||||
|
||||
/* Skip some inappropriate or ugly looking fonts that have better alternatives. */
|
||||
if (name[0] == '.' || strncmp(name, "Apple Symbols", 13) == 0 || strncmp(name, "LastResort", 10) == 0) continue;
|
||||
|
||||
/* Save result. */
|
||||
callback->SetFontNames(settings, name);
|
||||
if (!callback->FindMissingGlyphs(NULL)) {
|
||||
if (!callback->FindMissingGlyphs(nullptr)) {
|
||||
DEBUG(freetype, 2, "ATS-Font for %s: %s", language_isocode, name);
|
||||
result = true;
|
||||
break;
|
||||
@@ -566,10 +566,10 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
/* For some OS versions, the font 'Arial Unicode MS' does not report all languages it
|
||||
* supports. If we didn't find any other font, just try it, maybe we get lucky. */
|
||||
callback->SetFontNames(settings, "Arial Unicode MS");
|
||||
result = !callback->FindMissingGlyphs(NULL);
|
||||
result = !callback->FindMissingGlyphs(nullptr);
|
||||
}
|
||||
|
||||
callback->FindMissingGlyphs(NULL);
|
||||
callback->FindMissingGlyphs(nullptr);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -599,7 +599,7 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
||||
/* Split & strip the font's style */
|
||||
font_family = stredup(font_name);
|
||||
font_style = strchr(font_family, ',');
|
||||
if (font_style != NULL) {
|
||||
if (font_style != nullptr) {
|
||||
font_style[0] = '\0';
|
||||
font_style++;
|
||||
while (*font_style == ' ' || *font_style == '\t') font_style++;
|
||||
@@ -607,13 +607,13 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
||||
|
||||
/* Resolve the name and populate the information structure */
|
||||
pat = FcNameParse((FcChar8*)font_family);
|
||||
if (font_style != NULL) FcPatternAddString(pat, FC_STYLE, (FcChar8*)font_style);
|
||||
if (font_style != nullptr) FcPatternAddString(pat, FC_STYLE, (FcChar8*)font_style);
|
||||
FcConfigSubstitute(0, pat, FcMatchPattern);
|
||||
FcDefaultSubstitute(pat);
|
||||
fs = FcFontSetCreate();
|
||||
match = FcFontMatch(0, pat, &result);
|
||||
|
||||
if (fs != NULL && match != NULL) {
|
||||
if (fs != nullptr && match != nullptr) {
|
||||
int i;
|
||||
FcChar8 *family;
|
||||
FcChar8 *style;
|
||||
@@ -627,7 +627,7 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
||||
FcPatternGetString(fs->fonts[i], FC_STYLE, 0, &style) == FcResultMatch) {
|
||||
|
||||
/* The correct style? */
|
||||
if (font_style != NULL && strcasecmp(font_style, (char*)style) != 0) continue;
|
||||
if (font_style != nullptr && strcasecmp(font_style, (char*)style) != 0) continue;
|
||||
|
||||
/* Font config takes the best shot, which, if the family name is spelled
|
||||
* wrongly a 'random' font, so check whether the family name is the
|
||||
@@ -660,29 +660,29 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
char lang[16];
|
||||
seprintf(lang, lastof(lang), ":lang=%s", language_isocode);
|
||||
char *split = strchr(lang, '_');
|
||||
if (split != NULL) *split = '\0';
|
||||
if (split != nullptr) *split = '\0';
|
||||
|
||||
/* First create a pattern to match the wanted language. */
|
||||
FcPattern *pat = FcNameParse((FcChar8*)lang);
|
||||
/* We only want to know the filename. */
|
||||
FcObjectSet *os = FcObjectSetBuild(FC_FILE, FC_SPACING, FC_SLANT, FC_WEIGHT, NULL);
|
||||
FcObjectSet *os = FcObjectSetBuild(FC_FILE, FC_SPACING, FC_SLANT, FC_WEIGHT, nullptr);
|
||||
/* Get the list of filenames matching the wanted language. */
|
||||
FcFontSet *fs = FcFontList(NULL, pat, os);
|
||||
FcFontSet *fs = FcFontList(nullptr, pat, os);
|
||||
|
||||
/* We don't need these anymore. */
|
||||
FcObjectSetDestroy(os);
|
||||
FcPatternDestroy(pat);
|
||||
|
||||
if (fs != NULL) {
|
||||
if (fs != nullptr) {
|
||||
int best_weight = -1;
|
||||
const char *best_font = NULL;
|
||||
const char *best_font = nullptr;
|
||||
|
||||
for (int i = 0; i < fs->nfont; i++) {
|
||||
FcPattern *font = fs->fonts[i];
|
||||
|
||||
FcChar8 *file = NULL;
|
||||
FcChar8 *file = nullptr;
|
||||
FcResult res = FcPatternGetString(font, FC_FILE, 0, &file);
|
||||
if (res != FcResultMatch || file == NULL) {
|
||||
if (res != FcResultMatch || file == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -701,7 +701,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
|
||||
callback->SetFontNames(settings, (const char*)file);
|
||||
|
||||
bool missing = callback->FindMissingGlyphs(NULL);
|
||||
bool missing = callback->FindMissingGlyphs(nullptr);
|
||||
DEBUG(freetype, 1, "Font \"%s\" misses%s glyphs", file, missing ? "" : " no");
|
||||
|
||||
if (!missing) {
|
||||
@@ -710,7 +710,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
|
||||
}
|
||||
}
|
||||
|
||||
if (best_font != NULL) {
|
||||
if (best_font != nullptr) {
|
||||
ret = true;
|
||||
callback->SetFontNames(settings, best_font);
|
||||
InitFreeType(callback->Monospace());
|
||||
|
@@ -25,7 +25,7 @@
|
||||
} else {
|
||||
config = &_settings_game.game_config;
|
||||
}
|
||||
if (*config == NULL) *config = new GameConfig();
|
||||
if (*config == nullptr) *config = new GameConfig();
|
||||
return *config;
|
||||
}
|
||||
|
||||
@@ -42,5 +42,5 @@ ScriptInfo *GameConfig::FindInfo(const char *name, int version, bool force_exact
|
||||
bool GameConfig::ResetInfo(bool force_exact_match)
|
||||
{
|
||||
this->info = (ScriptInfo *)Game::FindInfo(this->name, force_exact_match ? this->version : -1, force_exact_match);
|
||||
return this->info != NULL;
|
||||
return this->info != nullptr;
|
||||
}
|
||||
|
@@ -25,10 +25,10 @@
|
||||
#include "../safeguards.h"
|
||||
|
||||
/* static */ uint Game::frame_counter = 0;
|
||||
/* static */ GameInfo *Game::info = NULL;
|
||||
/* static */ GameInstance *Game::instance = NULL;
|
||||
/* static */ GameScannerInfo *Game::scanner_info = NULL;
|
||||
/* static */ GameScannerLibrary *Game::scanner_library = NULL;
|
||||
/* static */ GameInfo *Game::info = nullptr;
|
||||
/* static */ GameInstance *Game::instance = nullptr;
|
||||
/* static */ GameScannerInfo *Game::scanner_info = nullptr;
|
||||
/* static */ GameScannerLibrary *Game::scanner_library = nullptr;
|
||||
|
||||
/* static */ void Game::GameLoop()
|
||||
{
|
||||
@@ -36,7 +36,7 @@
|
||||
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
|
||||
return;
|
||||
}
|
||||
if (Game::instance == NULL) {
|
||||
if (Game::instance == nullptr) {
|
||||
PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT);
|
||||
return;
|
||||
}
|
||||
@@ -58,11 +58,11 @@
|
||||
|
||||
/* static */ void Game::Initialize()
|
||||
{
|
||||
if (Game::instance != NULL) Game::Uninitialize(true);
|
||||
if (Game::instance != nullptr) Game::Uninitialize(true);
|
||||
|
||||
Game::frame_counter = 0;
|
||||
|
||||
if (Game::scanner_info == NULL) {
|
||||
if (Game::scanner_info == nullptr) {
|
||||
TarScanner::DoScan(TarScanner::GAME);
|
||||
Game::scanner_info = new GameScannerInfo();
|
||||
Game::scanner_info->Initialize();
|
||||
@@ -73,14 +73,14 @@
|
||||
|
||||
/* static */ void Game::StartNew()
|
||||
{
|
||||
if (Game::instance != NULL) return;
|
||||
if (Game::instance != nullptr) return;
|
||||
|
||||
/* Clients shouldn't start GameScripts */
|
||||
if (_networking && !_network_server) return;
|
||||
|
||||
GameConfig *config = GameConfig::GetConfig(GameConfig::SSS_FORCE_GAME);
|
||||
GameInfo *info = config->GetInfo();
|
||||
if (info == NULL) return;
|
||||
if (info == nullptr) return;
|
||||
|
||||
config->AnchorUnchangeableSettings();
|
||||
|
||||
@@ -101,8 +101,8 @@
|
||||
Backup<CompanyByte> cur_company(_current_company, FILE_LINE);
|
||||
|
||||
delete Game::instance;
|
||||
Game::instance = NULL;
|
||||
Game::info = NULL;
|
||||
Game::instance = nullptr;
|
||||
Game::info = nullptr;
|
||||
|
||||
cur_company.Restore();
|
||||
|
||||
@@ -111,33 +111,33 @@
|
||||
} else {
|
||||
delete Game::scanner_info;
|
||||
delete Game::scanner_library;
|
||||
Game::scanner_info = NULL;
|
||||
Game::scanner_library = NULL;
|
||||
Game::scanner_info = nullptr;
|
||||
Game::scanner_library = nullptr;
|
||||
|
||||
if (_settings_game.game_config != NULL) {
|
||||
if (_settings_game.game_config != nullptr) {
|
||||
delete _settings_game.game_config;
|
||||
_settings_game.game_config = NULL;
|
||||
_settings_game.game_config = nullptr;
|
||||
}
|
||||
if (_settings_newgame.game_config != NULL) {
|
||||
if (_settings_newgame.game_config != nullptr) {
|
||||
delete _settings_newgame.game_config;
|
||||
_settings_newgame.game_config = NULL;
|
||||
_settings_newgame.game_config = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ void Game::Pause()
|
||||
{
|
||||
if (Game::instance != NULL) Game::instance->Pause();
|
||||
if (Game::instance != nullptr) Game::instance->Pause();
|
||||
}
|
||||
|
||||
/* static */ void Game::Unpause()
|
||||
{
|
||||
if (Game::instance != NULL) Game::instance->Unpause();
|
||||
if (Game::instance != nullptr) Game::instance->Unpause();
|
||||
}
|
||||
|
||||
/* static */ bool Game::IsPaused()
|
||||
{
|
||||
return Game::instance != NULL? Game::instance->IsPaused() : false;
|
||||
return Game::instance != nullptr? Game::instance->IsPaused() : false;
|
||||
}
|
||||
|
||||
/* static */ void Game::NewEvent(ScriptEvent *event)
|
||||
@@ -152,7 +152,7 @@
|
||||
}
|
||||
|
||||
/* Check if Game instance is alive */
|
||||
if (Game::instance == NULL) {
|
||||
if (Game::instance == nullptr) {
|
||||
event->Release();
|
||||
return;
|
||||
}
|
||||
@@ -169,23 +169,23 @@
|
||||
{
|
||||
/* Check for both newgame as current game if we can reload the GameInfo inside
|
||||
* the GameConfig. If not, remove the Game from the list. */
|
||||
if (_settings_game.game_config != NULL && _settings_game.game_config->HasScript()) {
|
||||
if (_settings_game.game_config != nullptr && _settings_game.game_config->HasScript()) {
|
||||
if (!_settings_game.game_config->ResetInfo(true)) {
|
||||
DEBUG(script, 0, "After a reload, the GameScript by the name '%s' was no longer found, and removed from the list.", _settings_game.game_config->GetName());
|
||||
_settings_game.game_config->Change(NULL);
|
||||
if (Game::instance != NULL) {
|
||||
_settings_game.game_config->Change(nullptr);
|
||||
if (Game::instance != nullptr) {
|
||||
delete Game::instance;
|
||||
Game::instance = NULL;
|
||||
Game::info = NULL;
|
||||
Game::instance = nullptr;
|
||||
Game::info = nullptr;
|
||||
}
|
||||
} else if (Game::instance != NULL) {
|
||||
} else if (Game::instance != nullptr) {
|
||||
Game::info = _settings_game.game_config->GetInfo();
|
||||
}
|
||||
}
|
||||
if (_settings_newgame.game_config != NULL && _settings_newgame.game_config->HasScript()) {
|
||||
if (_settings_newgame.game_config != nullptr && _settings_newgame.game_config->HasScript()) {
|
||||
if (!_settings_newgame.game_config->ResetInfo(false)) {
|
||||
DEBUG(script, 0, "After a reload, the GameScript by the name '%s' was no longer found, and removed from the list.", _settings_newgame.game_config->GetName());
|
||||
_settings_newgame.game_config->Change(NULL);
|
||||
_settings_newgame.game_config->Change(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -206,7 +206,7 @@
|
||||
|
||||
/* static */ void Game::Save()
|
||||
{
|
||||
if (Game::instance != NULL && (!_networking || _network_server)) {
|
||||
if (Game::instance != nullptr && (!_networking || _network_server)) {
|
||||
Backup<CompanyByte> cur_company(_current_company, OWNER_DEITY, FILE_LINE);
|
||||
Game::instance->Save();
|
||||
cur_company.Restore();
|
||||
@@ -217,7 +217,7 @@
|
||||
|
||||
/* static */ void Game::Load(int version)
|
||||
{
|
||||
if (Game::instance != NULL && (!_networking || _network_server)) {
|
||||
if (Game::instance != nullptr && (!_networking || _network_server)) {
|
||||
Backup<CompanyByte> cur_company(_current_company, OWNER_DEITY, FILE_LINE);
|
||||
Game::instance->Load(version);
|
||||
cur_company.Restore();
|
||||
|
@@ -55,8 +55,8 @@ template <> const char *GetClassName<GameInfo, ST_GS>() { return "GSInfo"; }
|
||||
/* static */ SQInteger GameInfo::Constructor(HSQUIRRELVM vm)
|
||||
{
|
||||
/* Get the GameInfo */
|
||||
SQUserPointer instance = NULL;
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == NULL) return sq_throwerror(vm, "Pass an instance of a child class of GameInfo to RegisterGame");
|
||||
SQUserPointer instance = nullptr;
|
||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of GameInfo to RegisterGame");
|
||||
GameInfo *info = (GameInfo *)instance;
|
||||
|
||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||
@@ -82,7 +82,7 @@ template <> const char *GetClassName<GameInfo, ST_GS>() { return "GSInfo"; }
|
||||
}
|
||||
|
||||
/* Remove the link to the real instance, else it might get deleted by RegisterGame() */
|
||||
sq_setinstanceup(vm, 2, NULL);
|
||||
sq_setinstanceup(vm, 2, nullptr);
|
||||
/* Register the Game to the base system */
|
||||
info->GetScanner()->RegisterScript(info);
|
||||
return 0;
|
||||
@@ -91,7 +91,7 @@ template <> const char *GetClassName<GameInfo, ST_GS>() { return "GSInfo"; }
|
||||
GameInfo::GameInfo() :
|
||||
min_loadable_version(0),
|
||||
is_developer_only(false),
|
||||
api_version(NULL)
|
||||
api_version(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -51,7 +51,7 @@ private:
|
||||
/** All static information from an Game library like name, version, etc. */
|
||||
class GameLibrary : public ScriptInfo {
|
||||
public:
|
||||
GameLibrary() : ScriptInfo(), category(NULL) {};
|
||||
GameLibrary() : ScriptInfo(), category(nullptr) {};
|
||||
~GameLibrary();
|
||||
|
||||
/**
|
||||
|
@@ -239,10 +239,10 @@ void GameInstance::Died()
|
||||
ShowAIDebugWindow(OWNER_DEITY);
|
||||
|
||||
const GameInfo *info = Game::GetInfo();
|
||||
if (info != NULL) {
|
||||
if (info != nullptr) {
|
||||
ShowErrorMessage(STR_ERROR_AI_PLEASE_REPORT_CRASH, INVALID_STRING_ID, WL_WARNING);
|
||||
|
||||
if (info->GetURL() != NULL) {
|
||||
if (info->GetURL() != nullptr) {
|
||||
ScriptLog::Info("Please report the error to the following URL:");
|
||||
ScriptLog::Info(info->GetURL());
|
||||
}
|
||||
|
@@ -35,14 +35,14 @@ void GameScannerInfo::RegisterAPI(class Squirrel *engine)
|
||||
|
||||
GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, bool force_exact_match)
|
||||
{
|
||||
if (this->info_list.size() == 0) return NULL;
|
||||
if (nameParam == NULL) return NULL;
|
||||
if (this->info_list.size() == 0) return nullptr;
|
||||
if (nameParam == nullptr) return nullptr;
|
||||
|
||||
char game_name[1024];
|
||||
strecpy(game_name, nameParam, lastof(game_name));
|
||||
strtolower(game_name);
|
||||
|
||||
GameInfo *info = NULL;
|
||||
GameInfo *info = nullptr;
|
||||
int version = -1;
|
||||
|
||||
if (versionParam == -1) {
|
||||
@@ -51,7 +51,7 @@ GameInfo *GameScannerInfo::FindInfo(const char *nameParam, int versionParam, boo
|
||||
|
||||
/* If we didn't find a match Game script, maybe the user included a version */
|
||||
char *e = strrchr(game_name, '.');
|
||||
if (e == NULL) return NULL;
|
||||
if (e == nullptr) return nullptr;
|
||||
*e = '\0';
|
||||
e++;
|
||||
versionParam = atoi(e);
|
||||
@@ -106,7 +106,7 @@ GameLibrary *GameScannerLibrary::FindLibrary(const char *library, int version)
|
||||
|
||||
/* Check if the library + version exists */
|
||||
ScriptInfoList::iterator iter = this->info_list.find(library_name);
|
||||
if (iter == this->info_list.end()) return NULL;
|
||||
if (iter == this->info_list.end()) return nullptr;
|
||||
|
||||
return static_cast<GameLibrary *>((*iter).second);
|
||||
}
|
||||
|
@@ -23,7 +23,7 @@ public:
|
||||
* @param nameParam The name of the game script.
|
||||
* @param versionParam The version of the game script, or -1 if you want the latest.
|
||||
* @param force_exact_match Only match name+version, never latest.
|
||||
* @return NULL if no match found, otherwise the game script that matched.
|
||||
* @return nullptr if no match found, otherwise the game script that matched.
|
||||
*/
|
||||
class GameInfo *FindInfo(const char *nameParam, int versionParam, bool force_exact_match);
|
||||
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
* Find a library in the pool.
|
||||
* @param library The library name to find.
|
||||
* @param version The version the library should have.
|
||||
* @return The library if found, NULL otherwise.
|
||||
* @return The library if found, nullptr otherwise.
|
||||
*/
|
||||
class GameLibrary *FindLibrary(const char *library, int version);
|
||||
|
||||
|
@@ -63,11 +63,11 @@ void NORETURN CDECL strgen_fatal(const char *s, ...)
|
||||
/**
|
||||
* Create a new container for language strings.
|
||||
* @param language The language name.
|
||||
* @param end If not NULL, terminate \a language at this position.
|
||||
* @param end If not nullptr, terminate \a language at this position.
|
||||
*/
|
||||
LanguageStrings::LanguageStrings(const char *language, const char *end)
|
||||
{
|
||||
this->language = stredup(language, end != NULL ? end - 1 : NULL);
|
||||
this->language = stredup(language, end != nullptr ? end - 1 : nullptr);
|
||||
}
|
||||
|
||||
/** Free everything. */
|
||||
@@ -79,31 +79,31 @@ LanguageStrings::~LanguageStrings()
|
||||
/**
|
||||
* Read all the raw language strings from the given file.
|
||||
* @param file The file to read from.
|
||||
* @return The raw strings, or NULL upon error.
|
||||
* @return The raw strings, or nullptr upon error.
|
||||
*/
|
||||
std::unique_ptr<LanguageStrings> ReadRawLanguageStrings(const char *file)
|
||||
{
|
||||
try {
|
||||
size_t to_read;
|
||||
FILE *fh = FioFOpenFile(file, "rb", GAME_DIR, &to_read);
|
||||
if (fh == NULL) return NULL;
|
||||
if (fh == nullptr) return nullptr;
|
||||
|
||||
FileCloser fhClose(fh);
|
||||
|
||||
const char *langname = strrchr(file, PATHSEPCHAR);
|
||||
if (langname == NULL) {
|
||||
if (langname == nullptr) {
|
||||
langname = file;
|
||||
} else {
|
||||
langname++;
|
||||
}
|
||||
|
||||
/* Check for invalid empty filename */
|
||||
if (*langname == '.' || *langname == 0) return NULL;
|
||||
if (*langname == '.' || *langname == 0) return nullptr;
|
||||
|
||||
std::unique_ptr<LanguageStrings> ret(new LanguageStrings(langname, strchr(langname, '.')));
|
||||
|
||||
char buffer[2048];
|
||||
while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != NULL) {
|
||||
while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != nullptr) {
|
||||
size_t len = strlen(buffer);
|
||||
|
||||
/* Remove trailing spaces/newlines from the string. */
|
||||
@@ -122,7 +122,7 @@ std::unique_ptr<LanguageStrings> ReadRawLanguageStrings(const char *file)
|
||||
|
||||
return ret;
|
||||
} catch (...) {
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ struct StringListReader : StringReader {
|
||||
|
||||
char *ReadLine(char *buffer, const char *last) override
|
||||
{
|
||||
if (this->p == this->end) return NULL;
|
||||
if (this->p == this->end) return nullptr;
|
||||
|
||||
strecpy(buffer, this->p->c_str(), last);
|
||||
this->p++;
|
||||
@@ -237,7 +237,7 @@ public:
|
||||
if (strcmp(filename, exclude) == 0) return true;
|
||||
|
||||
auto ls = ReadRawLanguageStrings(filename);
|
||||
if (ls == NULL) return false;
|
||||
if (ls == nullptr) return false;
|
||||
|
||||
gs->raw_strings.push_back(std::move(ls));
|
||||
return true;
|
||||
@@ -254,14 +254,14 @@ GameStrings *LoadTranslations()
|
||||
char filename[512];
|
||||
strecpy(filename, info->GetMainScript(), lastof(filename));
|
||||
char *e = strrchr(filename, PATHSEPCHAR);
|
||||
if (e == NULL) return NULL;
|
||||
if (e == nullptr) return nullptr;
|
||||
e++; // Make 'e' point after the PATHSEPCHAR
|
||||
|
||||
strecpy(e, "lang" PATHSEP "english.txt", lastof(filename));
|
||||
if (!FioCheckFileExists(filename, GAME_DIR)) return NULL;
|
||||
if (!FioCheckFileExists(filename, GAME_DIR)) return nullptr;
|
||||
|
||||
auto ls = ReadRawLanguageStrings(filename);
|
||||
if (ls == NULL) return NULL;
|
||||
if (ls == nullptr) return nullptr;
|
||||
|
||||
GameStrings *gs = new GameStrings();
|
||||
try {
|
||||
@@ -274,7 +274,7 @@ GameStrings *LoadTranslations()
|
||||
|
||||
const char *tar_filename = info->GetTarFile();
|
||||
TarList::iterator iter;
|
||||
if (tar_filename != NULL && (iter = _tar_list[GAME_DIR].find(tar_filename)) != _tar_list[GAME_DIR].end()) {
|
||||
if (tar_filename != nullptr && (iter = _tar_list[GAME_DIR].find(tar_filename)) != _tar_list[GAME_DIR].end()) {
|
||||
/* The main script is in a tar file, so find all files that
|
||||
* are in the same tar and add them to the langfile scanner. */
|
||||
TarFileList::iterator tar;
|
||||
@@ -297,7 +297,7 @@ GameStrings *LoadTranslations()
|
||||
return gs;
|
||||
} catch (...) {
|
||||
delete gs;
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -327,7 +327,7 @@ void GameStrings::Compile()
|
||||
}
|
||||
|
||||
/** The currently loaded game strings. */
|
||||
GameStrings *_current_data = NULL;
|
||||
GameStrings *_current_data = nullptr;
|
||||
|
||||
/**
|
||||
* Get the string pointer of a particular game string.
|
||||
@@ -348,7 +348,7 @@ void RegisterGameTranslation(Squirrel *engine)
|
||||
{
|
||||
delete _current_data;
|
||||
_current_data = LoadTranslations();
|
||||
if (_current_data == NULL) return;
|
||||
if (_current_data == nullptr) return;
|
||||
|
||||
HSQUIRRELVM vm = engine->GetVM();
|
||||
sq_pushroottable(vm);
|
||||
@@ -373,19 +373,19 @@ void RegisterGameTranslation(Squirrel *engine)
|
||||
*/
|
||||
void ReconsiderGameScriptLanguage()
|
||||
{
|
||||
if (_current_data == NULL) return;
|
||||
if (_current_data == nullptr) return;
|
||||
|
||||
char temp[MAX_PATH];
|
||||
strecpy(temp, _current_language->file, lastof(temp));
|
||||
|
||||
/* Remove the extension */
|
||||
char *l = strrchr(temp, '.');
|
||||
assert(l != NULL);
|
||||
assert(l != nullptr);
|
||||
*l = '\0';
|
||||
|
||||
/* Skip the path */
|
||||
char *language = strrchr(temp, PATHSEPCHAR);
|
||||
assert(language != NULL);
|
||||
assert(language != nullptr);
|
||||
language++;
|
||||
|
||||
for (auto &p : _current_data->compiled_strings) {
|
||||
|
@@ -23,7 +23,7 @@ struct LanguageStrings {
|
||||
const char *language; ///< Name of the language (base filename).
|
||||
StringList lines; ///< The lines of the file to pass into the parser/encoder.
|
||||
|
||||
LanguageStrings(const char *language, const char *end = NULL);
|
||||
LanguageStrings(const char *language, const char *end = nullptr);
|
||||
~LanguageStrings();
|
||||
};
|
||||
|
||||
|
@@ -34,9 +34,9 @@ extern byte _sl_minor_version; ///< the minor savegame version, DO NOT USE!
|
||||
|
||||
static GamelogActionType _gamelog_action_type = GLAT_NONE; ///< action to record if anything changes
|
||||
|
||||
LoggedAction *_gamelog_action = NULL; ///< first logged action
|
||||
LoggedAction *_gamelog_action = nullptr; ///< first logged action
|
||||
uint _gamelog_actions = 0; ///< number of actions
|
||||
static LoggedAction *_current_action = NULL; ///< current action we are logging, NULL when there is no action active
|
||||
static LoggedAction *_current_action = nullptr; ///< current action we are logging, nullptr when there is no action active
|
||||
|
||||
|
||||
/**
|
||||
@@ -57,9 +57,9 @@ void GamelogStopAction()
|
||||
{
|
||||
assert(_gamelog_action_type != GLAT_NONE); // nobody should try to stop if there is no action in progress
|
||||
|
||||
bool print = _current_action != NULL;
|
||||
bool print = _current_action != nullptr;
|
||||
|
||||
_current_action = NULL;
|
||||
_current_action = nullptr;
|
||||
_gamelog_action_type = GLAT_NONE;
|
||||
|
||||
if (print) GamelogPrintDebug(5);
|
||||
@@ -91,9 +91,9 @@ void GamelogReset()
|
||||
assert(_gamelog_action_type == GLAT_NONE);
|
||||
GamelogFree(_gamelog_action, _gamelog_actions);
|
||||
|
||||
_gamelog_action = NULL;
|
||||
_gamelog_action = nullptr;
|
||||
_gamelog_actions = 0;
|
||||
_current_action = NULL;
|
||||
_current_action = nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -109,18 +109,18 @@ static char *PrintGrfInfo(char *buf, const char *last, uint grfid, const uint8 *
|
||||
{
|
||||
char txt[40];
|
||||
|
||||
if (md5sum != NULL) {
|
||||
if (md5sum != nullptr) {
|
||||
md5sumToString(txt, lastof(txt), md5sum);
|
||||
buf += seprintf(buf, last, "GRF ID %08X, checksum %s", BSWAP32(grfid), txt);
|
||||
} else {
|
||||
buf += seprintf(buf, last, "GRF ID %08X", BSWAP32(grfid));
|
||||
}
|
||||
|
||||
if (gc != NULL) {
|
||||
if (gc != nullptr) {
|
||||
buf += seprintf(buf, last, ", filename: %s (md5sum matches)", gc->filename);
|
||||
} else {
|
||||
gc = FindGRFConfig(grfid, FGCM_ANY);
|
||||
if (gc != NULL) {
|
||||
if (gc != nullptr) {
|
||||
buf += seprintf(buf, last, ", filename: %s (matches GRFID only)", gc->filename);
|
||||
} else {
|
||||
buf += seprintf(buf, last, ", unknown GRF");
|
||||
@@ -250,7 +250,7 @@ void GamelogPrint(GamelogPrintProc *proc)
|
||||
case GLCT_GRFREM: {
|
||||
GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
|
||||
buf += seprintf(buf, lastof(buffer), la->at == GLAT_LOAD ? "Missing NewGRF: " : "Removed NewGRF: ");
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfrem.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfrem.grfid, nullptr, gm != grf_names.End() ? gm->second.gc : nullptr);
|
||||
if (gm == grf_names.End()) {
|
||||
buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
|
||||
} else {
|
||||
@@ -276,7 +276,7 @@ void GamelogPrint(GamelogPrintProc *proc)
|
||||
case GLCT_GRFPARAM: {
|
||||
GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
|
||||
buf += seprintf(buf, lastof(buffer), "GRF parameter changed: ");
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfparam.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfparam.grfid, nullptr, gm != grf_names.End() ? gm->second.gc : nullptr);
|
||||
if (gm == grf_names.End()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
|
||||
break;
|
||||
}
|
||||
@@ -285,7 +285,7 @@ void GamelogPrint(GamelogPrintProc *proc)
|
||||
GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
|
||||
buf += seprintf(buf, lastof(buffer), "GRF order changed: %08X moved %d places %s",
|
||||
BSWAP32(lc->grfmove.grfid), abs(lc->grfmove.offset), lc->grfmove.offset >= 0 ? "down" : "up" );
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfmove.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfmove.grfid, nullptr, gm != grf_names.End() ? gm->second.gc : nullptr);
|
||||
if (gm == grf_names.End()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
|
||||
break;
|
||||
}
|
||||
@@ -298,7 +298,7 @@ void GamelogPrint(GamelogPrintProc *proc)
|
||||
buf += seprintf(buf, lastof(buffer), "Rail vehicle changes length outside a depot: GRF ID %08X, internal ID 0x%X", BSWAP32(lc->grfbug.grfid), (uint)lc->grfbug.data);
|
||||
break;
|
||||
}
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfbug.grfid, NULL, gm != grf_names.End() ? gm->second.gc : NULL);
|
||||
buf = PrintGrfInfo(buf, lastof(buffer), lc->grfbug.grfid, nullptr, gm != grf_names.End() ? gm->second.gc : nullptr);
|
||||
if (gm == grf_names.End()) buf += seprintf(buf, lastof(buffer), ". Gamelog inconsistency: GrfID was never added!");
|
||||
break;
|
||||
}
|
||||
@@ -349,21 +349,21 @@ void GamelogPrintDebug(int level)
|
||||
|
||||
/**
|
||||
* Allocates new LoggedChange and new LoggedAction if needed.
|
||||
* If there is no action active, NULL is returned.
|
||||
* If there is no action active, nullptr is returned.
|
||||
* @param ct type of change
|
||||
* @return new LoggedChange, or NULL if there is no action active
|
||||
* @return new LoggedChange, or nullptr if there is no action active
|
||||
*/
|
||||
static LoggedChange *GamelogChange(GamelogChangeType ct)
|
||||
{
|
||||
if (_current_action == NULL) {
|
||||
if (_gamelog_action_type == GLAT_NONE) return NULL;
|
||||
if (_current_action == nullptr) {
|
||||
if (_gamelog_action_type == GLAT_NONE) return nullptr;
|
||||
|
||||
_gamelog_action = ReallocT(_gamelog_action, _gamelog_actions + 1);
|
||||
_current_action = &_gamelog_action[_gamelog_actions++];
|
||||
|
||||
_current_action->at = _gamelog_action_type;
|
||||
_current_action->tick = _tick_counter;
|
||||
_current_action->change = NULL;
|
||||
_current_action->change = nullptr;
|
||||
_current_action->changes = 0;
|
||||
}
|
||||
|
||||
@@ -393,7 +393,7 @@ void GamelogEmergency()
|
||||
*/
|
||||
bool GamelogTestEmergency()
|
||||
{
|
||||
const LoggedChange *emergency = NULL;
|
||||
const LoggedChange *emergency = nullptr;
|
||||
|
||||
const LoggedAction *laend = &_gamelog_action[_gamelog_actions];
|
||||
for (const LoggedAction *la = _gamelog_action; la != laend; la++) {
|
||||
@@ -403,7 +403,7 @@ bool GamelogTestEmergency()
|
||||
}
|
||||
}
|
||||
|
||||
return (emergency != NULL);
|
||||
return (emergency != nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -414,7 +414,7 @@ void GamelogRevision()
|
||||
assert(_gamelog_action_type == GLAT_START || _gamelog_action_type == GLAT_LOAD);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_REVISION);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->revision.text = stredup(_openttd_revision);
|
||||
lc->revision.slver = SAVEGAME_VERSION;
|
||||
@@ -430,7 +430,7 @@ void GamelogMode()
|
||||
assert(_gamelog_action_type == GLAT_START || _gamelog_action_type == GLAT_LOAD || _gamelog_action_type == GLAT_CHEAT);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_MODE);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->mode.mode = _game_mode;
|
||||
lc->mode.landscape = _settings_game.game_creation.landscape;
|
||||
@@ -444,7 +444,7 @@ void GamelogOldver()
|
||||
assert(_gamelog_action_type == GLAT_LOAD);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_OLDVER);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->oldver.type = _savegame_type;
|
||||
lc->oldver.version = (_savegame_type == SGT_OTTD ? ((uint32)_sl_version << 8 | _sl_minor_version) : _ttdp_version);
|
||||
@@ -461,7 +461,7 @@ void GamelogSetting(const char *name, int32 oldval, int32 newval)
|
||||
assert(_gamelog_action_type == GLAT_SETTING);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_SETTING);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->setting.name = stredup(name);
|
||||
lc->setting.oldval = oldval;
|
||||
@@ -475,7 +475,7 @@ void GamelogSetting(const char *name, int32 oldval, int32 newval)
|
||||
*/
|
||||
void GamelogTestRevision()
|
||||
{
|
||||
const LoggedChange *rev = NULL;
|
||||
const LoggedChange *rev = nullptr;
|
||||
|
||||
const LoggedAction *laend = &_gamelog_action[_gamelog_actions];
|
||||
for (const LoggedAction *la = _gamelog_action; la != laend; la++) {
|
||||
@@ -485,7 +485,7 @@ void GamelogTestRevision()
|
||||
}
|
||||
}
|
||||
|
||||
if (rev == NULL || strcmp(rev->revision.text, _openttd_revision) != 0 ||
|
||||
if (rev == nullptr || strcmp(rev->revision.text, _openttd_revision) != 0 ||
|
||||
rev->revision.modified != _openttd_revision_modified ||
|
||||
rev->revision.newgrf != _openttd_newgrf_version) {
|
||||
GamelogRevision();
|
||||
@@ -498,7 +498,7 @@ void GamelogTestRevision()
|
||||
*/
|
||||
void GamelogTestMode()
|
||||
{
|
||||
const LoggedChange *mode = NULL;
|
||||
const LoggedChange *mode = nullptr;
|
||||
|
||||
const LoggedAction *laend = &_gamelog_action[_gamelog_actions];
|
||||
for (const LoggedAction *la = _gamelog_action; la != laend; la++) {
|
||||
@@ -508,7 +508,7 @@ void GamelogTestMode()
|
||||
}
|
||||
}
|
||||
|
||||
if (mode == NULL || mode->mode.mode != _game_mode || mode->mode.landscape != _settings_game.game_creation.landscape) GamelogMode();
|
||||
if (mode == nullptr || mode->mode.mode != _game_mode || mode->mode.landscape != _settings_game.game_creation.landscape) GamelogMode();
|
||||
}
|
||||
|
||||
|
||||
@@ -523,7 +523,7 @@ static void GamelogGRFBug(uint32 grfid, byte bug, uint64 data)
|
||||
assert(_gamelog_action_type == GLAT_GRFBUG);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_GRFBUG);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->grfbug.data = data;
|
||||
lc->grfbug.grfid = grfid;
|
||||
@@ -579,7 +579,7 @@ void GamelogGRFRemove(uint32 grfid)
|
||||
assert(_gamelog_action_type == GLAT_LOAD || _gamelog_action_type == GLAT_GRF);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_GRFREM);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->grfrem.grfid = grfid;
|
||||
}
|
||||
@@ -595,7 +595,7 @@ void GamelogGRFAdd(const GRFConfig *newg)
|
||||
if (!IsLoggableGrfConfig(newg)) return;
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_GRFADD);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->grfadd = newg->ident;
|
||||
}
|
||||
@@ -610,7 +610,7 @@ void GamelogGRFCompatible(const GRFIdentifier *newg)
|
||||
assert(_gamelog_action_type == GLAT_LOAD || _gamelog_action_type == GLAT_GRF);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_GRFCOMPAT);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->grfcompat = *newg;
|
||||
}
|
||||
@@ -625,7 +625,7 @@ static void GamelogGRFMove(uint32 grfid, int32 offset)
|
||||
assert(_gamelog_action_type == GLAT_GRF);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_GRFMOVE);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->grfmove.grfid = grfid;
|
||||
lc->grfmove.offset = offset;
|
||||
@@ -641,7 +641,7 @@ static void GamelogGRFParameters(uint32 grfid)
|
||||
assert(_gamelog_action_type == GLAT_GRF);
|
||||
|
||||
LoggedChange *lc = GamelogChange(GLCT_GRFPARAM);
|
||||
if (lc == NULL) return;
|
||||
if (lc == nullptr) return;
|
||||
|
||||
lc->grfparam.grfid = grfid;
|
||||
}
|
||||
@@ -655,7 +655,7 @@ void GamelogGRFAddList(const GRFConfig *newg)
|
||||
{
|
||||
assert(_gamelog_action_type == GLAT_START || _gamelog_action_type == GLAT_LOAD);
|
||||
|
||||
for (; newg != NULL; newg = newg->next) {
|
||||
for (; newg != nullptr; newg = newg->next) {
|
||||
GamelogGRFAdd(newg);
|
||||
}
|
||||
}
|
||||
@@ -673,14 +673,14 @@ struct GRFList {
|
||||
static GRFList *GenerateGRFList(const GRFConfig *grfc)
|
||||
{
|
||||
uint n = 0;
|
||||
for (const GRFConfig *g = grfc; g != NULL; g = g->next) {
|
||||
for (const GRFConfig *g = grfc; g != nullptr; g = g->next) {
|
||||
if (IsLoggableGrfConfig(g)) n++;
|
||||
}
|
||||
|
||||
GRFList *list = (GRFList*)MallocT<byte>(sizeof(GRFList) + n * sizeof(GRFConfig*));
|
||||
|
||||
list->n = 0;
|
||||
for (const GRFConfig *g = grfc; g != NULL; g = g->next) {
|
||||
for (const GRFConfig *g = grfc; g != nullptr; g = g->next) {
|
||||
if (IsLoggableGrfConfig(g)) list->grf[list->n++] = g;
|
||||
}
|
||||
|
||||
|
@@ -82,8 +82,8 @@ static void CleanupGeneration()
|
||||
/* Show all vital windows again, because we have hidden them */
|
||||
if (_gw.threaded && _game_mode != GM_MENU) ShowVitalWindows();
|
||||
SetModalProgress(false);
|
||||
_gw.proc = NULL;
|
||||
_gw.abortp = NULL;
|
||||
_gw.proc = nullptr;
|
||||
_gw.abortp = nullptr;
|
||||
_gw.threaded = false;
|
||||
|
||||
DeleteWindowByClass(WC_MODAL_PROGRESS);
|
||||
@@ -176,7 +176,7 @@ static void _GenerateWorld()
|
||||
if (_game_mode != GM_EDITOR) {
|
||||
Game::StartNew();
|
||||
|
||||
if (Game::GetInstance() != NULL) {
|
||||
if (Game::GetInstance() != nullptr) {
|
||||
SetGeneratingWorldProgress(GWP_RUNSCRIPT, 2500);
|
||||
_generating_world = true;
|
||||
for (i = 0; i < 2500; i++) {
|
||||
@@ -197,7 +197,7 @@ static void _GenerateWorld()
|
||||
|
||||
SetGeneratingWorldProgress(GWP_GAME_START, 1);
|
||||
/* Call any callback */
|
||||
if (_gw.proc != NULL) _gw.proc();
|
||||
if (_gw.proc != nullptr) _gw.proc();
|
||||
IncreaseGeneratingWorldProgress(GWP_GAME_START);
|
||||
|
||||
CleanupGeneration();
|
||||
@@ -283,7 +283,7 @@ void HandleGeneratingWorldAbortion()
|
||||
/* Clean up - in SE create an empty map, otherwise, go to intro menu */
|
||||
_switch_mode = (_game_mode == GM_EDITOR) ? SM_EDITOR : SM_MENU;
|
||||
|
||||
if (_gw.abortp != NULL) _gw.abortp();
|
||||
if (_gw.abortp != nullptr) _gw.abortp();
|
||||
|
||||
CleanupGeneration();
|
||||
|
||||
@@ -307,7 +307,7 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti
|
||||
_gw.size_y = size_y;
|
||||
SetModalProgress(true);
|
||||
_gw.abort = false;
|
||||
_gw.abortp = NULL;
|
||||
_gw.abortp = nullptr;
|
||||
_gw.lc = _local_company;
|
||||
_gw.quit_thread = false;
|
||||
_gw.threaded = true;
|
||||
@@ -350,7 +350,7 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti
|
||||
ShowGenerateWorldProgress();
|
||||
|
||||
/* Centre the view on the map */
|
||||
if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) {
|
||||
if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) {
|
||||
ScrollMainWindowToTile(TileXY(MapSizeX() / 2, MapSizeY() / 2), true);
|
||||
}
|
||||
}
|
||||
|
@@ -63,8 +63,8 @@ struct GenWorldInfo {
|
||||
CompanyID lc; ///< The local_company before generating
|
||||
uint size_x; ///< X-size of the map
|
||||
uint size_y; ///< Y-size of the map
|
||||
GWDoneProc *proc; ///< Proc that is called when done (can be NULL)
|
||||
GWAbortProc *abortp; ///< Proc that is called when aborting (can be NULL)
|
||||
GWDoneProc *proc; ///< Proc that is called when done (can be nullptr)
|
||||
GWAbortProc *abortp; ///< Proc that is called when aborting (can be nullptr)
|
||||
std::thread thread; ///< The thread we are in (joinable if a thread was created)
|
||||
};
|
||||
|
||||
|
@@ -478,7 +478,7 @@ struct GenerateLandscapeWindow : public Window {
|
||||
|
||||
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
|
||||
{
|
||||
const StringID *strs = NULL;
|
||||
const StringID *strs = nullptr;
|
||||
switch (widget) {
|
||||
case WID_GL_MAX_HEIGHTLEVEL_TEXT:
|
||||
SetDParam(0, MAX_TILE_HEIGHT);
|
||||
@@ -545,7 +545,7 @@ struct GenerateLandscapeWindow : public Window {
|
||||
default:
|
||||
return;
|
||||
}
|
||||
if (strs != NULL) {
|
||||
if (strs != nullptr) {
|
||||
while (*strs != INVALID_STRING_ID) {
|
||||
*size = maxdim(*size, GetStringBoundingBox(*strs++));
|
||||
}
|
||||
@@ -804,7 +804,7 @@ struct GenerateLandscapeWindow : public Window {
|
||||
void OnQueryTextFinished(char *str) override
|
||||
{
|
||||
/* Was 'cancel' pressed? */
|
||||
if (str == NULL) return;
|
||||
if (str == nullptr) return;
|
||||
|
||||
int32 value;
|
||||
if (!StrEmpty(str)) {
|
||||
@@ -851,14 +851,14 @@ struct GenerateLandscapeWindow : public Window {
|
||||
};
|
||||
|
||||
static WindowDesc _generate_landscape_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_GENERATE_LANDSCAPE, WC_NONE,
|
||||
0,
|
||||
_nested_generate_landscape_widgets, lengthof(_nested_generate_landscape_widgets)
|
||||
);
|
||||
|
||||
static WindowDesc _heightmap_load_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_GENERATE_LANDSCAPE, WC_NONE,
|
||||
0,
|
||||
_nested_heightmap_load_widgets, lengthof(_nested_heightmap_load_widgets)
|
||||
@@ -1166,7 +1166,7 @@ static const NWidgetPart _nested_create_scenario_widgets[] = {
|
||||
};
|
||||
|
||||
static WindowDesc _create_scenario_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_GENERATE_LANDSCAPE, WC_NONE,
|
||||
0,
|
||||
_nested_create_scenario_widgets, lengthof(_nested_create_scenario_widgets)
|
||||
@@ -1194,7 +1194,7 @@ static const NWidgetPart _nested_generate_progress_widgets[] = {
|
||||
|
||||
|
||||
static WindowDesc _generate_progress_desc(
|
||||
WDP_CENTER, NULL, 0, 0,
|
||||
WDP_CENTER, nullptr, 0, 0,
|
||||
WC_MODAL_PROGRESS, WC_NONE,
|
||||
0,
|
||||
_nested_generate_progress_widgets, lengthof(_nested_generate_progress_widgets)
|
||||
|
28
src/gfx.cpp
28
src/gfx.cpp
@@ -53,8 +53,8 @@ static byte _stringwidth_table[FS_END][224]; ///< Cache containing width of ofte
|
||||
DrawPixelInfo *_cur_dpi;
|
||||
byte _colour_gradient[COLOUR_END][8];
|
||||
|
||||
static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = NULL, SpriteID sprite_id = SPR_CURSOR_MOUSE);
|
||||
static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = NULL, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_NORMAL);
|
||||
static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE);
|
||||
static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_NORMAL);
|
||||
|
||||
static ReusableBuffer<uint8> _cursor_backup;
|
||||
|
||||
@@ -76,7 +76,7 @@ static const uint DIRTY_BLOCK_HEIGHT = 8;
|
||||
static const uint DIRTY_BLOCK_WIDTH = 64;
|
||||
|
||||
static uint _dirty_bytes_per_line = 0;
|
||||
static byte *_dirty_blocks = NULL;
|
||||
static byte *_dirty_blocks = nullptr;
|
||||
extern uint _dirty_block_colour;
|
||||
|
||||
void GfxScroll(int left, int top, int width, int height, int xo, int yo)
|
||||
@@ -367,7 +367,7 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
|
||||
|
||||
truncation &= max_w < w; // Whether we need to do truncation.
|
||||
int dot_width = 0; // Cache for the width of the dot.
|
||||
const Sprite *dot_sprite = NULL; // Cache for the sprite of the dot.
|
||||
const Sprite *dot_sprite = nullptr; // Cache for the sprite of the dot.
|
||||
|
||||
if (truncation) {
|
||||
/*
|
||||
@@ -734,11 +734,11 @@ Point GetCharPosInString(const char *str, const char *ch, FontSize start_fontsiz
|
||||
* @param str String to test.
|
||||
* @param x Position relative to the start of the string.
|
||||
* @param start_fontsize Font size to start the text with.
|
||||
* @return Pointer to the character at the position or NULL if there is no character at the position.
|
||||
* @return Pointer to the character at the position or nullptr if there is no character at the position.
|
||||
*/
|
||||
const char *GetCharAtPosition(const char *str, int x, FontSize start_fontsize)
|
||||
{
|
||||
if (x < 0) return NULL;
|
||||
if (x < 0) return nullptr;
|
||||
|
||||
Layouter layout(str, INT32_MAX, TC_FROMSTRING, start_fontsize);
|
||||
return layout.GetCharAtPosition(x);
|
||||
@@ -768,7 +768,7 @@ Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
|
||||
{
|
||||
const Sprite *sprite = GetSprite(sprid, ST_NORMAL);
|
||||
|
||||
if (offset != NULL) {
|
||||
if (offset != nullptr) {
|
||||
offset->x = UnScaleByZoom(sprite->x_offs, zoom);
|
||||
offset->y = UnScaleByZoom(sprite->y_offs, zoom);
|
||||
}
|
||||
@@ -874,7 +874,7 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo
|
||||
x += sprite->x_offs;
|
||||
y += sprite->y_offs;
|
||||
|
||||
if (sub == NULL) {
|
||||
if (sub == nullptr) {
|
||||
/* No clipping. */
|
||||
bp.skip_left = 0;
|
||||
bp.skip_top = 0;
|
||||
@@ -1011,7 +1011,7 @@ void DoPaletteAnimations()
|
||||
uint i;
|
||||
uint j;
|
||||
|
||||
if (blitter != NULL && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
if (blitter != nullptr && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
palette_animation_counter = 0;
|
||||
}
|
||||
|
||||
@@ -1096,7 +1096,7 @@ void DoPaletteAnimations()
|
||||
if (j >= EPV_CYCLES_GLITTER_WATER) j -= EPV_CYCLES_GLITTER_WATER;
|
||||
}
|
||||
|
||||
if (blitter != NULL && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
if (blitter != nullptr && blitter->UsePaletteAnimation() == Blitter::PALETTE_ANIMATION_NONE) {
|
||||
palette_animation_counter = old_tc;
|
||||
} else {
|
||||
if (memcmp(old_val, &_cur_palette.palette[PALETTE_ANIM_START], sizeof(old_val)) != 0 && _cur_palette.count_dirty == 0) {
|
||||
@@ -1206,7 +1206,7 @@ void ScreenSizeChanged()
|
||||
void UndrawMouseCursor()
|
||||
{
|
||||
/* Don't undraw the mouse cursor if the screen is not ready */
|
||||
if (_screen.dst_ptr == NULL) return;
|
||||
if (_screen.dst_ptr == nullptr) return;
|
||||
|
||||
if (_cursor.visible) {
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
@@ -1219,7 +1219,7 @@ void UndrawMouseCursor()
|
||||
void DrawMouseCursor()
|
||||
{
|
||||
/* Don't draw the mouse cursor if the screen is not ready */
|
||||
if (_screen.dst_ptr == NULL) return;
|
||||
if (_screen.dst_ptr == nullptr) return;
|
||||
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
|
||||
@@ -1581,7 +1581,7 @@ static void SwitchAnimatedCursor()
|
||||
{
|
||||
const AnimCursor *cur = _cursor.animate_cur;
|
||||
|
||||
if (cur == NULL || cur->sprite == AnimCursor::LAST) cur = _cursor.animate_list;
|
||||
if (cur == nullptr || cur->sprite == AnimCursor::LAST) cur = _cursor.animate_list;
|
||||
|
||||
SetCursorSprite(cur->sprite, _cursor.sprite_seq[0].pal);
|
||||
|
||||
@@ -1631,7 +1631,7 @@ void SetMouseCursor(CursorID sprite, PaletteID pal)
|
||||
void SetAnimatedMouseCursor(const AnimCursor *table)
|
||||
{
|
||||
_cursor.animate_list = table;
|
||||
_cursor.animate_cur = NULL;
|
||||
_cursor.animate_cur = nullptr;
|
||||
_cursor.sprite_seq[0].pal = PAL_NONE;
|
||||
SwitchAnimatedCursor();
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user