diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp --- a/src/ai/ai_config.cpp +++ b/src/ai/ai_config.cpp @@ -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 *confi } 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 cha 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 *nam 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); diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -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 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 cur_company(_current_company, company, FILE_LINE); c->ai_instance->Load(version); diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -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((*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(i { 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 { 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); } } diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -65,8 +65,8 @@ template <> const char *GetClassName const char *GetClassNameGetScanner()->RegisterScript(info); return 0; @@ -112,7 +112,7 @@ template <> const char *GetClassNameapi_version = NULL; + info->api_version = nullptr; SQInteger res = ScriptInfo::Constructor(vm, info); if (res != 0) return res; @@ -122,7 +122,7 @@ template <> const char *GetClassNameapi_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(info->GetScanner())->SetDummyAI(info); return 0; @@ -131,7 +131,7 @@ template <> const char *GetClassNameGetInfo(); - 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, Til * 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(); diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -23,7 +23,7 @@ AIScannerInfo::AIScannerInfo() : ScriptScanner(), - info_dummy(NULL) + info_dummy(nullptr) { } @@ -94,14 +94,14 @@ AIInfo *AIScannerInfo::SelectRandomAI() 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 ch /* 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 /* 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((*iter).second); } diff --git a/src/ai/ai_scanner.hpp b/src/ai/ai_scanner.hpp --- a/src/ai/ai_scanner.hpp +++ b/src/ai/ai_scanner.hpp @@ -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); diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -143,7 +143,7 @@ static StationID FindNearestHangar(const 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; @@ -295,7 +295,7 @@ CommandCost CmdBuildAircraft(TileIndex t 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; @@ -379,7 +379,7 @@ bool Aircraft::FindClosestDepot(TileInde { 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); @@ -388,8 +388,8 @@ bool Aircraft::FindClosestDepot(TileInde 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; } @@ -408,7 +408,7 @@ static void CheckIfAircraftNeedsService( 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)) { @@ -531,7 +531,7 @@ void SetAircraftPosition(Aircraft *v, in 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; @@ -552,7 +552,7 @@ void HandleAircraftEnterHangar(Aircraft 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; } @@ -725,8 +725,8 @@ void GetAircraftFlightLevelBounds(const /* 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; } /** @@ -801,8 +801,8 @@ template int GetAircraftFlightLevel(Airc */ 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 @@ -810,7 +810,7 @@ static byte AircraftGetEntryPoint(const 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; } @@ -844,13 +844,13 @@ static bool AircraftController(Aircraft { 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; @@ -864,7 +864,7 @@ static bool AircraftController(Aircraft 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); @@ -904,7 +904,7 @@ static bool AircraftController(Aircraft v->tile = 0; int z_dest; - GetAircraftFlightLevelBounds(v, &z_dest, NULL); + GetAircraftFlightLevelBounds(v, &z_dest, nullptr); /* Reached altitude? */ if (v->z_pos >= z_dest) { @@ -921,7 +921,7 @@ static bool AircraftController(Aircraft 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 */ @@ -1127,7 +1127,7 @@ static bool HandleCrashedAircraft(Aircra 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) { @@ -1158,7 +1158,7 @@ static bool HandleCrashedAircraft(Aircra /* 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 @@ -1232,7 +1232,7 @@ void HandleMissingAircraftOrders(Aircraf * actually stops. */ const Station *st = GetTargetAirportIfValid(v); - if (st == NULL) { + if (st == nullptr) { Backup 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(); @@ -1288,17 +1288,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); @@ -1392,8 +1392,8 @@ void AircraftNextAirportPos_and_Order(Ai } 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); } @@ -1418,7 +1418,7 @@ void AircraftLeaveHangar(Aircraft *v, Di /* Rotor blades */ u = u->Next(); - if (u != NULL) { + if (u != nullptr) { u->vehstatus &= ~VS_HIDDEN; u->cur_speed = 80; } @@ -1605,7 +1605,7 @@ static void AircraftEventHandler_Flying( * 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 @@ -1761,7 +1761,7 @@ static bool AirportMove(Aircraft *v, con 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); @@ -1780,7 +1780,7 @@ static bool AirportMove(Aircraft *v, con 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(); @@ -1830,7 +1830,7 @@ static bool AirportSetBlocks(Aircraft *v * 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; @@ -1938,7 +1938,7 @@ static bool AirportFindFreeTerminal(Airc 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? @@ -2037,9 +2037,9 @@ static bool AircraftEventHandler(Aircraf /* 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); } @@ -2077,16 +2077,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; } /** diff --git a/src/aircraft_gui.cpp b/src/aircraft_gui.cpp --- a/src/aircraft_gui.cpp +++ b/src/aircraft_gui.cpp @@ -36,7 +36,7 @@ void DrawAircraftDetails(const Aircraft 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); diff --git a/src/airport.cpp b/src/airport.cpp --- a/src/airport.cpp +++ b/src/airport.cpp @@ -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( current = current->next; internalcounter++; } - current->next = NULL; + current->next = nullptr; internalcounter++; } return FAutomata; diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -161,7 +161,7 @@ static EventState AirportToolbarGlobalHo { 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(&_air_toolbar_desc, TRANSPORT_AIR); diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -31,9 +31,9 @@ static const uint MAX_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); @@ -44,12 +44,12 @@ static EngineID GetNextArticulatedPart(u /* 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); } @@ -80,7 +80,7 @@ uint CountArticulatedParts(EngineID engi * 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; @@ -108,7 +108,7 @@ static inline uint16 GetVehicleDefaultCa { 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(); } @@ -290,15 +290,15 @@ bool IsArticulatedVehicleCarryingDiffere 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; } @@ -330,8 +330,8 @@ void CheckConsistencyOfArticulatedVehicl 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; diff --git a/src/autoreplace.cpp b/src/autoreplace.cpp --- a/src/autoreplace.cpp +++ b/src/autoreplace.cpp @@ -29,11 +29,11 @@ static EngineRenew *GetEngineReplacement { 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(EngineRe 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(EngineRe 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(EngineR { /* 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(EngineR 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 { diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -98,9 +98,9 @@ bool CheckAutoreplaceValidity(EngineID f */ 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? */ @@ -108,7 +108,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; @@ -135,7 +135,7 @@ static void TransferCargo(Vehicle *old_v { 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 */ @@ -145,7 +145,7 @@ static void TransferCargo(Vehicle *old_v 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 */ @@ -216,7 +216,7 @@ static CargoID GetNewCargoTypeForReplace /* 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; @@ -280,7 +280,7 @@ static CommandCost GetNewEngineType(cons */ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehicle, bool part_of_chain) { - *new_vehicle = NULL; + *new_vehicle = nullptr; /* Shall the vehicle be replaced? */ const Company *c = Company::Get(_current_company); @@ -330,14 +330,14 @@ static inline CommandCost CmdStartStopVe /** * 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); } /** @@ -395,11 +395,11 @@ static CommandCost ReplaceFreeUnit(Vehic 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)); /* 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) { @@ -449,17 +449,17 @@ static CommandCost ReplaceChain(Vehicle 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(num_units); ///< Will store vehicles of the old chain in their order - Train **new_vehs = CallocT(num_units); ///< New vehicles corresponding to old_vehs or NULL if no replacement + Train **new_vehs = CallocT(num_units); ///< New vehicles corresponding to old_vehs or nullptr if no replacement Money *new_costs = MallocT(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; @@ -468,41 +468,41 @@ static CommandCost ReplaceChain(Vehicle 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 */ @@ -513,8 +513,8 @@ static CommandCost ReplaceChain(Vehicle */ 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' */ @@ -524,7 +524,7 @@ static CommandCost ReplaceChain(Vehicle * 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; } @@ -543,7 +543,7 @@ static CommandCost ReplaceChain(Vehicle 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); @@ -551,7 +551,7 @@ static CommandCost ReplaceChain(Vehicle /* 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 */ @@ -572,7 +572,7 @@ static CommandCost ReplaceChain(Vehicle 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); @@ -582,8 +582,8 @@ static CommandCost ReplaceChain(Vehicle * 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; } } @@ -596,9 +596,9 @@ static CommandCost ReplaceChain(Vehicle 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); @@ -610,9 +610,9 @@ static CommandCost ReplaceChain(Vehicle /* 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; } } } @@ -622,11 +622,11 @@ static CommandCost ReplaceChain(Vehicle 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)); /* 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... */ @@ -666,7 +666,7 @@ static CommandCost ReplaceChain(Vehicle 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; @@ -690,12 +690,12 @@ CommandCost CmdAutoreplaceVehicle(TileIn /* 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, 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); @@ -756,7 +756,7 @@ CommandCost CmdAutoreplaceVehicle(TileIn 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); diff --git a/src/autoreplace_func.h b/src/autoreplace_func.h --- a/src/autoreplace_func.h +++ b/src/autoreplace_func.h @@ -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 RemoveAllEngineReplac * @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); } diff --git a/src/base_consist.cpp b/src/base_consist.cpp --- a/src/base_consist.cpp +++ b/src/base_consist.cpp @@ -30,7 +30,7 @@ void BaseConsist::CopyConsistPropertiesF 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; diff --git a/src/base_consist.h b/src/base_consist.h --- a/src/base_consist.h +++ b/src/base_consist.h @@ -31,7 +31,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); diff --git a/src/base_media_base.h b/src/base_media_base.h --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -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 /* static */ * @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 const char *TryGetBaseSetFile(const ContentInfo *ci, bool md5sum, const Tbase_set *s); diff --git a/src/base_media_func.h b/src/base_media_func.h --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -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 BaseSetdescription[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 BaseSetversion = 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 BaseSetfiles[i]; /* Find the filename first. */ item = files->GetItem(BaseSet::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::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 BaseSetGetItem(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 BaseSetGetItem(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::AddFile(const 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::available_sets; c != NULL; c = c->next) { + Tbase_set *duplicate = nullptr; + for (Tbase_set *c = BaseMedia::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::AddFile(const } } else { Tbase_set **last = &BaseMedia::available_sets; - while (*last != NULL) last = &(*last)->next; + while (*last != nullptr) last = &(*last)->next; *last = set; ret = true; @@ -238,7 +238,7 @@ template return true; } - for (const Tbase_set *s = BaseMedia::available_sets; s != NULL; s = s->next) { + for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { if (strcmp(name, s->name) == 0) { BaseMedia::used_set = s; CheckExternalFiles(); @@ -258,7 +258,7 @@ template /* static */ char *BaseMedia::GetSetsList(char *p, const char *last) { p += seprintf(p, last, "List of " SET_TYPE " sets:\n"); - for (const Tbase_set *s = BaseMedia::available_sets; s != NULL; s = s->next) { + for (const Tbase_set *s = BaseMedia::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 template 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 const char *T } if (memcmp(md5, ci->md5sum, sizeof(md5)) == 0) return s->files[0].filename; } - return NULL; + return nullptr; } template /* static */ bool BaseMedia::HasSet(const ContentInfo *ci, bool md5sum) { - return (TryGetBaseSetFile(ci, md5sum, BaseMedia::available_sets) != NULL) || - (TryGetBaseSetFile(ci, md5sum, BaseMedia::duplicate_sets) != NULL); + return (TryGetBaseSetFile(ci, md5sum, BaseMedia::available_sets) != nullptr) || + (TryGetBaseSetFile(ci, md5sum, BaseMedia::duplicate_sets) != nullptr); } /** @@ -314,7 +314,7 @@ template /* static */ int BaseMedia::GetNumSets() { int n = 0; - for (const Tbase_set *s = BaseMedia::available_sets; s != NULL; s = s->next) { + for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { if (s != BaseMedia::used_set && s->GetNumMissing() != 0) continue; n++; } @@ -329,7 +329,7 @@ template /* static */ int BaseMedia::GetIndexOfUsedSet() { int n = 0; - for (const Tbase_set *s = BaseMedia::available_sets; s != NULL; s = s->next) { + for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { if (s == BaseMedia::used_set) return n; if (s->GetNumMissing() != 0) continue; n++; @@ -344,7 +344,7 @@ template template /* static */ const Tbase_set *BaseMedia::GetSet(int index) { - for (const Tbase_set *s = BaseMedia::available_sets; s != NULL; s = s->next) { + for (const Tbase_set *s = BaseMedia::available_sets; s != nullptr; s = s->next) { if (s != BaseMedia::used_set && s->GetNumMissing() != 0) continue; if (index == 0) return s; index--; diff --git a/src/base_station_base.h b/src/base_station_base.h --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -220,7 +220,7 @@ struct SpecializedStation : public BaseS */ static inline T *GetIfValid(size_t index) { - return IsValidID(index) ? Get(index) : NULL; + return IsValidID(index) ? Get(index) : nullptr; } /** diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp --- a/src/blitter/32bpp_anim.cpp +++ b/src/blitter/32bpp_anim.cpp @@ -414,7 +414,7 @@ void Blitter_32bppAnim::CopyToBuffer(con 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; diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp --- a/src/blitter/32bpp_anim.hpp +++ b/src/blitter/32bpp_anim.hpp @@ -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_height(0), anim_buf_pitch(0) diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -167,7 +167,7 @@ Sprite *Blitter_8bppOptimized::Encode(co 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(co 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(co } } - if (count_dst != NULL) *count_dst = pixels; + if (count_dst != nullptr) *count_dst = pixels; /* Write line-ending */ *dst = 0; dst++; diff --git a/src/blitter/factory.hpp b/src/blitter/factory.hpp --- a/src/blitter/factory.hpp +++ b/src/blitter/factory.hpp @@ -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; } /** diff --git a/src/blitter/null.hpp b/src/blitter/null.hpp --- a/src/blitter/null.hpp +++ b/src/blitter/null.hpp @@ -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 {}; diff --git a/src/bmp.cpp b/src/bmp.cpp --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -319,7 +319,7 @@ static inline bool BmpRead24(BmpBuffer * 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, Bm */ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { - assert(info != NULL && data != NULL); + assert(info != nullptr && data != nullptr); data->bitmap = CallocT(info->width * info->height * ((info->bpp == 24) ? 3 : 1)); @@ -413,7 +413,7 @@ bool BmpReadBitmap(BmpBuffer *buffer, Bm void BmpDestroyData(BmpData *data) { - assert(data != NULL); + assert(data != nullptr); free(data->palette); free(data->bitmap); } diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -40,7 +40,7 @@ static const struct NWidgetPart _backgro * 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_boostra /** 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_quer /** 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; diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -392,7 +392,7 @@ void ShowBuildBridgeWindow(TileIndex sta StringID errmsg = INVALID_STRING_ID; CommandCost ret = DoCommand(end, start, type, CommandFlagsToDCFlags(GetCommandFlags(CMD_BUILD_BRIDGE)) | DC_QUERY_COST, CMD_BUILD_BRIDGE); - GUIBridgeList *bl = NULL; + GUIBridgeList *bl = nullptr; if (ret.Failed()) { errmsg = ret.GetErrorMessage(); } else { @@ -427,7 +427,7 @@ void ShowBuildBridgeWindow(TileIndex sta } } - if (bl != NULL && bl->size() != 0) { + if (bl != nullptr && bl->size() != 0) { new BuildBridgeWindow(&_build_bridge_desc, start, end, type, bl); } else { delete bl; diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -833,7 +833,7 @@ static int DrawAircraftPurchaseInfo(int */ 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) { @@ -1180,7 +1180,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; @@ -1316,7 +1316,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, @@ -1408,8 +1408,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; @@ -1477,8 +1477,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); @@ -1567,9 +1567,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 diff --git a/src/cargoaction.cpp b/src/cargoaction.cpp --- a/src/cargoaction.cpp +++ b/src/cargoaction.cpp @@ -121,7 +121,7 @@ bool CargoDelivery::operator()(CargoPack 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 * 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()(CargoP 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 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()(CargoPack 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 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) { @@ -220,7 +220,7 @@ bool StationCargoReroute::operator()(Car bool VehicleCargoReroute::operator()(CargoPacket *cp) { 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)); } diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -86,11 +86,11 @@ CargoPacket::CargoPacket(uint16 count, b /** * 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); @@ -248,12 +248,12 @@ template * @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); @@ -689,11 +689,11 @@ uint VehicleCargoList::Reroute(uint max_ * @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]; @@ -776,7 +776,7 @@ uint StationCargoList::Truncate(uint max 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; diff --git a/src/cargopacket.h b/src/cargopacket.h --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -549,7 +549,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); /** diff --git a/src/cargotype.h b/src/cargotype.h --- a/src/cargotype.h +++ b/src/cargotype.h @@ -152,7 +152,7 @@ static inline bool IsCargoInClass(CargoI 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) diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -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); diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -389,15 +389,15 @@ extern const TileTypeProcs _tile_type_cl 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 }; diff --git a/src/command.cpp b/src/command.cpp --- a/src/command.cpp +++ b/src/command.cpp @@ -361,7 +361,7 @@ static const Command _command_proc_table }; /*! - * 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) @@ -370,7 +370,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; } /*! @@ -594,7 +594,7 @@ bool DoCommandP(TileIndex tile, uint32 p 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); } @@ -637,7 +637,7 @@ CommandCost DoCommandPInternal(TileIndex CommandProc *proc = _command_proc_table[cmd_id].proc; /* Shouldn't happen, but you never know when someone adds * NULLs to the _command_proc_table. */ - assert(proc != NULL); + assert(proc != nullptr); /* Command flags are used internally */ CommandFlags cmd_flags = GetCommandFlags(cmd); @@ -750,7 +750,7 @@ CommandCost DoCommandPInternal(TileIndex /* 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); diff --git a/src/command_func.h b/src/command_func.h --- a/src/command_func.h +++ b/src/command_func.h @@ -34,10 +34,10 @@ static const CommandCost CMD_ERROR = Com */ #define return_cmd_error(errcode) return CommandCost(errcode); -CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, uint32 cmd, const char *text = NULL); +CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, uint32 cmd, const char *text = nullptr); 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); +bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = nullptr, const char *text = nullptr, bool my_cmd = true); bool DoCommandP(const CommandContainer *container, bool my_cmd = true); CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd, bool estimate_only); diff --git a/src/command_type.h b/src/command_type.h --- a/src/command_type.h +++ b/src/command_type.h @@ -36,25 +36,25 @@ 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 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) {} /** diff --git a/src/company_base.h b/src/company_base.h --- a/src/company_base.h +++ b/src/company_base.h @@ -98,7 +98,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), @@ -137,7 +137,7 @@ struct Company : CompanyPool::PoolItem<& 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; } /** @@ -149,7 +149,7 @@ struct Company : CompanyPool::PoolItem<& 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; } /** diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -193,7 +193,7 @@ bool CheckCompanyHasMoney(CommandCost &c { 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; @@ -239,7 +239,7 @@ static void SubtractMoneyFromAnyCompany( void SubtractMoneyFromCompany(CommandCost cost) { Company *c = Company::GetIfValid(_current_company); - if (c != NULL) SubtractMoneyFromAnyCompany(c, cost); + if (c != nullptr) SubtractMoneyFromAnyCompany(c, cost); } /** @@ -353,7 +353,7 @@ static void GenerateCompanyName(Company 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; @@ -539,7 +539,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(); @@ -548,7 +548,7 @@ Company *DoStartupNewCompany(bool is_ai, 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); } @@ -670,7 +670,7 @@ static void HandleBankruptcyTakeover(Com /* 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 */ @@ -706,7 +706,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); } @@ -759,14 +759,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); @@ -832,8 +832,8 @@ CommandCost CmdCompanyCtrl(TileIndex til /* 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 */ @@ -842,7 +842,7 @@ CommandCost CmdCompanyCtrl(TileIndex til 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); @@ -874,7 +874,7 @@ CommandCost CmdCompanyCtrl(TileIndex til 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; } @@ -883,7 +883,7 @@ CommandCost CmdCompanyCtrl(TileIndex til 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(); @@ -1055,7 +1055,7 @@ static bool IsUniqueCompanyName(const ch 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; @@ -1082,7 +1082,7 @@ CommandCost CmdRenameCompany(TileIndex t 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); } @@ -1100,7 +1100,7 @@ static bool IsUniquePresidentName(const 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; @@ -1129,11 +1129,11 @@ CommandCost CmdRenamePresident(TileIndex 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); @@ -1150,13 +1150,13 @@ CommandCost CmdRenamePresident(TileIndex /** * 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; diff --git a/src/company_gui.cpp b/src/company_gui.cpp --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -569,7 +569,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; @@ -603,7 +603,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)); @@ -612,13 +612,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]) { @@ -1100,7 +1100,7 @@ static WindowDesc _select_company_livery 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); @@ -1711,10 +1711,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(); @@ -2633,17 +2633,17 @@ struct CompanyWindow : Window void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; switch (this->query_widget) { default: NOT_REACHED(); 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: @@ -2796,7 +2796,7 @@ static const NWidgetPart _nested_buy_com }; 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) diff --git a/src/console.cpp b/src/console.cpp --- a/src/console.cpp +++ b/src/console.cpp @@ -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 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, c template 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 *nam { IConsoleCmd *item_new = MallocT(1); item_new->name = RemoveUnderscores(stredup(name)); - item_new->next = NULL; + item_new->next = nullptr; item_new->proc = proc; item_new->hook = hook; @@ -261,16 +261,16 @@ void IConsoleCmdRegister(const char *nam /** * 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; } /** @@ -280,7 +280,7 @@ IConsoleCmd *IConsoleCmdGet(const char * */ 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; } @@ -289,7 +289,7 @@ void IConsoleAliasRegister(const char *n char *cmd_aliased = stredup(cmd); IConsoleAlias *item_new = MallocT(1); - item_new->next = NULL; + item_new->next = nullptr; item_new->cmdline = cmd_aliased; item_new->name = new_alias; @@ -299,17 +299,17 @@ void IConsoleAliasRegister(const char *n /** * 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 @@ -478,7 +478,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]); } @@ -489,12 +489,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; @@ -505,7 +505,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; } diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -349,7 +349,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); @@ -378,7 +378,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); } @@ -420,7 +420,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); @@ -448,7 +448,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; } @@ -474,7 +474,7 @@ static bool ConKickOrBan(const char *arg { 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 @@ -487,7 +487,7 @@ static bool ConKickOrBan(const char *arg } NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); - if (ci == NULL) { + if (ci == nullptr) { IConsoleError("Invalid client"); return true; } @@ -688,7 +688,7 @@ DEF_CONSOLE_CMD(ConClientNickChange) return true; } - if (NetworkClientInfo::GetByClientID(client_id) == NULL) { + if (NetworkClientInfo::GetByClientID(client_id) == nullptr) { IConsoleError("Invalid client"); return true; } @@ -759,7 +759,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; } @@ -887,8 +887,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; @@ -897,7 +897,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); @@ -908,7 +908,7 @@ DEF_CONSOLE_CMD(ConNetworkConnect) join_as--; } } - if (port != NULL) { + if (port != nullptr) { rport = atoi(port); IConsolePrintF(CC_DEFAULT, " port: %s", port); } @@ -933,7 +933,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; } @@ -941,7 +941,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') { @@ -992,7 +992,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; @@ -1031,7 +1031,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; } @@ -1283,7 +1283,7 @@ DEF_CONSOLE_CMD(ConRescanNewGRF) return true; } - ScanNewGRFFiles(NULL); + ScanNewGRFFiles(nullptr); return true; } @@ -1326,7 +1326,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); @@ -1348,7 +1348,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) { @@ -1386,7 +1386,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; } @@ -1394,7 +1394,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; } @@ -1452,16 +1452,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); @@ -1491,9 +1491,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->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->hook == nullptr || cmd->hook(false) != CHR_HIDE) IConsolePrintF(CC_DEFAULT, "%s", cmd->name); } } @@ -1507,8 +1507,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); } } @@ -1717,8 +1717,8 @@ static void OutputContentState(const Con 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); } @@ -1776,7 +1776,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; @@ -1841,7 +1841,7 @@ DEF_CONSOLE_CMD(ConListSettings) if (argc > 2) return false; - IConsoleListSettings((argc == 2) ? argv[1] : NULL); + IConsoleListSettings((argc == 2) ? argv[1] : nullptr); return true; } diff --git a/src/console_gui.cpp b/src/console_gui.cpp --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -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_ }; 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(co 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(co */ 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(); diff --git a/src/console_internal.h b/src/console_internal.h --- a/src/console_internal.h +++ b/src/console_internal.h @@ -69,7 +69,7 @@ extern IConsoleAlias *_iconsole_aliases; void IConsoleClearBuffer(); /* Commands */ -void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *hook = NULL); +void IConsoleCmdRegister(const char *name, IConsoleCmdProc *proc, IConsoleHook *hook = nullptr); void IConsoleAliasRegister(const char *name, const char *cmd); IConsoleCmd *IConsoleCmdGet(const char *name); IConsoleAlias *IConsoleAliasGet(const char *name); diff --git a/src/core/alloc_func.hpp b/src/core/alloc_func.hpp --- a/src/core/alloc_func.hpp +++ b/src/core/alloc_func.hpp @@ -53,23 +53,23 @@ static inline void CheckAllocationConstr * @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 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(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_elem * @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 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_elem * @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 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(num_elements); t_ptr = (T*)realloc(static_cast(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; } diff --git a/src/core/alloc_type.hpp b/src/core/alloc_type.hpp --- a/src/core/alloc_type.hpp +++ b/src/core/alloc_type.hpp @@ -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); } diff --git a/src/core/kdtree.hpp b/src/core/kdtree.hpp --- a/src/core/kdtree.hpp +++ b/src/core/kdtree.hpp @@ -108,11 +108,11 @@ class Kdtree { std::vector 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::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(); diff --git a/src/core/mem_func.hpp b/src/core/mem_func.hpp --- a/src/core/mem_func.hpp +++ b/src/core/mem_func.hpp @@ -78,7 +78,7 @@ static inline int MemCmpT(const T *ptr1, template 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, template static inline void MemReverseT(T *ptr, size_t num) { - assert(ptr != NULL); + assert(ptr != nullptr); MemReverseT(ptr, ptr + (num - 1)); } diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -39,8 +39,8 @@ DEFINE_POOL_METHOD(inline)::Pool(const c 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)::FindF 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)::FindF * @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_ 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_ /** * 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_ } 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); @@ -199,16 +199,16 @@ DEFINE_POOL_METHOD(void)::CleanPool() { this->cleaning = true; 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); diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -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(pn == Tpool->Get(pn->index)); 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) { } @@ -314,8 +314,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) diff --git a/src/core/smallmatrix_type.hpp b/src/core/smallmatrix_type.hpp --- a/src/core/smallmatrix_type.hpp +++ b/src/core/smallmatrix_type.hpp @@ -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(new_capacity); diff --git a/src/core/sort_func.hpp b/src/core/sort_func.hpp --- a/src/core/sort_func.hpp +++ b/src/core/sort_func.hpp @@ -53,8 +53,8 @@ static inline void GSortT(T *base, size_ { if (num < 2) return; - assert(base != NULL); - assert(comparator != NULL); + assert(base != nullptr); + assert(comparator != nullptr); T *a = base; T *b = base + 1; diff --git a/src/crashlog.cpp b/src/crashlog.cpp --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -70,9 +70,9 @@ #include "safeguards.h" -/* static */ const char *CrashLog::message = NULL; -/* static */ char *CrashLog::gamelog_buffer = NULL; -/* static */ const char *CrashLog::gamelog_last = NULL; +/* static */ const char *CrashLog::message = nullptr; +/* static */ char *CrashLog::gamelog_buffer = nullptr; +/* static */ const char *CrashLog::gamelog_last = nullptr; char *CrashLog::LogCompiler(char *buffer, const char *last) const { @@ -168,18 +168,18 @@ char *CrashLog::LogConfiguration(char *b " 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, @@ -197,14 +197,14 @@ char *CrashLog::LogConfiguration(char *b 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"); @@ -263,7 +263,7 @@ char *CrashLog::LogLibraries(char *buffe #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 @@ -312,7 +312,7 @@ char *CrashLog::LogRecentNews(char *buff { buffer += seprintf(buffer, last, "Recent news messages:\n"); - for (NewsItem *news = _oldest_news; news != NULL; news = news->next) { + for (NewsItem *news = _oldest_news; news != nullptr; news = news->next) { YearMonthDay ymd; ConvertDateToYMD(news->date, &ymd); buffer += seprintf(buffer, last, "(%i-%02i-%02i) StringID: %u, Type: %u, Ref1: %u, %u, Ref2: %u, %u\n", @@ -331,7 +331,7 @@ char *CrashLog::LogRecentNews(char *buff */ 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"); buffer += seprintf(buffer, last, "Crash at: %s", asctime(gmtime(&cur_time))); @@ -369,7 +369,7 @@ bool CrashLog::WriteCrashLog(const char 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); @@ -396,7 +396,7 @@ bool CrashLog::WriteSavegame(char *filen { /* 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(); @@ -421,7 +421,7 @@ bool CrashLog::WriteSavegame(char *filen 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); @@ -504,7 +504,7 @@ bool CrashLog::MakeCrashLog() 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(); } diff --git a/src/crashlog.h b/src/crashlog.h --- a/src/crashlog.h +++ b/src/crashlog.h @@ -48,7 +48,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; diff --git a/src/date_gui.cpp b/src/date_gui.cpp --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -148,7 +148,7 @@ struct SetDateWindow : Window { break; case WID_SD_SET_DATE: - if (this->callback != NULL) this->callback(this, ConvertYMDToDate(this->date.year, this->date.month, this->date.day)); + if (this->callback != nullptr) this->callback(this, ConvertYMDToDate(this->date.year, this->date.month, this->date.day)); delete this; break; } @@ -197,7 +197,7 @@ static const NWidgetPart _nested_set_dat /** 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) diff --git a/src/debug.cpp b/src/debug.cpp --- a/src/debug.cpp +++ b/src/debug.cpp @@ -120,14 +120,14 @@ static void debug_print(const char *dbg, } if (strcmp(dbg, "desync") == 0) { static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR); - if (f == NULL) return; + if (f == nullptr) return; fprintf(f, "%s%s\n", GetLogPrefix(), buf); fflush(f); #ifdef RANDOM_DEBUG } else if (strcmp(dbg, "random") == 0) { static FILE *f = FioFOpenFile("random-out.log", "wb", AUTOSAVE_DIR); - if (f == NULL) return; + if (f == nullptr) return; fprintf(f, "%s\n", buf); fflush(f); @@ -200,7 +200,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; @@ -211,7 +211,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); @@ -246,13 +246,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'; diff --git a/src/dedicated.cpp b/src/dedicated.cpp --- a/src/dedicated.cpp +++ b/src/dedicated.cpp @@ -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); } diff --git a/src/depend/depend.cpp b/src/depend/depend.cpp --- a/src/depend/depend.cpp +++ b/src/depend/depend.cpp @@ -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 * * 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 *dir 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 *dir 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 *dir if (access(path, R_OK) == 0) return strdup(path); } - return NULL; + return nullptr; } /** @@ -730,7 +730,7 @@ void ScanFile(const char *filename, cons 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, cons 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, cons 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; diff --git a/src/depot_cmd.cpp b/src/depot_cmd.cpp --- a/src/depot_cmd.cpp +++ b/src/depot_cmd.cpp @@ -33,7 +33,7 @@ static bool IsUniqueDepotName(const char 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 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 til free(d->name); if (reset) { - d->name = NULL; + d->name = nullptr; MakeDefaultName(d); } else { d->name = stredup(text); diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -133,16 +133,16 @@ static void TrainDepotMoveVehicle(const 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. @@ -228,7 +228,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. @@ -279,7 +279,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(WID_D_SHOW_RENAME)->SetDisplayedPlane(type == VEH_AIRCRAFT ? SZSP_NONE : 0); @@ -469,8 +469,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 @@ -490,7 +490,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; @@ -525,12 +525,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; } @@ -542,8 +542,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; @@ -553,14 +553,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; @@ -728,7 +728,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); @@ -839,24 +839,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(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; @@ -865,7 +865,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(); @@ -910,7 +910,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), NULL); + DoCommandP(this->window_number, v->index, 1, CMD_CLONE_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_BUY_TRAIN + v->type), 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)) { @@ -965,20 +965,20 @@ struct DepotWindow : Window { } NWidgetBase *matrix = this->GetWidget(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; @@ -995,7 +995,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; @@ -1003,20 +1003,20 @@ struct DepotWindow : Window { NWidgetBase *nwi = this->GetWidget(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; @@ -1052,7 +1052,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); } @@ -1098,7 +1098,7 @@ static void DepotSellAllConfirmationCall */ 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) { @@ -1126,7 +1126,7 @@ void DeleteDepotHighlightOfVehicle(const if (_special_mouse_mode != WSM_DRAGDROP) return; w = dynamic_cast(FindWindowById(WC_VEHICLE_DEPOT, v->tile)); - if (w != NULL) { + if (w != nullptr) { if (w->sel == v->index) ResetObjectToPlace(); } } diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -137,11 +137,11 @@ DisasterVehicle::DisasterVehicle(int x, 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; @@ -190,7 +190,7 @@ void DisasterVehicle::UpdatePosition(int 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); @@ -203,7 +203,7 @@ void DisasterVehicle::UpdatePosition(int 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; @@ -357,7 +357,7 @@ static bool DisasterTick_Ufo(DisasterVeh } 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); @@ -748,16 +748,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; @@ -774,16 +774,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; @@ -966,7 +966,7 @@ void ReleaseDisastersTargetingVehicle(Ve /* 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; } } diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -60,7 +60,7 @@ void CcPlaySound_SPLAT_WATER(const Comma * @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(Til if (length > max_length) break; if (GetTileMaxZ(endtile) > z) { - if (tile_to != NULL) *tile_to = endtile; + if (tile_to != nullptr) *tile_to = endtile; break; } } @@ -287,7 +287,7 @@ static EventState DockToolbarGlobalHotke { 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); } @@ -341,11 +341,11 @@ static WindowDesc _build_docks_toolbar_d * * 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(&_build_docks_toolbar_desc, TRANSPORT_WATER); @@ -382,7 +382,7 @@ static WindowDesc _build_docks_scen_tool /** * 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() { @@ -475,7 +475,7 @@ static const NWidgetPart _nested_build_d }; 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) @@ -568,7 +568,7 @@ static const NWidgetPart _nested_build_d }; 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) diff --git a/src/driver.cpp b/src/driver.cpp --- a/src/driver.cpp +++ b/src/driver.cpp @@ -41,10 +41,10 @@ const char *GetDriverParam(const char * { 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 * if (p[len] == '\0') return p + len; } } - return NULL; + return nullptr; } /** @@ -63,7 +63,7 @@ const char *GetDriverParam(const char * */ 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 * con 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 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 /* 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 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 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); } diff --git a/src/driver.h b/src/driver.h --- a/src/driver.h +++ b/src/driver.h @@ -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(); } } diff --git a/src/economy.cpp b/src/economy.cpp --- a/src/economy.cpp +++ b/src/economy.cpp @@ -401,7 +401,7 @@ void ChangeOwnershipOfCompanyItems(Owner FOR_ALL_VEHICLES(v) { if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) { if (new_owner == INVALID_OWNER) { - if (v->Previous() == NULL) delete v; + if (v->Previous() == nullptr) delete v; } else { if (v->IsEngineCountable()) GroupStatistics::CountEngine(v, -1); if (v->IsPrimaryVehicle()) GroupStatistics::CountVehicle(v, -1); @@ -476,7 +476,7 @@ void ChangeOwnershipOfCompanyItems(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; } } @@ -959,7 +959,7 @@ Money GetPrice(Price index, uint cost_fa 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; @@ -1180,7 +1180,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; @@ -1211,7 +1211,7 @@ CargoPayment::~CargoPayment() */ void CargoPayment::PayFinalDelivery(const CargoPacket *cp, uint count) { - if (this->owner == NULL) { + if (this->owner == nullptr) { this->owner = Company::Get(this->front->owner); } @@ -1259,7 +1259,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); @@ -1267,9 +1267,9 @@ void PrepareUnload(Vehicle *front_v) front_v->cargo_payment = new CargoPayment(front_v); StationIDStack 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()) { const GoodsEntry *ge = &st->goods[v->cargo_type]; if (v->cargo_cap > 0 && v->cargo.TotalCount() > 0) { v->cargo.Stage( @@ -1300,7 +1300,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)) { @@ -1336,8 +1336,8 @@ static uint GetLoadAmount(Vehicle *v) template bool IterateVehicleParts(Vehicle *v, Taction action) { - 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 (w->type == VEH_TRAIN) { Train *train = Train::From(w); @@ -1564,8 +1564,8 @@ static void ReserveConsist(Station *st, /* 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 @@ -1577,7 +1577,7 @@ static void ReserveConsist(Station *st, (must_reserve || u->current_order.GetRefitCargo() == v->cargo_type)) { IterateVehicleParts(v, ReserveCargoAction(st, next_station)); } - if (consist_capleft == NULL || v->cargo_cap == 0) continue; + if (consist_capleft == nullptr || v->cargo_cap == 0) continue; (*consist_capleft)[v->cargo_type] += v->cargo_cap - v->cargo.RemainingCount(); } } @@ -1618,9 +1618,9 @@ static void LoadUnloadVehicle(Vehicle *f bool use_autorefit = front->current_order.IsRefit() && front->current_order.GetRefitCargo() == CT_AUTO_REFIT; CargoArray consist_capleft; if (_settings_game.order.improved_load && use_autorefit ? - front->cargo_payment == NULL : (front->current_order.GetLoadType() & OLFB_FULL_LOAD) != 0) { + front->cargo_payment == nullptr : (front->current_order.GetLoadType() & OLFB_FULL_LOAD) != 0) { 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); } @@ -1652,7 +1652,7 @@ static void LoadUnloadVehicle(Vehicle *f 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 (v == front || !v->Previous()->HasArticulatedPart()) artic_part = 0; if (v->cargo_cap == 0) continue; artic_part++; @@ -1664,7 +1664,7 @@ static void LoadUnloadVehicle(Vehicle *f 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) { @@ -1916,7 +1916,7 @@ void LoadUnloadStation(Station *st) /* No vehicle is here... */ if (st->loading_vehicles.empty()) return; - Vehicle *last_loading = NULL; + Vehicle *last_loading = nullptr; std::list::iterator iter; /* Check if anything will be loaded at all. Otherwise we don't need to reserve either. */ @@ -1936,7 +1936,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 (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ++iter) { Vehicle *v = *iter; @@ -2018,7 +2018,7 @@ CommandCost CmdBuyShareInCompany(TileInd /* 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); @@ -2068,7 +2068,7 @@ CommandCost CmdSellShareInCompany(TileIn 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. */ @@ -2107,7 +2107,7 @@ CommandCost CmdBuyCompany(TileIndex tile { 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; diff --git a/src/effectvehicle.cpp b/src/effectvehicle.cpp --- a/src/effectvehicle.cpp +++ b/src/effectvehicle.cpp @@ -595,7 +595,7 @@ assert_compile(lengthof(_effect_transpar */ 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; diff --git a/src/elrail.cpp b/src/elrail.cpp --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -82,7 +82,7 @@ static inline TLG GetTLG(TileIndex t) /** * 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 TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override) @@ -101,7 +101,7 @@ static TrackBits GetRailTrackBitsUnivers case MP_TUNNELBRIDGE: if (GetTunnelBridgeTransportType(t) != TRANSPORT_RAIL) return TRACK_BIT_NONE; if (!HasRailCatenary(GetRailType(t))) return TRACK_BIT_NONE; - if (override != NULL && (IsTunnel(t) || GetTunnelBridgeLength(t, GetOtherBridgeEnd(t)) > 0)) { + if (override != nullptr && (IsTunnel(t) || GetTunnelBridgeLength(t, GetOtherBridgeEnd(t)) > 0)) { *override = 1 << GetTunnelBridgeDirection(t); } return DiagDirToDiagTrackBits(GetTunnelBridgeDirection(t)); @@ -326,7 +326,7 @@ static void DrawRailCatenaryRailway(cons /* 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); - trackconfig[TS_NEIGHBOUR] = GetRailTrackBitsUniversal(neighbour, NULL); + trackconfig[TS_NEIGHBOUR] = GetRailTrackBitsUniversal(neighbour, nullptr); wireconfig[TS_NEIGHBOUR] = MaskWireBits(neighbour, trackconfig[TS_NEIGHBOUR]); if (IsTunnelTile(neighbour) && i != GetTunnelBridgeDirection(neighbour)) wireconfig[TS_NEIGHBOUR] = trackconfig[TS_NEIGHBOUR] = TRACK_BIT_NONE; diff --git a/src/engine.cpp b/src/engine.cpp --- a/src/engine.cpp +++ b/src/engine.cpp @@ -69,9 +69,9 @@ assert_compile(lengthof(_orig_rail_vehic 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) { } @@ -162,7 +162,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; } /** @@ -199,28 +199,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; } @@ -233,7 +233,7 @@ uint Engine::DetermineCapacity(const Veh 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: @@ -869,7 +869,7 @@ void ClearEnginesHiddenFlagOfCompany(Com 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) { @@ -893,7 +893,7 @@ CommandCost CmdSetVehicleVisibility(Tile 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); @@ -1021,7 +1021,7 @@ static bool IsUniqueEngineName(const cha 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; @@ -1039,7 +1039,7 @@ static bool IsUniqueEngineName(const cha 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); @@ -1052,7 +1052,7 @@ CommandCost CmdRenameEngine(TileIndex ti free(e->name); if (reset) { - e->name = NULL; + e->name = nullptr; } else { e->name = stredup(text); } @@ -1077,7 +1077,7 @@ bool IsEngineBuildable(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; /* check if it's an engine of specified type */ if (e->type != type) return false; @@ -1113,7 +1113,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; diff --git a/src/engine_base.h b/src/engine_base.h --- a/src/engine_base.h +++ b/src/engine_base.h @@ -83,7 +83,7 @@ struct Engine : EnginePool::PoolItem<&_e 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<&_e * @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; diff --git a/src/error.h b/src/error.h --- a/src/error.h +++ b/src/error.h @@ -43,7 +43,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); + 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); /** Check whether error window shall display a company manager face */ bool HasFace() const { return face != INVALID_COMPANY; } @@ -56,7 +56,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); +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); void ClearErrorMessages(); void ShowFirstError(); void UnshowCriticalError(); diff --git a/src/error_gui.cpp b/src/error_gui.cpp --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -76,7 +76,7 @@ ErrorMessageData::ErrorMessageData(const { *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]; } @@ -357,7 +357,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; @@ -377,7 +377,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) { - 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) { @@ -408,7 +408,7 @@ void ShowErrorMessage(StringID summary_m 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, diff --git a/src/fileio.cpp b/src/fileio.cpp --- a/src/fileio.cpp +++ b/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(uint8 slot, size_t po 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(int slot, const char *f 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(int slot, const char *f /* 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_SUB 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 ch * @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 c #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 * 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 * } #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 * /** * 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 * * 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, /* 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, cons 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 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 *fil * 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 *fil * 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 *fil /* 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 *fil /* 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 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 /* 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 ChangeWorkingDirectoryToExec 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 ChangeWorkingDirectoryToExec 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(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 * 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, co 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, co 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++; } } diff --git a/src/fileio_func.h b/src/fileio_func.h --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -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_SEAR */ 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); diff --git a/src/fios.cpp b/src/fios.cpp --- a/src/fios.cpp +++ b/src/fios.cpp @@ -105,7 +105,7 @@ void FileList::BuildFileList(AbstractFil * 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 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 **pa /** * 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 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 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, /* 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 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(SaveLoadOper } /* 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(SaveLoadOper /* 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 *fil 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 *fil * @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(Sav * .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(Sav 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(Sav */ 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(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 FiosGetScenarioListCallb */ 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(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 FiosGetHeightmapListCall */ 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(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(SaveLoadOperat */ 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(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 ContentIn } } - return NULL; + return nullptr; } /** @@ -742,7 +742,7 @@ const char *FindScenario(const ContentIn */ bool HasScenario(const ContentInfo *ci, bool md5sum) { - return (FindScenario(ci, md5sum) != NULL); + return (FindScenario(ci, md5sum) != nullptr); } /** diff --git a/src/fios.h b/src/fios.h --- a/src/fios.h +++ b/src/fios.h @@ -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(); diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -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); @@ -273,7 +273,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. @@ -417,7 +417,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; @@ -461,7 +461,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; @@ -517,7 +517,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; @@ -533,7 +533,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 { @@ -607,7 +607,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); @@ -652,7 +652,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; @@ -700,8 +700,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; @@ -776,14 +776,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 */ @@ -799,12 +799,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; } @@ -839,7 +839,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); } } diff --git a/src/fontcache.cpp b/src/fontcache.cpp --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -41,7 +41,7 @@ FontCache::FontCache(FontSize fs) : pare 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; Layouter::ResetFontCache(this->fs); } @@ -84,7 +84,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; } }; @@ -93,7 +93,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(); } @@ -108,14 +108,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(256); - if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == NULL) this->glyph_to_spriteid_map[GB(key, 8, 8)] = CallocT(256); + if (this->glyph_to_spriteid_map == nullptr) this->glyph_to_spriteid_map = CallocT(256); + if (this->glyph_to_spriteid_map[GB(key, 8, 8)] == nullptr) this->glyph_to_spriteid_map[GB(key, 8, 8)] = CallocT(256); this->glyph_to_spriteid_map[GB(key, 8, 8)][GB(key, 0, 8)] = sprite; } @@ -159,13 +159,13 @@ void SpriteFontCache::InitializeUnicodeG */ 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() @@ -258,7 +258,7 @@ public: virtual bool IsBuiltInFont() { return false; } }; -FT_Library _library = NULL; +FT_Library _library = nullptr; FreeTypeSettings _freetype; @@ -271,9 +271,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); } @@ -286,7 +286,7 @@ void FreeTypeFontCache::SetFontSize(Font 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]); @@ -338,7 +338,7 @@ void FreeTypeFontCache::SetFontSize(Font */ static void LoadFreeTypeFont(FontSize fs) { - FreeTypeSubSetting *settings = NULL; + FreeTypeSubSetting *settings = nullptr; switch (fs) { default: NOT_REACHED(); case FS_SMALL: settings = &_freetype.small; break; @@ -349,7 +349,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; @@ -358,7 +358,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); @@ -384,7 +384,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; } @@ -408,7 +408,7 @@ found_face: FreeTypeFontCache::~FreeTypeFontCache() { FT_Done_Face(this->face); - this->face = NULL; + this->face = nullptr; this->ClearFontCache(); for (auto &iter : this->font_tables) { @@ -422,12 +422,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; @@ -438,27 +438,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(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(256); } @@ -497,7 +497,7 @@ const Sprite *FreeTypeFontCache::GetGlyp /* 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; @@ -535,7 +535,7 @@ const Sprite *FreeTypeFontCache::GetGlyp }; 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); @@ -611,7 +611,7 @@ uint FreeTypeFontCache::GetGlyphWidth(Gl 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); } @@ -639,9 +639,9 @@ const void *FreeTypeFontCache::GetFontTa } 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(len); @@ -685,6 +685,6 @@ void UninitFreeType() #ifdef WITH_FREETYPE FT_Done_FreeType(_library); - _library = NULL; + _library = nullptr; #endif /* WITH_FREETYPE */ } diff --git a/src/fontcache.h b/src/fontcache.h --- a/src/fontcache.h +++ b/src/fontcache.h @@ -147,7 +147,7 @@ public: */ inline bool HasParent() { - return this->parent != NULL; + return this->parent != nullptr; } /** diff --git a/src/fontdetection.cpp b/src/fontdetection.cpp --- a/src/fontdetection.cpp +++ b/src/fontdetection.cpp @@ -53,7 +53,7 @@ const char *GetShortPath(const TCHAR *lo #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 *f 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 *f * 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(co 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(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(con 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(con 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(con 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 *s 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 *f 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 *s /* 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 *s 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 *s /* 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 *s * 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 *s 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 *s /* 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 *f /* 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 *f /* 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 *f 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 *s 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 *s 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 *s } } - if (best_font != NULL) { + if (best_font != nullptr) { ret = true; callback->SetFontNames(settings, best_font); InitFreeType(callback->Monospace()); diff --git a/src/game/game_config.cpp b/src/game/game_config.cpp --- a/src/game/game_config.cpp +++ b/src/game/game_config.cpp @@ -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 c 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; } diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -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 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 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 cur_company(_current_company, OWNER_DEITY, FILE_LINE); Game::instance->Load(version); cur_company.Restore(); diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -55,8 +55,8 @@ template <> const char *GetClassName const char *GetClassNameGetScanner()->RegisterScript(info); return 0; @@ -91,7 +91,7 @@ template <> const char *GetClassNameGetURL() != NULL) { + if (info->GetURL() != nullptr) { ScriptLog::Info("Please report the error to the following URL:"); ScriptLog::Info(info->GetURL()); } diff --git a/src/game/game_scanner.cpp b/src/game/game_scanner.cpp --- a/src/game/game_scanner.cpp +++ b/src/game/game_scanner.cpp @@ -35,14 +35,14 @@ void GameScannerInfo::RegisterAPI(class 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(cons /* 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::FindLib /* 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((*iter).second); } diff --git a/src/game/game_scanner.hpp b/src/game/game_scanner.hpp --- a/src/game/game_scanner.hpp +++ b/src/game/game_scanner.hpp @@ -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); diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -63,11 +63,11 @@ void NORETURN CDECL strgen_fatal(const c /** * 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 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 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 ReadRaw 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 *e { 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 *e */ 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) { diff --git a/src/game/game_text.hpp b/src/game/game_text.hpp --- a/src/game/game_text.hpp +++ b/src/game/game_text.hpp @@ -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(); }; diff --git a/src/gamelog.cpp b/src/gamelog.cpp --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -34,9 +34,9 @@ extern byte _sl_minor_version; ///< 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 /** @@ -81,9 +81,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); @@ -114,9 +114,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; } /** @@ -132,18 +132,18 @@ static char *PrintGrfInfo(char *buf, con { 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"); @@ -273,7 +273,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 { @@ -299,7 +299,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; } @@ -308,7 +308,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; } @@ -321,7 +321,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; } @@ -372,21 +372,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; } @@ -416,7 +416,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++) { @@ -426,7 +426,7 @@ bool GamelogTestEmergency() } } - return (emergency != NULL); + return (emergency != nullptr); } /** @@ -437,7 +437,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; memset(lc->revision.text, 0, sizeof(lc->revision.text)); strecpy(lc->revision.text, GetGamelogRevisionString(), lastof(lc->revision.text)); @@ -454,7 +454,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; @@ -468,7 +468,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); @@ -485,7 +485,7 @@ void GamelogSetting(const char *name, in 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; @@ -499,7 +499,7 @@ void GamelogSetting(const char *name, in */ 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++) { @@ -509,7 +509,7 @@ void GamelogTestRevision() } } - if (rev == NULL || strcmp(rev->revision.text, GetGamelogRevisionString()) != 0 || + if (rev == nullptr || strcmp(rev->revision.text, GetGamelogRevisionString()) != 0 || rev->revision.modified != _openttd_revision_modified || rev->revision.newgrf != _openttd_newgrf_version) { GamelogRevision(); @@ -522,7 +522,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++) { @@ -532,7 +532,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(); } @@ -547,7 +547,7 @@ static void GamelogGRFBug(uint32 grfid, 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; @@ -603,7 +603,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; } @@ -619,7 +619,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; } @@ -634,7 +634,7 @@ void GamelogGRFCompatible(const GRFIdent 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; } @@ -649,7 +649,7 @@ static void GamelogGRFMove(uint32 grfid, 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; @@ -665,7 +665,7 @@ static void GamelogGRFParameters(uint32 assert(_gamelog_action_type == GLAT_GRF); LoggedChange *lc = GamelogChange(GLCT_GRFPARAM); - if (lc == NULL) return; + if (lc == nullptr) return; lc->grfparam.grfid = grfid; } @@ -679,7 +679,7 @@ void GamelogGRFAddList(const GRFConfig * { 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); } } @@ -697,14 +697,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(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; } diff --git a/src/genworld.cpp b/src/genworld.cpp --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -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); @@ -171,7 +171,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++) { @@ -192,7 +192,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(); @@ -278,7 +278,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(); @@ -302,7 +302,7 @@ void GenerateWorld(GenWorldMode mode, ui _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; @@ -345,7 +345,7 @@ void GenerateWorld(GenWorldMode mode, ui 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); } } diff --git a/src/genworld.h b/src/genworld.h --- a/src/genworld.h +++ b/src/genworld.h @@ -60,8 +60,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) }; diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -442,7 +442,7 @@ struct GenerateLandscapeWindow : public 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); @@ -509,7 +509,7 @@ struct GenerateLandscapeWindow : public default: return; } - if (strs != NULL) { + if (strs != nullptr) { while (*strs != INVALID_STRING_ID) { *size = maxdim(*size, GetStringBoundingBox(*strs++)); } @@ -761,7 +761,7 @@ struct GenerateLandscapeWindow : public void OnQueryTextFinished(char *str) override { /* Was 'cancel' pressed? */ - if (str == NULL) return; + if (str == nullptr) return; int32 value; if (!StrEmpty(str)) { @@ -808,14 +808,14 @@ struct GenerateLandscapeWindow : public }; 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) @@ -1110,7 +1110,7 @@ static const NWidgetPart _nested_create_ }; 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) @@ -1138,7 +1138,7 @@ static const NWidgetPart _nested_generat 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) diff --git a/src/gfx.cpp b/src/gfx.cpp --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -53,8 +53,8 @@ static byte _stringwidth_table[FS_END][2 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 _cursor_backup; @@ -76,7 +76,7 @@ static const uint DIRTY_BLOCK_HEIGHT = 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 Paragrap 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 * @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, { 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 * co 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) { @@ -1203,7 +1203,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(); @@ -1216,7 +1216,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(); @@ -1578,7 +1578,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); @@ -1628,7 +1628,7 @@ void SetMouseCursor(CursorID sprite, 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(); } diff --git a/src/gfx_func.h b/src/gfx_func.h --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -72,7 +72,7 @@ extern Dimension _cur_resolution; extern Palette _cur_palette; ///< Current palette void HandleKeypress(uint keycode, WChar key); -void HandleTextInput(const char *str, bool marked = false, const char *caret = NULL, const char *insert_location = NULL, const char *replacement_end = NULL); +void HandleTextInput(const char *str, bool marked = false, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr); void HandleCtrlChanged(); void HandleMouseEvents(); void UpdateWindows(); @@ -88,9 +88,9 @@ static const int DRAW_STRING_BUFFER = 20 void RedrawScreenRect(int left, int top, int right, int bottom); void GfxScroll(int left, int top, int width, int height, int xo, int yo); -Dimension GetSpriteSize(SpriteID sprid, Point *offset = NULL, ZoomLevel zoom = ZOOM_LVL_GUI); -void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL); -void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = NULL, ZoomLevel zoom = ZOOM_LVL_GUI); +Dimension GetSpriteSize(SpriteID sprid, Point *offset = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI); +void DrawSpriteViewport(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr); +void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub = nullptr, ZoomLevel zoom = ZOOM_LVL_GUI); /** How to align the to-be drawn text. */ enum StringAlignment { diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -174,7 +174,7 @@ public: std::unique_ptr NextLine(int max_width) override { icu::ParagraphLayout::Line *l = p->nextLine(max_width); - return std::unique_ptr(l == NULL ? NULL : new ICULine(l)); + return std::unique_ptr(l == nullptr ? nullptr : new ICULine(l)); } }; @@ -208,10 +208,10 @@ public: LEErrorCode status = LE_NO_ERROR; /* ParagraphLayout does not copy "buff", so it must stay valid. * "runs" is copied according to the ICU source, but the documentation does not specify anything, so this might break somewhen. */ - icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, NULL, NULL, NULL, _current_text_dir == TD_RTL ? UBIDI_DEFAULT_RTL : UBIDI_DEFAULT_LTR, false, status); + icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, nullptr, nullptr, nullptr, _current_text_dir == TD_RTL ? UBIDI_DEFAULT_RTL : UBIDI_DEFAULT_LTR, false, status); if (status != LE_NO_ERROR) { delete p; - return NULL; + return nullptr; } return new ICUParagraphLayout(p); @@ -234,7 +234,7 @@ public: * visual runs. * * One constructs this class with the text that needs to be split into - * lines. Then nextLine is called with the maximum width until NULL is + * lines. Then nextLine is called with the maximum width until nullptr is * returned. Each nextLine call creates VisualRuns which contain the * length of text that are to be drawn with the same font. In other * words, the result of this class is a list of sub strings with their @@ -358,9 +358,9 @@ FallbackParagraphLayout::FallbackVisualR this->glyph_to_char = other.glyph_to_char; this->glyphs = other.glyphs; - other.positions = NULL; - other.glyph_to_char = NULL; - other.glyphs = NULL; + other.positions = nullptr; + other.glyph_to_char = nullptr; + other.glyphs = nullptr; } /** Free all data. */ @@ -496,7 +496,7 @@ void FallbackParagraphLayout::Reflow() /** * Construct a new line with a maximum width. * @param max_width The maximum width of the string. - * @return A Line, or NULL when at the end of the paragraph. + * @return A Line, or nullptr when at the end of the paragraph. */ std::unique_ptr FallbackParagraphLayout::NextLine(int max_width) { @@ -504,13 +504,13 @@ std::unique_ptrbuffer == NULL) return NULL; + if (this->buffer == nullptr) return nullptr; std::unique_ptr l(new FallbackLine()); if (*this->buffer == '\0') { /* Only a newline. */ - this->buffer = NULL; + this->buffer = nullptr; l->emplace_back(this->runs.front().second, this->buffer, 0, 0); return std::move(l); // Not supposed to be needed, but clang-3.8 barfs otherwise. } @@ -526,7 +526,7 @@ std::unique_ptrbuffer_begin + iter->first; const WChar *begin = this->buffer; - const WChar *last_space = NULL; + const WChar *last_space = nullptr; const WChar *last_char; int width = 0; for (;;) { @@ -534,7 +534,7 @@ std::unique_ptrbuffer; if (c == '\0') { - this->buffer = NULL; + this->buffer = nullptr; break; } @@ -547,7 +547,7 @@ std::unique_ptrbuffer_begin + iter->first; begin = this->buffer; - last_space = NULL; + last_space = nullptr; } if (IsWhitespace(c)) last_space = this->buffer; @@ -561,11 +561,11 @@ std::unique_ptrbuffer = NULL; + this->buffer = nullptr; return std::move(l); // Not supposed to be needed, but clang-3.8 barfs otherwise. } - if (last_space == NULL) { + if (last_space == nullptr) { /* No space has been found. Just terminate at our current * location. This usually happens for languages that do not * require spaces in strings, like Chinese, Japanese and @@ -595,7 +595,7 @@ std::unique_ptr static inline void GetLayouter(Layouter::LineCacheItem &line, const char *&str, FontState &state) { - if (line.buffer != NULL) free(line.buffer); + if (line.buffer != nullptr) free(line.buffer); typename T::CharType *buff_begin = MallocT(DRAW_STRING_BUFFER); const typename T::CharType *buffer_last = buff_begin + DRAW_STRING_BUFFER; @@ -679,7 +679,7 @@ Layouter::Layouter(const char *str, int } LineCacheItem& line = GetCachedParagraphLayout(str, lineend - str, state); - if (line.layout != NULL) { + if (line.layout != nullptr) { /* Line is in cache */ str = lineend + 1; state = line.state_after; @@ -693,7 +693,7 @@ Layouter::Layouter(const char *str, int #ifdef WITH_ICU_LX GetLayouter(line, str, state); - if (line.layout == NULL) { + if (line.layout == nullptr) { static bool warned = false; if (!warned) { DEBUG(misc, 0, "ICU layouter bailed on the font. Falling back to the fallback layouter"); @@ -706,9 +706,9 @@ Layouter::Layouter(const char *str, int #endif #ifdef WITH_UNISCRIBE - if (line.layout == NULL) { + if (line.layout == nullptr) { GetLayouter(line, str, state); - if (line.layout == NULL) { + if (line.layout == nullptr) { state = old_state; str = old_str; } @@ -716,16 +716,16 @@ Layouter::Layouter(const char *str, int #endif #ifdef WITH_COCOA - if (line.layout == NULL) { + if (line.layout == nullptr) { GetLayouter(line, str, state); - if (line.layout == NULL) { + if (line.layout == nullptr) { state = old_state; str = old_str; } } #endif - if (line.layout == NULL) { + if (line.layout == nullptr) { GetLayouter(line, str, state); } } @@ -733,7 +733,7 @@ Layouter::Layouter(const char *str, int /* Move all lines into a local cache so we can reuse them later on more easily. */ for (;;) { auto l = line.layout->NextLine(maxw); - if (l == NULL) break; + if (l == nullptr) break; this->push_back(std::move(l)); } } while (c != '\0'); @@ -804,7 +804,7 @@ Point Layouter::GetCharPosition(const ch /** * Get the character that is at a position. * @param x Position in the string. - * @return Pointer to the character at the position or NULL if no character is at the position. + * @return Pointer to the character at the position or nullptr if no character is at the position. */ const char *Layouter::GetCharAtPosition(int x) const { @@ -835,7 +835,7 @@ const char *Layouter::GetCharAtPosition( } } - return NULL; + return nullptr; } /** @@ -883,7 +883,7 @@ void Layouter::ResetFontCache(FontSize s */ Layouter::LineCacheItem &Layouter::GetCachedParagraphLayout(const char *str, size_t len, const FontState &state) { - if (linecache == NULL) { + if (linecache == nullptr) { /* Create linecache on first access to avoid trouble with initialisation order of static variables. */ linecache = new LineCache(); } @@ -899,7 +899,7 @@ Layouter::LineCacheItem &Layouter::GetCa */ void Layouter::ResetLineCache() { - if (linecache != NULL) linecache->clear(); + if (linecache != nullptr) linecache->clear(); } /** @@ -907,7 +907,7 @@ void Layouter::ResetLineCache() */ void Layouter::ReduceLineCache() { - if (linecache != NULL) { + if (linecache != nullptr) { /* TODO LRU cache would be fancy, but not exactly necessary */ if (linecache->size() > 4096) ResetLineCache(); } diff --git a/src/gfx_layout.h b/src/gfx_layout.h --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -177,7 +177,7 @@ public: FontState state_after; ///< Font state after the line. ParagraphLayouter *layout; ///< Layout of the line. - LineCacheItem() : buffer(NULL), layout(NULL) {} + LineCacheItem() : buffer(nullptr), layout(nullptr) {} ~LineCacheItem() { delete layout; free(buffer); } }; private: diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -120,7 +120,7 @@ static void LoadGrfFileIndexed(const cha */ void CheckExternalFiles() { - if (BaseGraphics::GetUsedSet() == NULL || BaseSounds::GetUsedSet() == NULL) return; + if (BaseGraphics::GetUsedSet() == nullptr || BaseSounds::GetUsedSet() == nullptr) return; const GraphicsSet *used_set = BaseGraphics::GetUsedSet(); @@ -265,7 +265,7 @@ static bool SwitchNewGRFBlitter() */ uint depth_wanted_by_base = BaseGraphics::GetUsedSet()->blitter == BLT_32BPP ? 32 : 8; uint depth_wanted_by_grf = _support8bpp == S8BPP_NONE ? 32 : 8; - for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND || HasBit(c->flags, GCF_INIT_ONLY)) continue; if (c->palette & GRFP_BLT_32BPP) depth_wanted_by_grf = 32; } @@ -307,18 +307,18 @@ static bool SwitchNewGRFBlitter() VideoDriver::GetInstance()->ReleaseBlitterLock(); return false; } - if (BlitterFactory::GetBlitterFactory(repl_blitter) == NULL) continue; + if (BlitterFactory::GetBlitterFactory(repl_blitter) == nullptr) continue; DEBUG(misc, 1, "Switching blitter from '%s' to '%s'... ", cur_blitter, repl_blitter); Blitter *new_blitter = BlitterFactory::SelectBlitter(repl_blitter); - if (new_blitter == NULL) NOT_REACHED(); + if (new_blitter == nullptr) NOT_REACHED(); DEBUG(misc, 1, "Successfully switched to %s.", repl_blitter); break; } if (!VideoDriver::GetInstance()->AfterBlitterChange()) { /* Failed to switch blitter, let's hope we can return to the old one. */ - if (BlitterFactory::SelectBlitter(cur_blitter) == NULL || !VideoDriver::GetInstance()->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config"); + if (BlitterFactory::SelectBlitter(cur_blitter) == nullptr || !VideoDriver::GetInstance()->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config"); } VideoDriver::GetInstance()->ReleaseBlitterLock(); @@ -362,7 +362,7 @@ bool GraphicsSet::FillSetDetails(IniFile /* Get optional blitter information. */ item = metadata->GetItem("blitter", false); - this->blitter = (item != NULL && *item->value == '3') ? BLT_32BPP : BLT_8BPP; + this->blitter = (item != nullptr && *item->value == '3') ? BLT_32BPP : BLT_8BPP; } return ret; } @@ -380,7 +380,7 @@ bool GraphicsSet::FillSetDetails(IniFile { size_t size = 0; FILE *f = FioFOpenFile(file->filename, "rb", subdir, &size); - if (f == NULL) return MD5File::CR_NO_FILE; + if (f == nullptr) return MD5File::CR_NO_FILE; size_t max = GRFGetSizeOfDataSection(f); @@ -404,7 +404,7 @@ MD5File::ChecksumResult MD5File::CheckMD size_t size; FILE *f = FioFOpenFile(this->filename, "rb", subdir, &size); - if (f == NULL) return CR_NO_FILE; + if (f == nullptr) return CR_NO_FILE; size = min(size, max_size); @@ -434,14 +434,14 @@ template /* static */ bool BaseMedia::DetermineBestSet() { - if (BaseMedia::used_set != NULL) return true; + if (BaseMedia::used_set != nullptr) return true; - const Tbase_set *best = NULL; - for (const Tbase_set *c = BaseMedia::available_sets; c != NULL; c = c->next) { + const Tbase_set *best = nullptr; + for (const Tbase_set *c = BaseMedia::available_sets; c != nullptr; c = c->next) { /* Skip unusable sets */ if (c->GetNumMissing() != 0) continue; - if (best == NULL || + if (best == nullptr || (best->fallback && !c->fallback) || best->valid_files < c->valid_files || (best->valid_files == c->valid_files && ( @@ -452,7 +452,7 @@ template } BaseMedia::used_set = best; - return BaseMedia::used_set != NULL; + return BaseMedia::used_set != nullptr; } template diff --git a/src/goal.cpp b/src/goal.cpp --- a/src/goal.cpp +++ b/src/goal.cpp @@ -93,7 +93,7 @@ CommandCost CmdCreateGoal(TileIndex tile g->dst = p2; g->company = company; g->text = stredup(text); - g->progress = NULL; + g->progress = nullptr; g->completed = false; if (g->company == INVALID_COMPANY) { @@ -187,7 +187,7 @@ CommandCost CmdSetGoalProgress(TileIndex Goal *g = Goal::Get(p1); free(g->progress); if (StrEmpty(text)) { - g->progress = NULL; + g->progress = nullptr; } else { g->progress = stredup(text); } diff --git a/src/goal_base.h b/src/goal_base.h --- a/src/goal_base.h +++ b/src/goal_base.h @@ -34,7 +34,7 @@ struct Goal : GoalPool::PoolItem<&_goal_ inline Goal() { } /** - * (Empty) destructor has to be defined else operator delete might be called with NULL parameter + * (Empty) destructor has to be defined else operator delete might be called with nullptr parameter */ inline ~Goal() { free(this->text); free(this->progress); } }; diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -223,7 +223,7 @@ struct GoalListWindow : public Window { } case GC_PROGRESS: - if (s->progress != NULL) { + if (s->progress != nullptr) { SetDParamStr(0, s->progress); StringID str = s->completed ? STR_GOALS_PROGRESS_COMPLETE : STR_GOALS_PROGRESS; int progress_x = x; @@ -282,7 +282,7 @@ struct GoalListWindow : public Window { uint max_width = 0; Goal *s; FOR_ALL_GOALS(s) { - if (s->progress != NULL) { + if (s->progress != nullptr) { SetDParamStr(0, s->progress); StringID str = s->completed ? STR_GOALS_PROGRESS_COMPLETE : STR_GOALS_PROGRESS; uint str_width = GetStringBoundingBox(str).width; @@ -473,7 +473,7 @@ static const NWidgetPart _nested_goal_qu }; static WindowDesc _goal_question_list_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_GOAL_QUESTION, WC_NONE, WDF_CONSTRUCTION, _nested_goal_question_widgets, lengthof(_nested_goal_question_widgets) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -595,7 +595,7 @@ public: int numd = 0; for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) { c = Company::GetIfValid(k); - if (c != NULL) { + if (c != nullptr) { this->colours[numd] = _colour_gradient[c->colour][6]; for (int j = this->num_on_x_axis, i = 0; --j >= 0;) { this->cost[numd][i] = (j >= c->num_valid_stat_ent) ? INVALID_DATAPOINT : GetGraphData(c, j); diff --git a/src/ground_vehicle.cpp b/src/ground_vehicle.cpp --- a/src/ground_vehicle.cpp +++ b/src/ground_vehicle.cpp @@ -30,7 +30,7 @@ void GroundVehicle::PowerChange uint32 number_of_parts = 0; uint16 max_track_speed = v->GetDisplayMaxSpeed(); - for (const T *u = v; u != NULL; u = u->Next()) { + for (const T *u = v; u != nullptr; u = u->Next()) { uint32 current_power = u->GetPower() + u->GetPoweredPartPower(u); total_power += current_power; @@ -83,7 +83,7 @@ void GroundVehicle::CargoChange assert(this->First() == this); uint32 weight = 0; - for (T *u = T::From(this); u != NULL; u = u->Next()) { + for (T *u = T::From(this); u != nullptr; u = u->Next()) { uint32 current_weight = u->GetWeight(); weight += current_weight; /* Slope steepness is in percent, result in N. */ @@ -198,7 +198,7 @@ bool GroundVehicle::IsChainInDe if (!IsDepotTypeTile(v->tile, (TransportType)Type) || v->cur_speed != 0) return false; /* Check whether the rest is also already trying to enter the depot. */ - for (; v != NULL; v = v->Next()) { + for (; v != nullptr; v = v->Next()) { if (!v->T::IsInDepot() || v->tile != this->tile) return false; } diff --git a/src/ground_vehicle.hpp b/src/ground_vehicle.hpp --- a/src/ground_vehicle.hpp +++ b/src/ground_vehicle.hpp @@ -102,7 +102,7 @@ struct GroundVehicle : public Specialize uint Crash(bool flooded) override { /* Crashed vehicles aren't going up or down */ - for (T *v = T::From(this); v != NULL; v = v->Next()) { + for (T *v = T::From(this); v != nullptr; v = v->Next()) { ClrBit(v->gv_flags, GVF_GOINGUP_BIT); ClrBit(v->gv_flags, GVF_GOINGDOWN_BIT); } @@ -117,7 +117,7 @@ struct GroundVehicle : public Specialize { int64 incl = 0; - for (const T *u = T::From(this); u != NULL; u = u->Next()) { + for (const T *u = T::From(this); u != nullptr; u = u->Next()) { if (HasBit(u->gv_flags, GVF_GOINGUP_BIT)) { incl += u->gcache.cached_slope_resistance; } else if (HasBit(u->gv_flags, GVF_GOINGDOWN_BIT)) { diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -225,7 +225,7 @@ void GroupStatistics::Clear() g->statistics.ClearAutoreplace(); } - for (EngineRenewList erl = c->engine_renew_list; erl != NULL; erl = erl->next) { + for (EngineRenewList erl = c->engine_renew_list; erl != nullptr; erl = erl->next) { const Engine *e = Engine::Get(erl->from); GroupStatistics &stats = GroupStatistics::Get(company, erl->group_id, e->type); if (!stats.autoreplace_defined) { @@ -277,7 +277,7 @@ void PropagateChildLivery(const Group *g Vehicle *v; FOR_ALL_VEHICLES(v) { if (v->group_id == g->index && (!v->IsGroundVehicle() || v->IsFrontEngine())) { - for (Vehicle *u = v; u != NULL; u = u->Next()) { + for (Vehicle *u = v; u != nullptr; u = u->Next()) { u->colourmap = PAL_NONE; u->InvalidateNewGRFCache(); } @@ -324,7 +324,7 @@ CommandCost CmdCreateGroup(TileIndex til if (!Group::CanAllocateItem()) return CMD_ERROR; const Group *pg = Group::GetIfValid(GB(p2, 0, 16)); - if (pg != NULL) { + if (pg != nullptr) { if (pg->owner != _current_company) return CMD_ERROR; if (pg->vehicle_type != vt) return CMD_ERROR; } @@ -335,7 +335,7 @@ CommandCost CmdCreateGroup(TileIndex til g->vehicle_type = vt; g->parent = INVALID_GROUP; - if (pg == NULL) { + if (pg == nullptr) { const Company *c = Company::Get(_current_company); g->livery.colour1 = c->livery[LS_DEFAULT].colour1; g->livery.colour2 = c->livery[LS_DEFAULT].colour2; @@ -368,7 +368,7 @@ CommandCost CmdCreateGroup(TileIndex til CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Group *g = Group::GetIfValid(p1); - if (g == NULL || g->owner != _current_company) return CMD_ERROR; + if (g == nullptr || g->owner != _current_company) return CMD_ERROR; /* Remove all vehicles from the group */ DoCommand(0, p1, 0, flags, CMD_REMOVE_ALL_VEHICLES_GROUP); @@ -424,7 +424,7 @@ CommandCost CmdDeleteGroup(TileIndex til CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Group *g = Group::GetIfValid(GB(p1, 0, 16)); - if (g == NULL || g->owner != _current_company) return CMD_ERROR; + if (g == nullptr || g->owner != _current_company) return CMD_ERROR; if (!HasBit(p1, 16)) { /* Rename group */ @@ -438,13 +438,13 @@ CommandCost CmdAlterGroup(TileIndex tile /* Delete the old name */ free(g->name); /* Assign the new one */ - g->name = reset ? NULL : stredup(text); + g->name = reset ? nullptr : stredup(text); } } else { /* Set group parent */ const Group *pg = Group::GetIfValid(GB(p2, 0, 16)); - if (pg != NULL) { + if (pg != nullptr) { if (pg->owner != _current_company) return CMD_ERROR; if (pg->vehicle_type != g->vehicle_type) return CMD_ERROR; @@ -454,7 +454,7 @@ CommandCost CmdAlterGroup(TileIndex tile } if (flags & DC_EXEC) { - g->parent = (pg == NULL) ? INVALID_GROUP : pg->index; + g->parent = (pg == nullptr) ? INVALID_GROUP : pg->index; GroupStatistics::UpdateAutoreplace(g->owner); if (g->livery.in_use == 0) { @@ -498,7 +498,7 @@ static void AddVehicleToGroup(Vehicle *v case VEH_AIRCRAFT: if (v->IsEngineCountable()) UpdateNumEngineGroup(v, v->group_id, new_g); v->group_id = new_g; - for (Vehicle *u = v; u != NULL; u = u->Next()) { + for (Vehicle *u = v; u != nullptr; u = u->Next()) { u->colourmap = PAL_NONE; u->InvalidateNewGRFCache(); u->UpdateViewport(true); @@ -526,7 +526,7 @@ CommandCost CmdAddVehicleGroup(TileIndex Vehicle *v = Vehicle::GetIfValid(GB(p2, 0, 20)); GroupID new_g = p1; - if (v == NULL || (!Group::IsValidID(new_g) && !IsDefaultGroupID(new_g) && new_g != NEW_GROUP)) return CMD_ERROR; + if (v == nullptr || (!Group::IsValidID(new_g) && !IsDefaultGroupID(new_g) && new_g != NEW_GROUP)) return CMD_ERROR; if (Group::IsValidID(new_g)) { Group *g = Group::Get(new_g); @@ -537,7 +537,7 @@ CommandCost CmdAddVehicleGroup(TileIndex if (new_g == NEW_GROUP) { /* Create new group. */ - CommandCost ret = CmdCreateGroup(0, flags, v->type, 0, NULL); + CommandCost ret = CmdCreateGroup(0, flags, v->type, 0, nullptr); if (ret.Failed()) return ret; new_g = _new_group_id; @@ -548,7 +548,7 @@ CommandCost CmdAddVehicleGroup(TileIndex if (HasBit(p2, 31)) { /* Add vehicles in the shared order list as well. */ - for (Vehicle *v2 = v->FirstShared(); v2 != NULL; v2 = v2->NextShared()) { + for (Vehicle *v2 = v->FirstShared(); v2 != nullptr; v2 = v2->NextShared()) { if (v2->group_id != new_g) AddVehicleToGroup(v2, new_g); } } @@ -592,7 +592,7 @@ CommandCost CmdAddSharedVehicleGroup(Til if (v->group_id != id_g) continue; /* For each shared vehicles add it to the group */ - for (Vehicle *v2 = v->FirstShared(); v2 != NULL; v2 = v2->NextShared()) { + for (Vehicle *v2 = v->FirstShared(); v2 != nullptr; v2 = v2->NextShared()) { if (v2->group_id != id_g) DoCommand(tile, id_g, v2->index, flags, CMD_ADD_VEHICLE_GROUP, text); } } @@ -620,7 +620,7 @@ CommandCost CmdRemoveAllVehiclesGroup(Ti GroupID old_g = p1; Group *g = Group::GetIfValid(old_g); - if (g == NULL || g->owner != _current_company) return CMD_ERROR; + if (g == nullptr || g->owner != _current_company) return CMD_ERROR; if (flags & DC_EXEC) { Vehicle *v; @@ -657,7 +657,7 @@ CommandCost CmdSetGroupLivery(TileIndex bool primary = !HasBit(p2, 8); Colours colour = Extract(p2); - if (g == NULL || g->owner != _current_company) return CMD_ERROR; + if (g == nullptr || g->owner != _current_company) return CMD_ERROR; if (colour >= COLOUR_END && colour != INVALID_COLOUR) return CMD_ERROR; @@ -709,7 +709,7 @@ static void SetGroupReplaceProtection(Gr CommandCost CmdSetGroupReplaceProtection(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Group *g = Group::GetIfValid(p1); - if (g == NULL || g->owner != _current_company) return CMD_ERROR; + if (g == nullptr || g->owner != _current_company) return CMD_ERROR; if (flags & DC_EXEC) { if (HasBit(p2, 1)) { @@ -750,7 +750,7 @@ void SetTrainGroupID(Train *v, GroupID n assert(v->IsFrontEngine() || IsDefaultGroupID(new_g)); - for (Vehicle *u = v; u != NULL; u = u->Next()) { + for (Vehicle *u = v; u != nullptr; u = u->Next()) { if (u->IsEngineCountable()) UpdateNumEngineGroup(u, u->group_id, new_g); u->group_id = new_g; @@ -777,7 +777,7 @@ void UpdateTrainGroupID(Train *v) assert(v->IsFrontEngine() || v->IsFreeWagon()); GroupID new_g = v->IsFrontEngine() ? v->group_id : (GroupID)DEFAULT_GROUP; - for (Vehicle *u = v; u != NULL; u = u->Next()) { + for (Vehicle *u = v; u != nullptr; u = u->Next()) { if (u->IsEngineCountable()) UpdateNumEngineGroup(u, u->group_id, new_g); u->group_id = new_g; diff --git a/src/group_gui.cpp b/src/group_gui.cpp --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -146,7 +146,7 @@ private: /** Sort the groups by their name */ 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]) { @@ -780,7 +780,7 @@ public: case WID_GL_REPLACE_PROTECTION: { const Group *g = Group::GetIfValid(this->vli.index); - if (g != NULL) { + if (g != nullptr) { DoCommandP(0, this->vli.index, (g->replace_protection ? 0 : 1) | (_ctrl_pressed << 1), CMD_SET_GROUP_REPLACE_PROTECTION); } break; @@ -841,7 +841,7 @@ public: uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); GroupID new_g = id_g >= this->groups.size() ? NEW_GROUP : this->groups[id_g]->index; - DoCommandP(0, new_g, vindex | (_ctrl_pressed ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : NULL); + DoCommandP(0, new_g, vindex | (_ctrl_pressed ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : nullptr); break; } @@ -873,7 +873,7 @@ public: void OnQueryTextFinished(char *str) override { - if (str != NULL) DoCommandP(0, this->group_rename, 0, CMD_ALTER_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_RENAME), NULL, str); + if (str != nullptr) DoCommandP(0, this->group_rename, 0, CMD_ALTER_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_RENAME), nullptr, str); this->group_rename = INVALID_GROUP; } @@ -1033,7 +1033,7 @@ void ShowCompanyGroup(CompanyID company, * Finds a group list window determined by vehicle type and owner * @param vt vehicle type * @param owner owner of groups - * @return pointer to VehicleGroupWindow, NULL if not found + * @return pointer to VehicleGroupWindow, nullptr if not found */ static inline VehicleGroupWindow *FindVehicleGroupWindow(VehicleType vt, Owner owner) { @@ -1054,7 +1054,7 @@ void CcCreateGroup(const CommandCost &re assert(p1 <= VEH_AIRCRAFT); VehicleGroupWindow *w = FindVehicleGroupWindow((VehicleType)p1, _current_company); - if (w != NULL) w->ShowRenameGroupWindow(_new_group_id, true); + if (w != nullptr) w->ShowRenameGroupWindow(_new_group_id, true); } /** @@ -1084,5 +1084,5 @@ void DeleteGroupHighlightOfVehicle(const if (_special_mouse_mode != WSM_DRAGDROP) return; VehicleGroupWindow *w = FindVehicleGroupWindow(v->type, v->owner); - if (w != NULL) w->UnselectVehicle(v->index); + if (w != nullptr) w->UnselectVehicle(v->index); } diff --git a/src/heightmap.cpp b/src/heightmap.cpp --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -47,7 +47,7 @@ static void ReadHeightmapPNGImageData(by { uint x, y; byte gray_palette[256]; - png_bytep *row_pointers = NULL; + png_bytep *row_pointers = nullptr; bool has_palette = png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE; uint channels = png_get_channels(png_ptr, info_ptr); @@ -99,33 +99,33 @@ static void ReadHeightmapPNGImageData(by /** * Reads the heightmap and/or size of the heightmap from a PNG file. - * If map == NULL only the size of the PNG is read, otherwise a map + * If map == nullptr only the size of the PNG is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, byte **map) { FILE *fp; - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; + png_structp png_ptr = nullptr; + png_infop info_ptr = nullptr; fp = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); - if (fp == NULL) { + if (fp == nullptr) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_FILE_NOT_FOUND, WL_ERROR); return false; } - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (png_ptr == NULL) { + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); + if (png_ptr == nullptr) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_MISC, WL_ERROR); fclose(fp); return false; } info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL || setjmp(png_jmpbuf(png_ptr))) { + if (info_ptr == nullptr || setjmp(png_jmpbuf(png_ptr))) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_MISC, WL_ERROR); fclose(fp); - png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return false; } @@ -134,14 +134,14 @@ static bool ReadHeightmapPNG(const char /* Allocate memory and read image, without alpha or 16-bit samples * (result is either 8-bit indexed/grayscale or 24-bit RGB) */ png_set_packing(png_ptr); - png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_PACKING | PNG_TRANSFORM_STRIP_ALPHA | PNG_TRANSFORM_STRIP_16, NULL); + png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_PACKING | PNG_TRANSFORM_STRIP_ALPHA | PNG_TRANSFORM_STRIP_16, nullptr); /* Maps of wrong colour-depth are not used. * (this should have been taken care of by stripping alpha and 16-bit samples on load) */ if ((png_get_channels(png_ptr, info_ptr) != 1) && (png_get_channels(png_ptr, info_ptr) != 3) && (png_get_bit_depth(png_ptr, info_ptr) != 8)) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_IMAGE_TYPE, WL_ERROR); fclose(fp); - png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return false; } @@ -152,11 +152,11 @@ static bool ReadHeightmapPNG(const char if ((uint64)width * height >= (size_t)-1) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_HEIGHTMAP_TOO_LARGE, WL_ERROR); fclose(fp); - png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return false; } - if (map != NULL) { + if (map != nullptr) { *map = MallocT(width * height); ReadHeightmapPNGImageData(*map, png_ptr, info_ptr); } @@ -165,7 +165,7 @@ static bool ReadHeightmapPNG(const char *y = height; fclose(fp); - png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return true; } @@ -180,7 +180,7 @@ static void ReadHeightmapBMPImageData(by uint x, y; byte gray_palette[256]; - if (data->palette != NULL) { + if (data->palette != nullptr) { uint i; bool all_gray = true; @@ -229,7 +229,7 @@ static void ReadHeightmapBMPImageData(by /** * Reads the heightmap and/or size of the heightmap from a BMP file. - * If map == NULL only the size of the BMP is read, otherwise a map + * If map == nullptr only the size of the BMP is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, byte **map) @@ -243,7 +243,7 @@ static bool ReadHeightmapBMP(const char memset(&data, 0, sizeof(data)); f = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); - if (f == NULL) { + if (f == nullptr) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_PNGMAP_FILE_NOT_FOUND, WL_ERROR); return false; } @@ -265,7 +265,7 @@ static bool ReadHeightmapBMP(const char return false; } - if (map != NULL) { + if (map != nullptr) { if (!BmpReadBitmap(&buffer, &info, &data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); fclose(f); @@ -449,7 +449,7 @@ void FixSlopes() * @param filename Name of the file to load. * @param[out] x Length of the image. * @param[out] y Height of the image. - * @param[in,out] map If not \c NULL, destination to store the loaded block of image data. + * @param[in,out] map If not \c nullptr, destination to store the loaded block of image data. * @return Whether loading was successful. */ static bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, byte **map) @@ -478,7 +478,7 @@ static bool ReadHeightMap(DetailedFileTy */ bool GetHeightmapDimensions(DetailedFileType dft, const char *filename, uint *x, uint *y) { - return ReadHeightMap(dft, filename, x, y, NULL); + return ReadHeightMap(dft, filename, x, y, nullptr); } /** @@ -491,7 +491,7 @@ bool GetHeightmapDimensions(DetailedFile void LoadHeightmap(DetailedFileType dft, const char *filename) { uint x, y; - byte *map = NULL; + byte *map = nullptr; if (!ReadHeightMap(dft, filename, &x, &y, &map)) { free(map); diff --git a/src/highscore.cpp b/src/highscore.cpp --- a/src/highscore.cpp +++ b/src/highscore.cpp @@ -129,7 +129,7 @@ void SaveToHighScore() { FILE *fp = fopen(_highscore_file, "wb"); - if (fp != NULL) { + if (fp != nullptr) { uint i; HighScore *hs; @@ -159,7 +159,7 @@ void LoadFromHighScore() memset(_highscore_table, 0, sizeof(_highscore_table)); - if (fp != NULL) { + if (fp != nullptr) { uint i; HighScore *hs; diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -135,7 +135,7 @@ struct EndGameWindow : EndGameHighScoreB Point pt = this->GetTopLeft(640, 480); const Company *c = Company::GetIfValid(_local_company); - if (c == NULL) return; + if (c == nullptr) return; /* We need to get performance from last year because the image is shown * at the start of the new year when these things have already been copied */ @@ -210,14 +210,14 @@ static const NWidgetPart _nested_highsco }; static WindowDesc _highscore_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_HIGHSCORE, WC_NONE, 0, _nested_highscore_widgets, lengthof(_nested_highscore_widgets) ); static WindowDesc _endgame_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_ENDSCREEN, WC_NONE, 0, _nested_highscore_widgets, lengthof(_nested_highscore_widgets) diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -24,7 +24,7 @@ char *_hotkeys_file; * List of all HotkeyLists. * This is a pointer to ensure initialisation order with the various static HotkeyList instances. */ -static std::vector *_hotkey_lists = NULL; +static std::vector *_hotkey_lists = nullptr; /** String representation of a keycode */ struct KeycodeNames { @@ -254,7 +254,7 @@ void Hotkey::AddKeycode(uint16 keycode) HotkeyList::HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandlerFunc global_hotkey_handler) : global_hotkey_handler(global_hotkey_handler), ini_group(ini_group), items(items) { - if (_hotkey_lists == NULL) _hotkey_lists = new std::vector(); + if (_hotkey_lists == nullptr) _hotkey_lists = new std::vector(); _hotkey_lists->push_back(this); } @@ -270,11 +270,11 @@ HotkeyList::~HotkeyList() void HotkeyList::Load(IniFile *ini) { IniGroup *group = ini->GetGroup(this->ini_group); - for (Hotkey *hotkey = this->items; hotkey->name != NULL; ++hotkey) { + for (Hotkey *hotkey = this->items; hotkey->name != nullptr; ++hotkey) { IniItem *item = group->GetItem(hotkey->name, false); - if (item != NULL) { + if (item != nullptr) { hotkey->keycodes.clear(); - if (item->value != NULL) ParseHotkeys(hotkey, item->value); + if (item->value != nullptr) ParseHotkeys(hotkey, item->value); } } } @@ -286,7 +286,7 @@ void HotkeyList::Load(IniFile *ini) void HotkeyList::Save(IniFile *ini) const { IniGroup *group = ini->GetGroup(this->ini_group); - for (const Hotkey *hotkey = this->items; hotkey->name != NULL; ++hotkey) { + for (const Hotkey *hotkey = this->items; hotkey->name != nullptr; ++hotkey) { IniItem *item = group->GetItem(hotkey->name, true); item->SetValue(SaveKeycodes(hotkey)); } @@ -300,7 +300,7 @@ void HotkeyList::Save(IniFile *ini) cons */ int HotkeyList::CheckMatch(uint16 keycode, bool global_only) const { - for (const Hotkey *list = this->items; list->name != NULL; ++list) { + for (const Hotkey *list = this->items; list->name != nullptr; ++list) { auto begin = list->keycodes.begin(); auto end = list->keycodes.end(); if (std::find(begin, end, keycode | WKC_GLOBAL_HOTKEY) != end || (!global_only && std::find(begin, end, keycode) != end)) { @@ -344,7 +344,7 @@ void SaveHotkeysToConfig() void HandleGlobalHotkeys(WChar key, uint16 keycode) { for (HotkeyList *list : *_hotkey_lists) { - if (list->global_hotkey_handler == NULL) continue; + if (list->global_hotkey_handler == nullptr) continue; int hotkey = list->CheckMatch(keycode, true); if (hotkey >= 0 && (list->global_hotkey_handler(hotkey) == ES_HANDLED)) return; diff --git a/src/hotkeys.h b/src/hotkeys.h --- a/src/hotkeys.h +++ b/src/hotkeys.h @@ -32,7 +32,7 @@ struct Hotkey { std::vector keycodes; }; -#define HOTKEY_LIST_END Hotkey((uint16)0, NULL, -1) +#define HOTKEY_LIST_END Hotkey((uint16)0, nullptr, -1) struct IniFile; @@ -42,7 +42,7 @@ struct IniFile; struct HotkeyList { typedef EventState (*GlobalHotkeyHandlerFunc)(int hotkey); - HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandlerFunc global_hotkey_handler = NULL); + HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandlerFunc global_hotkey_handler = nullptr); ~HotkeyList(); void Load(IniFile *ini); diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -101,7 +101,7 @@ IndustryType GetIndustryType(TileIndex t assert(IsTileType(tile, MP_INDUSTRY)); const Industry *ind = Industry::GetByTile(tile); - assert(ind != NULL); + assert(ind != nullptr); return ind->type; } @@ -200,11 +200,11 @@ void Industry::PostDestructor(size_t ind /** * Return a random valid industry. - * @return random industry, NULL if there are no industries + * @return random industry, nullptr if there are no industries */ /* static */ Industry *Industry::GetRandom() { - if (Industry::GetNumItems() == 0) return NULL; + if (Industry::GetNumItems() == 0) return nullptr; int num = RandomRange((uint16)Industry::GetNumItems()); size_t index = MAX_UVALUE(size_t); @@ -316,7 +316,7 @@ static void DrawTile_Industry(TileInfo * * DrawNewIndustry will return false if ever the resolver could not * find any sprite to display. So in this case, we will jump on the * substitute gfx instead. */ - if (indts->grf_prop.spritegroup[0] != NULL && DrawNewIndustryTile(ti, ind, gfx, indts)) { + if (indts->grf_prop.spritegroup[0] != nullptr && DrawNewIndustryTile(ti, ind, gfx, indts)) { return; } else { /* No sprite group (or no valid one) found, meaning no graphics associated. @@ -385,7 +385,7 @@ static Foundation GetFoundation_Industry */ if (gfx >= NEW_INDUSTRYTILEOFFSET) { const IndustryTileSpec *indts = GetIndustryTileSpec(gfx); - if (indts->grf_prop.spritegroup[0] != NULL && HasBit(indts->callback_mask, CBM_INDT_DRAW_FOUNDATIONS)) { + if (indts->grf_prop.spritegroup[0] != nullptr && HasBit(indts->callback_mask, CBM_INDT_DRAW_FOUNDATIONS)) { uint32 callback_res = GetIndustryTileCallback(CBID_INDTILE_DRAW_FOUNDATIONS, 0, 0, gfx, Industry::GetByTile(tile), tile); if (callback_res != CALLBACK_FAILED && !ConvertBooleanCallback(indts->grf_prop.grffile, CBID_INDTILE_DRAW_FOUNDATIONS, callback_res)) return FOUNDATION_NONE; } @@ -475,7 +475,7 @@ static void GetTileDesc_Industry(TileInd td->str = STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION; } - if (is->grf_prop.grffile != NULL) { + if (is->grf_prop.grffile != nullptr) { td->grf = GetGRFConfig(is->grf_prop.grffile->grfid)->GetName(); } } @@ -799,7 +799,7 @@ static void TileLoopIndustry_BubbleGener EV_BUBBLE ); - if (v != NULL) v->animation_substate = dir; + if (v != nullptr) v->animation_substate = dir; } static void TileLoop_Industry(TileIndex tile) @@ -1106,7 +1106,7 @@ static void ChopLumberMillTrees(Industry } TileIndex tile = i->location.tile; - if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, NULL)) { // 40x40 tiles to search. + if (CircularTileSearch(&tile, 40, SearchLumberMillTrees, nullptr)) { // 40x40 tiles to search. i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + 45); // Found a tree, add according value to waiting cargo. } } @@ -1339,11 +1339,11 @@ static CheckNewIndustryProc * const _che * Find a town for the industry, while checking for multiple industries in the same town. * @param tile Position of the industry to build. * @param type Industry type. - * @param[out] t Pointer to return town for the new industry, \c NULL is written if no good town can be found. + * @param[out] t Pointer to return town for the new industry, \c nullptr is written if no good town can be found. * @return Succeeded or failed command. * - * @pre \c *t != NULL - * @post \c *t points to a town on success, and \c NULL on failure. + * @pre \c *t != nullptr + * @post \c *t points to a town on success, and \c nullptr on failure. */ static CommandCost FindTownForIndustry(TileIndex tile, int type, Town **t) { @@ -1354,7 +1354,7 @@ static CommandCost FindTownForIndustry(T const Industry *i; FOR_ALL_INDUSTRIES(i) { if (i->type == (byte)type && i->town == *t) { - *t = NULL; + *t = nullptr; return_cmd_error(STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN); } } @@ -1391,7 +1391,7 @@ bool IsSlopeRefused(Slope current, Slope * @param[out] custom_shape_check Perform custom check for the site. * @return Failed or succeeded command. */ -static CommandCost CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTileTable *it, uint itspec_index, int type, uint16 initial_random_bits, Owner founder, IndustryAvailabilityCallType creation_type, bool *custom_shape_check = NULL) +static CommandCost CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTileTable *it, uint itspec_index, int type, uint16 initial_random_bits, Owner founder, IndustryAvailabilityCallType creation_type, bool *custom_shape_check = nullptr) { bool refused_slope = false; bool custom_shape = false; @@ -1451,7 +1451,7 @@ static CommandCost CheckIfIndustryTilesA } } while ((++it)->ti.x != -0x80); - if (custom_shape_check != NULL) *custom_shape_check = custom_shape; + if (custom_shape_check != nullptr) *custom_shape_check = custom_shape; /* It is almost impossible to have a fully flat land in TG, so what we * do is that we check if we can make the land flat later on. See @@ -1588,7 +1588,7 @@ static bool CheckIfCanLevelIndustryPlatf static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int type) { const IndustrySpec *indspec = GetIndustrySpec(type); - const Industry *i = NULL; + const Industry *i = nullptr; /* On a large map with many industries, it may be faster to check an area. */ static const int dmax = 14; @@ -1652,7 +1652,7 @@ static void AdvertiseIndustryOpening(con */ static void PopulateStationsNearby(Industry *ind) { - if (ind->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) { + if (ind->neutral_station != nullptr && !_settings_game.station.serve_neutral_industries) { /* Industry has a neutral station. Use it and ignore any other nearby stations. */ ind->stations_near.insert(ind->neutral_station); ind->neutral_station->industries_near.clear(); @@ -1874,7 +1874,7 @@ static void DoCreateNewIndustry(Industry * @param[out] ip Pointer to store newly created industry. * @return Succeeded or failed command. * - * @post \c *ip contains the newly created industry if all checks are successful and the \a flags request actual creation, else it contains \c NULL afterwards. + * @post \c *ip contains the newly created industry if all checks are successful and the \a flags request actual creation, else it contains \c nullptr afterwards. */ static CommandCost CreateNewIndustryHelper(TileIndex tile, IndustryType type, DoCommandFlag flags, const IndustrySpec *indspec, uint itspec_index, uint32 random_var8f, uint16 random_initial_bits, Owner founder, IndustryAvailabilityCallType creation_type, Industry **ip) { @@ -1882,7 +1882,7 @@ static CommandCost CreateNewIndustryHelp const IndustryTileTable *it = indspec->table[itspec_index]; bool custom_shape_check = false; - *ip = NULL; + *ip = nullptr; std::vector object_areas(_cleared_object_areas); CommandCost ret = CheckIfIndustryTilesAreFree(tile, it, itspec_index, type, random_initial_bits, founder, creation_type, &custom_shape_check); @@ -1904,10 +1904,10 @@ static CommandCost CreateNewIndustryHelp ret = CheckIfFarEnoughFromConflictingIndustry(tile, type); if (ret.Failed()) return ret; - Town *t = NULL; + Town *t = nullptr; ret = FindTownForIndustry(tile, type, &t); if (ret.Failed()) return ret; - assert(t != NULL); + assert(t != nullptr); ret = CheckIfIndustryIsAllowed(tile, type, t); if (ret.Failed()) return ret; @@ -1963,7 +1963,7 @@ CommandCost CmdBuildIndustry(TileIndex t CommandCost ret = CommandCost(STR_ERROR_SITE_UNSUITABLE); const bool deity_prospect = _current_company == OWNER_DEITY && !HasBit(p1, 16); - Industry *ind = NULL; + Industry *ind = nullptr; if (deity_prospect || (_game_mode != GM_EDITOR && _current_company != OWNER_DEITY && _settings_game.construction.raw_industry_construction == 2 && indspec->IsRawIndustry())) { if (flags & DC_EXEC) { /* Prospected industries are build as OWNER_TOWN to not e.g. be build on owned land of the founder */ @@ -2005,7 +2005,7 @@ CommandCost CmdBuildIndustry(TileIndex t if (ret.Failed()) return ret; } - if ((flags & DC_EXEC) && ind != NULL && _game_mode != GM_EDITOR) { + if ((flags & DC_EXEC) && ind != nullptr && _game_mode != GM_EDITOR) { AdvertiseIndustryOpening(ind); } @@ -2018,7 +2018,7 @@ CommandCost CmdBuildIndustry(TileIndex t * @param tile The location to build the industry. * @param type The industry type to build. * @param creation_type The circumstances the industry is created under. - * @return the created industry or NULL if it failed. + * @return the created industry or nullptr if it failed. */ static Industry *CreateNewIndustry(TileIndex tile, IndustryType type, IndustryAvailabilityCallType creation_type) { @@ -2026,9 +2026,9 @@ static Industry *CreateNewIndustry(TileI uint32 seed = Random(); uint32 seed2 = Random(); - Industry *i = NULL; + Industry *i = nullptr; CommandCost ret = CreateNewIndustryHelper(tile, type, DC_EXEC, indspec, RandomRange(indspec->num_table), seed, GB(seed2, 0, 16), OWNER_NONE, creation_type, &i); - assert(i != NULL || ret.Failed()); + assert(i != nullptr || ret.Failed()); return i; } @@ -2110,16 +2110,16 @@ static uint GetNumberOfIndustries() * than to try a few times before concluding it does not work. * @param type Industry type of the desired industry. * @param try_hard Try very hard to find a place. (Used to place at least one industry per type.) - * @return Pointer to created industry, or \c NULL if creation failed. + * @return Pointer to created industry, or \c nullptr if creation failed. */ static Industry *PlaceIndustry(IndustryType type, IndustryAvailabilityCallType creation_type, bool try_hard) { uint tries = try_hard ? 10000u : 2000u; for (; tries > 0; tries--) { Industry *ind = CreateNewIndustry(RandomTile(), type, creation_type); - if (ind != NULL) return ind; + if (ind != nullptr) return ind; } - return NULL; + return nullptr; } /** @@ -2385,7 +2385,7 @@ void IndustryBuildData::TryBuildNewIndus /* Try to create the industry. */ const Industry *ind = PlaceIndustry(it, IACT_RANDOMCREATION, false); - if (ind == NULL) { + if (ind == nullptr) { this->builddata[it].wait_count = this->builddata[it].max_wait + 1; // Compensate for decrementing below. this->builddata[it].max_wait = min(1000, this->builddata[it].max_wait + 2); } else { @@ -2474,7 +2474,7 @@ static int WhoCanServiceIndustry(Industr bool c_accepts = false; bool c_produces = false; if (v->type == VEH_TRAIN && v->IsFrontEngine()) { - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { CanCargoServiceIndustry(u->cargo_type, ind, &c_accepts, &c_produces); } } else if (v->type == VEH_ROAD || v->type == VEH_SHIP || v->type == VEH_AIRCRAFT) { @@ -2493,7 +2493,7 @@ static int WhoCanServiceIndustry(Industr if (o->IsType(OT_GOTO_STATION) && !(o->GetUnloadType() & OUFB_TRANSFER)) { /* Vehicle visits a station to load or unload */ Station *st = Station::Get(o->GetDestination()); - assert(st != NULL); + assert(st != nullptr); /* Same cargo produced by industry is dropped here => not serviced by vehicle v */ if ((o->GetUnloadType() & OUFB_UNLOAD) && !c_accepts) break; @@ -2774,7 +2774,7 @@ void IndustryDailyLoop() _industry_builder.TryBuildNewIndustry(); } else { Industry *i = Industry::GetRandom(); - if (i != NULL) { + if (i != nullptr) { ChangeIndustryProduction(i, false); SetWindowDirty(WC_INDUSTRY_VIEW, i->index); } @@ -2932,8 +2932,8 @@ extern const TileTypeProcs _tile_type_in AnimateTile_Industry, // animate_tile_proc TileLoop_Industry, // tile_loop_proc ChangeTileOwner_Industry, // 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_Industry, // get_foundation_proc TerraformTile_Industry, // terraform_tile_proc }; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -76,7 +76,7 @@ static void ShowIndustryCargoesWindow(In * Gets the string to display after the cargo name (using callback 37) * @param cargo the cargo for which the suffix is requested, meaning depends on presence of flag 18 in prop 1A * @param cst the cargo suffix type (for which window is it requested). @see CargoSuffixType - * @param ind the industry (NULL if in fund window) + * @param ind the industry (nullptr if in fund window) * @param ind_type the industry type * @param indspec the industry spec * @param suffix is filled with the string to display @@ -138,7 +138,7 @@ enum CargoSuffixInOut { * Gets all strings to display after the cargoes of industries (using callback 37) * @param use_input get suffixes for output cargoes or input cargoes? * @param cst the cargo suffix type (for which window is it requested). @see CargoSuffixType - * @param ind the industry (NULL if in fund window) + * @param ind the industry (nullptr if in fund window) * @param ind_type the industry type * @param indspec the industry spec * @param cargoes array with cargotypes. for CT_INVALID no suffix will be determined @@ -438,7 +438,7 @@ public: CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; /* Measure the accepted cargoes, if any. */ - GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); Dimension strdim = GetStringBoundingBox(cargostring.c_str()); if (strdim.width > max_minwidth) { @@ -448,7 +448,7 @@ public: d = maxdim(d, strdim); /* Measure the produced cargoes, if any. */ - GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->index[i], indsp, indsp->produced_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, nullptr, this->index[i], indsp, indsp->produced_cargo, cargo_suffix); cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); strdim = GetStringBoundingBox(cargostring.c_str()); if (strdim.width > max_minwidth) { @@ -551,18 +551,18 @@ public: CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ - GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); y = DrawStringMultiLine(left, right, y, bottom, cargostring.c_str()); /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */ - GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, nullptr, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix); cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); y = DrawStringMultiLine(left, right, y, bottom, cargostring.c_str()); /* Get the additional purchase info text, if it has not already been queried. */ if (HasBit(indsp->callback_mask, CBM_IND_FUND_MORE_TEXT)) { - uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_FUND_MORE_TEXT, 0, 0, NULL, this->selected_type, INVALID_TILE); + uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_FUND_MORE_TEXT, 0, 0, nullptr, this->selected_type, INVALID_TILE); if (callback_res != CALLBACK_FAILED && callback_res != 0x400) { if (callback_res > 0x400) { ErrorUnknownCallbackResult(indsp->grf_prop.grffile->grfid, CBID_INDUSTRY_FUND_MORE_TEXT, callback_res); @@ -589,12 +589,12 @@ public: if (y < this->count) { // Is it within the boundaries of available data? this->selected_index = y; this->selected_type = this->index[y]; - const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? NULL : GetIndustrySpec(this->selected_type); + const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? nullptr : GetIndustrySpec(this->selected_type); this->SetDirty(); if (_thd.GetCallbackWnd() == this && - ((_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) || + ((_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indsp != nullptr && indsp->IsRawIndustry()) || this->selected_type == INVALID_INDUSTRYTYPE || !this->enabled[this->selected_index])) { /* Reset the button state if going to prospecting or "build many industries" */ @@ -717,8 +717,8 @@ public: if (!gui_scope) return; this->SetupArrays(); - const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? NULL : GetIndustrySpec(this->selected_type); - if (indsp == NULL) this->enabled[this->selected_index] = _settings_game.difficulty.industry_density != ID_FUND_ONLY; + const IndustrySpec *indsp = (this->selected_type == INVALID_INDUSTRYTYPE) ? nullptr : GetIndustrySpec(this->selected_type); + if (indsp == nullptr) this->enabled[this->selected_index] = _settings_game.difficulty.industry_density != ID_FUND_ONLY; this->SetButtons(); } }; @@ -1048,7 +1048,7 @@ public: void OnResize() override { - if (this->viewport != NULL) { + if (this->viewport != nullptr) { NWidgetViewport *nvp = this->GetWidget(WID_IV_VIEWPORT); nvp->UpdateViewportCoordinates(this); @@ -1215,7 +1215,7 @@ protected: } if (!this->industries.Sort()) return; - IndustryDirectoryWindow::last_industry = NULL; // Reset name sorter sort cache + IndustryDirectoryWindow::last_industry = nullptr; // Reset name sorter sort cache this->SetWidgetDirty(WID_ID_INDUSTRY_LIST); // Set the modified widget dirty } @@ -1493,7 +1493,7 @@ public: }; Listing IndustryDirectoryWindow::last_sorting = {false, 0}; -const Industry *IndustryDirectoryWindow::last_industry = NULL; +const Industry *IndustryDirectoryWindow::last_industry = nullptr; /* Available station sorting functions. */ GUIIndustryList::SortFunction * const IndustryDirectoryWindow::sorter_funcs[] = { @@ -1898,8 +1898,8 @@ struct CargoesField { /** * Decide which cargo was clicked at in a #CFT_CARGO field. - * @param left Left industry neighbour if available (else \c NULL should be supplied). - * @param right Right industry neighbour if available (else \c NULL should be supplied). + * @param left Left industry neighbour if available (else \c nullptr should be supplied). + * @param right Right industry neighbour if available (else \c nullptr should be supplied). * @param pt Click position in the cargo field. * @return Cargo clicked at, or #INVALID_CARGO if none. */ @@ -1929,7 +1929,7 @@ struct CargoesField { /* row = 0 -> at first horizontal row, row = 1 -> second horizontal row, 2 = 3rd horizontal row. */ if (col == 0) { if (this->u.cargo.supp_cargoes[row] != INVALID_CARGO) return this->u.cargo.vertical_cargoes[this->u.cargo.supp_cargoes[row]]; - if (left != NULL) { + if (left != nullptr) { if (left->type == CFT_INDUSTRY) return left->u.industry.other_produced[row]; if (left->type == CFT_CARGO_LABEL && !left->u.cargo_label.left_align) return left->u.cargo_label.cargoes[row]; } @@ -1937,7 +1937,7 @@ struct CargoesField { } if (col == this->u.cargo.num_cargoes) { if (this->u.cargo.cust_cargoes[row] != INVALID_CARGO) return this->u.cargo.vertical_cargoes[this->u.cargo.cust_cargoes[row]]; - if (right != NULL) { + if (right != nullptr) { if (right->type == CFT_INDUSTRY) return right->u.industry.other_accepted[row]; if (right->type == CFT_CARGO_LABEL && right->u.cargo_label.left_align) return right->u.cargo_label.cargoes[row]; } @@ -2678,8 +2678,8 @@ struct IndustryCargoesWindow : public Wi break; case CFT_CARGO: { - CargoesField *lft = (fieldxy.x > 0) ? this->fields[fieldxy.y].columns + fieldxy.x - 1 : NULL; - CargoesField *rgt = (fieldxy.x < 4) ? this->fields[fieldxy.y].columns + fieldxy.x + 1 : NULL; + CargoesField *lft = (fieldxy.x > 0) ? this->fields[fieldxy.y].columns + fieldxy.x - 1 : nullptr; + CargoesField *rgt = (fieldxy.x < 4) ? this->fields[fieldxy.y].columns + fieldxy.x + 1 : nullptr; CargoID cid = fld->CargoClickedAt(lft, rgt, xy); if (cid != INVALID_CARGO) this->ComputeCargoDisplay(cid); break; @@ -2703,7 +2703,7 @@ struct IndustryCargoesWindow : public Wi if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (this->IsWidgetLowered(WID_IC_NOTIFY)) { - if (FindWindowByClass(WC_SMALLMAP) == NULL) ShowSmallMap(); + if (FindWindowByClass(WC_SMALLMAP) == nullptr) ShowSmallMap(); this->NotifySmallmap(); } break; @@ -2764,8 +2764,8 @@ struct IndustryCargoesWindow : public Wi CargoID cid = INVALID_CARGO; switch (fld->type) { case CFT_CARGO: { - CargoesField *lft = (fieldxy.x > 0) ? this->fields[fieldxy.y].columns + fieldxy.x - 1 : NULL; - CargoesField *rgt = (fieldxy.x < 4) ? this->fields[fieldxy.y].columns + fieldxy.x + 1 : NULL; + CargoesField *lft = (fieldxy.x > 0) ? this->fields[fieldxy.y].columns + fieldxy.x - 1 : nullptr; + CargoesField *rgt = (fieldxy.x < 4) ? this->fields[fieldxy.y].columns + fieldxy.x + 1 : nullptr; cid = fld->CargoClickedAt(lft, rgt, xy); break; } @@ -2777,7 +2777,7 @@ struct IndustryCargoesWindow : public Wi case CFT_INDUSTRY: if (fld->u.industry.ind_type < NUM_INDUSTRYTYPES && (this->ind_cargo >= NUM_INDUSTRYTYPES || fieldxy.x != 2)) { - GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, close_cond); + GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, nullptr, close_cond); } return true; @@ -2822,7 +2822,7 @@ static void ShowIndustryCargoesWindow(In } Window *w = BringWindowToFrontById(WC_INDUSTRY_CARGOES, 0); - if (w != NULL) { + if (w != nullptr) { w->InvalidateData(id); return; } diff --git a/src/ini.cpp b/src/ini.cpp --- a/src/ini.cpp +++ b/src/ini.cpp @@ -29,7 +29,7 @@ /** * Create a new ini file with given group names. - * @param list_group_names A \c NULL terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST + * @param list_group_names A \c nullptr terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST */ IniFile::IniFile(const char * const *list_group_names) : IniLoadFile(list_group_names) { @@ -52,23 +52,23 @@ bool IniFile::SaveToDisk(const char *fil strecpy(file_new, filename, lastof(file_new)); strecat(file_new, ".new", lastof(file_new)); FILE *f = fopen(file_new, "w"); - if (f == NULL) return false; + if (f == nullptr) return false; - for (const IniGroup *group = this->group; group != NULL; group = group->next) { + for (const IniGroup *group = this->group; group != nullptr; group = group->next) { if (group->comment) fputs(group->comment, f); fprintf(f, "[%s]\n", group->name); - for (const IniItem *item = group->item; item != NULL; item = item->next) { - if (item->comment != NULL) fputs(item->comment, f); + for (const IniItem *item = group->item; item != nullptr; item = item->next) { + if (item->comment != nullptr) fputs(item->comment, f); /* protect item->name with quotes if needed */ - if (strchr(item->name, ' ') != NULL || + if (strchr(item->name, ' ') != nullptr || item->name[0] == '[') { fprintf(f, "\"%s\"", item->name); } else { fprintf(f, "%s", item->name); } - fprintf(f, " = %s\n", item->value == NULL ? "" : item->value); + fprintf(f, " = %s\n", item->value == nullptr ? "" : item->value); } } if (this->comment) fputs(this->comment, f); diff --git a/src/ini_load.cpp b/src/ini_load.cpp --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -23,7 +23,7 @@ * @param name the name of the item * @param last the last element of the name of the item */ -IniItem::IniItem(IniGroup *parent, const char *name, const char *last) : next(NULL), value(NULL), comment(NULL) +IniItem::IniItem(IniGroup *parent, const char *name, const char *last) : next(nullptr), value(nullptr), comment(nullptr) { this->name = stredup(name, last); str_validate(this->name, this->name + strlen(this->name)); @@ -58,7 +58,7 @@ void IniItem::SetValue(const char *value * @param name the name of the group * @param last the last element of the name of the group */ -IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : next(NULL), type(IGT_VARIABLES), item(NULL), comment(NULL) +IniGroup::IniGroup(IniLoadFile *parent, const char *name, const char *last) : next(nullptr), type(IGT_VARIABLES), item(nullptr), comment(nullptr) { this->name = stredup(name, last); str_validate(this->name, this->name + strlen(this->name)); @@ -67,16 +67,16 @@ IniGroup::IniGroup(IniLoadFile *parent, *parent->last_group = this; parent->last_group = &this->next; - if (parent->list_group_names != NULL) { - for (uint i = 0; parent->list_group_names[i] != NULL; i++) { + if (parent->list_group_names != nullptr) { + for (uint i = 0; parent->list_group_names[i] != nullptr; i++) { if (strcmp(this->name, parent->list_group_names[i]) == 0) { this->type = IGT_LIST; return; } } } - if (parent->seq_group_names != NULL) { - for (uint i = 0; parent->seq_group_names[i] != NULL; i++) { + if (parent->seq_group_names != nullptr) { + for (uint i = 0; parent->seq_group_names[i] != nullptr; i++) { if (strcmp(this->name, parent->seq_group_names[i]) == 0) { this->type = IGT_SEQUENCE; return; @@ -100,18 +100,18 @@ IniGroup::~IniGroup() * and create is true it creates a new item. * @param name name of the item to find. * @param create whether to create an item when not found or not. - * @return the requested item or NULL if not found. + * @return the requested item or nullptr if not found. */ IniItem *IniGroup::GetItem(const char *name, bool create) { - for (IniItem *item = this->item; item != NULL; item = item->next) { + for (IniItem *item = this->item; item != nullptr; item = item->next) { if (strcmp(item->name, name) == 0) return item; } - if (!create) return NULL; + if (!create) return nullptr; /* otherwise make a new one */ - return new IniItem(this, name, NULL); + return new IniItem(this, name, nullptr); } /** @@ -120,18 +120,18 @@ IniItem *IniGroup::GetItem(const char *n void IniGroup::Clear() { delete this->item; - this->item = NULL; + this->item = nullptr; this->last_item = &this->item; } /** * Construct a new in-memory Ini file representation. - * @param list_group_names A \c NULL terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST - * @param seq_group_names A \c NULL terminated list with group names that should be loaded as lists of names. @see IGT_SEQUENCE + * @param list_group_names A \c nullptr terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST + * @param seq_group_names A \c nullptr terminated list with group names that should be loaded as lists of names. @see IGT_SEQUENCE */ IniLoadFile::IniLoadFile(const char * const *list_group_names, const char * const *seq_group_names) : - group(NULL), - comment(NULL), + group(nullptr), + comment(nullptr), list_group_names(list_group_names), seq_group_names(seq_group_names) { @@ -151,20 +151,20 @@ IniLoadFile::~IniLoadFile() * @param name name of the group to find. * @param len the maximum length of said name (\c 0 means length of the string). * @param create_new Allow creation of group if it does not exist. - * @return The requested group if it exists or was created, else \c NULL. + * @return The requested group if it exists or was created, else \c nullptr. */ IniGroup *IniLoadFile::GetGroup(const char *name, size_t len, bool create_new) { if (len == 0) len = strlen(name); /* does it exist already? */ - for (IniGroup *group = this->group; group != NULL; group = group->next) { + for (IniGroup *group = this->group; group != nullptr; group = group->next) { if (!strncmp(group->name, name, len) && group->name[len] == 0) { return group; } } - if (!create_new) return NULL; + if (!create_new) return nullptr; /* otherwise make a new one */ IniGroup *group = new IniGroup(this, name, name + len - 1); @@ -179,19 +179,19 @@ IniGroup *IniLoadFile::GetGroup(const ch void IniLoadFile::RemoveGroup(const char *name) { size_t len = strlen(name); - IniGroup *prev = NULL; + IniGroup *prev = nullptr; IniGroup *group; /* does it exist already? */ - for (group = this->group; group != NULL; prev = group, group = group->next) { + for (group = this->group; group != nullptr; prev = group, group = group->next) { if (strncmp(group->name, name, len) == 0) { break; } } - if (group == NULL) return; + if (group == nullptr) return; - if (prev != NULL) { + if (prev != nullptr) { prev->next = prev->next->next; if (this->last_group == &group->next) this->last_group = &prev->next; } else { @@ -199,7 +199,7 @@ void IniLoadFile::RemoveGroup(const char if (this->last_group == &group->next) this->last_group = &this->group; } - group->next = NULL; + group->next = nullptr; delete group; } @@ -214,15 +214,15 @@ void IniLoadFile::LoadFromDisk(const cha assert(this->last_group == &this->group); char buffer[1024]; - IniGroup *group = NULL; + IniGroup *group = nullptr; - char *comment = NULL; + char *comment = nullptr; uint comment_size = 0; uint comment_alloc = 0; size_t end; FILE *in = this->OpenFile(filename, subdir, &end); - if (in == NULL) return; + if (in == nullptr) return; end += ftell(in); @@ -238,7 +238,7 @@ void IniLoadFile::LoadFromDisk(const cha *e = '\0'; /* Skip comments and empty lines outside IGT_SEQUENCE groups. */ - if ((group == NULL || group->type != IGT_SEQUENCE) && (*s == '#' || *s == ';' || *s == '\0')) { + if ((group == nullptr || group->type != IGT_SEQUENCE) && (*s == '#' || *s == ';' || *s == '\0')) { uint ns = comment_size + (e - s + 1); uint a = comment_alloc; /* add to comment */ @@ -267,7 +267,7 @@ void IniLoadFile::LoadFromDisk(const cha group->comment = stredup(comment, comment + comment_size - 1); comment_size = 0; } - } else if (group != NULL) { + } else if (group != nullptr) { if (group->type == IGT_SEQUENCE) { /* A sequence group, use the line as item name without further interpretation. */ IniItem *item = new IniItem(group, buffer, e - 1); @@ -305,9 +305,9 @@ void IniLoadFile::LoadFromDisk(const cha if (e > t && e[-1] == '\"') e--; *e = '\0'; - /* If the value was not quoted and empty, it must be NULL */ - item->value = (!quoted && e == t) ? NULL : stredup(t); - if (item->value != NULL) str_validate(item->value, item->value + strlen(item->value)); + /* If the value was not quoted and empty, it must be nullptr */ + item->value = (!quoted && e == t) ? nullptr : stredup(t); + if (item->value != nullptr) str_validate(item->value, item->value + strlen(item->value)); } else { /* it's an orphan item */ this->ReportFileError("ini: '", buffer, "' outside of group"); diff --git a/src/ini_type.h b/src/ini_type.h --- a/src/ini_type.h +++ b/src/ini_type.h @@ -28,7 +28,7 @@ struct IniItem { char *value; ///< The value of this item char *comment; ///< The comment associated with this item - IniItem(struct IniGroup *parent, const char *name, const char *last = NULL); + IniItem(struct IniGroup *parent, const char *name, const char *last = nullptr); ~IniItem(); void SetValue(const char *value); @@ -43,7 +43,7 @@ struct IniGroup { char *name; ///< name of group char *comment; ///< comment for group - IniGroup(struct IniLoadFile *parent, const char *name, const char *last = NULL); + IniGroup(struct IniLoadFile *parent, const char *name, const char *last = nullptr); ~IniGroup(); IniItem *GetItem(const char *name, bool create); @@ -55,10 +55,10 @@ struct IniLoadFile { IniGroup *group; ///< the first group in the ini IniGroup **last_group; ///< the last group in the ini char *comment; ///< last comment in file - const char * const *list_group_names; ///< NULL terminated list with group names that are lists - const char * const *seq_group_names; ///< NULL terminated list with group names that are sequences. + const char * const *list_group_names; ///< nullptr terminated list with group names that are lists + const char * const *seq_group_names; ///< nullptr terminated list with group names that are sequences. - IniLoadFile(const char * const *list_group_names = NULL, const char * const *seq_group_names = NULL); + IniLoadFile(const char * const *list_group_names = nullptr, const char * const *seq_group_names = nullptr); virtual ~IniLoadFile(); IniGroup *GetGroup(const char *name, size_t len = 0, bool create_new = true); @@ -71,7 +71,7 @@ struct IniLoadFile { * @param filename Name of the INI file. * @param subdir The subdir to load the file from. * @param[out] size Size of the opened file. - * @return File handle of the opened file, or \c NULL. + * @return File handle of the opened file, or \c nullptr. */ virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size) = 0; @@ -86,7 +86,7 @@ struct IniLoadFile { /** Ini file that supports both loading and saving. */ struct IniFile : IniLoadFile { - IniFile(const char * const *list_group_names = NULL); + IniFile(const char * const *list_group_names = nullptr); bool SaveToDisk(const char *filename); diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -269,7 +269,7 @@ static const NWidgetPart _nested_select_ }; static WindowDesc _select_game_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_SELECT_GAME, WC_NONE, 0, _nested_select_game_widgets, lengthof(_nested_select_game_widgets) @@ -303,7 +303,7 @@ void AskExitGame() ShowQuery( STR_QUIT_CAPTION, STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD, - NULL, + nullptr, AskExitGameCallback ); } @@ -322,7 +322,7 @@ void AskExitToGameMenu() ShowQuery( STR_ABANDON_GAME_CAPTION, (_game_mode != GM_EDITOR) ? STR_ABANDON_GAME_QUERY : STR_ABANDON_SCENARIO_QUERY, - NULL, + nullptr, AskExitToGameMenuCallback ); } diff --git a/src/landscape.cpp b/src/landscape.cpp --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -82,12 +82,12 @@ extern const byte _slope_to_sprite_offse /** * Description of the snow line throughout the year. * - * If it is \c NULL, a static snowline height is used, as set by \c _settings_game.game_creation.snow_line_height. + * If it is \c nullptr, a static snowline height is used, as set by \c _settings_game.game_creation.snow_line_height. * Otherwise it points to a table loaded from a newGRF file that describes the variable snowline. * @ingroup SnowLineGroup * @see GetSnowLine() GameCreationSettings */ -static SnowLine *_snow_line = NULL; +static SnowLine *_snow_line = nullptr; /** * Map 2D viewport or smallmap coordinate to 3D world or tile coordinate. @@ -104,7 +104,7 @@ static SnowLine *_snow_line = NULL; */ Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped) { - if (clamped != NULL) *clamped = false; // Not clamping yet. + if (clamped != nullptr) *clamped = false; // Not clamping yet. /* Initial x/y world coordinate is like if the landscape * was completely flat on height 0. */ @@ -122,7 +122,7 @@ Point InverseRemapCoords2(int x, int y, Point old_pt = pt; pt.x = Clamp(pt.x, -extra_tiles * TILE_SIZE, max_x); pt.y = Clamp(pt.y, -extra_tiles * TILE_SIZE, max_y); - if (clamped != NULL) *clamped = (pt.x != old_pt.x) || (pt.y != old_pt.y); + if (clamped != nullptr) *clamped = (pt.x != old_pt.x) || (pt.y != old_pt.y); } /* Now find the Z-world coordinate by fix point iteration. @@ -147,7 +147,7 @@ Point InverseRemapCoords2(int x, int y, Point old_pt = pt; pt.x = Clamp(pt.x, min_coord, max_x); pt.y = Clamp(pt.y, min_coord, max_y); - if (clamped != NULL) *clamped = *clamped || (pt.x != old_pt.x) || (pt.y != old_pt.y); + if (clamped != nullptr) *clamped = *clamped || (pt.x != old_pt.x) || (pt.y != old_pt.y); } return pt; @@ -418,7 +418,7 @@ void GetSlopePixelZOnEdge(Slope tileh, D * If a tile does not have a foundation, the function returns the same as GetTileSlope. * * @param tile The tile of interest. - * @param z returns the z of the foundation slope. (Can be NULL, if not needed) + * @param z returns the z of the foundation slope. (Can be nullptr, if not needed) * @return The slope on top of the foundation. */ Slope GetFoundationSlope(TileIndex tile, int *z) @@ -426,7 +426,7 @@ Slope GetFoundationSlope(TileIndex tile, Slope tileh = GetTileSlope(tile, z); Foundation f = _tile_type_procs[GetTileType(tile)]->get_foundation_proc(tile, tileh); uint z_inc = ApplyFoundationToSlope(f, &tileh); - if (z != NULL) *z += z_inc; + if (z != nullptr) *z += z_inc; return tileh; } @@ -572,7 +572,7 @@ void DrawFoundation(TileInfo *ti, Founda void DoClearSquare(TileIndex tile) { /* If the tile can have animation and we clear it, delete it from the animated tile list. */ - if (_tile_type_procs[GetTileType(tile)]->animate_tile_proc != NULL) DeleteAnimatedTile(tile); + if (_tile_type_procs[GetTileType(tile)]->animate_tile_proc != nullptr) DeleteAnimatedTile(tile); MakeClear(tile, CLEAR_GRASS, _generating_world ? 3 : 0); MarkTileDirtyByTile(tile); @@ -616,7 +616,7 @@ void GetTileDesc(TileIndex tile, TileDes */ bool IsSnowLineSet() { - return _snow_line != NULL; + return _snow_line != nullptr; } /** @@ -645,7 +645,7 @@ void SetSnowLine(byte table[SNOW_LINE_MO */ byte GetSnowLine() { - if (_snow_line == NULL) return _settings_game.game_creation.snow_line_height; + if (_snow_line == nullptr) return _settings_game.game_creation.snow_line_height; YearMonthDay ymd; ConvertDateToYMD(_date, &ymd); @@ -659,7 +659,7 @@ byte GetSnowLine() */ byte HighestSnowLine() { - return _snow_line == NULL ? _settings_game.game_creation.snow_line_height : _snow_line->highest_value; + return _snow_line == nullptr ? _settings_game.game_creation.snow_line_height : _snow_line->highest_value; } /** @@ -669,7 +669,7 @@ byte HighestSnowLine() */ byte LowestSnowLine() { - return _snow_line == NULL ? _settings_game.game_creation.snow_line_height : _snow_line->lowest_value; + return _snow_line == nullptr ? _settings_game.game_creation.snow_line_height : _snow_line->lowest_value; } /** @@ -679,7 +679,7 @@ byte LowestSnowLine() void ClearSnowLine() { free(_snow_line); - _snow_line = NULL; + _snow_line = nullptr; } /** @@ -702,8 +702,8 @@ CommandCost CmdLandscapeClear(TileIndex cost.AddCost(GetWaterClass(tile) == WATER_CLASS_CANAL ? _price[PR_CLEAR_CANAL] : _price[PR_CLEAR_WATER]); } - Company *c = (flags & (DC_AUTO | DC_BANKRUPT)) ? NULL : Company::GetIfValid(_current_company); - if (c != NULL && (int)GB(c->clear_limit, 16, 16) < 1) { + Company *c = (flags & (DC_AUTO | DC_BANKRUPT)) ? nullptr : Company::GetIfValid(_current_company); + if (c != nullptr && (int)GB(c->clear_limit, 16, 16) < 1) { return_cmd_error(STR_ERROR_CLEARING_LIMIT_REACHED); } @@ -711,7 +711,7 @@ CommandCost CmdLandscapeClear(TileIndex /* If this tile was the first tile which caused object destruction, always * pass it on to the tile_type_proc. That way multiple test runs and the exec run stay consistent. */ - if (coa != NULL && coa->first_tile != tile) { + if (coa != nullptr && coa->first_tile != tile) { /* If this tile belongs to an object which was already cleared via another tile, pretend it has been * already removed. * However, we need to check stuff, which is not the same for all object tiles. (e.g. being on water or not) */ @@ -725,7 +725,7 @@ CommandCost CmdLandscapeClear(TileIndex } if (flags & DC_EXEC) { - if (c != NULL) c->clear_limit -= 1 << 16; + if (c != nullptr) c->clear_limit -= 1 << 16; if (do_clear) DoClearSquare(tile); } return cost; @@ -750,8 +750,8 @@ CommandCost CmdClearArea(TileIndex tile, CommandCost last_error = CMD_ERROR; bool had_success = false; - const Company *c = (flags & (DC_AUTO | DC_BANKRUPT)) ? NULL : Company::GetIfValid(_current_company); - int limit = (c == NULL ? INT32_MAX : GB(c->clear_limit, 16, 16)); + const Company *c = (flags & (DC_AUTO | DC_BANKRUPT)) ? nullptr : Company::GetIfValid(_current_company); + int limit = (c == nullptr ? INT32_MAX : GB(c->clear_limit, 16, 16)); TileIterator *iter = HasBit(p2, 0) ? (TileIterator *)new DiagonalTileIterator(tile, p1) : new OrthogonalTileIterator(tile, p1); for (; *iter != INVALID_TILE; ++(*iter)) { @@ -761,7 +761,7 @@ CommandCost CmdClearArea(TileIndex tile, last_error = ret; /* We may not clear more tiles. */ - if (c != NULL && GB(c->clear_limit, 16, 16) < 1) break; + if (c != nullptr && GB(c->clear_limit, 16, 16) < 1) break; continue; } @@ -862,7 +862,7 @@ static void GenerateTerrain(int type, ui uint32 r = Random(); const Sprite *templ = GetSprite((((r >> 24) * _genterrain_tbl_1[type]) >> 8) + _genterrain_tbl_2[type] + 4845, ST_MAPGEN); - if (templ == NULL) usererror("Map generator sprites could not be loaded"); + if (templ == nullptr) usererror("Map generator sprites could not be loaded"); uint x = r & MapMaxX(); uint y = (r >> MapLogX()) & MapMaxY(); @@ -1065,7 +1065,7 @@ static bool MakeLake(TileIndex tile, voi MakeRiver(tile, Random()); /* Remove desert directly around the river tile. */ TileIndex t = tile; - CircularTileSearch(&t, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); + CircularTileSearch(&t, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); return false; } } @@ -1132,12 +1132,12 @@ static void River_GetNeighbours(AyStar * /* AyStar callback when an route has been found. */ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) { - for (PathNode *path = ¤t->path; path != NULL; path = path->parent) { + for (PathNode *path = ¤t->path; path != nullptr; path = path->parent) { TileIndex tile = path->node.tile; if (!IsWaterTile(tile)) { MakeRiver(tile, Random()); /* Remove desert directly around the river tile. */ - CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); + CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); } } } @@ -1249,7 +1249,7 @@ static bool FlowRiver(TileIndex spring, end = lakeCenter; MakeRiver(lakeCenter, Random()); /* Remove desert directly around the river tile. */ - CircularTileSearch(&lakeCenter, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); + CircularTileSearch(&lakeCenter, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); lakeCenter = end; uint range = RandomRange(8) + 3; CircularTileSearch(&lakeCenter, range, MakeLake, &height); @@ -1280,7 +1280,7 @@ static void CreateRivers() IncreaseGeneratingWorldProgress(GWP_RIVER); for (int tries = 0; tries < 128; tries++) { TileIndex t = RandomTile(); - if (!CircularTileSearch(&t, 8, FindSpring, NULL)) continue; + if (!CircularTileSearch(&t, 8, FindSpring, nullptr)) continue; if (FlowRiver(t, t)) break; } } diff --git a/src/landscape.h b/src/landscape.h --- a/src/landscape.h +++ b/src/landscape.h @@ -36,7 +36,7 @@ byte LowestSnowLine(); void ClearSnowLine(); int GetSlopeZInCorner(Slope tileh, Corner corner); -Slope GetFoundationSlope(TileIndex tile, int *z = NULL); +Slope GetFoundationSlope(TileIndex tile, int *z = nullptr); uint GetPartialPixelZ(int x, int y, Slope corners); int GetSlopePixelZ(int x, int y); @@ -62,12 +62,12 @@ static inline int GetSlopePixelZInCorner * If a tile does not have a foundation, the function returns the same as GetTilePixelSlope. * * @param tile The tile of interest. - * @param z returns the z of the foundation slope. (Can be NULL, if not needed) + * @param z returns the z of the foundation slope. (Can be nullptr, if not needed) * @return The slope on top of the foundation. */ static inline Slope GetFoundationPixelSlope(TileIndex tile, int *z) { - assert(z != NULL); + assert(z != nullptr); Slope s = GetFoundationSlope(tile, z); *z *= TILE_HEIGHT; return s; @@ -117,7 +117,7 @@ static inline Point InverseRemapCoords(i return pt; } -Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false, bool *clamped = NULL); +Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false, bool *clamped = nullptr); uint ApplyFoundationToSlope(Foundation f, Slope *s); /** diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -301,7 +301,7 @@ void LinkGraphOverlay::DrawStationDots(c { for (StationSupplyList::const_iterator i(this->cached_stations.begin()); i != this->cached_stations.end(); ++i) { const Station *st = Station::GetIfValid(i->first); - if (st == NULL) continue; + if (st == nullptr) continue; Point pt = this->GetStationMiddle(st); if (!this->IsPointVisible(pt, dpi, 3 * this->scale)) continue; @@ -345,7 +345,7 @@ void LinkGraphOverlay::DrawStationDots(c */ Point LinkGraphOverlay::GetStationMiddle(const Station *st) const { - if (this->window->viewport != NULL) { + if (this->window->viewport != nullptr) { return GetViewportStationMiddle(this->window->viewport, st); } else { /* assume this is a smallmap */ @@ -399,7 +399,7 @@ NWidgetBase *MakeCargoesLegendLinkGraphG { static const uint ENTRIES_PER_ROW = CeilDiv(NUM_CARGO, 5); NWidgetVertical *panel = new NWidgetVertical(NC_EQUALSIZE); - NWidgetHorizontal *row = NULL; + NWidgetHorizontal *row = nullptr; for (uint i = 0; i < NUM_CARGO; ++i) { if (i % ENTRIES_PER_ROW == 0) { if (row) panel->Add(row); @@ -563,7 +563,7 @@ bool LinkGraphLegendWindow::OnTooltip(Po { if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) { if (this->IsWidgetDisabled(widget)) { - GuiShowTooltips(this, STR_LINKGRAPH_LEGEND_SELECT_COMPANIES, 0, NULL, close_cond); + GuiShowTooltips(this, STR_LINKGRAPH_LEGEND_SELECT_COMPANIES, 0, nullptr, close_cond); } else { uint64 params[2]; CompanyID cid = (CompanyID)(widget - WID_LGL_COMPANY_FIRST); diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -102,7 +102,7 @@ LinkGraphJob::~LinkGraphJob() /* The station can have been deleted. Remove all flows originating from it then. */ Station *st = Station::GetIfValid(from.Station()); - if (st == NULL) { + if (st == nullptr) { this->EraseFlows(node_id); continue; } @@ -122,7 +122,7 @@ LinkGraphJob::~LinkGraphJob() if (from[it->first].Flow() == 0) continue; StationID to = (*this)[it->first].Station(); Station *st2 = Station::GetIfValid(to); - if (st2 == NULL || st2->goods[this->Cargo()].link_graph != this->link_graph.index || + if (st2 == nullptr || st2->goods[this->Cargo()].link_graph != this->link_graph.index || st2->goods[this->Cargo()].node != it->first || (*lg)[node_id][it->first].LastUpdate() == INVALID_DATE) { /* Edge has been removed. Delete flows. */ @@ -240,7 +240,7 @@ void Path::Fork(Path *base, uint cap, in */ uint Path::AddFlow(uint new_flow, LinkGraphJob &job, uint max_saturation) { - if (this->parent != NULL) { + if (this->parent != nullptr) { LinkGraphJob::Edge edge = job[this->parent->node][this->node]; if (max_saturation != UINT_MAX) { uint usable_cap = edge.Capacity() * max_saturation / 100; @@ -270,6 +270,6 @@ Path::Path(NodeID n, bool source) : capacity(source ? UINT_MAX : 0), free_capacity(source ? INT_MAX : INT_MIN), flow(0), node(n), origin(source ? n : INVALID_NODE), - num_children(0), parent(NULL) + num_children(0), parent(nullptr) {} diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h --- a/src/linkgraph/linkgraphjob.h +++ b/src/linkgraph/linkgraphjob.h @@ -403,9 +403,9 @@ public: */ inline void Detach() { - if (this->parent != NULL) { + if (this->parent != nullptr) { this->parent->num_children--; - this->parent = NULL; + this->parent = nullptr; } } diff --git a/src/linkgraph/mcf.cpp b/src/linkgraph/mcf.cpp --- a/src/linkgraph/mcf.cpp +++ b/src/linkgraph/mcf.cpp @@ -104,7 +104,7 @@ public: * @param job Job to iterate on. */ GraphEdgeIterator(LinkGraphJob &job) : job(job), - i(NULL, NULL, INVALID_NODE), end(NULL, NULL, INVALID_NODE) + i(nullptr, nullptr, INVALID_NODE), end(nullptr, nullptr, INVALID_NODE) {} /** @@ -262,7 +262,7 @@ void MultiCommodityFlow::Dijkstra(NodeID Tedge_iterator iter(this->job); uint size = this->job.Size(); AnnoSet annos; - paths.resize(size, NULL); + paths.resize(size, nullptr); for (NodeID node = 0; node < size; ++node) { Tannotation *anno = new Tannotation(node, node == source_node); anno->UpdateAnnotation(); @@ -305,16 +305,16 @@ void MultiCommodityFlow::Dijkstra(NodeID void MultiCommodityFlow::CleanupPaths(NodeID source_id, PathVector &paths) { Path *source = paths[source_id]; - paths[source_id] = NULL; + paths[source_id] = nullptr; for (PathVector::iterator i = paths.begin(); i != paths.end(); ++i) { Path *path = *i; - if (path == NULL) continue; + if (path == nullptr) continue; if (path->GetParent() == source) path->Detach(); - while (path != source && path != NULL && path->GetFlow() == 0) { + while (path != source && path != nullptr && path->GetFlow() == 0) { Path *parent = path->GetParent(); path->Detach(); if (path->GetNumChildren() == 0) { - paths[path->GetNode()] = NULL; + paths[path->GetNode()] = nullptr; delete path; } path = parent; @@ -404,7 +404,7 @@ bool MCF1stPass::EliminateCycles(PathVec /* this node has already been searched */ if (at_next_pos == Path::invalid_path) return false; - if (at_next_pos == NULL) { + if (at_next_pos == nullptr) { /* Summarize paths; add up the paths with the same source and next hop * in one path each. */ PathList &paths = this->job[next_id].Paths(); @@ -450,7 +450,7 @@ bool MCF1stPass::EliminateCycles(PathVec * could be found in this branch, thus it has to be searched again next * time we spot it. */ - path[next_id] = found ? NULL : Path::invalid_path; + path[next_id] = found ? nullptr : Path::invalid_path; return found; } @@ -474,11 +474,11 @@ bool MCF1stPass::EliminateCycles() { bool cycles_found = false; uint size = this->job.Size(); - PathVector path(size, NULL); + PathVector path(size, nullptr); for (NodeID node = 0; node < size; ++node) { /* Starting at each node in the graph find all cycles involving this * node. */ - std::fill(path.begin(), path.end(), (Path *)NULL); + std::fill(path.begin(), path.end(), (Path *)nullptr); cycles_found |= this->EliminateCycles(path, node, node); } return cycles_found; @@ -505,7 +505,7 @@ MCF1stPass::MCF1stPass(LinkGraphJob &job Edge edge = job[source][dest]; if (edge.UnsatisfiedDemand() > 0) { Path *path = paths[dest]; - assert(path != NULL); + assert(path != nullptr); /* Generally only allow paths that don't exceed the * available capacity. But if no demand has been assigned * yet, make an exception and allow any valid path *once*. */ diff --git a/src/linkgraph/refresh.cpp b/src/linkgraph/refresh.cpp --- a/src/linkgraph/refresh.cpp +++ b/src/linkgraph/refresh.cpp @@ -28,11 +28,11 @@ /* static */ void LinkRefresher::Run(Vehicle *v, bool allow_merge, bool is_full_loading) { /* If there are no orders we can't predict anything.*/ - if (v->orders.list == NULL) return; + if (v->orders.list == nullptr) return; /* Make sure the first order is a useful order. */ const Order *first = v->orders.list->GetNextDecisionNode(v->GetOrder(v->cur_implicit_order_index), 0); - if (first == NULL) return; + if (first == nullptr) return; HopSet seen_hops; LinkRefresher refresher(v, &seen_hops, allow_merge, is_full_loading); @@ -75,7 +75,7 @@ LinkRefresher::LinkRefresher(Vehicle *ve memset(this->capacities, 0, sizeof(this->capacities)); /* Assemble list of capacities and set last loading stations to 0. */ - for (Vehicle *v = this->vehicle; v != NULL; v = v->Next()) { + for (Vehicle *v = this->vehicle; v != nullptr; v = v->Next()) { this->refit_capacities.push_back(RefitDesc(v->cargo_type, v->cargo_cap, v->refit_cap)); if (v->refit_cap > 0) { assert(v->cargo_type < NUM_CARGO); @@ -94,7 +94,7 @@ bool LinkRefresher::HandleRefit(CargoID this->cargo = refit_cargo; RefitList::iterator refit_it = this->refit_capacities.begin(); bool any_refit = false; - for (Vehicle *v = this->vehicle; v != NULL; v = v->Next()) { + for (Vehicle *v = this->vehicle; v != nullptr; v = v->Next()) { const Engine *e = Engine::Get(v->engine_type); if (!HasBit(e->info.refit_mask, this->cargo)) { ++refit_it; @@ -164,10 +164,10 @@ void LinkRefresher::ResetRefit() */ const Order *LinkRefresher::PredictNextOrder(const Order *cur, const Order *next, uint8 flags, uint num_hops) { - /* next is good if it's either NULL (then the caller will stop the + /* next is good if it's either nullptr (then the caller will stop the * evaluation) or if it's not conditional and the caller allows it to be * chosen (by setting USE_NEXT). */ - while (next != NULL && (!HasBit(flags, USE_NEXT) || next->IsType(OT_CONDITIONAL))) { + while (next != nullptr && (!HasBit(flags, USE_NEXT) || next->IsType(OT_CONDITIONAL))) { /* After the first step any further non-conditional order is good, * regardless of previous USE_NEXT settings. The case of cur and next or @@ -177,7 +177,7 @@ const Order *LinkRefresher::PredictNextO if (next->IsType(OT_CONDITIONAL)) { const Order *skip_to = this->vehicle->orders.list->GetNextDecisionNode( this->vehicle->orders.list->GetOrderAt(next->GetConditionSkipToOrder()), num_hops); - if (skip_to != NULL && num_hops < this->vehicle->orders.list->GetNumOrders()) { + if (skip_to != nullptr && num_hops < this->vehicle->orders.list->GetNumOrders()) { /* Make copies of capacity tracking lists. There is potential * for optimization here: If the vehicle never refits we don't * need to copy anything. Also, if we've seen the branched link @@ -204,7 +204,7 @@ void LinkRefresher::RefreshStats(const O { StationID next_station = next->GetDestination(); Station *st = Station::GetIfValid(cur->GetDestination()); - if (st != NULL && next_station != INVALID_STATION && next_station != st->index) { + if (st != nullptr && next_station != INVALID_STATION && next_station != st->index) { for (CargoID c = 0; c < NUM_CARGO; c++) { /* Refresh the link and give it a minimum capacity. */ @@ -226,7 +226,7 @@ void LinkRefresher::RefreshStats(const O * loading. Don't do that if the vehicle has been waiting for longer than the entire * order list is supposed to take, though. If that is the case the total duration is * probably far off and we'd greatly overestimate the capacity by increasing.*/ - if (this->is_full_loading && this->vehicle->orders.list != NULL && + if (this->is_full_loading && this->vehicle->orders.list != nullptr && st->index == vehicle->last_station_visited && this->vehicle->orders.list->GetTotalDuration() > (Ticks)this->vehicle->current_order_time) { @@ -260,7 +260,7 @@ void LinkRefresher::RefreshStats(const O */ void LinkRefresher::RefreshLinks(const Order *cur, const Order *next, uint8 flags, uint num_hops) { - while (next != NULL) { + while (next != nullptr) { if ((next->IsType(OT_GOTO_DEPOT) || next->IsType(OT_GOTO_STATION)) && next->IsRefit()) { SetBit(flags, WAS_REFIT); @@ -288,7 +288,7 @@ void LinkRefresher::RefreshLinks(const O } next = this->PredictNextOrder(cur, next, flags, num_hops); - if (next == NULL) break; + if (next == nullptr) break; Hop hop(cur->index, next->index, this->cargo); if (this->seen_hops->find(hop) != this->seen_hops->end()) { break; diff --git a/src/main_gui.cpp b/src/main_gui.cpp --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -72,7 +72,7 @@ void HandleOnEditText(const char *str) switch (_rename_what) { case 3: { // Give money, you can only give money in excess of loan const Company *c = Company::GetIfValid(_local_company); - if (c == NULL) break; + if (c == nullptr) break; Money money = min(c->money - c->current_loan, (Money)(atoi(str) / _currency->rate)); uint32 money_c = Clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0 @@ -124,7 +124,7 @@ void ShowNetworkGiveMoneyWindow(CompanyI { _rename_id = company; _rename_what = 3; - ShowQueryString(STR_EMPTY, STR_NETWORK_GIVE_MONEY_CAPTION, 30, NULL, CS_NUMERAL, QSF_NONE); + ShowQueryString(STR_EMPTY, STR_NETWORK_GIVE_MONEY_CAPTION, 30, nullptr, CS_NUMERAL, QSF_NONE); } @@ -139,7 +139,7 @@ bool DoZoomInOutWindow(ZoomStateChange h { ViewPort *vp; - assert(w != NULL); + assert(w != nullptr); vp = w->viewport; switch (how) { @@ -173,7 +173,7 @@ bool DoZoomInOutWindow(ZoomStateChange h w->viewport->follow_vehicle = INVALID_VEHICLE; break; } - if (vp != NULL) { // the vp can be null when how == ZOOM_NONE + if (vp != nullptr) { // the vp can be null when how == ZOOM_NONE vp->virtual_left = w->viewport->scrollpos_x; vp->virtual_top = w->viewport->scrollpos_y; } @@ -184,7 +184,7 @@ bool DoZoomInOutWindow(ZoomStateChange h void ZoomInOrOutToCursorWindow(bool in, Window *w) { - assert(w != NULL); + assert(w != nullptr); if (_game_mode != GM_MENU) { ViewPort *vp = w->viewport; @@ -394,7 +394,7 @@ struct MainWindow : Window case GHK_CHAT: // smart chat; send to team if any, otherwise to all if (_networking) { const NetworkClientInfo *cio = NetworkClientInfo::GetByClientID(_network_own_client_id); - if (cio == NULL) break; + if (cio == nullptr) break; ShowNetworkChatQueryWindow(NetworkClientPreferTeamChat(cio) ? DESTTYPE_TEAM : DESTTYPE_BROADCAST, cio->client_playas); } @@ -407,7 +407,7 @@ struct MainWindow : Window case GHK_CHAT_COMPANY: // send text to all team mates if (_networking) { const NetworkClientInfo *cio = NetworkClientInfo::GetByClientID(_network_own_client_id); - if (cio == NULL) break; + if (cio == nullptr) break; ShowNetworkChatQueryWindow(DESTTYPE_TEAM, cio->client_playas); } @@ -442,7 +442,7 @@ struct MainWindow : Window void OnResize() override { - if (this->viewport != NULL) { + if (this->viewport != nullptr) { NWidgetViewport *nvp = this->GetWidget(WID_M_VIEWPORT); nvp->UpdateViewportCoordinates(this); this->refresh.SetInterval(LINKGRAPH_DELAY); @@ -517,7 +517,7 @@ static Hotkey global_hotkeys[] = { HotkeyList MainWindow::hotkeys("global", global_hotkeys); static WindowDesc _main_window_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_MAIN_WINDOW, WC_NONE, 0, _nested_main_window_widgets, lengthof(_nested_main_window_widgets), diff --git a/src/map.cpp b/src/map.cpp --- a/src/map.cpp +++ b/src/map.cpp @@ -29,8 +29,8 @@ uint _map_size_y; ///< Size of the ma uint _map_size; ///< The number of tiles on the map uint _map_tile_mask; ///< _map_size - 1 (to mask the mapsize) -Tile *_m = NULL; ///< Tiles of the map -TileExtended *_me = NULL; ///< Extended Tiles of the map +Tile *_m = nullptr; ///< Tiles of the map +TileExtended *_me = nullptr; ///< Extended Tiles of the map /** @@ -254,12 +254,12 @@ uint DistanceFromEdgeDir(TileIndex tile, * @param proc: callback testing function pointer. * @param user_data to be passed to the callback function. Depends on the implementation * @return result of the search - * @pre proc != NULL + * @pre proc != nullptr * @pre size > 0 */ bool CircularTileSearch(TileIndex *tile, uint size, TestTileOnSearchProc proc, void *user_data) { - assert(proc != NULL); + assert(proc != nullptr); assert(size > 0); if (size % 2 == 1) { @@ -292,12 +292,12 @@ bool CircularTileSearch(TileIndex *tile, * @param proc callback testing function pointer. * @param user_data to be passed to the callback function. Depends on the implementation * @return result of the search - * @pre proc != NULL + * @pre proc != nullptr * @pre radius > 0 */ bool CircularTileSearch(TileIndex *tile, uint radius, uint w, uint h, TestTileOnSearchProc proc, void *user_data) { - assert(proc != NULL); + assert(proc != nullptr); assert(radius > 0); uint x = TileX(*tile) + w + 1; diff --git a/src/misc/binaryheap.hpp b/src/misc/binaryheap.hpp --- a/src/misc/binaryheap.hpp +++ b/src/misc/binaryheap.hpp @@ -72,7 +72,7 @@ public: { this->Clear(); free(this->data); - this->data = NULL; + this->data = nullptr; } protected: diff --git a/src/misc/blob.hpp b/src/misc/blob.hpp --- a/src/misc/blob.hpp +++ b/src/misc/blob.hpp @@ -86,9 +86,9 @@ public: /** move constructor - take ownership of blob data */ inline ByteBlob(BlobHeader * const & src) { - assert(src != NULL); + assert(src != nullptr); header = src; - *const_cast(&src) = NULL; + *const_cast(&src) = nullptr; } /** destructor */ @@ -221,7 +221,7 @@ public: /** append new bytes at the end of existing data bytes - reallocates if necessary */ inline void AppendRaw(const void *p, size_t num_bytes) { - assert(p != NULL); + assert(p != nullptr); if (num_bytes > 0) { memcpy(Append(num_bytes), p, num_bytes); } @@ -317,8 +317,8 @@ public: OnTransfer(const OnTransfer& src) : header(src.header) { - assert(src.header != NULL); - *const_cast(&src.header) = NULL; + assert(src.header != nullptr); + *const_cast(&src.header) = nullptr; } OnTransfer(CBlobT& src) : header(src.header) @@ -328,7 +328,7 @@ public: ~OnTransfer() { - assert(header == NULL); + assert(header == nullptr); } }; diff --git a/src/misc/countedptr.hpp b/src/misc/countedptr.hpp --- a/src/misc/countedptr.hpp +++ b/src/misc/countedptr.hpp @@ -34,8 +34,8 @@ protected: Tcls *m_pT; public: - /** default (NULL) construct or construct from a raw pointer */ - inline CCountedPtr(Tcls *pObj = NULL) : m_pT(pObj) + /** default (nullptr) construct or construct from a raw pointer */ + inline CCountedPtr(Tcls *pObj = nullptr) : m_pT(pObj) { AddRef(); } @@ -56,16 +56,16 @@ protected: /** add one ref to the underlaying object */ inline void AddRef() { - if (m_pT != NULL) m_pT->AddRef(); + if (m_pT != nullptr) m_pT->AddRef(); } public: /** release smart pointer (and decrement ref count) if not null */ inline void Release() { - if (m_pT != NULL) { + if (m_pT != nullptr) { Tcls *pT = m_pT; - m_pT = NULL; + m_pT = nullptr; pT->Release(); } } @@ -73,21 +73,21 @@ public: /** dereference of smart pointer - const way */ inline const Tcls *operator->() const { - assert(m_pT != NULL); + assert(m_pT != nullptr); return m_pT; } /** dereference of smart pointer - non const way */ inline Tcls *operator->() { - assert(m_pT != NULL); + assert(m_pT != nullptr); return m_pT; } /** raw pointer casting operator - const way */ inline operator const Tcls*() const { - assert(m_pT == NULL); + assert(m_pT == nullptr); return m_pT; } @@ -100,7 +100,7 @@ public: /** operator & to support output arguments */ inline Tcls** operator&() { - assert(m_pT == NULL); + assert(m_pT == nullptr); return &m_pT; } @@ -121,16 +121,16 @@ public: /** assignment operator helper */ inline void Assign(Tcls *pT); - /** one way how to test for NULL value */ + /** one way how to test for nullptr value */ inline bool IsNull() const { - return m_pT == NULL; + return m_pT == nullptr; } - /** another way how to test for NULL value */ + /** another way how to test for nullptr value */ //inline bool operator == (const CCountedPtr &sp) const {return m_pT == sp.m_pT;} - /** yet another way how to test for NULL value */ + /** yet another way how to test for nullptr value */ //inline bool operator != (const CCountedPtr &sp) const {return m_pT != sp.m_pT;} /** assign pointer w/o incrementing ref count */ @@ -144,7 +144,7 @@ public: inline Tcls *Detach() { Tcls *pT = m_pT; - m_pT = NULL; + m_pT = nullptr; return pT; } }; @@ -154,10 +154,10 @@ inline void CCountedPtr::Assign(T { /* if they are the same, we do nothing */ if (pT != m_pT) { - if (pT != NULL) pT->AddRef(); // AddRef new pointer if any + if (pT != nullptr) pT->AddRef(); // AddRef new pointer if any Tcls *pTold = m_pT; // save original ptr m_pT = pT; // update m_pT to new value - if (pTold != NULL) pTold->Release(); // release old ptr if any + if (pTold != nullptr) pTold->Release(); // release old ptr if any } } diff --git a/src/misc/dbg_helpers.h b/src/misc/dbg_helpers.h --- a/src/misc/dbg_helpers.h +++ b/src/misc/dbg_helpers.h @@ -155,8 +155,8 @@ struct DumpTarget { { static size_t type_id = ++LastTypeId(); - if (s == NULL) { - /* No need to dump NULL struct. */ + if (s == nullptr) { + /* No need to dump nullptr struct. */ WriteLine("%s = ", name); return; } diff --git a/src/misc/fixedsizearray.hpp b/src/misc/fixedsizearray.hpp --- a/src/misc/fixedsizearray.hpp +++ b/src/misc/fixedsizearray.hpp @@ -94,7 +94,7 @@ public: Clear(); /* free the memory block occupied by items */ free(((byte*)data) - HeaderSize); - data = NULL; + data = nullptr; } /** Clear (destroy) all items */ diff --git a/src/misc/getoptdata.cpp b/src/misc/getoptdata.cpp --- a/src/misc/getoptdata.cpp +++ b/src/misc/getoptdata.cpp @@ -26,7 +26,7 @@ int GetOptData::GetOpt() const OptionData *odata; char *s = this->cont; - if (s == NULL) { + if (s == nullptr) { if (this->numleft == 0) return -1; // No arguments left -> finished. s = this->argv[0]; @@ -37,8 +37,8 @@ int GetOptData::GetOpt() /* Is it a long option? */ for (odata = this->options; odata->flags != ODF_END; odata++) { - if (odata->longname != NULL && !strcmp(odata->longname, s)) { // Long options always use the entire argument. - this->cont = NULL; + if (odata->longname != nullptr && !strcmp(odata->longname, s)) { // Long options always use the entire argument. + this->cont = nullptr; goto set_optval; } } @@ -49,19 +49,19 @@ int GetOptData::GetOpt() /* Is it a short option? */ for (odata = this->options; odata->flags != ODF_END; odata++) { if (odata->shortname != '\0' && *s == odata->shortname) { - this->cont = (s[1] != '\0') ? s + 1 : NULL; + this->cont = (s[1] != '\0') ? s + 1 : nullptr; set_optval: // Handle option value of *odata . - this->opt = NULL; + this->opt = nullptr; switch (odata->flags) { case ODF_NO_VALUE: return odata->id; case ODF_HAS_VALUE: case ODF_OPTIONAL_VALUE: - if (this->cont != NULL) { // Remainder of the argument is the option value. + if (this->cont != nullptr) { // Remainder of the argument is the option value. this->opt = this->cont; - this->cont = NULL; + this->cont = nullptr; return odata->id; } /* No more arguments, either return an error or a value-less option. */ diff --git a/src/misc/getoptdata.h b/src/misc/getoptdata.h --- a/src/misc/getoptdata.h +++ b/src/misc/getoptdata.h @@ -25,12 +25,12 @@ struct OptionData { byte id; ///< Unique identification of this option data, often the same as #shortname. char shortname; ///< Short option letter if available, else use \c '\0'. uint16 flags; ///< Option data flags. @see OptionDataFlags - const char *longname; ///< Long option name including '-'/'--' prefix, use \c NULL if not available. + const char *longname; ///< Long option name including '-'/'--' prefix, use \c nullptr if not available. }; /** Data storage for parsing command line options. */ struct GetOptData { - char *opt; ///< Option value, if available (else \c NULL). + char *opt; ///< Option value, if available (else \c nullptr). int numleft; ///< Number of arguments left in #argv. char **argv; ///< Remaining command line arguments. const OptionData *options; ///< Command line option descriptions. @@ -43,11 +43,11 @@ struct GetOptData { * @param options Command line option descriptions. */ GetOptData(int argc, char **argv, const OptionData *options) : - opt(NULL), + opt(nullptr), numleft(argc), argv(argv), options(options), - cont(NULL) + cont(nullptr) { } @@ -58,7 +58,7 @@ struct GetOptData { * General macro for creating an option. * @param id Identification of the option. * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c NULL if not used. + * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. * @param flags Flags of the option. */ #define GETOPT_GENERAL(id, shortname, longname, flags) { id, shortname, flags, longname } @@ -66,21 +66,21 @@ struct GetOptData { /** * Short option without value. * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c NULL if not used. + * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. */ #define GETOPT_NOVAL(shortname, longname) GETOPT_GENERAL(shortname, shortname, longname, ODF_NO_VALUE) /** * Short option with value. * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c NULL if not used. + * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. */ #define GETOPT_VALUE(shortname, longname) GETOPT_GENERAL(shortname, shortname, longname, ODF_HAS_VALUE) /** * Short option with optional value. * @param shortname Short option name. Use \c '\0' if not used. - * @param longname Long option name including leading '-' or '--'. Use \c NULL if not used. + * @param longname Long option name including leading '-' or '--'. Use \c nullptr if not used. * @note Options with optional values are hopelessly ambiguous, eg "-opt -value", avoid them. */ #define GETOPT_OPTVAL(shortname, longname) GETOPT_GENERAL(shortname, shortname, longname, ODF_OPTIONAL_VALUE) @@ -90,23 +90,23 @@ struct GetOptData { * Short option without value. * @param shortname Short option name. Use \c '\0' if not used. */ -#define GETOPT_SHORT_NOVAL(shortname) GETOPT_NOVAL(shortname, NULL) +#define GETOPT_SHORT_NOVAL(shortname) GETOPT_NOVAL(shortname, nullptr) /** * Short option with value. * @param shortname Short option name. Use \c '\0' if not used. */ -#define GETOPT_SHORT_VALUE(shortname) GETOPT_VALUE(shortname, NULL) +#define GETOPT_SHORT_VALUE(shortname) GETOPT_VALUE(shortname, nullptr) /** * Short option with optional value. * @param shortname Short option name. Use \c '\0' if not used. * @note Options with optional values are hopelessly ambiguous, eg "-opt -value", avoid them. */ -#define GETOPT_SHORT_OPTVAL(shortname) GETOPT_OPTVAL(shortname, NULL) +#define GETOPT_SHORT_OPTVAL(shortname) GETOPT_OPTVAL(shortname, nullptr) /** Option terminator. */ -#define GETOPT_END() { '\0', '\0', ODF_END, NULL} +#define GETOPT_END() { '\0', '\0', ODF_END, nullptr} #endif /* GETOPTDATA_H */ diff --git a/src/misc/hashtable.hpp b/src/misc/hashtable.hpp --- a/src/misc/hashtable.hpp +++ b/src/misc/hashtable.hpp @@ -21,42 +21,42 @@ struct CHashTableSlotT Titem_ *m_pFirst; - inline CHashTableSlotT() : m_pFirst(NULL) {} + inline CHashTableSlotT() : m_pFirst(nullptr) {} /** hash table slot helper - clears the slot by simple forgetting its items */ inline void Clear() { - m_pFirst = NULL; + m_pFirst = nullptr; } /** hash table slot helper - linear search for item with given key through the given blob - const version */ inline const Titem_ *Find(const Key &key) const { - for (const Titem_ *pItem = m_pFirst; pItem != NULL; pItem = pItem->GetHashNext()) { + for (const Titem_ *pItem = m_pFirst; pItem != nullptr; pItem = pItem->GetHashNext()) { if (pItem->GetKey() == key) { /* we have found the item, return it */ return pItem; } } - return NULL; + return nullptr; } /** hash table slot helper - linear search for item with given key through the given blob - non-const version */ inline Titem_ *Find(const Key &key) { - for (Titem_ *pItem = m_pFirst; pItem != NULL; pItem = pItem->GetHashNext()) { + for (Titem_ *pItem = m_pFirst; pItem != nullptr; pItem = pItem->GetHashNext()) { if (pItem->GetKey() == key) { /* we have found the item, return it */ return pItem; } } - return NULL; + return nullptr; } /** hash table slot helper - add new item to the slot */ inline void Attach(Titem_ &new_item) { - assert(new_item.GetHashNext() == NULL); + assert(new_item.GetHashNext() == nullptr); new_item.SetHashNext(m_pFirst); m_pFirst = &new_item; } @@ -66,12 +66,12 @@ struct CHashTableSlotT { if (m_pFirst == &item_to_remove) { m_pFirst = item_to_remove.GetHashNext(); - item_to_remove.SetHashNext(NULL); + item_to_remove.SetHashNext(nullptr); return true; } Titem_ *pItem = m_pFirst; for (;;) { - if (pItem == NULL) { + if (pItem == nullptr) { return false; } Titem_ *pNextItem = pItem->GetHashNext(); @@ -79,7 +79,7 @@ struct CHashTableSlotT pItem = pNextItem; } pItem->SetHashNext(item_to_remove.GetHashNext()); - item_to_remove.SetHashNext(NULL); + item_to_remove.SetHashNext(nullptr); return true; } @@ -87,27 +87,27 @@ struct CHashTableSlotT inline Titem_ *Detach(const Key &key) { /* do we have any items? */ - if (m_pFirst == NULL) { - return NULL; + if (m_pFirst == nullptr) { + return nullptr; } /* is it our first item? */ if (m_pFirst->GetKey() == key) { Titem_ &ret_item = *m_pFirst; m_pFirst = m_pFirst->GetHashNext(); - ret_item.SetHashNext(NULL); + ret_item.SetHashNext(nullptr); return &ret_item; } /* find it in the following items */ Titem_ *pPrev = m_pFirst; - for (Titem_ *pItem = m_pFirst->GetHashNext(); pItem != NULL; pPrev = pItem, pItem = pItem->GetHashNext()) { + for (Titem_ *pItem = m_pFirst->GetHashNext(); pItem != nullptr; pPrev = pItem, pItem = pItem->GetHashNext()) { if (pItem->GetKey() == key) { /* we have found the item, unlink and return it */ pPrev->SetHashNext(pItem->GetHashNext()); - pItem->SetHashNext(NULL); + pItem->SetHashNext(nullptr); return pItem; } } - return NULL; + return nullptr; } }; @@ -211,7 +211,7 @@ public: int hash = CalcHash(key); Slot &slot = m_slots[hash]; Titem_ *item = slot.Detach(key); - if (item != NULL) { + if (item != nullptr) { m_num_items--; } return item; @@ -221,7 +221,7 @@ public: Titem_& Pop(const Tkey &key) { Titem_ *item = TryPop(key); - assert(item != NULL); + assert(item != nullptr); return *item; } @@ -250,7 +250,7 @@ public: { int hash = CalcHash(new_item); Slot &slot = m_slots[hash]; - assert(slot.Find(new_item.GetKey()) == NULL); + assert(slot.Find(new_item.GetKey()) == nullptr); slot.Attach(new_item); m_num_items++; } diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -166,7 +166,7 @@ CommandCost CmdPause(TileIndex tile, DoC ShowQuery( STR_NEWGRF_UNPAUSE_WARNING_TITLE, STR_NEWGRF_UNPAUSE_WARNING, - NULL, + nullptr, AskUnsafeUnpauseCallback ); } else { diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -168,10 +168,10 @@ public: td.rail_speed = 0; td.road_speed = 0; - td.grf = NULL; + td.grf = nullptr; CargoArray acceptance; - AddAcceptedCargo(tile, acceptance, NULL); + AddAcceptedCargo(tile, acceptance, nullptr); GetTileDesc(tile, &td); uint line_nr = 0; @@ -194,7 +194,7 @@ public: /* Cost to clear/revenue when cleared */ StringID str = STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A; Company *c = Company::GetIfValid(_local_company); - if (c != NULL) { + if (c != nullptr) { assert(_current_company == _local_company); CommandCost costclear = DoCommand(tile, 0, 0, DC_QUERY_COST, CMD_LANDSCAPE_CLEAR); if (costclear.Succeeded()) { @@ -223,7 +223,7 @@ public: /* Local authority */ SetDParam(0, STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE); - if (t != NULL) { + if (t != nullptr) { SetDParam(0, STR_TOWN_NAME); SetDParam(1, t->index); } @@ -294,7 +294,7 @@ public: } /* NewGRF name */ - if (td.grf != NULL) { + if (td.grf != nullptr) { SetDParamStr(0, td.grf); GetString(this->landinfo_data[line_nr], STR_LAND_AREA_INFORMATION_NEWGRF_NAME, lastof(this->landinfo_data[line_nr])); line_nr++; @@ -382,7 +382,7 @@ static const NWidgetPart _nested_about_w }; static WindowDesc _about_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, _nested_about_widgets, lengthof(_nested_about_widgets) @@ -638,7 +638,7 @@ static const NWidgetPart _nested_tooltip }; static WindowDesc _tool_tips_desc( - WDP_MANUAL, NULL, 0, 0, // Coordinates and sizes are not used, + WDP_MANUAL, nullptr, 0, 0, // Coordinates and sizes are not used, WC_TOOLTIPS, WC_NONE, WDF_NO_FOCUS, _nested_tooltips_widgets, lengthof(_nested_tooltips_widgets) @@ -880,7 +880,7 @@ Rect QueryString::GetBoundingRect(const * @param w Window the edit box is in. * @param wid Widget index. * @param pt Position to test. - * @return Pointer to the character at the position or NULL if no character is at the position. + * @return Pointer to the character at the position or nullptr if no character is at the position. */ const char *QueryString::GetCharAtPosition(const Window *w, int wid, const Point &pt) const { @@ -898,7 +898,7 @@ const char *QueryString::GetCharAtPositi int top = wi->pos_y + WD_FRAMERECT_TOP; int bottom = wi->pos_y + wi->current_y - 1 - WD_FRAMERECT_BOTTOM; - if (!IsInsideMM(pt.y, top, bottom)) return NULL; + if (!IsInsideMM(pt.y, top, bottom)) return nullptr; /* Clamp caret position to be inside our current width. */ const Textbuf *tb = &this->text; @@ -990,10 +990,10 @@ struct QueryStringWindow : public Window void OnOk() { - if (this->editbox.orig == NULL || strcmp(this->editbox.text.buf, this->editbox.orig) != 0) { - /* If the parent is NULL, the editbox is handled by general function + if (this->editbox.orig == nullptr || strcmp(this->editbox.text.buf, this->editbox.orig) != 0) { + /* If the parent is nullptr, the editbox is handled by general function * HandleOnEditText */ - if (this->parent != NULL) { + if (this->parent != nullptr) { this->parent->OnQueryTextFinished(this->editbox.text.buf); } else { HandleOnEditText(this->editbox.text.buf); @@ -1021,10 +1021,10 @@ struct QueryStringWindow : public Window ~QueryStringWindow() { - if (!this->editbox.handled && this->parent != NULL) { + if (!this->editbox.handled && this->parent != nullptr) { Window *parent = this->parent; - this->parent = NULL; // so parent doesn't try to delete us again - parent->OnQueryTextFinished(NULL); + this->parent = nullptr; // so parent doesn't try to delete us again + parent->OnQueryTextFinished(nullptr); } } }; @@ -1057,7 +1057,7 @@ static WindowDesc _query_string_desc( * @param caption StringID of text shown in caption of querywindow * @param maxsize maximum size in bytes or characters (including terminating '\0') depending on flags * @param parent pointer to a Window that will handle the events (ok/cancel) of this - * window. If NULL, results are handled by global function HandleOnEditText + * window. If nullptr, results are handled by global function HandleOnEditText * @param afilter filters out unwanted character input * @param flags various flags, @see QueryStringFlags */ @@ -1094,7 +1094,7 @@ struct QueryWindow : public Window { ~QueryWindow() { - if (this->proc != NULL) this->proc(this->parent, false); + if (this->proc != nullptr) this->proc(this->parent, false); } void SetStringParameters(int widget) const override @@ -1138,11 +1138,11 @@ struct QueryWindow : public Window { QueryCallbackProc *proc = this->proc; Window *parent = this->parent; /* Prevent the destructor calling the callback function */ - this->proc = NULL; + this->proc = nullptr; delete this; - if (proc != NULL) { + if (proc != nullptr) { proc(parent, true); - proc = NULL; + proc = nullptr; } break; } @@ -1158,9 +1158,9 @@ struct QueryWindow : public Window { switch (keycode) { case WKC_RETURN: case WKC_NUM_ENTER: - if (this->proc != NULL) { + if (this->proc != nullptr) { this->proc(this->parent, true); - this->proc = NULL; + this->proc = nullptr; } FALLTHROUGH; @@ -1187,7 +1187,7 @@ static const NWidgetPart _nested_query_w }; static WindowDesc _query_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_CONFIRM_POPUP_QUERY, WC_NONE, WDF_MODAL, _nested_query_widgets, lengthof(_nested_query_widgets) @@ -1198,13 +1198,13 @@ static WindowDesc _query_desc( * The window is aligned to the centre of its parent. * @param caption string shown as window caption * @param message string that will be shown for the window - * @param parent pointer to parent window, if this pointer is NULL the parent becomes + * @param parent pointer to parent window, if this pointer is nullptr the parent becomes * the main window WC_MAIN_WINDOW * @param callback callback function pointer to set in the window descriptor */ void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback) { - if (parent == NULL) parent = FindWindowById(WC_MAIN_WINDOW, 0); + if (parent == nullptr) parent = FindWindowById(WC_MAIN_WINDOW, 0); const Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { diff --git a/src/mixer.cpp b/src/mixer.cpp --- a/src/mixer.cpp +++ b/src/mixer.cpp @@ -39,7 +39,7 @@ struct MixerChannel { static MixerChannel _channels[8]; static uint32 _play_rate = 11025; static uint32 _max_size = UINT_MAX; -static MxStreamCallback _music_stream = NULL; +static MxStreamCallback _music_stream = nullptr; /** * The theoretical maximum volume for a single sound sample. Multiple sound @@ -175,11 +175,11 @@ MixerChannel *MxAllocateChannel() for (mc = _channels; mc != endof(_channels); mc++) { if (!mc->active) { free(mc->memory); - mc->memory = NULL; + mc->memory = nullptr; return mc; } } - return NULL; + return nullptr; } void MxSetChannelRawSrc(MixerChannel *mc, int8 *mem, size_t size, uint rate, bool is16bit) @@ -238,6 +238,6 @@ bool MxInitialize(uint rate) { _play_rate = rate; _max_size = UINT_MAX / _play_rate; - _music_stream = NULL; /* rate may have changed, any music source is now invalid */ + _music_stream = nullptr; /* rate may have changed, any music source is now invalid */ return true; } diff --git a/src/music.cpp b/src/music.cpp --- a/src/music.cpp +++ b/src/music.cpp @@ -25,11 +25,11 @@ * @param filename Name of CAT file to read from * @param entrynum Index of entry whose name to read * @return Pointer to string, caller is responsible for freeing memory, - * NULL if entrynum does not exist. + * nullptr if entrynum does not exist. */ char *GetMusicCatEntryName(const char *filename, size_t entrynum) { - if (!FioCheckFileExists(filename, BASESET_DIR)) return NULL; + if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr; FioOpenFile(CONFIG_SLOT, filename, BASESET_DIR); uint32 ofs = FioReadDword(); @@ -43,7 +43,7 @@ char *GetMusicCatEntryName(const char *f name[namelen] = '\0'; return name; } - return NULL; + return nullptr; } /** @@ -52,12 +52,12 @@ char *GetMusicCatEntryName(const char *f * @param entrynum Index of entry to read * @param[out] entrylen Receives length of data read * @return Pointer to buffer with data read, caller is responsible for freeind memory, - * NULL if entrynum does not exist. + * nullptr if entrynum does not exist. */ byte *GetMusicCatEntryData(const char *filename, size_t entrynum, size_t &entrylen) { entrylen = 0; - if (!FioCheckFileExists(filename, BASESET_DIR)) return NULL; + if (!FioCheckFileExists(filename, BASESET_DIR)) return nullptr; FioOpenFile(CONFIG_SLOT, filename, BASESET_DIR); uint32 ofs = FioReadDword(); @@ -72,7 +72,7 @@ byte *GetMusicCatEntryData(const char *f FioReadBlock(data, entrylen); return data; } - return NULL; + return nullptr; } INSTANTIATE_BASE_MEDIA_METHODS(BaseMedia, MusicSet) @@ -99,13 +99,13 @@ template template /* static */ bool BaseMedia::DetermineBestSet() { - if (BaseMedia::used_set != NULL) return true; + if (BaseMedia::used_set != nullptr) return true; - const Tbase_set *best = NULL; - for (const Tbase_set *c = BaseMedia::available_sets; c != NULL; c = c->next) { + const Tbase_set *best = nullptr; + for (const Tbase_set *c = BaseMedia::available_sets; c != nullptr; c = c->next) { if (c->GetNumMissing() != 0) continue; - if (best == NULL || + if (best == nullptr || (best->fallback && !c->fallback) || best->valid_files < c->valid_files || (best->valid_files == c->valid_files && @@ -115,7 +115,7 @@ template } BaseMedia::used_set = best; - return BaseMedia::used_set != NULL; + return BaseMedia::used_set != nullptr; } bool MusicSet::FillSetDetails(IniFile *ini, const char *path, const char *full_filename) @@ -129,7 +129,7 @@ bool MusicSet::FillSetDetails(IniFile *i uint tracknr = 1; for (uint i = 0; i < lengthof(this->songinfo); i++) { const char *filename = this->files[i].filename; - if (names == NULL || StrEmpty(filename) || this->files[i].check_result == MD5File::CR_NO_FILE) { + if (names == nullptr || StrEmpty(filename) || this->files[i].check_result == MD5File::CR_NO_FILE) { this->songinfo[i].songname[0] = '\0'; continue; } @@ -137,12 +137,12 @@ bool MusicSet::FillSetDetails(IniFile *i this->songinfo[i].filename = filename; // non-owned pointer IniItem *item = catindex->GetItem(_music_file_names[i], false); - if (item != NULL && !StrEmpty(item->value)) { + if (item != nullptr && !StrEmpty(item->value)) { /* Song has a CAT file index, assume it's MPS MIDI format */ this->songinfo[i].filetype = MTT_MPSMIDI; this->songinfo[i].cat_index = atoi(item->value); char *songname = GetMusicCatEntryName(filename, this->songinfo[i].cat_index); - if (songname == NULL) { + if (songname == nullptr) { DEBUG(grf, 0, "Base music set song missing from CAT file: %s/%d", filename, this->songinfo[i].cat_index); this->songinfo[i].songname[0] = '\0'; continue; @@ -157,17 +157,17 @@ bool MusicSet::FillSetDetails(IniFile *i /* As we possibly add a path to the filename and we compare * on the filename with the path as in the .obm, we need to * keep stripping path elements until we find a match. */ - for (; trimmed_filename != NULL; trimmed_filename = strchr(trimmed_filename, PATHSEPCHAR)) { + for (; trimmed_filename != nullptr; trimmed_filename = strchr(trimmed_filename, PATHSEPCHAR)) { /* Remove possible double path separator characters from * the beginning, so we don't start reading e.g. root. */ while (*trimmed_filename == PATHSEPCHAR) trimmed_filename++; item = names->GetItem(trimmed_filename, false); - if (item != NULL && !StrEmpty(item->value)) break; + if (item != nullptr && !StrEmpty(item->value)) break; } if (this->songinfo[i].filetype == MTT_STANDARDMIDI) { - if (item != NULL && !StrEmpty(item->value)) { + if (item != nullptr && !StrEmpty(item->value)) { strecpy(this->songinfo[i].songname, item->value, lastof(this->songinfo[i].songname)); } else { DEBUG(grf, 0, "Base music set song name missing: %s", filename); @@ -184,9 +184,9 @@ bool MusicSet::FillSetDetails(IniFile *i } item = timingtrim->GetItem(trimmed_filename, false); - if (item != NULL && !StrEmpty(item->value)) { + if (item != nullptr && !StrEmpty(item->value)) { const char *endpos = strchr(item->value, ':'); - if (endpos != NULL) { + if (endpos != nullptr) { this->songinfo[i].override_start = atoi(item->value); this->songinfo[i].override_end = atoi(endpos + 1); } diff --git a/src/music/allegro_m.cpp b/src/music/allegro_m.cpp --- a/src/music/allegro_m.cpp +++ b/src/music/allegro_m.cpp @@ -20,7 +20,7 @@ #include "../safeguards.h" static FMusicDriver_Allegro iFMusicDriver_Allegro; -static MIDI *_midi = NULL; +static MIDI *_midi = nullptr; /** * There are multiple modules that might be using Allegro and @@ -30,14 +30,14 @@ extern int _allegro_instance_count; const char *MusicDriver_Allegro::Start(const char * const *param) { - if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) { + if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { DEBUG(driver, 0, "allegro: install_allegro failed '%s'", allegro_error); return "Failed to set up Allegro"; } _allegro_instance_count++; /* Initialise the sound */ - if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) { + if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, nullptr) != 0) { DEBUG(driver, 0, "allegro: install_sound failed '%s'", allegro_error); return "Failed to set up Allegro sound"; } @@ -48,13 +48,13 @@ const char *MusicDriver_Allegro::Start(c return "No sound card found"; } - return NULL; + return nullptr; } void MusicDriver_Allegro::Stop() { - if (_midi != NULL) destroy_midi(_midi); - _midi = NULL; + if (_midi != nullptr) destroy_midi(_midi); + _midi = nullptr; if (--_allegro_instance_count == 0) allegro_exit(); } @@ -63,12 +63,12 @@ void MusicDriver_Allegro::PlaySong(const { std::string filename = MidiFile::GetSMFFile(song); - if (_midi != NULL) destroy_midi(_midi); + if (_midi != nullptr) destroy_midi(_midi); if (!filename.empty()) { _midi = load_midi(filename.c_str()); play_midi(_midi, false); } else { - _midi = NULL; + _midi = nullptr; } } diff --git a/src/music/bemidi.cpp b/src/music/bemidi.cpp --- a/src/music/bemidi.cpp +++ b/src/music/bemidi.cpp @@ -28,7 +28,7 @@ static FMusicDriver_BeMidi iFMusicDriver const char *MusicDriver_BeMidi::Start(const char * const *parm) { - return NULL; + return nullptr; } void MusicDriver_BeMidi::Stop() diff --git a/src/music/cocoa_m.cpp b/src/music/cocoa_m.cpp --- a/src/music/cocoa_m.cpp +++ b/src/music/cocoa_m.cpp @@ -35,8 +35,8 @@ static FMusicDriver_Cocoa iFMusicDriver_Cocoa; -static MusicPlayer _player = NULL; -static MusicSequence _sequence = NULL; +static MusicPlayer _player = nullptr; +static MusicSequence _sequence = nullptr; static MusicTimeStamp _seq_length = 0; static bool _playing = false; static byte _volume = 127; @@ -45,12 +45,12 @@ static byte _volume = 127; /** Set the volume of the current sequence. */ static void DoSetVolume() { - if (_sequence == NULL) return; + if (_sequence == nullptr) return; AUGraph graph; MusicSequenceGetAUGraph(_sequence, &graph); - AudioUnit output_unit = NULL; + AudioUnit output_unit = nullptr; /* Get output audio unit */ UInt32 node_count = 0; @@ -82,7 +82,7 @@ static void DoSetVolume() { #if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) ComponentDescription desc; - AUGraphGetNodeInfo(graph, node, &desc, NULL, NULL, &unit); + AUGraphGetNodeInfo(graph, node, &desc, nullptr, nullptr, &unit); comp_type = desc.componentType; #endif } @@ -92,7 +92,7 @@ static void DoSetVolume() break; } } - if (output_unit == NULL) { + if (output_unit == nullptr) { DEBUG(driver, 1, "cocoa_m: Failed to get output node to set volume"); return; } @@ -109,7 +109,7 @@ const char *MusicDriver_Cocoa::Start(con { if (NewMusicPlayer(&_player) != noErr) return "failed to create music player"; - return NULL; + return nullptr; } @@ -131,8 +131,8 @@ bool MusicDriver_Cocoa::IsSongPlaying() */ void MusicDriver_Cocoa::Stop() { - if (_player != NULL) DisposeMusicPlayer(_player); - if (_sequence != NULL) DisposeMusicSequence(_sequence); + if (_player != nullptr) DisposeMusicPlayer(_player); + if (_sequence != nullptr) DisposeMusicSequence(_sequence); } @@ -148,9 +148,9 @@ void MusicDriver_Cocoa::PlaySong(const M DEBUG(driver, 2, "cocoa_m: trying to play '%s'", filename.c_str()); this->StopSong(); - if (_sequence != NULL) { + if (_sequence != nullptr) { DisposeMusicSequence(_sequence); - _sequence = NULL; + _sequence = nullptr; } if (filename.empty()) return; @@ -190,7 +190,7 @@ void MusicDriver_Cocoa::PlaySong(const M CFRelease(url); /* Construct audio graph */ - AUGraph graph = NULL; + AUGraph graph = nullptr; MusicSequenceGetAUGraph(_sequence, &graph); AUGraphOpen(graph); @@ -204,7 +204,7 @@ void MusicDriver_Cocoa::PlaySong(const M MusicSequenceGetTrackCount(_sequence, &num_tracks); _seq_length = 0; for (UInt32 i = 0; i < num_tracks; i++) { - MusicTrack track = NULL; + MusicTrack track = nullptr; MusicTimeStamp track_length = 0; UInt32 prop_size = sizeof(MusicTimeStamp); MusicSequenceGetIndTrack(_sequence, i, &track); @@ -230,7 +230,7 @@ void MusicDriver_Cocoa::PlaySong(const M void MusicDriver_Cocoa::StopSong() { MusicPlayerStop(_player); - MusicPlayerSetSequence(_player, NULL); + MusicPlayerSetSequence(_player, nullptr); _playing = false; } diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -141,16 +141,16 @@ static struct { /** Handle to our worker thread. */ static std::thread _dmusic_thread; /** Event to signal the thread that it should look at a state change. */ -static HANDLE _thread_event = NULL; +static HANDLE _thread_event = nullptr; /** Lock access to playback data that is not thread-safe. */ static std::mutex _thread_mutex; /** The direct music object manages buffers and ports. */ -static IDirectMusic *_music = NULL; +static IDirectMusic *_music = nullptr; /** The port object lets us send MIDI data to the synthesizer. */ -static IDirectMusicPort *_port = NULL; +static IDirectMusicPort *_port = nullptr; /** The buffer object collects the data to sent. */ -static IDirectMusicBuffer *_buffer = NULL; +static IDirectMusicBuffer *_buffer = nullptr; /** List of downloaded DLS instruments. */ static std::vector _dls_downloads; @@ -438,7 +438,7 @@ bool DLSFile::LoadFile(const TCHAR *file DEBUG(driver, 2, "DMusic: Try to load DLS file %s", FS2OTTD(file)); FILE *f = _tfopen(file, _T("rb")); - if (f == NULL) return false; + if (f == nullptr) return false; FileCloser f_scope(f); @@ -879,13 +879,13 @@ static const char *LoadDefaultDLSFile(co if ((caps.dwFlags & (DMUS_PC_DLS | DMUS_PC_DLS2)) != 0 && (caps.dwFlags & DMUS_PC_GMINHARDWARE) == 0) { DLSFile dls_file; - if (user_dls == NULL) { + if (user_dls == nullptr) { /* Try loading the default GM DLS file stored in the registry. */ HKEY hkDM; if (SUCCEEDED(RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\DirectMusic"), 0, KEY_READ, &hkDM))) { TCHAR dls_path[MAX_PATH]; DWORD buf_size = sizeof(dls_path); // Buffer size as to be given in bytes! - if (SUCCEEDED(RegQueryValueEx(hkDM, _T("GMFilePath"), NULL, NULL, (LPBYTE)dls_path, &buf_size))) { + if (SUCCEEDED(RegQueryValueEx(hkDM, _T("GMFilePath"), nullptr, nullptr, (LPBYTE)dls_path, &buf_size))) { TCHAR expand_path[MAX_PATH * 2]; ExpandEnvironmentStrings(dls_path, expand_path, lengthof(expand_path)); if (!dls_file.LoadFile(expand_path)) DEBUG(driver, 1, "Failed to load default GM DLS file from registry"); @@ -906,7 +906,7 @@ static const char *LoadDefaultDLSFile(co } /* Get download port and allocate download IDs. */ - IDirectMusicPortDownload *download_port = NULL; + IDirectMusicPortDownload *download_port = nullptr; if (FAILED(_port->QueryInterface(IID_IDirectMusicPortDownload, (LPVOID *)&download_port))) return "Can't get download port"; DWORD dlid_wave = 0, dlid_inst = 0; @@ -920,7 +920,7 @@ static const char *LoadDefaultDLSFile(co /* Download wave data. */ for (DWORD i = 0; i < dls_file.waves.size(); i++) { - IDirectMusicDownload *dl_wave = NULL; + IDirectMusicDownload *dl_wave = nullptr; if (FAILED(download_port->AllocateBuffer((DWORD)(sizeof(WAVE_DOWNLOAD) + dwAppend * dls_file.waves[i].fmt.wf.nBlockAlign + dls_file.waves[i].data.size()), &dl_wave))) { download_port->Release(); return "Can't allocate wave download buffer"; @@ -984,7 +984,7 @@ static const char *LoadDefaultDLSFile(co i_size += offsets * sizeof(ULONG); /* Allocate download buffer. */ - IDirectMusicDownload *dl_inst = NULL; + IDirectMusicDownload *dl_inst = nullptr; if (FAILED(download_port->AllocateBuffer((DWORD)i_size, &dl_inst))) { download_port->Release(); return "Can't allocate instrument download buffer"; @@ -1085,19 +1085,19 @@ static const char *LoadDefaultDLSFile(co download_port->Release(); } - return NULL; + return nullptr; } const char *MusicDriver_DMusic::Start(const char * const *parm) { /* Initialize COM */ - if (FAILED(CoInitializeEx(NULL, COINITBASE_MULTITHREADED))) return "COM initialization failed"; + if (FAILED(CoInitializeEx(nullptr, COINITBASE_MULTITHREADED))) return "COM initialization failed"; /* Create the DirectMusic object */ if (FAILED(CoCreateInstance( CLSID_DirectMusic, - NULL, + nullptr, CLSCTX_INPROC, IID_IDirectMusic, (LPVOID*)&_music @@ -1106,7 +1106,7 @@ const char *MusicDriver_DMusic::Start(co } /* Assign sound output device. */ - if (FAILED(_music->SetDirectSound(NULL, NULL))) return "Can't set DirectSound interface"; + if (FAILED(_music->SetDirectSound(nullptr, nullptr))) return "Can't set DirectSound interface"; /* MIDI events need to be send to the synth in time before their playback time * has come. By default, we try send any events at least 50 ms before playback. */ @@ -1149,7 +1149,7 @@ const char *MusicDriver_DMusic::Start(co params.dwSize = sizeof(DMUS_PORTPARAMS); params.dwValidParams = DMUS_PORTPARAMS_CHANNELGROUPS; params.dwChannelGroups = 1; - if (FAILED(_music->CreatePort(guidPort, ¶ms, &_port, NULL))) return "Failed to create port"; + if (FAILED(_music->CreatePort(guidPort, ¶ms, &_port, nullptr))) return "Failed to create port"; /* Activate port. */ if (FAILED(_port->Activate(TRUE))) return "Failed to activate port"; @@ -1159,19 +1159,19 @@ const char *MusicDriver_DMusic::Start(co desc.dwSize = sizeof(DMUS_BUFFERDESC); desc.guidBufferFormat = KSDATAFORMAT_SUBTYPE_DIRECTMUSIC; desc.cbBuffer = 1024; - if (FAILED(_music->CreateMusicBuffer(&desc, &_buffer, NULL))) return "Failed to create music buffer"; + if (FAILED(_music->CreateMusicBuffer(&desc, &_buffer, nullptr))) return "Failed to create music buffer"; /* On soft-synths (e.g. the default DirectMusic one), we might need to load a wavetable set to get music. */ const char *dls = LoadDefaultDLSFile(GetDriverParam(parm, "dls")); - if (dls != NULL) return dls; + if (dls != nullptr) return dls; /* Create playback thread and synchronization primitives. */ - _thread_event = CreateEvent(NULL, FALSE, FALSE, NULL); - if (_thread_event == NULL) return "Can't create thread shutdown event"; + _thread_event = CreateEvent(nullptr, FALSE, FALSE, nullptr); + if (_thread_event == nullptr) return "Can't create thread shutdown event"; if (!StartNewThread(&_dmusic_thread, "ottd:dmusic", &MidiThreadProc)) return "Can't create MIDI output thread"; - return NULL; + return nullptr; } @@ -1191,34 +1191,34 @@ void MusicDriver_DMusic::Stop() /* Unloaded any instruments we loaded. */ if (_dls_downloads.size() > 0) { - IDirectMusicPortDownload *download_port = NULL; + IDirectMusicPortDownload *download_port = nullptr; _port->QueryInterface(IID_IDirectMusicPortDownload, (LPVOID *)&download_port); /* Instruments refer to waves. As the waves are at the beginning of the download list, * do the unload from the back so that references are cleared properly. */ - for (std::vector::reverse_iterator i = _dls_downloads.rbegin(); download_port != NULL && i != _dls_downloads.rend(); i++) { + for (std::vector::reverse_iterator i = _dls_downloads.rbegin(); download_port != nullptr && i != _dls_downloads.rend(); i++) { download_port->Unload(*i); (*i)->Release(); } _dls_downloads.clear(); - if (download_port != NULL) download_port->Release(); + if (download_port != nullptr) download_port->Release(); } - if (_buffer != NULL) { + if (_buffer != nullptr) { _buffer->Release(); - _buffer = NULL; + _buffer = nullptr; } - if (_port != NULL) { + if (_port != nullptr) { _port->Activate(FALSE); _port->Release(); - _port = NULL; + _port = nullptr; } - if (_music != NULL) { + if (_music != nullptr) { _music->Release(); - _music = NULL; + _music = nullptr; } CloseHandle(_thread_event); diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -52,7 +52,7 @@ const char *MusicDriver_ExtMidi::Start(c if (StrEmpty(command)) command = EXTERNAL_PLAYER " " MIDI_ARG; #endif - /* Count number of arguments, but include 3 extra slots: 1st for command, 2nd for song title, and 3rd for terminating NULL. */ + /* Count number of arguments, but include 3 extra slots: 1st for command, 2nd for song title, and 3rd for terminating nullptr. */ uint num_args = 3; for (const char *t = command; *t != '\0'; t++) if (*t == ' ') num_args++; @@ -63,7 +63,7 @@ const char *MusicDriver_ExtMidi::Start(c uint p = 1; while (true) { this->params[p] = strchr(this->params[p - 1], ' '); - if (this->params[p] == NULL) break; + if (this->params[p] == nullptr) break; this->params[p][0] = '\0'; this->params[p]++; @@ -75,7 +75,7 @@ const char *MusicDriver_ExtMidi::Start(c this->song[0] = '\0'; this->pid = -1; - return NULL; + return nullptr; } void MusicDriver_ExtMidi::Stop() @@ -103,7 +103,7 @@ void MusicDriver_ExtMidi::StopSong() bool MusicDriver_ExtMidi::IsSongPlaying() { - if (this->pid != -1 && waitpid(this->pid, NULL, WNOHANG) == this->pid) { + if (this->pid != -1 && waitpid(this->pid, nullptr, WNOHANG) == this->pid) { this->pid = -1; } if (this->pid == -1 && this->song[0] != '\0') this->DoPlay(); @@ -146,7 +146,7 @@ void MusicDriver_ExtMidi::DoStop() * 5 seconds = 5000 milliseconds, 10 ms per cycle => 500 cycles. */ for (int i = 0; i < 500; i++) { kill(this->pid, SIGTERM); - if (waitpid(this->pid, NULL, WNOHANG) == this->pid) { + if (waitpid(this->pid, nullptr, WNOHANG) == this->pid) { /* It has shut down, so we are done */ this->pid = -1; return; @@ -159,6 +159,6 @@ void MusicDriver_ExtMidi::DoStop() /* Gracefully stopping failed. Do it the hard way * and wait till the process finally died. */ kill(this->pid, SIGKILL); - waitpid(this->pid, NULL, 0); + waitpid(this->pid, nullptr, 0); this->pid = -1; } diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -39,7 +39,7 @@ static const char *default_sf[] = { "/usr/share/sounds/sf2/TimGM6mb.sf2", "/usr/share/sounds/sf2/FluidR3_GS.sf2", - NULL + nullptr }; static void RenderMusicStream(int16 *buffer, size_t samples) @@ -81,18 +81,18 @@ const char *MusicDriver_FluidSynth::Star if (sfont_id == FLUID_FAILED) return "Could not open sound font"; } - _midi.player = NULL; + _midi.player = nullptr; uint32 samplerate = MxSetMusicSource(RenderMusicStream); fluid_synth_set_sample_rate(_midi.synth, samplerate); DEBUG(driver, 1, "Fluidsynth: samplerate %.0f", (float)samplerate); - return NULL; + return nullptr; } void MusicDriver_FluidSynth::Stop() { - MxSetMusicSource(NULL); + MxSetMusicSource(nullptr); this->StopSong(); delete_fluid_synth(_midi.synth); delete_fluid_settings(_midi.settings); @@ -117,13 +117,13 @@ void MusicDriver_FluidSynth::PlaySong(co if (fluid_player_add(_midi.player, filename.c_str()) != FLUID_OK) { DEBUG(driver, 0, "Could not open music file"); delete_fluid_player(_midi.player); - _midi.player = NULL; + _midi.player = nullptr; return; } if (fluid_player_play(_midi.player) != FLUID_OK) { DEBUG(driver, 0, "Could not start midi player"); delete_fluid_player(_midi.player); - _midi.player = NULL; + _midi.player = nullptr; return; } } @@ -138,7 +138,7 @@ void MusicDriver_FluidSynth::StopSong() } delete_fluid_player(_midi.player); fluid_synth_system_reset(_midi.synth); - _midi.player = NULL; + _midi.player = nullptr; } bool MusicDriver_FluidSynth::IsSongPlaying() diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -24,7 +24,7 @@ /* SMF reader based on description at: http://www.somascape.org/midi/tech/mfile.html */ -static MidiFile *_midifile_instance = NULL; +static MidiFile *_midifile_instance = nullptr; /** * Owning byte buffer readable as a stream. @@ -426,7 +426,7 @@ bool MidiFile::LoadFile(const char *file bool success = false; FILE *file = FioFOpenFile(filename, "rb", Subdirectory::BASESET_DIR); - if (file == NULL) return false; + if (file == nullptr) return false; SMFHeader header; if (!ReadSMFHeader(file, header)) goto cleanup; @@ -815,7 +815,7 @@ bool MidiFile::LoadSong(const MusicSongI { size_t songdatalen = 0; byte *songdata = GetMusicCatEntryData(song.filename, song.cat_index, songdatalen); - if (songdata != NULL) { + if (songdata != nullptr) { bool result = this->LoadMpsData(songdata, songdatalen); free(songdata); return result; @@ -1024,7 +1024,7 @@ std::string MidiFile::GetSMFFile(const M char basename[MAX_PATH]; { const char *fnstart = strrchr(song.filename, PATHSEPCHAR); - if (fnstart == NULL) { + if (fnstart == nullptr) { fnstart = song.filename; } else { fnstart++; @@ -1054,7 +1054,7 @@ std::string MidiFile::GetSMFFile(const M byte *data; size_t datalen; data = GetMusicCatEntryData(song.filename, song.cat_index, datalen); - if (data == NULL) return std::string(); + if (data == nullptr) return std::string(); MidiFile midifile; if (!midifile.LoadMpsData(data, datalen)) { @@ -1082,7 +1082,7 @@ static bool CmdDumpSMF(byte argc, char * return false; } - if (_midifile_instance == NULL) { + if (_midifile_instance == nullptr) { IConsolePrint(CC_ERROR, "There is no MIDI file loaded currently, make sure music is playing, and you're using a driver that works with raw MIDI."); return false; } @@ -1120,7 +1120,7 @@ MidiFile::MidiFile() MidiFile::~MidiFile() { if (_midifile_instance == this) { - _midifile_instance = NULL; + _midifile_instance = nullptr; } } diff --git a/src/music/null_m.h b/src/music/null_m.h --- a/src/music/null_m.h +++ b/src/music/null_m.h @@ -17,7 +17,7 @@ /** The music player that does nothing. */ class MusicDriver_Null : public MusicDriver { public: - const char *Start(const char * const *param) override { return NULL; } + const char *Start(const char * const *param) override { return nullptr; } void Stop() override { } diff --git a/src/music/os2_m.cpp b/src/music/os2_m.cpp --- a/src/music/os2_m.cpp +++ b/src/music/os2_m.cpp @@ -45,7 +45,7 @@ static long CDECL MidiSendCommand(const va_start(va, cmd); vseprintf(buf, lastof(buf), cmd, va); va_end(va); - return mciSendString(buf, NULL, 0, NULL, 0); + return mciSendString(buf, nullptr, 0, nullptr, 0); } /** OS/2's music player's factory. */ @@ -78,7 +78,7 @@ void MusicDriver_OS2::SetVolume(byte vol bool MusicDriver_OS2::IsSongPlaying() { char buf[16]; - mciSendString("status song mode", buf, sizeof(buf), NULL, 0); + mciSendString("status song mode", buf, sizeof(buf), nullptr, 0); return strcmp(buf, "playing") == 0 || strcmp(buf, "seeking") == 0; } diff --git a/src/music/qtmidi.cpp b/src/music/qtmidi.cpp --- a/src/music/qtmidi.cpp +++ b/src/music/qtmidi.cpp @@ -60,7 +60,7 @@ static void SetMIDITypeIfNeeded(const FS assert(ref); - if (noErr != FSGetCatalogInfo(ref, kFSCatInfoNodeFlags | kFSCatInfoFinderInfo, &catalogInfo, NULL, NULL, NULL)) return; + if (noErr != FSGetCatalogInfo(ref, kFSCatInfoNodeFlags | kFSCatInfoFinderInfo, &catalogInfo, nullptr, nullptr, nullptr)) return; if (!(catalogInfo.nodeFlags & kFSNodeIsDirectoryMask)) { FileInfo * const info = (FileInfo *) catalogInfo.finderInfo; if (info->fileType != MIDI_TYPE && !(info->finderFlags & kIsAlias)) { @@ -94,8 +94,8 @@ static bool LoadMovieForMIDIFile(const c short refnum = 0; short resid = 0; - assert(path != NULL); - assert(moov != NULL); + assert(path != nullptr); + assert(moov != nullptr); DEBUG(driver, 2, "qtmidi: start loading '%s'...", path); @@ -116,15 +116,15 @@ static bool LoadMovieForMIDIFile(const c return false; } - if (noErr != FSPathMakeRef((const UInt8 *) path, &fsref, NULL)) return false; + if (noErr != FSPathMakeRef((const UInt8 *) path, &fsref, nullptr)) return false; SetMIDITypeIfNeeded(&fsref); - if (noErr != FSGetCatalogInfo(&fsref, kFSCatInfoNone, NULL, NULL, &fsspec, NULL)) return false; + if (noErr != FSGetCatalogInfo(&fsref, kFSCatInfoNone, nullptr, nullptr, &fsspec, nullptr)) return false; if (OpenMovieFile(&fsspec, &refnum, fsRdPerm) != noErr) return false; DEBUG(driver, 3, "qtmidi: '%s' successfully opened", path); - if (noErr != NewMovieFromFile(moov, refnum, &resid, NULL, - newMovieActive | newMovieDontAskUnresolvedDataRefs, NULL)) { + if (noErr != NewMovieFromFile(moov, refnum, &resid, nullptr, + newMovieActive | newMovieDontAskUnresolvedDataRefs, nullptr)) { CloseMovieFile(refnum); return false; } @@ -191,7 +191,7 @@ static int _quicktime_state = QT_STAT const char *MusicDriver_QtMidi::Start(const char * const *parm) { InitQuickTimeIfNeeded(); - return (_quicktime_started) ? NULL : "can't initialize QuickTime"; + return (_quicktime_started) ? nullptr : "can't initialize QuickTime"; } @@ -215,7 +215,7 @@ bool MusicDriver_QtMidi::IsSongPlaying() MoviesTask(_quicktime_movie, 0); /* Check wether movie ended. */ if (IsMovieDone(_quicktime_movie) || - (GetMovieTime(_quicktime_movie, NULL) >= + (GetMovieTime(_quicktime_movie, nullptr) >= GetMovieDuration(_quicktime_movie))) { _quicktime_state = QT_STATE_STOP; } diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -396,7 +396,7 @@ const char *MusicDriver_Win32::Start(con if (timeBeginPeriod(_midi.time_period) == MMSYSERR_NOERROR) { /* success */ DEBUG(driver, 2, "Win32-MIDI: Start: timer resolution is %d", (int)_midi.time_period); - return NULL; + return nullptr; } } midiOutClose(_midi.midi_out); diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -25,7 +25,7 @@ const char *NetworkAddress::GetHostname( { if (StrEmpty(this->hostname) && this->address.ss_family != AF_UNSPEC) { assert(this->address_length != 0); - getnameinfo((struct sockaddr *)&this->address, this->address_length, this->hostname, sizeof(this->hostname), NULL, 0, NI_NUMERICHOST); + getnameinfo((struct sockaddr *)&this->address, this->address_length, this->hostname, sizeof(this->hostname), nullptr, 0, NI_NUMERICHOST); } return this->hostname; } @@ -131,7 +131,7 @@ const sockaddr_storage *NetworkAddress:: * bothered to implement the specifications and allow '0' as value * that means "don't care whether it is SOCK_STREAM or SOCK_DGRAM". */ - this->Resolve(this->address.ss_family, SOCK_STREAM, AI_ADDRCONFIG, NULL, ResolveLoopProc); + this->Resolve(this->address.ss_family, SOCK_STREAM, AI_ADDRCONFIG, nullptr, ResolveLoopProc); this->resolved = true; } return &this->address; @@ -145,7 +145,7 @@ const sockaddr_storage *NetworkAddress:: bool NetworkAddress::IsFamily(int family) { if (!this->IsResolved()) { - this->Resolve(family, SOCK_STREAM, AI_ADDRCONFIG, NULL, ResolveLoopProc); + this->Resolve(family, SOCK_STREAM, AI_ADDRCONFIG, nullptr, ResolveLoopProc); } return this->address.ss_family == family; } @@ -167,7 +167,7 @@ bool NetworkAddress::IsInNetmask(const c /* Check for CIDR separator */ const char *chr_cidr = strchr(netmask, '/'); - if (chr_cidr != NULL) { + if (chr_cidr != nullptr) { int tmp_cidr = atoi(chr_cidr + 1); /* Invalid CIDR, treat as single host */ @@ -232,7 +232,7 @@ SOCKET NetworkAddress::Resolve(int famil seprintf(port_name, lastof(port_name), "%u", this->GetPort()); bool reset_hostname = false; - /* Setting both hostname to NULL and port to 0 is not allowed. + /* Setting both hostname to nullptr and port to 0 is not allowed. * As port 0 means bind to any port, the other must mean that * we want to bind to 'all' IPs. */ if (StrEmpty(this->hostname) && this->address_length == 0 && this->GetPort() == 0) { @@ -242,7 +242,7 @@ SOCKET NetworkAddress::Resolve(int famil strecpy(this->hostname, fam == AF_INET ? "0.0.0.0" : "::", lastof(this->hostname)); } - int e = getaddrinfo(StrEmpty(this->hostname) ? NULL : this->hostname, port_name, &hints, &ai); + int e = getaddrinfo(StrEmpty(this->hostname) ? nullptr : this->hostname, port_name, &hints, &ai); if (reset_hostname) strecpy(this->hostname, "", lastof(this->hostname)); @@ -255,18 +255,18 @@ SOCKET NetworkAddress::Resolve(int famil } SOCKET sock = INVALID_SOCKET; - for (struct addrinfo *runp = ai; runp != NULL; runp = runp->ai_next) { + for (struct addrinfo *runp = ai; runp != nullptr; runp = runp->ai_next) { /* When we are binding to multiple sockets, make sure we do not * connect to one with exactly the same address twice. That's * of course totally unneeded ;) */ - if (sockets != NULL) { + if (sockets != nullptr) { NetworkAddress address(runp->ai_addr, (int)runp->ai_addrlen); if (sockets->Contains(address)) continue; } sock = func(runp); if (sock == INVALID_SOCKET) continue; - if (sockets == NULL) { + if (sockets == nullptr) { this->address_length = (int)runp->ai_addrlen; assert(sizeof(this->address) >= runp->ai_addrlen); memcpy(&this->address, runp->ai_addr, runp->ai_addrlen); @@ -323,7 +323,7 @@ SOCKET NetworkAddress::Connect() { DEBUG(net, 1, "Connecting to %s", this->GetAddressAsString()); - return this->Resolve(AF_UNSPEC, SOCK_STREAM, AI_ADDRCONFIG, NULL, ConnectLoopProc); + return this->Resolve(AF_UNSPEC, SOCK_STREAM, AI_ADDRCONFIG, nullptr, ConnectLoopProc); } /** @@ -386,9 +386,9 @@ static SOCKET ListenLoopProc(addrinfo *r */ void NetworkAddress::Listen(int socktype, SocketList *sockets) { - assert(sockets != NULL); + assert(sockets != nullptr); - /* Setting both hostname to NULL and port to 0 is not allowed. + /* Setting both hostname to nullptr and port to 0 is not allowed. * As port 0 means bind to any port, the other must mean that * we want to bind to 'all' IPs. */ if (this->address_length == 0 && this->address.ss_family == AF_UNSPEC && diff --git a/src/network/core/address.h b/src/network/core/address.h --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -84,7 +84,7 @@ public: if (*hostname == '[') hostname++; strecpy(this->hostname, StrEmpty(hostname) ? "" : hostname, lastof(this->hostname)); char *tmp = strrchr(this->hostname, ']'); - if (tmp != NULL) *tmp = '\0'; + if (tmp != nullptr) *tmp = '\0'; memset(&this->address, 0, sizeof(this->address)); this->address.ss_family = family; diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -45,7 +45,7 @@ static void NetworkFindBroadcastIPsInter return; } - char *output_pointer = NULL; + char *output_pointer = nullptr; int output_length = _netstat(sock, &output_pointer, 1); if (output_length < 0) { DEBUG(net, 0, "[core] error running _netstat"); @@ -94,9 +94,9 @@ static void NetworkFindBroadcastIPsInter if (getifaddrs(&ifap) != 0) return; - for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { + for (ifa = ifap; ifa != nullptr; ifa = ifa->ifa_next) { if (!(ifa->ifa_flags & IFF_BROADCAST)) continue; - if (ifa->ifa_broadaddr == NULL) continue; + if (ifa->ifa_broadaddr == nullptr) continue; if (ifa->ifa_broadaddr->sa_family != AF_INET) continue; NetworkAddress addr(ifa->ifa_broadaddr, sizeof(sockaddr)); @@ -116,7 +116,7 @@ static void NetworkFindBroadcastIPsInter INTERFACE_INFO *ifo = CallocT(num); for (;;) { - if (WSAIoctl(sock, SIO_GET_INTERFACE_LIST, NULL, 0, ifo, num * sizeof(*ifo), &len, NULL, NULL) == 0) break; + if (WSAIoctl(sock, SIO_GET_INTERFACE_LIST, nullptr, 0, ifo, num * sizeof(*ifo), &len, nullptr, nullptr) == 0) break; free(ifo); if (WSAGetLastError() != WSAEFAULT) { closesocket(sock); diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -24,10 +24,10 @@ */ Packet::Packet(NetworkSocketHandler *cs) { - assert(cs != NULL); + assert(cs != nullptr); this->cs = cs; - this->next = NULL; + this->next = nullptr; this->pos = 0; // We start reading from here this->size = 0; this->buffer = MallocT(SEND_MTU); @@ -39,8 +39,8 @@ Packet::Packet(NetworkSocketHandler *cs) */ Packet::Packet(PacketType type) { - this->cs = NULL; - this->next = NULL; + this->cs = nullptr; + this->next = nullptr; /* Skip the size so we can write that in before sending the packet */ this->pos = 0; @@ -62,7 +62,7 @@ Packet::~Packet() */ void Packet::PrepareToSend() { - assert(this->cs == NULL && this->next == NULL); + assert(this->cs == nullptr && this->next == nullptr); this->buffer[0] = GB(this->size, 0, 8); this->buffer[1] = GB(this->size, 8, 8); @@ -149,7 +149,7 @@ void Packet::Send_uint64(uint64 data) */ void Packet::Send_string(const char *data) { - assert(data != NULL); + assert(data != nullptr); /* The <= *is* valid due to the fact that we are comparing sizes and not the index. */ assert(this->size + strlen(data) + 1 <= SEND_MTU); while ((this->buffer[this->size++] = *data++) != '\0') {} @@ -187,7 +187,7 @@ bool Packet::CanReadFromPacket(uint byte */ void Packet::ReadRawPacketSize() { - assert(this->cs != NULL && this->next == NULL); + assert(this->cs != nullptr && this->next == nullptr); this->size = (PacketSize)this->buffer[0]; this->size += (PacketSize)this->buffer[1] << 8; } diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -24,7 +24,7 @@ */ NetworkTCPSocketHandler::NetworkTCPSocketHandler(SOCKET s) : NetworkSocketHandler(), - packet_queue(NULL), packet_recv(NULL), + packet_queue(nullptr), packet_recv(nullptr), sock(s), writable(false) { } @@ -43,13 +43,13 @@ NetworkRecvStatus NetworkTCPSocketHandle NetworkSocketHandler::CloseConnection(error); /* Free all pending and partially received packets */ - while (this->packet_queue != NULL) { + while (this->packet_queue != nullptr) { Packet *p = this->packet_queue->next; delete this->packet_queue; this->packet_queue = p; } delete this->packet_recv; - this->packet_recv = NULL; + this->packet_recv = nullptr; return NETWORK_RECV_STATUS_OKAY; } @@ -63,7 +63,7 @@ NetworkRecvStatus NetworkTCPSocketHandle void NetworkTCPSocketHandler::SendPacket(Packet *packet) { Packet *p; - assert(packet != NULL); + assert(packet != nullptr); packet->PrepareToSend(); @@ -74,12 +74,12 @@ void NetworkTCPSocketHandler::SendPacket /* Locate last packet buffered for the client */ p = this->packet_queue; - if (p == NULL) { + if (p == nullptr) { /* No packets yet */ this->packet_queue = packet; } else { /* Skip to the last packet */ - while (p->next != NULL) p = p->next; + while (p->next != nullptr) p = p->next; p->next = packet; } } @@ -104,7 +104,7 @@ SendPacketsState NetworkTCPSocketHandler if (!this->IsConnected()) return SPS_CLOSED; p = this->packet_queue; - while (p != NULL) { + while (p != nullptr) { res = send(this->sock, (const char*)p->buffer + p->pos, p->size - p->pos, 0); if (res == -1) { int err = GET_LAST_ERROR(); @@ -142,15 +142,15 @@ SendPacketsState NetworkTCPSocketHandler /** * Receives a packet for the given client - * @return The received packet (or NULL when it didn't receive one) + * @return The received packet (or nullptr when it didn't receive one) */ Packet *NetworkTCPSocketHandler::ReceivePacket() { ssize_t res; - if (!this->IsConnected()) return NULL; + if (!this->IsConnected()) return nullptr; - if (this->packet_recv == NULL) { + if (this->packet_recv == nullptr) { this->packet_recv = new Packet(this); } @@ -167,15 +167,15 @@ Packet *NetworkTCPSocketHandler::Receive /* Something went wrong... (104 is connection reset by peer) */ if (err != 104) DEBUG(net, 0, "recv failed with error %d", err); this->CloseConnection(); - return NULL; + return nullptr; } /* Connection would block, so stop for now */ - return NULL; + return nullptr; } if (res == 0) { /* Client/server has left */ this->CloseConnection(); - return NULL; + return nullptr; } p->pos += res; } @@ -185,7 +185,7 @@ Packet *NetworkTCPSocketHandler::Receive if (p->size > SEND_MTU) { this->CloseConnection(); - return NULL; + return nullptr; } } @@ -198,22 +198,22 @@ Packet *NetworkTCPSocketHandler::Receive /* Something went wrong... (104 is connection reset by peer) */ if (err != 104) DEBUG(net, 0, "recv failed with error %d", err); this->CloseConnection(); - return NULL; + return nullptr; } /* Connection would block */ - return NULL; + return nullptr; } if (res == 0) { /* Client/server has left */ this->CloseConnection(); - return NULL; + return nullptr; } p->pos += res; } /* Prepare for receiving a new packet */ - this->packet_recv = NULL; + this->packet_recv = nullptr; p->PrepareToRead(); return p; @@ -236,7 +236,7 @@ bool NetworkTCPSocketHandler::CanSendRec FD_SET(this->sock, &write_fd); tv.tv_sec = tv.tv_usec = 0; // don't block at all. - if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false; + if (select(FD_SETSIZE, &read_fd, &write_fd, nullptr, &tv) < 0) return false; this->writable = !!FD_ISSET(this->sock, &write_fd); return FD_ISSET(this->sock, &read_fd) != 0; diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -52,7 +52,7 @@ public: * Whether there is something pending in the send queue. * @return true when something is pending in the send queue. */ - bool HasSendQueue() { return this->packet_queue != NULL; } + bool HasSendQueue() { return this->packet_queue != nullptr; } NetworkTCPSocketHandler(SOCKET s = INVALID_SOCKET); ~NetworkTCPSocketHandler(); diff --git a/src/network/core/tcp_admin.cpp b/src/network/core/tcp_admin.cpp --- a/src/network/core/tcp_admin.cpp +++ b/src/network/core/tcp_admin.cpp @@ -115,7 +115,7 @@ NetworkRecvStatus NetworkAdminSocketHand NetworkRecvStatus NetworkAdminSocketHandler::ReceivePackets() { Packet *p; - while ((p = this->ReceivePacket()) != NULL) { + while ((p = this->ReceivePacket()) != nullptr) { NetworkRecvStatus res = this->HandlePacket(p); if (res != NETWORK_RECV_STATUS_OKAY) return res; } diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -33,7 +33,7 @@ TCPConnecter::TCPConnecter(const Network address(address) { _tcp_connecters.push_back(this); - if (!StartNewThread(NULL, "ottd:tcp", &TCPConnecter::ThreadEntry, this)) { + if (!StartNewThread(nullptr, "ottd:tcp", &TCPConnecter::ThreadEntry, this)) { this->Connect(); } } diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -47,8 +47,8 @@ void ContentInfo::TransferFrom(ContentIn free(this->dependencies); free(this->tags); memcpy(this, other, sizeof(ContentInfo)); - other->dependencies = NULL; - other->tags = NULL; + other->dependencies = nullptr; + other->tags = nullptr; } } @@ -98,11 +98,11 @@ bool ContentInfo::IsValid() const /** * Search a textfile file next to this file in the content list. * @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 *ContentInfo::GetTextfile(TextfileType type) const { - if (this->state == INVALID) return NULL; + if (this->state == INVALID) return nullptr; const char *tmp; switch (this->type) { default: NOT_REACHED(); @@ -120,7 +120,7 @@ const char *ContentInfo::GetTextfile(Tex break; case CONTENT_TYPE_NEWGRF: { const GRFConfig *gc = FindGRFConfig(BSWAP32(this->unique_id), FGCM_EXACT, this->md5sum); - tmp = gc != NULL ? gc->filename : NULL; + tmp = gc != nullptr ? gc->filename : nullptr; break; } case CONTENT_TYPE_BASE_GRAPHICS: @@ -138,7 +138,7 @@ const char *ContentInfo::GetTextfile(Tex tmp = FindScenario(this, true); break; } - if (tmp == NULL) return NULL; + if (tmp == nullptr) return nullptr; return ::GetTextfile(type, GetContentInfoSubDir(this->type), tmp); } #endif /* OPENTTD_MSU */ @@ -209,7 +209,7 @@ bool NetworkContentSocketHandler::Receiv Packet *p; static const int MAX_PACKETS_TO_RECEIVE = 42; int i = MAX_PACKETS_TO_RECEIVE; - while (--i != 0 && (p = this->ReceivePacket()) != NULL) { + while (--i != 0 && (p = this->ReceivePacket()) != nullptr) { bool cont = this->HandlePacket(p); delete p; if (!cont) return true; diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -26,7 +26,7 @@ * Create a new socket for the game connection. * @param s The socket to connect with. */ -NetworkGameSocketHandler::NetworkGameSocketHandler(SOCKET s) : info(NULL), client_id(INVALID_CLIENT_ID), +NetworkGameSocketHandler::NetworkGameSocketHandler(SOCKET s) : info(nullptr), client_id(INVALID_CLIENT_ID), last_frame(_frame_counter), last_frame_server(_frame_counter), last_packet(_realtime_tick) { this->sock = s; @@ -134,7 +134,7 @@ NetworkRecvStatus NetworkGameSocketHandl NetworkRecvStatus NetworkGameSocketHandler::ReceivePackets() { Packet *p; - while ((p = this->ReceivePacket()) != NULL) { + while ((p = this->ReceivePacket()) != nullptr) { NetworkRecvStatus res = HandlePacket(p); delete p; if (res != NETWORK_RECV_STATUS_OKAY) return res; diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -130,12 +130,12 @@ struct CommandPacket; /** A queue of CommandPackets. */ class CommandQueue { CommandPacket *first; ///< The first packet in the queue. - CommandPacket *last; ///< The last packet in the queue; only valid when first != NULL. + CommandPacket *last; ///< The last packet in the queue; only valid when first != nullptr. uint count; ///< The number of items in the queue. public: /** Initialise the command queue. */ - CommandQueue() : first(NULL), last(NULL), count(0) {} + CommandQueue() : first(nullptr), last(nullptr), count(0) {} /** Clear the command queue. */ ~CommandQueue() { this->Free(); } void Append(CommandPacket *p); @@ -537,7 +537,7 @@ public: */ inline void SetInfo(NetworkClientInfo *info) { - assert(info != NULL && this->info == NULL); + assert(info != nullptr && this->info == nullptr); this->info = info; } diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -43,11 +43,11 @@ NetworkHTTPSocketHandler::NetworkHTTPSoc redirect_depth(depth), sock(s) { - size_t bufferSize = strlen(url) + strlen(host) + strlen(GetNetworkRevisionString()) + (data == NULL ? 0 : strlen(data)) + 128; + size_t bufferSize = strlen(url) + strlen(host) + strlen(GetNetworkRevisionString()) + (data == nullptr ? 0 : strlen(data)) + 128; char *buffer = AllocaM(char, bufferSize); DEBUG(net, 7, "[tcp/http] requesting %s%s", host, url); - if (data != NULL) { + if (data != nullptr) { seprintf(buffer, buffer + bufferSize - 1, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\nContent-Type: text/plain\r\nContent-Length: %d\r\n\r\n%s\r\n", url, host, GetNetworkRevisionString(), (int)strlen(data), data); } else { seprintf(buffer, buffer + bufferSize - 1, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\n\r\n", url, host, GetNetworkRevisionString()); @@ -108,7 +108,7 @@ static const char * const LOCATION int NetworkHTTPSocketHandler::HandleHeader() { assert(strlen(HTTP_1_0) == strlen(HTTP_1_1)); - assert(strstr(this->recv_buffer, END_OF_HEADER) != NULL); + assert(strstr(this->recv_buffer, END_OF_HEADER) != nullptr); /* We expect a HTTP/1.[01] reply */ if (strncmp(this->recv_buffer, HTTP_1_0, strlen(HTTP_1_0)) != 0 && @@ -122,7 +122,7 @@ int NetworkHTTPSocketHandler::HandleHead /* Get the length of the document to receive */ char *length = strcasestr(this->recv_buffer, CONTENT_LENGTH); - if (length == NULL) return_error("[tcp/http] missing 'content-length' header"); + if (length == nullptr) return_error("[tcp/http] missing 'content-length' header"); /* Skip the header */ length += strlen(CONTENT_LENGTH); @@ -163,7 +163,7 @@ int NetworkHTTPSocketHandler::HandleHead /* Redirect to other URL */ char *uri = strcasestr(this->recv_buffer, LOCATION); - if (uri == NULL) return_error("[tcp/http] missing 'location' header for redirect"); + if (uri == nullptr) return_error("[tcp/http] missing 'location' header for redirect"); uri += strlen(LOCATION); @@ -178,7 +178,7 @@ int NetworkHTTPSocketHandler::HandleHead if (ret != 0) return ret; /* We've relinquished control of data now. */ - this->data = NULL; + this->data = nullptr; /* Restore the header. */ *end_of_line = '\r'; @@ -195,22 +195,22 @@ int NetworkHTTPSocketHandler::HandleHead /* static */ int NetworkHTTPSocketHandler::Connect(char *uri, HTTPCallback *callback, const char *data, int depth) { char *hname = strstr(uri, "://"); - if (hname == NULL) return_error("[tcp/http] invalid location"); + if (hname == nullptr) return_error("[tcp/http] invalid location"); hname += 3; char *url = strchr(hname, '/'); - if (url == NULL) return_error("[tcp/http] invalid location"); + if (url == nullptr) return_error("[tcp/http] invalid location"); *url = '\0'; /* Fetch the hostname, and possible port number. */ - const char *company = NULL; - const char *port = NULL; + const char *company = nullptr; + const char *port = nullptr; ParseConnectionString(&company, &port, hname); - if (company != NULL) return_error("[tcp/http] invalid hostname"); + if (company != nullptr) return_error("[tcp/http] invalid hostname"); - NetworkAddress address(hname, port == NULL ? 80 : atoi(port)); + NetworkAddress address(hname, port == nullptr ? 80 : atoi(port)); /* Restore the URL. */ *url = '/'; @@ -246,7 +246,7 @@ int NetworkHTTPSocketHandler::Receive() if (res == 0) { if (this->recv_length != 0) return -1; - this->callback->OnReceiveData(NULL, 0); + this->callback->OnReceiveData(nullptr, 0); return 0; } @@ -261,7 +261,7 @@ int NetworkHTTPSocketHandler::Receive() char *end_of_header = strstr(this->recv_buffer, END_OF_HEADER); this->recv_buffer[end] = prev; - if (end_of_header == NULL) { + if (end_of_header == nullptr) { if (read == lengthof(this->recv_buffer)) { DEBUG(net, 0, "[tcp/http] header too big"); return -1; @@ -308,7 +308,7 @@ int NetworkHTTPSocketHandler::Receive() } tv.tv_sec = tv.tv_usec = 0; // don't block at all. - int n = select(FD_SETSIZE, &read_fd, NULL, NULL, &tv); + int n = select(FD_SETSIZE, &read_fd, nullptr, nullptr, &tv); if (n == -1) return; for (auto iter = _http_connections.begin(); iter < _http_connections.end(); /* nothing */) { diff --git a/src/network/core/tcp_http.h b/src/network/core/tcp_http.h --- a/src/network/core/tcp_http.h +++ b/src/network/core/tcp_http.h @@ -26,9 +26,9 @@ struct HTTPCallback { /** * We're receiving data. - * @param data the received data, NULL when all data has been received. + * @param data the received data, nullptr when all data has been received. * @param length the amount of received data, 0 when all data has been received. - * @note When NULL is sent the HTTP socket handler is closed/freed. + * @note When nullptr is sent the HTTP socket handler is closed/freed. */ virtual void OnReceiveData(const char *data, size_t length) = 0; @@ -68,7 +68,7 @@ public: ~NetworkHTTPSocketHandler(); static int Connect(char *uri, HTTPCallback *callback, - const char *data = NULL, int depth = 0); + const char *data = nullptr, int depth = 0); static void HTTPReceive(); }; @@ -91,7 +91,7 @@ public: */ NetworkHTTPContentConnecter(const NetworkAddress &address, HTTPCallback *callback, const char *url, - const char *data = NULL, int depth = 0) : + const char *data = nullptr, int depth = 0) : TCPConnecter(address), callback(callback), url(stredup(url)), @@ -116,7 +116,7 @@ public: { new NetworkHTTPSocketHandler(s, this->callback, this->address.GetHostname(), this->url, this->data, this->depth); /* We've relinquished control of data now. */ - this->data = NULL; + this->data = nullptr; } }; diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -116,7 +116,7 @@ public: } tv.tv_sec = tv.tv_usec = 0; // don't block at all. - if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false; + if (select(FD_SETSIZE, &read_fd, &write_fd, nullptr, &tv) < 0) return false; /* accept clients.. */ for (auto &s : sockets) { diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -24,12 +24,12 @@ */ NetworkUDPSocketHandler::NetworkUDPSocketHandler(NetworkAddressList *bind) { - if (bind != NULL) { + if (bind != nullptr) { for (NetworkAddress &addr : *bind) { this->bind.push_back(addr); } } else { - /* As hostname NULL and port 0/NULL don't go well when + /* As hostname nullptr and port 0/nullptr don't go well when * resolving it we need to add an address for each of * the address families we support. */ this->bind.emplace_back(nullptr, 0, AF_INET); @@ -176,13 +176,13 @@ void NetworkUDPSocketHandler::SendNetwor uint count = 0; /* Count number of GRFs to send information about */ - for (c = info->grfconfig; c != NULL; c = c->next) { + for (c = info->grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC)) count++; } p->Send_uint8 (count); // Send number of GRFs /* Send actual GRF Identifications */ - for (c = info->grfconfig; c != NULL; c = c->next) { + for (c = info->grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC)) this->SendGRFIdentifier(p, &c->ident); } } diff --git a/src/network/core/udp.h b/src/network/core/udp.h --- a/src/network/core/udp.h +++ b/src/network/core/udp.h @@ -229,7 +229,7 @@ protected: */ virtual void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config) { NOT_REACHED(); } public: - NetworkUDPSocketHandler(NetworkAddressList *bind = NULL); + NetworkUDPSocketHandler(NetworkAddressList *bind = nullptr); /** On destructing of this class, the socket needs to be closed */ virtual ~NetworkUDPSocketHandler() { this->Close(); } diff --git a/src/network/network.cpp b/src/network/network.cpp --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -57,7 +57,7 @@ bool _network_available; ///< is networ bool _network_dedicated; ///< are we a dedicated server? bool _is_network_server; ///< Does this client wants to be a network-server? NetworkServerGameInfo _network_game_info; ///< Information about our game. -NetworkCompanyState *_network_company_states = NULL; ///< Statistics about some companies. +NetworkCompanyState *_network_company_states = nullptr; ///< Statistics about some companies. ClientID _network_own_client_id; ///< Our client identifier. ClientID _redirect_console_to_client; ///< If not invalid, redirect the console output to a client. bool _network_need_advertise; ///< Whether we need to advertise. @@ -119,7 +119,7 @@ NetworkClientInfo::~NetworkClientInfo() /** * Return the CI given it's client-identifier * @param client_id the ClientID to search for - * @return return a pointer to the corresponding NetworkClientInfo struct or NULL when not found + * @return return a pointer to the corresponding NetworkClientInfo struct or nullptr when not found */ /* static */ NetworkClientInfo *NetworkClientInfo::GetByClientID(ClientID client_id) { @@ -129,13 +129,13 @@ NetworkClientInfo::~NetworkClientInfo() if (ci->client_id == client_id) return ci; } - return NULL; + return nullptr; } /** * Return the client state given it's client-identifier * @param client_id the ClientID to search for - * @return return a pointer to the corresponding NetworkClientSocket struct or NULL when not found + * @return return a pointer to the corresponding NetworkClientSocket struct or nullptr when not found */ /* static */ ServerNetworkGameSocketHandler *ServerNetworkGameSocketHandler::GetByClientID(ClientID client_id) { @@ -145,7 +145,7 @@ NetworkClientInfo::~NetworkClientInfo() if (cs->client_id == client_id) return cs; } - return NULL; + return nullptr; } byte NetworkSpectatorCount() @@ -378,7 +378,7 @@ void NetworkHandlePauseChange(PauseMode char buffer[DRAW_STRING_BUFFER]; GetString(buffer, str, lastof(buffer)); - NetworkTextMessage(NETWORK_ACTION_SERVER_MESSAGE, CC_DEFAULT, false, NULL, buffer); + NetworkTextMessage(NETWORK_ACTION_SERVER_MESSAGE, CC_DEFAULT, false, nullptr, buffer); break; } @@ -541,7 +541,7 @@ void NetworkClose(bool close_admins) } ServerNetworkGameSocketHandler::CloseListeners(); ServerNetworkAdminSocketHandler::CloseListeners(); - } else if (MyClient::my_client != NULL) { + } else if (MyClient::my_client != nullptr) { MyClient::SendQuit(); MyClient::my_client->CloseConnection(NETWORK_RECV_STATUS_CONN_LOST); } @@ -554,7 +554,7 @@ void NetworkClose(bool close_admins) NetworkFreeLocalCommandQueue(); free(_network_company_states); - _network_company_states = NULL; + _network_company_states = nullptr; InitializeNetworkPools(close_admins); } @@ -608,8 +608,8 @@ void NetworkTCPQueryServer(NetworkAddres void NetworkAddServer(const char *b) { if (*b != '\0') { - const char *port = NULL; - const char *company = NULL; + const char *port = nullptr; + const char *company = nullptr; char host[NETWORK_HOSTNAME_LENGTH]; uint16 rport; @@ -619,7 +619,7 @@ void NetworkAddServer(const char *b) rport = NETWORK_DEFAULT_PORT; ParseConnectionString(&company, &port, host); - if (port != NULL) rport = atoi(port); + if (port != nullptr) rport = atoi(port); NetworkUDPQueryServer(NetworkAddress(host, rport), true); } @@ -649,7 +649,7 @@ void NetworkRebuildHostList() { _network_host_list.clear(); - for (NetworkGameList *item = _network_game_list; item != NULL; item = item->next) { + for (NetworkGameList *item = _network_game_list; item != nullptr; item = item->next) { if (item->manually) _network_host_list.emplace_back(item->address.GetAddressAsString(false)); } } @@ -884,21 +884,21 @@ void NetworkGameLoop() static FILE *f = FioFOpenFile("commands.log", "rb", SAVE_DIR); static Date next_date = 0; static uint32 next_date_fract; - static CommandPacket *cp = NULL; + static CommandPacket *cp = nullptr; static bool check_sync_state = false; static uint32 sync_state[2]; - if (f == NULL && next_date == 0) { + if (f == nullptr && next_date == 0) { DEBUG(net, 0, "Cannot open commands.log"); next_date = 1; } - while (f != NULL && !feof(f)) { + while (f != nullptr && !feof(f)) { if (_date == next_date && _date_fract == next_date_fract) { - if (cp != NULL) { - NetworkSendCommand(cp->tile, cp->p1, cp->p2, cp->cmd & ~CMD_FLAGS_MASK, NULL, cp->text, cp->company); + if (cp != nullptr) { + NetworkSendCommand(cp->tile, cp->p1, cp->p2, cp->cmd & ~CMD_FLAGS_MASK, nullptr, cp->text, cp->company); DEBUG(net, 0, "injecting: %08x; %02x; %02x; %06x; %08x; %08x; %08x; \"%s\" (%s)", _date, _date_fract, (int)_current_company, cp->tile, cp->p1, cp->p2, cp->cmd, cp->text, GetCommandName(cp->cmd)); free(cp); - cp = NULL; + cp = nullptr; } if (check_sync_state) { if (sync_state[0] == _random.state[0] && sync_state[1] == _random.state[1]) { @@ -912,16 +912,16 @@ void NetworkGameLoop() } } - if (cp != NULL || check_sync_state) break; + if (cp != nullptr || check_sync_state) break; char buff[4096]; - if (fgets(buff, lengthof(buff), f) == NULL) break; + if (fgets(buff, lengthof(buff), f) == nullptr) break; char *p = buff; /* Ignore the "[date time] " part of the message */ if (*p == '[') { p = strchr(p, ']'); - if (p == NULL) break; + if (p == nullptr) break; p += 2; } @@ -968,10 +968,10 @@ void NetworkGameLoop() NOT_REACHED(); } } - if (f != NULL && feof(f)) { + if (f != nullptr && feof(f)) { DEBUG(net, 0, "End of commands.log"); fclose(f); - f = NULL; + f = nullptr; } #endif /* DEBUG_DUMP_COMMANDS */ if (_frame_counter >= _frame_counter_max) { diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -234,12 +234,12 @@ NetworkRecvStatus ServerNetworkAdminSock NetworkRecvStatus ServerNetworkAdminSocketHandler::SendClientInfo(const NetworkClientSocket *cs, const NetworkClientInfo *ci) { /* Only send data when we're a proper client, not just someone trying to query the server. */ - if (ci == NULL) return NETWORK_RECV_STATUS_OKAY; + if (ci == nullptr) return NETWORK_RECV_STATUS_OKAY; Packet *p = new Packet(ADMIN_PACKET_SERVER_CLIENT_INFO); p->Send_uint32(ci->client_id); - p->Send_string(cs == NULL ? "" : const_cast(cs->client_address).GetHostname()); + p->Send_string(cs == nullptr ? "" : const_cast(cs->client_address).GetHostname()); p->Send_string(ci->client_name); p->Send_uint8 (ci->client_lang); p->Send_uint32(ci->join_date); @@ -734,16 +734,16 @@ NetworkRecvStatus ServerNetworkAdminSock /* The admin is requesting client info. */ const NetworkClientSocket *cs; if (d1 == UINT32_MAX) { - this->SendClientInfo(NULL, NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER)); + this->SendClientInfo(nullptr, NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER)); FOR_ALL_CLIENT_SOCKETS(cs) { this->SendClientInfo(cs, cs->GetInfo()); } } else { if (d1 == CLIENT_ID_SERVER) { - this->SendClientInfo(NULL, NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER)); + this->SendClientInfo(nullptr, NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER)); } else { cs = NetworkClientSocket::GetByClientID((ClientID)d1); - if (cs != NULL) this->SendClientInfo(cs, cs->GetInfo()); + if (cs != nullptr) this->SendClientInfo(cs, cs->GetInfo()); } } break; @@ -757,7 +757,7 @@ NetworkRecvStatus ServerNetworkAdminSock } } else { company = Company::GetIfValid(d1); - if (company != NULL) this->SendCompanyInfo(company); + if (company != nullptr) this->SendCompanyInfo(company); } break; @@ -884,7 +884,7 @@ void NetworkAdminClientError(ClientID cl */ void NetworkAdminCompanyInfo(const Company *company, bool new_company) { - if (company == NULL) { + if (company == nullptr) { DEBUG(net, 1, "[admin] Empty company given for update"); return; } @@ -906,7 +906,7 @@ void NetworkAdminCompanyInfo(const Compa */ void NetworkAdminCompanyUpdate(const Company *company) { - if (company == NULL) return; + if (company == nullptr) return; ServerNetworkAdminSocketHandler *as; FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { @@ -992,7 +992,7 @@ void NetworkAdminGameScript(const char * */ void NetworkAdminCmdLogging(const NetworkClientSocket *owner, const CommandPacket *cp) { - ClientID client_id = owner == NULL ? _network_own_client_id : owner->client_id; + ClientID client_id = owner == nullptr ? _network_own_client_id : owner->client_id; ServerNetworkAdminSocketHandler *as; FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -46,7 +46,7 @@ struct ChatMessage { }; /* used for chat window */ -static ChatMessage *_chatmsg_list = NULL; ///< The actual chat message list. +static ChatMessage *_chatmsg_list = nullptr; ///< The actual chat message list. static bool _chatmessage_dirty = false; ///< Does the chat message need repainting? static bool _chatmessage_visible = false; ///< Is a chat message visible. static bool _chat_tab_completion_active; ///< Whether tab completion is active. @@ -57,7 +57,7 @@ static uint MAX_CHAT_MESSAGES = 0; * the left and pixels from the bottom. The height is the maximum height. */ static PointDimension _chatmsg_box; -static uint8 *_chatmessage_backup = NULL; ///< Backup in case text is moved. +static uint8 *_chatmessage_backup = nullptr; ///< Backup in case text is moved. /** * Count the chat messages. @@ -360,7 +360,7 @@ struct NetworkChatWindow : public Window } } - return NULL; + return nullptr; } /** @@ -371,7 +371,7 @@ struct NetworkChatWindow : public Window static char *ChatTabCompletionFindText(char *buf) { char *p = strrchr(buf, ' '); - if (p == NULL) return buf; + if (p == nullptr) return buf; *p = '\0'; return p + 1; @@ -400,7 +400,7 @@ struct NetworkChatWindow : public Window tb_buf = ChatTabCompletionFindText(pre_buf); tb_len = strlen(tb_buf); - while ((cur_name = ChatTabCompletionNextItem(&item)) != NULL) { + while ((cur_name = ChatTabCompletionNextItem(&item)) != nullptr) { item++; if (_chat_tab_completion_active) { @@ -543,7 +543,7 @@ static const NWidgetPart _nested_chat_wi /** The description of the chat window. */ static WindowDesc _chat_window_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_SEND_NETWORK_MSG, WC_NONE, 0, _nested_chat_window_widgets, lengthof(_nested_chat_window_widgets) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -50,7 +50,7 @@ struct PacketReader : LoadFilter { size_t read_bytes; ///< The total number of read bytes. /** Initialise everything. */ - PacketReader() : LoadFilter(NULL), buf(NULL), bufe(NULL), block(NULL), written_bytes(0), read_bytes(0) + PacketReader() : LoadFilter(nullptr), buf(nullptr), bufe(nullptr), block(nullptr), written_bytes(0), read_bytes(0) { } @@ -143,9 +143,9 @@ void ClientNetworkEmergencySave() * Create a new socket for the client side of the game connection. * @param s The socket to connect with. */ -ClientNetworkGameSocketHandler::ClientNetworkGameSocketHandler(SOCKET s) : NetworkGameSocketHandler(s), savegame(NULL), status(STATUS_INACTIVE) +ClientNetworkGameSocketHandler::ClientNetworkGameSocketHandler(SOCKET s) : NetworkGameSocketHandler(s), savegame(nullptr), status(STATUS_INACTIVE) { - assert(ClientNetworkGameSocketHandler::my_client == NULL); + assert(ClientNetworkGameSocketHandler::my_client == nullptr); ClientNetworkGameSocketHandler::my_client = this; } @@ -153,7 +153,7 @@ ClientNetworkGameSocketHandler::ClientNe ClientNetworkGameSocketHandler::~ClientNetworkGameSocketHandler() { assert(ClientNetworkGameSocketHandler::my_client == this); - ClientNetworkGameSocketHandler::my_client = NULL; + ClientNetworkGameSocketHandler::my_client = nullptr; delete this->savegame; } @@ -301,7 +301,7 @@ void ClientNetworkGameSocketHandler::Cli /** Our client's connection. */ -ClientNetworkGameSocketHandler * ClientNetworkGameSocketHandler::my_client = NULL; +ClientNetworkGameSocketHandler * ClientNetworkGameSocketHandler::my_client = nullptr; /** Last frame we performed an ack. */ static uint32 last_ack_frame; @@ -320,9 +320,9 @@ static uint8 _network_server_max_spectat CompanyID _network_join_as; /** Login password from -p argument */ -const char *_network_join_server_password = NULL; +const char *_network_join_server_password = nullptr; /** Company password from -P argument */ -const char *_network_join_company_password = NULL; +const char *_network_join_company_password = nullptr; /** Make sure the server ID length is the same as a md5 hash. */ assert_compile(NETWORK_SERVER_ID_LENGTH == 16 * 2 + 1); @@ -533,7 +533,7 @@ NetworkRecvStatus ClientNetworkGameSocke */ bool ClientNetworkGameSocketHandler::IsConnected() { - return my_client != NULL && my_client->status == STATUS_ACTIVE; + return my_client != nullptr && my_client->status == STATUS_ACTIVE; } @@ -542,7 +542,7 @@ bool ClientNetworkGameSocketHandler::IsC * DEF_CLIENT_RECEIVE_COMMAND has parameter: Packet *p ************/ -extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL); +extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr); NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *p) { @@ -576,7 +576,7 @@ NetworkRecvStatus ClientNetworkGameSocke if (current >= MAX_COMPANIES) return NETWORK_RECV_STATUS_CLOSE_QUERY; NetworkCompanyInfo *company_info = GetLobbyCompanyInfo(current); - if (company_info == NULL) return NETWORK_RECV_STATUS_CLOSE_QUERY; + if (company_info == nullptr) return NETWORK_RECV_STATUS_CLOSE_QUERY; p->Recv_string(company_info->company_name, sizeof(company_info->company_name)); company_info->inaugurated_year = p->Recv_uint32(); @@ -619,7 +619,7 @@ NetworkRecvStatus ClientNetworkGameSocke if (this->HasClientQuit()) return NETWORK_RECV_STATUS_CONN_LOST; ci = NetworkClientInfo::GetByClientID(client_id); - if (ci != NULL) { + if (ci != nullptr) { if (playas == ci->client_playas && strcmp(name, ci->client_name) != 0) { /* Client name changed, display the change */ NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, false, ci->client_name, name); @@ -714,7 +714,7 @@ NetworkRecvStatus ClientNetworkGameSocke /* Check whether we know this GRF */ const GRFConfig *f = FindGRFConfig(c.grfid, FGCM_EXACT, c.md5sum); - if (f == NULL) { + if (f == nullptr) { /* We do not know this GRF, bail out of initialization */ char buf[sizeof(c.md5sum) * 2 + 1]; md5sumToString(buf, lastof(buf), c.md5sum); @@ -800,7 +800,7 @@ NetworkRecvStatus ClientNetworkGameSocke if (this->status < STATUS_AUTHORIZED || this->status >= STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET; this->status = STATUS_MAP; - if (this->savegame != NULL) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->savegame != nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET; this->savegame = new PacketReader(); @@ -818,7 +818,7 @@ NetworkRecvStatus ClientNetworkGameSocke NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_SIZE(Packet *p) { if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - if (this->savegame == NULL) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->savegame == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET; _network_join_bytes_total = p->Recv_uint32(); SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); @@ -829,7 +829,7 @@ NetworkRecvStatus ClientNetworkGameSocke NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DATA(Packet *p) { if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - if (this->savegame == NULL) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->savegame == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET; /* We are still receiving data, put it to the file */ this->savegame->AddPacket(p); @@ -843,7 +843,7 @@ NetworkRecvStatus ClientNetworkGameSocke NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet *p) { if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - if (this->savegame == NULL) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->savegame == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET; _network_join_status = NETWORK_JOIN_STATUS_PROCESSING; SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); @@ -856,12 +856,12 @@ NetworkRecvStatus ClientNetworkGameSocke * game, which would cause us to free this->savegame twice. */ LoadFilter *lf = this->savegame; - this->savegame = NULL; + this->savegame = nullptr; lf->Reset(); /* The map is done downloading, load it */ ClearErrorMessages(); - bool load_success = SafeLoad(NULL, SLO_LOAD, DFT_GAME_FILE, GM_NORMAL, NO_DIRECTORY, lf); + bool load_success = SafeLoad(nullptr, SLO_LOAD, DFT_GAME_FILE, GM_NORMAL, NO_DIRECTORY, lf); /* Long savegame loads shouldn't affect the lag calculation! */ this->last_packet = _realtime_tick; @@ -887,7 +887,7 @@ NetworkRecvStatus ClientNetworkGameSocke * the server will give us a client-id and let us in */ _network_join_status = NETWORK_JOIN_STATUS_REGISTERING; ShowJoinStatusWindow(); - NetworkSendCommand(0, CCA_NEW, 0, CMD_COMPANY_CTRL, NULL, NULL, _local_company); + NetworkSendCommand(0, CCA_NEW, 0, CMD_COMPANY_CTRL, nullptr, nullptr, _local_company); } } else { /* take control over an existing company */ @@ -952,7 +952,7 @@ NetworkRecvStatus ClientNetworkGameSocke cp.frame = p->Recv_uint32(); cp.my_cmd = p->Recv_bool(); - if (err != NULL) { + if (err != nullptr) { IConsolePrintF(CC_ERROR, "WARNING: %s from server, dropping...", err); return NETWORK_RECV_STATUS_MALFORMED_PACKET; } @@ -967,7 +967,7 @@ NetworkRecvStatus ClientNetworkGameSocke if (this->status != STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET; char name[NETWORK_NAME_LENGTH], msg[NETWORK_CHAT_LENGTH]; - const NetworkClientInfo *ci = NULL, *ci_to; + const NetworkClientInfo *ci = nullptr, *ci_to; NetworkAction action = (NetworkAction)p->Recv_uint8(); ClientID client_id = (ClientID)p->Recv_uint32(); @@ -976,7 +976,7 @@ NetworkRecvStatus ClientNetworkGameSocke int64 data = p->Recv_uint64(); ci_to = NetworkClientInfo::GetByClientID(client_id); - if (ci_to == NULL) return NETWORK_RECV_STATUS_OKAY; + if (ci_to == nullptr) return NETWORK_RECV_STATUS_OKAY; /* Did we initiate the action locally? */ if (self_send) { @@ -1009,7 +1009,7 @@ NetworkRecvStatus ClientNetworkGameSocke ci = ci_to; } - if (ci != NULL) { + if (ci != nullptr) { NetworkTextMessage(action, GetDrawStringCompanyColour(ci->client_playas), self_send, name, msg, data); } return NETWORK_RECV_STATUS_OKAY; @@ -1022,8 +1022,8 @@ NetworkRecvStatus ClientNetworkGameSocke ClientID client_id = (ClientID)p->Recv_uint32(); NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); - if (ci != NULL) { - NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, NULL, GetNetworkErrorMsg((NetworkErrorCode)p->Recv_uint8())); + if (ci != nullptr) { + NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, nullptr, GetNetworkErrorMsg((NetworkErrorCode)p->Recv_uint8())); delete ci; } @@ -1039,8 +1039,8 @@ NetworkRecvStatus ClientNetworkGameSocke ClientID client_id = (ClientID)p->Recv_uint32(); NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); - if (ci != NULL) { - NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, NULL, STR_NETWORK_MESSAGE_CLIENT_LEAVING); + if (ci != nullptr) { + NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, nullptr, STR_NETWORK_MESSAGE_CLIENT_LEAVING); delete ci; } else { DEBUG(net, 0, "Unknown client (%d) is leaving the game", client_id); @@ -1059,7 +1059,7 @@ NetworkRecvStatus ClientNetworkGameSocke ClientID client_id = (ClientID)p->Recv_uint32(); NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); - if (ci != NULL) { + if (ci != nullptr) { NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, ci->client_name); } @@ -1129,7 +1129,7 @@ NetworkRecvStatus ClientNetworkGameSocke const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); /* Just make sure we do not try to use a client_index that does not exist */ - if (ci == NULL) return NETWORK_RECV_STATUS_OKAY; + if (ci == nullptr) return NETWORK_RECV_STATUS_OKAY; /* if not valid player, force spectator, else check player exists */ if (!Company::IsValidID(company_id)) company_id = COMPANY_SPECTATOR; @@ -1253,7 +1253,7 @@ void NetworkUpdateClientName() { NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(_network_own_client_id); - if (ci == NULL) return; + if (ci == nullptr) return; /* Don't change the name if it is the same as the old name */ if (strcmp(ci->client_name, _settings_client.network.client_name) != 0) { diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp --- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -21,7 +21,7 @@ /** Table with all the callbacks we'll use for conversion*/ static CommandCallback * const _callback_table[] = { - /* 0x00 */ NULL, + /* 0x00 */ nullptr, /* 0x01 */ CcBuildPrimaryVehicle, /* 0x02 */ CcBuildAirport, /* 0x03 */ CcBuildBridge, @@ -60,8 +60,8 @@ void CommandQueue::Append(CommandPacket { CommandPacket *add = MallocT(1); *add = *p; - add->next = NULL; - if (this->first == NULL) { + add->next = nullptr; + if (this->first == nullptr) { this->first = add; } else { this->last->next = add; @@ -79,15 +79,15 @@ CommandPacket *CommandQueue::Pop(bool ig { CommandPacket **prev = &this->first; CommandPacket *ret = this->first; - CommandPacket *prev_item = NULL; + CommandPacket *prev_item = nullptr; if (ignore_paused && _pause_mode != PM_UNPAUSED) { - while (ret != NULL && !IsCommandAllowedWhilePaused(ret->cmd)) { + while (ret != nullptr && !IsCommandAllowedWhilePaused(ret->cmd)) { prev_item = ret; prev = &ret->next; ret = ret->next; } } - if (ret != NULL) { + if (ret != nullptr) { if (ret == this->last) this->last = prev_item; *prev = ret->next; this->count--; @@ -104,17 +104,17 @@ CommandPacket *CommandQueue::Peek(bool i { if (!ignore_paused || _pause_mode == PM_UNPAUSED) return this->first; - for (CommandPacket *p = this->first; p != NULL; p = p->next) { + for (CommandPacket *p = this->first; p != nullptr; p = p->next) { if (IsCommandAllowedWhilePaused(p->cmd)) return p; } - return NULL; + return nullptr; } /** Free everything that is in the queue. */ void CommandQueue::Free() { CommandPacket *cp; - while ((cp = this->Pop()) != NULL) { + while ((cp = this->Pop()) != nullptr) { free(cp); } assert(this->count == 0); @@ -147,7 +147,7 @@ void NetworkSendCommand(TileIndex tile, c.cmd = cmd; c.callback = callback; - strecpy(c.text, (text != NULL) ? text : "", lastof(c.text)); + strecpy(c.text, (text != nullptr) ? text : "", lastof(c.text)); if (_network_server) { /* If we are the server, we queue the command in our 'special' queue. @@ -180,7 +180,7 @@ void NetworkSendCommand(TileIndex tile, */ void NetworkSyncCommandQueue(NetworkClientSocket *cs) { - for (CommandPacket *p = _local_execution_queue.Peek(); p != NULL; p = p->next) { + for (CommandPacket *p = _local_execution_queue.Peek(); p != nullptr; p = p->next) { CommandPacket c = *p; c.callback = 0; cs->outgoing_queue.Append(&c); @@ -197,7 +197,7 @@ void NetworkExecuteLocalCommandQueue() CommandQueue &queue = (_network_server ? _local_execution_queue : ClientNetworkGameSocketHandler::my_client->incoming_queue); CommandPacket *cp; - while ((cp = queue.Peek()) != NULL) { + while ((cp = queue.Peek()) != nullptr) { /* The queue is always in order, which means * that the first element will be executed first. */ if (_frame_counter < cp->frame) break; @@ -245,13 +245,13 @@ static void DistributeCommandPacket(Comm if (cs->status >= NetworkClientSocket::STATUS_MAP) { /* Callbacks are only send back to the client who sent them in the * first place. This filters that out. */ - cp.callback = (cs != owner) ? NULL : callback; + cp.callback = (cs != owner) ? nullptr : callback; cp.my_cmd = (cs == owner); cs->outgoing_queue.Append(&cp); } } - cp.callback = (cs != owner) ? NULL : callback; + cp.callback = (cs != owner) ? nullptr : callback; cp.my_cmd = (cs == owner); _local_execution_queue.Append(&cp); } @@ -271,7 +271,7 @@ static void DistributeQueue(CommandQueue #endif CommandPacket *cp; - while (--to_go >= 0 && (cp = queue->Pop(true)) != NULL) { + while (--to_go >= 0 && (cp = queue->Pop(true)) != nullptr) { DistributeCommandPacket(*cp, owner); NetworkAdminCmdLogging(owner, cp); free(cp); @@ -282,7 +282,7 @@ static void DistributeQueue(CommandQueue void NetworkDistributeCommands() { /* First send the server's commands. */ - DistributeQueue(&_local_wait_queue, NULL); + DistributeQueue(&_local_wait_queue, nullptr); /* Then send the queues of the others. */ NetworkClientSocket *cs; @@ -295,7 +295,7 @@ void NetworkDistributeCommands() * Receives a command from the network. * @param p the packet to read from. * @param cp the struct to write the data to. - * @return an error message. When NULL there has been no error. + * @return an error message. When nullptr there has been no error. */ const char *NetworkGameSocketHandler::ReceiveCommand(Packet *p, CommandPacket *cp) { @@ -314,7 +314,7 @@ const char *NetworkGameSocketHandler::Re if (callback >= lengthof(_callback_table)) return "invalid callback"; cp->callback = _callback_table[callback]; - return NULL; + return nullptr; } /** @@ -338,7 +338,7 @@ void NetworkGameSocketHandler::SendComma if (callback == lengthof(_callback_table)) { DEBUG(net, 0, "Unknown callback. (Pointer: %p) No callback sent", cp->callback); - callback = 0; // _callback_table[0] == NULL + callback = 0; // _callback_table[0] == nullptr } p->Send_uint8 (callback); } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -35,7 +35,7 @@ ClientNetworkContentSocketHandler _netwo /** Wrapper function for the HasProc */ static bool HasGRFConfig(const ContentInfo *ci, bool md5sum) { - return FindGRFConfig(BSWAP32(ci->unique_id), md5sum ? FGCM_EXACT : FGCM_ANY, md5sum ? ci->md5sum : NULL) != NULL; + return FindGRFConfig(BSWAP32(ci->unique_id), md5sum ? FGCM_EXACT : FGCM_ANY, md5sum ? ci->md5sum : nullptr) != nullptr; } /** @@ -79,7 +79,7 @@ bool ClientNetworkContentSocketHandler:: } /* Find the appropriate check function */ - HasProc proc = NULL; + HasProc proc = nullptr; switch (ci->type) { case CONTENT_TYPE_NEWGRF: proc = HasGRFConfig; @@ -122,7 +122,7 @@ bool ClientNetworkContentSocketHandler:: break; } - if (proc != NULL) { + if (proc != nullptr) { if (proc(ci, true)) { ci->state = ContentInfo::ALREADY_HERE; } else { @@ -241,7 +241,7 @@ void ClientNetworkContentSocketHandler:: */ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bool send_md5sum) { - if (cv == NULL) return; + if (cv == nullptr) return; this->Connect(); @@ -374,12 +374,12 @@ void ClientNetworkContentSocketHandler:: * @param ci the information to get the filename from * @param compressed should the filename end with .gz? * @return a statically allocated buffer with the filename or - * NULL when no filename could be made. + * nullptr when no filename could be made. */ static char *GetFullFilename(const ContentInfo *ci, bool compressed) { Subdirectory dir = GetContentInfoSubDir(ci->type); - if (dir == NO_DIRECTORY) return NULL; + if (dir == NO_DIRECTORY) return nullptr; static char buf[MAX_PATH]; FioGetFullPath(buf, lastof(buf), SP_AUTODOWNLOAD_DIR, dir, ci->filename); @@ -400,14 +400,14 @@ static bool GunzipFile(const ContentInfo /* Need to open the file with fopen() to support non-ASCII on Windows. */ FILE *ftmp = fopen(GetFullFilename(ci, true), "rb"); - if (ftmp == NULL) return false; + if (ftmp == nullptr) return false; /* Duplicate the handle, and close the FILE*, to avoid double-closing the handle later. */ gzFile fin = gzdopen(dup(fileno(ftmp)), "rb"); fclose(ftmp); FILE *fout = fopen(GetFullFilename(ci, false), "wb"); - if (fin == NULL || fout == NULL) { + if (fin == nullptr || fout == nullptr) { ret = false; } else { byte buff[8192]; @@ -441,8 +441,8 @@ static bool GunzipFile(const ContentInfo } } - if (fin != NULL) gzclose(fin); - if (fout != NULL) fclose(fout); + if (fin != nullptr) gzclose(fin); + if (fout != nullptr) fclose(fout); return ret; #else @@ -452,7 +452,7 @@ static bool GunzipFile(const ContentInfo bool ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT(Packet *p) { - if (this->curFile == NULL) { + if (this->curFile == nullptr) { delete this->curInfo; /* When we haven't opened a file this must be our first packet with metadata. */ this->curInfo = new ContentInfo; @@ -473,7 +473,7 @@ bool ClientNetworkContentSocketHandler:: ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR); this->Close(); fclose(this->curFile); - this->curFile = NULL; + this->curFile = nullptr; return false; } @@ -494,14 +494,14 @@ bool ClientNetworkContentSocketHandler:: { if (!this->curInfo->IsValid()) { delete this->curInfo; - this->curInfo = NULL; + this->curInfo = nullptr; return false; } if (this->curInfo->filesize != 0) { /* The filesize is > 0, so we are going to download it */ const char *filename = GetFullFilename(this->curInfo, true); - if (filename == NULL || (this->curFile = fopen(filename, "wb")) == NULL) { + if (filename == nullptr || (this->curFile = fopen(filename, "wb")) == nullptr) { /* Unless that fails of course... */ DeleteWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD); ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR); @@ -520,7 +520,7 @@ void ClientNetworkContentSocketHandler:: /* We read nothing; that's our marker for end-of-stream. * Now gunzip the tar and make it known. */ fclose(this->curFile); - this->curFile = NULL; + this->curFile = nullptr; if (GunzipFile(this->curInfo)) { unlink(GetFullFilename(this->curInfo, true)); @@ -554,25 +554,25 @@ void ClientNetworkContentSocketHandler:: this->http_response.shrink_to_fit(); this->http_response_index = -2; - if (this->curFile != NULL) { + if (this->curFile != nullptr) { /* Revert the download progress when we are going for the old system. */ long size = ftell(this->curFile); if (size > 0) this->OnDownloadProgress(this->curInfo, (int)-size); fclose(this->curFile); - this->curFile = NULL; + this->curFile = nullptr; } } void ClientNetworkContentSocketHandler::OnReceiveData(const char *data, size_t length) { - assert(data == NULL || length != 0); + assert(data == nullptr || length != 0); /* Ignore any latent data coming from a connection we closed. */ if (this->http_response_index == -2) return; if (this->http_response_index == -1) { - if (data != NULL) { + if (data != nullptr) { /* Append the rest of the response. */ memcpy(grow(this->http_response, (uint)length), data, length); return; @@ -585,7 +585,7 @@ void ClientNetworkContentSocketHandler:: } } - if (data != NULL) { + if (data != nullptr) { /* We have data, so write it to the file. */ if (fwrite(data, 1, length, this->curFile) != length) { /* Writing failed somehow, let try via the old method. */ @@ -598,7 +598,7 @@ void ClientNetworkContentSocketHandler:: return; } - if (this->curFile != NULL) { + if (this->curFile != nullptr) { /* We've finished downloading a file. */ this->AfterDownload(); } @@ -616,7 +616,7 @@ void ClientNetworkContentSocketHandler:: this->curInfo = new ContentInfo; /** Check p for not being null and return calling OnFailure if that's not the case. */ -#define check_not_null(p) { if ((p) == NULL) { this->OnFailure(); return; } } +#define check_not_null(p) { if ((p) == nullptr) { this->OnFailure(); return; } } /** Check p for not being null and then terminate, or return calling OnFailure. */ #define check_and_terminate(p) { check_not_null(p); *(p) = '\0'; } @@ -695,8 +695,8 @@ void ClientNetworkContentSocketHandler:: ClientNetworkContentSocketHandler::ClientNetworkContentSocketHandler() : NetworkContentSocketHandler(), http_response_index(-2), - curFile(NULL), - curInfo(NULL), + curFile(nullptr), + curInfo(nullptr), isConnecting(false), lastActivity(_realtime_tick) { @@ -706,7 +706,7 @@ ClientNetworkContentSocketHandler::Clien ClientNetworkContentSocketHandler::~ClientNetworkContentSocketHandler() { delete this->curInfo; - if (this->curFile != NULL) fclose(this->curFile); + if (this->curFile != nullptr) fclose(this->curFile); for (ContentInfo *ci : this->infos) delete ci; } @@ -798,14 +798,14 @@ void ClientNetworkContentSocketHandler:: /** * Get the content info based on a ContentID * @param cid the ContentID to search for - * @return the ContentInfo or NULL if not found + * @return the ContentInfo or nullptr if not found */ ContentInfo *ClientNetworkContentSocketHandler::GetContent(ContentID cid) { for (ContentInfo *ci : this->infos) { if (ci->id == cid) return ci; } - return NULL; + return nullptr; } @@ -816,7 +816,7 @@ ContentInfo *ClientNetworkContentSocketH void ClientNetworkContentSocketHandler::Select(ContentID cid) { ContentInfo *ci = this->GetContent(cid); - if (ci == NULL || ci->state != ContentInfo::UNSELECTED) return; + if (ci == nullptr || ci->state != ContentInfo::UNSELECTED) return; ci->state = ContentInfo::SELECTED; this->CheckDependencyState(ci); @@ -829,7 +829,7 @@ void ClientNetworkContentSocketHandler:: void ClientNetworkContentSocketHandler::Unselect(ContentID cid) { ContentInfo *ci = this->GetContent(cid); - if (ci == NULL || !ci->IsSelected()) return; + if (ci == nullptr || !ci->IsSelected()) return; ci->state = ContentInfo::UNSELECTED; this->CheckDependencyState(ci); @@ -937,7 +937,7 @@ void ClientNetworkContentSocketHandler:: * selected and thus can unselect when a dependency is removed. */ for (uint i = 0; i < ci->dependency_count; i++) { ContentInfo *c = this->GetContent(ci->dependencies[i]); - if (c == NULL) { + if (c == nullptr) { this->DownloadContentInfo(ci->dependencies[i]); } else if (c->state == ContentInfo::UNSELECTED) { c->state = ContentInfo::AUTOSELECTED; @@ -963,7 +963,7 @@ void ClientNetworkContentSocketHandler:: for (uint i = 0; i < ci->dependency_count; i++) { const ContentInfo *c = this->GetContent(ci->dependencies[i]); - if (c == NULL) { + if (c == nullptr) { DownloadContentInfo(ci->dependencies[i]); continue; } @@ -1068,7 +1068,7 @@ void ClientNetworkContentSocketHandler:: void ClientNetworkContentSocketHandler::OnDownloadComplete(ContentID cid) { ContentInfo *ci = this->GetContent(cid); - if (ci != NULL) { + if (ci != nullptr) { ci->state = ContentInfo::ALREADY_HERE; } diff --git a/src/network/network_content.h b/src/network/network_content.h --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -147,7 +147,7 @@ public: extern ClientNetworkContentSocketHandler _network_content_client; -void ShowNetworkContentListWindow(ContentVector *cv = NULL, ContentType type1 = CONTENT_TYPE_END, ContentType type2 = CONTENT_TYPE_END); +void ShowNetworkContentListWindow(ContentVector *cv = nullptr, ContentType type1 = CONTENT_TYPE_END, ContentType type2 = CONTENT_TYPE_END); void ShowMissingContentWindow(const struct GRFConfig *list); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -95,7 +95,7 @@ static const NWidgetPart _nested_network /** Window description for the download window */ static WindowDesc _network_content_download_status_window_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, _nested_network_content_download_status_window_widgets, lengthof(_nested_network_content_download_status_window_widgets) @@ -238,7 +238,7 @@ public: break; case CONTENT_TYPE_NEWGRF: - ScanNewGRFFiles(NULL); + ScanNewGRFFiles(nullptr); break; case CONTENT_TYPE_SCENARIO: @@ -480,7 +480,7 @@ class NetworkContentListWindow : public } /* previously selected item not in list anymore */ - this->selected = NULL; + this->selected = nullptr; this->list_pos = 0; } @@ -501,7 +501,7 @@ class NetworkContentListWindow : public /** Make sure that the currently selected content info is within the visible part of the matrix */ void ScrollToSelected() { - if (this->selected == NULL) return; + if (this->selected == nullptr) return; this->vscroll->ScrollTowards(this->list_pos); } @@ -521,7 +521,7 @@ public: Window(desc), auto_select(select_all), filter_editbox(EDITBOX_MAX_SIZE), - selected(NULL), + selected(nullptr), list_pos(0) { this->checkbox_size = maxdim(maxdim(GetSpriteSize(SPR_BOX_EMPTY), GetSpriteSize(SPR_BOX_CHECKED)), GetSpriteSize(SPR_BLOT)); @@ -685,7 +685,7 @@ public: SetDParam(0, this->filesize_sum); DrawString(r.left + DETAIL_LEFT, r.right - DETAIL_RIGHT, r.bottom - FONT_HEIGHT_NORMAL - WD_PAR_VSEP_NORMAL, STR_CONTENT_TOTAL_DOWNLOAD_SIZE); - if (this->selected == NULL) return; + if (this->selected == nullptr) return; /* And fill the rest of the details when there's information to place there */ DrawStringMultiLine(r.left + WD_INSET_LEFT, r.right - WD_INSET_RIGHT, r.top + DETAIL_TITLE_HEIGHT / 2, r.top + DETAIL_TITLE_HEIGHT, STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED + this->selected->state, TC_FROMSTRING, SA_CENTER); @@ -779,7 +779,7 @@ public: void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_NCL_TEXTFILE && widget < WID_NCL_TEXTFILE + TFT_END) { - if (this->selected == NULL || this->selected->state != ContentInfo::ALREADY_HERE) return; + if (this->selected == nullptr || this->selected->state != ContentInfo::ALREADY_HERE) return; ShowContentTextfileWindow((TextfileType)(widget - WID_NCL_TEXTFILE), this->selected); return; @@ -842,14 +842,14 @@ public: break; case WID_NCL_OPEN_URL: - if (this->selected != NULL) { + if (this->selected != nullptr) { extern void OpenBrowser(const char *url); OpenBrowser(this->selected->url); } break; case WID_NCL_DOWNLOAD: - if (BringWindowToFrontById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD) == NULL) new NetworkContentDownloadStatusWindow(); + if (BringWindowToFrontById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD) == nullptr) new NetworkContentDownloadStatusWindow(); break; case WID_NCL_SEARCH_EXTERNAL: @@ -893,7 +893,7 @@ public: case WKC_SPACE: case WKC_RETURN: if (keycode == WKC_RETURN || !IsWidgetFocused(WID_NCL_FILTER)) { - if (this->selected != NULL) { + if (this->selected != nullptr) { _network_content_client.ToggleSelectedState(this->selected); this->content.ForceResort(); this->InvalidateData(); @@ -1005,13 +1005,13 @@ public: } /* If data == 2 then the status window caused this OnInvalidate */ - this->SetWidgetDisabledState(WID_NCL_DOWNLOAD, this->filesize_sum == 0 || (FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD) != NULL && data != 2)); + this->SetWidgetDisabledState(WID_NCL_DOWNLOAD, this->filesize_sum == 0 || (FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD) != nullptr && data != 2)); this->SetWidgetDisabledState(WID_NCL_UNSELECT, this->filesize_sum == 0); this->SetWidgetDisabledState(WID_NCL_SELECT_ALL, !show_select_all); this->SetWidgetDisabledState(WID_NCL_SELECT_UPDATE, !show_select_upgrade); - this->SetWidgetDisabledState(WID_NCL_OPEN_URL, this->selected == NULL || StrEmpty(this->selected->url)); + this->SetWidgetDisabledState(WID_NCL_OPEN_URL, this->selected == nullptr || StrEmpty(this->selected->url)); for (TextfileType tft = TFT_BEGIN; tft < TFT_END; tft++) { - this->SetWidgetDisabledState(WID_NCL_TEXTFILE + tft, this->selected == NULL || this->selected->state != ContentInfo::ALREADY_HERE || this->selected->GetTextfile(tft) == NULL); + this->SetWidgetDisabledState(WID_NCL_TEXTFILE + tft, this->selected == nullptr || this->selected->state != ContentInfo::ALREADY_HERE || this->selected->GetTextfile(tft) == nullptr); } this->GetWidget(WID_NCL_CANCEL)->widget_data = this->filesize_sum == 0 ? STR_AI_SETTINGS_CLOSE : STR_AI_LIST_CANCEL; @@ -1131,7 +1131,7 @@ static WindowDesc _network_content_list_ /** * Show the content list window with a given set of content - * @param cv the content to show, or NULL when it has to search for itself + * @param cv the content to show, or nullptr when it has to search for itself * @param type1 the first type to (only) show or #CONTENT_TYPE_END to show all. * @param type2 the second type to (only) show in addition to type1. If type2 is != #CONTENT_TYPE_END, then also type1 should be != #CONTENT_TYPE_END. * If type2 != #CONTENT_TYPE_END, then type1 != type2 must be true. @@ -1141,7 +1141,7 @@ void ShowNetworkContentListWindow(Conten #if defined(WITH_ZLIB) std::bitset types; _network_content_client.Clear(); - if (cv == NULL) { + if (cv == nullptr) { assert(type1 != CONTENT_TYPE_END || type2 == CONTENT_TYPE_END); assert(type1 == CONTENT_TYPE_END || type1 != type2); _network_content_client.RequestContentList(type1); @@ -1154,11 +1154,11 @@ void ShowNetworkContentListWindow(Conten } DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_CONTENT_LIST); - new NetworkContentListWindow(&_network_content_list_desc, cv != NULL, types); + new NetworkContentListWindow(&_network_content_list_desc, cv != nullptr, types); #else ShowErrorMessage(STR_CONTENT_NO_ZLIB, STR_CONTENT_NO_ZLIB_SUB, WL_ERROR); /* Connection failed... clean up the mess */ - if (cv != NULL) { + if (cv != nullptr) { for (ContentInfo *ci : *cv) delete ci; } #endif /* WITH_ZLIB */ diff --git a/src/network/network_func.h b/src/network/network_func.h --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -51,7 +51,7 @@ void NetworkPopulateCompanyStats(Network void NetworkUpdateClientInfo(ClientID client_id); void NetworkClientsToSpectators(CompanyID cid); -void NetworkClientConnectGame(NetworkAddress address, CompanyID join_as, const char *join_server_password = NULL, const char *join_company_password = NULL); +void NetworkClientConnectGame(NetworkAddress address, CompanyID join_as, const char *join_server_password = nullptr, const char *join_company_password = nullptr); void NetworkClientRequestMove(CompanyID company, const char *pass = ""); void NetworkClientSendRcon(const char *password, const char *command); void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const char *msg, int64 data = 0); diff --git a/src/network/network_gamelist.cpp b/src/network/network_gamelist.cpp --- a/src/network/network_gamelist.cpp +++ b/src/network/network_gamelist.cpp @@ -22,10 +22,10 @@ #include "../safeguards.h" -NetworkGameList *_network_game_list = NULL; +NetworkGameList *_network_game_list = nullptr; /** The games to insert when the GUI thread has time for us. */ -static std::atomic _network_game_delayed_insertion_list(NULL); +static std::atomic _network_game_delayed_insertion_list(nullptr); /** * Add a new item to the linked gamelist, but do it delayed in the next tick @@ -43,12 +43,12 @@ static void NetworkGameListHandleDelayed { while (true) { NetworkGameList *ins_item = _network_game_delayed_insertion_list.load(std::memory_order_relaxed); - while (ins_item != NULL && !_network_game_delayed_insertion_list.compare_exchange_weak(ins_item, ins_item->next, std::memory_order_acq_rel)) {} - if (ins_item == NULL) break; // No item left. + while (ins_item != nullptr && !_network_game_delayed_insertion_list.compare_exchange_weak(ins_item, ins_item->next, std::memory_order_acq_rel)) {} + if (ins_item == nullptr) break; // No item left. NetworkGameList *item = NetworkGameListAddItem(ins_item->address); - if (item != NULL) { + if (item != nullptr) { if (StrEmpty(item->info.server_name)) { ClearGRFConfigList(&item->info.grfconfig); memset(&item->info, 0, sizeof(item->info)); @@ -78,22 +78,22 @@ NetworkGameList *NetworkGameListAddItem( if (StrEmpty(hostname) || strcmp(hostname, "0.0.0.0") == 0 || strcmp(hostname, "::") == 0) { - return NULL; + return nullptr; } NetworkGameList *item, *prev_item; - prev_item = NULL; - for (item = _network_game_list; item != NULL; item = item->next) { + prev_item = nullptr; + for (item = _network_game_list; item != nullptr; item = item->next) { if (item->address == address) return item; prev_item = item; } item = CallocT(1); - item->next = NULL; + item->next = nullptr; item->address = address; - if (prev_item == NULL) { + if (prev_item == nullptr) { _network_game_list = item; } else { prev_item->next = item; @@ -111,10 +111,10 @@ NetworkGameList *NetworkGameListAddItem( */ void NetworkGameListRemoveItem(NetworkGameList *remove) { - NetworkGameList *prev_item = NULL; - for (NetworkGameList *item = _network_game_list; item != NULL; item = item->next) { + NetworkGameList *prev_item = nullptr; + for (NetworkGameList *item = _network_game_list; item != nullptr; item = item->next) { if (remove == item) { - if (prev_item == NULL) { + if (prev_item == nullptr) { _network_game_list = remove->next; } else { prev_item->next = remove->next; @@ -123,7 +123,7 @@ void NetworkGameListRemoveItem(NetworkGa /* Remove GRFConfig information */ ClearGRFConfigList(&remove->info.grfconfig); free(remove); - remove = NULL; + remove = nullptr; DEBUG(net, 4, "[gamelist] removed server from list"); NetworkRebuildHostList(); @@ -148,7 +148,7 @@ void NetworkGameListRequery() if (++requery_cnt < REQUERY_EVERY_X_GAMELOOPS) return; requery_cnt = 0; - for (NetworkGameList *item = _network_game_list; item != NULL; item = item->next) { + for (NetworkGameList *item = _network_game_list; item != nullptr; item = item->next) { item->retries++; if (item->retries < REFRESH_GAMEINFO_X_REQUERIES && (item->online || item->retries >= MAX_GAME_LIST_REQUERY_COUNT)) continue; @@ -165,15 +165,15 @@ void NetworkGameListRequery() */ void NetworkAfterNewGRFScan() { - for (NetworkGameList *item = _network_game_list; item != NULL; item = item->next) { + for (NetworkGameList *item = _network_game_list; item != nullptr; item = item->next) { /* Reset compatibility state */ item->info.compatible = item->info.version_compatible; - for (GRFConfig *c = item->info.grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = item->info.grfconfig; c != nullptr; c = c->next) { assert(HasBit(c->flags, GCF_COPY)); const GRFConfig *f = FindGRFConfig(c->ident.grfid, FGCM_EXACT, c->ident.md5sum); - if (f == NULL) { + if (f == nullptr) { /* Don't know the GRF, so mark game incompatible and the (possibly) * already resolved name for this GRF (another server has sent the * name of the GRF already. */ diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -129,13 +129,13 @@ public: this->resize_y = 0; // We never resize in this direction /* First initialise some variables... */ - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->SetupSmallestSize(w, init_array); this->smallest_y = max(this->smallest_y, child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom); } /* ... then in a second pass make sure the 'current' sizes are set. Won't change for most widgets. */ - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->current_x = child_wid->smallest_x; child_wid->current_y = this->smallest_y; } @@ -172,7 +172,7 @@ public: uint position = 0; // Place to put next child relative to origin of the container. uint i = rtl ? lengthof(this->visible) - 1 : 0; child_wid = rtl ? this->tail : this->head; - while (child_wid != NULL) { + while (child_wid != nullptr) { if (this->visible[i]) { child_wid->AssignSizePosition(sizing, x + position, y, child_wid->current_x, this->current_y, rtl); position += child_wid->current_x; @@ -186,7 +186,7 @@ public: void Draw(const Window *w) override { int i = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { if (!this->visible[i++]) continue; child_wid->Draw(w); @@ -195,15 +195,15 @@ public: NWidgetCore *GetWidgetFromPos(int x, int y) override { - if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; int i = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { if (!this->visible[i++]) continue; NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y); - if (nwid != NULL) return nwid; + if (nwid != nullptr) return nwid; } - return NULL; + return nullptr; } /** @@ -252,7 +252,7 @@ protected: /* Create temporary array of games to use for listing */ this->servers.clear(); - for (NetworkGameList *ngl = _network_game_list; ngl != NULL; ngl = ngl->next) { + for (NetworkGameList *ngl = _network_game_list; ngl != nullptr; ngl = ngl->next) { this->servers.push_back(ngl); } @@ -364,8 +364,8 @@ protected: static bool CDECL NGameSearchFilter(NetworkGameList * const *item, StringFilter &sf) { - assert(item != NULL); - assert((*item) != NULL); + assert(item != nullptr); + assert((*item) != nullptr); sf.ResetState(); sf.AddLine((*item)->info.server_name); @@ -460,7 +460,7 @@ public: NetworkGameWindow(WindowDesc *desc) : Window(desc), name_editbox(NETWORK_CLIENT_NAME_LENGTH), filter_editbox(120) { this->list_pos = SLP_INVALID; - this->server = NULL; + this->server = nullptr; this->lock_offset = 5; this->blot_offset = this->lock_offset + 3 + GetSpriteSize(SPR_LOCK).width; @@ -479,7 +479,7 @@ public: this->last_joined = NetworkGameListAddItem(NetworkAddress(_settings_client.network.last_host, _settings_client.network.last_port)); this->server = this->last_joined; - if (this->last_joined != NULL) NetworkUDPQueryServer(this->last_joined->address); + if (this->last_joined != nullptr) NetworkUDPQueryServer(this->last_joined->address); this->requery_timer.SetInterval(MILLISECONDS_PER_TICK); @@ -576,7 +576,7 @@ public: case WID_NG_LASTJOINED: /* Draw the last joined server, if any */ - if (this->last_joined != NULL) this->DrawServerLine(this->last_joined, r.top, this->last_joined == this->server); + if (this->last_joined != nullptr) this->DrawServerLine(this->last_joined, r.top, this->last_joined == this->server); break; case WID_NG_DETAILS: @@ -606,16 +606,16 @@ public: NetworkGameList *sel = this->server; /* 'Refresh' button invisible if no server selected */ - this->SetWidgetDisabledState(WID_NG_REFRESH, sel == NULL); + this->SetWidgetDisabledState(WID_NG_REFRESH, sel == nullptr); /* 'Join' button disabling conditions */ - this->SetWidgetDisabledState(WID_NG_JOIN, sel == NULL || // no Selected Server + this->SetWidgetDisabledState(WID_NG_JOIN, sel == nullptr || // no Selected Server !sel->online || // Server offline sel->info.clients_on >= sel->info.clients_max || // Server full !sel->info.compatible); // Revision mismatch /* 'NewGRF Settings' button invisible if no NewGRF is used */ - this->GetWidget(WID_NG_NEWGRF_SEL)->SetDisplayedPlane(sel == NULL || !sel->online || sel->info.grfconfig == NULL); - this->GetWidget(WID_NG_NEWGRF_MISSING_SEL)->SetDisplayedPlane(sel == NULL || !sel->online || sel->info.grfconfig == NULL || !sel->info.version_compatible || sel->info.compatible); + this->GetWidget(WID_NG_NEWGRF_SEL)->SetDisplayedPlane(sel == nullptr || !sel->online || sel->info.grfconfig == nullptr); + this->GetWidget(WID_NG_NEWGRF_MISSING_SEL)->SetDisplayedPlane(sel == nullptr || !sel->online || sel->info.grfconfig == nullptr || !sel->info.version_compatible || sel->info.compatible); this->DrawWidgets(); } @@ -628,7 +628,7 @@ public: /* Draw the right menu */ GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.top + detail_height - 1, PC_DARK_BLUE); - if (sel == NULL) { + if (sel == nullptr) { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + 6 + 4 + FONT_HEIGHT_NORMAL, STR_NETWORK_SERVER_LIST_GAME_INFO, TC_FROMSTRING, SA_HOR_CENTER); } else if (!sel->online) { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + 6 + 4 + FONT_HEIGHT_NORMAL, sel->info.server_name, TC_ORANGE, SA_HOR_CENTER); // game name @@ -722,8 +722,8 @@ public: case WID_NG_MATRIX: { // Show available network games uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NG_MATRIX); - this->server = (id_v < this->servers.size()) ? this->servers[id_v] : NULL; - this->list_pos = (server == NULL) ? SLP_INVALID : id_v; + this->server = (id_v < this->servers.size()) ? this->servers[id_v] : nullptr; + this->list_pos = (server == nullptr) ? SLP_INVALID : id_v; this->SetDirty(); /* FIXME the disabling should go into some InvalidateData, which is called instead of the SetDirty */ @@ -732,7 +732,7 @@ public: } case WID_NG_LASTJOINED: { - if (this->last_joined != NULL) { + if (this->last_joined != nullptr) { this->server = this->last_joined; /* search the position of the newly selected server */ @@ -767,7 +767,7 @@ public: break; case WID_NG_JOIN: // Join Game - if (this->server != NULL) { + if (this->server != nullptr) { seprintf(_settings_client.network.last_host, lastof(_settings_client.network.last_host), "%s", this->server->address.GetHostname()); _settings_client.network.last_port = this->server->address.GetPort(); ShowNetworkLobbyWindow(this->server); @@ -775,15 +775,15 @@ public: break; case WID_NG_REFRESH: // Refresh - if (this->server != NULL) NetworkUDPQueryServer(this->server->address); + if (this->server != nullptr) NetworkUDPQueryServer(this->server->address); break; case WID_NG_NEWGRF: // NewGRF Settings - if (this->server != NULL) ShowNewGRFSettings(false, false, false, &this->server->info.grfconfig); + if (this->server != nullptr) ShowNewGRFSettings(false, false, false, &this->server->info.grfconfig); break; case WID_NG_NEWGRF_MISSING: // Find missing content online - if (this->server != NULL) ShowMissingContentWindow(this->server->info.grfconfig); + if (this->server != nullptr) ShowMissingContentWindow(this->server->info.grfconfig); break; } } @@ -862,11 +862,11 @@ public: return ES_HANDLED; } - if (this->server != NULL) { + if (this->server != nullptr) { if (keycode == WKC_DELETE) { // Press 'delete' to remove servers NetworkGameListRemoveItem(this->server); - if (this->server == this->last_joined) this->last_joined = NULL; - this->server = NULL; + if (this->server == this->last_joined) this->last_joined = nullptr; + this->server = nullptr; this->list_pos = SLP_INVALID; } } @@ -1244,7 +1244,7 @@ struct NetworkStartServerWindow : public void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; if (this->widget_id == WID_NSS_SETPWD) { strecpy(_settings_client.network.server_password, str, lastof(_settings_client.network.server_password)); @@ -1344,7 +1344,7 @@ static const NWidgetPart _nested_network }; static WindowDesc _network_start_server_window_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_NETWORK_WINDOW, WC_NONE, 0, _nested_network_start_server_window_widgets, lengthof(_nested_network_start_server_window_widgets) @@ -1631,7 +1631,7 @@ static const NWidgetPart _nested_network }; static WindowDesc _network_lobby_window_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_NETWORK_WINDOW, WC_NONE, 0, _nested_network_lobby_window_widgets, lengthof(_nested_network_lobby_window_widgets) @@ -1660,7 +1660,7 @@ static void ShowNetworkLobbyWindow(Netwo NetworkCompanyInfo *GetLobbyCompanyInfo(CompanyID company) { NetworkLobbyWindow *lobby = dynamic_cast(FindWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY)); - return (lobby != NULL && company < MAX_COMPANIES) ? &lobby->company_info[company] : NULL; + return (lobby != nullptr && company < MAX_COMPANIES) ? &lobby->company_info[company] : nullptr; } /* The window below gives information about the connected clients @@ -1680,7 +1680,7 @@ static const NWidgetPart _nested_client_ }; static WindowDesc _client_list_popup_desc( - WDP_AUTO, NULL, 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_CLIENT_LIST_POPUP, WC_CLIENT_LIST, 0, _nested_client_list_popup_widgets, lengthof(_nested_client_list_popup_widgets) @@ -1825,7 +1825,7 @@ struct NetworkClientListPopupWindow : Wi } else { if (index < this->actions.size() && _cursor.pos.y >= this->top) { const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(this->client_id); - if (ci != NULL) this->actions[index].proc(ci); + if (ci != nullptr) this->actions[index].proc(ci); } DeleteWindowByClass(WC_CLIENT_LIST_POPUP); @@ -1840,7 +1840,7 @@ static void PopupClientList(ClientID cli { DeleteWindowByClass(WC_CLIENT_LIST_POPUP); - if (NetworkClientInfo::GetByClientID(client_id) == NULL) return; + if (NetworkClientInfo::GetByClientID(client_id) == nullptr) return; new NetworkClientListPopupWindow(&_client_list_popup_desc, x, y, client_id); } @@ -1986,7 +1986,7 @@ struct NetworkClientListWindow : Window client_no--; } - if (ci != NULL) PopupClientList(ci->client_id, pt.x + this->left, pt.y + this->top); + if (ci != nullptr) PopupClientList(ci->client_id, pt.x + this->left, pt.y + this->top); } } @@ -2133,7 +2133,7 @@ static const NWidgetPart _nested_network }; static WindowDesc _network_join_status_window_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_NETWORK_STATUS_WINDOW, WC_NONE, WDF_MODAL, _nested_network_join_status_window_widgets, lengthof(_nested_network_join_status_window_widgets) @@ -2148,7 +2148,7 @@ void ShowJoinStatusWindow() void ShowNetworkNeedPassword(NetworkPasswordType npt) { NetworkJoinStatusWindow *w = (NetworkJoinStatusWindow *)FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); - if (w == NULL) return; + if (w == nullptr) return; w->password_type = npt; StringID caption; @@ -2227,7 +2227,7 @@ static const NWidgetPart _nested_network }; static WindowDesc _network_company_password_window_desc( - WDP_AUTO, NULL, 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_COMPANY_PASSWORD_WINDOW, WC_NONE, 0, _nested_network_company_password_window_widgets, lengthof(_nested_network_company_password_window_widgets) diff --git a/src/network/network_internal.h b/src/network/network_internal.h --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -149,8 +149,8 @@ bool IsNetworkCompatibleVersion(const ch * Everything we need to know about a command to be able to execute it. */ struct CommandPacket : CommandContainer { - /** Make sure the pointer is NULL. */ - CommandPacket() : next(NULL), company(INVALID_COMPANY), frame(0), my_cmd(false) {} + /** Make sure the pointer is nullptr. */ + CommandPacket() : next(nullptr), company(INVALID_COMPANY), frame(0), my_cmd(false) {} CommandPacket *next; ///< the next command packet (if in queue) CompanyID company; ///< company that is executing the command uint32 frame; ///< the frame in which this packet is executed diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -67,7 +67,7 @@ struct PacketWriter : SaveFilter { * Create the packet writer. * @param cs The socket handler we're making the packets for. */ - PacketWriter(ServerNetworkGameSocketHandler *cs) : SaveFilter(NULL), cs(cs), current(NULL), total_size(0), packets(NULL) + PacketWriter(ServerNetworkGameSocketHandler *cs) : SaveFilter(nullptr), cs(cs), current(nullptr), total_size(0), packets(nullptr) { } @@ -76,11 +76,11 @@ struct PacketWriter : SaveFilter { { std::unique_lock lock(this->mutex); - if (this->cs != NULL) this->exit_sig.wait(lock); + if (this->cs != nullptr) this->exit_sig.wait(lock); /* This must all wait until the Destroy function is called. */ - while (this->packets != NULL) { + while (this->packets != nullptr) { Packet *p = this->packets->next; delete this->packets; this->packets = p; @@ -93,7 +93,7 @@ struct PacketWriter : SaveFilter { * Begin the destruction of this packet writer. It can happen in two ways: * in the first case the client disconnected while saving the map. In this * case the saving has not finished and killed this PacketWriter. In that - * case we simply set cs to NULL, triggering the appending to fail due to + * case we simply set cs to nullptr, triggering the appending to fail due to * the connection problem and eventually triggering the destructor. In the * second case the destructor is already called, and it is waiting for our * signal which we will send. Only then the packets will be removed by the @@ -103,7 +103,7 @@ struct PacketWriter : SaveFilter { { std::unique_lock lock(this->mutex); - this->cs = NULL; + this->cs = nullptr; this->exit_sig.notify_all(); lock.unlock(); @@ -124,7 +124,7 @@ struct PacketWriter : SaveFilter { */ bool HasPackets() { - return this->packets != NULL; + return this->packets != nullptr; } /** @@ -136,7 +136,7 @@ struct PacketWriter : SaveFilter { Packet *p = this->packets; this->packets = p->next; - p->next = NULL; + p->next = nullptr; return p; } @@ -144,23 +144,23 @@ struct PacketWriter : SaveFilter { /** Append the current packet to the queue. */ void AppendQueue() { - if (this->current == NULL) return; + if (this->current == nullptr) return; Packet **p = &this->packets; - while (*p != NULL) { + while (*p != nullptr) { p = &(*p)->next; } *p = this->current; - this->current = NULL; + this->current = nullptr; } void Write(byte *buf, size_t size) override { /* We want to abort the saving when the socket is closed. */ - if (this->cs == NULL) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); + if (this->cs == nullptr) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); - if (this->current == NULL) this->current = new Packet(PACKET_SERVER_MAP_DATA); + if (this->current == nullptr) this->current = new Packet(PACKET_SERVER_MAP_DATA); std::lock_guard lock(this->mutex); @@ -183,7 +183,7 @@ struct PacketWriter : SaveFilter { void Finish() override { /* We want to abort the saving when the socket is closed. */ - if (this->cs == NULL) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); + if (this->cs == nullptr) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); std::lock_guard lock(this->mutex); @@ -226,9 +226,9 @@ ServerNetworkGameSocketHandler::~ServerN if (_redirect_console_to_client == this->client_id) _redirect_console_to_client = INVALID_CLIENT_ID; OrderBackup::ResetUser(this->client_id); - if (this->savegame != NULL) { + if (this->savegame != nullptr) { this->savegame->Destroy(); - this->savegame = NULL; + this->savegame = nullptr; } } @@ -236,12 +236,12 @@ Packet *ServerNetworkGameSocketHandler:: { /* Only allow receiving when we have some buffer free; this value * can go negative, but eventually it will become positive again. */ - if (this->receive_limit <= 0) return NULL; + if (this->receive_limit <= 0) return nullptr; /* We can receive a packet, so try that and if needed account for * the amount of received data. */ Packet *p = this->NetworkTCPSocketHandler::ReceivePacket(); - if (p != NULL) this->receive_limit -= p->size; + if (p != nullptr) this->receive_limit -= p->size; return p; } @@ -264,7 +264,7 @@ NetworkRecvStatus ServerNetworkGameSocke this->GetClientName(client_name, lastof(client_name)); - NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, NULL, STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST); + NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST); /* Inform other clients of this... strange leaving ;) */ FOR_ALL_CLIENT_SOCKETS(new_cs) { @@ -361,7 +361,7 @@ NetworkRecvStatus ServerNetworkGameSocke /* Add the local player (if not dedicated) */ const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); - if (ci != NULL && Company::IsValidID(ci->client_playas)) { + if (ci != nullptr && Company::IsValidID(ci->client_playas)) { strecpy(clients[ci->client_playas], ci->client_name, lastof(clients[ci->client_playas])); } @@ -371,7 +371,7 @@ NetworkRecvStatus ServerNetworkGameSocke ((ServerNetworkGameSocketHandler*)csi)->GetClientName(client_name, lastof(client_name)); ci = csi->GetInfo(); - if (ci != NULL && Company::IsValidID(ci->client_playas)) { + if (ci != nullptr && Company::IsValidID(ci->client_playas)) { if (!StrEmpty(clients[ci->client_playas])) { strecat(clients[ci->client_playas], ", ", lastof(clients[ci->client_playas])); } @@ -434,7 +434,7 @@ NetworkRecvStatus ServerNetworkGameSocke DEBUG(net, 1, "'%s' made an error and has been disconnected. Reason: '%s'", client_name, str); - NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, NULL, strid); + NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, strid); FOR_ALL_CLIENT_SOCKETS(new_cs) { if (new_cs->status > STATUS_AUTHORIZED && new_cs != this) { @@ -463,12 +463,12 @@ NetworkRecvStatus ServerNetworkGameSocke const GRFConfig *c; uint grf_count = 0; - for (c = _grfconfig; c != NULL; c = c->next) { + for (c = _grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC)) grf_count++; } p->Send_uint8 (grf_count); - for (c = _grfconfig; c != NULL; c = c->next) { + for (c = _grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC)) this->SendGRFIdentifier(p, &c->ident); } @@ -607,7 +607,7 @@ NetworkRecvStatus ServerNetworkGameSocke if (last_packet) { /* Done reading, make sure saving is done as well */ this->savegame->Destroy(); - this->savegame = NULL; + this->savegame = nullptr; /* Set the status to DONE_MAP, no we will wait for the client * to send it is ready (maybe that happens like never ;)) */ @@ -615,17 +615,17 @@ NetworkRecvStatus ServerNetworkGameSocke /* Find the best candidate for joining, i.e. the first joiner. */ NetworkClientSocket *new_cs; - NetworkClientSocket *best = NULL; + NetworkClientSocket *best = nullptr; FOR_ALL_CLIENT_SOCKETS(new_cs) { if (new_cs->status == STATUS_MAP_WAIT) { - if (best == NULL || best->GetInfo()->join_date > new_cs->GetInfo()->join_date || (best->GetInfo()->join_date == new_cs->GetInfo()->join_date && best->client_id > new_cs->client_id)) { + if (best == nullptr || best->GetInfo()->join_date > new_cs->GetInfo()->join_date || (best->GetInfo()->join_date == new_cs->GetInfo()->join_date && best->client_id > new_cs->client_id)) { best = new_cs; } } } /* Is there someone else to join? */ - if (best != NULL) { + if (best != nullptr) { /* Let the first start joining. */ best->status = STATUS_AUTHORIZED; best->SendMap(); @@ -946,9 +946,9 @@ NetworkRecvStatus ServerNetworkGameSocke this->status = STATUS_NEWGRFS_CHECK; - if (_grfconfig == NULL) { + if (_grfconfig == nullptr) { /* Behave as if we received PACKET_CLIENT_NEWGRFS_CHECKED */ - return this->Receive_CLIENT_NEWGRFS_CHECKED(NULL); + return this->Receive_CLIENT_NEWGRFS_CHECKED(nullptr); } return this->SendNewGRFCheck(); @@ -1032,7 +1032,7 @@ NetworkRecvStatus ServerNetworkGameSocke this->GetClientName(client_name, lastof(client_name)); - NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, NULL, this->client_id); + NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, nullptr, this->client_id); /* Mark the client as pre-active, and wait for an ACK * so we know he is done loading and in sync with us */ @@ -1089,7 +1089,7 @@ NetworkRecvStatus ServerNetworkGameSocke NetworkClientInfo *ci = this->GetInfo(); - if (err != NULL) { + if (err != nullptr) { IConsolePrintF(CC_ERROR, "WARNING: %s from client %d (IP: %s).", err, ci->client_id, this->GetClientIP()); return this->SendError(NETWORK_ERROR_NOT_EXPECTED); } @@ -1155,7 +1155,7 @@ NetworkRecvStatus ServerNetworkGameSocke DEBUG(net, 2, "'%s' reported an error and is closing its connection (%s)", client_name, str); - NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, NULL, strid); + NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, strid); FOR_ALL_CLIENT_SOCKETS(new_cs) { if (new_cs->status > STATUS_AUTHORIZED) { @@ -1182,7 +1182,7 @@ NetworkRecvStatus ServerNetworkGameSocke this->GetClientName(client_name, lastof(client_name)); - NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, NULL, STR_NETWORK_MESSAGE_CLIENT_LEAVING); + NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, STR_NETWORK_MESSAGE_CLIENT_LEAVING); FOR_ALL_CLIENT_SOCKETS(new_cs) { if (new_cs->status > STATUS_AUTHORIZED && new_cs != this) { @@ -1262,7 +1262,7 @@ void NetworkServerSendChat(NetworkAction if ((ClientID)dest == CLIENT_ID_SERVER) { ci = NetworkClientInfo::GetByClientID(from_id); /* Display the text locally, and that is it */ - if (ci != NULL) { + if (ci != nullptr) { NetworkTextMessage(action, GetDrawStringCompanyColour(ci->client_playas), false, ci->client_name, msg, data); if (_settings_client.network.server_admin_chat) { @@ -1284,7 +1284,7 @@ void NetworkServerSendChat(NetworkAction if (from_id == CLIENT_ID_SERVER) { ci = NetworkClientInfo::GetByClientID(from_id); ci_to = NetworkClientInfo::GetByClientID((ClientID)dest); - if (ci != NULL && ci_to != NULL) { + if (ci != nullptr && ci_to != nullptr) { NetworkTextMessage(action, GetDrawStringCompanyColour(ci->client_playas), true, ci_to->client_name, msg, data); } } else { @@ -1301,10 +1301,10 @@ void NetworkServerSendChat(NetworkAction /* If this is false, the message is already displayed on the client who sent it. */ bool show_local = true; /* Find all clients that belong to this company */ - ci_to = NULL; + ci_to = nullptr; FOR_ALL_CLIENT_SOCKETS(cs) { ci = cs->GetInfo(); - if (ci != NULL && ci->client_playas == (CompanyID)dest) { + if (ci != nullptr && ci->client_playas == (CompanyID)dest) { cs->SendChat(action, from_id, false, msg, data); if (cs->client_id == from_id) show_local = false; ci_to = ci; // Remember a client that is in the company for company-name @@ -1318,17 +1318,17 @@ void NetworkServerSendChat(NetworkAction ci = NetworkClientInfo::GetByClientID(from_id); ci_own = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); - if (ci != NULL && ci_own != NULL && ci_own->client_playas == dest) { + if (ci != nullptr && ci_own != nullptr && ci_own->client_playas == dest) { NetworkTextMessage(action, GetDrawStringCompanyColour(ci->client_playas), false, ci->client_name, msg, data); if (from_id == CLIENT_ID_SERVER) show_local = false; ci_to = ci_own; } /* There is no such client */ - if (ci_to == NULL) break; + if (ci_to == nullptr) break; /* Display the message locally (so you know you have sent it) */ - if (ci != NULL && show_local) { + if (ci != nullptr && show_local) { if (from_id == CLIENT_ID_SERVER) { char name[NETWORK_NAME_LENGTH]; StringID str = Company::IsValidID(ci_to->client_playas) ? STR_COMPANY_NAME : STR_NETWORK_SPECTATORS; @@ -1357,7 +1357,7 @@ void NetworkServerSendChat(NetworkAction NetworkAdminChat(action, desttype, from_id, msg, data, from_admin); ci = NetworkClientInfo::GetByClientID(from_id); - if (ci != NULL) { + if (ci != nullptr) { NetworkTextMessage(action, GetDrawStringCompanyColour(ci->client_playas), false, ci->client_name, msg, data); } break; @@ -1428,7 +1428,7 @@ NetworkRecvStatus ServerNetworkGameSocke if (this->HasClientQuit()) return NETWORK_RECV_STATUS_CONN_LOST; - if (ci != NULL) { + if (ci != nullptr) { /* Display change */ if (NetworkFindName(client_name, lastof(client_name))) { NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, false, ci->client_name, client_name); @@ -1591,7 +1591,7 @@ void NetworkUpdateClientInfo(ClientID cl NetworkClientSocket *cs; NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); - if (ci == NULL) return; + if (ci == nullptr) return; DEBUG(desync, 1, "client: %08x; %02x; %02x; %04x", _date, _date_fract, (int)ci->client_playas, client_id); @@ -1712,7 +1712,7 @@ bool NetworkFindName(char *new_name, con } /* Check if it is the same as the server-name */ ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); - if (ci != NULL) { + if (ci != nullptr) { if (strcmp(ci->client_name, new_name) == 0) found_name = false; // name already in use } @@ -1743,7 +1743,7 @@ bool NetworkServerChangeClientName(Clien } ci = NetworkClientInfo::GetByClientID(client_id); - if (ci == NULL) return false; + if (ci == nullptr) return false; NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, true, ci->client_name, new_name); @@ -1778,7 +1778,7 @@ void NetworkServerSetCompanyPassword(Com static void NetworkHandleCommandQueue(NetworkClientSocket *cs) { CommandPacket *cp; - while ((cp = cs->outgoing_queue.Pop()) != NULL) { + while ((cp = cs->outgoing_queue.Pop()) != nullptr) { cs->SendCommand(cp); free(cp); } @@ -1964,7 +1964,7 @@ void NetworkServerShowStatusToConsole() NetworkClientSocket *cs; FOR_ALL_CLIENT_SOCKETS(cs) { NetworkClientInfo *ci = cs->GetInfo(); - if (ci == NULL) continue; + if (ci == nullptr) continue; uint lag = NetworkCalculateLag(cs); const char *status; @@ -2131,7 +2131,7 @@ void ServerNetworkGameSocketHandler::Get { const NetworkClientInfo *ci = this->GetInfo(); - if (ci == NULL || StrEmpty(ci->client_name)) { + if (ci == nullptr || StrEmpty(ci->client_name)) { seprintf(client_name, last, "Client #%4d", this->client_id); } else { strecpy(client_name, ci->client_name, last); @@ -2162,12 +2162,12 @@ void NetworkPrintClients() /** * Perform all the server specific administration of a new company. - * @param c The newly created company; can't be NULL. - * @param ci The client information of the client that made the company; can be NULL. + * @param c The newly created company; can't be nullptr. + * @param ci The client information of the client that made the company; can be nullptr. */ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci) { - assert(c != NULL); + assert(c != nullptr); if (!_network_server) return; @@ -2175,18 +2175,18 @@ void NetworkServerNewCompany(const Compa _network_company_states[c->index].password[0] = '\0'; NetworkServerUpdateCompanyPassworded(c->index, false); - if (ci != NULL) { - /* ci is NULL when replaying, or for AIs. In neither case there is a client. */ + if (ci != nullptr) { + /* ci is nullptr when replaying, or for AIs. In neither case there is a client. */ ci->client_playas = c->index; NetworkUpdateClientInfo(ci->client_id); - NetworkSendCommand(0, 0, 0, CMD_RENAME_PRESIDENT, NULL, ci->client_name, c->index); + NetworkSendCommand(0, 0, 0, CMD_RENAME_PRESIDENT, nullptr, ci->client_name, c->index); } /* Announce new company on network. */ NetworkAdminCompanyInfo(c, true); - if (ci != NULL) { - /* ci is NULL when replaying, or for AIs. In neither case there is a client. + if (ci != nullptr) { + /* ci is nullptr when replaying, or for AIs. In neither case there is a client. We need to send Admin port update here so that they first know about the new company and then learn about a possibly joining client (see FS#6025) */ NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, c->index + 1); diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -45,9 +45,9 @@ static const uint32 ADVERTISE_NORMAL_INT static const uint32 ADVERTISE_RETRY_INTERVAL = 10 * 1000; ///< re-advertise when no response after this many ms (10 seconds) static const uint32 ADVERTISE_RETRY_TIMES = 3; ///< give up re-advertising after this much failed retries -NetworkUDPSocketHandler *_udp_client_socket = NULL; ///< udp client socket -NetworkUDPSocketHandler *_udp_server_socket = NULL; ///< udp server socket -NetworkUDPSocketHandler *_udp_master_socket = NULL; ///< udp master socket +NetworkUDPSocketHandler *_udp_client_socket = nullptr; ///< udp client socket +NetworkUDPSocketHandler *_udp_server_socket = nullptr; ///< udp server socket +NetworkUDPSocketHandler *_udp_master_socket = nullptr; ///< udp master socket /** * Helper function doing the actual work for querying the server. @@ -69,7 +69,7 @@ static void DoNetworkUDPQueryServer(Netw if (needs_mutex) lock.lock(); /* Init the packet */ Packet p(PACKET_UDP_CLIENT_FIND_SERVER); - if (_udp_client_socket != NULL) _udp_client_socket->SendPacket(&p, &address); + if (_udp_client_socket != nullptr) _udp_client_socket->SendPacket(&p, &address); } /** @@ -79,7 +79,7 @@ static void DoNetworkUDPQueryServer(Netw */ void NetworkUDPQueryServer(NetworkAddress address, bool manually) { - if (address.IsResolved() || !StartNewThread(NULL, "ottd:udp-query", &DoNetworkUDPQueryServer, std::move(address), true, std::move(manually))) { + if (address.IsResolved() || !StartNewThread(nullptr, "ottd:udp-query", &DoNetworkUDPQueryServer, std::move(address), true, std::move(manually))) { DoNetworkUDPQueryServer(address, true, manually); } } @@ -261,7 +261,7 @@ void ServerNetworkUDPSocketHandler::Rece /* Find the matching GRF file */ f = FindGRFConfig(c.grfid, FGCM_EXACT, c.md5sum); - if (f == NULL) continue; // The GRF is unknown to this server + if (f == nullptr) continue; // The GRF is unknown to this server /* If the reply might exceed the size of the packet, only reply * the current list and do not send the other data. @@ -332,7 +332,7 @@ void ClientNetworkUDPSocketHandler::Rece const GRFConfig *c; uint in_request_count = 0; - for (c = item->info.grfconfig; c != NULL; c = c->next) { + for (c = item->info.grfconfig; c != nullptr; c = c->next) { if (c->status == GCS_NOT_FOUND) item->info.compatible = false; if (c->status != GCS_NOT_FOUND || strcmp(c->GetName(), UNKNOWN_GRF_NAME_PLACEHOLDER) != 0) continue; in_request[in_request_count] = c; @@ -431,7 +431,7 @@ void ClientNetworkUDPSocketHandler::Rece * If it exists and not resolved yet, then name of the fake GRF is * overwritten with the name from the reply. */ GRFTextWrapper *unknown_name = FindUnknownGRFName(c.grfid, c.md5sum, false); - if (unknown_name != NULL && strcmp(GetGRFStringFromGRFText(unknown_name->text), UNKNOWN_GRF_NAME_PLACEHOLDER) == 0) { + if (unknown_name != nullptr && strcmp(GetGRFStringFromGRFText(unknown_name->text), UNKNOWN_GRF_NAME_PLACEHOLDER) == 0) { AddGRFTextToList(&unknown_name->text, name); } } @@ -441,7 +441,7 @@ void ClientNetworkUDPSocketHandler::Hand { /* Find the matching GRF file */ const GRFConfig *f = FindGRFConfig(config->ident.grfid, FGCM_EXACT, config->ident.md5sum); - if (f == NULL) { + if (f == nullptr) { /* Don't know the GRF, so mark game incompatible and the (possibly) * already resolved name for this GRF (another server has sent the * name of the GRF already */ @@ -521,7 +521,7 @@ static void NetworkUDPRemoveAdvertiseThr p.Send_uint16(_settings_client.network.server_port); std::lock_guard lock(_network_udp_mutex); - if (_udp_master_socket != NULL) _udp_master_socket->SendPacket(&p, &out_addr, true); + if (_udp_master_socket != nullptr) _udp_master_socket->SendPacket(&p, &out_addr, true); } /** @@ -533,7 +533,7 @@ void NetworkUDPRemoveAdvertise(bool bloc /* Check if we are advertising */ if (!_networking || !_network_server || !_network_udp_server) return; - if (blocking || !StartNewThread(NULL, "ottd:udp-advert", &NetworkUDPRemoveAdvertiseThread)) { + if (blocking || !StartNewThread(nullptr, "ottd:udp-advert", &NetworkUDPRemoveAdvertiseThread)) { NetworkUDPRemoveAdvertiseThread(); } } @@ -573,7 +573,7 @@ static void NetworkUDPAdvertiseThread() p.Send_uint64(_session_key); std::lock_guard lock(_network_udp_mutex); - if (_udp_master_socket != NULL) _udp_master_socket->SendPacket(&p, &out_addr, true); + if (_udp_master_socket != nullptr) _udp_master_socket->SendPacket(&p, &out_addr, true); } /** @@ -614,7 +614,7 @@ void NetworkUDPAdvertise() if (_next_advertisement < _last_advertisement) _next_advertisement = UINT32_MAX; if (_next_retry < _last_advertisement) _next_retry = UINT32_MAX; - if (!StartNewThread(NULL, "ottd:udp-advert", &NetworkUDPAdvertiseThread)) { + if (!StartNewThread(nullptr, "ottd:udp-advert", &NetworkUDPAdvertiseThread)) { NetworkUDPAdvertiseThread(); } } @@ -623,10 +623,10 @@ void NetworkUDPAdvertise() void NetworkUDPInitialize() { /* If not closed, then do it. */ - if (_udp_server_socket != NULL) NetworkUDPClose(); + if (_udp_server_socket != nullptr) NetworkUDPClose(); DEBUG(net, 1, "[udp] initializing listeners"); - assert(_udp_client_socket == NULL && _udp_server_socket == NULL && _udp_master_socket == NULL); + assert(_udp_client_socket == nullptr && _udp_server_socket == nullptr && _udp_master_socket == nullptr); std::lock_guard lock(_network_udp_mutex); @@ -654,9 +654,9 @@ void NetworkUDPClose() delete _udp_client_socket; delete _udp_server_socket; delete _udp_master_socket; - _udp_client_socket = NULL; - _udp_server_socket = NULL; - _udp_master_socket = NULL; + _udp_client_socket = nullptr; + _udp_server_socket = nullptr; + _udp_master_socket = nullptr; _network_udp_server = false; _network_udp_broadcast = 0; diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -394,7 +394,7 @@ static GRFFile *GetFileByGRFID(uint32 gr for (GRFFile * const file : _grf_files) { if (file->grfid == grfid) return file; } - return NULL; + return nullptr; } /** @@ -407,31 +407,31 @@ static GRFFile *GetFileByFilename(const for (GRFFile * const file : _grf_files) { if (strcmp(file->filename, filename) == 0) return file; } - return NULL; + return nullptr; } /** Reset all NewGRFData that was used only while processing data */ static void ClearTemporaryNewGRFData(GRFFile *gf) { /* Clear the GOTO labels used for GRF processing */ - for (GRFLabel *l = gf->label; l != NULL;) { + for (GRFLabel *l = gf->label; l != nullptr;) { GRFLabel *l2 = l->next; free(l); l = l2; } - gf->label = NULL; + gf->label = nullptr; } /** * Disable a GRF * @param message Error message or STR_NULL. - * @param config GRFConfig to disable, NULL for current. + * @param config GRFConfig to disable, nullptr for current. * @return Error message of the GRF for further customisation. */ -static GRFError *DisableGrf(StringID message = STR_NULL, GRFConfig *config = NULL) +static GRFError *DisableGrf(StringID message = STR_NULL, GRFConfig *config = nullptr) { GRFFile *file; - if (config != NULL) { + if (config != nullptr) { file = GetFileByGRFID(config->ident.grfid); } else { config = _cur.grfconfig; @@ -439,7 +439,7 @@ static GRFError *DisableGrf(StringID mes } config->status = GCS_DISABLED; - if (file != NULL) ClearTemporaryNewGRFData(file); + if (file != nullptr) ClearTemporaryNewGRFData(file); if (config == _cur.grfconfig) _cur.skip_sprites = -1; if (message != STR_NULL) { @@ -589,7 +589,7 @@ static void SetNewGRFOverride(uint32 sou * @param file NewGRF that wants to change the engine. * @param type Vehicle type. * @param internal_id Engine ID inside the NewGRF. - * @param static_access If the engine is not present, return NULL instead of allocating a new engine. (Used for static Action 0x04). + * @param static_access If the engine is not present, return nullptr instead of allocating a new engine. (Used for static Action 0x04). * @return The requested engine. */ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16 internal_id, bool static_access = false) @@ -604,7 +604,7 @@ static Engine *GetNewEngine(const GRFFil if (override != 0) { scope_grfid = override; const GRFFile *grf_match = GetFileByGRFID(override); - if (grf_match == NULL) { + if (grf_match == nullptr) { grfmsg(5, "Tried mapping from GRFID %x to %x but target is not loaded", BSWAP32(file->grfid), BSWAP32(override)); } else { grfmsg(5, "Mapping from GRFID %x to %x", BSWAP32(file->grfid), BSWAP32(override)); @@ -615,7 +615,7 @@ static Engine *GetNewEngine(const GRFFil EngineID engine = _engine_mngr.GetID(type, internal_id, scope_grfid); if (engine != INVALID_ENGINE) { Engine *e = Engine::Get(engine); - if (e->grf_prop.grffile == NULL) e->grf_prop.grffile = file; + if (e->grf_prop.grffile == nullptr) e->grf_prop.grffile = file; return e; } } @@ -625,7 +625,7 @@ static Engine *GetNewEngine(const GRFFil if (engine != INVALID_ENGINE) { Engine *e = Engine::Get(engine); - if (e->grf_prop.grffile == NULL) { + if (e->grf_prop.grffile == nullptr) { e->grf_prop.grffile = file; grfmsg(5, "Replaced engine at index %d for GRFID %x, type %d, index %d", e->index, BSWAP32(file->grfid), type, internal_id); } @@ -639,11 +639,11 @@ static Engine *GetNewEngine(const GRFFil return e; } - if (static_access) return NULL; + if (static_access) return nullptr; if (!Engine::CanAllocateItem()) { grfmsg(0, "Can't allocate any more engines"); - return NULL; + return nullptr; } size_t engine_pool_size = Engine::GetPoolSize(); @@ -735,7 +735,7 @@ static void MapSpriteMappingRecolour(Pal * @param[out] max_palette_offset Optionally returns the number of sprites in the spriteset of the palette. (0 if no spritset) * @return Read TileLayoutFlags. */ -static TileLayoutFlags ReadSpriteLayoutSprite(ByteReader *buf, bool read_flags, bool invert_action1_flag, bool use_cur_spritesets, int feature, PalSpriteID *grf_sprite, uint16 *max_sprite_offset = NULL, uint16 *max_palette_offset = NULL) +static TileLayoutFlags ReadSpriteLayoutSprite(ByteReader *buf, bool read_flags, bool invert_action1_flag, bool use_cur_spritesets, int feature, PalSpriteID *grf_sprite, uint16 *max_sprite_offset = nullptr, uint16 *max_palette_offset = nullptr) { grf_sprite->sprite = buf->ReadWord(); grf_sprite->pal = buf->ReadWord(); @@ -754,7 +754,7 @@ static TileLayoutFlags ReadSpriteLayoutS grf_sprite->pal = PAL_NONE; } else { SpriteID sprite = use_cur_spritesets ? _cur.GetSprite(feature, index) : index; - if (max_sprite_offset != NULL) *max_sprite_offset = use_cur_spritesets ? _cur.GetNumEnts(feature, index) : UINT16_MAX; + if (max_sprite_offset != nullptr) *max_sprite_offset = use_cur_spritesets ? _cur.GetNumEnts(feature, index) : UINT16_MAX; SB(grf_sprite->sprite, 0, SPRITE_WIDTH, sprite); SetBit(grf_sprite->sprite, SPRITE_MODIFIER_CUSTOM_SPRITE); } @@ -772,7 +772,7 @@ static TileLayoutFlags ReadSpriteLayoutS grf_sprite->pal = PAL_NONE; } else { SpriteID sprite = use_cur_spritesets ? _cur.GetSprite(feature, index) : index; - if (max_palette_offset != NULL) *max_palette_offset = use_cur_spritesets ? _cur.GetNumEnts(feature, index) : UINT16_MAX; + if (max_palette_offset != nullptr) *max_palette_offset = use_cur_spritesets ? _cur.GetNumEnts(feature, index) : UINT16_MAX; SB(grf_sprite->pal, 0, SPRITE_WIDTH, sprite); SetBit(grf_sprite->pal, SPRITE_MODIFIER_CUSTOM_SPRITE); } @@ -797,7 +797,7 @@ static void ReadSpriteLayoutRegisters(By { if (!(flags & TLF_DRAWING_FLAGS)) return; - if (dts->registers == NULL) dts->AllocateRegisters(); + if (dts->registers == nullptr) dts->AllocateRegisters(); TileLayoutRegisters ®s = const_cast(dts->registers[index]); regs.flags = flags & TLF_DRAWING_FLAGS; @@ -924,9 +924,9 @@ static bool ReadSpriteLayout(ByteReader /* When the Action1 sets are unknown, everything should be 0 (no spriteset usage) or UINT16_MAX (some spriteset usage) */ assert(use_cur_spritesets || (is_consistent && (dts->consistent_max_offset == 0 || dts->consistent_max_offset == UINT16_MAX))); - if (!is_consistent || dts->registers != NULL) { + if (!is_consistent || dts->registers != nullptr) { dts->consistent_max_offset = 0; - if (dts->registers == NULL) dts->AllocateRegisters(); + if (dts->registers == nullptr) dts->AllocateRegisters(); for (uint i = 0; i < num_building_sprites + 1; i++) { TileLayoutRegisters ®s = const_cast(dts->registers[i]); @@ -1045,7 +1045,7 @@ static ChangeInfoResult RailVehicleChang for (int i = 0; i < numinfo; i++) { Engine *e = GetNewEngine(_cur.grffile, VEH_TRAIN, engine + i); - if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles + if (e == nullptr) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles EngineInfo *ei = &e->info; RailVehicleInfo *rvi = &e->u.rail; @@ -1339,7 +1339,7 @@ static ChangeInfoResult RoadVehicleChang for (int i = 0; i < numinfo; i++) { Engine *e = GetNewEngine(_cur.grffile, VEH_ROAD, engine + i); - if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles + if (e == nullptr) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles EngineInfo *ei = &e->info; RoadVehicleInfo *rvi = &e->u.road; @@ -1527,7 +1527,7 @@ static ChangeInfoResult ShipVehicleChang for (int i = 0; i < numinfo; i++) { Engine *e = GetNewEngine(_cur.grffile, VEH_SHIP, engine + i); - if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles + if (e == nullptr) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles EngineInfo *ei = &e->info; ShipVehicleInfo *svi = &e->u.ship; @@ -1699,7 +1699,7 @@ static ChangeInfoResult AircraftVehicleC for (int i = 0; i < numinfo; i++) { Engine *e = GetNewEngine(_cur.grffile, VEH_AIRCRAFT, engine + i); - if (e == NULL) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles + if (e == nullptr) return CIR_INVALID_ID; // No engine could be allocated, so neither can any next vehicles EngineInfo *ei = &e->info; AircraftVehicleInfo *avi = &e->u.air; @@ -1857,13 +1857,13 @@ static ChangeInfoResult StationChangeInf } /* Allocate station specs if necessary */ - if (_cur.grffile->stations == NULL) _cur.grffile->stations = CallocT(NUM_STATIONS_PER_GRF); + if (_cur.grffile->stations == nullptr) _cur.grffile->stations = CallocT(NUM_STATIONS_PER_GRF); for (int i = 0; i < numinfo; i++) { StationSpec *statspec = _cur.grffile->stations[stid + i]; /* Check that the station we are modifying is defined. */ - if (statspec == NULL && prop != 0x08) { + if (statspec == nullptr && prop != 0x08) { grfmsg(2, "StationChangeInfo: Attempt to modify undefined station %u, ignoring", stid + i); return CIR_INVALID_ID; } @@ -1873,7 +1873,7 @@ static ChangeInfoResult StationChangeInf StationSpec **spec = &_cur.grffile->stations[stid + i]; /* Property 0x08 is special; it is where the station is allocated */ - if (*spec == NULL) *spec = CallocT(1); + if (*spec == nullptr) *spec = CallocT(1); /* Swap classid because we read it in BE meaning WAYP or DFLT */ uint32 classid = buf->ReadDWord(); @@ -1929,7 +1929,7 @@ static ChangeInfoResult StationChangeInf byte srcid = buf->ReadByte(); const StationSpec *srcstatspec = _cur.grffile->stations[srcid]; - if (srcstatspec == NULL) { + if (srcstatspec == nullptr) { grfmsg(1, "StationChangeInfo: Station %u is not defined, cannot copy sprite layout to %u.", srcid, stid + i); continue; } @@ -1981,7 +1981,7 @@ static ChangeInfoResult StationChangeInf if (number > statspec->platforms[l]) { statspec->layouts[l] = ReallocT(statspec->layouts[l], number); - /* We expect NULL being 0 here, but C99 guarantees that. */ + /* We expect nullptr being 0 here, but C99 guarantees that. */ memset(statspec->layouts[l] + statspec->platforms[l], 0, (number - statspec->platforms[l]) * sizeof(**statspec->layouts)); @@ -2012,7 +2012,7 @@ static ChangeInfoResult StationChangeInf byte srcid = buf->ReadByte(); const StationSpec *srcstatspec = _cur.grffile->stations[srcid]; - if (srcstatspec == NULL) { + if (srcstatspec == nullptr) { grfmsg(1, "StationChangeInfo: Station %u is not defined, cannot copy tile layout to %u.", srcid, stid + i); continue; } @@ -2174,7 +2174,7 @@ static ChangeInfoResult BridgeChangeInfo byte tableid = buf->ReadByte(); byte numtables = buf->ReadByte(); - if (bridge->sprite_table == NULL) { + if (bridge->sprite_table == nullptr) { /* Allocate memory for sprite table pointers and zero out */ bridge->sprite_table = CallocT(7); } @@ -2186,7 +2186,7 @@ static ChangeInfoResult BridgeChangeInfo continue; } - if (bridge->sprite_table[tableid] == NULL) { + if (bridge->sprite_table[tableid] == nullptr) { bridge->sprite_table[tableid] = MallocT(32); } @@ -2320,14 +2320,14 @@ static ChangeInfoResult TownHouseChangeI } /* Allocate house specs if they haven't been allocated already. */ - if (_cur.grffile->housespec == NULL) { + if (_cur.grffile->housespec == nullptr) { _cur.grffile->housespec = CallocT(NUM_HOUSES_PER_GRF); } for (int i = 0; i < numinfo; i++) { HouseSpec *housespec = _cur.grffile->housespec[hid + i]; - if (prop != 0x08 && housespec == NULL) { + if (prop != 0x08 && housespec == nullptr) { /* If the house property 08 is not yet set, ignore this property */ ChangeInfoResult cir = IgnoreTownHouseProperty(prop, buf); if (cir > ret) ret = cir; @@ -2351,7 +2351,7 @@ static ChangeInfoResult TownHouseChangeI } /* Allocate space for this house. */ - if (*house == NULL) *house = CallocT(1); + if (*house == nullptr) *house = CallocT(1); housespec = *house; @@ -2562,13 +2562,13 @@ static ChangeInfoResult TownHouseChangeI * Get the language map associated with a given NewGRF and language. * @param grfid The NewGRF to get the map for. * @param language_id The (NewGRF) language ID to get the map for. - * @return The LanguageMap, or NULL if it couldn't be found. + * @return The LanguageMap, or nullptr if it couldn't be found. */ /* static */ const LanguageMap *LanguageMap::GetLanguageMap(uint32 grfid, uint8 language_id) { /* LanguageID "MAX_LANG", i.e. 7F is any. This language can't have a gender/case mapping, but has to be handled gracefully. */ const GRFFile *grffile = GetFileByGRFID(grfid); - return (grffile != NULL && grffile->language_map != NULL && language_id < MAX_LANG) ? &grffile->language_map[language_id] : NULL; + return (grffile != nullptr && grffile->language_map != nullptr && language_id < MAX_LANG) ? &grffile->language_map[language_id] : nullptr; } /** @@ -2751,8 +2751,8 @@ static ChangeInfoResult GlobalVarChangeI case 0x14: // Case translation table case 0x15: { // Plural form translation uint curidx = gvid + i; // The current index, i.e. language. - const LanguageMetadata *lang = curidx < MAX_LANG ? GetLanguage(curidx) : NULL; - if (lang == NULL) { + const LanguageMetadata *lang = curidx < MAX_LANG ? GetLanguage(curidx) : nullptr; + if (lang == nullptr) { grfmsg(1, "GlobalVarChangeInfo: Language %d is not known, ignoring", curidx); /* Skip over the data. */ if (prop == 0x15) { @@ -2765,7 +2765,7 @@ static ChangeInfoResult GlobalVarChangeI break; } - if (_cur.grffile->language_map == NULL) _cur.grffile->language_map = new LanguageMap[MAX_LANG]; + if (_cur.grffile->language_map == nullptr) _cur.grffile->language_map = new LanguageMap[MAX_LANG]; if (prop == 0x15) { uint plural_form = buf->ReadByte(); @@ -3135,14 +3135,14 @@ static ChangeInfoResult IndustrytilesCha } /* Allocate industry tile specs if they haven't been allocated already. */ - if (_cur.grffile->indtspec == NULL) { + if (_cur.grffile->indtspec == nullptr) { _cur.grffile->indtspec = CallocT(NUM_INDUSTRYTILES_PER_GRF); } for (int i = 0; i < numinfo; i++) { IndustryTileSpec *tsp = _cur.grffile->indtspec[indtid + i]; - if (prop != 0x08 && tsp == NULL) { + if (prop != 0x08 && tsp == nullptr) { ChangeInfoResult cir = IgnoreIndustryTileProperty(prop, buf); if (cir > ret) ret = cir; continue; @@ -3160,7 +3160,7 @@ static ChangeInfoResult IndustrytilesCha } /* Allocate space for this industry. */ - if (*tilespec == NULL) { + if (*tilespec == nullptr) { *tilespec = CallocT(1); tsp = *tilespec; @@ -3370,14 +3370,14 @@ static bool ValidateIndustryLayout(const /** Clean the tile table of the IndustrySpec if it's needed. */ static void CleanIndustryTileTable(IndustrySpec *ind) { - if (HasBit(ind->cleanup_flag, CLEAN_TILELAYOUT) && ind->table != NULL) { + if (HasBit(ind->cleanup_flag, CLEAN_TILELAYOUT) && ind->table != nullptr) { for (int j = 0; j < ind->num_table; j++) { /* remove the individual layouts */ free(ind->table[j]); } /* remove the layouts pointers */ free(ind->table); - ind->table = NULL; + ind->table = nullptr; } } @@ -3399,14 +3399,14 @@ static ChangeInfoResult IndustriesChange } /* Allocate industry specs if they haven't been allocated already. */ - if (_cur.grffile->industryspec == NULL) { + if (_cur.grffile->industryspec == nullptr) { _cur.grffile->industryspec = CallocT(NUM_INDUSTRYTYPES_PER_GRF); } for (int i = 0; i < numinfo; i++) { IndustrySpec *indsp = _cur.grffile->industryspec[indid + i]; - if (prop != 0x08 && indsp == NULL) { + if (prop != 0x08 && indsp == nullptr) { ChangeInfoResult cir = IgnoreIndustryProperty(prop, buf); if (cir > ret) ret = cir; continue; @@ -3431,7 +3431,7 @@ static ChangeInfoResult IndustriesChange /* Allocate space for this industry. * Only need to do it once. If ever it is called again, it should not * do anything */ - if (*indspec == NULL) { + if (*indspec == nullptr) { *indspec = CallocT(1); indsp = *indspec; @@ -3819,14 +3819,14 @@ static ChangeInfoResult AirportChangeInf } /* Allocate industry specs if they haven't been allocated already. */ - if (_cur.grffile->airportspec == NULL) { + if (_cur.grffile->airportspec == nullptr) { _cur.grffile->airportspec = CallocT(NUM_AIRPORTS_PER_GRF); } for (int i = 0; i < numinfo; i++) { AirportSpec *as = _cur.grffile->airportspec[airport + i]; - if (as == NULL && prop != 0x08 && prop != 0x09) { + if (as == nullptr && prop != 0x08 && prop != 0x09) { grfmsg(2, "AirportChangeInfo: Attempt to modify undefined airport %u, ignoring", airport + i); return CIR_INVALID_ID; } @@ -3850,7 +3850,7 @@ static ChangeInfoResult AirportChangeInf /* Allocate space for this airport. * Only need to do it once. If ever it is called again, it should not * do anything */ - if (*spec == NULL) { + if (*spec == nullptr) { *spec = MallocT(1); as = *spec; @@ -4037,14 +4037,14 @@ static ChangeInfoResult ObjectChangeInfo } /* Allocate object specs if they haven't been allocated already. */ - if (_cur.grffile->objectspec == NULL) { + if (_cur.grffile->objectspec == nullptr) { _cur.grffile->objectspec = CallocT(NUM_OBJECTS_PER_GRF); } for (int i = 0; i < numinfo; i++) { ObjectSpec *spec = _cur.grffile->objectspec[id + i]; - if (prop != 0x08 && spec == NULL) { + if (prop != 0x08 && spec == nullptr) { /* If the object property 08 is not yet set, ignore this property */ ChangeInfoResult cir = IgnoreObjectProperty(prop, buf); if (cir > ret) ret = cir; @@ -4056,7 +4056,7 @@ static ChangeInfoResult ObjectChangeInfo ObjectSpec **ospec = &_cur.grffile->objectspec[id + i]; /* Allocate space for this object. */ - if (*ospec == NULL) { + if (*ospec == nullptr) { *ospec = CallocT(1); (*ospec)->views = 1; // Default for NewGRFs that don't set it. } @@ -4378,14 +4378,14 @@ static ChangeInfoResult AirportTilesChan } /* Allocate airport tile specs if they haven't been allocated already. */ - if (_cur.grffile->airtspec == NULL) { + if (_cur.grffile->airtspec == nullptr) { _cur.grffile->airtspec = CallocT(NUM_AIRPORTTILES_PER_GRF); } for (int i = 0; i < numinfo; i++) { AirportTileSpec *tsp = _cur.grffile->airtspec[airtid + i]; - if (prop != 0x08 && tsp == NULL) { + if (prop != 0x08 && tsp == nullptr) { grfmsg(2, "AirportTileChangeInfo: Attempt to modify undefined airport tile %u. Ignoring.", airtid + i); return CIR_INVALID_ID; } @@ -4402,7 +4402,7 @@ static ChangeInfoResult AirportTilesChan } /* Allocate space for this airport tile. */ - if (*tilespec == NULL) { + if (*tilespec == nullptr) { *tilespec = CallocT(1); tsp = *tilespec; @@ -4513,10 +4513,10 @@ static void FeatureChangeInfo(ByteReader /* GSF_GLOBALVAR */ GlobalVarChangeInfo, /* GSF_INDUSTRYTILES */ IndustrytilesChangeInfo, /* GSF_INDUSTRIES */ IndustriesChangeInfo, - /* GSF_CARGOES */ NULL, // Cargo is handled during reservation + /* GSF_CARGOES */ nullptr, // Cargo is handled during reservation /* GSF_SOUNDFX */ SoundEffectChangeInfo, /* GSF_AIRPORTS */ AirportChangeInfo, - /* GSF_SIGNALS */ NULL, + /* GSF_SIGNALS */ nullptr, /* GSF_OBJECTS */ ObjectChangeInfo, /* GSF_RAILTYPES */ RailTypeChangeInfo, /* GSF_AIRPORTTILES */ AirportTilesChangeInfo, @@ -4535,7 +4535,7 @@ static void FeatureChangeInfo(ByteReader grfmsg(6, "FeatureChangeInfo: Feature 0x%02X, %d properties, to apply to %d+%d", feature, numprops, engine, numinfo); - if (feature >= lengthof(handler) || handler[feature] == NULL) { + if (feature >= lengthof(handler) || handler[feature] == nullptr) { if (feature != GSF_CARGOES) grfmsg(1, "FeatureChangeInfo: Unsupported feature 0x%02X, skipping", feature); return; } @@ -4573,7 +4573,7 @@ static void SafeChangeInfo(ByteReader *b uint32 s = buf->ReadDWord(); buf->ReadDWord(); // dest const GRFConfig *grfconfig = GetGRFConfig(s); - if (grfconfig != NULL && !HasBit(grfconfig->flags, GCF_STATIC)) { + if (grfconfig != nullptr && !HasBit(grfconfig->flags, GCF_STATIC)) { is_safe = false; break; } @@ -4697,9 +4697,9 @@ static const SpriteGroup *GetGroupFromGr return new CallbackResultSpriteGroup(groupid, _cur.grffile->grf_version >= 8); } - if (groupid > MAX_SPRITEGROUP || _cur.spritegroups[groupid] == NULL) { + if (groupid > MAX_SPRITEGROUP || _cur.spritegroups[groupid] == nullptr) { grfmsg(1, "GetGroupFromGroupID(0x%02X:0x%02X): Groupid 0x%04X does not exist, leaving empty", setid, type, groupid); - return NULL; + return nullptr; } return _cur.spritegroups[groupid]; @@ -4722,7 +4722,7 @@ static const SpriteGroup *CreateGroupFro if (!_cur.IsValidSpriteSet(feature, spriteid)) { grfmsg(1, "CreateGroupFromGroupID(0x%02X:0x%02X): Sprite set %u invalid", setid, type, spriteid); - return NULL; + return nullptr; } SpriteID spriteset_start = _cur.GetSprite(feature, spriteid); @@ -4748,7 +4748,7 @@ static void NewSpriteGroup(ByteReader *b * otherwise it specifies a number of entries, the exact * meaning depends on the feature * V feature-specific-data (huge mess, don't even look it up --pasky) */ - SpriteGroup *act_group = NULL; + SpriteGroup *act_group = nullptr; uint8 feature = buf->ReadByte(); if (feature >= GSF_END) { @@ -5128,7 +5128,7 @@ static CargoID TranslateCargo(uint8 feat static bool IsValidGroupID(uint16 groupid, const char *function) { - if (groupid > MAX_SPRITEGROUP || _cur.spritegroups[groupid] == NULL) { + if (groupid > MAX_SPRITEGROUP || _cur.spritegroups[groupid] == nullptr) { grfmsg(1, "%s: Spritegroup 0x%04X out of range or empty, skipping.", function, groupid); return false; } @@ -5165,7 +5165,7 @@ static void VehicleMapSpriteGroup(ByteRe EngineID *engines = AllocaM(EngineID, idcount); for (uint i = 0; i < idcount; i++) { Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, buf->ReadExtendedByte()); - if (e == NULL) { + if (e == nullptr) { /* No engine could be allocated?!? Deal with it. Okay, * this might look bad. Also make sure this NewGRF * gets disabled, as a half loaded one is bad. */ @@ -5263,9 +5263,9 @@ static void StationMapSpriteGroup(ByteRe if (ctype == CT_INVALID) continue; for (uint i = 0; i < idcount; i++) { - StationSpec *statspec = _cur.grffile->stations == NULL ? NULL : _cur.grffile->stations[stations[i]]; - - if (statspec == NULL) { + StationSpec *statspec = _cur.grffile->stations == nullptr ? nullptr : _cur.grffile->stations[stations[i]]; + + if (statspec == nullptr) { grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stations[i]); continue; } @@ -5278,14 +5278,14 @@ static void StationMapSpriteGroup(ByteRe if (!IsValidGroupID(groupid, "StationMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - StationSpec *statspec = _cur.grffile->stations == NULL ? NULL : _cur.grffile->stations[stations[i]]; - - if (statspec == NULL) { + StationSpec *statspec = _cur.grffile->stations == nullptr ? nullptr : _cur.grffile->stations[stations[i]]; + + if (statspec == nullptr) { grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stations[i]); continue; } - if (statspec->grf_prop.grffile != NULL) { + if (statspec->grf_prop.grffile != nullptr) { grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X mapped multiple times, skipping", stations[i]); continue; } @@ -5312,7 +5312,7 @@ static void TownHouseMapSpriteGroup(Byte uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "TownHouseMapSpriteGroup")) return; - if (_cur.grffile->housespec == NULL) { + if (_cur.grffile->housespec == nullptr) { grfmsg(1, "TownHouseMapSpriteGroup: No houses defined, skipping"); return; } @@ -5320,7 +5320,7 @@ static void TownHouseMapSpriteGroup(Byte for (uint i = 0; i < idcount; i++) { HouseSpec *hs = _cur.grffile->housespec[houses[i]]; - if (hs == NULL) { + if (hs == nullptr) { grfmsg(1, "TownHouseMapSpriteGroup: House %d undefined, skipping.", houses[i]); continue; } @@ -5343,7 +5343,7 @@ static void IndustryMapSpriteGroup(ByteR uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustryMapSpriteGroup")) return; - if (_cur.grffile->industryspec == NULL) { + if (_cur.grffile->industryspec == nullptr) { grfmsg(1, "IndustryMapSpriteGroup: No industries defined, skipping"); return; } @@ -5351,7 +5351,7 @@ static void IndustryMapSpriteGroup(ByteR for (uint i = 0; i < idcount; i++) { IndustrySpec *indsp = _cur.grffile->industryspec[industries[i]]; - if (indsp == NULL) { + if (indsp == nullptr) { grfmsg(1, "IndustryMapSpriteGroup: Industry %d undefined, skipping", industries[i]); continue; } @@ -5374,7 +5374,7 @@ static void IndustrytileMapSpriteGroup(B uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustrytileMapSpriteGroup")) return; - if (_cur.grffile->indtspec == NULL) { + if (_cur.grffile->indtspec == nullptr) { grfmsg(1, "IndustrytileMapSpriteGroup: No industry tiles defined, skipping"); return; } @@ -5382,7 +5382,7 @@ static void IndustrytileMapSpriteGroup(B for (uint i = 0; i < idcount; i++) { IndustryTileSpec *indtsp = _cur.grffile->indtspec[indtiles[i]]; - if (indtsp == NULL) { + if (indtsp == nullptr) { grfmsg(1, "IndustrytileMapSpriteGroup: Industry tile %d undefined, skipping", indtiles[i]); continue; } @@ -5421,7 +5421,7 @@ static void CargoMapSpriteGroup(ByteRead static void ObjectMapSpriteGroup(ByteReader *buf, uint8 idcount) { - if (_cur.grffile->objectspec == NULL) { + if (_cur.grffile->objectspec == nullptr) { grfmsg(1, "ObjectMapSpriteGroup: No object tiles defined, skipping"); return; } @@ -5443,7 +5443,7 @@ static void ObjectMapSpriteGroup(ByteRea for (uint i = 0; i < idcount; i++) { ObjectSpec *spec = _cur.grffile->objectspec[objects[i]]; - if (spec == NULL) { + if (spec == nullptr) { grfmsg(1, "ObjectMapSpriteGroup: Object with ID 0x%02X undefined, skipping", objects[i]); continue; } @@ -5458,12 +5458,12 @@ static void ObjectMapSpriteGroup(ByteRea for (uint i = 0; i < idcount; i++) { ObjectSpec *spec = _cur.grffile->objectspec[objects[i]]; - if (spec == NULL) { + if (spec == nullptr) { grfmsg(1, "ObjectMapSpriteGroup: Object with ID 0x%02X undefined, skipping", objects[i]); continue; } - if (spec->grf_prop.grffile != NULL) { + if (spec->grf_prop.grffile != nullptr) { grfmsg(1, "ObjectMapSpriteGroup: Object with ID 0x%02X mapped multiple times, skipping", objects[i]); continue; } @@ -5518,7 +5518,7 @@ static void AirportMapSpriteGroup(ByteRe uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "AirportMapSpriteGroup")) return; - if (_cur.grffile->airportspec == NULL) { + if (_cur.grffile->airportspec == nullptr) { grfmsg(1, "AirportMapSpriteGroup: No airports defined, skipping"); return; } @@ -5526,7 +5526,7 @@ static void AirportMapSpriteGroup(ByteRe for (uint i = 0; i < idcount; i++) { AirportSpec *as = _cur.grffile->airportspec[airports[i]]; - if (as == NULL) { + if (as == nullptr) { grfmsg(1, "AirportMapSpriteGroup: Airport %d undefined, skipping", airports[i]); continue; } @@ -5549,7 +5549,7 @@ static void AirportTileMapSpriteGroup(By uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "AirportTileMapSpriteGroup")) return; - if (_cur.grffile->airtspec == NULL) { + if (_cur.grffile->airtspec == nullptr) { grfmsg(1, "AirportTileMapSpriteGroup: No airport tiles defined, skipping"); return; } @@ -5557,7 +5557,7 @@ static void AirportTileMapSpriteGroup(By for (uint i = 0; i < idcount; i++) { AirportTileSpec *airtsp = _cur.grffile->airtspec[airptiles[i]]; - if (airtsp == NULL) { + if (airtsp == nullptr) { grfmsg(1, "AirportTileMapSpriteGroup: Airport tile %d undefined, skipping", airptiles[i]); continue; } @@ -5721,7 +5721,7 @@ static void FeatureNewName(ByteReader *b case GSF_AIRCRAFT: if (!generic) { Engine *e = GetNewEngine(_cur.grffile, (VehicleType)feature, id, HasBit(_cur.grfconfig->flags, GCF_STATIC)); - if (e == NULL) break; + if (e == nullptr) break; StringID string = AddGRFString(_cur.grffile->grfid, e->index, lang, new_scheme, false, name, e->info.string_id); e->info.string_id = string; } else { @@ -5737,7 +5737,7 @@ static void FeatureNewName(ByteReader *b switch (GB(id, 8, 8)) { case 0xC4: // Station class name - if (_cur.grffile->stations == NULL || _cur.grffile->stations[GB(id, 0, 8)] == NULL) { + if (_cur.grffile->stations == nullptr || _cur.grffile->stations[GB(id, 0, 8)] == nullptr) { grfmsg(1, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring", GB(id, 0, 8)); } else { StationClassID cls_id = _cur.grffile->stations[GB(id, 0, 8)]->cls_id; @@ -5746,7 +5746,7 @@ static void FeatureNewName(ByteReader *b break; case 0xC5: // Station name - if (_cur.grffile->stations == NULL || _cur.grffile->stations[GB(id, 0, 8)] == NULL) { + if (_cur.grffile->stations == nullptr || _cur.grffile->stations[GB(id, 0, 8)] == nullptr) { grfmsg(1, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring", GB(id, 0, 8)); } else { _cur.grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); @@ -5754,7 +5754,7 @@ static void FeatureNewName(ByteReader *b break; case 0xC7: // Airporttile name - if (_cur.grffile->airtspec == NULL || _cur.grffile->airtspec[GB(id, 0, 8)] == NULL) { + if (_cur.grffile->airtspec == nullptr || _cur.grffile->airtspec[GB(id, 0, 8)] == nullptr) { grfmsg(1, "FeatureNewName: Attempt to name undefined airport tile 0x%X, ignoring", GB(id, 0, 8)); } else { _cur.grffile->airtspec[GB(id, 0, 8)]->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); @@ -5762,7 +5762,7 @@ static void FeatureNewName(ByteReader *b break; case 0xC9: // House name - if (_cur.grffile->housespec == NULL || _cur.grffile->housespec[GB(id, 0, 8)] == NULL) { + if (_cur.grffile->housespec == nullptr || _cur.grffile->housespec[GB(id, 0, 8)] == nullptr) { grfmsg(1, "FeatureNewName: Attempt to name undefined house 0x%X, ignoring.", GB(id, 0, 8)); } else { _cur.grffile->housespec[GB(id, 0, 8)]->building_name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); @@ -6099,7 +6099,7 @@ static uint32 GetParamVal(byte param, ui } case 0x85: // TTDPatch flags, only for bit tests - if (cond_val == NULL) { + if (cond_val == nullptr) { /* Supported in Action 0x07 and 0x09, not 0x0D */ return 0; } else { @@ -6142,7 +6142,7 @@ static void CfgApply(ByteReader *buf) size_t pos = FioGetPos(); uint32 num = _cur.grf_container_ver >= 2 ? FioReadDword() : FioReadWord(); uint8 type = FioReadByte(); - byte *preload_sprite = NULL; + byte *preload_sprite = nullptr; /* Check if the sprite is a pseudo sprite. We can't operate on real sprites. */ if (type == 0xFF) { @@ -6204,7 +6204,7 @@ static void CfgApply(ByteReader *buf) bool carry = false; for (i = 0; i < param_size && offset + i < num; i++) { - uint32 value = GetParamVal(param_num + i / 4, NULL); + uint32 value = GetParamVal(param_num + i / 4, nullptr); /* Reset carry flag for each iteration of the variable (only really * matters if param_size is greater than 4) */ if (i % 4 == 0) carry = false; @@ -6290,12 +6290,12 @@ static void SkipIf(ByteReader *buf) GRFConfig *c = GetGRFConfig(cond_val, mask); - if (c != NULL && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) { + if (c != nullptr && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) { DisableStaticNewGRFInfluencingNonStaticNewGRFs(c); - c = NULL; - } - - if (condtype != 10 && c == NULL) { + c = nullptr; + } + + if (condtype != 10 && c == nullptr) { grfmsg(7, "SkipIf: GRFID 0x%08X unknown, skipping test", BSWAP32(cond_val)); return; } @@ -6320,7 +6320,7 @@ static void SkipIf(ByteReader *buf) case 0x0A: // GRFID is not nor will be active /* This is the only condtype that doesn't get ignored if the GRFID is not found */ - result = c == NULL || c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND; + result = c == nullptr || c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND; break; default: grfmsg(1, "SkipIf: Unsupported GRF condition type %02X. Ignoring", condtype); return; @@ -6364,12 +6364,12 @@ static void SkipIf(ByteReader *buf) * file. The jump will always be the first matching label that follows * the current nfo_line. If no matching label is found, the first matching * label in the file is used. */ - GRFLabel *choice = NULL; - for (GRFLabel *label = _cur.grffile->label; label != NULL; label = label->next) { + GRFLabel *choice = nullptr; + for (GRFLabel *label = _cur.grffile->label; label != nullptr; label = label->next) { if (label->label != numsprites) continue; /* Remember a goto before the current line */ - if (choice == NULL) choice = label; + if (choice == nullptr) choice = label; /* If we find a label here, this is definitely good */ if (label->nfo_line > _cur.nfo_line) { choice = label; @@ -6377,7 +6377,7 @@ static void SkipIf(ByteReader *buf) } } - if (choice != NULL) { + if (choice != nullptr) { grfmsg(2, "SkipIf: Jumping to label 0x%0X at line %d, test was true", choice->label, choice->nfo_line); FioSeekTo(choice->pos, SEEK_SET); _cur.nfo_line = choice->nfo_line; @@ -6569,7 +6569,7 @@ static void GRFLoadError(ByteReader *buf /* Make sure we show fatal errors, instead of silly infos from before */ delete _cur.grfconfig->error; - _cur.grfconfig->error = NULL; + _cur.grfconfig->error = nullptr; } if (message_id >= lengthof(msgstr) && message_id != 0xFF) { @@ -6583,7 +6583,7 @@ static void GRFLoadError(ByteReader *buf } /* For now we can only show one message per newgrf file. */ - if (_cur.grfconfig->error != NULL) return; + if (_cur.grfconfig->error != nullptr) return; GRFError *error = new GRFError(sevstr[severity]); @@ -6592,7 +6592,7 @@ static void GRFLoadError(ByteReader *buf if (buf->HasData()) { const char *message = buf->ReadString(); - error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, NULL, SCC_RAW_STRING_POINTER); + error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, nullptr, SCC_RAW_STRING_POINTER); } else { grfmsg(7, "GRFLoadError: No custom message supplied."); error->custom_message = stredup(""); @@ -6910,11 +6910,11 @@ static void ParamSet(ByteReader *buf) /* Read another GRF File's parameter */ const GRFFile *file = GetFileByGRFID(data); GRFConfig *c = GetGRFConfig(data); - if (c != NULL && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) { + if (c != nullptr && HasBit(c->flags, GCF_STATIC) && !HasBit(_cur.grfconfig->flags, GCF_STATIC) && _networking) { /* Disable the read GRF if it is a static NewGRF. */ DisableStaticNewGRFInfluencingNonStaticNewGRFs(c); src1 = 0; - } else if (file == NULL || c == NULL || c->status == GCS_DISABLED) { + } else if (file == nullptr || c == nullptr || c->status == GCS_DISABLED) { src1 = 0; } else if (src1 == 0xFE) { src1 = c->version; @@ -6928,8 +6928,8 @@ static void ParamSet(ByteReader *buf) * variables available in action 7, or they can be FF to use the value * of . If referring to parameters that are undefined, a value * of 0 is used instead. */ - src1 = (src1 == 0xFF) ? data : GetParamVal(src1, NULL); - src2 = (src2 == 0xFF) ? data : GetParamVal(src2, NULL); + src1 = (src1 == 0xFF) ? data : GetParamVal(src1, nullptr); + src2 = (src2 == 0xFF) ? data : GetParamVal(src2, nullptr); } uint32 res; @@ -7115,7 +7115,7 @@ static void GRFInhibit(ByteReader *buf) GRFConfig *file = GetGRFConfig(grfid); /* Unset activation flag */ - if (file != NULL && file != _cur.grfconfig) { + if (file != nullptr && file != _cur.grfconfig) { grfmsg(2, "GRFInhibit: Deactivating file '%s'", file->filename); GRFError *error = DisableGrf(STR_NEWGRF_ERROR_FORCEFULLY_DISABLED, file); error->data = stredup(_cur.grfconfig->GetName()); @@ -7221,15 +7221,15 @@ static void DefineGotoLabel(ByteReader * label->label = nfo_label; label->nfo_line = _cur.nfo_line; label->pos = FioGetPos(); - label->next = NULL; + label->next = nullptr; /* Set up a linked list of goto targets which we will search in an Action 0x7/0x9 */ - if (_cur.grffile->label == NULL) { + if (_cur.grffile->label == nullptr) { _cur.grffile->label = label; } else { /* Attach the label to the end of the list */ GRFLabel *l; - for (l = _cur.grffile->label; l->next != NULL; l = l->next) {} + for (l = _cur.grffile->label; l->next != nullptr; l = l->next) {} l->next = label; } @@ -7247,7 +7247,7 @@ static void ImportGRFSound(SoundEntry *s SoundID sound_id = FioReadWord(); file = GetFileByGRFID(grfid); - if (file == NULL || file->sound_offset == 0) { + if (file == nullptr || file->sound_offset == 0) { grfmsg(1, "ImportGRFSound: Source file not available"); return; } @@ -7457,7 +7457,7 @@ static void TranslateGRFStrings(ByteRead uint32 grfid = buf->ReadDWord(); const GRFConfig *c = GetGRFConfig(grfid); - if (c == NULL || (c->status != GCS_INITIALISED && c->status != GCS_ACTIVATED)) { + if (c == nullptr || (c->status != GCS_INITIALISED && c->status != GCS_ACTIVATED)) { grfmsg(7, "TranslateGRFStrings: GRFID 0x%08x unknown, skipping action 13", BSWAP32(grfid)); return; } @@ -7808,7 +7808,7 @@ static bool ChangeGRFParamValueNames(Byt if (val_name != _cur_parameter->value_names.End()) { AddGRFTextToList(&val_name->second, langid, _cur.grfconfig->ident.grfid, false, name_string); } else { - GRFText *list = NULL; + GRFText *list = nullptr; AddGRFTextToList(&list, langid, _cur.grfconfig->ident.grfid, false, name_string); _cur_parameter->value_names.Insert(id, list); } @@ -7851,7 +7851,7 @@ static bool HandleParameterInfo(ByteRead if (id >= _cur.grfconfig->param_info.size()) { _cur.grfconfig->param_info.resize(id + 1); } - if (_cur.grfconfig->param_info[id] == NULL) { + if (_cur.grfconfig->param_info[id] == nullptr) { _cur.grfconfig->param_info[id] = new GRFParameterInfo(id); } _cur_parameter = _cur.grfconfig->param_info[id]; @@ -8094,9 +8094,9 @@ static void ResetCustomStations() { for (GRFFile * const file : _grf_files) { StationSpec **&stations = file->stations; - if (stations == NULL) continue; + if (stations == nullptr) continue; for (uint i = 0; i < NUM_STATIONS_PER_GRF; i++) { - if (stations[i] == NULL) continue; + if (stations[i] == nullptr) continue; StationSpec *statspec = stations[i]; delete[] statspec->renderdata; @@ -8119,7 +8119,7 @@ static void ResetCustomStations() /* Free and reset the station data */ free(stations); - stations = NULL; + stations = nullptr; } } @@ -8128,13 +8128,13 @@ static void ResetCustomHouses() { for (GRFFile * const file : _grf_files) { HouseSpec **&housespec = file->housespec; - if (housespec == NULL) continue; + if (housespec == nullptr) continue; for (uint i = 0; i < NUM_HOUSES_PER_GRF; i++) { free(housespec[i]); } free(housespec); - housespec = NULL; + housespec = nullptr; } } @@ -8143,11 +8143,11 @@ static void ResetCustomAirports() { for (GRFFile * const file : _grf_files) { AirportSpec **aslist = file->airportspec; - if (aslist != NULL) { + if (aslist != nullptr) { for (uint i = 0; i < NUM_AIRPORTS_PER_GRF; i++) { AirportSpec *as = aslist[i]; - if (as != NULL) { + if (as != nullptr) { /* We need to remove the tiles layouts */ for (int j = 0; j < as->num_table; j++) { /* remove the individual layouts */ @@ -8161,16 +8161,16 @@ static void ResetCustomAirports() } } free(aslist); - file->airportspec = NULL; + file->airportspec = nullptr; } AirportTileSpec **&airporttilespec = file->airtspec; - if (airporttilespec != NULL) { + if (airporttilespec != nullptr) { for (uint i = 0; i < NUM_AIRPORTTILES_PER_GRF; i++) { free(airporttilespec[i]); } free(airporttilespec); - airporttilespec = NULL; + airporttilespec = nullptr; } } } @@ -8184,10 +8184,10 @@ static void ResetCustomIndustries() /* We are verifiying both tiles and industries specs loaded from the grf file * First, let's deal with industryspec */ - if (industryspec != NULL) { + if (industryspec != nullptr) { for (uint i = 0; i < NUM_INDUSTRYTYPES_PER_GRF; i++) { IndustrySpec *ind = industryspec[i]; - if (ind == NULL) continue; + if (ind == nullptr) continue; /* We need to remove the sounds array */ if (HasBit(ind->cleanup_flag, CLEAN_RANDOMSOUNDS)) { @@ -8201,16 +8201,16 @@ static void ResetCustomIndustries() } free(industryspec); - industryspec = NULL; - } - - if (indtspec == NULL) continue; + industryspec = nullptr; + } + + if (indtspec == nullptr) continue; for (uint i = 0; i < NUM_INDUSTRYTILES_PER_GRF; i++) { free(indtspec[i]); } free(indtspec); - indtspec = NULL; + indtspec = nullptr; } } @@ -8219,13 +8219,13 @@ static void ResetCustomObjects() { for (GRFFile * const file : _grf_files) { ObjectSpec **&objectspec = file->objectspec; - if (objectspec == NULL) continue; + if (objectspec == nullptr) continue; for (uint i = 0; i < NUM_OBJECTS_PER_GRF; i++) { free(objectspec[i]); } free(objectspec); - objectspec = NULL; + objectspec = nullptr; } } @@ -8237,16 +8237,16 @@ static void ResetNewGRF() } _grf_files.clear(); - _cur.grffile = NULL; + _cur.grffile = nullptr; } /** Clear all NewGRF errors */ static void ResetNewGRFErrors() { - for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { - if (!HasBit(c->flags, GCF_COPY) && c->error != NULL) { + for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { + if (!HasBit(c->flags, GCF_COPY) && c->error != nullptr) { delete c->error; - c->error = NULL; + c->error = nullptr; } } } @@ -8388,7 +8388,7 @@ static void BuildCargoTranslationMap() static void InitNewGRFFile(const GRFConfig *config) { GRFFile *newfile = GetFileByFilename(config->filename); - if (newfile != NULL) { + if (newfile != nullptr) { /* We already loaded it once. */ _cur.grffile = newfile; return; @@ -8546,16 +8546,16 @@ static void CalculateRefitMasks() * cargo type. Finally disable the vehicle, if there is still no cargo. */ if (ei->cargo_type == CT_INVALID && ei->refit_mask != 0) { /* Figure out which CTT to use for the default cargo, if it is 'first refittable'. */ - const uint8 *cargo_map_for_first_refittable = NULL; + const uint8 *cargo_map_for_first_refittable = nullptr; { const GRFFile *file = _gted[engine].defaultcargo_grf; - if (file == NULL) file = e->GetGRF(); - if (file != NULL && file->grf_version >= 8 && file->cargo_list.size() != 0) { + if (file == nullptr) file = e->GetGRF(); + if (file != nullptr && file->grf_version >= 8 && file->cargo_list.size() != 0) { cargo_map_for_first_refittable = file->cargo_map; } } - if (cargo_map_for_first_refittable != NULL) { + if (cargo_map_for_first_refittable != nullptr) { /* Use first refittable cargo from cargo translation table */ byte best_local_slot = 0xFF; CargoID cargo_type; @@ -8586,7 +8586,7 @@ static void CalculateRefitMasks() static void FinaliseCanals() { for (uint i = 0; i < CF_END; i++) { - if (_water_feature[i].grffile != NULL) { + if (_water_feature[i].grffile != nullptr) { _water_feature[i].callback_mask = _water_feature[i].grffile->canal_local_properties[i].callback_mask; _water_feature[i].flags = _water_feature[i].grffile->canal_local_properties[i].flags; } @@ -8599,7 +8599,7 @@ static void FinaliseEngineArray() Engine *e; FOR_ALL_ENGINES(e) { - if (e->GetGRF() == NULL) { + if (e->GetGRF() == nullptr) { const EngineIDMapping &eid = _engine_mngr[e->index]; if (eid.grfid != INVALID_GRFID || eid.internal_id != eid.substitute_id) { e->info.string_id = STR_NEWGRF_INVALID_ENGINE; @@ -8611,13 +8611,13 @@ static void FinaliseEngineArray() /* When the train does not set property 27 (misc flags), but it * is overridden by a NewGRF graphically we want to disable the * flipping possibility. */ - if (e->type == VEH_TRAIN && !_gted[e->index].prop27_set && e->GetGRF() != NULL && is_custom_sprite(e->u.rail.image_index)) { + if (e->type == VEH_TRAIN && !_gted[e->index].prop27_set && e->GetGRF() != nullptr && is_custom_sprite(e->u.rail.image_index)) { ClrBit(e->info.misc_flags, EF_RAIL_FLIPS); } /* Skip wagons, there livery is defined via the engine */ if (e->type != VEH_TRAIN || e->u.rail.railveh_type != RAILVEH_WAGON) { - LiveryScheme ls = GetEngineLiveryScheme(e->index, INVALID_ENGINE, NULL); + LiveryScheme ls = GetEngineLiveryScheme(e->index, INVALID_ENGINE, nullptr); SetBit(_loaded_newgrf_features.used_liveries, ls); /* Note: For ships and roadvehicles we assume that they cannot be refitted between passenger and freight */ @@ -8671,12 +8671,12 @@ static void FinaliseCargoArray() static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseSpec *next2, const HouseSpec *next3, const char *filename) { if (((hs->building_flags & BUILDING_HAS_2_TILES) != 0 && - (next1 == NULL || !next1->enabled || (next1->building_flags & BUILDING_HAS_1_TILE) != 0)) || + (next1 == nullptr || !next1->enabled || (next1->building_flags & BUILDING_HAS_1_TILE) != 0)) || ((hs->building_flags & BUILDING_HAS_4_TILES) != 0 && - (next2 == NULL || !next2->enabled || (next2->building_flags & BUILDING_HAS_1_TILE) != 0 || - next3 == NULL || !next3->enabled || (next3->building_flags & BUILDING_HAS_1_TILE) != 0))) { + (next2 == nullptr || !next2->enabled || (next2->building_flags & BUILDING_HAS_1_TILE) != 0 || + next3 == nullptr || !next3->enabled || (next3->building_flags & BUILDING_HAS_1_TILE) != 0))) { hs->enabled = false; - if (filename != NULL) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d as multitile, but no suitable tiles follow. Disabling house.", filename, hs->grf_prop.local_id); + if (filename != nullptr) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d as multitile, but no suitable tiles follow. Disabling house.", filename, hs->grf_prop.local_id); return false; } @@ -8686,13 +8686,13 @@ static bool IsHouseSpecValid(HouseSpec * if (((hs->building_flags & BUILDING_HAS_2_TILES) != 0 && next1->population != 0) || ((hs->building_flags & BUILDING_HAS_4_TILES) != 0 && (next2->population != 0 || next3->population != 0))) { hs->enabled = false; - if (filename != NULL) DEBUG(grf, 1, "FinaliseHouseArray: %s defines multitile house %d with non-zero population on additional tiles. Disabling house.", filename, hs->grf_prop.local_id); + if (filename != nullptr) DEBUG(grf, 1, "FinaliseHouseArray: %s defines multitile house %d with non-zero population on additional tiles. Disabling house.", filename, hs->grf_prop.local_id); return false; } /* Substitute type is also used for override, and having an override with a different size causes crashes. * This check should only be done for NewGRF houses because grf_prop.subst_id is not set for original houses.*/ - if (filename != NULL && (hs->building_flags & BUILDING_HAS_1_TILE) != (HouseSpec::Get(hs->grf_prop.subst_id)->building_flags & BUILDING_HAS_1_TILE)) { + if (filename != nullptr && (hs->building_flags & BUILDING_HAS_1_TILE) != (HouseSpec::Get(hs->grf_prop.subst_id)->building_flags & BUILDING_HAS_1_TILE)) { hs->enabled = false; DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d with different house size then it's substitute type. Disabling house.", filename, hs->grf_prop.local_id); return false; @@ -8701,7 +8701,7 @@ static bool IsHouseSpecValid(HouseSpec * /* Make sure that additional parts of multitile houses are not available. */ if ((hs->building_flags & BUILDING_HAS_1_TILE) == 0 && (hs->building_availability & HZ_ZONALL) != 0 && (hs->building_availability & HZ_CLIMALL) != 0) { hs->enabled = false; - if (filename != NULL) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d without a size but marked it as available. Disabling house.", filename, hs->grf_prop.local_id); + if (filename != nullptr) DEBUG(grf, 1, "FinaliseHouseArray: %s defines house %d without a size but marked it as available. Disabling house.", filename, hs->grf_prop.local_id); return false; } @@ -8720,7 +8720,7 @@ static void EnsureEarlyHouse(HouseZones for (int i = 0; i < NUM_HOUSES; i++) { HouseSpec *hs = HouseSpec::Get(i); - if (hs == NULL || !hs->enabled) continue; + if (hs == nullptr || !hs->enabled) continue; if ((hs->building_availability & bitmask) != bitmask) continue; if (hs->min_year < min_year) min_year = hs->min_year; } @@ -8729,7 +8729,7 @@ static void EnsureEarlyHouse(HouseZones for (int i = 0; i < NUM_HOUSES; i++) { HouseSpec *hs = HouseSpec::Get(i); - if (hs == NULL || !hs->enabled) continue; + if (hs == nullptr || !hs->enabled) continue; if ((hs->building_availability & bitmask) != bitmask) continue; if (hs->min_year == min_year) hs->min_year = 0; } @@ -8754,16 +8754,16 @@ static void FinaliseHouseArray() */ for (GRFFile * const file : _grf_files) { HouseSpec **&housespec = file->housespec; - if (housespec == NULL) continue; + if (housespec == nullptr) continue; for (int i = 0; i < NUM_HOUSES_PER_GRF; i++) { HouseSpec *hs = housespec[i]; - if (hs == NULL) continue; - - const HouseSpec *next1 = (i + 1 < NUM_HOUSES_PER_GRF ? housespec[i + 1] : NULL); - const HouseSpec *next2 = (i + 2 < NUM_HOUSES_PER_GRF ? housespec[i + 2] : NULL); - const HouseSpec *next3 = (i + 3 < NUM_HOUSES_PER_GRF ? housespec[i + 3] : NULL); + if (hs == nullptr) continue; + + const HouseSpec *next1 = (i + 1 < NUM_HOUSES_PER_GRF ? housespec[i + 1] : nullptr); + const HouseSpec *next2 = (i + 2 < NUM_HOUSES_PER_GRF ? housespec[i + 2] : nullptr); + const HouseSpec *next3 = (i + 3 < NUM_HOUSES_PER_GRF ? housespec[i + 3] : nullptr); if (!IsHouseSpecValid(hs, next1, next2, next3, file->filename)) continue; @@ -8773,13 +8773,13 @@ static void FinaliseHouseArray() for (int i = 0; i < NUM_HOUSES; i++) { HouseSpec *hs = HouseSpec::Get(i); - const HouseSpec *next1 = (i + 1 < NUM_HOUSES ? HouseSpec::Get(i + 1) : NULL); - const HouseSpec *next2 = (i + 2 < NUM_HOUSES ? HouseSpec::Get(i + 2) : NULL); - const HouseSpec *next3 = (i + 3 < NUM_HOUSES ? HouseSpec::Get(i + 3) : NULL); + const HouseSpec *next1 = (i + 1 < NUM_HOUSES ? HouseSpec::Get(i + 1) : nullptr); + const HouseSpec *next2 = (i + 2 < NUM_HOUSES ? HouseSpec::Get(i + 2) : nullptr); + const HouseSpec *next3 = (i + 3 < NUM_HOUSES ? HouseSpec::Get(i + 3) : nullptr); /* We need to check all houses again to we are sure that multitile houses * did get consecutive IDs and none of the parts are missing. */ - if (!IsHouseSpecValid(hs, next1, next2, next3, NULL)) { + if (!IsHouseSpecValid(hs, next1, next2, next3, nullptr)) { /* GetHouseNorthPart checks 3 houses that are directly before * it in the house pool. If any of those houses have multi-tile * flags set it assumes it's part of a multitile house. Since @@ -8817,11 +8817,11 @@ static void FinaliseIndustriesArray() for (GRFFile * const file : _grf_files) { IndustrySpec **&industryspec = file->industryspec; IndustryTileSpec **&indtspec = file->indtspec; - if (industryspec != NULL) { + if (industryspec != nullptr) { for (int i = 0; i < NUM_INDUSTRYTYPES_PER_GRF; i++) { IndustrySpec *indsp = industryspec[i]; - if (indsp != NULL && indsp->enabled) { + if (indsp != nullptr && indsp->enabled) { StringID strid; /* process the conversion of text at the end, so to be sure everything will be fine * and available. Check if it does not return undefind marker, which is a very good sign of a @@ -8854,10 +8854,10 @@ static void FinaliseIndustriesArray() } } - if (indtspec != NULL) { + if (indtspec != nullptr) { for (int i = 0; i < NUM_INDUSTRYTILES_PER_GRF; i++) { IndustryTileSpec *indtsp = indtspec[i]; - if (indtsp != NULL) { + if (indtsp != nullptr) { _industile_mngr.SetEntitySpec(indtsp); } } @@ -8866,7 +8866,7 @@ static void FinaliseIndustriesArray() for (uint j = 0; j < NUM_INDUSTRYTYPES; j++) { IndustrySpec *indsp = &_industry_specs[j]; - if (indsp->enabled && indsp->grf_prop.grffile != NULL) { + if (indsp->enabled && indsp->grf_prop.grffile != nullptr) { for (uint i = 0; i < 3; i++) { indsp->conflicting[i] = MapNewGRFIndustryType(indsp->conflicting[i], indsp->grf_prop.grffile->grfid); } @@ -8886,9 +8886,9 @@ static void FinaliseObjectsArray() { for (GRFFile * const file : _grf_files) { ObjectSpec **&objectspec = file->objectspec; - if (objectspec != NULL) { + if (objectspec != nullptr) { for (int i = 0; i < NUM_OBJECTS_PER_GRF; i++) { - if (objectspec[i] != NULL && objectspec[i]->grf_prop.grffile != NULL && objectspec[i]->enabled) { + if (objectspec[i] != nullptr && objectspec[i]->grf_prop.grffile != nullptr && objectspec[i]->enabled) { _object_mngr.SetEntitySpec(objectspec[i]); } } @@ -8905,18 +8905,18 @@ static void FinaliseAirportsArray() { for (GRFFile * const file : _grf_files) { AirportSpec **&airportspec = file->airportspec; - if (airportspec != NULL) { + if (airportspec != nullptr) { for (int i = 0; i < NUM_AIRPORTS_PER_GRF; i++) { - if (airportspec[i] != NULL && airportspec[i]->enabled) { + if (airportspec[i] != nullptr && airportspec[i]->enabled) { _airport_mngr.SetEntitySpec(airportspec[i]); } } } AirportTileSpec **&airporttilespec = file->airtspec; - if (airporttilespec != NULL) { + if (airporttilespec != nullptr) { for (uint i = 0; i < NUM_AIRPORTTILES_PER_GRF; i++) { - if (airporttilespec[i] != NULL && airporttilespec[i]->enabled) { + if (airporttilespec[i] != nullptr && airporttilespec[i]->enabled) { _airporttile_mngr.SetEntitySpec(airporttilespec[i]); } } @@ -8945,27 +8945,27 @@ static void DecodeSpecialSprite(byte *bu * is not in memory and scanning the file every time would be too expensive. * In other stages we skip action 0x10 since it's already dealt with. */ static const SpecialSpriteHandler handlers[][GLS_END] = { - /* 0x00 */ { NULL, SafeChangeInfo, NULL, NULL, ReserveChangeInfo, FeatureChangeInfo, }, + /* 0x00 */ { nullptr, SafeChangeInfo, nullptr, nullptr, ReserveChangeInfo, FeatureChangeInfo, }, /* 0x01 */ { SkipAct1, SkipAct1, SkipAct1, SkipAct1, SkipAct1, NewSpriteSet, }, - /* 0x02 */ { NULL, NULL, NULL, NULL, NULL, NewSpriteGroup, }, - /* 0x03 */ { NULL, GRFUnsafe, NULL, NULL, NULL, FeatureMapSpriteGroup, }, - /* 0x04 */ { NULL, NULL, NULL, NULL, NULL, FeatureNewName, }, + /* 0x02 */ { nullptr, nullptr, nullptr, nullptr, nullptr, NewSpriteGroup, }, + /* 0x03 */ { nullptr, GRFUnsafe, nullptr, nullptr, nullptr, FeatureMapSpriteGroup, }, + /* 0x04 */ { nullptr, nullptr, nullptr, nullptr, nullptr, FeatureNewName, }, /* 0x05 */ { SkipAct5, SkipAct5, SkipAct5, SkipAct5, SkipAct5, GraphicsNew, }, - /* 0x06 */ { NULL, NULL, NULL, CfgApply, CfgApply, CfgApply, }, - /* 0x07 */ { NULL, NULL, NULL, NULL, SkipIf, SkipIf, }, - /* 0x08 */ { ScanInfo, NULL, NULL, GRFInfo, GRFInfo, GRFInfo, }, - /* 0x09 */ { NULL, NULL, NULL, SkipIf, SkipIf, SkipIf, }, + /* 0x06 */ { nullptr, nullptr, nullptr, CfgApply, CfgApply, CfgApply, }, + /* 0x07 */ { nullptr, nullptr, nullptr, nullptr, SkipIf, SkipIf, }, + /* 0x08 */ { ScanInfo, nullptr, nullptr, GRFInfo, GRFInfo, GRFInfo, }, + /* 0x09 */ { nullptr, nullptr, nullptr, SkipIf, SkipIf, SkipIf, }, /* 0x0A */ { SkipActA, SkipActA, SkipActA, SkipActA, SkipActA, SpriteReplace, }, - /* 0x0B */ { NULL, NULL, NULL, GRFLoadError, GRFLoadError, GRFLoadError, }, - /* 0x0C */ { NULL, NULL, NULL, GRFComment, NULL, GRFComment, }, - /* 0x0D */ { NULL, SafeParamSet, NULL, ParamSet, ParamSet, ParamSet, }, - /* 0x0E */ { NULL, SafeGRFInhibit, NULL, GRFInhibit, GRFInhibit, GRFInhibit, }, - /* 0x0F */ { NULL, GRFUnsafe, NULL, FeatureTownName, NULL, NULL, }, - /* 0x10 */ { NULL, NULL, DefineGotoLabel, NULL, NULL, NULL, }, + /* 0x0B */ { nullptr, nullptr, nullptr, GRFLoadError, GRFLoadError, GRFLoadError, }, + /* 0x0C */ { nullptr, nullptr, nullptr, GRFComment, nullptr, GRFComment, }, + /* 0x0D */ { nullptr, SafeParamSet, nullptr, ParamSet, ParamSet, ParamSet, }, + /* 0x0E */ { nullptr, SafeGRFInhibit, nullptr, GRFInhibit, GRFInhibit, GRFInhibit, }, + /* 0x0F */ { nullptr, GRFUnsafe, nullptr, FeatureTownName, nullptr, nullptr, }, + /* 0x10 */ { nullptr, nullptr, DefineGotoLabel, nullptr, nullptr, nullptr, }, /* 0x11 */ { SkipAct11,GRFUnsafe, SkipAct11, GRFSound, SkipAct11, GRFSound, }, /* 0x12 */ { SkipAct12, SkipAct12, SkipAct12, SkipAct12, SkipAct12, LoadFontGlyph, }, - /* 0x13 */ { NULL, NULL, NULL, NULL, NULL, TranslateGRFStrings, }, - /* 0x14 */ { StaticGRFInfo, NULL, NULL, NULL, NULL, NULL, }, + /* 0x13 */ { nullptr, nullptr, nullptr, nullptr, nullptr, TranslateGRFStrings, }, + /* 0x14 */ { StaticGRFInfo, nullptr, nullptr, nullptr, nullptr, nullptr, }, }; GRFLocation location(_cur.grfconfig->ident.grfid, _cur.nfo_line); @@ -8996,7 +8996,7 @@ static void DecodeSpecialSprite(byte *bu grfmsg(2, "DecodeSpecialSprite: Unexpected import block, skipping"); } else if (action >= lengthof(handlers)) { grfmsg(7, "DecodeSpecialSprite: Skipping unknown action 0x%02X", action); - } else if (handlers[action][stage] == NULL) { + } else if (handlers[action][stage] == nullptr) { grfmsg(7, "DecodeSpecialSprite: Skipping action 0x%02X in stage %d", action, stage); } else { grfmsg(7, "DecodeSpecialSprite: Handling action 0x%02X in stage %d", action, stage); @@ -9057,7 +9057,7 @@ void LoadNewGRFFile(GRFConfig *config, u * processed once at initialization. */ if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) { _cur.grffile = GetFileByFilename(filename); - if (_cur.grffile == NULL) usererror("File '%s' lost in cache.\n", filename); + if (_cur.grffile == nullptr) usererror("File '%s' lost in cache.\n", filename); if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return; if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return; } @@ -9212,7 +9212,7 @@ static void FinalisePriceBaseMultipliers if (override == 0) continue; GRFFile *dest = GetFileByGRFID(override); - if (dest == NULL) continue; + if (dest == nullptr) continue; grf_overrides[i] = find_index(_grf_files, dest); assert(grf_overrides[i] >= 0); @@ -9437,7 +9437,7 @@ void LoadNewGRF(uint load_index, uint fi * be reset, the NewGRF would remain disabled even though it should * have been enabled. */ - for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (c->status != GCS_NOT_FOUND) c->status = GCS_UNKNOWN; } @@ -9449,7 +9449,7 @@ void LoadNewGRF(uint load_index, uint fi for (GrfLoadingStage stage = GLS_LABELSCAN; stage <= GLS_ACTIVATION; stage++) { /* Set activated grfs back to will-be-activated between reservation- and activation-stage. * This ensures that action7/9 conditions 0x06 - 0x0A work correctly. */ - for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (c->status == GCS_ACTIVATED) c->status = GCS_INITIALISED; } @@ -9468,7 +9468,7 @@ void LoadNewGRF(uint load_index, uint fi uint num_non_static = 0; _cur.stage = stage; - for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue; if (stage > GLS_INIT && HasBit(c->flags, GCF_INIT_ONLY)) continue; diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -21,7 +21,7 @@ /** Resolver for the airport scope. */ struct AirportScopeResolver : public ScopeResolver { - struct Station *st; ///< Station of the airport for which the callback is run, or \c NULL for build gui. + struct Station *st; ///< Station of the airport for which the callback is run, or \c nullptr for build gui. byte airport_id; ///< Type of airport for which the callback is run. byte layout; ///< Layout of the airport to build. TileIndex tile; ///< Tile for the callback, only valid for airporttile callbacks. @@ -30,7 +30,7 @@ struct AirportScopeResolver : public Sco * Constructor of the scope resolver for an airport. * @param ro Surrounding resolver. * @param tile %Tile for the callback, only valid for airporttile callbacks. - * @param st %Station of the airport for which the callback is run, or \c NULL for build gui. + * @param st %Station of the airport for which the callback is run, or \c nullptr for build gui. * @param airport_id Type of airport for which the callback is run. * @param layout Layout of the airport to build. */ @@ -202,14 +202,14 @@ void AirportOverrideManager::SetEntitySp case 0x40: return this->layout; } - if (this->st == NULL) { + if (this->st == nullptr) { *available = false; return UINT_MAX; } switch (variable) { /* Get a variable from the persistent storage */ - case 0x7C: return (this->st->airport.psa != NULL) ? this->st->airport.psa->GetValue(parameter) : 0; + case 0x7C: return (this->st->airport.psa != nullptr) ? this->st->airport.psa->GetValue(parameter) : 0; case 0xF0: return this->st->facilities; case 0xFA: return Clamp(this->st->build_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535); @@ -225,12 +225,12 @@ void AirportOverrideManager::SetEntitySp if (group->num_loaded > 0) return group->loaded[0]; if (group->num_loading > 0) return group->loading[0]; - return NULL; + return nullptr; } /* virtual */ uint32 AirportScopeResolver::GetRandomBits() const { - return this->st == NULL ? 0 : this->st->random_bits; + return this->st == nullptr ? 0 : this->st->random_bits; } /** @@ -240,14 +240,14 @@ void AirportOverrideManager::SetEntitySp */ /* virtual */ void AirportScopeResolver::StorePSA(uint pos, int32 value) { - if (this->st == NULL) return; + if (this->st == nullptr) return; - if (this->st->airport.psa == NULL) { + if (this->st->airport.psa == nullptr) { /* There is no need to create a storage if the value is zero. */ if (value == 0) return; /* Create storage on first modification. */ - uint32 grfid = (this->ro.grffile != NULL) ? this->ro.grffile->grfid : 0; + uint32 grfid = (this->ro.grffile != nullptr) ? this->ro.grffile->grfid : 0; assert(PersistentStorage::CanAllocateItem()); this->st->airport.psa = new PersistentStorage(grfid, GSF_AIRPORTS, this->st->airport.tile); } @@ -257,7 +257,7 @@ void AirportOverrideManager::SetEntitySp /** * Constructor of the airport resolver. * @param tile %Tile for the callback, only valid for airporttile callbacks. - * @param st %Station of the airport for which the callback is run, or \c NULL for build gui. + * @param st %Station of the airport for which the callback is run, or \c nullptr for build gui. * @param airport_id Type of airport for which the callback is run. * @param layout Layout of the airport to build. * @param callback Callback ID. @@ -273,9 +273,9 @@ AirportResolverObject::AirportResolverOb SpriteID GetCustomAirportSprite(const AirportSpec *as, byte layout) { - AirportResolverObject object(INVALID_TILE, NULL, as->GetIndex(), layout); + AirportResolverObject object(INVALID_TILE, nullptr, as->GetIndex(), layout); const SpriteGroup *group = object.Resolve(); - if (group == NULL) return as->preview_sprite; + if (group == nullptr) return as->preview_sprite; return group->GetResult(); } @@ -295,7 +295,7 @@ uint16 GetAirportCallback(CallbackID cal */ StringID GetAirportTextCallback(const AirportSpec *as, byte layout, uint16 callback) { - AirportResolverObject object(INVALID_TILE, NULL, as->GetIndex(), layout, (CallbackID)callback); + AirportResolverObject object(INVALID_TILE, nullptr, as->GetIndex(), layout, (CallbackID)callback); uint16 cb_res = object.ResolveCallback(); if (cb_res == CALLBACK_FAILED || cb_res == 0x400) return STR_UNDEFINED; if (cb_res > 0x400) { diff --git a/src/newgrf_airporttiles.cpp b/src/newgrf_airporttiles.cpp --- a/src/newgrf_airporttiles.cpp +++ b/src/newgrf_airporttiles.cpp @@ -149,7 +149,7 @@ static uint32 GetAirportTileIDAtOffset(T } } /* Not an 'old type' tile */ - if (ats->grf_prop.spritegroup[0] != NULL) { // tile has a spritegroup ? + if (ats->grf_prop.spritegroup[0] != nullptr) { // tile has a spritegroup ? if (ats->grf_prop.grffile->grfid == cur_grfid) { // same airport, same grf ? return ats->grf_prop.local_id; } else { @@ -162,7 +162,7 @@ static uint32 GetAirportTileIDAtOffset(T /* virtual */ uint32 AirportTileScopeResolver::GetVariable(byte variable, uint32 parameter, bool *available) const { - assert(this->st != NULL); + assert(this->st != nullptr); extern uint32 GetRelativePosition(TileIndex tile, TileIndex ind_tile); @@ -203,14 +203,14 @@ static uint32 GetAirportTileIDAtOffset(T /* virtual */ uint32 AirportTileScopeResolver::GetRandomBits() const { - return (this->st == NULL ? 0 : this->st->random_bits) | (this->tile == INVALID_TILE ? 0 : GetStationTileRandomBits(this->tile) << 16); + return (this->st == nullptr ? 0 : this->st->random_bits) | (this->tile == INVALID_TILE ? 0 : GetStationTileRandomBits(this->tile) << 16); } /** * Constructor of the resolver for airport tiles. * @param ats Specification of the airport tiles. * @param tile %Tile for the callback, only valid for airporttile callbacks. - * @param st Station of the airport for which the callback is run, or \c NULL for build gui. + * @param st Station of the airport for which the callback is run, or \c nullptr for build gui. * @param callback Callback ID. * @param callback_param1 First parameter (var 10) of the callback. * @param callback_param2 Second parameter (var 18) of the callback. @@ -230,7 +230,7 @@ uint16 GetAirportTileCallback(CallbackID static void AirportDrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, byte colour, StationGfx gfx) { - const DrawTileSprites *dts = group->ProcessRegisters(NULL); + const DrawTileSprites *dts = group->ProcessRegisters(nullptr); SpriteID image = dts->ground.sprite; SpriteID pal = dts->ground.pal; @@ -261,7 +261,7 @@ bool DrawNewAirportTile(TileInfo *ti, St AirportTileResolverObject object(airts, ti->tile, st); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->type != SGT_TILELAYOUT) { + if (group == nullptr || group->type != SGT_TILELAYOUT) { return false; } @@ -282,7 +282,7 @@ struct AirportTileAnimationBase : public void AnimateAirportTile(TileIndex tile) { const AirportTileSpec *ats = AirportTileSpec::GetByTile(tile); - if (ats == NULL) return; + if (ats == nullptr) return; AirportTileAnimationBase::AnimateTile(ats, Station::GetByTile(tile), tile, HasBit(ats->animation_special_flags, 0)); } diff --git a/src/newgrf_airporttiles.h b/src/newgrf_airporttiles.h --- a/src/newgrf_airporttiles.h +++ b/src/newgrf_airporttiles.h @@ -21,7 +21,7 @@ /** Scope resolver for handling the tiles of an airport. */ struct AirportTileScopeResolver : public ScopeResolver { - struct Station *st; ///< %Station of the airport for which the callback is run, or \c NULL for build gui. + struct Station *st; ///< %Station of the airport for which the callback is run, or \c nullptr for build gui. byte airport_id; ///< Type of airport for which the callback is run. TileIndex tile; ///< Tile for the callback, only valid for airporttile callbacks. @@ -29,12 +29,12 @@ struct AirportTileScopeResolver : public * Constructor of the scope resolver specific for airport tiles. * @param ats Specification of the airport tiles. * @param tile %Tile for the callback, only valid for airporttile callbacks. - * @param st Station of the airport for which the callback is run, or \c NULL for build gui. + * @param st Station of the airport for which the callback is run, or \c nullptr for build gui. */ AirportTileScopeResolver(ResolverObject &ro, const AirportTileSpec *ats, TileIndex tile, Station *st) : ScopeResolver(ro), st(st), tile(tile) { - assert(st != NULL); + assert(st != nullptr); this->airport_id = st->airport.type; } diff --git a/src/newgrf_animation_base.h b/src/newgrf_animation_base.h --- a/src/newgrf_animation_base.h +++ b/src/newgrf_animation_base.h @@ -39,7 +39,7 @@ struct AnimationBase { */ static void AnimateTile(const Tspec *spec, Tobj *obj, TileIndex tile, bool random_animation, Textra extra_data = 0) { - assert(spec != NULL); + assert(spec != nullptr); /* Acquire the animation speed from the NewGRF. */ uint8 animation_speed = spec->animation.speed; diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -108,7 +108,7 @@ struct CanalResolverObject : public Reso /* virtual */ const SpriteGroup *CanalResolverObject::ResolveReal(const RealSpriteGroup *group) const { - if (group->num_loaded == 0) return NULL; + if (group->num_loaded == 0) return nullptr; return group->loaded[0]; } @@ -138,7 +138,7 @@ SpriteID GetCanalSprite(CanalFeature fea { CanalResolverObject object(feature, tile); const SpriteGroup *group = object.Resolve(); - if (group == NULL) return 0; + if (group == nullptr) return 0; return group->GetResult(); } diff --git a/src/newgrf_cargo.cpp b/src/newgrf_cargo.cpp --- a/src/newgrf_cargo.cpp +++ b/src/newgrf_cargo.cpp @@ -29,7 +29,7 @@ struct CargoResolverObject : public Reso if (group->num_loaded > 0) return group->loaded[0]; if (group->num_loading > 0) return group->loading[0]; - return NULL; + return nullptr; } /** @@ -54,7 +54,7 @@ SpriteID GetCustomCargoSprite(const Carg { CargoResolverObject object(cs); const SpriteGroup *group = object.Resolve(); - if (group == NULL) return 0; + if (group == nullptr) return 0; return group->GetResult(); } diff --git a/src/newgrf_class_func.h b/src/newgrf_class_func.h --- a/src/newgrf_class_func.h +++ b/src/newgrf_class_func.h @@ -34,7 +34,7 @@ DEFINE_NEWGRF_CLASS_METHOD(void)::ResetC this->ui_count = 0; free(this->spec); - this->spec = NULL; + this->spec = nullptr; } /** Reset the classes, i.e. clear everything. */ @@ -154,7 +154,7 @@ DEFINE_NEWGRF_CLASS_METHOD(Tid)::GetUICl DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetSpec(uint index) const { /* If the custom spec isn't defined any more, then the GRF file probably was not loaded. */ - return index < this->GetSpecCount() ? this->spec[index] : NULL; + return index < this->GetSpecCount() ? this->spec[index] : nullptr; } /** @@ -191,7 +191,7 @@ DEFINE_NEWGRF_CLASS_METHOD(int)::GetUIFr * Retrieve a spec by GRF location. * @param grfid GRF ID of spec. * @param local_id Index within GRF file of spec. - * @param index Pointer to return the index of the spec in its class. If NULL then not used. + * @param index Pointer to return the index of the spec in its class. If nullptr then not used. * @return The spec. */ DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetByGrf(uint32 grfid, byte local_id, int *index) @@ -201,15 +201,15 @@ DEFINE_NEWGRF_CLASS_METHOD(const Tspec * for (Tid i = (Tid)0; i < Tmax; i++) { for (j = 0; j < classes[i].count; j++) { const Tspec *spec = classes[i].spec[j]; - if (spec == NULL) continue; + if (spec == nullptr) continue; if (spec->grf_prop.grffile->grfid == grfid && spec->grf_prop.local_id == local_id) { - if (index != NULL) *index = j; + if (index != nullptr) *index = j; return spec; } } } - return NULL; + return nullptr; } #undef DEFINE_NEWGRF_CLASS_METHOD diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -235,9 +235,9 @@ uint16 IndustryOverrideManager::AddEntit const IndustrySpec *inds = GetIndustrySpec(id); /* This industry must be one that is not available(enabled), mostly because of climate. - * And it must not already be used by a grf (grffile == NULL). + * And it must not already be used by a grf (grffile == nullptr). * So reserve this slot here, as it is the chosen one */ - if (!inds->enabled && inds->grf_prop.grffile == NULL) { + if (!inds->enabled && inds->grf_prop.grffile == nullptr) { EntityIDMapping *map = &mapping_ID[id]; if (map->entity_id == 0 && map->grfid == 0) { @@ -463,13 +463,13 @@ uint32 GetNearbyTileInformation(TileInde /** * Returns company information like in vehicle var 43 or station var 43. * @param owner Owner of the object. - * @param l Livery of the object; NULL to use default. + * @param l Livery of the object; nullptr to use default. * @return NewGRF company information. */ uint32 GetCompanyInfo(CompanyID owner, const Livery *l) { - if (l == NULL && Company::IsValidID(owner)) l = &Company::Get(owner)->livery[LS_DEFAULT]; - return owner | (Company::IsValidAiID(owner) ? 0x10000 : 0) | (l != NULL ? (l->colour1 << 24) | (l->colour2 << 28) : 0); + if (l == nullptr && Company::IsValidID(owner)) l = &Company::Get(owner)->livery[LS_DEFAULT]; + return owner | (Company::IsValidAiID(owner) ? 0x10000 : 0) | (l != nullptr ? (l->colour1 << 24) | (l->colour2 << 28) : 0); } /** @@ -587,8 +587,8 @@ bool Convert8bitBooleanCallback(const GR */ void NewGRFSpriteLayout::Clone(const DrawTileSeqStruct *source) { - assert(this->seq == NULL); - assert(source != NULL); + assert(this->seq == nullptr); + assert(source != nullptr); size_t count = 1; // 1 for the terminator const DrawTileSeqStruct *element; @@ -607,7 +607,7 @@ void NewGRFSpriteLayout::Clone(const New { this->Clone((const DrawTileSprites*)source); - if (source->registers != NULL) { + if (source->registers != nullptr) { size_t count = 1; // 1 for the ground sprite const DrawTileSeqStruct *element; foreach_draw_tile_seq(element, source->seq) count++; @@ -625,7 +625,7 @@ void NewGRFSpriteLayout::Clone(const New */ void NewGRFSpriteLayout::Allocate(uint num_sprites) { - assert(this->seq == NULL); + assert(this->seq == nullptr); DrawTileSeqStruct *sprites = CallocT(num_sprites + 1); sprites[num_sprites].MakeTerminator(); @@ -637,8 +637,8 @@ void NewGRFSpriteLayout::Allocate(uint n */ void NewGRFSpriteLayout::AllocateRegisters() { - assert(this->seq != NULL); - assert(this->registers == NULL); + assert(this->seq != nullptr); + assert(this->registers == nullptr); size_t count = 1; // 1 for the ground sprite const DrawTileSeqStruct *element; @@ -685,7 +685,7 @@ uint32 NewGRFSpriteLayout::PrepareLayout bool ground = true; foreach_draw_tile_seq(result, result_seq.data()) { TileLayoutFlags flags = TLF_NOTHING; - if (regs != NULL) flags = regs->flags; + if (regs != nullptr) flags = regs->flags; /* Record var10 value for the sprite */ if (HasBit(result->image.sprite, SPRITE_MODIFIER_CUSTOM_SPRITE) || (flags & TLF_SPRITE_REG_FLAGS)) { @@ -697,7 +697,7 @@ uint32 NewGRFSpriteLayout::PrepareLayout if (!(flags & TLF_SPRITE)) { if (HasBit(result->image.sprite, SPRITE_MODIFIER_CUSTOM_SPRITE)) { result->image.sprite += ground ? newgrf_ground_offset : newgrf_offset; - if (constr_stage > 0 && regs != NULL) result->image.sprite += GetConstructionStageOffset(constr_stage, regs->max_sprite_offset); + if (constr_stage > 0 && regs != nullptr) result->image.sprite += GetConstructionStageOffset(constr_stage, regs->max_sprite_offset); } else { result->image.sprite += orig_offset; } @@ -713,12 +713,12 @@ uint32 NewGRFSpriteLayout::PrepareLayout if (!(flags & TLF_PALETTE)) { if (HasBit(result->image.pal, SPRITE_MODIFIER_CUSTOM_SPRITE)) { result->image.sprite += ground ? newgrf_ground_offset : newgrf_offset; - if (constr_stage > 0 && regs != NULL) result->image.sprite += GetConstructionStageOffset(constr_stage, regs->max_palette_offset); + if (constr_stage > 0 && regs != nullptr) result->image.sprite += GetConstructionStageOffset(constr_stage, regs->max_palette_offset); } } ground = false; - if (regs != NULL) regs++; + if (regs != nullptr) regs++; } return var10_values; @@ -739,7 +739,7 @@ void NewGRFSpriteLayout::ProcessRegister bool ground = true; foreach_draw_tile_seq(result, result_seq.data()) { TileLayoutFlags flags = TLF_NOTHING; - if (regs != NULL) flags = regs->flags; + if (regs != nullptr) flags = regs->flags; /* Is the sprite or bounding box affected by an action-1-2-3 chain? */ if (HasBit(result->image.sprite, SPRITE_MODIFIER_CUSTOM_SPRITE) || (flags & TLF_SPRITE_REG_FLAGS)) { @@ -794,6 +794,6 @@ void NewGRFSpriteLayout::ProcessRegister } ground = false; - if (regs != NULL) regs++; + if (regs != nullptr) regs++; } } diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -132,7 +132,7 @@ struct NewGRFSpriteLayout : ZeroedMemory */ void Clone(const DrawTileSprites *source) { - assert(source != NULL && this != source); + assert(source != nullptr && this != source); this->ground = source->ground; this->Clone(source->seq); } @@ -151,7 +151,7 @@ struct NewGRFSpriteLayout : ZeroedMemory */ bool NeedsPreprocessing() const { - return this->registers != NULL; + return this->registers != nullptr; } uint32 PrepareLayout(uint32 orig_offset, uint32 newgrf_ground_offset, uint32 newgrf_offset, uint constr_stage, bool separate_ground) const; @@ -298,7 +298,7 @@ extern ObjectOverrideManager _object_mng uint32 GetTerrainType(TileIndex tile, TileContext context = TCX_NORMAL); TileIndex GetNearbyTile(byte parameter, TileIndex tile, bool signed_offsets = true, Axis axis = INVALID_AXIS); uint32 GetNearbyTileInformation(TileIndex tile, bool grf_version8); -uint32 GetCompanyInfo(CompanyID owner, const struct Livery *l = NULL); +uint32 GetCompanyInfo(CompanyID owner, const struct Livery *l = nullptr); CommandCost GetErrorMessageFromLocationCallbackResult(uint16 cb_res, const GRFFile *grffile, StringID default_error); void ErrorUnknownCallbackResult(uint32 grfid, uint16 cbid, uint16 cb_res); diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -31,7 +31,7 @@ /** Create a new GRFTextWrapper. */ GRFTextWrapper::GRFTextWrapper() : - text(NULL) + text(nullptr) { } @@ -52,7 +52,7 @@ GRFConfig::GRFConfig(const char *filenam url(new GRFTextWrapper()), num_valid_params(lengthof(param)) { - if (filename != NULL) this->filename = stredup(filename); + if (filename != nullptr) this->filename = stredup(filename); this->name->AddRef(); this->info->AddRef(); this->url->AddRef(); @@ -80,14 +80,14 @@ GRFConfig::GRFConfig(const GRFConfig &co { MemCpyT(this->original_md5sum, config.original_md5sum, lengthof(this->original_md5sum)); MemCpyT(this->param, config.param, lengthof(this->param)); - if (config.filename != NULL) this->filename = stredup(config.filename); + if (config.filename != nullptr) this->filename = stredup(config.filename); this->name->AddRef(); this->info->AddRef(); this->url->AddRef(); - if (config.error != NULL) this->error = new GRFError(*config.error); + if (config.error != nullptr) this->error = new GRFError(*config.error); for (uint i = 0; i < config.param_info.size(); i++) { - if (config.param_info[i] == NULL) { - this->param_info.push_back(NULL); + if (config.param_info[i] == nullptr) { + this->param_info.push_back(nullptr); } else { this->param_info.push_back(new GRFParameterInfo(*config.param_info[i])); } @@ -158,7 +158,7 @@ void GRFConfig::SetParameterDefaults() if (!this->has_param_defaults) return; for (uint i = 0; i < this->param_info.size(); i++) { - if (this->param_info[i] == NULL) continue; + if (this->param_info[i] == nullptr) continue; this->param_info[i]->SetValue(this, this->param_info[i]->def_value); } } @@ -185,7 +185,7 @@ void GRFConfig::SetSuitablePalette() void GRFConfig::FinalizeParameterInfo() { for (GRFParameterInfo *info : this->param_info) { - if (info == NULL) continue; + if (info == nullptr) continue; info->Finalize(); } } @@ -218,8 +218,8 @@ GRFError::GRFError(const GRFError &error message(error.message), severity(error.severity) { - if (error.custom_message != NULL) this->custom_message = stredup(error.custom_message); - if (error.data != NULL) this->data = stredup(error.data); + if (error.custom_message != nullptr) this->custom_message = stredup(error.custom_message); + if (error.data != nullptr) this->data = stredup(error.data); memcpy(this->param_value, error.param_value, sizeof(this->param_value)); } @@ -234,8 +234,8 @@ GRFError::~GRFError() * @param nr The newgrf parameter that is changed. */ GRFParameterInfo::GRFParameterInfo(uint nr) : - name(NULL), - desc(NULL), + name(nullptr), + desc(nullptr), type(PTYPE_UINT_ENUM), min_value(0), max_value(UINT32_MAX), @@ -331,9 +331,9 @@ void GRFParameterInfo::Finalize() */ bool UpdateNewGRFConfigPalette(int32 p1) { - for (GRFConfig *c = _grfconfig_newgame; c != NULL; c = c->next) c->SetSuitablePalette(); - for (GRFConfig *c = _grfconfig_static; c != NULL; c = c->next) c->SetSuitablePalette(); - for (GRFConfig *c = _all_grfs; c != NULL; c = c->next) c->SetSuitablePalette(); + for (GRFConfig *c = _grfconfig_newgame; c != nullptr; c = c->next) c->SetSuitablePalette(); + for (GRFConfig *c = _grfconfig_static; c != nullptr; c = c->next) c->SetSuitablePalette(); + for (GRFConfig *c = _all_grfs; c != nullptr; c = c->next) c->SetSuitablePalette(); return true; } @@ -381,7 +381,7 @@ static bool CalcGRFMD5Sum(GRFConfig *con /* open the file */ f = FioFOpenFile(config->filename, "rb", subdir, &size); - if (f == NULL) return false; + if (f == nullptr) return false; long start = ftell(f); size = min(size, GRFGetSizeOfDataSection(f)); @@ -441,16 +441,16 @@ bool FillGRFDetails(GRFConfig *config, b /** * Clear a GRF Config list, freeing all nodes. * @param config Start of the list. - * @post \a config is set to \c NULL. + * @post \a config is set to \c nullptr. */ void ClearGRFConfigList(GRFConfig **config) { GRFConfig *c, *next; - for (c = *config; c != NULL; c = next) { + for (c = *config; c != nullptr; c = next) { next = c->next; delete c; } - *config = NULL; + *config = nullptr; } @@ -465,7 +465,7 @@ GRFConfig **CopyGRFConfigList(GRFConfig { /* Clear destination as it will be overwritten */ ClearGRFConfigList(dst); - for (; src != NULL; src = src->next) { + for (; src != nullptr; src = src->next) { GRFConfig *c = new GRFConfig(*src); ClrBit(c->flags, GCF_INIT_ONLY); @@ -496,9 +496,9 @@ static void RemoveDuplicatesFromGRFConfi GRFConfig *prev; GRFConfig *cur; - if (list == NULL) return; + if (list == nullptr) return; - for (prev = list, cur = list->next; cur != NULL; prev = cur, cur = cur->next) { + for (prev = list, cur = list->next; cur != nullptr; prev = cur, cur = cur->next) { if (cur->ident.grfid != list->ident.grfid) continue; prev->next = cur->next; @@ -516,7 +516,7 @@ static void RemoveDuplicatesFromGRFConfi void AppendStaticGRFConfigs(GRFConfig **dst) { GRFConfig **tail = dst; - while (*tail != NULL) tail = &(*tail)->next; + while (*tail != nullptr) tail = &(*tail)->next; CopyGRFConfigList(tail, _grfconfig_static, false); RemoveDuplicatesFromGRFConfigList(*dst); @@ -530,7 +530,7 @@ void AppendStaticGRFConfigs(GRFConfig ** void AppendToGRFConfigList(GRFConfig **dst, GRFConfig *el) { GRFConfig **tail = dst; - while (*tail != NULL) tail = &(*tail)->next; + while (*tail != nullptr) tail = &(*tail)->next; *tail = el; RemoveDuplicatesFromGRFConfigList(*dst); @@ -560,15 +560,15 @@ GRFListCompatibility IsGoodGRFConfigList { GRFListCompatibility res = GLC_ALL_GOOD; - for (GRFConfig *c = grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = grfconfig; c != nullptr; c = c->next) { const GRFConfig *f = FindGRFConfig(c->ident.grfid, FGCM_EXACT, c->ident.md5sum); - if (f == NULL || HasBit(f->flags, GCF_INVALID)) { + if (f == nullptr || HasBit(f->flags, GCF_INVALID)) { char buf[256]; /* If we have not found the exactly matching GRF try to find one with the * same grfid, as it most likely is compatible */ - f = FindGRFConfig(c->ident.grfid, FGCM_COMPATIBLE, NULL, c->version); - if (f != NULL) { + f = FindGRFConfig(c->ident.grfid, FGCM_COMPATIBLE, nullptr, c->version); + if (f != nullptr) { md5sumToString(buf, lastof(buf), c->ident.md5sum); DEBUG(grf, 1, "NewGRF %08X (%s) not found; checksum %s. Compatibility mode on", BSWAP32(c->ident.grfid), c->filename, buf); if (!HasBit(c->flags, GCF_COMPATIBLE)) { @@ -606,14 +606,14 @@ compatible_grf: c->info->Release(); c->info = f->name; c->info->AddRef(); - c->error = NULL; + c->error = nullptr; c->version = f->version; c->min_loadable_version = f->min_loadable_version; c->num_valid_params = f->num_valid_params; c->has_param_defaults = f->has_param_defaults; for (uint i = 0; i < f->param_info.size(); i++) { - if (f->param_info[i] == NULL) { - c->param_info.push_back(NULL); + if (f->param_info[i] == nullptr) { + c->param_info.push_back(nullptr); } else { c->param_info.push_back(new GRFParameterInfo(*f->param_info[i])); } @@ -655,14 +655,14 @@ bool GRFFileScanner::AddFile(const char bool added = true; if (FillGRFDetails(c, false)) { - if (_all_grfs == NULL) { + if (_all_grfs == nullptr) { _all_grfs = c; } else { /* Insert file into list at a position determined by its * name, so the list is sorted as we go along */ GRFConfig **pd, *d; bool stop = false; - for (pd = &_all_grfs; (d = *pd) != NULL; pd = &d->next) { + for (pd = &_all_grfs; (d = *pd) != nullptr; pd = &d->next) { if (c->ident.grfid == d->ident.grfid && memcmp(c->ident.md5sum, d->ident.md5sum, sizeof(c->ident.md5sum)) == 0) added = false; /* Because there can be multiple grfs with the same name, make sure we checked all grfs with the same name, * before inserting the entry. So insert a new grf at the end of all grfs with the same name, instead of @@ -687,9 +687,9 @@ bool GRFFileScanner::AddFile(const char _modal_progress_work_mutex.unlock(); _modal_progress_paint_mutex.lock(); - const char *name = NULL; - if (c->name != NULL) name = GetGRFStringFromGRFText(c->name->text); - if (name == NULL) name = c->filename; + const char *name = nullptr; + if (c->name != nullptr) name = GetGRFStringFromGRFText(c->name->text); + if (name == nullptr) name = c->filename; UpdateNewGRFScanStatus(this->num_scanned, name); _modal_progress_work_mutex.lock(); @@ -736,14 +736,14 @@ void DoScanNewGRFFiles(NewGRFScanCallbac uint num = GRFFileScanner::DoScan(); DEBUG(grf, 1, "Scan complete, found %d files", num); - if (num != 0 && _all_grfs != NULL) { + if (num != 0 && _all_grfs != nullptr) { /* Sort the linked list using quicksort. * For that we first have to make an array, then sort and * then remake the linked list. */ GRFConfig **to_sort = MallocT(num); uint i = 0; - for (GRFConfig *p = _all_grfs; p != NULL; p = p->next, i++) { + for (GRFConfig *p = _all_grfs; p != nullptr; p = p->next, i++) { to_sort[i] = p; } /* Number of files is not necessarily right */ @@ -754,7 +754,7 @@ void DoScanNewGRFFiles(NewGRFScanCallbac for (i = 1; i < num; i++) { to_sort[i - 1]->next = to_sort[i]; } - to_sort[num - 1]->next = NULL; + to_sort[num - 1]->next = nullptr; _all_grfs = to_sort[0]; free(to_sort); @@ -768,7 +768,7 @@ void DoScanNewGRFFiles(NewGRFScanCallbac /* Yes... these are the NewGRF windows */ InvalidateWindowClassesData(WC_SAVELOAD, 0, true); InvalidateWindowData(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE, GOID_NEWGRF_RESCANNED, true); - if (callback != NULL) callback->OnNewGRFsScanned(); + if (callback != nullptr) callback->OnNewGRFsScanned(); DeleteWindowByClass(WC_MODAL_PROGRESS); SetModalProgress(false); @@ -786,14 +786,14 @@ void ScanNewGRFFiles(NewGRFScanCallback /* Only then can we really start, especially by marking the whole screen dirty. Get those other windows hidden!. */ MarkWholeScreenDirty(); - if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !StartNewThread(NULL, "ottd:newgrf-scan", &DoScanNewGRFFiles, (NewGRFScanCallback *)callback)) { // Without the seemingly superfluous cast, strange compiler errors ensue. + if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !StartNewThread(nullptr, "ottd:newgrf-scan", &DoScanNewGRFFiles, (NewGRFScanCallback *)callback)) { // Without the seemingly superfluous cast, strange compiler errors ensue. _modal_progress_work_mutex.unlock(); _modal_progress_paint_mutex.unlock(); DoScanNewGRFFiles(callback); _modal_progress_paint_mutex.lock(); _modal_progress_work_mutex.lock(); } else { - UpdateNewGRFScanStatus(0, NULL); + UpdateNewGRFScanStatus(0, nullptr); } } @@ -803,23 +803,23 @@ void ScanNewGRFFiles(NewGRFScanCallback * @param mode Restrictions for matching grfs * @param md5sum Expected MD5 sum * @param desired_version Requested version - * @return The matching grf, if it exists in #_all_grfs, else \c NULL. + * @return The matching grf, if it exists in #_all_grfs, else \c nullptr. */ const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum, uint32 desired_version) { - assert((mode == FGCM_EXACT) != (md5sum == NULL)); - const GRFConfig *best = NULL; - for (const GRFConfig *c = _all_grfs; c != NULL; c = c->next) { + assert((mode == FGCM_EXACT) != (md5sum == nullptr)); + const GRFConfig *best = nullptr; + for (const GRFConfig *c = _all_grfs; c != nullptr; c = c->next) { /* if md5sum is set, we look for an exact match and continue if not found */ if (!c->ident.HasGrfIdentifier(grfid, md5sum)) continue; /* return it, if the exact same newgrf is found, or if we do not care about finding "the best" */ - if (md5sum != NULL || mode == FGCM_ANY) return c; + if (md5sum != nullptr || mode == FGCM_ANY) return c; /* Skip incompatible stuff, unless explicitly allowed */ if (mode != FGCM_NEWEST && HasBit(c->flags, GCF_INVALID)) continue; /* check version compatibility */ if (mode == FGCM_COMPATIBLE && (c->version < desired_version || c->min_loadable_version > desired_version)) continue; /* remember the newest one as "the best" */ - if (best == NULL || c->version > best->version) best = c; + if (best == nullptr || c->version > best->version) best = c; } return best; @@ -845,21 +845,21 @@ struct UnknownGRF : public GRFIdentifier * @param create whether to create a new GRFConfig if the GRFConfig did not * exist in the fake list of GRFConfigs. * @return The GRFTextWrapper of the name of the GRFConfig with the given GRF ID - * and MD5 checksum or NULL when it does not exist and create is false. + * and MD5 checksum or nullptr when it does not exist and create is false. * This value must NEVER be freed by the caller. */ GRFTextWrapper *FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create) { UnknownGRF *grf; - static UnknownGRF *unknown_grfs = NULL; + static UnknownGRF *unknown_grfs = nullptr; - for (grf = unknown_grfs; grf != NULL; grf = grf->next) { + for (grf = unknown_grfs; grf != nullptr; grf = grf->next) { if (grf->grfid == grfid) { if (memcmp(md5sum, grf->md5sum, sizeof(grf->md5sum)) == 0) return grf->name; } } - if (!create) return NULL; + if (!create) return nullptr; grf = CallocT(1); grf->grfid = grfid; @@ -878,17 +878,17 @@ GRFTextWrapper *FindUnknownGRFName(uint3 * Retrieve a NewGRF from the current config by its grfid. * @param grfid grf to look for. * @param mask GRFID mask to allow for partial matching. - * @return The grf config, if it exists, else \c NULL. + * @return The grf config, if it exists, else \c nullptr. */ GRFConfig *GetGRFConfig(uint32 grfid, uint32 mask) { GRFConfig *c; - for (c = _grfconfig; c != NULL; c = c->next) { + for (c = _grfconfig; c != nullptr; c = c->next) { if ((c->ident.grfid & mask) == (grfid & mask)) return c; } - return NULL; + return nullptr; } @@ -913,7 +913,7 @@ static const uint32 OPENTTD_GRAPHICS_BAS /** * Search a textfile file next to this NewGRF. * @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 *GRFConfig::GetTextfile(TextfileType type) const { diff --git a/src/newgrf_config.h b/src/newgrf_config.h --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -88,13 +88,13 @@ struct GRFIdentifier { /** * Does the identification match the provided values? * @param grfid Expected grfid. - * @param md5sum Expected md5sum, may be \c NULL (in which case, do not check it). + * @param md5sum Expected md5sum, may be \c nullptr (in which case, do not check it). * @return the object has the provided grfid and md5sum. */ inline bool HasGrfIdentifier(uint32 grfid, const uint8 *md5sum) const { if (this->grfid != grfid) return false; - if (md5sum == NULL) return true; + if (md5sum == nullptr) return true; return memcmp(md5sum, this->md5sum, sizeof(this->md5sum)) == 0; } }; @@ -151,7 +151,7 @@ struct GRFTextWrapper : public SimpleCou /** Information about GRF, used in the game and (part of it) in savegames */ struct GRFConfig : ZeroedMemoryAllocator { - GRFConfig(const char *filename = NULL); + GRFConfig(const char *filename = nullptr); GRFConfig(const GRFConfig &config); ~GRFConfig(); @@ -215,7 +215,7 @@ struct NewGRFScanCallback { size_t GRFGetSizeOfDataSection(FILE *f); void ScanNewGRFFiles(NewGRFScanCallback *callback); -const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum = NULL, uint32 desired_version = 0); +const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 *md5sum = nullptr, uint32 desired_version = 0); GRFConfig *GetGRFConfig(uint32 grfid, uint32 mask = 0xFFFFFFFF); GRFConfig **CopyGRFConfigList(GRFConfig **dst, const GRFConfig *src, bool init_only); void AppendStaticGRFConfigs(GRFConfig **dst); diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -47,7 +47,7 @@ #include "safeguards.h" /** The sprite picker. */ -NewGrfDebugSpritePicker _newgrf_debug_sprite_picker = { SPM_NONE, NULL, 0, std::vector() }; +NewGrfDebugSpritePicker _newgrf_debug_sprite_picker = { SPM_NONE, nullptr, 0, std::vector() }; /** * Get the feature index related to the window number. @@ -192,11 +192,11 @@ public: * Gets the first position of the array containing the persistent storage. * @param index Index of the item. * @param grfid Parameter for the PSA. Only required for items with parameters. - * @return Pointer to the first position of the storage array or NULL if not present. + * @return Pointer to the first position of the storage array or nullptr if not present. */ virtual const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const { - return NULL; + return nullptr; } protected: @@ -252,18 +252,18 @@ static inline GrfSpecFeature GetFeatureN /** * Get the NIFeature related to the window number. * @param window_number The window to get the NIFeature for. - * @return the NIFeature, or NULL is there isn't one. + * @return the NIFeature, or nullptr is there isn't one. */ static inline const NIFeature *GetFeature(uint window_number) { GrfSpecFeature idx = GetFeatureNum(window_number); - return idx < GSF_FAKE_END ? _nifeatures[idx] : NULL; + return idx < GSF_FAKE_END ? _nifeatures[idx] : nullptr; } /** * Get the NIHelper related to the window number. * @param window_number The window to get the NIHelper for. - * @pre GetFeature(window_number) != NULL + * @pre GetFeature(window_number) != nullptr * @return the NIHelper */ static inline const NIHelper *GetFeatureHelper(uint window_number) @@ -332,7 +332,7 @@ struct NewGRFInspectWindow : Window { assert(this->HasChainIndex()); const Vehicle *v = Vehicle::Get(index); v = v->Move(this->chain_index); - if (v != NULL) index = v->index; + if (v != nullptr) index = v->index; } return index; } @@ -348,7 +348,7 @@ struct NewGRFInspectWindow : Window { const Vehicle *v = Vehicle::Get(::GetFeatureIndex(this->window_number)); v = v->Move(this->chain_index); - if (v == NULL) this->chain_index = 0; + if (v == nullptr) this->chain_index = 0; } NewGRFInspectWindow(WindowDesc *desc, WindowNumber wno) : Window(desc) @@ -418,7 +418,7 @@ struct NewGRFInspectWindow : Window { int total_width = 0; int sel_start = 0; int sel_end = 0; - for (const Vehicle *u = v->First(); u != NULL; u = u->Next()) { + for (const Vehicle *u = v->First(); u != nullptr; u = u->Next()) { if (u == v) sel_start = total_width; switch (u->type) { case VEH_TRAIN: total_width += Train ::From(u)->GetDisplayImageWidth(); break; @@ -459,9 +459,9 @@ struct NewGRFInspectWindow : Window { const void *base_spec = nih->GetSpec(index); uint i = 0; - if (nif->variables != NULL) { + if (nif->variables != nullptr) { this->DrawString(r, i++, "Variables:"); - for (const NIVariable *niv = nif->variables; niv->name != NULL; niv++) { + for (const NIVariable *niv = nif->variables; niv->name != nullptr; niv++) { bool avail = true; uint param = HasVariableParameter(niv->var) ? NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][niv->var - 0x60] : 0; uint value = nih->Resolve(index, niv->var, param, &avail); @@ -478,7 +478,7 @@ struct NewGRFInspectWindow : Window { uint psa_size = nih->GetPSASize(index, this->caller_grfid); const int32 *psa = nih->GetPSAFirstPosition(index, this->caller_grfid); - if (psa_size != 0 && psa != NULL) { + if (psa_size != 0 && psa != nullptr) { if (nih->PSAWithParameter()) { this->DrawString(r, i++, "Persistent storage [%08X]:", BSWAP32(this->caller_grfid)); } else { @@ -490,9 +490,9 @@ struct NewGRFInspectWindow : Window { } } - if (nif->properties != NULL) { + if (nif->properties != nullptr) { this->DrawString(r, i++, "Properties:"); - for (const NIProperty *nip = nif->properties; nip->name != NULL; nip++) { + for (const NIProperty *nip = nif->properties; nip->name != nullptr; nip++) { const void *ptr = (const byte *)base + nip->offset; uint value; switch (nip->read_size) { @@ -523,9 +523,9 @@ struct NewGRFInspectWindow : Window { } } - if (nif->callbacks != NULL) { + if (nif->callbacks != nullptr) { this->DrawString(r, i++, "Callbacks:"); - for (const NICallback *nic = nif->callbacks; nic->name != NULL; nic++) { + for (const NICallback *nic = nif->callbacks; nic->name != nullptr; nic++) { if (nic->cb_bit != CBM_NO_BIT) { const void *ptr = (const byte *)base_spec + nic->offset; uint value; @@ -571,7 +571,7 @@ struct NewGRFInspectWindow : Window { if (this->HasChainIndex()) { uint index = this->GetFeatureIndex(); Vehicle *v = Vehicle::Get(index); - if (v != NULL && v->Next() != NULL) { + if (v != nullptr && v->Next() != nullptr) { this->chain_index++; this->InvalidateData(); } @@ -581,14 +581,14 @@ struct NewGRFInspectWindow : Window { case WID_NGRFI_MAINPANEL: { /* Does this feature have variables? */ const NIFeature *nif = GetFeature(this->window_number); - if (nif->variables == NULL) return; + if (nif->variables == nullptr) return; /* Get the line, make sure it's within the boundaries. */ int line = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NGRFI_MAINPANEL, TOP_OFFSET); if (line == INT_MAX) return; /* Find the variable related to the line */ - for (const NIVariable *niv = nif->variables; niv->name != NULL; niv++, line--) { + for (const NIVariable *niv = nif->variables; niv->name != nullptr; niv++, line--) { if (line != 1) continue; // 1 because of the "Variables:" line if (!HasVariableParameter(niv->var)) break; @@ -604,7 +604,7 @@ struct NewGRFInspectWindow : Window { { if (StrEmpty(str)) return; - NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][this->current_edit_param - 0x60] = strtol(str, NULL, 16); + NewGRFInspectWindow::var60params[GetFeatureNum(this->window_number)][this->current_edit_param - 0x60] = strtol(str, nullptr, 16); this->SetDirty(); } @@ -625,7 +625,7 @@ struct NewGRFInspectWindow : Window { this->ValidateChainIndex(); this->SetWidgetDisabledState(WID_NGRFI_VEH_PREV, this->chain_index == 0); Vehicle *v = Vehicle::Get(this->GetFeatureIndex()); - this->SetWidgetDisabledState(WID_NGRFI_VEH_NEXT, v == NULL || v->Next() == NULL); + this->SetWidgetDisabledState(WID_NGRFI_VEH_NEXT, v == nullptr || v->Next() == nullptr); } } }; @@ -756,7 +756,7 @@ void DeleteNewGRFInspectWindow(GrfSpecFe bool IsNewGRFInspectable(GrfSpecFeature feature, uint index) { const NIFeature *nif = GetFeature(GetInspectWindowNumber(feature, index)); - if (nif == NULL) return false; + if (nif == nullptr) return false; return nif->helper->IsInspectable(index); } @@ -883,7 +883,7 @@ struct SpriteAlignerWindow : Window { DrawPixelInfo *old_dpi = _cur_dpi; _cur_dpi = &new_dpi; - DrawSprite(this->current_sprite, PAL_NONE, x, y, NULL, ZOOM_LVL_GUI); + DrawSprite(this->current_sprite, PAL_NONE, x, y, nullptr, ZOOM_LVL_GUI); _cur_dpi = old_dpi; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -65,7 +65,7 @@ const SpriteGroup *GetWagonOverrideSprit if (wo->train_id[j] == overriding_engine) return wo->group; } } - return NULL; + return nullptr; } /** @@ -79,7 +79,7 @@ void UnloadWagonOverrides(Engine *e) } free(e->overrides); e->overrides_count = 0; - e->overrides = NULL; + e->overrides = nullptr; } @@ -88,7 +88,7 @@ void SetCustomEngineSprites(EngineID eng Engine *e = Engine::Get(engine); assert(cargo < lengthof(e->grf_prop.spritegroup)); - if (e->grf_prop.spritegroup[cargo] != NULL) { + if (e->grf_prop.spritegroup[cargo] != nullptr) { grfmsg(6, "SetCustomEngineSprites: engine %d cargo %d already has group -- replacing", engine, cargo); } e->grf_prop.spritegroup[cargo] = group; @@ -166,7 +166,7 @@ enum TTDPAircraftMovementStates { static byte MapAircraftMovementState(const Aircraft *v) { const Station *st = GetTargetAirportIfValid(v); - if (st == NULL) return AMS_TTDP_FLIGHT_TO_TOWER; + if (st == nullptr) return AMS_TTDP_FLIGHT_TO_TOWER; const AirportFTAClass *afc = st->airport.GetFTA(); uint16 amdflag = afc->MovingData(v->pos)->flag; @@ -339,12 +339,12 @@ static byte MapAircraftMovementAction(co /* virtual */ uint32 VehicleScopeResolver::GetRandomBits() const { - return this->v == NULL ? 0 : this->v->random_bits; + return this->v == nullptr ? 0 : this->v->random_bits; } /* virtual */ uint32 VehicleScopeResolver::GetTriggers() const { - return this->v == NULL ? 0 : this->v->waiting_triggers; + return this->v == nullptr ? 0 : this->v->waiting_triggers; } @@ -355,12 +355,12 @@ static byte MapAircraftMovementAction(co case VSG_SCOPE_PARENT: return &this->parent_scope; case VSG_SCOPE_RELATIVE: { int32 count = GB(relative, 0, 4); - if (this->self_scope.v != NULL && (relative != this->cached_relative_count || count == 0)) { + if (this->self_scope.v != nullptr && (relative != this->cached_relative_count || count == 0)) { /* Note: This caching only works as long as the VSG_SCOPE_RELATIVE cannot be used in * VarAct2 with procedure calls. */ if (count == 0) count = GetRegister(0x100); - const Vehicle *v = NULL; + const Vehicle *v = nullptr; switch (GB(relative, 6, 2)) { default: NOT_REACHED(); case 0x00: // count back (away from the engine), starting at this vehicle @@ -377,12 +377,12 @@ static byte MapAircraftMovementAction(co const Vehicle *self = this->self_scope.v; for (const Vehicle *u = self->First(); u != self; u = u->Next()) { if (u->engine_type != self->engine_type) { - v = NULL; + v = nullptr; } else { - if (v == NULL) v = u; + if (v == nullptr) v = u; } } - if (v == NULL) v = self; + if (v == nullptr) v = self; break; } } @@ -400,16 +400,16 @@ static byte MapAircraftMovementAction(co * This always uses dual company colours independent of GUI settings. So it is desync-safe. * * @param engine Engine type - * @param v Vehicle, NULL in purchase list. + * @param v Vehicle, nullptr in purchase list. * @return Livery to use */ static const Livery *LiveryHelper(EngineID engine, const Vehicle *v) { const Livery *l; - if (v == NULL) { - if (!Company::IsValidID(_current_company)) return NULL; - l = GetEngineLivery(engine, _current_company, INVALID_ENGINE, NULL, LIT_ALL); + if (v == nullptr) { + if (!Company::IsValidID(_current_company)) return nullptr; + l = GetEngineLivery(engine, _current_company, INVALID_ENGINE, nullptr, LIT_ALL); } else if (v->IsGroundVehicle()) { l = GetEngineLivery(v->engine_type, v->owner, v->GetGroundVehicleCache()->first_engine, v, LIT_ALL); } else { @@ -437,7 +437,7 @@ static uint32 PositionHelper(const Vehic if (consecutive && u->engine_type != v->engine_type) chain_before = 0; } - while (u->Next() != NULL && (!consecutive || u->Next()->engine_type == v->engine_type)) { + while (u->Next() != nullptr && (!consecutive || u->Next()->engine_type == v->engine_type)) { chain_after++; u = u->Next(); } @@ -480,7 +480,7 @@ static uint32 VehicleGetVariable(Vehicle memset(common_cargoes, 0, sizeof(common_cargoes)); memset(common_subtypes, 0, sizeof(common_subtypes)); - for (u = v; u != NULL; u = u->Next()) { + for (u = v; u != nullptr; u = u->Next()) { if (v->type == VEH_TRAIN) user_def_data |= Train::From(u)->tcache.user_def_data; /* Skip empty engines */ @@ -500,7 +500,7 @@ static uint32 VehicleGetVariable(Vehicle } /* Count subcargo types of common_cargo_type */ - for (u = v; u != NULL; u = u->Next()) { + for (u = v; u != nullptr; u = u->Next()) { /* Skip empty engines and engines not carrying common_cargo_type */ if (u->cargo_type != common_cargo_type || !u->GetEngine()->CanCarryCargo()) continue; @@ -530,12 +530,12 @@ static uint32 VehicleGetVariable(Vehicle * - For translating the cargo type we need to use the GRF which is resolving the variable, which * is object->ro.grffile. * In case of CBID_TRAIN_ALLOW_WAGON_ATTACH this is not the same as v->GetGRF(). - * - The grffile == NULL case only happens if this function is called for default vehicles. + * - The grffile == nullptr case only happens if this function is called for default vehicles. * And this is only done by CheckCaches(). */ const GRFFile *grffile = object->ro.grffile; uint8 common_bitnum = (common_cargo_type == CT_INVALID) ? 0xFF : - (grffile == NULL || grffile->grf_version < 8) ? CargoSpec::Get(common_cargo_type)->bitnum : grffile->cargo_map[common_cargo_type]; + (grffile == nullptr || grffile->grf_version < 8) ? CargoSpec::Get(common_cargo_type)->bitnum : grffile->cargo_map[common_cargo_type]; return (v->grf_cache.consist_cargo_information & 0xFFFF00FF) | common_bitnum << 8; } @@ -557,7 +557,7 @@ static uint32 VehicleGetVariable(Vehicle const Station *st = GetTargetAirportIfValid(Aircraft::From(v)); - if (st != NULL && st->airport.tile != INVALID_TILE) { + if (st != nullptr && st->airport.tile != INVALID_TILE) { airporttype = st->airport.GetSpec()->ttd_airport_type; } @@ -574,8 +574,8 @@ static uint32 VehicleGetVariable(Vehicle const Vehicle *u_p = v->Previous(); const Vehicle *u_n = v->Next(); - DirDiff f = (u_p == NULL) ? DIRDIFF_SAME : DirDifference(u_p->direction, v->direction); - DirDiff b = (u_n == NULL) ? DIRDIFF_SAME : DirDifference(v->direction, u_n->direction); + DirDiff f = (u_p == nullptr) ? DIRDIFF_SAME : DirDifference(u_p->direction, v->direction); + DirDiff b = (u_n == nullptr) ? DIRDIFF_SAME : DirDifference(v->direction, u_n->direction); DirDiff t = ChangeDirDiff(f, b); return ((t > DIRDIFF_REVERSE ? t | 8 : t) << 16) | @@ -636,7 +636,7 @@ static uint32 VehicleGetVariable(Vehicle { uint count = 0; - for (; v != NULL; v = v->Next()) { + for (; v != nullptr; v = v->Next()) { if (v->GetEngine()->grf_prop.local_id == parameter) count++; } return count; @@ -653,7 +653,7 @@ static uint32 VehicleGetVariable(Vehicle object->ro.callback == CBID_VEHICLE_START_STOP_CHECK || object->ro.callback == CBID_VEHICLE_32DAY_CALLBACK || object->ro.callback == CBID_VEHICLE_COLOUR_MAPPING || object->ro.callback == CBID_VEHICLE_SPAWN_VISUAL_EFFECT) { Vehicle *u = v->Move((int32)GetRegister(0x10F)); - if (u == NULL) return 0; // available, but zero + if (u == nullptr) return 0; // available, but zero if (parameter == 0x5F) { /* This seems to be the only variable that makes sense to access via var 61, but is not handled by VehicleGetVariable */ @@ -676,7 +676,7 @@ static uint32 VehicleGetVariable(Vehicle if (!v->IsGroundVehicle()) return 0; const Vehicle *u = v->Move((int8)parameter); - if (u == NULL) return 0; + if (u == nullptr) return 0; /* Get direction difference. */ bool prev = (int8)parameter < 0; @@ -810,7 +810,7 @@ static uint32 VehicleGetVariable(Vehicle case 0x57: return GB(ClampToI32(v->GetDisplayProfitLastYear()), 8, 24); case 0x58: return GB(ClampToI32(v->GetDisplayProfitLastYear()), 16, 16); case 0x59: return GB(ClampToI32(v->GetDisplayProfitLastYear()), 24, 8); - case 0x5A: return v->Next() == NULL ? INVALID_VEHICLE : v->Next()->index; + case 0x5A: return v->Next() == nullptr ? INVALID_VEHICLE : v->Next()->index; case 0x5C: return ClampToI32(v->value); case 0x5D: return GB(ClampToI32(v->value), 8, 24); case 0x5E: return GB(ClampToI32(v->value), 16, 16); @@ -882,10 +882,10 @@ static uint32 VehicleGetVariable(Vehicle /* virtual */ uint32 VehicleScopeResolver::GetVariable(byte variable, uint32 parameter, bool *available) const { - if (this->v == NULL) { + if (this->v == nullptr) { /* Vehicle does not exist, so we're in a purchase list */ switch (variable) { - case 0x43: return GetCompanyInfo(_current_company, LiveryHelper(this->self_type, NULL)); // Owner information + case 0x43: return GetCompanyInfo(_current_company, LiveryHelper(this->self_type, nullptr)); // Owner information case 0x46: return 0; // Motion counter case 0x47: { // Vehicle cargo info const Engine *e = Engine::Get(this->self_type); @@ -919,17 +919,17 @@ static uint32 VehicleGetVariable(Vehicle { const Vehicle *v = this->self_scope.v; - if (v == NULL) { + if (v == nullptr) { if (group->num_loading > 0) return group->loading[0]; if (group->num_loaded > 0) return group->loaded[0]; - return NULL; + return nullptr; } bool in_motion = !v->First()->current_order.IsType(OT_LOADING); uint totalsets = in_motion ? group->num_loaded : group->num_loading; - if (totalsets == 0) return NULL; + if (totalsets == 0) return nullptr; uint set = (v->cargo.StoredCount() * totalsets) / max((uint16)1, v->cargo_cap); set = min(set, totalsets - 1); @@ -945,7 +945,7 @@ static uint32 VehicleGetVariable(Vehicle static const GRFFile *GetEngineGrfFile(EngineID engine_type) { const Engine *e = Engine::Get(engine_type); - return (e != NULL) ? e->GetGRF() : NULL; + return (e != nullptr) ? e->GetGRF() : nullptr; } /** @@ -962,14 +962,14 @@ VehicleResolverObject::VehicleResolverOb CallbackID callback, uint32 callback_param1, uint32 callback_param2) : ResolverObject(GetEngineGrfFile(engine_type), callback, callback_param1, callback_param2), self_scope(*this, engine_type, v, info_view), - parent_scope(*this, engine_type, ((v != NULL) ? v->First() : v), info_view), + parent_scope(*this, engine_type, ((v != nullptr) ? v->First() : v), info_view), relative_scope(*this, engine_type, v, info_view), cached_relative_count(0) { if (wagon_override == WO_SELF) { this->root_spritegroup = GetWagonOverrideSpriteSet(engine_type, CT_DEFAULT, engine_type); } else { - if (wagon_override != WO_NONE && v != NULL && v->IsGroundVehicle()) { + if (wagon_override != WO_NONE && v != nullptr && v->IsGroundVehicle()) { assert(v->engine_type == engine_type); // overrides make little sense with fake scopes /* For trains we always use cached value, except for callbacks because the override spriteset @@ -982,11 +982,11 @@ VehicleResolverObject::VehicleResolverOb } } - if (this->root_spritegroup == NULL) { + if (this->root_spritegroup == nullptr) { const Engine *e = Engine::Get(engine_type); - CargoID cargo = v != NULL ? v->cargo_type : CT_PURCHASE; + CargoID cargo = v != nullptr ? v->cargo_type : CT_PURCHASE; assert(cargo < lengthof(e->grf_prop.spritegroup)); - this->root_spritegroup = e->grf_prop.spritegroup[cargo] != NULL ? e->grf_prop.spritegroup[cargo] : e->grf_prop.spritegroup[CT_DEFAULT]; + this->root_spritegroup = e->grf_prop.spritegroup[cargo] != nullptr ? e->grf_prop.spritegroup[cargo] : e->grf_prop.spritegroup[CT_DEFAULT]; } } } @@ -1005,7 +1005,7 @@ void GetCustomEngineSprite(EngineID engi object.callback_param1 = image_type | (stack << 8); const SpriteGroup *group = object.Resolve(); uint32 reg100 = sprite_stack ? GetRegister(0x100) : 0; - if (group != NULL && group->GetNumResults() != 0) { + if (group != nullptr && group->GetNumResults() != 0) { result->seq[result->count].sprite = group->GetResult() + (direction % group->GetNumResults()); result->seq[result->count].pal = GB(reg100, 0, 16); // zero means default recolouring result->count++; @@ -1025,7 +1025,7 @@ void GetRotorOverrideSprite(EngineID eng VehicleResolverObject object(engine, v, VehicleResolverObject::WO_SELF, info_view, CBID_NO_CALLBACK); result->Clear(); - uint rotor_pos = v == NULL || info_view ? 0 : v->Next()->Next()->state; + uint rotor_pos = v == nullptr || info_view ? 0 : v->Next()->Next()->state; bool sprite_stack = HasBit(e->info.misc_flags, EF_SPRITE_STACK); uint max_stack = sprite_stack ? lengthof(result->seq) : 1; @@ -1034,7 +1034,7 @@ void GetRotorOverrideSprite(EngineID eng object.callback_param1 = image_type | (stack << 8); const SpriteGroup *group = object.Resolve(); uint32 reg100 = sprite_stack ? GetRegister(0x100) : 0; - if (group != NULL && group->GetNumResults() != 0) { + if (group != nullptr && group->GetNumResults() != 0) { result->seq[result->count].sprite = group->GetResult() + (rotor_pos % group->GetNumResults()); result->seq[result->count].pal = GB(reg100, 0, 16); // zero means default recolouring result->count++; @@ -1052,7 +1052,7 @@ void GetRotorOverrideSprite(EngineID eng bool UsesWagonOverride(const Vehicle *v) { assert(v->type == VEH_TRAIN); - return Train::From(v)->tcache.cached_override != NULL; + return Train::From(v)->tcache.cached_override != nullptr; } /** @@ -1061,7 +1061,7 @@ bool UsesWagonOverride(const Vehicle *v) * @param param1 First parameter of the callback * @param param2 Second parameter of the callback * @param engine Engine type of the vehicle to evaluate the callback for - * @param v The vehicle to evaluate the callback for, or NULL if it doesnt exist yet + * @param v The vehicle to evaluate the callback for, or nullptr if it doesnt exist yet * @return The value the callback returned, or CALLBACK_FAILED if it failed */ uint16 GetVehicleCallback(CallbackID callback, uint32 param1, uint32 param2, EngineID engine, const Vehicle *v) @@ -1076,7 +1076,7 @@ uint16 GetVehicleCallback(CallbackID cal * @param param1 First parameter of the callback * @param param2 Second parameter of the callback * @param engine Engine type of the vehicle to evaluate the callback for - * @param v The vehicle to evaluate the callback for, or NULL if it doesn't exist yet + * @param v The vehicle to evaluate the callback for, or nullptr if it doesn't exist yet * @param parent The vehicle to use for parent scope * @return The value the callback returned, or CALLBACK_FAILED if it failed */ @@ -1107,14 +1107,14 @@ uint GetEngineProperty(EngineID engine, static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, byte base_random_bits, bool first) { /* We can't trigger a non-existent vehicle... */ - assert(v != NULL); + assert(v != nullptr); VehicleResolverObject object(v->engine_type, v, VehicleResolverObject::WO_CACHED, false, CBID_RANDOM_TRIGGER); object.waiting_triggers = v->waiting_triggers | trigger; v->waiting_triggers = object.waiting_triggers; // store now for var 5F const SpriteGroup *group = object.Resolve(); - if (group == NULL) return; + if (group == nullptr) return; /* Store remaining triggers. */ v->waiting_triggers = object.GetRemainingTriggers(); @@ -1142,7 +1142,7 @@ static void DoTriggerVehicle(Vehicle *v, /* We now trigger the next vehicle in chain recursively. * The random bits portions may be different for each * vehicle in chain. */ - if (v->Next() != NULL) DoTriggerVehicle(v->Next(), trigger, 0, true); + if (v->Next() != nullptr) DoTriggerVehicle(v->Next(), trigger, 0, true); break; case VEHICLE_TRIGGER_EMPTY: @@ -1150,14 +1150,14 @@ static void DoTriggerVehicle(Vehicle *v, * recursively. The random bits portions must be same * for each vehicle in chain, so we give them all * first chained vehicle's portion of random bits. */ - if (v->Next() != NULL) DoTriggerVehicle(v->Next(), trigger, first ? new_random_bits : base_random_bits, false); + if (v->Next() != nullptr) DoTriggerVehicle(v->Next(), trigger, first ? new_random_bits : base_random_bits, false); break; case VEHICLE_TRIGGER_ANY_NEW_CARGO: /* Now pass the trigger recursively to the next vehicle * in chain. */ assert(!first); - if (v->Next() != NULL) DoTriggerVehicle(v->Next(), VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false); + if (v->Next() != nullptr) DoTriggerVehicle(v->Next(), VEHICLE_TRIGGER_ANY_NEW_CARGO, base_random_bits, false); break; case VEHICLE_TRIGGER_CALLBACK_32: diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -81,11 +81,11 @@ void SetCustomEngineSprites(EngineID eng void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction direction, EngineImageType image_type, VehicleSpriteSeq *result); #define GetCustomVehicleSprite(v, direction, image_type, result) GetCustomEngineSprite(v->engine_type, v, direction, image_type, result) -#define GetCustomVehicleIcon(et, direction, image_type, result) GetCustomEngineSprite(et, NULL, direction, image_type, result) +#define GetCustomVehicleIcon(et, direction, image_type, result) GetCustomEngineSprite(et, nullptr, direction, image_type, result) void GetRotorOverrideSprite(EngineID engine, const struct Aircraft *v, bool info_view, EngineImageType image_type, VehicleSpriteSeq *result); #define GetCustomRotorSprite(v, i, image_type, result) GetRotorOverrideSprite(v->engine_type, v, i, image_type, result) -#define GetCustomRotorIcon(et, image_type, result) GetRotorOverrideSprite(et, NULL, true, image_type, result) +#define GetCustomRotorIcon(et, image_type, result) GetRotorOverrideSprite(et, nullptr, true, image_type, result) /* Forward declaration of GRFFile, to avoid unnecessary inclusion of newgrf.h * elsewhere... */ @@ -100,7 +100,7 @@ bool UsesWagonOverride(const Vehicle *v) /* Handler to Evaluate callback 36. If the callback fails (i.e. most of the * time) orig_value is returned */ uint GetVehicleProperty(const Vehicle *v, PropertyID property, uint orig_value); -uint GetEngineProperty(EngineID engine, PropertyID property, uint orig_value, const Vehicle *v = NULL); +uint GetEngineProperty(EngineID engine, PropertyID property, uint orig_value, const Vehicle *v = nullptr); enum VehicleTrigger { VEHICLE_TRIGGER_NEW_CARGO = 0x01, diff --git a/src/newgrf_generic.cpp b/src/newgrf_generic.cpp --- a/src/newgrf_generic.cpp +++ b/src/newgrf_generic.cpp @@ -140,7 +140,7 @@ void AddGenericCallback(uint8 feature, c /* virtual */ const SpriteGroup *GenericResolverObject::ResolveReal(const RealSpriteGroup *group) const { - if (group->num_loaded == 0) return NULL; + if (group->num_loaded == 0) return nullptr; return group->loaded[0]; } @@ -150,7 +150,7 @@ void AddGenericCallback(uint8 feature, c * @param ai_callback Callback comes from the AI. * @param callback Callback ID. */ -GenericResolverObject::GenericResolverObject(bool ai_callback, CallbackID callback) : ResolverObject(NULL, callback), generic_scope(*this, ai_callback) +GenericResolverObject::GenericResolverObject(bool ai_callback, CallbackID callback) : ResolverObject(nullptr, callback), generic_scope(*this, ai_callback) { } @@ -162,7 +162,7 @@ GenericResolverObject::GenericResolverOb * @param object pre-populated resolver object * @param param1_grfv7 callback_param1 for GRFs up to version 7. * @param param1_grfv8 callback_param1 for GRFs from version 8 on. - * @param[out] file Optionally returns the GRFFile which made the final decision for the callback result. May be NULL if not required. + * @param[out] file Optionally returns the GRFFile which made the final decision for the callback result. May be nullptr if not required. * @return callback value if successful or CALLBACK_FAILED */ static uint16 GetGenericCallbackResult(uint8 feature, ResolverObject &object, uint32 param1_grfv7, uint32 param1_grfv8, const GRFFile **file) @@ -179,7 +179,7 @@ static uint16 GetGenericCallbackResult(u if (result == CALLBACK_FAILED) continue; /* Return NewGRF file if necessary */ - if (file != NULL) *file = it->file; + if (file != nullptr) *file = it->file; return result; } @@ -201,7 +201,7 @@ static uint16 GetGenericCallbackResult(u * @param event 'AI construction event' to pass to callback. (Variable 86) * @param count 'Construction number' to pass to callback. (Variable 87) * @param station_size 'Station size' to pass to callback. (Variable 88) - * @param[out] file Optionally returns the GRFFile which made the final decision for the callback result. May be NULL if not required. + * @param[out] file Optionally returns the GRFFile which made the final decision for the callback result. May be nullptr if not required. * @return callback value if successful or CALLBACK_FAILED */ uint16 GetAiPurchaseCallbackResult(uint8 feature, CargoID cargo_type, uint8 default_selection, IndustryType src_industry, IndustryType dst_industry, uint8 distance, AIConstructionEvent event, uint8 count, uint8 station_size, const GRFFile **file) diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -48,11 +48,11 @@ void ShowNewGRFError() /* Do not show errors when entering the main screen */ if (_game_mode == GM_MENU) return; - for (const GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (const GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { /* We only want to show fatal errors */ - if (c->error == NULL || c->error->severity != STR_NEWGRF_ERROR_MSG_FATAL) continue; + if (c->error == nullptr || c->error->severity != STR_NEWGRF_ERROR_MSG_FATAL) continue; - SetDParam (0, c->error->custom_message == NULL ? c->error->message : STR_JUST_RAW_STRING); + SetDParam (0, c->error->custom_message == nullptr ? c->error->message : STR_JUST_RAW_STRING); SetDParamStr(1, c->error->custom_message); SetDParamStr(2, c->filename); SetDParamStr(3, c->error->data); @@ -66,7 +66,7 @@ void ShowNewGRFError() static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint right, uint bottom, bool show_params) { - if (c->error != NULL) { + if (c->error != nullptr) { char message[512]; SetDParamStr(0, c->error->custom_message); // is skipped by built-in messages SetDParamStr(1, c->filename); @@ -74,14 +74,14 @@ static void ShowNewGRFInfo(const GRFConf for (uint i = 0; i < lengthof(c->error->param_value); i++) { SetDParam(3 + i, c->error->param_value[i]); } - GetString(message, c->error->custom_message == NULL ? c->error->message : STR_JUST_RAW_STRING, lastof(message)); + GetString(message, c->error->custom_message == nullptr ? c->error->message : STR_JUST_RAW_STRING, lastof(message)); SetDParamStr(0, message); y = DrawStringMultiLine(x, right, y, bottom, c->error->severity); } /* Draw filename or not if it is not known (GRF sent over internet) */ - if (c->filename != NULL) { + if (c->filename != nullptr) { SetDParamStr(0, c->filename); y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_FILENAME); } @@ -222,9 +222,9 @@ struct NewGRFParametersWindow : public W Dimension suggestion = {500 - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT, (uint)FONT_HEIGHT_NORMAL * 4 + WD_TEXTPANEL_TOP + WD_TEXTPANEL_BOTTOM}; for (uint i = 0; i < this->grf_config->param_info.size(); i++) { const GRFParameterInfo *par_info = this->grf_config->param_info[i]; - if (par_info == NULL) continue; + if (par_info == nullptr) continue; const char *desc = GetGRFStringFromGRFText(par_info->desc); - if (desc == NULL) continue; + if (desc == nullptr) continue; Dimension d = GetStringMultiLineBoundingBox(desc, suggestion); d.height += WD_TEXTPANEL_TOP + WD_TEXTPANEL_BOTTOM; suggestion = maxdim(d, suggestion); @@ -246,10 +246,10 @@ struct NewGRFParametersWindow : public W void DrawWidget(const Rect &r, int widget) const override { if (widget == WID_NP_DESCRIPTION) { - const GRFParameterInfo *par_info = (this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : NULL; - if (par_info == NULL) return; + const GRFParameterInfo *par_info = (this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : nullptr; + if (par_info == nullptr) return; const char *desc = GetGRFStringFromGRFText(par_info->desc); - if (desc == NULL) return; + if (desc == nullptr) return; DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_TEXTPANEL_TOP, r.bottom - WD_TEXTPANEL_BOTTOM, desc, TC_BLACK); return; } else if (widget != WID_NP_BACKGROUND) { @@ -265,8 +265,8 @@ struct NewGRFParametersWindow : public W int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2; int text_y_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2; for (uint i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) { - GRFParameterInfo *par_info = (i < this->grf_config->param_info.size()) ? this->grf_config->param_info[i] : NULL; - if (par_info == NULL) par_info = GetDummyParameterInfo(i); + GRFParameterInfo *par_info = (i < this->grf_config->param_info.size()) ? this->grf_config->param_info[i] : nullptr; + if (par_info == nullptr) par_info = GetDummyParameterInfo(i); uint32 current_value = par_info->GetValue(this->grf_config); bool selected = (i == this->clicked_row); @@ -283,7 +283,7 @@ struct NewGRFParametersWindow : public W SetDParam(3, current_value); if (par_info->value_names.Contains(current_value)) { const char *label = GetGRFStringFromGRFText(par_info->value_names.Find(current_value)->second); - if (label != NULL) { + if (label != nullptr) { SetDParam(2, STR_JUST_RAW_STRING); SetDParamStr(3, label); } @@ -291,7 +291,7 @@ struct NewGRFParametersWindow : public W } const char *name = GetGRFStringFromGRFText(par_info->name); - if (name != NULL) { + if (name != nullptr) { SetDParam(0, STR_JUST_RAW_STRING); SetDParamStr(1, name); } else { @@ -350,8 +350,8 @@ struct NewGRFParametersWindow : public W if (_current_text_dir == TD_RTL) x = wid->current_x - 1 - x; x -= 4; - GRFParameterInfo *par_info = (num < this->grf_config->param_info.size()) ? this->grf_config->param_info[num] : NULL; - if (par_info == NULL) par_info = GetDummyParameterInfo(num); + GRFParameterInfo *par_info = (num < this->grf_config->param_info.size()) ? this->grf_config->param_info[num] : nullptr; + if (par_info == nullptr) par_info = GetDummyParameterInfo(num); /* One of the arrows is clicked */ uint32 old_val = par_info->GetValue(this->grf_config); @@ -431,8 +431,8 @@ struct NewGRFParametersWindow : public W { if (StrEmpty(str)) return; int32 value = atoi(str); - GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : NULL; - if (par_info == NULL) par_info = GetDummyParameterInfo(this->clicked_row); + GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : nullptr; + if (par_info == nullptr) par_info = GetDummyParameterInfo(this->clicked_row); uint32 val = Clamp(value, par_info->min_value, par_info->max_value); par_info->SetValue(this->grf_config, val); this->SetDirty(); @@ -441,8 +441,8 @@ struct NewGRFParametersWindow : public W void OnDropdownSelect(int widget, int index) override { assert(this->clicked_dropdown); - GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : NULL; - if (par_info == NULL) par_info = GetDummyParameterInfo(this->clicked_row); + GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : nullptr; + if (par_info == nullptr) par_info = GetDummyParameterInfo(this->clicked_row); par_info->SetValue(this->grf_config, index); this->SetDirty(); } @@ -574,7 +574,7 @@ typedef std::map p(c->ident.grfid, c); grfid_map->insert(p); c = c->next; @@ -598,7 +598,7 @@ struct NewGRFWindow : public Window, New static GUIGRFConfigList::FilterFunction * const filter_funcs[]; ///< Filter functions of the #GUIGRFConfigList. GUIGRFConfigList avails; ///< Available (non-active) grfs. - const GRFConfig *avail_sel; ///< Currently selected available grf. \c NULL is none is selected. + const GRFConfig *avail_sel; ///< Currently selected available grf. \c nullptr is none is selected. int avail_pos; ///< Index of #avail_sel if existing, else \c -1. StringFilter string_filter; ///< Filter for available grf. QueryString filter_editbox; ///< Filter editbox; @@ -620,10 +620,10 @@ struct NewGRFWindow : public Window, New NewGRFWindow(WindowDesc *desc, bool editable, bool show_params, bool execute, GRFConfig **orig_list) : Window(desc), filter_editbox(EDITBOX_MAX_SIZE) { - this->avail_sel = NULL; + this->avail_sel = nullptr; this->avail_pos = -1; - this->active_sel = NULL; - this->actives = NULL; + this->active_sel = nullptr; + this->actives = nullptr; this->orig_list = orig_list; this->editable = editable; this->execute = execute; @@ -684,7 +684,7 @@ struct NewGRFWindow : public Window, New GrfIdMap grfid_map; FillGrfidMap(this->actives, &grfid_map); - for (const GRFConfig *a = _all_grfs; a != NULL; a = a->next) { + for (const GRFConfig *a = _all_grfs; a != nullptr; a = a->next) { GrfIdMap::const_iterator iter = grfid_map.find(a->ident.grfid); if (iter != grfid_map.end() && a->version > iter->second->version) return true; } @@ -697,7 +697,7 @@ struct NewGRFWindow : public Window, New GrfIdMap grfid_map; FillGrfidMap(this->actives, &grfid_map); - for (const GRFConfig *a = _all_grfs; a != NULL; a = a->next) { + for (const GRFConfig *a = _all_grfs; a != nullptr; a = a->next) { GrfIdMap::iterator iter = grfid_map.find(a->ident.grfid); if (iter == grfid_map.end() || iter->second->version >= a->version) continue; @@ -709,7 +709,7 @@ struct NewGRFWindow : public Window, New if (this->active_sel == *c) { DeleteWindowByClass(WC_GRF_PARAMETERS); DeleteWindowByClass(WC_TEXTFILE); - this->active_sel = NULL; + this->active_sel = nullptr; } delete *c; *c = d; @@ -842,7 +842,7 @@ struct NewGRFWindow : public Window, New uint warning_left = rtl ? r.right - square.width - warning.width - 10 : r.left + square.width + 10; int i = 0; - for (const GRFConfig *c = this->actives; c != NULL; c = c->next, i++) { + for (const GRFConfig *c = this->actives; c != nullptr; c = c->next, i++) { if (this->vscroll->IsVisible(i)) { const char *text = c->GetName(); bool h = (this->active_sel == c); @@ -853,15 +853,15 @@ struct NewGRFWindow : public Window, New } else if (i == this->active_over) { /* Get index of current selection. */ int active_sel_pos = 0; - for (GRFConfig *c = this->actives; c != NULL && c != this->active_sel; c = c->next, active_sel_pos++) {} + for (GRFConfig *c = this->actives; c != nullptr && c != this->active_sel; c = c->next, active_sel_pos++) {} if (active_sel_pos != this->active_over) { uint top = this->active_over < active_sel_pos ? y + 1 : y + step_height - 2; GfxFillRect(r.left + WD_FRAMERECT_LEFT, top - 1, r.right - WD_FRAMERECT_RIGHT, top + 1, PC_GREY); } } DrawSprite(SPR_SQUARE, pal, square_left, y + square_offset_y); - if (c->error != NULL) DrawSprite(SPR_WARNING_SIGN, 0, warning_left, y + warning_offset_y); - uint txtoffset = c->error == NULL ? 0 : warning.width; + if (c->error != nullptr) DrawSprite(SPR_WARNING_SIGN, 0, warning_left, y + warning_offset_y); + uint txtoffset = c->error == nullptr ? 0 : warning.width; DrawString(text_left + (rtl ? 0 : txtoffset), text_right - (rtl ? txtoffset : 0), y + offset_y, text, h ? TC_WHITE : TC_ORANGE); y += step_height; } @@ -901,8 +901,8 @@ struct NewGRFWindow : public Window, New case WID_NS_NEWGRF_INFO: { const GRFConfig *selected = this->active_sel; - if (selected == NULL) selected = this->avail_sel; - if (selected != NULL) { + if (selected == nullptr) selected = this->avail_sel; + if (selected != nullptr) { ShowNewGRFInfo(selected, r.left + WD_FRAMERECT_LEFT, r.top + WD_FRAMERECT_TOP, r.right - WD_FRAMERECT_RIGHT, r.bottom - WD_FRAMERECT_BOTTOM, this->show_params); } break; @@ -913,9 +913,9 @@ struct NewGRFWindow : public Window, New void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_NS_NEWGRF_TEXTFILE && widget < WID_NS_NEWGRF_TEXTFILE + TFT_END) { - if (this->active_sel == NULL && this->avail_sel == NULL) return; + if (this->active_sel == nullptr && this->avail_sel == nullptr) return; - ShowNewGRFTextfileWindow((TextfileType)(widget - WID_NS_NEWGRF_TEXTFILE), this->active_sel != NULL ? this->active_sel : this->avail_sel); + ShowNewGRFTextfileWindow((TextfileType)(widget - WID_NS_NEWGRF_TEXTFILE), this->active_sel != nullptr ? this->active_sel : this->avail_sel); return; } @@ -936,7 +936,7 @@ struct NewGRFWindow : public Window, New } case WID_NS_OPEN_URL: { - const GRFConfig *c = (this->avail_sel == NULL) ? this->active_sel : this->avail_sel; + const GRFConfig *c = (this->avail_sel == nullptr) ? this->active_sel : this->avail_sel; extern void OpenBrowser(const char *url); OpenBrowser(c->GetURL()); @@ -944,7 +944,7 @@ struct NewGRFWindow : public Window, New } case WID_NS_PRESET_SAVE: - ShowSavePresetWindow((this->preset == -1) ? NULL : this->grf_presets[this->preset].c_str()); + ShowSavePresetWindow((this->preset == -1) ? nullptr : this->grf_presets[this->preset].c_str()); break; case WID_NS_PRESET_DELETE: @@ -958,10 +958,10 @@ struct NewGRFWindow : public Window, New break; case WID_NS_MOVE_UP: { // Move GRF up - if (this->active_sel == NULL || !this->editable) break; + if (this->active_sel == nullptr || !this->editable) break; int pos = 0; - for (GRFConfig **pc = &this->actives; *pc != NULL; pc = &(*pc)->next, pos++) { + for (GRFConfig **pc = &this->actives; *pc != nullptr; pc = &(*pc)->next, pos++) { GRFConfig *c = *pc; if (c->next == this->active_sel) { c->next = this->active_sel->next; @@ -977,10 +977,10 @@ struct NewGRFWindow : public Window, New } case WID_NS_MOVE_DOWN: { // Move GRF down - if (this->active_sel == NULL || !this->editable) break; + if (this->active_sel == nullptr || !this->editable) break; int pos = 1; // Start at 1 as we swap the selected newgrf with the next one - for (GRFConfig **pc = &this->actives; *pc != NULL; pc = &(*pc)->next, pos++) { + for (GRFConfig **pc = &this->actives; *pc != nullptr; pc = &(*pc)->next, pos++) { GRFConfig *c = *pc; if (c == this->active_sel) { *pc = c->next; @@ -1001,19 +1001,19 @@ struct NewGRFWindow : public Window, New uint i = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NS_FILE_LIST); GRFConfig *c; - for (c = this->actives; c != NULL && i > 0; c = c->next, i--) {} + for (c = this->actives; c != nullptr && i > 0; c = c->next, i--) {} if (this->active_sel != c) { DeleteWindowByClass(WC_GRF_PARAMETERS); DeleteWindowByClass(WC_TEXTFILE); } this->active_sel = c; - this->avail_sel = NULL; + this->avail_sel = nullptr; this->avail_pos = -1; this->InvalidateData(); if (click_count == 1) { - if (this->editable && this->active_sel != NULL) SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); + if (this->editable && this->active_sel != nullptr) SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); break; } /* With double click, continue */ @@ -1021,20 +1021,20 @@ struct NewGRFWindow : public Window, New } case WID_NS_REMOVE: { // Remove GRF - if (this->active_sel == NULL || !this->editable) break; + if (this->active_sel == nullptr || !this->editable) break; DeleteWindowByClass(WC_GRF_PARAMETERS); DeleteWindowByClass(WC_TEXTFILE); /* Choose the next GRF file to be the selected file. */ GRFConfig *newsel = this->active_sel->next; - for (GRFConfig **pc = &this->actives; *pc != NULL; pc = &(*pc)->next) { + for (GRFConfig **pc = &this->actives; *pc != nullptr; pc = &(*pc)->next) { GRFConfig *c = *pc; /* If the new selection is empty (i.e. we're deleting the last item * in the list, pick the file just before the selected file */ - if (newsel == NULL && c->next == this->active_sel) newsel = c; + if (newsel == nullptr && c->next == this->active_sel) newsel = c; if (c == this->active_sel) { - if (newsel == c) newsel = NULL; + if (newsel == c) newsel = nullptr; *pc = c->next; delete c; @@ -1045,14 +1045,14 @@ struct NewGRFWindow : public Window, New this->active_sel = newsel; this->preset = -1; this->avail_pos = -1; - this->avail_sel = NULL; + this->avail_sel = nullptr; this->avails.ForceRebuild(); this->InvalidateData(GOID_NEWGRF_LIST_EDITED); break; } case WID_NS_UPGRADE: { // Upgrade GRF. - if (!this->editable || this->actives == NULL) break; + if (!this->editable || this->actives == nullptr) break; UpgradeCurrent(); this->InvalidateData(GOID_NEWGRF_LIST_EDITED); break; @@ -1062,7 +1062,7 @@ struct NewGRFWindow : public Window, New ResetObjectToPlace(); uint i = this->vscroll2->GetScrolledRowFromWidget(pt.y, this, WID_NS_AVAIL_LIST); - this->active_sel = NULL; + this->active_sel = nullptr; DeleteWindowByClass(WC_GRF_PARAMETERS); if (i < this->avails.size()) { if (this->avail_sel != this->avails[i]) DeleteWindowByClass(WC_TEXTFILE); @@ -1071,7 +1071,7 @@ struct NewGRFWindow : public Window, New } this->InvalidateData(); if (click_count == 1) { - if (this->editable && this->avail_sel != NULL && !HasBit(this->avail_sel->flags, GCF_INVALID)) SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); + if (this->editable && this->avail_sel != nullptr && !HasBit(this->avail_sel->flags, GCF_INVALID)) SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); break; } /* With double click, continue */ @@ -1079,7 +1079,7 @@ struct NewGRFWindow : public Window, New } case WID_NS_ADD: - if (this->avail_sel == NULL || !this->editable || HasBit(this->avail_sel->flags, GCF_INVALID)) break; + if (this->avail_sel == nullptr || !this->editable || HasBit(this->avail_sel->flags, GCF_INVALID)) break; this->AddGRFToActive(); break; @@ -1103,14 +1103,14 @@ struct NewGRFWindow : public Window, New case WID_NS_VIEW_PARAMETERS: case WID_NS_SET_PARAMETERS: { // Edit parameters - if (this->active_sel == NULL || !this->show_params || this->active_sel->num_valid_params == 0) break; + if (this->active_sel == nullptr || !this->show_params || this->active_sel->num_valid_params == 0) break; OpenGRFParameterWindow(this->active_sel, this->editable); break; } case WID_NS_TOGGLE_PALETTE: - if (this->active_sel != NULL && this->editable) { + if (this->active_sel != nullptr && this->editable) { this->active_sel->palette ^= GRFP_USE_MASK; this->SetDirty(); } @@ -1136,8 +1136,8 @@ struct NewGRFWindow : public Window, New void OnNewGRFsScanned() override { - if (this->active_sel == NULL) DeleteWindowByClass(WC_TEXTFILE); - this->avail_sel = NULL; + if (this->active_sel == nullptr) DeleteWindowByClass(WC_TEXTFILE); + this->avail_sel = nullptr; this->avail_pos = -1; this->avails.ForceRebuild(); this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window @@ -1158,13 +1158,13 @@ struct NewGRFWindow : public Window, New ResetObjectToPlace(); DeleteWindowByClass(WC_GRF_PARAMETERS); DeleteWindowByClass(WC_TEXTFILE); - this->active_sel = NULL; + this->active_sel = nullptr; this->InvalidateData(GOID_NEWGRF_PRESET_LOADED); } void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; SaveGRFPresetToConfig(str, this->actives); this->grf_presets = GetGRFPresetList(); @@ -1195,13 +1195,13 @@ struct NewGRFWindow : public Window, New case GOID_NEWGRF_RESCANNED: /* Search the list for items that are now found and mark them as such. */ - for (GRFConfig **l = &this->actives; *l != NULL; l = &(*l)->next) { + for (GRFConfig **l = &this->actives; *l != nullptr; l = &(*l)->next) { GRFConfig *c = *l; bool compatible = HasBit(c->flags, GCF_COMPATIBLE); if (c->status != GCS_NOT_FOUND && !compatible) continue; const GRFConfig *f = FindGRFConfig(c->ident.grfid, FGCM_EXACT, compatible ? c->original_md5sum : c->ident.md5sum); - if (f == NULL || HasBit(f->flags, GCF_INVALID)) continue; + if (f == nullptr || HasBit(f->flags, GCF_INVALID)) continue; *l = new GRFConfig(*f); (*l)->next = c->next; @@ -1221,7 +1221,7 @@ struct NewGRFWindow : public Window, New case GOID_NEWGRF_PRESET_LOADED: { /* Update scrollbars */ int i = 0; - for (const GRFConfig *c = this->actives; c != NULL; c = c->next, i++) {} + for (const GRFConfig *c = this->actives; c != nullptr; c = c->next, i++) {} this->vscroll->SetCount(i + 1); // Reserve empty space for drag and drop handling. @@ -1238,10 +1238,10 @@ struct NewGRFWindow : public Window, New WID_NS_TOGGLE_PALETTE, WIDGET_LIST_END ); - this->SetWidgetDisabledState(WID_NS_ADD, !this->editable || this->avail_sel == NULL || HasBit(this->avail_sel->flags, GCF_INVALID)); - this->SetWidgetDisabledState(WID_NS_UPGRADE, !this->editable || this->actives == NULL || !this->CanUpgradeCurrent()); + this->SetWidgetDisabledState(WID_NS_ADD, !this->editable || this->avail_sel == nullptr || HasBit(this->avail_sel->flags, GCF_INVALID)); + this->SetWidgetDisabledState(WID_NS_UPGRADE, !this->editable || this->actives == nullptr || !this->CanUpgradeCurrent()); - bool disable_all = this->active_sel == NULL || !this->editable; + bool disable_all = this->active_sel == nullptr || !this->editable; this->SetWidgetsDisabledState(disable_all, WID_NS_REMOVE, WID_NS_MOVE_UP, @@ -1249,28 +1249,28 @@ struct NewGRFWindow : public Window, New WIDGET_LIST_END ); - const GRFConfig *c = (this->avail_sel == NULL) ? this->active_sel : this->avail_sel; + const GRFConfig *c = (this->avail_sel == nullptr) ? this->active_sel : this->avail_sel; for (TextfileType tft = TFT_BEGIN; tft < TFT_END; tft++) { - this->SetWidgetDisabledState(WID_NS_NEWGRF_TEXTFILE + tft, c == NULL || c->GetTextfile(tft) == NULL); + this->SetWidgetDisabledState(WID_NS_NEWGRF_TEXTFILE + tft, c == nullptr || c->GetTextfile(tft) == nullptr); } - this->SetWidgetDisabledState(WID_NS_OPEN_URL, c == NULL || StrEmpty(c->GetURL())); + this->SetWidgetDisabledState(WID_NS_OPEN_URL, c == nullptr || StrEmpty(c->GetURL())); - this->SetWidgetDisabledState(WID_NS_SET_PARAMETERS, !this->show_params || this->active_sel == NULL || this->active_sel->num_valid_params == 0); - this->SetWidgetDisabledState(WID_NS_VIEW_PARAMETERS, !this->show_params || this->active_sel == NULL || this->active_sel->num_valid_params == 0); + this->SetWidgetDisabledState(WID_NS_SET_PARAMETERS, !this->show_params || this->active_sel == nullptr || this->active_sel->num_valid_params == 0); + this->SetWidgetDisabledState(WID_NS_VIEW_PARAMETERS, !this->show_params || this->active_sel == nullptr || this->active_sel->num_valid_params == 0); this->SetWidgetDisabledState(WID_NS_TOGGLE_PALETTE, disable_all || (!(_settings_client.gui.newgrf_developer_tools || _settings_client.gui.scenario_developer) && ((c->palette & GRFP_GRF_MASK) != GRFP_GRF_UNSET))); if (!disable_all) { /* All widgets are now enabled, so disable widgets we can't use */ if (this->active_sel == this->actives) this->DisableWidget(WID_NS_MOVE_UP); - if (this->active_sel->next == NULL) this->DisableWidget(WID_NS_MOVE_DOWN); + if (this->active_sel->next == nullptr) this->DisableWidget(WID_NS_MOVE_DOWN); } this->SetWidgetDisabledState(WID_NS_PRESET_DELETE, this->preset == -1); bool has_missing = false; bool has_compatible = false; - for (const GRFConfig *c = this->actives; !has_missing && c != NULL; c = c->next) { + for (const GRFConfig *c = this->actives; !has_missing && c != nullptr; c = c->next) { has_missing |= c->status == GCS_NOT_FOUND; has_compatible |= HasBit(c->flags, GCF_COMPATIBLE); } @@ -1332,7 +1332,7 @@ struct NewGRFWindow : public Window, New if (this->avails.size() == 0) this->avail_pos = -1; if (this->avail_pos >= 0) { - this->active_sel = NULL; + this->active_sel = nullptr; DeleteWindowByClass(WC_GRF_PARAMETERS); if (this->avail_sel != this->avails[this->avail_pos]) DeleteWindowByClass(WC_TEXTFILE); this->avail_sel = this->avails[this->avail_pos]; @@ -1358,7 +1358,7 @@ struct NewGRFWindow : public Window, New if (!this->editable) return; if (widget == WID_NS_FILE_LIST) { - if (this->active_sel != NULL) { + if (this->active_sel != nullptr) { /* Get pointer to the selected file in the active list. */ int from_pos = 0; GRFConfig **from_prev; @@ -1369,7 +1369,7 @@ struct NewGRFWindow : public Window, New if (to_pos != from_pos) { // Don't move NewGRF file over itself. /* Get pointer to destination position. */ GRFConfig **to_prev = &this->actives; - for (int i = from_pos < to_pos ? -1 : 0; *to_prev != NULL && i < to_pos; to_prev = &(*to_prev)->next, i++) {} + for (int i = from_pos < to_pos ? -1 : 0; *to_prev != nullptr && i < to_pos; to_prev = &(*to_prev)->next, i++) {} /* Detach NewGRF file from its original position. */ *from_prev = this->active_sel->next; @@ -1382,11 +1382,11 @@ struct NewGRFWindow : public Window, New this->preset = -1; this->InvalidateData(); } - } else if (this->avail_sel != NULL) { + } else if (this->avail_sel != nullptr) { int to_pos = min(this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NS_FILE_LIST), this->vscroll->GetCount() - 1); this->AddGRFToActive(to_pos); } - } else if (widget == WID_NS_AVAIL_LIST && this->active_sel != NULL) { + } else if (widget == WID_NS_AVAIL_LIST && this->active_sel != nullptr) { /* Remove active NewGRF file by dragging it over available list. */ Point dummy = {-1, -1}; this->OnClick(dummy, WID_NS_REMOVE, 1); @@ -1405,17 +1405,17 @@ struct NewGRFWindow : public Window, New { if (!this->editable) return; - if (widget == WID_NS_FILE_LIST && (this->active_sel != NULL || this->avail_sel != NULL)) { + if (widget == WID_NS_FILE_LIST && (this->active_sel != nullptr || this->avail_sel != nullptr)) { /* An NewGRF file is dragged over the active list. */ int to_pos = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NS_FILE_LIST); /* Skip the last dummy line if the source is from the active list. */ - to_pos = min(to_pos, this->vscroll->GetCount() - (this->active_sel != NULL ? 2 : 1)); + to_pos = min(to_pos, this->vscroll->GetCount() - (this->active_sel != nullptr ? 2 : 1)); if (to_pos != this->active_over) { this->active_over = to_pos; this->SetWidgetDirty(WID_NS_FILE_LIST); } - } else if (widget == WID_NS_AVAIL_LIST && this->active_sel != NULL) { + } else if (widget == WID_NS_AVAIL_LIST && this->active_sel != nullptr) { this->active_over = -2; this->SetWidgetDirty(WID_NS_AVAIL_LIST); } else if (this->active_over != -1) { @@ -1453,9 +1453,9 @@ private: this->avails.clear(); - for (const GRFConfig *c = _all_grfs; c != NULL; c = c->next) { + for (const GRFConfig *c = _all_grfs; c != nullptr; c = c->next) { bool found = false; - for (const GRFConfig *grf = this->actives; grf != NULL && !found; grf = grf->next) found = grf->ident.HasGrfIdentifier(c->ident.grfid, c->ident.md5sum); + for (const GRFConfig *grf = this->actives; grf != nullptr && !found; grf = grf->next) found = grf->ident.HasGrfIdentifier(c->ident.grfid, c->ident.md5sum); if (found) continue; if (_settings_client.gui.newgrf_show_old_versions) { @@ -1480,10 +1480,10 @@ private: this->avails.RebuildDone(); this->avails.Sort(); - if (this->avail_sel != NULL) { + if (this->avail_sel != nullptr) { this->avail_pos = find_index(this->avails, this->avail_sel); if (this->avail_pos == -1) { - this->avail_sel = NULL; + this->avail_sel = nullptr; } } @@ -1497,15 +1497,15 @@ private: */ bool AddGRFToActive(int ins_pos = -1) { - if (this->avail_sel == NULL || !this->editable || HasBit(this->avail_sel->flags, GCF_INVALID)) return false; + if (this->avail_sel == nullptr || !this->editable || HasBit(this->avail_sel->flags, GCF_INVALID)) return false; DeleteWindowByClass(WC_TEXTFILE); uint count = 0; - GRFConfig **entry = NULL; + GRFConfig **entry = nullptr; GRFConfig **list; /* Find last entry in the list, checking for duplicate grfid on the way */ - for (list = &this->actives; *list != NULL; list = &(*list)->next, ins_pos--) { + for (list = &this->actives; *list != nullptr; list = &(*list)->next, ins_pos--) { if (ins_pos == 0) entry = list; // Insert position? Save. if ((*list)->ident.grfid == this->avail_sel->ident.grfid) { ShowErrorMessage(STR_NEWGRF_DUPLICATE_GRFID, INVALID_STRING_ID, WL_INFO); @@ -1513,7 +1513,7 @@ private: } if (!HasBit((*list)->flags, GCF_STATIC)) count++; } - if (entry == NULL) entry = list; + if (entry == nullptr) entry = list; if (count >= NETWORK_MAX_GRF_COUNT) { ShowErrorMessage(STR_NEWGRF_TOO_MANY_NEWGRFS, INVALID_STRING_ID, WL_INFO); return false; @@ -1546,7 +1546,7 @@ void ShowMissingContentWindow(const GRFC { /* Only show the things in the current list, or everything when nothing's selected */ ContentVector cv; - for (const GRFConfig *c = list; c != NULL; c = c->next) { + for (const GRFConfig *c = list; c != nullptr; c = c->next) { if (c->status != GCS_NOT_FOUND && !HasBit(c->flags, GCF_COMPATIBLE)) continue; ContentInfo *ci = new ContentInfo(); @@ -1557,7 +1557,7 @@ void ShowMissingContentWindow(const GRFC memcpy(ci->md5sum, HasBit(c->flags, GCF_COMPATIBLE) ? c->original_md5sum : c->ident.md5sum, sizeof(ci->md5sum)); cv.push_back(ci); } - ShowNetworkContentListWindow(cv.size() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF); + ShowNetworkContentListWindow(cv.size() == 0 ? nullptr : &cv, CONTENT_TYPE_NEWGRF); } Listing NewGRFWindow::last_sorting = {false, 0}; @@ -1605,7 +1605,7 @@ public: void SetupSmallestSize(Window *w, bool init_array) override { /* Copy state flag from the window. */ - assert(dynamic_cast(w) != NULL); + assert(dynamic_cast(w) != nullptr); NewGRFWindow *ngw = (NewGRFWindow *)w; this->editable = ngw->editable; @@ -1766,11 +1766,11 @@ public: NWidgetCore *GetWidgetFromPos(int x, int y) override { - if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; - NWidgetCore *nw = (this->editable) ? this->avs->GetWidgetFromPos(x, y) : NULL; - if (nw == NULL) nw = this->acs->GetWidgetFromPos(x, y); - if (nw == NULL) nw = this->inf->GetWidgetFromPos(x, y); + NWidgetCore *nw = (this->editable) ? this->avs->GetWidgetFromPos(x, y) : nullptr; + if (nw == nullptr) nw = this->acs->GetWidgetFromPos(x, y); + if (nw == nullptr) nw = this->inf->GetWidgetFromPos(x, y); return nw; } @@ -1912,13 +1912,13 @@ static const NWidgetPart _nested_newgrf_ /** Construct nested container widget for managing the lists and the info panel of the NewGRF GUI. */ NWidgetBase* NewGRFDisplay(int *biggest_index) { - NWidgetBase *avs = MakeNWidgets(_nested_newgrf_availables_widgets, lengthof(_nested_newgrf_availables_widgets), biggest_index, NULL); + NWidgetBase *avs = MakeNWidgets(_nested_newgrf_availables_widgets, lengthof(_nested_newgrf_availables_widgets), biggest_index, nullptr); int biggest2; - NWidgetBase *acs = MakeNWidgets(_nested_newgrf_actives_widgets, lengthof(_nested_newgrf_actives_widgets), &biggest2, NULL); + NWidgetBase *acs = MakeNWidgets(_nested_newgrf_actives_widgets, lengthof(_nested_newgrf_actives_widgets), &biggest2, nullptr); *biggest_index = max(*biggest_index, biggest2); - NWidgetBase *inf = MakeNWidgets(_nested_newgrf_infopanel_widgets, lengthof(_nested_newgrf_infopanel_widgets), &biggest2, NULL); + NWidgetBase *inf = MakeNWidgets(_nested_newgrf_infopanel_widgets, lengthof(_nested_newgrf_infopanel_widgets), &biggest2, nullptr); *biggest_index = max(*biggest_index, biggest2); return new NWidgetNewGRFDisplay(avs, acs, inf); @@ -1970,9 +1970,9 @@ static void NewGRFConfirmationCallback(W /* Show new, updated list */ GRFConfig *c; int i = 0; - for (c = nw->actives; c != NULL && c != nw->active_sel; c = c->next, i++) {} + for (c = nw->actives; c != nullptr && c != nw->active_sel; c = c->next, i++) {} CopyGRFConfigList(&nw->actives, *nw->orig_list, false); - for (c = nw->actives; c != NULL && i > 0; c = c->next, i--) {} + for (c = nw->actives; c != nullptr && i > 0; c = c->next, i--) {} nw->active_sel = c; nw->avails.ForceRebuild(); @@ -2039,13 +2039,13 @@ struct SavePresetWindow : public Window /** * Constructor of the save preset window. - * @param initial_text Initial text to display in the edit box, or \c NULL. + * @param initial_text Initial text to display in the edit box, or \c nullptr. */ SavePresetWindow(const char *initial_text) : Window(&_save_preset_desc), presetname_editbox(32) { this->presets = GetGRFPresetList(); this->selected = -1; - if (initial_text != NULL) { + if (initial_text != nullptr) { for (uint i = 0; i < this->presets.size(); i++) { if (this->presets[i] == initial_text) { this->selected = i; @@ -2064,7 +2064,7 @@ struct SavePresetWindow : public Window this->vscroll->SetCount((uint)this->presets.size()); this->SetFocusedWidget(WID_SVP_EDITBOX); - if (initial_text != NULL) this->presetname_editbox.text.Assign(initial_text); + if (initial_text != nullptr) this->presetname_editbox.text.Assign(initial_text); } ~SavePresetWindow() @@ -2132,7 +2132,7 @@ struct SavePresetWindow : public Window case WID_SVP_SAVE: { Window *w = FindWindowById(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE); - if (w != NULL && !StrEmpty(this->presetname_editbox.text.buf)) w->OnQueryTextFinished(this->presetname_editbox.text.buf); + if (w != nullptr && !StrEmpty(this->presetname_editbox.text.buf)) w->OnQueryTextFinished(this->presetname_editbox.text.buf); delete this; break; } @@ -2147,7 +2147,7 @@ struct SavePresetWindow : public Window /** * Open the window for saving a preset. - * @param initial_text Initial text to display in the edit box, or \c NULL. + * @param initial_text Initial text to display in the edit box, or \c nullptr. */ static void ShowSavePresetWindow(const char *initial_text) { @@ -2171,7 +2171,7 @@ static const NWidgetPart _nested_scan_pr /** Description of the widgets and other settings of the window. */ static WindowDesc _scan_progress_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_MODAL_PROGRESS, WC_NONE, 0, _nested_scan_progress_widgets, lengthof(_nested_scan_progress_widgets) @@ -2183,7 +2183,7 @@ struct ScanProgressWindow : public Windo int scanned; ///< The number of NewGRFs that we have seen. /** Create the window. */ - ScanProgressWindow() : Window(&_scan_progress_desc), last_name(NULL), scanned(0) + ScanProgressWindow() : Window(&_scan_progress_desc), last_name(nullptr), scanned(0) { this->InitNested(1); } @@ -2235,7 +2235,7 @@ struct ScanProgressWindow : public Windo SetDParam(1, _settings_client.gui.last_newgrf_count); DrawString(r.left, r.right, r.top, STR_NEWGRF_SCAN_STATUS, TC_FROMSTRING, SA_HOR_CENTER); - DrawString(r.left, r.right, r.top + FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL, this->last_name == NULL ? "" : this->last_name, TC_BLACK, SA_HOR_CENTER); + DrawString(r.left, r.right, r.top + FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL, this->last_name == nullptr ? "" : this->last_name, TC_BLACK, SA_HOR_CENTER); break; } } @@ -2248,7 +2248,7 @@ struct ScanProgressWindow : public Windo void UpdateNewGRFScanStatus(uint num, const char *name) { free(this->last_name); - if (name == NULL) { + if (name == nullptr) { char buf[256]; GetString(buf, STR_NEWGRF_SCAN_ARCHIVES, lastof(buf)); this->last_name = stredup(buf); @@ -2270,6 +2270,6 @@ struct ScanProgressWindow : public Windo void UpdateNewGRFScanStatus(uint num, const char *name) { ScanProgressWindow *w = dynamic_cast(FindWindowByClass(WC_MODAL_PROGRESS)); - if (w == NULL) w = new ScanProgressWindow(); + if (w == nullptr) w = new ScanProgressWindow(); w->UpdateNewGRFScanStatus(num, name); } diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -34,12 +34,12 @@ HouseOverrideManager _house_mngr(NEW_HOU /** * Retrieve the grf file associated with a house. * @param house_id House to query. - * @return The associated GRF file (may be \c NULL). + * @return The associated GRF file (may be \c nullptr). */ static const GRFFile *GetHouseSpecGrf(HouseID house_id) { const HouseSpec *hs = HouseSpec::Get(house_id); - return (hs != NULL) ? hs->grf_prop.grffile : NULL; + return (hs != nullptr) ? hs->grf_prop.grffile : nullptr; } /** @@ -190,7 +190,7 @@ static bool SearchNearbyHouseID(TileInde if (IsTileType(tile, MP_HOUSE)) { HouseID house = GetHouseType(tile); // tile been examined const HouseSpec *hs = HouseSpec::Get(house); - if (hs->grf_prop.grffile != NULL) { // must be one from a grf file + if (hs->grf_prop.grffile != nullptr) { // must be one from a grf file SearchNearbyHouseData *nbhd = (SearchNearbyHouseData *)user_data; TileIndex north_tile = tile + GetHouseNorthPart(house); // modifies 'house'! @@ -214,7 +214,7 @@ static bool SearchNearbyHouseClass(TileI if (IsTileType(tile, MP_HOUSE)) { HouseID house = GetHouseType(tile); // tile been examined const HouseSpec *hs = HouseSpec::Get(house); - if (hs->grf_prop.grffile != NULL) { // must be one from a grf file + if (hs->grf_prop.grffile != nullptr) { // must be one from a grf file SearchNearbyHouseData *nbhd = (SearchNearbyHouseData *)user_data; TileIndex north_tile = tile + GetHouseNorthPart(house); // modifies 'house'! @@ -238,7 +238,7 @@ static bool SearchNearbyHouseGRFID(TileI if (IsTileType(tile, MP_HOUSE)) { HouseID house = GetHouseType(tile); // tile been examined const HouseSpec *hs = HouseSpec::Get(house); - if (hs->grf_prop.grffile != NULL) { // must be one from a grf file + if (hs->grf_prop.grffile != nullptr) { // must be one from a grf file SearchNearbyHouseData *nbhd = (SearchNearbyHouseData *)user_data; TileIndex north_tile = tile + GetHouseNorthPart(house); // modifies 'house'! @@ -320,7 +320,7 @@ static uint32 GetDistanceFromNearbyHouse /* Building counts for new houses with id = parameter. */ case 0x61: { const HouseSpec *hs = HouseSpec::Get(this->house_id); - if (hs->grf_prop.grffile == NULL) return 0; + if (hs->grf_prop.grffile == nullptr) return 0; HouseID new_house = _house_mngr.GetID(parameter, hs->grf_prop.grffile->grfid); return new_house == INVALID_HOUSE_ID ? 0 : GetNumHouses(new_house, this->town); @@ -462,7 +462,7 @@ void DrawNewHouseTile(TileInfo *ti, Hous HouseResolverObject object(house_id, ti->tile, Town::GetByTile(ti->tile)); const SpriteGroup *group = object.Resolve(); - if (group != NULL && group->type == SGT_TILELAYOUT) { + if (group != nullptr && group->type == SGT_TILELAYOUT) { /* Limit the building stage to the number of stages supplied. */ const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group; byte stage = GetHouseBuildingStage(ti->tile); @@ -488,7 +488,7 @@ struct HouseAnimationBase : public Anima void AnimateNewHouseTile(TileIndex tile) { const HouseSpec *hs = HouseSpec::Get(GetHouseType(tile)); - if (hs == NULL) return; + if (hs == nullptr) return; HouseAnimationBase::AnimateTile(hs, Town::GetByTile(tile), tile, HasBit(hs->extra_flags, CALLBACK_1A_RANDOM_BITS)); } @@ -581,14 +581,14 @@ static void DoTriggerHouse(TileIndex til HouseID hid = GetHouseType(tile); HouseSpec *hs = HouseSpec::Get(hid); - if (hs->grf_prop.spritegroup[0] == NULL) return; + if (hs->grf_prop.spritegroup[0] == nullptr) return; HouseResolverObject object(hid, tile, Town::GetByTile(tile), CBID_RANDOM_TRIGGER); object.waiting_triggers = GetHouseTriggers(tile) | trigger; SetHouseTriggers(tile, object.waiting_triggers); // store now for var 5F const SpriteGroup *group = object.Resolve(); - if (group == NULL) return; + if (group == nullptr) return; /* Store remaining triggers. */ SetHouseTriggers(tile, object.GetRemainingTriggers()); diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -79,7 +79,7 @@ uint32 GetIndustryIDAtOffset(TileIndex t } } /* Not an 'old type' tile */ - if (indtsp->grf_prop.spritegroup[0] != NULL) { // tile has a spritegroup ? + if (indtsp->grf_prop.spritegroup[0] != nullptr) { // tile has a spritegroup ? if (indtsp->grf_prop.grffile->grfid == cur_grfid) { // same industry, same grf ? return indtsp->grf_prop.local_id; } else { @@ -202,7 +202,7 @@ static uint32 GetCountAndDistanceOfClose const IndustrySpec *indspec = GetIndustrySpec(this->type); - if (this->industry == NULL) { + if (this->industry == nullptr) { DEBUG(grf, 1, "Unhandled variable 0x%X (no available industry) in callback 0x%x", variable, this->ro.callback); *available = false; @@ -240,7 +240,7 @@ static uint32 GetCountAndDistanceOfClose bool is_ai = false; const Company *c = Company::GetIfValid(this->industry->founder); - if (c != NULL) { + if (c != nullptr) { const Livery *l = &c->livery[LS_DEFAULT]; is_ai = c->is_ai; @@ -338,7 +338,7 @@ static uint32 GetCountAndDistanceOfClose } /* Get a variable from the persistent storage */ - case 0x7C: return (this->industry->psa != NULL) ? this->industry->psa->GetValue(parameter) : 0; + case 0x7C: return (this->industry->psa != nullptr) ? this->industry->psa->GetValue(parameter) : 0; /* Industry structure access*/ case 0x80: return this->industry->location.tile; @@ -411,7 +411,7 @@ static uint32 GetCountAndDistanceOfClose /* virtual */ uint32 IndustriesScopeResolver::GetRandomBits() const { - return this->industry != NULL ? this->industry->random : 0; + return this->industry != nullptr ? this->industry->random : 0; } /* virtual */ uint32 IndustriesScopeResolver::GetTriggers() const @@ -423,13 +423,13 @@ static uint32 GetCountAndDistanceOfClose { if (this->industry->index == INVALID_INDUSTRY) return; - if (this->industry->psa == NULL) { + if (this->industry->psa == nullptr) { /* There is no need to create a storage if the value is zero. */ if (value == 0) return; /* Create storage on first modification. */ const IndustrySpec *indsp = GetIndustrySpec(this->industry->type); - uint32 grfid = (indsp->grf_prop.grffile != NULL) ? indsp->grf_prop.grffile->grfid : 0; + uint32 grfid = (indsp->grf_prop.grffile != nullptr) ? indsp->grf_prop.grffile->grfid : 0; assert(PersistentStorage::CanAllocateItem()); this->industry->psa = new PersistentStorage(grfid, GSF_INDUSTRIES, this->industry->location.tile); } @@ -445,7 +445,7 @@ static uint32 GetCountAndDistanceOfClose static const GRFFile *GetGrffile(IndustryType type) { const IndustrySpec *indspec = GetIndustrySpec(type); - return (indspec != NULL) ? indspec->grf_prop.grffile : NULL; + return (indspec != nullptr) ? indspec->grf_prop.grffile : nullptr; } /** @@ -462,7 +462,7 @@ IndustriesResolverObject::IndustriesReso CallbackID callback, uint32 callback_param1, uint32 callback_param2) : ResolverObject(GetGrffile(type), callback, callback_param1, callback_param2), industries_scope(*this, tile, indus, type, random_bits), - town_scope(NULL) + town_scope(nullptr) { this->root_spritegroup = GetIndustrySpec(type)->grf_prop.spritegroup[0]; } @@ -478,16 +478,16 @@ IndustriesResolverObject::~IndustriesRes */ TownScopeResolver *IndustriesResolverObject::GetTown() { - if (this->town_scope == NULL) { - Town *t = NULL; + if (this->town_scope == nullptr) { + Town *t = nullptr; bool readonly = true; - if (this->industries_scope.industry != NULL) { + if (this->industries_scope.industry != nullptr) { t = this->industries_scope.industry->town; readonly = this->industries_scope.industry->index == INVALID_INDUSTRY; } else if (this->industries_scope.tile != INVALID_TILE) { t = ClosestTownFromTile(this->industries_scope.tile, UINT_MAX); } - if (t == NULL) return NULL; + if (t == nullptr) return nullptr; this->town_scope = new TownScopeResolver(*this, t, readonly); } return this->town_scope; @@ -533,7 +533,7 @@ CommandCost CheckIfCallBackAllowsCreatio ind.town = ClosestTownFromTile(tile, UINT_MAX); ind.random = initial_random_bits; ind.founder = founder; - ind.psa = NULL; + ind.psa = nullptr; IndustriesResolverObject object(tile, &ind, type, seed, CBID_INDUSTRY_LOCATION, 0, creation_type); uint16 result = object.ResolveCallback(); @@ -556,7 +556,7 @@ uint32 GetIndustryProbabilityCallback(In const IndustrySpec *indspec = GetIndustrySpec(type); if (HasBit(indspec->callback_mask, CBM_IND_PROBABILITY)) { - uint16 res = GetIndustryCallback(CBID_INDUSTRY_PROBABILITY, 0, creation_type, NULL, type, INVALID_TILE); + uint16 res = GetIndustryCallback(CBID_INDUSTRY_PROBABILITY, 0, creation_type, nullptr, type, INVALID_TILE); if (res != CALLBACK_FAILED) { if (indspec->grf_prop.grffile->grf_version < 8) { /* Disallow if result != 0 */ @@ -608,7 +608,7 @@ void IndustryProductionCallback(Industry SB(object.callback_param2, 8, 16, loop); const SpriteGroup *tgroup = object.Resolve(); - if (tgroup == NULL || tgroup->type != SGT_INDUSTRY_PRODUCTION) break; + if (tgroup == nullptr || tgroup->type != SGT_INDUSTRY_PRODUCTION) break; const IndustryProductionSpriteGroup *group = (const IndustryProductionSpriteGroup *)tgroup; if (group->version == 0xFF) { diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -43,7 +43,7 @@ struct IndustriesScopeResolver : public /** Resolver for industries. */ struct IndustriesResolverObject : public ResolverObject { IndustriesScopeResolver industries_scope; ///< Scope resolver for the industry. - TownScopeResolver *town_scope; ///< Scope resolver for the associated town (if needed and available, else \c NULL). + TownScopeResolver *town_scope; ///< Scope resolver for the associated town (if needed and available, else \c nullptr). IndustriesResolverObject(TileIndex tile, Industry *indus, IndustryType type, uint32 random_bits = 0, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); @@ -57,7 +57,7 @@ struct IndustriesResolverObject : public case VSG_SCOPE_SELF: return &industries_scope; case VSG_SCOPE_PARENT: { TownScopeResolver *tsr = this->GetTown(); - if (tsr != NULL) return tsr; + if (tsr != nullptr) return tsr; } FALLTHROUGH; diff --git a/src/newgrf_industrytiles.cpp b/src/newgrf_industrytiles.cpp --- a/src/newgrf_industrytiles.cpp +++ b/src/newgrf_industrytiles.cpp @@ -80,7 +80,7 @@ uint32 GetRelativePosition(TileIndex til /* Land info of nearby tiles */ case 0x60: return GetNearbyIndustryTileInformation(parameter, this->tile, - this->industry == NULL ? (IndustryID)INVALID_INDUSTRY : this->industry->index, true, this->ro.grffile->grf_version >= 8); + this->industry == nullptr ? (IndustryID)INVALID_INDUSTRY : this->industry->index, true, this->ro.grffile->grf_version >= 8); /* Animation stage of nearby tiles */ case 0x61: { @@ -103,7 +103,7 @@ uint32 GetRelativePosition(TileIndex til /* virtual */ uint32 IndustryTileScopeResolver::GetRandomBits() const { - assert(this->industry != NULL && IsValidTile(this->tile)); + assert(this->industry != nullptr && IsValidTile(this->tile)); assert(this->industry->index == INVALID_INDUSTRY || IsTileType(this->tile, MP_INDUSTRY)); return (this->industry->index != INVALID_INDUSTRY) ? GetIndustryRandomBits(this->tile) : 0; @@ -111,7 +111,7 @@ uint32 GetRelativePosition(TileIndex til /* virtual */ uint32 IndustryTileScopeResolver::GetTriggers() const { - assert(this->industry != NULL && IsValidTile(this->tile)); + assert(this->industry != nullptr && IsValidTile(this->tile)); assert(this->industry->index == INVALID_INDUSTRY || IsTileType(this->tile, MP_INDUSTRY)); if (this->industry->index == INVALID_INDUSTRY) return 0; return GetIndustryTriggers(this->tile); @@ -125,7 +125,7 @@ uint32 GetRelativePosition(TileIndex til static const GRFFile *GetIndTileGrffile(IndustryGfx gfx) { const IndustryTileSpec *its = GetIndustryTileSpec(gfx); - return (its != NULL) ? its->grf_prop.grffile : NULL; + return (its != nullptr) ? its->grf_prop.grffile : nullptr; } /** @@ -171,7 +171,7 @@ static void IndustryDrawTileLayout(const uint16 GetIndustryTileCallback(CallbackID callback, uint32 param1, uint32 param2, IndustryGfx gfx_id, Industry *industry, TileIndex tile) { - assert(industry != NULL && IsValidTile(tile)); + assert(industry != nullptr && IsValidTile(tile)); assert(industry->index == INVALID_INDUSTRY || IsTileType(tile, MP_INDUSTRY)); IndustryTileResolverObject object(gfx_id, tile, industry, callback, param1, param2); @@ -194,7 +194,7 @@ bool DrawNewIndustryTile(TileInfo *ti, I IndustryTileResolverObject object(gfx, ti->tile, i); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->type != SGT_TILELAYOUT) return false; + if (group == nullptr || group->type != SGT_TILELAYOUT) return false; /* Limit the building stage to the number of stages supplied. */ const TileLayoutSpriteGroup *tlgroup = (const TileLayoutSpriteGroup *)group; @@ -259,7 +259,7 @@ struct IndustryAnimationBase : public An void AnimateNewIndustryTile(TileIndex tile) { const IndustryTileSpec *itspec = GetIndustryTileSpec(GetIndustryGfx(tile)); - if (itspec == NULL) return; + if (itspec == nullptr) return; IndustryAnimationBase::AnimateTile(itspec, Industry::GetByTile(tile), tile, (itspec->special_flags & INDTILE_SPECIAL_NEXTFRAME_RANDOMBITS) != 0); } @@ -305,14 +305,14 @@ static void DoTriggerIndustryTile(TileIn IndustryGfx gfx = GetIndustryGfx(tile); const IndustryTileSpec *itspec = GetIndustryTileSpec(gfx); - if (itspec->grf_prop.spritegroup[0] == NULL) return; + if (itspec->grf_prop.spritegroup[0] == nullptr) return; IndustryTileResolverObject object(gfx, tile, ind, CBID_RANDOM_TRIGGER); object.waiting_triggers = GetIndustryTriggers(tile) | trigger; SetIndustryTriggers(tile, object.waiting_triggers); // store now for var 5F const SpriteGroup *group = object.Resolve(); - if (group == NULL) return; + if (group == nullptr) return; /* Store remaining triggers. */ SetIndustryTriggers(tile, object.GetRemainingTriggers()); @@ -335,7 +335,7 @@ static void DoTriggerIndustryTile(TileIn */ static void DoReseedIndustry(Industry *ind, uint32 reseed) { - if (reseed == 0 || ind == NULL) return; + if (reseed == 0 || ind == nullptr) return; uint16 random_bits = Random(); ind->random &= reseed; diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -151,7 +151,7 @@ static uint32 GetObjectIDAtOffset(TileIn const ObjectSpec *spec = ObjectSpec::Get(o->type); /* Default objects have no associated NewGRF file */ - if (spec->grf_prop.grffile == NULL) { + if (spec->grf_prop.grffile == nullptr) { return 0xFFFE; // Defined in another grf file } @@ -237,9 +237,9 @@ static uint32 GetCountAndDistanceOfClose { /* We get the town from the object, or we calculate the closest * town if we need to when there's no object. */ - const Town *t = NULL; + const Town *t = nullptr; - if (this->obj == NULL) { + if (this->obj == nullptr) { switch (variable) { /* Allow these when there's no object. */ case 0x41: @@ -325,7 +325,7 @@ static uint32 GetCountAndDistanceOfClose } /* Land info of nearby tiles */ - case 0x62: return GetNearbyObjectTileInformation(parameter, this->tile, this->obj == NULL ? INVALID_OBJECT : this->obj->index, this->ro.grffile->grf_version >= 8); + case 0x62: return GetNearbyObjectTileInformation(parameter, this->tile, this->obj == nullptr ? INVALID_OBJECT : this->obj->index, this->ro.grffile->grf_version >= 8); /* Animation counter of nearby tile */ case 0x63: { @@ -357,8 +357,8 @@ ObjectResolverObject::ObjectResolverObje CallbackID callback, uint32 param1, uint32 param2) : ResolverObject(spec->grf_prop.grffile, callback, param1, param2), object_scope(*this, obj, tile, view) { - this->town_scope = NULL; - this->root_spritegroup = (obj == NULL && spec->grf_prop.spritegroup[CT_PURCHASE_OBJECT] != NULL) ? + this->town_scope = nullptr; + this->root_spritegroup = (obj == nullptr && spec->grf_prop.spritegroup[CT_PURCHASE_OBJECT] != nullptr) ? spec->grf_prop.spritegroup[CT_PURCHASE_OBJECT] : spec->grf_prop.spritegroup[0]; } @@ -374,15 +374,15 @@ ObjectResolverObject::~ObjectResolverObj */ TownScopeResolver *ObjectResolverObject::GetTown() { - if (this->town_scope == NULL) { + if (this->town_scope == nullptr) { Town *t; - if (this->object_scope.obj != NULL) { + if (this->object_scope.obj != nullptr) { t = this->object_scope.obj->town; } else { t = ClosestTownFromTile(this->object_scope.tile, UINT_MAX); } - if (t == NULL) return NULL; - this->town_scope = new TownScopeResolver(*this, t, this->object_scope.obj == NULL); + if (t == nullptr) return nullptr; + this->town_scope = new TownScopeResolver(*this, t, this->object_scope.obj == nullptr); } return this->town_scope; } @@ -395,7 +395,7 @@ TownScopeResolver *ObjectResolverObject: * @param spec The specification of the object / the entry point. * @param o The object to call the callback for. * @param tile The tile the callback is called for. - * @param view The view of the object (only used when o == NULL). + * @param view The view of the object (only used when o == nullptr). * @return The result of the callback. */ uint16 GetObjectCallback(CallbackID callback, uint32 param1, uint32 param2, const ObjectSpec *spec, Object *o, TileIndex tile, uint8 view) @@ -412,7 +412,7 @@ uint16 GetObjectCallback(CallbackID call */ static void DrawTileLayout(const TileInfo *ti, const TileLayoutSpriteGroup *group, const ObjectSpec *spec) { - const DrawTileSprites *dts = group->ProcessRegisters(NULL); + const DrawTileSprites *dts = group->ProcessRegisters(nullptr); PaletteID palette = ((spec->flags & OBJECT_FLAG_2CC_COLOUR) ? SPR_2CCMAP_BASE : PALETTE_RECOLOUR_START) + Object::GetByTile(ti->tile)->colour; SpriteID image = dts->ground.sprite; @@ -442,7 +442,7 @@ void DrawNewObjectTile(TileInfo *ti, con ObjectResolverObject object(spec, o, ti->tile); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->type != SGT_TILELAYOUT) return; + if (group == nullptr || group->type != SGT_TILELAYOUT) return; DrawTileLayout(ti, (const TileLayoutSpriteGroup *)group, spec); } @@ -456,11 +456,11 @@ void DrawNewObjectTile(TileInfo *ti, con */ void DrawNewObjectTileInGUI(int x, int y, const ObjectSpec *spec, uint8 view) { - ObjectResolverObject object(spec, NULL, INVALID_TILE, view); + ObjectResolverObject object(spec, nullptr, INVALID_TILE, view); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->type != SGT_TILELAYOUT) return; + if (group == nullptr || group->type != SGT_TILELAYOUT) return; - const DrawTileSprites *dts = ((const TileLayoutSpriteGroup *)group)->ProcessRegisters(NULL); + const DrawTileSprites *dts = ((const TileLayoutSpriteGroup *)group)->ProcessRegisters(nullptr); PaletteID palette; if (Company::IsValidID(_local_company)) { @@ -518,7 +518,7 @@ struct ObjectAnimationBase : public Anim void AnimateNewObjectTile(TileIndex tile) { const ObjectSpec *spec = ObjectSpec::GetByTile(tile); - if (spec == NULL || !(spec->flags & OBJECT_FLAG_ANIMATION)) return; + if (spec == nullptr || !(spec->flags & OBJECT_FLAG_ANIMATION)) return; ObjectAnimationBase::AnimateTile(spec, Object::GetByTile(tile), tile, (spec->flags & OBJECT_FLAG_ANIM_RANDOM_BITS) != 0); } diff --git a/src/newgrf_object.h b/src/newgrf_object.h --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -137,7 +137,7 @@ struct ObjectResolverObject : public Res case VSG_SCOPE_PARENT: { TownScopeResolver *tsr = this->GetTown(); - if (tsr != NULL) return tsr; + if (tsr != nullptr) return tsr; FALLTHROUGH; } diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp --- a/src/newgrf_railtype.cpp +++ b/src/newgrf_railtype.cpp @@ -44,13 +44,13 @@ if (IsRailDepotTile(this->tile)) return Depot::GetByTile(this->tile)->build_date; return _date; case 0x44: { - const Town *t = NULL; + const Town *t = nullptr; if (IsRailDepotTile(this->tile)) { t = Depot::GetByTile(this->tile)->town; } else if (IsLevelCrossingTile(this->tile)) { t = ClosestTownFromTile(this->tile, UINT_MAX); } - return t != NULL ? GetTownRadiusGroup(t, this->tile) : HZB_TOWN_EDGE; + return t != nullptr ? GetTownRadiusGroup(t, this->tile) : HZB_TOWN_EDGE; } } @@ -64,12 +64,12 @@ { if (group->num_loading > 0) return group->loading[0]; if (group->num_loaded > 0) return group->loaded[0]; - return NULL; + return nullptr; } /** * Resolver object for rail types. - * @param rti Railtype. NULL in NewGRF Inspect window. + * @param rti Railtype. nullptr in NewGRF Inspect window. * @param tile %Tile containing the track. For track on a bridge this is the southern bridgehead. * @param context Are we resolving sprites for the upper halftile, or on a bridge? * @param rtsg Railpart of interest @@ -77,9 +77,9 @@ * @param param2 Extra parameter (second parameter of the callback, except railtypes do not have callbacks). */ RailTypeResolverObject::RailTypeResolverObject(const RailtypeInfo *rti, TileIndex tile, TileContext context, RailTypeSpriteGroup rtsg, uint32 param1, uint32 param2) - : ResolverObject(rti != NULL ? rti->grffile[rtsg] : NULL, CBID_NO_CALLBACK, param1, param2), railtype_scope(*this, tile, context) + : ResolverObject(rti != nullptr ? rti->grffile[rtsg] : nullptr, CBID_NO_CALLBACK, param1, param2), railtype_scope(*this, tile, context) { - this->root_spritegroup = rti != NULL ? rti->group[rtsg] : NULL; + this->root_spritegroup = rti != nullptr ? rti->group[rtsg] : nullptr; } /** @@ -88,18 +88,18 @@ RailTypeResolverObject::RailTypeResolver * @param tile The tile to get the sprite for. * @param rtsg The type of sprite to draw. * @param context Where are we drawing the tile? - * @param[out] num_results If not NULL, return the number of sprites in the spriteset. + * @param[out] num_results If not nullptr, return the number of sprites in the spriteset. * @return The sprite to draw. */ SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg, TileContext context, uint *num_results) { assert(rtsg < RTSG_END); - if (rti->group[rtsg] == NULL) return 0; + if (rti->group[rtsg] == nullptr) return 0; RailTypeResolverObject object(rti, tile, context, rtsg); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->GetNumResults() == 0) return 0; + if (group == nullptr || group->GetNumResults() == 0) return 0; if (num_results) *num_results = group->GetNumResults(); @@ -118,14 +118,14 @@ SpriteID GetCustomRailSprite(const Railt */ SpriteID GetCustomSignalSprite(const RailtypeInfo *rti, TileIndex tile, SignalType type, SignalVariant var, SignalState state, bool gui) { - if (rti->group[RTSG_SIGNALS] == NULL) return 0; + if (rti->group[RTSG_SIGNALS] == nullptr) return 0; uint32 param1 = gui ? 0x10 : 0x00; uint32 param2 = (type << 16) | (var << 8) | state; RailTypeResolverObject object(rti, tile, TCX_NORMAL, RTSG_SIGNALS, param1, param2); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->GetNumResults() == 0) return 0; + if (group == nullptr || group->GetNumResults() == 0) return 0; return group->GetResult(); } @@ -139,7 +139,7 @@ SpriteID GetCustomSignalSprite(const Rai uint8 GetReverseRailTypeTranslation(RailType railtype, const GRFFile *grffile) { /* No rail type table present, return rail type as-is */ - if (grffile == NULL || grffile->railtype_list.size() == 0) return railtype; + if (grffile == nullptr || grffile->railtype_list.size() == 0) return railtype; /* Look for a matching rail type label in the table */ RailTypeLabel label = GetRailTypeInfo(railtype)->label; diff --git a/src/newgrf_railtype.h b/src/newgrf_railtype.h --- a/src/newgrf_railtype.h +++ b/src/newgrf_railtype.h @@ -53,7 +53,7 @@ struct RailTypeResolverObject : public R const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; -SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg, TileContext context = TCX_NORMAL, uint *num_results = NULL); +SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg, TileContext context = TCX_NORMAL, uint *num_results = nullptr); SpriteID GetCustomSignalSprite(const RailtypeInfo *rti, TileIndex tile, SignalType type, SignalVariant var, SignalState state, bool gui = false); uint8 GetReverseRailTypeTranslation(RailType railtype, const GRFFile *grffile); diff --git a/src/newgrf_sound.cpp b/src/newgrf_sound.cpp --- a/src/newgrf_sound.cpp +++ b/src/newgrf_sound.cpp @@ -49,7 +49,7 @@ void InitializeSoundPool() SoundEntry *GetSound(SoundID index) { - if (index >= _sounds.size()) return NULL; + if (index >= _sounds.size()) return nullptr; return &_sounds[index]; } @@ -173,7 +173,7 @@ SoundID GetNewGRFSoundID(const GRFFile * if (sound_id < ORIGINAL_SAMPLE_COUNT) return sound_id; sound_id -= ORIGINAL_SAMPLE_COUNT; - if (file == NULL || sound_id >= file->num_sounds) return INVALID_SOUND; + if (file == nullptr || sound_id >= file->num_sounds) return INVALID_SOUND; return file->sound_offset + sound_id; } @@ -192,7 +192,7 @@ bool PlayVehicleSound(const Vehicle *v, uint16 callback; /* If the engine has no GRF ID associated it can't ever play any new sounds */ - if (file == NULL) return false; + if (file == nullptr) return false; /* Check that the vehicle type uses the sound effect callback */ if (!HasBit(EngInfo(v->engine_type)->callback_mask, CBM_VEHICLE_SOUND_EFFECT)) return false; diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -26,7 +26,7 @@ TemporaryStorageArray _tem /** * ResolverObject (re)entry point. * This cannot be made a call to a virtual function because virtual functions - * do not like NULL and checking for NULL *everywhere* is more cumbersome than + * do not like nullptr and checking for nullptr *everywhere* is more cumbersome than * this little helper function. * @param group the group to resolve for * @param object information needed to resolve the group @@ -35,7 +35,7 @@ TemporaryStorageArray _tem */ /* static */ const SpriteGroup *SpriteGroup::Resolve(const SpriteGroup *group, ResolverObject &object, bool top_level) { - if (group == NULL) return NULL; + if (group == nullptr) return nullptr; if (top_level) { _temp_store.ClearChanges(); } @@ -73,7 +73,7 @@ static inline uint32 GetVariable(const R case 0x7D: return _temp_store.GetValue(parameter); case 0x7F: - if (object.grffile == NULL) return 0; + if (object.grffile == nullptr) return 0; return object.grffile->GetParam(parameter); default: @@ -130,7 +130,7 @@ static inline uint32 GetVariable(const R */ /* virtual */ const SpriteGroup *ResolverObject::ResolveReal(const RealSpriteGroup *group) const { - return NULL; + return nullptr; } /** @@ -207,7 +207,7 @@ const SpriteGroup *DeterministicSpriteGr bool available = true; if (adjust->variable == 0x7E) { const SpriteGroup *subgroup = SpriteGroup::Resolve(adjust->subroutine, object, false); - if (subgroup == NULL) { + if (subgroup == nullptr) { value = CALLBACK_FAILED; } else { value = subgroup->GetCallbackResult(); @@ -293,24 +293,24 @@ const SpriteGroup *RealSpriteGroup::Reso * Process registers and the construction stage into the sprite layout. * The passed construction stage might get reset to zero, if it gets incorporated into the layout * during the preprocessing. - * @param[in,out] stage Construction stage (0-3), or NULL if not applicable. + * @param[in,out] stage Construction stage (0-3), or nullptr if not applicable. * @return sprite layout to draw. */ const DrawTileSprites *TileLayoutSpriteGroup::ProcessRegisters(uint8 *stage) const { if (!this->dts.NeedsPreprocessing()) { - if (stage != NULL && this->dts.consistent_max_offset > 0) *stage = GetConstructionStageOffset(*stage, this->dts.consistent_max_offset); + if (stage != nullptr && this->dts.consistent_max_offset > 0) *stage = GetConstructionStageOffset(*stage, this->dts.consistent_max_offset); return &this->dts; } static DrawTileSprites result; - uint8 actual_stage = stage != NULL ? *stage : 0; + uint8 actual_stage = stage != nullptr ? *stage : 0; this->dts.PrepareLayout(0, 0, 0, actual_stage, false); this->dts.ProcessRegisters(0, 0, false); result.seq = this->dts.GetLayout(&result.ground); /* Stage has been processed by PrepareLayout(), set it to zero. */ - if (stage != NULL) *stage = 0; + if (stage != nullptr) *stage = 0; return &result; } diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -316,13 +316,13 @@ struct ScopeResolver { struct ResolverObject { /** * Resolver constructor. - * @param grffile NewGRF file associated with the object (or \c NULL if none). + * @param grffile NewGRF file associated with the object (or \c nullptr if none). * @param callback Callback code being resolved (default value is #CBID_NO_CALLBACK). * @param callback_param1 First parameter (var 10) of the callback (only used when \a callback is also set). * @param callback_param2 Second parameter (var 18) of the callback (only used when \a callback is also set). */ ResolverObject(const GRFFile *grffile, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0) - : default_scope(*this), callback(callback), callback_param1(callback_param1), callback_param2(callback_param2), grffile(grffile), root_spritegroup(NULL) + : default_scope(*this), callback(callback), callback_param1(callback_param1), callback_param2(callback_param2), grffile(grffile), root_spritegroup(nullptr) { this->ResetState(); } @@ -360,7 +360,7 @@ struct ResolverObject { uint16 ResolveCallback() { const SpriteGroup *result = Resolve(); - return result != NULL ? result->GetCallbackResult() : CALLBACK_FAILED; + return result != nullptr ? result->GetCallbackResult() : CALLBACK_FAILED; } virtual const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -35,11 +35,11 @@ template @@ -225,13 +225,13 @@ static uint32 GetRailContinuationInfo(Ti /* Station Resolver Functions */ /* virtual */ uint32 StationScopeResolver::GetRandomBits() const { - return (this->st == NULL ? 0 : this->st->random_bits) | (this->tile == INVALID_TILE ? 0 : GetStationTileRandomBits(this->tile) << 16); + return (this->st == nullptr ? 0 : this->st->random_bits) | (this->tile == INVALID_TILE ? 0 : GetStationTileRandomBits(this->tile) << 16); } /* virtual */ uint32 StationScopeResolver::GetTriggers() const { - return this->st == NULL ? 0 : this->st->waiting_triggers; + return this->st == nullptr ? 0 : this->st->waiting_triggers; } @@ -257,22 +257,22 @@ static struct { */ TownScopeResolver *StationResolverObject::GetTown() { - if (this->town_scope == NULL) { - Town *t = NULL; - if (this->station_scope.st != NULL) { + if (this->town_scope == nullptr) { + Town *t = nullptr; + if (this->station_scope.st != nullptr) { t = this->station_scope.st->town; } else if (this->station_scope.tile != INVALID_TILE) { t = ClosestTownFromTile(this->station_scope.tile, UINT_MAX); } - if (t == NULL) return NULL; - this->town_scope = new TownScopeResolver(*this, t, this->station_scope.st == NULL); + if (t == nullptr) return nullptr; + this->town_scope = new TownScopeResolver(*this, t, this->station_scope.st == nullptr); } return this->town_scope; } /* virtual */ uint32 StationScopeResolver::GetVariable(byte variable, uint32 parameter, bool *available) const { - if (this->st == NULL) { + if (this->st == nullptr) { /* Station does not exist, so we're in a purchase list or the land slope check callback. */ switch (variable) { case 0x40: @@ -396,8 +396,8 @@ uint32 Station::GetNewGRFVariable(const case 0x8A: return this->had_vehicle_of_type; case 0xF1: return (this->airport.tile != INVALID_TILE) ? this->airport.GetSpec()->ttd_airport_type : ATP_TTDP_LARGE; - case 0xF2: return (this->truck_stops != NULL) ? this->truck_stops->status : 0; - case 0xF3: return (this->bus_stops != NULL) ? this->bus_stops->status : 0; + case 0xF2: return (this->truck_stops != nullptr) ? this->truck_stops->status : 0; + case 0xF3: return (this->bus_stops != nullptr) ? this->bus_stops->status : 0; case 0xF6: return this->airport.flags; case 0xF7: return GB(this->airport.flags, 8, 8); } @@ -486,7 +486,7 @@ uint32 Waypoint::GetNewGRFVariable(const /* virtual */ const SpriteGroup *StationResolverObject::ResolveReal(const RealSpriteGroup *group) const { - if (this->station_scope.st == NULL || this->station_scope.statspec->cls_id == STAT_CLASS_WAYP) { + if (this->station_scope.st == nullptr || this->station_scope.statspec->cls_id == STAT_CLASS_WAYP) { return group->loading[0]; } @@ -541,14 +541,14 @@ uint32 Waypoint::GetNewGRFVariable(const StationResolverObject::StationResolverObject(const StationSpec *statspec, BaseStation *st, TileIndex tile, CallbackID callback, uint32 callback_param1, uint32 callback_param2) : ResolverObject(statspec->grf_prop.grffile, callback, callback_param1, callback_param2), - station_scope(*this, statspec, st, tile), town_scope(NULL) + station_scope(*this, statspec, st, tile), town_scope(nullptr) { /* Invalidate all cached vars */ _svc.valid = 0; CargoID ctype = CT_DEFAULT_NA; - if (this->station_scope.st == NULL) { + if (this->station_scope.st == nullptr) { /* No station, so we are in a purchase list */ ctype = CT_PURCHASE; } else if (Station::IsExpected(this->station_scope.st)) { @@ -556,7 +556,7 @@ StationResolverObject::StationResolverOb /* Pick the first cargo that we have waiting */ const CargoSpec *cs; FOR_ALL_CARGOSPECS(cs) { - if (this->station_scope.statspec->grf_prop.spritegroup[cs->Index()] != NULL && + if (this->station_scope.statspec->grf_prop.spritegroup[cs->Index()] != nullptr && st->goods[cs->Index()].cargo.TotalCount() > 0) { ctype = cs->Index(); break; @@ -564,7 +564,7 @@ StationResolverObject::StationResolverOb } } - if (this->station_scope.statspec->grf_prop.spritegroup[ctype] == NULL) { + if (this->station_scope.statspec->grf_prop.spritegroup[ctype] == nullptr) { ctype = CT_DEFAULT; } @@ -581,7 +581,7 @@ StationResolverObject::~StationResolverO /** * Resolve sprites for drawing a station tile. * @param statspec Station spec - * @param st Station (NULL in GUI) + * @param st Station (nullptr in GUI) * @param tile Station tile being drawn (INVALID_TILE in GUI) * @param var10 Value to put in variable 10; normally 0; 1 when resolving the groundsprite and SSF_SEPARATE_GROUND is set. * @return First sprite of the Action 1 spriteset to use, minus an offset of 0x42D to accommodate for weird NewGRF specs. @@ -590,7 +590,7 @@ SpriteID GetCustomStationRelocation(cons { StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, var10); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->type != SGT_RESULT) return 0; + if (group == nullptr || group->type != SGT_RESULT) return 0; return group->GetResult() - 0x42D; } @@ -609,7 +609,7 @@ SpriteID GetCustomStationFoundationReloc StationResolverObject object(statspec, st, tile, CBID_NO_CALLBACK, 2, layout | (edge_info << 16)); const SpriteGroup *group = object.Resolve(); - if (group == NULL || group->type != SGT_RESULT) return 0; + if (group == nullptr || group->type != SGT_RESULT) return 0; /* Note: SpriteGroup::Resolve zeroes all registers, so register 0x100 is initialised to 0. (compatibility) */ return group->GetResult() + GetRegister(0x100); @@ -637,7 +637,7 @@ CommandCost PerformStationTileSlopeCheck TileIndexDiff diff = cur_tile - north_tile; Slope slope = GetTileSlope(cur_tile); - StationResolverObject object(statspec, NULL, cur_tile, CBID_STATION_LAND_SLOPE_CHECK, + StationResolverObject object(statspec, nullptr, cur_tile, CBID_STATION_LAND_SLOPE_CHECK, (slope << 4) | (slope ^ (axis == AXIS_Y && HasBit(slope, CORNER_W) != HasBit(slope, CORNER_E) ? SLOPE_EW : 0)), (numtracks << 24) | (plat_len << 16) | (axis == AXIS_Y ? TileX(diff) << 8 | TileY(diff) : TileY(diff) << 8 | TileX(diff))); object.station_scope.axis = axis; @@ -664,10 +664,10 @@ int AllocateSpecToStation(const StationS { uint i; - if (statspec == NULL || st == NULL) return 0; + if (statspec == nullptr || st == nullptr) return 0; for (i = 1; i < st->num_specs && i < NUM_STATIONSSPECS_PER_STATION; i++) { - if (st->speclist[i].spec == NULL && st->speclist[i].grfid == 0) break; + if (st->speclist[i].spec == nullptr && st->speclist[i].grfid == 0) break; } if (i == NUM_STATIONSSPECS_PER_STATION) { @@ -690,7 +690,7 @@ int AllocateSpecToStation(const StationS if (st->num_specs == 2) { /* Initial allocation */ - st->speclist[0].spec = NULL; + st->speclist[0].spec = nullptr; st->speclist[0].grfid = 0; st->speclist[0].localidx = 0; } @@ -727,7 +727,7 @@ void DeallocateSpecFromStation(BaseStati } /* This specindex is no longer in use, so deallocate it */ - st->speclist[specindex].spec = NULL; + st->speclist[specindex].spec = nullptr; st->speclist[specindex].grfid = 0; st->speclist[specindex].localidx = 0; @@ -740,7 +740,7 @@ void DeallocateSpecFromStation(BaseStati } else { free(st->speclist); st->num_specs = 0; - st->speclist = NULL; + st->speclist = nullptr; st->cached_anim_triggers = 0; st->cached_cargo_triggers = 0; return; @@ -762,42 +762,42 @@ void DeallocateSpecFromStation(BaseStati */ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station) { - const DrawTileSprites *sprites = NULL; + const DrawTileSprites *sprites = nullptr; const RailtypeInfo *rti = GetRailTypeInfo(railtype); PaletteID palette = COMPANY_SPRITE_COLOUR(_local_company); uint tile = 2; const StationSpec *statspec = StationClass::Get(sclass)->GetSpec(station); - if (statspec == NULL) return false; + if (statspec == nullptr) return false; if (HasBit(statspec->callback_mask, CBM_STATION_SPRITE_LAYOUT)) { - uint16 callback = GetStationCallback(CBID_STATION_SPRITE_LAYOUT, 0x2110000, 0, statspec, NULL, INVALID_TILE); + uint16 callback = GetStationCallback(CBID_STATION_SPRITE_LAYOUT, 0x2110000, 0, statspec, nullptr, INVALID_TILE); if (callback != CALLBACK_FAILED) tile = callback; } uint32 total_offset = rti->GetRailtypeSpriteOffset(); uint32 relocation = 0; uint32 ground_relocation = 0; - const NewGRFSpriteLayout *layout = NULL; + const NewGRFSpriteLayout *layout = nullptr; DrawTileSprites tmp_rail_layout; - if (statspec->renderdata == NULL) { + if (statspec->renderdata == nullptr) { sprites = GetStationTileLayout(STATION_RAIL, tile + axis); } else { layout = &statspec->renderdata[(tile < statspec->tiles) ? tile + axis : (uint)axis]; if (!layout->NeedsPreprocessing()) { sprites = layout; - layout = NULL; + layout = nullptr; } } - if (layout != NULL) { + if (layout != nullptr) { /* Sprite layout which needs preprocessing */ bool separate_ground = HasBit(statspec->flags, SSF_SEPARATE_GROUND); uint32 var10_values = layout->PrepareLayout(total_offset, rti->fallback_railtype, 0, 0, separate_ground); uint8 var10; FOR_EACH_SET_BIT(var10, var10_values) { - uint32 var10_relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE, var10); + uint32 var10_relocation = GetCustomStationRelocation(statspec, nullptr, INVALID_TILE, var10); layout->ProcessRegisters(var10, var10_relocation, separate_ground); } @@ -806,9 +806,9 @@ bool DrawStationTile(int x, int y, RailT total_offset = 0; } else { /* Simple sprite layout */ - ground_relocation = relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE, 0); + ground_relocation = relocation = GetCustomStationRelocation(statspec, nullptr, INVALID_TILE, 0); if (HasBit(sprites->ground.sprite, SPRITE_MODIFIER_CUSTOM_SPRITE)) { - ground_relocation = GetCustomStationRelocation(statspec, NULL, INVALID_TILE, 1); + ground_relocation = GetCustomStationRelocation(statspec, nullptr, INVALID_TILE, 1); } ground_relocation += rti->fallback_railtype; } @@ -816,7 +816,7 @@ bool DrawStationTile(int x, int y, RailT SpriteID image = sprites->ground.sprite; PaletteID pal = sprites->ground.pal; RailTrackOffset overlay_offset; - if (rti->UsesOverlay() && SplitGroundSpriteForOverlay(NULL, &image, &overlay_offset)) { + if (rti->UsesOverlay() && SplitGroundSpriteForOverlay(nullptr, &image, &overlay_offset)) { SpriteID ground = GetCustomRailSprite(rti, INVALID_TILE, RTSG_GROUND); DrawSprite(image, PAL_NONE, x, y); DrawSprite(ground + overlay_offset, PAL_NONE, x, y); @@ -834,11 +834,11 @@ bool DrawStationTile(int x, int y, RailT const StationSpec *GetStationSpec(TileIndex t) { - if (!IsCustomStationSpecIndex(t)) return NULL; + if (!IsCustomStationSpecIndex(t)) return nullptr; const BaseStation *st = BaseStation::GetByTile(t); uint specindex = GetCustomStationSpecIndex(t); - return specindex < st->num_specs ? st->speclist[specindex].spec : NULL; + return specindex < st->num_specs ? st->speclist[specindex].spec : nullptr; } @@ -852,7 +852,7 @@ bool IsStationTileBlocked(TileIndex tile { const StationSpec *statspec = GetStationSpec(tile); - return statspec != NULL && HasBit(statspec->blocked, GetStationGfx(tile)); + return statspec != nullptr && HasBit(statspec->blocked, GetStationGfx(tile)); } /** @@ -866,7 +866,7 @@ bool CanStationTileHavePylons(TileIndex const StationSpec *statspec = GetStationSpec(tile); uint gfx = GetStationGfx(tile); /* Default stations do not draw pylons under roofs (gfx >= 4) */ - return statspec != NULL ? HasBit(statspec->pylons, gfx) : gfx < 4; + return statspec != nullptr ? HasBit(statspec->pylons, gfx) : gfx < 4; } /** @@ -878,7 +878,7 @@ bool CanStationTileHavePylons(TileIndex bool CanStationTileHaveWires(TileIndex tile) { const StationSpec *statspec = GetStationSpec(tile); - return statspec == NULL || !HasBit(statspec->wires, GetStationGfx(tile)); + return statspec == nullptr || !HasBit(statspec->wires, GetStationGfx(tile)); } /** Wrapper for animation control, see GetStationCallback. */ @@ -899,7 +899,7 @@ struct StationAnimationBase : public Ani void AnimateStationTile(TileIndex tile) { const StationSpec *ss = GetStationSpec(tile); - if (ss == NULL) return; + if (ss == nullptr) return; StationAnimationBase::AnimateTile(ss, BaseStation::GetByTile(tile), tile, HasBit(ss->flags, SSF_CB141_RANDOM_BITS)); } @@ -912,7 +912,7 @@ void TriggerStationAnimation(BaseStation }; /* Get Station if it wasn't supplied */ - if (st == NULL) st = BaseStation::GetByTile(tile); + if (st == nullptr) st = BaseStation::GetByTile(tile); /* Check the cached animation trigger bitmask to see if we need * to bother with any further processing. */ @@ -925,7 +925,7 @@ void TriggerStationAnimation(BaseStation TILE_AREA_LOOP(tile, area) { if (st->TileBelongsToRailStation(tile)) { const StationSpec *ss = GetStationSpec(tile); - if (ss != NULL && HasBit(ss->animation.triggers, trigger)) { + if (ss != nullptr && HasBit(ss->animation.triggers, trigger)) { CargoID cargo; if (cargo_type == CT_INVALID) { cargo = CT_INVALID; @@ -953,7 +953,7 @@ void TriggerStationRandomisation(Station }; /* Get Station if it wasn't supplied */ - if (st == NULL) st = Station::GetByTile(tile); + if (st == nullptr) st = Station::GetByTile(tile); /* Check the cached cargo trigger bitmask to see if we need * to bother with any further processing. */ @@ -981,7 +981,7 @@ void TriggerStationRandomisation(Station TILE_AREA_LOOP(tile, area) { if (st->TileBelongsToRailStation(tile)) { const StationSpec *ss = GetStationSpec(tile); - if (ss == NULL) continue; + if (ss == nullptr) continue; /* Cargo taken "will only be triggered if all of those * cargo types have no more cargo waiting." */ @@ -994,7 +994,7 @@ void TriggerStationRandomisation(Station object.waiting_triggers = st->waiting_triggers; const SpriteGroup *group = object.Resolve(); - if (group == NULL) continue; + if (group == nullptr) continue; used_triggers |= object.used_triggers; @@ -1036,7 +1036,7 @@ void StationUpdateCachedTriggers(BaseSta * of this station. */ for (uint i = 0; i < st->num_specs; i++) { const StationSpec *ss = st->speclist[i].spec; - if (ss != NULL) { + if (ss != nullptr) { st->cached_anim_triggers |= ss->animation.triggers; st->cached_cargo_triggers |= ss->cargo_triggers; } diff --git a/src/newgrf_station.h b/src/newgrf_station.h --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -67,7 +67,7 @@ struct StationResolverObject : public Re case VSG_SCOPE_PARENT: { TownScopeResolver *tsr = this->GetTown(); - if (tsr != NULL) return tsr; + if (tsr != nullptr) return tsr; FALLTHROUGH; } diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -70,7 +70,7 @@ struct PersistentStorageArray : BasePers TYPE *prev_storage; ///< Memory to store "old" states so we can revert them on the performance of test cases for commands etc. /** Simply construct the array */ - PersistentStorageArray() : prev_storage(NULL) + PersistentStorageArray() : prev_storage(nullptr) { memset(this->storage, 0, sizeof(this->storage)); } @@ -105,8 +105,8 @@ struct PersistentStorageArray : BasePers /* We do not have made a backup; lets do so */ if (AreChangesPersistent()) { - assert(this->prev_storage == NULL); - } else if (this->prev_storage == NULL) { + assert(this->prev_storage == nullptr); + } else if (this->prev_storage == nullptr) { this->prev_storage = MallocT(SIZE); memcpy(this->prev_storage, this->storage, sizeof(this->storage)); @@ -133,10 +133,10 @@ struct PersistentStorageArray : BasePers void ClearChanges() { - if (this->prev_storage != NULL) { + if (this->prev_storage != nullptr) { memcpy(this->storage, this->prev_storage, sizeof(this->storage)); free(this->prev_storage); - this->prev_storage = NULL; + this->prev_storage = nullptr; } } }; diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -115,7 +115,7 @@ private: * @param text_ The text to store in this GRFText. * @param len_ The length of the text to store. */ - GRFText(byte langid_, const char *text_, size_t len_) : next(NULL), len(len_), langid(langid_) + GRFText(byte langid_, const char *text_, size_t len_) : next(nullptr), len(len_), langid(langid_) { /* We need to use memcpy instead of strcpy due to * the possibility of "choice lists" and therefore @@ -232,7 +232,7 @@ struct UnmappedChoiceList : ZeroedMemory } char *d = old_d; - if (lm == NULL) { + if (lm == nullptr) { /* In case there is no mapping, just ignore everything but the default. * A probable cause for this happening is when the language file has * been removed by the user and as such no mapping could be made. */ @@ -342,7 +342,7 @@ char *TranslateTTDPatchCodes(uint32 grfi size_t len = Utf8Decode(&c, str); /* Helper variable for a possible (string) mapping. */ - UnmappedChoiceList *mapping = NULL; + UnmappedChoiceList *mapping = nullptr; if (c == NFO_UTF8_IDENTIFIER) { unicode = true; @@ -461,7 +461,7 @@ char *TranslateTTDPatchCodes(uint32 grfi if (str[0] == '\0') goto string_end; const LanguageMap *lm = LanguageMap::GetLanguageMap(grfid, language_id); int index = *str++; - int mapped = lm != NULL ? lm->GetMapping(index, code == 0x0E) : -1; + int mapped = lm != nullptr ? lm->GetMapping(index, code == 0x0E) : -1; if (mapped >= 0) { d += Utf8Encode(d, code == 0x0E ? SCC_GENDER_INDEX : SCC_SET_CASE); d += Utf8Encode(d, code == 0x0E ? mapped : mapped + 1); @@ -472,7 +472,7 @@ char *TranslateTTDPatchCodes(uint32 grfi case 0x10: case 0x11: if (str[0] == '\0') goto string_end; - if (mapping == NULL) { + if (mapping == nullptr) { if (code == 0x10) str++; // Skip the index grfmsg(1, "choice list %s marker found when not expected", code == 0x10 ? "next" : "default"); break; @@ -490,7 +490,7 @@ char *TranslateTTDPatchCodes(uint32 grfi break; case 0x12: - if (mapping == NULL) { + if (mapping == nullptr) { grfmsg(1, "choice list end marker found when not expected"); } else { /* Terminate the previous string. */ @@ -499,7 +499,7 @@ char *TranslateTTDPatchCodes(uint32 grfi /* Now we can start flushing everything and clean everything up. */ d = mapping->Flush(LanguageMap::GetLanguageMap(grfid, language_id)); delete mapping; - mapping = NULL; + mapping = nullptr; } break; @@ -507,7 +507,7 @@ char *TranslateTTDPatchCodes(uint32 grfi case 0x14: case 0x15: if (str[0] == '\0') goto string_end; - if (mapping != NULL) { + if (mapping != nullptr) { grfmsg(1, "choice lists can't be stacked, it's going to get messy now..."); if (code != 0x14) str++; } else { @@ -559,13 +559,13 @@ char *TranslateTTDPatchCodes(uint32 grfi } string_end: - if (mapping != NULL) { + if (mapping != nullptr) { grfmsg(1, "choice list was incomplete, the whole list is ignored"); delete mapping; } *d = '\0'; - if (olen != NULL) *olen = d - tmp + 1; + if (olen != nullptr) *olen = d - tmp + 1; tmp = ReallocT(tmp, d - tmp + 1); return tmp; } @@ -580,7 +580,7 @@ void AddGRFTextToList(GRFText **list, GR GRFText **ptext, *text; /* Loop through all languages and see if we can replace a string */ - for (ptext = list; (text = *ptext) != NULL; ptext = &text->next) { + for (ptext = list; (text = *ptext) != nullptr; ptext = &text->next) { if (text->langid == text_to_add->langid) { text_to_add->next = text->next; *ptext = text_to_add; @@ -630,9 +630,9 @@ void AddGRFTextToList(struct GRFText **l */ GRFText *DuplicateGRFText(GRFText *orig) { - GRFText *newtext = NULL; + GRFText *newtext = nullptr; GRFText **ptext = &newtext; - for (; orig != NULL; orig = orig->next) { + for (; orig != nullptr; orig = orig->next) { *ptext = GRFText::Copy(orig); ptext = &(*ptext)->next; } @@ -684,7 +684,7 @@ StringID AddGRFString(uint32 grfid, uint /* If we didn't find our stringid and grfid in the list, allocate a new id */ if (id == _num_grf_texts) _num_grf_texts++; - if (_grf_text[id].textholder == NULL) { + if (_grf_text[id].textholder == nullptr) { _grf_text[id].grfid = grfid; _grf_text[id].stringid = stringid; _grf_text[id].def_string = def_string; @@ -715,20 +715,20 @@ StringID GetGRFStringID(uint32 grfid, St * Get a C-string from a GRFText-list. If there is a translation for the * current language it is returned, otherwise the default translation * is returned. If there is neither a default nor a translation for the - * current language NULL is returned. + * current language nullptr is returned. * @param text The GRFText to get the string from. */ const char *GetGRFStringFromGRFText(const GRFText *text) { - const char *default_text = NULL; + const char *default_text = nullptr; /* Search the list of lang-strings of this stringid for current lang */ - for (; text != NULL; text = text->next) { + for (; text != nullptr; text = text->next) { if (text->langid == _currentLangID) return text->text; /* If the current string is English or American, set it as the * fallback language if the specific language isn't available. */ - if (text->langid == GRFLX_UNSPECIFIED || (default_text == NULL && (text->langid == GRFLX_ENGLISH || text->langid == GRFLX_AMERICAN))) { + if (text->langid == GRFLX_UNSPECIFIED || (default_text == nullptr && (text->langid == GRFLX_ENGLISH || text->langid == GRFLX_AMERICAN))) { default_text = text->text; } } @@ -744,7 +744,7 @@ const char *GetGRFStringPtr(uint16 strin assert(_grf_text[stringid].grfid != 0); const char *str = GetGRFStringFromGRFText(_grf_text[stringid].textholder); - if (str != NULL) return str; + if (str != nullptr) return str; /* Use the default string ID if the fallback string isn't available */ return GetStringPtr(_grf_text[stringid].def_string); @@ -783,7 +783,7 @@ bool CheckGrfLangID(byte lang_id, byte g */ void CleanUpGRFText(GRFText *grftext) { - while (grftext != NULL) { + while (grftext != nullptr) { GRFText *grftext2 = grftext->next; delete grftext; grftext = grftext2; @@ -802,7 +802,7 @@ void CleanUpStrings() CleanUpGRFText(_grf_text[id].textholder); _grf_text[id].grfid = 0; _grf_text[id].stringid = 0; - _grf_text[id].textholder = NULL; + _grf_text[id].textholder = nullptr; } _num_grf_texts = 0; @@ -814,7 +814,7 @@ struct TextRefStack { const GRFFile *grffile; bool used; - TextRefStack() : position(0), grffile(NULL), used(false) {} + TextRefStack() : position(0), grffile(nullptr), used(false) {} TextRefStack(const TextRefStack &stack) : position(stack.position), @@ -872,7 +872,7 @@ struct TextRefStack { void ResetStack(const GRFFile *grffile) { - assert(grffile != NULL); + assert(grffile != nullptr); this->position = 0; this->grffile = grffile; this->used = true; @@ -928,7 +928,7 @@ void RestoreTextRefStackBackup(struct Te * * @param grffile the NewGRF providing the stack data * @param numEntries number of entries to copy from the registers - * @param values values to copy onto the stack; if NULL the temporary NewGRF registers will be used instead + * @param values values to copy onto the stack; if nullptr the temporary NewGRF registers will be used instead */ void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values) { @@ -938,7 +938,7 @@ void StartTextRefStackUsage(const GRFFil byte *p = _newgrf_textrefstack.stack; for (uint i = 0; i < numEntries; i++) { - uint32 value = values != NULL ? values[i] : _temp_store.GetValue(0x100 + i); + uint32 value = values != nullptr ? values[i] : _temp_store.GetValue(0x100 + i); for (uint j = 0; j < 32; j += 8) { *p = GB(value, j, 8); p++; diff --git a/src/newgrf_text.h b/src/newgrf_text.h --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -26,7 +26,7 @@ const char *GetGRFStringFromGRFText(cons const char *GetGRFStringPtr(uint16 stringid); void CleanUpStrings(); void SetCurrentGrfLangID(byte language_id); -char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen = NULL, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); +char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen = nullptr, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); struct GRFText *DuplicateGRFText(struct GRFText *orig); void AddGRFTextToList(struct GRFText **list, struct GRFText *text_to_add); void AddGRFTextToList(struct GRFText **list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add); @@ -35,7 +35,7 @@ void CleanUpGRFText(struct GRFText *grft bool CheckGrfLangID(byte lang_id, byte grf_version); -void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values = NULL); +void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values = nullptr); void StopTextRefStackUsage(); void RewindTextRefStack(); bool UsingNewGRFTextStack(); diff --git a/src/newgrf_town.cpp b/src/newgrf_town.cpp --- a/src/newgrf_town.cpp +++ b/src/newgrf_town.cpp @@ -33,7 +33,7 @@ /* Check the persistent storage for the GrfID stored in register 100h. */ uint32 grfid = GetRegister(0x100); if (grfid == 0xFFFFFFFF) { - if (this->ro.grffile == NULL) return 0; + if (this->ro.grffile == nullptr) return 0; grfid = this->ro.grffile->grfid; } @@ -123,9 +123,9 @@ { if (this->readonly) return; - assert(this->t != NULL); + assert(this->t != nullptr); /* We can't store anything if the caller has no #GRFFile. */ - if (this->ro.grffile == NULL) return; + if (this->ro.grffile == nullptr) return; /* Check the persistent storage for the GrfID stored in register 100h. */ uint32 grfid = GetRegister(0x100); diff --git a/src/newgrf_townname.cpp b/src/newgrf_townname.cpp --- a/src/newgrf_townname.cpp +++ b/src/newgrf_townname.cpp @@ -21,21 +21,21 @@ #include "safeguards.h" -static GRFTownName *_grf_townnames = NULL; +static GRFTownName *_grf_townnames = nullptr; GRFTownName *GetGRFTownName(uint32 grfid) { GRFTownName *t = _grf_townnames; - for (; t != NULL; t = t->next) { + for (; t != nullptr; t = t->next) { if (t->grfid == grfid) return t; } - return NULL; + return nullptr; } GRFTownName *AddGRFTownName(uint32 grfid) { GRFTownName *t = GetGRFTownName(grfid); - if (t == NULL) { + if (t == nullptr) { t = CallocT(1); t->grfid = grfid; t->next = _grf_townnames; @@ -47,9 +47,9 @@ GRFTownName *AddGRFTownName(uint32 grfid void DelGRFTownName(uint32 grfid) { GRFTownName *t = _grf_townnames; - GRFTownName *p = NULL; - for (;t != NULL; p = t, t = t->next) if (t->grfid == grfid) break; - if (t != NULL) { + GRFTownName *p = nullptr; + for (;t != nullptr; p = t, t = t->next) if (t->grfid == grfid) break; + if (t != nullptr) { for (int i = 0; i < 128; i++) { for (int j = 0; j < t->nbparts[i]; j++) { for (int k = 0; k < t->partlist[i][j].partcount; k++) { @@ -59,7 +59,7 @@ void DelGRFTownName(uint32 grfid) } free(t->partlist[i]); } - if (p != NULL) { + if (p != nullptr) { p->next = t->next; } else { _grf_townnames = t->next; @@ -70,7 +70,7 @@ void DelGRFTownName(uint32 grfid) static char *RandomPart(char *buf, GRFTownName *t, uint32 seed, byte id, const char *last) { - assert(t != NULL); + assert(t != nullptr); for (int i = 0; i < t->nbparts[id]; i++) { byte count = t->partlist[id][i].bitcount; uint16 maxprob = t->partlist[id][i].maxprob; @@ -93,7 +93,7 @@ static char *RandomPart(char *buf, GRFTo char *GRFTownNameGenerate(char *buf, uint32 grfid, uint16 gen, uint32 seed, const char *last) { strecpy(buf, "", last); - for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) { + for (GRFTownName *t = _grf_townnames; t != nullptr; t = t->next) { if (t->grfid == grfid) { assert(gen < t->nb_gen); buf = RandomPart(buf, t, seed, t->id[gen], last); @@ -106,9 +106,9 @@ char *GRFTownNameGenerate(char *buf, uin StringID *GetGRFTownNameList() { int nb_names = 0, n = 0; - for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) nb_names += t->nb_gen; + for (GRFTownName *t = _grf_townnames; t != nullptr; t = t->next) nb_names += t->nb_gen; StringID *list = MallocT(nb_names + 1); - for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) { + for (GRFTownName *t = _grf_townnames; t != nullptr; t = t->next) { for (int j = 0; j < t->nb_gen; j++) list[n++] = t->name[j]; } list[n] = INVALID_STRING_ID; @@ -117,12 +117,12 @@ StringID *GetGRFTownNameList() void CleanUpGRFTownNames() { - while (_grf_townnames != NULL) DelGRFTownName(_grf_townnames->grfid); + while (_grf_townnames != nullptr) DelGRFTownName(_grf_townnames->grfid); } uint32 GetGRFTownNameId(int gen) { - for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) { + for (GRFTownName *t = _grf_townnames; t != nullptr; t = t->next) { if (gen < t->nb_gen) return t->grfid; gen -= t->nb_gen; } @@ -132,7 +132,7 @@ uint32 GetGRFTownNameId(int gen) uint16 GetGRFTownNameType(int gen) { - for (GRFTownName *t = _grf_townnames; t != NULL; t = t->next) { + for (GRFTownName *t = _grf_townnames; t != nullptr; t = t->next) { if (gen < t->nb_gen) return gen; gen -= t->nb_gen; } diff --git a/src/news_func.h b/src/news_func.h --- a/src/news_func.h +++ b/src/news_func.h @@ -17,7 +17,7 @@ #include "station_type.h" #include "industry_type.h" -void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32 ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32 ref2 = UINT32_MAX, void *free_data = NULL); +void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32 ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32 ref2 = UINT32_MAX, void *free_data = nullptr); static inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *cni) { @@ -44,7 +44,7 @@ static inline void AddVehicleAdviceNewsI AddNewsItem(string, NT_ADVICE, NF_INCOLOUR | NF_SMALL | NF_VEHICLE_PARAM0, NR_VEHICLE, vehicle); } -static inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, void *free_data = NULL) +static inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, void *free_data = nullptr) { AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_TILE, tile, NR_NONE, UINT32_MAX, free_data); } diff --git a/src/news_gui.cpp b/src/news_gui.cpp --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -41,23 +41,23 @@ #include "safeguards.h" -const NewsItem *_statusbar_news_item = NULL; +const NewsItem *_statusbar_news_item = nullptr; static uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages static uint _total_news = 0; ///< current number of news items -NewsItem *_oldest_news = NULL; ///< head of news items queue -static NewsItem *_latest_news = NULL; ///< tail of news items queue +NewsItem *_oldest_news = nullptr; ///< head of news items queue +static NewsItem *_latest_news = nullptr; ///< tail of news items queue /** * Forced news item. * Users can force an item by accessing the history or "last message". * If the message being shown was forced by the user, a pointer is stored - * in _forced_news. Otherwise, \a _forced_news variable is NULL. + * in _forced_news. Otherwise, \a _forced_news variable is nullptr. */ -static const NewsItem *_forced_news = NULL; ///< item the user has asked for +static const NewsItem *_forced_news = nullptr; ///< item the user has asked for /** Current news item (last item shown regularly). */ -static const NewsItem *_current_news = NULL; +static const NewsItem *_current_news = nullptr; /** @@ -93,7 +93,7 @@ static const NWidgetPart _nested_normal_ }; static WindowDesc _normal_news_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, _nested_normal_news_widgets, lengthof(_nested_normal_news_widgets) @@ -120,7 +120,7 @@ static const NWidgetPart _nested_vehicle }; static WindowDesc _vehicle_news_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, _nested_vehicle_news_widgets, lengthof(_nested_vehicle_news_widgets) @@ -148,7 +148,7 @@ static const NWidgetPart _nested_company }; static WindowDesc _company_news_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, _nested_company_news_widgets, lengthof(_nested_company_news_widgets) @@ -171,7 +171,7 @@ static const NWidgetPart _nested_thin_ne }; static WindowDesc _thin_news_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, _nested_thin_news_widgets, lengthof(_nested_thin_news_widgets) @@ -195,7 +195,7 @@ static const NWidgetPart _nested_small_n }; static WindowDesc _small_news_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_NEWS_WINDOW, WC_NONE, 0, _nested_small_news_widgets, lengthof(_nested_small_news_widgets) @@ -251,8 +251,8 @@ NewsDisplay NewsTypeData::GetDisplay() c { uint index; const SettingDesc *sd = GetSettingFromName(this->name, &index); - assert(sd != NULL); - void *ptr = GetVariableAddress(NULL, &sd->save); + assert(sd != nullptr); + void *ptr = GetVariableAddress(nullptr, &sd->save); return (NewsDisplay)ReadValue(ptr, sd->save.conv); } @@ -269,7 +269,7 @@ struct NewsWindow : Window { { NewsWindow::duration = 16650; const Window *w = FindWindowByClass(WC_SEND_NETWORK_MSG); - this->chat_height = (w != NULL) ? w->height : 0; + this->chat_height = (w != nullptr) ? w->height : 0; this->status_height = FindWindowById(WC_STATUS_BAR, 0)->height; this->flags |= WF_DISABLE_VP_SCROLL; @@ -285,7 +285,7 @@ struct NewsWindow : Window { /* Initialize viewport if it exists. */ NWidgetViewport *nvp = this->GetWidget(WID_N_VIEWPORT); - if (nvp != NULL) { + if (nvp != nullptr) { nvp->InitializeViewport(this, ni->reftype1 == NR_VEHICLE ? 0x80000000 | ni->ref1 : GetReferenceTile(ni->reftype1, ni->ref1), ZOOM_LVL_NEWS); if (this->ni->flags & NF_NO_TRANSPARENT) nvp->disp_flags |= ND_NO_TRANSPARENCY; if ((this->ni->flags & NF_INCOLOUR) == 0) { @@ -433,7 +433,7 @@ struct NewsWindow : Window { case WID_N_CLOSEBOX: NewsWindow::duration = 0; delete this; - _forced_news = NULL; + _forced_news = nullptr; break; case WID_N_CAPTION: @@ -515,7 +515,7 @@ private: int mintop = min(newtop, this->top); int maxtop = max(newtop, this->top); - if (this->viewport != NULL) this->viewport->top += newtop - this->top; + if (this->viewport != nullptr) this->viewport->top += newtop - this->top; this->top = newtop; SetDirtyBlocks(this->left, mintop, this->left + this->width, maxtop + this->height); @@ -572,18 +572,18 @@ static void ShowTicker(const NewsItem *n /** Initialize the news-items data structures */ void InitNewsItemStructs() { - for (NewsItem *ni = _oldest_news; ni != NULL; ) { + for (NewsItem *ni = _oldest_news; ni != nullptr; ) { NewsItem *next = ni->next; delete ni; ni = next; } _total_news = 0; - _oldest_news = NULL; - _latest_news = NULL; - _forced_news = NULL; - _current_news = NULL; - _statusbar_news_item = NULL; + _oldest_news = nullptr; + _latest_news = nullptr; + _forced_news = nullptr; + _current_news = nullptr; + _statusbar_news_item = nullptr; NewsWindow::duration = 0; } @@ -593,15 +593,15 @@ void InitNewsItemStructs() */ static bool ReadyForNextItem() { - const NewsItem *ni = _forced_news == NULL ? _current_news : _forced_news; - if (ni == NULL) return true; + const NewsItem *ni = _forced_news == nullptr ? _current_news : _forced_news; + if (ni == nullptr) return true; /* Ticker message * Check if the status bar message is still being displayed? */ if (IsNewsTickerShown()) return false; /* neither newsticker nor newspaper are running */ - return (NewsWindow::duration <= 0 || FindWindowById(WC_NEWS_WINDOW, 0) == NULL); + return (NewsWindow::duration <= 0 || FindWindowById(WC_NEWS_WINDOW, 0) == nullptr); } /** Move to the next news item */ @@ -609,12 +609,12 @@ static void MoveToNextItem() { InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); // invalidate the statusbar DeleteWindowById(WC_NEWS_WINDOW, 0); // close the newspapers window if shown - _forced_news = NULL; - _statusbar_news_item = NULL; + _forced_news = nullptr; + _statusbar_news_item = nullptr; /* if we're not at the last item, then move on */ if (_current_news != _latest_news) { - _current_news = (_current_news == NULL) ? _oldest_news : _current_news->next; + _current_news = (_current_news == nullptr) ? _oldest_news : _current_news->next; const NewsItem *ni = _current_news; const NewsType type = ni->type; @@ -674,16 +674,16 @@ void AddNewsItem(StringID string, NewsTy CopyOutDParam(ni->params, 0, lengthof(ni->params)); if (_total_news++ == 0) { - assert(_oldest_news == NULL); + assert(_oldest_news == nullptr); _oldest_news = ni; - ni->prev = NULL; + ni->prev = nullptr; } else { - assert(_latest_news->next == NULL); + assert(_latest_news->next == nullptr); _latest_news->next = ni; ni->prev = _latest_news; } - ni->next = NULL; + ni->next = nullptr; _latest_news = ni; SetWindowDirty(WC_MESSAGE_HISTORY, 0); @@ -757,14 +757,14 @@ CommandCost CmdCustomNewsItem(TileIndex static void DeleteNewsItem(NewsItem *ni) { /* Delete the news from the news queue. */ - if (ni->prev != NULL) { + if (ni->prev != nullptr) { ni->prev->next = ni->next; } else { assert(_oldest_news == ni); _oldest_news = ni->next; } - if (ni->next != NULL) { + if (ni->next != nullptr) { ni->next->prev = ni->prev; } else { assert(_latest_news == ni); @@ -798,7 +798,7 @@ void DeleteVehicleNews(VehicleID vid, St { NewsItem *ni = _oldest_news; - while (ni != NULL) { + while (ni != nullptr) { NewsItem *next = ni->next; if (((ni->reftype1 == NR_VEHICLE && ni->ref1 == vid) || (ni->reftype2 == NR_VEHICLE && ni->ref2 == vid)) && (news == INVALID_STRING_ID || ni->string_id == news)) { @@ -817,7 +817,7 @@ void DeleteStationNews(StationID sid) { NewsItem *ni = _oldest_news; - while (ni != NULL) { + while (ni != nullptr) { NewsItem *next = ni->next; if ((ni->reftype1 == NR_STATION && ni->ref1 == sid) || (ni->reftype2 == NR_STATION && ni->ref2 == sid)) { DeleteNewsItem(ni); @@ -834,7 +834,7 @@ void DeleteIndustryNews(IndustryID iid) { NewsItem *ni = _oldest_news; - while (ni != NULL) { + while (ni != nullptr) { NewsItem *next = ni->next; if ((ni->reftype1 == NR_INDUSTRY && ni->ref1 == iid) || (ni->reftype2 == NR_INDUSTRY && ni->ref2 == iid)) { DeleteNewsItem(ni); @@ -850,7 +850,7 @@ void DeleteInvalidEngineNews() { NewsItem *ni = _oldest_news; - while (ni != NULL) { + while (ni != nullptr) { NewsItem *next = ni->next; if ((ni->reftype1 == NR_ENGINE && (!Engine::IsValidID(ni->ref1) || !Engine::Get(ni->ref1)->IsEnabled())) || (ni->reftype2 == NR_ENGINE && (!Engine::IsValidID(ni->ref2) || !Engine::Get(ni->ref2)->IsEnabled()))) { @@ -863,7 +863,7 @@ void DeleteInvalidEngineNews() static void RemoveOldNewsItems() { NewsItem *next; - for (NewsItem *cur = _oldest_news; _total_news > MIN_NEWS_AMOUNT && cur != NULL; cur = next) { + for (NewsItem *cur = _oldest_news; _total_news > MIN_NEWS_AMOUNT && cur != nullptr; cur = next) { next = cur->next; if (_date - _news_type_data[cur->type].age * _settings_client.gui.news_message_timeout > cur->date) DeleteNewsItem(cur); } @@ -877,7 +877,7 @@ static void RemoveOldNewsItems() */ void ChangeVehicleNews(VehicleID from_index, VehicleID to_index) { - for (NewsItem *ni = _oldest_news; ni != NULL; ni = ni->next) { + for (NewsItem *ni = _oldest_news; ni != nullptr; ni = ni->next) { if (ni->reftype1 == NR_VEHICLE && ni->ref1 == from_index) ni->ref1 = to_index; if (ni->reftype2 == NR_VEHICLE && ni->ref2 == from_index) ni->ref2 = to_index; if (ni->flags & NF_VEHICLE_PARAM0 && ni->params[0] == from_index) ni->params[0] = to_index; @@ -892,7 +892,7 @@ void NewsLoop() /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ - if (FindWindowById(WC_STATUS_BAR, 0) == NULL) return; + if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; static byte _last_clean_month = 0; @@ -915,7 +915,7 @@ static void ShowNewsMessage(const NewsIt /* setup forced news item */ _forced_news = ni; - if (_forced_news != NULL) { + if (_forced_news != nullptr) { DeleteWindowById(WC_NEWS_WINDOW, 0); ShowNewspaper(ni); } @@ -924,19 +924,19 @@ static void ShowNewsMessage(const NewsIt /** Show previous news item */ void ShowLastNewsMessage() { - const NewsItem *ni = NULL; + const NewsItem *ni = nullptr; if (_total_news == 0) { return; - } else if (_forced_news == NULL) { + } else if (_forced_news == nullptr) { /* Not forced any news yet, show the current one, unless a news window is * open (which can only be the current one), then show the previous item */ - if (_current_news == NULL) { + if (_current_news == nullptr) { /* No news were shown yet resp. the last shown one was already deleted. * Threat this as if _forced_news reached _oldest_news; so, wrap around and start anew with the latest. */ ni = _latest_news; } else { const Window *w = FindWindowById(WC_NEWS_WINDOW, 0); - ni = (w == NULL || (_current_news == _oldest_news)) ? _current_news : _current_news->prev; + ni = (w == nullptr || (_current_news == _oldest_news)) ? _current_news : _current_news->prev; } } else if (_forced_news == _oldest_news) { /* We have reached the oldest news, start anew with the latest */ @@ -953,7 +953,7 @@ void ShowLastNewsMessage() } ni = ni->prev; - if (ni == NULL) { + if (ni == nullptr) { if (wrap) break; /* We have reached the oldest news, start anew with the latest */ ni = _latest_news; @@ -1054,7 +1054,7 @@ struct MessageHistoryWindow : Window { NewsItem *ni = _latest_news; for (int n = this->vscroll->GetPosition(); n > 0; n--) { ni = ni->prev; - if (ni == NULL) return; + if (ni == nullptr) return; } /* Fill the widget with news items. */ @@ -1072,7 +1072,7 @@ struct MessageHistoryWindow : Window { y += this->line_height; ni = ni->prev; - if (ni == NULL) return; + if (ni == nullptr) return; } } @@ -1091,11 +1091,11 @@ struct MessageHistoryWindow : Window { { if (widget == WID_MH_BACKGROUND) { NewsItem *ni = _latest_news; - if (ni == NULL) return; + if (ni == nullptr) return; for (int n = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_MH_BACKGROUND, WD_FRAMERECT_TOP, this->line_height); n > 0; n--) { ni = ni->prev; - if (ni == NULL) return; + if (ni == nullptr) return; } ShowNewsMessage(ni); diff --git a/src/news_type.h b/src/news_type.h --- a/src/news_type.h +++ b/src/news_type.h @@ -155,7 +155,7 @@ struct CompanyNewsInformation { uint32 face; ///< The face of the president byte colour; ///< The colour related to the company - void FillData(const struct Company *c, const struct Company *other = NULL); + void FillData(const struct Company *c, const struct Company *other = nullptr); }; #endif /* NEWS_TYPE_H */ diff --git a/src/object.h b/src/object.h --- a/src/object.h +++ b/src/object.h @@ -18,7 +18,7 @@ void UpdateCompanyHQ(TileIndex tile, uint score); -void BuildObject(ObjectType type, TileIndex tile, CompanyID owner = OWNER_NONE, struct Town *town = NULL, uint8 view = 0); +void BuildObject(ObjectType type, TileIndex tile, CompanyID owner = OWNER_NONE, struct Town *town = nullptr, uint8 view = 0); void ShowBuildObjectPicker(); diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -90,7 +90,7 @@ void BuildObject(ObjectType type, TileIn Object *o = new Object(); o->type = type; o->location = ta; - o->town = town == NULL ? CalcClosestTownFromTile(tile) : town; + o->town = town == nullptr ? CalcClosestTownFromTile(tile) : town; o->build_date = _date; o->view = view; @@ -114,7 +114,7 @@ void BuildObject(ObjectType type, TileIn } } - assert(o->town != NULL); + assert(o->town != nullptr); TILE_AREA_LOOP(t, ta) { WaterClass wc = (IsWaterTile(t) ? GetWaterClass(t) : WATER_CLASS_INVALID); @@ -263,7 +263,7 @@ CommandCost CmdBuildObject(TileIndex til uint16 callback = CALLBACK_FAILED; if (HasBit(spec->callback_mask, CBM_OBJ_SLOPE_CHECK)) { TileIndex diff = t - tile; - callback = GetObjectCallback(CBID_OBJECT_LAND_SLOPE_CHECK, GetTileSlope(t), TileY(diff) << 4 | TileX(diff), spec, NULL, t, view); + callback = GetObjectCallback(CBID_OBJECT_LAND_SLOPE_CHECK, GetTileSlope(t), TileY(diff) << 4 | TileX(diff), spec, nullptr, t, view); } if (callback == CALLBACK_FAILED) { @@ -342,7 +342,7 @@ CommandCost CmdBuildObject(TileIndex til } if (flags & DC_EXEC) { - BuildObject(type, tile, _current_company, NULL, view); + BuildObject(type, tile, _current_company, nullptr, view); /* Make sure the HQ starts at the right size. */ if (type == OBJECT_HQ) UpdateCompanyHQ(tile, hq_score); @@ -366,7 +366,7 @@ static void DrawTile_Object(TileInfo *ti if ((spec->flags & OBJECT_FLAG_HAS_NO_FOUNDATION) == 0) DrawFoundation(ti, GetFoundation_Object(ti->tile, ti->tileh)); if (type < NEW_OBJECT_OFFSET) { - const DrawTileSprites *dts = NULL; + const DrawTileSprites *dts = nullptr; Owner to = GetTileOwner(ti->tile); PaletteID palette = to == OWNER_NONE ? PAL_NONE : COMPANY_SPRITE_COLOUR(to); @@ -447,7 +447,7 @@ std::vector _cleared_ /** * Find the entry in _cleared_object_areas which occupies a certain tile. * @param tile Tile of interest - * @return Occupying entry, or NULL if none + * @return Occupying entry, or nullptr if none */ ClearedObjectArea *FindClearedObject(TileIndex tile) { @@ -457,7 +457,7 @@ ClearedObjectArea *FindClearedObject(Til if (coa.area.Intersects(ta)) return &coa; } - return NULL; + return nullptr; } static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags) @@ -567,7 +567,7 @@ static void GetTileDesc_Object(TileIndex td->owner[0] = GetTileOwner(tile); td->build_date = Object::GetByTile(tile)->build_date; - if (spec->grf_prop.grffile != NULL) { + if (spec->grf_prop.grffile != nullptr) { td->grf = GetGRFConfig(spec->grf_prop.grffile->grfid)->GetName(); } } @@ -694,7 +694,7 @@ static bool TryBuildTransmitter() int h; if (IsTileType(tile, MP_CLEAR) && IsTileFlat(tile, &h) && h >= 4 && !IsBridgeAbove(tile)) { TileIndex t = tile; - if (CircularTileSearch(&t, 9, HasTransmitter, NULL)) return false; + if (CircularTileSearch(&t, 9, HasTransmitter, nullptr)) return false; BuildObject(OBJECT_TRANSMITTER, tile); return true; @@ -754,7 +754,7 @@ void GenerateObjects() default: uint8 view = RandomRange(spec->views); - if (CmdBuildObject(RandomTile(), DC_EXEC | DC_AUTO | DC_NO_TEST_TOWN_RATING | DC_NO_MODIFY_TOWN_RATING, i, view, NULL).Succeeded()) amount--; + if (CmdBuildObject(RandomTile(), DC_EXEC | DC_AUTO | DC_NO_TEST_TOWN_RATING | DC_NO_MODIFY_TOWN_RATING, i, view, nullptr).Succeeded()) amount--; break; } } @@ -840,8 +840,8 @@ extern const TileTypeProcs _tile_type_ob AnimateTile_Object, // animate_tile_proc TileLoop_Object, // tile_loop_proc ChangeTileOwner_Object, // 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_Object, // get_foundation_proc TerraformTile_Object, // terraform_tile_proc }; diff --git a/src/object_gui.cpp b/src/object_gui.cpp --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -104,13 +104,13 @@ public: switch (widget) { case WID_BO_OBJECT_NAME: { const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); - SetDParam(0, spec != NULL ? spec->name : STR_EMPTY); + SetDParam(0, spec != nullptr ? spec->name : STR_EMPTY); break; } case WID_BO_OBJECT_SIZE: { const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); - int size = spec == NULL ? 0 : spec->size; + int size = spec == nullptr ? 0 : spec->size; SetDParam(0, GB(size, HasBit(_selected_object_view, 0) ? 4 : 0, 4)); SetDParam(1, GB(size, HasBit(_selected_object_view, 0) ? 0 : 4, 4)); break; @@ -145,7 +145,7 @@ public: case WID_BO_OBJECT_MATRIX: { /* Get the right amount of buttons based on the current spec. */ const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); - if (spec != NULL) { + if (spec != nullptr) { if (spec->views >= 2) size->width += resize->width; if (spec->views >= 4) size->height += resize->height; } @@ -185,7 +185,7 @@ public: /* Get the right size for the single widget based on the current spec. */ const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); - if (spec != NULL) { + if (spec != nullptr) { if (spec->views >= 2) size->width = size->width / 2 - 1; if (spec->views >= 4) size->height = size->height / 2 - 1; } @@ -229,7 +229,7 @@ public: case WID_BO_OBJECT_SPRITE: { const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); - if (spec == NULL) break; + if (spec == nullptr) break; /* Height of the selection matrix. * Depending on the number of views, the matrix has a 1x1, 1x2, 2x1 or 2x2 layout. To make the previews @@ -243,7 +243,7 @@ public: if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left + 1, r.bottom - r.top + 1)) { DrawPixelInfo *old_dpi = _cur_dpi; _cur_dpi = &tmp_dpi; - if (spec->grf_prop.grffile == NULL) { + if (spec->grf_prop.grffile == nullptr) { extern const DrawTileSprites _objects[]; const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; DrawOrigTileSeqInGUI((r.right - r.left) / 2 - 1, (r.bottom - r.top + matrix_height / 2) / 2 - OBJECT_MARGIN - ScaleGUITrad(TILE_PIXELS), dts, PAL_NONE); @@ -260,7 +260,7 @@ public: int obj_index = objclass->GetIndexFromUI(GB(widget, 16, 16)); if (obj_index < 0) break; const ObjectSpec *spec = objclass->GetSpec(obj_index); - if (spec == NULL) break; + if (spec == nullptr) break; if (!spec->IsAvailable()) { GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, PC_BLACK, FILLRECT_CHECKER); @@ -270,7 +270,7 @@ public: if (FillDrawPixelInfo(&tmp_dpi, r.left + 1, r.top, (r.right - 1) - (r.left + 1) + 1, r.bottom - r.top + 1)) { DrawPixelInfo *old_dpi = _cur_dpi; _cur_dpi = &tmp_dpi; - if (spec->grf_prop.grffile == NULL) { + if (spec->grf_prop.grffile == nullptr) { extern const DrawTileSprites _objects[]; const DrawTileSprites *dts = &_objects[spec->grf_prop.local_id]; DrawOrigTileSeqInGUI((r.right - r.left) / 2 - 1, r.bottom - r.top - OBJECT_MARGIN - ScaleGUITrad(TILE_PIXELS), dts, PAL_NONE); @@ -285,11 +285,11 @@ public: case WID_BO_INFO: { const ObjectSpec *spec = ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index); - if (spec == NULL) break; + if (spec == nullptr) break; /* Get the extra message for the GUI */ if (HasBit(spec->callback_mask, CBM_OBJ_FUND_MORE_TEXT)) { - uint16 callback_res = GetObjectCallback(CBID_OBJECT_FUND_MORE_TEXT, 0, 0, spec, NULL, INVALID_TILE, _selected_object_view); + uint16 callback_res = GetObjectCallback(CBID_OBJECT_FUND_MORE_TEXT, 0, 0, spec, nullptr, INVALID_TILE, _selected_object_view); if (callback_res != CALLBACK_FAILED && callback_res != 0x400) { if (callback_res > 0x400) { ErrorUnknownCallbackResult(spec->grf_prop.grffile->grfid, CBID_OBJECT_FUND_MORE_TEXT, callback_res); diff --git a/src/openttd.cpp b/src/openttd.cpp --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -99,7 +99,7 @@ void CDECL usererror(const char *s, ...) va_end(va); ShowOSErrorBox(buf, false); - if (VideoDriver::GetInstance() != NULL) VideoDriver::GetInstance()->Stop(); + if (VideoDriver::GetInstance() != nullptr) VideoDriver::GetInstance()->Stop(); exit(1); } @@ -118,7 +118,7 @@ void CDECL error(const char *s, ...) vseprintf(buf, lastof(buf), s, va); va_end(va); - if (VideoDriver::GetInstance() == NULL || VideoDriver::GetInstance()->HasGUI()) { + if (VideoDriver::GetInstance() == nullptr || VideoDriver::GetInstance()->HasGUI()) { ShowOSErrorBox(buf, true); } @@ -242,7 +242,7 @@ static void WriteSavegameInfo(const char p = strecpy(p, "NewGRFs:\n", lastof(buf)); if (_load_check_data.HasNewGrfs()) { - for (GRFConfig *c = _load_check_data.grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _load_check_data.grfconfig; c != nullptr; c = c->next) { char md5sum[33]; md5sumToString(md5sum, lastof(md5sum), HasBit(c->flags, GCF_COMPATIBLE) ? c->original_md5sum : c->ident.md5sum); p += seprintf(p, lastof(buf), "%08X %s %s\n", c->ident.grfid, md5sum, c->filename); @@ -268,13 +268,13 @@ static void WriteSavegameInfo(const char static void ParseResolution(Dimension *res, const char *s) { const char *t = strchr(s, 'x'); - if (t == NULL) { + if (t == nullptr) { ShowInfoF("Invalid resolution '%s'", s); return; } - res->width = max(strtoul(s, NULL, 0), 64UL); - res->height = max(strtoul(t + 1, NULL, 0), 64UL); + res->width = max(strtoul(s, nullptr, 0), 64UL); + res->height = max(strtoul(t + 1, nullptr, 0), 64UL); } @@ -347,11 +347,11 @@ static void LoadIntroGame(bool load_newg void MakeNewgameSettingsLive() { 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]; } } - if (_settings_game.game_config != NULL) { + if (_settings_game.game_config != nullptr) { delete _settings_game.game_config; } @@ -361,16 +361,16 @@ void MakeNewgameSettingsLive() _old_vds = _settings_client.company.vehicle; for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { - _settings_game.ai_config[c] = NULL; - if (_settings_newgame.ai_config[c] != NULL) { + _settings_game.ai_config[c] = nullptr; + if (_settings_newgame.ai_config[c] != nullptr) { _settings_game.ai_config[c] = new AIConfig(_settings_newgame.ai_config[c]); if (!AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->HasScript()) { - AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->Change(NULL); + AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->Change(nullptr); } } } - _settings_game.game_config = NULL; - if (_settings_newgame.game_config != NULL) { + _settings_game.game_config = nullptr; + if (_settings_newgame.game_config != nullptr) { _settings_game.game_config = new GameConfig(_settings_newgame.game_config); } } @@ -390,7 +390,7 @@ struct AfterNewGRFScan : NewGRFScanCallb uint32 generation_seed; ///< Seed for the new game. char *dedicated_host; ///< Hostname for the dedicated server. uint16 dedicated_port; ///< Port for the dedicated server. - char *network_conn; ///< Information about the server to connect to, or NULL. + char *network_conn; ///< Information about the server to connect to, or nullptr. const char *join_server_password; ///< The password to join the server with. const char *join_company_password; ///< The password to join the company with. bool *save_config_ptr; ///< The pointer to the save config setting. @@ -403,8 +403,8 @@ struct AfterNewGRFScan : NewGRFScanCallb */ AfterNewGRFScan(bool *save_config_ptr) : startyear(INVALID_YEAR), generation_seed(GENERATE_NEW_SEED), - dedicated_host(NULL), dedicated_port(0), network_conn(NULL), - join_server_password(NULL), join_company_password(NULL), + dedicated_host(nullptr), dedicated_port(0), network_conn(nullptr), + join_server_password(nullptr), join_company_password(nullptr), save_config_ptr(save_config_ptr), save_config(true) { /* Visual C++ 2015 fails compiling this line (AfterNewGRFScan::generation_seed undefined symbol) @@ -444,7 +444,7 @@ struct AfterNewGRFScan : NewGRFScanCallb if (startyear != INVALID_YEAR) _settings_newgame.game_creation.starting_year = startyear; if (generation_seed != GENERATE_NEW_SEED) _settings_newgame.game_creation.generation_seed = generation_seed; - if (dedicated_host != NULL) { + if (dedicated_host != nullptr) { _network_bind_list.clear(); _network_bind_list.emplace_back(dedicated_host); } @@ -458,15 +458,15 @@ struct AfterNewGRFScan : NewGRFScanCallb /* Make sure _settings is filled with _settings_newgame if we switch to a game directly */ if (_switch_mode != SM_NONE) MakeNewgameSettingsLive(); - if (_network_available && network_conn != NULL) { - const char *port = NULL; - const char *company = NULL; + if (_network_available && network_conn != nullptr) { + const char *port = nullptr; + const char *company = nullptr; uint16 rport = NETWORK_DEFAULT_PORT; CompanyID join_as = COMPANY_NEW_COMPANY; ParseConnectionString(&company, &port, network_conn); - if (company != NULL) { + if (company != nullptr) { join_as = (CompanyID)atoi(company); if (join_as != COMPANY_SPECTATOR) { @@ -477,7 +477,7 @@ struct AfterNewGRFScan : NewGRFScanCallb } } } - if (port != NULL) rport = atoi(port); + if (port != nullptr) rport = atoi(port); LoadIntroGame(); _switch_mode = SM_NONE; @@ -531,19 +531,19 @@ static const OptionData _options[] = { */ int openttd_main(int argc, char *argv[]) { - char *musicdriver = NULL; - char *sounddriver = NULL; - char *videodriver = NULL; - char *blitter = NULL; - char *graphics_set = NULL; - char *sounds_set = NULL; - char *music_set = NULL; + char *musicdriver = nullptr; + char *sounddriver = nullptr; + char *videodriver = nullptr; + char *blitter = nullptr; + char *graphics_set = nullptr; + char *sounds_set = nullptr; + char *music_set = nullptr; Dimension resolution = {0, 0}; /* AfterNewGRFScan sets save_config to true after scanning completed. */ bool save_config = false; AfterNewGRFScan *scanner = new AfterNewGRFScan(&save_config); bool dedicated = false; - char *debuglog_conn = NULL; + char *debuglog_conn = nullptr; extern bool _dedicated_forks; _dedicated_forks = false; @@ -553,7 +553,7 @@ int openttd_main(int argc, char *argv[]) _game_mode = GM_MENU; _switch_mode = SM_MENU; - _config_file = NULL; + _config_file = nullptr; GetOptData mgo(argc - 1, argv + 1, _options); int ret = 0; @@ -579,19 +579,19 @@ int openttd_main(int argc, char *argv[]) blitter = stredup("null"); dedicated = true; SetDebugString("net=6"); - if (mgo.opt != NULL) { + if (mgo.opt != nullptr) { /* Use the existing method for parsing (openttd -n). * However, we do ignore the #company part. */ - const char *temp = NULL; - const char *port = NULL; + const char *temp = nullptr; + const char *port = nullptr; ParseConnectionString(&temp, &port, mgo.opt); if (!StrEmpty(mgo.opt)) scanner->dedicated_host = mgo.opt; - if (port != NULL) scanner->dedicated_port = atoi(port); + if (port != nullptr) scanner->dedicated_port = atoi(port); } break; case 'f': _dedicated_forks = true; break; case 'n': - scanner->network_conn = mgo.opt; // optional IP parameter, NULL if unset + scanner->network_conn = mgo.opt; // optional IP parameter, nullptr if unset break; case 'l': debuglog_conn = mgo.opt; @@ -608,12 +608,12 @@ int openttd_main(int argc, char *argv[]) #if defined(_WIN32) CreateConsole(); #endif - if (mgo.opt != NULL) SetDebugString(mgo.opt); + if (mgo.opt != nullptr) SetDebugString(mgo.opt); break; } case 'e': _switch_mode = (_switch_mode == SM_LOAD_GAME || _switch_mode == SM_LOAD_SCENARIO ? SM_LOAD_SCENARIO : SM_EDITOR); break; case 'g': - if (mgo.opt != NULL) { + if (mgo.opt != nullptr) { _file_to_saveload.SetName(mgo.opt); bool is_scenario = _switch_mode == SM_EDITOR || _switch_mode == SM_LOAD_SCENARIO; _switch_mode = is_scenario ? SM_LOAD_SCENARIO : SM_LOAD_GAME; @@ -621,8 +621,8 @@ int openttd_main(int argc, char *argv[]) /* if the file doesn't exist or it is not a valid savegame, let the saveload code show an error */ const char *t = strrchr(_file_to_saveload.name, '.'); - if (t != NULL) { - FiosType ft = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, t, NULL, NULL); + if (t != nullptr) { + FiosType ft = FiosGetSavegameListCallback(SLO_LOAD, _file_to_saveload.name, t, nullptr, nullptr); if (ft != FIOS_TYPE_INVALID) _file_to_saveload.SetMode(ft); } @@ -663,7 +663,7 @@ int openttd_main(int argc, char *argv[]) goto exit_noshutdown; } - case 'G': scanner->generation_seed = strtoul(mgo.opt, NULL, 10); break; + case 'G': scanner->generation_seed = strtoul(mgo.opt, nullptr, 10); break; case 'c': free(_config_file); _config_file = stredup(mgo.opt); break; case 'x': scanner->save_config = false; break; case 'h': @@ -729,10 +729,10 @@ int openttd_main(int argc, char *argv[]) InitWindowSystem(); BaseGraphics::FindSets(); - if (graphics_set == NULL && BaseGraphics::ini_set != NULL) graphics_set = stredup(BaseGraphics::ini_set); + if (graphics_set == nullptr && BaseGraphics::ini_set != nullptr) graphics_set = stredup(BaseGraphics::ini_set); if (!BaseGraphics::SetSet(graphics_set)) { if (!StrEmpty(graphics_set)) { - BaseGraphics::SetSet(NULL); + BaseGraphics::SetSet(nullptr); ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND); msg.SetDParamStr(0, graphics_set); @@ -745,7 +745,7 @@ int openttd_main(int argc, char *argv[]) GfxInitPalettes(); DEBUG(misc, 1, "Loading blitter..."); - if (blitter == NULL && _ini_blitter != NULL) blitter = stredup(_ini_blitter); + if (blitter == nullptr && _ini_blitter != nullptr) blitter = stredup(_ini_blitter); _blitter_autodetected = StrEmpty(blitter); /* Activate the initial blitter. * This is only some initial guess, after NewGRFs have been loaded SwitchNewGRFBlitter may switch to a different one. @@ -754,9 +754,9 @@ int openttd_main(int argc, char *argv[]) * - Use 8bpp blitter otherwise. */ if (!_blitter_autodetected || - (_support8bpp != S8BPP_NONE && (BaseGraphics::GetUsedSet() == NULL || BaseGraphics::GetUsedSet()->blitter == BLT_8BPP)) || - BlitterFactory::SelectBlitter("32bpp-anim") == NULL) { - if (BlitterFactory::SelectBlitter(blitter) == NULL) { + (_support8bpp != S8BPP_NONE && (BaseGraphics::GetUsedSet() == nullptr || BaseGraphics::GetUsedSet()->blitter == BLT_8BPP)) || + BlitterFactory::SelectBlitter("32bpp-anim") == nullptr) { + if (BlitterFactory::SelectBlitter(blitter) == nullptr) { StrEmpty(blitter) ? usererror("Failed to autoprobe blitter") : usererror("Failed to select requested blitter '%s'; does it exist?", blitter); @@ -764,7 +764,7 @@ int openttd_main(int argc, char *argv[]) } free(blitter); - if (videodriver == NULL && _ini_videodriver != NULL) videodriver = stredup(_ini_videodriver); + if (videodriver == nullptr && _ini_videodriver != nullptr) videodriver = stredup(_ini_videodriver); DriverFactoryBase::SelectDriver(videodriver, Driver::DT_VIDEO); free(videodriver); @@ -775,15 +775,15 @@ int openttd_main(int argc, char *argv[]) NetworkStartUp(); // initialize network-core - if (debuglog_conn != NULL && _network_available) { - const char *not_used = NULL; - const char *port = NULL; + if (debuglog_conn != nullptr && _network_available) { + const char *not_used = nullptr; + const char *port = nullptr; uint16 rport; rport = NETWORK_DEFAULT_DEBUGLOG_PORT; ParseConnectionString(¬_used, &port, debuglog_conn); - if (port != NULL) rport = atoi(port); + if (port != nullptr) rport = atoi(port); NetworkStartDebugLog(NetworkAddress(debuglog_conn, rport)); } @@ -800,9 +800,9 @@ int openttd_main(int argc, char *argv[]) InitializeScreenshotFormats(); BaseSounds::FindSets(); - if (sounds_set == NULL && BaseSounds::ini_set != NULL) sounds_set = stredup(BaseSounds::ini_set); + if (sounds_set == nullptr && BaseSounds::ini_set != nullptr) sounds_set = stredup(BaseSounds::ini_set); if (!BaseSounds::SetSet(sounds_set)) { - if (StrEmpty(sounds_set) || !BaseSounds::SetSet(NULL)) { + if (StrEmpty(sounds_set) || !BaseSounds::SetSet(nullptr)) { usererror("Failed to find a sounds set. Please acquire a sounds set for OpenTTD. See section 4.1 of README.md."); } else { ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND); @@ -813,9 +813,9 @@ int openttd_main(int argc, char *argv[]) free(sounds_set); BaseMusic::FindSets(); - if (music_set == NULL && BaseMusic::ini_set != NULL) music_set = stredup(BaseMusic::ini_set); + if (music_set == nullptr && BaseMusic::ini_set != nullptr) music_set = stredup(BaseMusic::ini_set); if (!BaseMusic::SetSet(music_set)) { - if (StrEmpty(music_set) || !BaseMusic::SetSet(NULL)) { + if (StrEmpty(music_set) || !BaseMusic::SetSet(nullptr)) { usererror("Failed to find a music set. Please acquire a music set for OpenTTD. See section 4.1 of README.md."); } else { ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND); @@ -825,11 +825,11 @@ int openttd_main(int argc, char *argv[]) } free(music_set); - if (sounddriver == NULL && _ini_sounddriver != NULL) sounddriver = stredup(_ini_sounddriver); + if (sounddriver == nullptr && _ini_sounddriver != nullptr) sounddriver = stredup(_ini_sounddriver); DriverFactoryBase::SelectDriver(sounddriver, Driver::DT_SOUND); free(sounddriver); - if (musicdriver == NULL && _ini_musicdriver != NULL) musicdriver = stredup(_ini_musicdriver); + if (musicdriver == nullptr && _ini_musicdriver != nullptr) musicdriver = stredup(_ini_musicdriver); DriverFactoryBase::SelectDriver(musicdriver, Driver::DT_MUSIC); free(musicdriver); @@ -852,7 +852,7 @@ int openttd_main(int argc, char *argv[]) /* ScanNewGRFFiles now has control over the scanner. */ ScanNewGRFFiles(scanner); - scanner = NULL; + scanner = nullptr; VideoDriver::GetInstance()->MainLoop(); @@ -897,7 +897,7 @@ exit_normal: delete scanner; extern FILE *_log_fd; - if (_log_fd != NULL) { + if (_log_fd != nullptr) { fclose(_log_fd); } @@ -994,17 +994,17 @@ static void MakeNewEditorWorld() * @param fop mode of loading, always SLO_LOAD * @param newgm switch to this mode of loading fails due to some unknown error * @param subdir default directory to look for filename, set to 0 if not needed - * @param lf Load filter to use, if NULL: use filename + subdir. + * @param lf Load filter to use, if nullptr: use filename + subdir. */ -bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL) +bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr) { assert(fop == SLO_LOAD); - assert(dft == DFT_GAME_FILE || (lf == NULL && dft == DFT_OLD_GAME_FILE)); + assert(dft == DFT_GAME_FILE || (lf == nullptr && dft == DFT_OLD_GAME_FILE)); GameMode ogm = _game_mode; _game_mode = newgm; - switch (lf == NULL ? SaveOrLoad(filename, fop, dft, subdir) : LoadWithFilter(lf)) { + switch (lf == nullptr ? SaveOrLoad(filename, fop, dft, subdir) : LoadWithFilter(lf)) { case SL_OK: return true; case SL_REINIT: @@ -1139,7 +1139,7 @@ void SwitchToMode(SwitchMode new_mode) case SM_MENU: // Switch to game intro menu LoadIntroGame(); - if (BaseSounds::ini_set == NULL && BaseSounds::GetUsedSet()->fallback) { + if (BaseSounds::ini_set == nullptr && BaseSounds::GetUsedSet()->fallback) { ShowErrorMessage(STR_WARNING_FALLBACK_SOUNDSET, INVALID_STRING_ID, WL_CRITICAL); BaseSounds::ini_set = stredup(BaseSounds::GetUsedSet()->name); } @@ -1235,7 +1235,7 @@ static void CheckCaches() if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue; uint length = 0; - for (const Vehicle *u = v; u != NULL; u = u->Next()) length++; + for (const Vehicle *u = v; u != nullptr; u = u->Next()) length++; NewGRFCache *grf_cache = CallocT(length); VehicleCache *veh_cache = CallocT(length); @@ -1243,7 +1243,7 @@ static void CheckCaches() TrainCache *tra_cache = CallocT(length); length = 0; - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { FillNewGRFVehicleCache(u); grf_cache[length] = u->grf_cache; veh_cache[length] = u->vcache; @@ -1270,7 +1270,7 @@ static void CheckCaches() } length = 0; - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { FillNewGRFVehicleCache(u); if (memcmp(&grf_cache[length], &u->grf_cache, sizeof(NewGRFCache)) != 0) { DEBUG(desync, 2, "newgrf cache mismatch: type %i, vehicle %i, company %i, unit number %i, wagon %i", (int)v->type, v->index, (int)v->owner, v->unitnumber, length); diff --git a/src/order_backup.cpp b/src/order_backup.cpp --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -30,7 +30,7 @@ OrderBackup::~OrderBackup() if (CleaningPool()) return; Order *o = this->orders; - while (o != NULL) { + while (o != nullptr) { Order *next = o->next; delete o; o = next; @@ -75,11 +75,11 @@ OrderBackup::OrderBackup(const Vehicle * void OrderBackup::DoRestore(Vehicle *v) { /* If we had shared orders, recover that */ - if (this->clone != NULL) { + if (this->clone != nullptr) { DoCommand(0, v->index | CO_SHARE << 30, this->clone->index, DC_EXEC, CMD_CLONE_ORDER); - } else if (this->orders != NULL && OrderList::CanAllocateItem()) { + } else if (this->orders != nullptr && OrderList::CanAllocateItem()) { v->orders.list = new OrderList(this->orders, v); - this->orders = NULL; + this->orders = nullptr; /* Make sure buoys/oil rigs are updated in the station list. */ InvalidateWindowClassesData(WC_STATION_LIST, 0); } @@ -206,7 +206,7 @@ CommandCost CmdClearOrderBackup(TileInde /* We need to circumvent the "prevention" from this command being executed * while the game is paused, so use the internal method. Nor do we want * this command to get its cost estimated when shift is pressed. */ - DoCommandPInternal(ob->tile, 0, user, CMD_CLEAR_ORDER_BACKUP, NULL, NULL, true, false); + DoCommandPInternal(ob->tile, 0, user, CMD_CLEAR_ORDER_BACKUP, nullptr, nullptr, true, false); } else { /* The command came from the game logic, i.e. the clearing of a tile. * In that case we have no need to actually sync this, just do it. */ @@ -230,20 +230,20 @@ CommandCost CmdClearOrderBackup(TileInde /** * Clear/update the (clone) vehicle from an order backup. * @param v The vehicle to clear. - * @pre v != NULL + * @pre v != nullptr * @note If it is not possible to set another vehicle as clone * "example", then this backed up order will be removed. */ /* static */ void OrderBackup::ClearVehicle(const Vehicle *v) { - assert(v != NULL); + assert(v != nullptr); OrderBackup *ob; FOR_ALL_ORDER_BACKUPS(ob) { if (ob->clone == v) { /* Get another item in the shared list. */ ob->clone = (v->FirstShared() == v) ? v->NextShared() : v->FirstShared(); /* But if that isn't there, remove it. */ - if (ob->clone == NULL) delete ob; + if (ob->clone == nullptr) delete ob; } } } @@ -260,7 +260,7 @@ CommandCost CmdClearOrderBackup(TileInde { OrderBackup *ob; FOR_ALL_ORDER_BACKUPS(ob) { - for (Order *order = ob->orders; order != NULL; order = order->next) { + for (Order *order = ob->orders; order != nullptr; order = order->next) { OrderType ot = order->GetType(); if (ot == OT_GOTO_DEPOT && (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0) continue; if (ot == OT_GOTO_DEPOT && hangar && !IsHangarTile(ob->tile)) continue; // Not an aircraft? Can't have a hangar order. diff --git a/src/order_base.h b/src/order_base.h --- a/src/order_base.h +++ b/src/order_base.h @@ -48,7 +48,7 @@ private: uint16 max_speed; ///< How fast the vehicle may go on the way to the destination. public: - Order *next; ///< Pointer to next order. If NULL, end of list + Order *next; ///< Pointer to next order. If nullptr, end of list Order() : flags(0), refit_cargo(CT_NO_REFIT), max_speed(UINT16_MAX) {} ~Order(); @@ -268,7 +268,7 @@ private: public: /** Default constructor producing an invalid order list. */ OrderList(VehicleOrderID num_orders = INVALID_VEH_ORDER_ID) - : first(NULL), num_orders(num_orders), num_manual_orders(0), num_vehicles(0), first_shared(NULL), + : first(nullptr), num_orders(num_orders), num_manual_orders(0), num_vehicles(0), first_shared(nullptr), timetable_duration(0), total_duration(0) { } /** @@ -303,7 +303,7 @@ public: * @param curr Order to find the next one for. * @return Next order. */ - inline const Order *GetNext(const Order *curr) const { return (curr->next == NULL) ? this->GetFirstOrder() : curr->next; } + inline const Order *GetNext(const Order *curr) const { return (curr->next == nullptr) ? this->GetFirstOrder() : curr->next; } /** * Get number of orders in the order list. @@ -317,7 +317,7 @@ public: */ inline VehicleOrderID GetNumManualOrders() const { return this->num_manual_orders; } - StationIDStack GetNextStoppingStation(const Vehicle *v, const Order *first = NULL, uint hops = 0) const; + StationIDStack GetNextStoppingStation(const Vehicle *v, const Order *first = nullptr, uint hops = 0) const; const Order *GetNextDecisionNode(const Order *next, uint hops) const; void InsertOrderAt(Order *new_order, int index); @@ -396,7 +396,7 @@ public: #define FOR_ALL_ORDERS(var) FOR_ALL_ORDERS_FROM(var, 0) -#define FOR_VEHICLE_ORDERS(v, order) for (order = (v->orders.list == NULL) ? NULL : v->orders.list->GetFirstOrder(); order != NULL; order = order->next) +#define FOR_VEHICLE_ORDERS(v, order) for (order = (v->orders.list == nullptr) ? nullptr : v->orders.list->GetFirstOrder(); order != nullptr; order = order->next) #define FOR_ALL_ORDER_LISTS_FROM(var, start) FOR_ALL_ITEMS_FROM(OrderList, orderlist_index, var, start) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -53,7 +53,7 @@ Order::~Order() * the list of stations. So, we need to invalidate that window if needed. */ if (this->IsType(OT_GOTO_STATION) || this->IsType(OT_GOTO_WAYPOINT)) { BaseStation *bs = BaseStation::GetIfValid(this->GetDestination()); - if (bs != NULL && bs->owner == OWNER_NONE) InvalidateWindowClassesData(WC_STATION_LIST, 0); + if (bs != nullptr && bs->owner == OWNER_NONE) InvalidateWindowClassesData(WC_STATION_LIST, 0); } } @@ -66,7 +66,7 @@ void Order::Free() this->type = OT_NOTHING; this->flags = 0; this->dest = 0; - this->next = NULL; + this->next = nullptr; } /** @@ -237,7 +237,7 @@ Order::Order(uint32 packed) this->type = (OrderType)GB(packed, 0, 8); this->flags = GB(packed, 8, 8); this->dest = GB(packed, 16, 16); - this->next = NULL; + this->next = nullptr; this->refit_cargo = CT_NO_REFIT; this->wait_time = 0; this->travel_time = 0; @@ -300,19 +300,19 @@ void OrderList::Initialize(Order *chain, this->timetable_duration = 0; this->total_duration = 0; - for (Order *o = this->first; o != NULL; o = o->next) { + for (Order *o = this->first; o != nullptr; o = o->next) { ++this->num_orders; if (!o->IsType(OT_IMPLICIT)) ++this->num_manual_orders; this->timetable_duration += o->GetTimetabledWait() + o->GetTimetabledTravel(); this->total_duration += o->GetWaitTime() + o->GetTravelTime(); } - for (Vehicle *u = this->first_shared->PreviousShared(); u != NULL; u = u->PreviousShared()) { + for (Vehicle *u = this->first_shared->PreviousShared(); u != nullptr; u = u->PreviousShared()) { ++this->num_vehicles; this->first_shared = u; } - for (const Vehicle *u = v->NextShared(); u != NULL; u = u->NextShared()) ++this->num_vehicles; + for (const Vehicle *u = v->NextShared(); u != nullptr; u = u->NextShared()) ++this->num_vehicles; } /** @@ -323,13 +323,13 @@ void OrderList::Initialize(Order *chain, void OrderList::FreeChain(bool keep_orderlist) { Order *next; - for (Order *o = this->first; o != NULL; o = next) { + for (Order *o = this->first; o != nullptr; o = next) { next = o->next; delete o; } if (keep_orderlist) { - this->first = NULL; + this->first = nullptr; this->num_orders = 0; this->num_manual_orders = 0; this->timetable_duration = 0; @@ -345,11 +345,11 @@ void OrderList::FreeChain(bool keep_orde */ Order *OrderList::GetOrderAt(int index) const { - if (index < 0) return NULL; + if (index < 0) return nullptr; Order *order = this->first; - while (order != NULL && index-- > 0) { + while (order != nullptr && index-- > 0) { order = order->next; } return order; @@ -364,11 +364,11 @@ Order *OrderList::GetOrderAt(int index) * \li a station order * \li a refitting depot order * \li a non-trivial conditional order - * \li NULL if the vehicle won't stop anymore. + * \li nullptr if the vehicle won't stop anymore. */ const Order *OrderList::GetNextDecisionNode(const Order *next, uint hops) const { - if (hops > this->GetNumOrders() || next == NULL) return NULL; + if (hops > this->GetNumOrders() || next == nullptr) return nullptr; if (next->IsType(OT_CONDITIONAL)) { if (next->GetConditionVariable() != OCV_UNCONDITIONALLY) return next; @@ -381,7 +381,7 @@ const Order *OrderList::GetNextDecisionN } if (next->IsType(OT_GOTO_DEPOT)) { - if (next->GetDepotActionType() == ODATFB_HALT) return NULL; + if (next->GetDepotActionType() == ODATFB_HALT) return nullptr; if (next->IsRefit()) return next; } @@ -395,7 +395,7 @@ const Order *OrderList::GetNextDecisionN /** * Recursively determine the next deterministic station to stop at. * @param v The vehicle we're looking at. - * @param first Order to start searching at or NULL to start at cur_implicit_order_index + 1. + * @param first Order to start searching at or nullptr to start at cur_implicit_order_index + 1. * @param hops Number of orders we have already looked at. * @return Next stoppping station or INVALID_STATION. * @pre The vehicle is currently loading and v->last_station_visited is meaningful. @@ -405,17 +405,17 @@ StationIDStack OrderList::GetNextStoppin { const Order *next = first; - if (first == NULL) { + if (first == nullptr) { next = this->GetOrderAt(v->cur_implicit_order_index); - if (next == NULL) { + if (next == nullptr) { next = this->GetFirstOrder(); - if (next == NULL) return INVALID_STATION; + if (next == nullptr) return INVALID_STATION; } else { - /* GetNext never returns NULL if there is a valid station in the list. + /* GetNext never returns nullptr if there is a valid station in the list. * As the given "next" is already valid and a station in the list, we - * don't have to check for NULL here. */ + * don't have to check for nullptr here. */ next = this->GetNext(next); - assert(next != NULL); + assert(next != nullptr); } } @@ -423,16 +423,16 @@ StationIDStack OrderList::GetNextStoppin next = this->GetNextDecisionNode(next, ++hops); /* Resolve possibly nested conditionals by estimation. */ - while (next != NULL && next->IsType(OT_CONDITIONAL)) { + while (next != nullptr && next->IsType(OT_CONDITIONAL)) { /* We return both options of conditional orders. */ const Order *skip_to = this->GetNextDecisionNode( this->GetOrderAt(next->GetConditionSkipToOrder()), hops); const Order *advance = this->GetNextDecisionNode( this->GetNext(next), hops); - if (advance == NULL || advance == first || skip_to == advance) { - next = (skip_to == first) ? NULL : skip_to; - } else if (skip_to == NULL || skip_to == first) { - next = (advance == first) ? NULL : advance; + if (advance == nullptr || advance == first || skip_to == advance) { + next = (skip_to == first) ? nullptr : skip_to; + } else if (skip_to == nullptr || skip_to == first) { + next = (advance == first) ? nullptr : advance; } else { StationIDStack st1 = this->GetNextStoppingStation(v, skip_to, hops); StationIDStack st2 = this->GetNextStoppingStation(v, advance, hops); @@ -443,7 +443,7 @@ StationIDStack OrderList::GetNextStoppin } /* Don't return a next stop if the vehicle has to unload everything. */ - if (next == NULL || ((next->IsType(OT_GOTO_STATION) || next->IsType(OT_IMPLICIT)) && + if (next == nullptr || ((next->IsType(OT_GOTO_STATION) || next->IsType(OT_IMPLICIT)) && next->GetDestination() == v->last_station_visited && (next->GetUnloadType() & (OUFB_TRANSFER | OUFB_UNLOAD)) != 0)) { return INVALID_STATION; @@ -460,7 +460,7 @@ StationIDStack OrderList::GetNextStoppin */ void OrderList::InsertOrderAt(Order *new_order, int index) { - if (this->first == NULL) { + if (this->first == nullptr) { this->first = new_order; } else { if (index == 0) { @@ -566,7 +566,7 @@ void OrderList::RemoveVehicle(Vehicle *v */ bool OrderList::IsVehicleInSharedOrdersList(const Vehicle *v) const { - for (const Vehicle *v_shared = this->first_shared; v_shared != NULL; v_shared = v_shared->NextShared()) { + for (const Vehicle *v_shared = this->first_shared; v_shared != nullptr; v_shared = v_shared->NextShared()) { if (v_shared == v) return true; } @@ -581,7 +581,7 @@ bool OrderList::IsVehicleInSharedOrdersL int OrderList::GetPositionInSharedOrderList(const Vehicle *v) const { int count = 0; - for (const Vehicle *v_shared = v->PreviousShared(); v_shared != NULL; v_shared = v_shared->PreviousShared()) count++; + for (const Vehicle *v_shared = v->PreviousShared(); v_shared != nullptr; v_shared = v_shared->PreviousShared()) count++; return count; } @@ -591,7 +591,7 @@ int OrderList::GetPositionInSharedOrderL */ bool OrderList::IsCompleteTimetable() const { - for (Order *o = this->first; o != NULL; o = o->next) { + for (Order *o = this->first; o != nullptr; o = o->next) { /* Implicit orders are, by definition, not timetabled. */ if (o->IsType(OT_IMPLICIT)) continue; if (!o->IsCompletelyTimetabled()) return false; @@ -612,7 +612,7 @@ void OrderList::DebugCheckSanity() const DEBUG(misc, 6, "Checking OrderList %hu for sanity...", this->index); - for (const Order *o = this->first; o != NULL; o = o->next) { + for (const Order *o = this->first; o != nullptr; o = o->next) { ++check_num_orders; if (!o->IsType(OT_IMPLICIT)) ++check_num_manual_orders; check_timetable_duration += o->GetTimetabledWait() + o->GetTimetabledTravel(); @@ -623,7 +623,7 @@ void OrderList::DebugCheckSanity() const assert(this->timetable_duration == check_timetable_duration); assert(this->total_duration == check_total_duration); - for (const Vehicle *v = this->first_shared; v != NULL; v = v->NextShared()) { + for (const Vehicle *v = this->first_shared; v != nullptr; v = v->NextShared()) { ++check_num_vehicles; assert(v->orders.list == this); } @@ -702,7 +702,7 @@ uint GetOrderDistance(const Order *prev, conditional_depth++; int dist1 = GetOrderDistance(prev, v->GetOrder(cur->GetConditionSkipToOrder()), v, conditional_depth); - int dist2 = GetOrderDistance(prev, cur->next == NULL ? v->orders.list->GetFirstOrder() : cur->next, v, conditional_depth); + int dist2 = GetOrderDistance(prev, cur->next == nullptr ? v->orders.list->GetFirstOrder() : cur->next, v, conditional_depth); return max(dist1, dist2); } @@ -732,7 +732,7 @@ CommandCost CmdInsertOrder(TileIndex til Order new_order(p2); Vehicle *v = Vehicle::GetIfValid(veh); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -742,7 +742,7 @@ CommandCost CmdInsertOrder(TileIndex til switch (new_order.GetType()) { case OT_GOTO_STATION: { const Station *st = Station::GetIfValid(new_order.GetDestination()); - if (st == NULL) return CMD_ERROR; + if (st == nullptr) return CMD_ERROR; if (st->owner != OWNER_NONE) { CommandCost ret = CheckOwnership(st->owner); @@ -750,7 +750,7 @@ CommandCost CmdInsertOrder(TileIndex til } if (!CanVehicleUseStation(v, st)) return_cmd_error(STR_ERROR_CAN_T_ADD_ORDER); - for (Vehicle *u = v->FirstShared(); u != NULL; u = u->NextShared()) { + for (Vehicle *u = v->FirstShared(); u != nullptr; u = u->NextShared()) { if (!CanVehicleUseStation(u, st)) return_cmd_error(STR_ERROR_CAN_T_ADD_ORDER_SHARED); } @@ -789,7 +789,7 @@ CommandCost CmdInsertOrder(TileIndex til if (v->type == VEH_AIRCRAFT) { const Station *st = Station::GetIfValid(new_order.GetDestination()); - if (st == NULL) return CMD_ERROR; + if (st == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(st->owner); if (ret.Failed()) return ret; @@ -800,7 +800,7 @@ CommandCost CmdInsertOrder(TileIndex til } else { const Depot *dp = Depot::GetIfValid(new_order.GetDestination()); - if (dp == NULL) return CMD_ERROR; + if (dp == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(GetTileOwner(dp->xy)); if (ret.Failed()) return ret; @@ -832,7 +832,7 @@ CommandCost CmdInsertOrder(TileIndex til case OT_GOTO_WAYPOINT: { const Waypoint *wp = Waypoint::GetIfValid(new_order.GetDestination()); - if (wp == NULL) return CMD_ERROR; + if (wp == nullptr) return CMD_ERROR; switch (v->type) { default: return CMD_ERROR; @@ -897,7 +897,7 @@ CommandCost CmdInsertOrder(TileIndex til if (v->GetNumOrders() >= MAX_VEH_ORDER_ID) return_cmd_error(STR_ERROR_TOO_MANY_ORDERS); if (!Order::CanAllocateItem()) return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); - if (v->orders.list == NULL && !OrderList::CanAllocateItem()) return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); + if (v->orders.list == nullptr && !OrderList::CanAllocateItem()) return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); if (flags & DC_EXEC) { Order *new_o = new Order(); @@ -917,7 +917,7 @@ CommandCost CmdInsertOrder(TileIndex til void InsertOrder(Vehicle *v, Order *new_o, VehicleOrderID sel_ord) { /* Create new order and link in list */ - if (v->orders.list == NULL) { + if (v->orders.list == nullptr) { v->orders.list = new OrderList(new_o, v); } else { v->orders.list->InsertOrderAt(new_o, sel_ord); @@ -925,7 +925,7 @@ void InsertOrder(Vehicle *v, Order *new_ Vehicle *u = v->FirstShared(); DeleteOrderWarnings(u); - for (; u != NULL; u = u->NextShared()) { + for (; u != nullptr; u = u->NextShared()) { assert(v->orders.list == u->orders.list); /* If there is added an order before the current one, we need @@ -1008,7 +1008,7 @@ CommandCost CmdDeleteOrder(TileIndex til Vehicle *v = Vehicle::GetIfValid(veh_id); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -1016,7 +1016,7 @@ CommandCost CmdDeleteOrder(TileIndex til /* If we did not select an order, we maybe want to de-clone the orders */ if (sel_ord >= v->GetNumOrders()) return DecloneOrder(v, flags); - if (v->GetOrder(sel_ord) == NULL) return CMD_ERROR; + if (v->GetOrder(sel_ord) == nullptr) return CMD_ERROR; if (flags & DC_EXEC) DeleteOrder(v, sel_ord); return CommandCost(); @@ -1048,7 +1048,7 @@ void DeleteOrder(Vehicle *v, VehicleOrde Vehicle *u = v->FirstShared(); DeleteOrderWarnings(u); - for (; u != NULL; u = u->NextShared()) { + for (; u != nullptr; u = u->NextShared()) { assert(v->orders.list == u->orders.list); if (sel_ord == u->cur_real_order_index && u->current_order.IsType(OT_LOADING)) { @@ -1080,7 +1080,7 @@ void DeleteOrder(Vehicle *v, VehicleOrde /* As we delete an order, the order to skip to will be 'wrong'. */ VehicleOrderID cur_order_id = 0; - Order *order = NULL; + Order *order = nullptr; FOR_VEHICLE_ORDERS(v, order) { if (order->IsType(OT_CONDITIONAL)) { VehicleOrderID order_id = order->GetConditionSkipToOrder(); @@ -1114,7 +1114,7 @@ CommandCost CmdSkipToOrder(TileIndex til Vehicle *v = Vehicle::GetIfValid(veh_id); - if (v == NULL || !v->IsPrimaryVehicle() || sel_ord == v->cur_implicit_order_index || sel_ord >= v->GetNumOrders() || v->GetNumOrders() < 2) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle() || sel_ord == v->cur_implicit_order_index || sel_ord >= v->GetNumOrders() || v->GetNumOrders() < 2) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -1155,7 +1155,7 @@ CommandCost CmdMoveOrder(TileIndex tile, VehicleOrderID target_order = GB(p2, 16, 16); Vehicle *v = Vehicle::GetIfValid(veh); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -1166,7 +1166,7 @@ CommandCost CmdMoveOrder(TileIndex tile, Order *moving_one = v->GetOrder(moving_order); /* Don't move an empty order */ - if (moving_one == NULL) return CMD_ERROR; + if (moving_one == nullptr) return CMD_ERROR; if (flags & DC_EXEC) { v->orders.list->MoveOrder(moving_order, target_order); @@ -1176,7 +1176,7 @@ CommandCost CmdMoveOrder(TileIndex tile, DeleteOrderWarnings(u); - for (; u != NULL; u = u->NextShared()) { + for (; u != nullptr; u = u->NextShared()) { /* Update the current order. * There are multiple ways to move orders, which result in cur_implicit_order_index * and cur_real_order_index to not longer make any sense. E.g. moving another @@ -1262,7 +1262,7 @@ CommandCost CmdModifyOrder(TileIndex til if (mof >= MOF_END) return CMD_ERROR; Vehicle *v = Vehicle::GetIfValid(veh); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -1459,7 +1459,7 @@ CommandCost CmdModifyOrder(TileIndex til /* Update the windows and full load flags, also for vehicles that share the same order list */ Vehicle *u = v->FirstShared(); DeleteOrderWarnings(u); - for (; u != NULL; u = u->NextShared()) { + for (; u != nullptr; u = u->NextShared()) { /* Toggle u->current_order "Full load" flag if it changed. * However, as the same flag is used for depot orders, check * whether we are not going to a depot as there are three @@ -1490,17 +1490,17 @@ CommandCost CmdModifyOrder(TileIndex til */ static bool CheckAircraftOrderDistance(const Aircraft *v_new, const Vehicle *v_order, const Order *first) { - if (first == NULL || v_new->acache.cached_max_range == 0) return true; + if (first == nullptr || v_new->acache.cached_max_range == 0) return true; /* Iterate over all orders to check the distance between all * 'goto' orders and their respective next order (of any type). */ - for (const Order *o = first; o != NULL; o = o->next) { + for (const Order *o = first; o != nullptr; o = o->next) { switch (o->GetType()) { case OT_GOTO_STATION: case OT_GOTO_DEPOT: case OT_GOTO_WAYPOINT: /* If we don't have a next order, we've reached the end and must check the first order instead. */ - if (GetOrderDistance(o, o->next != NULL ? o->next : first, v_order) > v_new->acache.cached_max_range_sqr) return false; + if (GetOrderDistance(o, o->next != nullptr ? o->next : first, v_order) > v_new->acache.cached_max_range_sqr) return false; break; default: break; @@ -1527,7 +1527,7 @@ CommandCost CmdCloneOrder(TileIndex tile VehicleID veh_dst = GB(p1, 0, 20); Vehicle *dst = Vehicle::GetIfValid(veh_dst); - if (dst == NULL || !dst->IsPrimaryVehicle()) return CMD_ERROR; + if (dst == nullptr || !dst->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(dst->owner); if (ret.Failed()) return ret; @@ -1537,7 +1537,7 @@ CommandCost CmdCloneOrder(TileIndex tile Vehicle *src = Vehicle::GetIfValid(veh_src); /* Sanity checks */ - if (src == NULL || !src->IsPrimaryVehicle() || dst->type != src->type || dst == src) return CMD_ERROR; + if (src == nullptr || !src->IsPrimaryVehicle() || dst->type != src->type || dst == src) return CMD_ERROR; CommandCost ret = CheckOwnership(src->owner); if (ret.Failed()) return ret; @@ -1569,7 +1569,7 @@ CommandCost CmdCloneOrder(TileIndex tile return_cmd_error(STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE); } - if (src->orders.list == NULL && !OrderList::CanAllocateItem()) { + if (src->orders.list == nullptr && !OrderList::CanAllocateItem()) { return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); } @@ -1596,7 +1596,7 @@ CommandCost CmdCloneOrder(TileIndex tile Vehicle *src = Vehicle::GetIfValid(veh_src); /* Sanity checks */ - if (src == NULL || !src->IsPrimaryVehicle() || dst->type != src->type || dst == src) return CMD_ERROR; + if (src == nullptr || !src->IsPrimaryVehicle() || dst->type != src->type || dst == src) return CMD_ERROR; CommandCost ret = CheckOwnership(src->owner); if (ret.Failed()) return ret; @@ -1623,7 +1623,7 @@ CommandCost CmdCloneOrder(TileIndex tile if (flags & DC_EXEC) { const Order *order; - Order *first = NULL; + Order *first = nullptr; Order **order_dst; /* If the destination vehicle had an order list, destroy the chain but keep the OrderList. @@ -1637,10 +1637,10 @@ CommandCost CmdCloneOrder(TileIndex tile (*order_dst)->AssignOrder(*order); order_dst = &(*order_dst)->next; } - if (dst->orders.list == NULL) { + if (dst->orders.list == nullptr) { dst->orders.list = new OrderList(first, dst); } else { - assert(dst->orders.list->GetFirstOrder() == NULL); + assert(dst->orders.list->GetFirstOrder() == nullptr); assert(!dst->orders.list->IsShared()); delete dst->orders.list; assert(OrderList::CanAllocateItem()); @@ -1681,13 +1681,13 @@ CommandCost CmdOrderRefit(TileIndex tile if (cargo >= NUM_CARGO && cargo != CT_NO_REFIT && cargo != CT_AUTO_REFIT) return CMD_ERROR; const Vehicle *v = Vehicle::GetIfValid(veh); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; Order *order = v->GetOrder(order_number); - if (order == NULL) return CMD_ERROR; + if (order == nullptr) return CMD_ERROR; /* Automatic refit cargo is only supported for goto station orders. */ if (cargo == CT_AUTO_REFIT && !order->IsType(OT_GOTO_STATION)) return CMD_ERROR; @@ -1703,7 +1703,7 @@ CommandCost CmdOrderRefit(TileIndex tile order->SetDepotActionType((OrderDepotActionFlags)(order->GetDepotActionType() & ~ODATFB_HALT)); } - for (Vehicle *u = v->FirstShared(); u != NULL; u = u->NextShared()) { + for (Vehicle *u = v->FirstShared(); u != nullptr; u = u->NextShared()) { /* Update any possible open window of the vehicle */ InvalidateVehicleOrder(u, VIWD_MODIFY_ORDERS); @@ -1781,7 +1781,7 @@ void CheckOrders(const Vehicle *v) if (n_st < 2 && message == INVALID_STRING_ID) message = STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS; #ifndef NDEBUG - if (v->orders.list != NULL) v->orders.list->DebugCheckSanity(); + if (v->orders.list != nullptr) v->orders.list->DebugCheckSanity(); #endif /* We don't have a problem */ @@ -1836,7 +1836,7 @@ restart: if (order->IsType(OT_IMPLICIT)) { order = order->next; // DeleteOrder() invalidates current order DeleteOrder(v, id); - if (order != NULL) goto restart; + if (order != nullptr) goto restart; break; } @@ -1853,7 +1853,7 @@ restart: order->MakeDummy(); order->SetTravelTimetabled(travel_timetabled); - for (const Vehicle *w = v->FirstShared(); w != NULL; w = w->NextShared()) { + for (const Vehicle *w = v->FirstShared(); w != nullptr; w = w->NextShared()) { /* In GUI, simulate by removing the order and adding it back */ InvalidateVehicleOrder(w, id | (INVALID_VEH_ORDER_ID << 8)); InvalidateVehicleOrder(w, (INVALID_VEH_ORDER_ID << 8) | id); @@ -1896,11 +1896,11 @@ void DeleteVehicleOrders(Vehicle *v, boo if (v->IsOrderListShared()) { /* Remove ourself from the shared order list. */ v->RemoveFromShared(); - v->orders.list = NULL; - } else if (v->orders.list != NULL) { + v->orders.list = nullptr; + } else if (v->orders.list != nullptr) { /* Remove the orders */ v->orders.list->FreeChain(keep_orderlist); - if (!keep_orderlist) v->orders.list = NULL; + if (!keep_orderlist) v->orders.list = nullptr; } if (reset_order_indices) { @@ -1982,7 +1982,7 @@ VehicleOrderID ProcessConditionalOrder(c uint16 value = order->GetConditionValue(); switch (order->GetConditionVariable()) { - case OCV_LOAD_PERCENTAGE: skip_order = OrderConditionCompare(occ, CalcPercentVehicleFilled(v, NULL), value); break; + case OCV_LOAD_PERCENTAGE: skip_order = OrderConditionCompare(occ, CalcPercentVehicleFilled(v, nullptr), value); break; case OCV_RELIABILITY: skip_order = OrderConditionCompare(occ, ToPercent16(v->reliability), value); break; case OCV_MAX_RELIABILITY: skip_order = OrderConditionCompare(occ, ToPercent16(v->GetEngine()->reliability), value); break; case OCV_MAX_SPEED: skip_order = OrderConditionCompare(occ, v->GetDisplayMaxSpeed() * 10 / 16, value); break; @@ -2109,12 +2109,12 @@ bool UpdateOrderDest(Vehicle *v, const O /* Get the current order */ order = v->GetOrder(v->cur_real_order_index); - if (order != NULL && order->IsType(OT_IMPLICIT)) { + if (order != nullptr && order->IsType(OT_IMPLICIT)) { assert(v->GetNumManualOrders() == 0); - order = NULL; + order = nullptr; } - if (order == NULL) { + if (order == nullptr) { v->current_order.Free(); v->SetDestTile(0); return false; @@ -2177,13 +2177,13 @@ bool ProcessOrders(Vehicle *v) v->UpdateRealOrderIndex(); const Order *order = v->GetOrder(v->cur_real_order_index); - if (order != NULL && order->IsType(OT_IMPLICIT)) { + if (order != nullptr && order->IsType(OT_IMPLICIT)) { assert(v->GetNumManualOrders() == 0); - order = NULL; + order = nullptr; } /* If no order, do nothing. */ - if (order == NULL || (v->type == VEH_AIRCRAFT && !CheckForValidOrders(v))) { + if (order == nullptr || (v->type == VEH_AIRCRAFT && !CheckForValidOrders(v))) { if (v->type == VEH_AIRCRAFT) { /* Aircraft do something vastly different here, so handle separately */ extern void HandleMissingAircraftOrders(Aircraft *v); diff --git a/src/order_gui.cpp b/src/order_gui.cpp --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -239,7 +239,7 @@ void DrawOrderString(const Vehicle *v, c /* Check range for aircraft. */ if (v->type == VEH_AIRCRAFT && Aircraft::From(v)->GetRange() > 0 && order->IsGotoOrder()) { - const Order *next = order->next != NULL ? order->next : v->GetFirstOrder(); + const Order *next = order->next != nullptr ? order->next : v->GetFirstOrder(); if (GetOrderDistance(order, next, v) > Aircraft::From(v)->acache.cached_max_range_sqr) SetDParam(8, STR_ORDER_OUT_OF_RANGE); } @@ -576,7 +576,7 @@ private: VehicleOrderID sel_ord = this->OrderGetSel(); const Order *order = this->vehicle->GetOrder(sel_ord); - if (order == NULL || order->GetLoadType() == load_type) return; + if (order == nullptr || order->GetLoadType() == load_type) return; if (load_type < 0) { load_type = order->GetLoadType() == OLF_LOAD_IF_POSSIBLE ? OLF_FULL_LOAD_ANY : OLF_LOAD_IF_POSSIBLE; @@ -601,7 +601,7 @@ private: if (i < 0) { const Order *order = this->vehicle->GetOrder(sel_ord); - if (order == NULL) return; + if (order == nullptr) return; i = (order->GetDepotOrderType() & ODTFB_SERVICE) ? DA_ALWAYS_GO : DA_SERVICE; } DoCommandP(this->vehicle->tile, this->vehicle->index + (sel_ord << 20), MOF_DEPOT_ACTION | (i << 4), CMD_MODIFY_ORDER | CMD_MSG(STR_ERROR_CAN_T_MODIFY_THIS_ORDER)); @@ -613,7 +613,7 @@ private: void OrderClick_NearestDepot() { Order order; - order.next = NULL; + order.next = nullptr; order.index = 0; order.MakeGoToDepot(0, ODTFB_PART_OF_ORDERS, _settings_client.gui.new_nonstop && this->vehicle->IsGroundVehicle() ? ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS : ONSF_STOP_EVERYWHERE); @@ -630,7 +630,7 @@ private: VehicleOrderID sel_ord = this->OrderGetSel(); const Order *order = this->vehicle->GetOrder(sel_ord); - if (order == NULL || order->GetUnloadType() == unload_type) return; + if (order == nullptr || order->GetUnloadType() == unload_type) return; if (unload_type < 0) { unload_type = order->GetUnloadType() == OUF_UNLOAD_IF_POSSIBLE ? OUFB_UNLOAD : OUF_UNLOAD_IF_POSSIBLE; @@ -672,7 +672,7 @@ private: VehicleOrderID sel_ord = this->OrderGetSel(); const Order *order = this->vehicle->GetOrder(sel_ord); - if (order == NULL || order->GetNonStopType() == non_stop) return; + if (order == nullptr || order->GetNonStopType() == non_stop) return; /* Keypress if negative, so 'toggle' to the next */ if (non_stop < 0) { @@ -760,7 +760,7 @@ private: { this->can_do_refit = false; this->can_do_autorefit = false; - for (const Vehicle *w = this->vehicle; w != NULL; w = w->IsGroundVehicle() ? w->Next() : NULL) { + for (const Vehicle *w = this->vehicle; w != nullptr; w = w->IsGroundVehicle() ? w->Next() : nullptr) { if (IsEngineRefittable(w->engine_type)) this->can_do_refit = true; if (HasBit(Engine::Get(w->engine_type)->info.misc_flags, EF_AUTO_REFIT)) this->can_do_autorefit = true; } @@ -953,11 +953,11 @@ public: NWidgetStacked *right_sel = this->GetWidget(WID_O_SEL_TOP_RIGHT); /* Ship or airplane. */ NWidgetStacked *row_sel = this->GetWidget(WID_O_SEL_TOP_ROW); - assert(row_sel != NULL || (train_row_sel != NULL && left_sel != NULL && middle_sel != NULL && right_sel != NULL)); + assert(row_sel != nullptr || (train_row_sel != nullptr && left_sel != nullptr && middle_sel != nullptr && right_sel != nullptr)); - if (order == NULL) { - if (row_sel != NULL) { + if (order == nullptr) { + if (row_sel != nullptr) { row_sel->SetDisplayedPlane(DP_ROW_LOAD); } else { train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_NORMAL); @@ -976,7 +976,7 @@ public: switch (order->GetType()) { case OT_GOTO_STATION: - if (row_sel != NULL) { + if (row_sel != nullptr) { row_sel->SetDisplayedPlane(DP_ROW_LOAD); } else { train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_NORMAL); @@ -998,7 +998,7 @@ public: break; case OT_GOTO_WAYPOINT: - if (row_sel != NULL) { + if (row_sel != nullptr) { row_sel->SetDisplayedPlane(DP_ROW_LOAD); } else { train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_NORMAL); @@ -1014,7 +1014,7 @@ public: break; case OT_GOTO_DEPOT: - if (row_sel != NULL) { + if (row_sel != nullptr) { row_sel->SetDisplayedPlane(DP_ROW_DEPOT); } else { train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_NORMAL); @@ -1033,7 +1033,7 @@ public: break; case OT_CONDITIONAL: { - if (row_sel != NULL) { + if (row_sel != nullptr) { row_sel->SetDisplayedPlane(DP_ROW_CONDITIONAL); } else { train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_CONDITIONAL); @@ -1048,7 +1048,7 @@ public: } default: // every other order - if (row_sel != NULL) { + if (row_sel != nullptr) { row_sel->SetDisplayedPlane(DP_ROW_LOAD); } else { train_row_sel->SetDisplayedPlane(DP_GROUNDVEHICLE_ROW_NORMAL); @@ -1096,7 +1096,7 @@ public: const Order *order = this->vehicle->GetOrder(i); /* First draw the highlighting underground if it exists. */ if (this->order_over != INVALID_VEH_ORDER_ID) { - while (order != NULL) { + while (order != nullptr) { /* Don't draw anything if it extends past the end of the window. */ if (!this->vscroll->IsVisible(i)) break; @@ -1121,7 +1121,7 @@ public: } /* Draw the orders. */ - while (order != NULL) { + while (order != nullptr) { /* Don't draw anything if it extends past the end of the window. */ if (!this->vscroll->IsVisible(i)) break; @@ -1145,7 +1145,7 @@ public: VehicleOrderID sel = this->OrderGetSel(); const Order *order = this->vehicle->GetOrder(sel); - if (order != NULL && order->IsType(OT_CONDITIONAL)) { + if (order != nullptr && order->IsType(OT_CONDITIONAL)) { uint value = order->GetConditionValue(); if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value); SetDParam(0, value); @@ -1167,7 +1167,7 @@ public: VehicleOrderID order_id = this->GetOrderFromPt(_cursor.pos.y - this->top); if (order_id != INVALID_VEH_ORDER_ID) { Order order; - order.next = NULL; + order.next = nullptr; order.index = 0; order.MakeConditional(order_id); @@ -1714,7 +1714,7 @@ void ShowOrdersWindow(const Vehicle *v) { DeleteWindowById(WC_VEHICLE_DETAILS, v->index, false); DeleteWindowById(WC_VEHICLE_TIMETABLE, v->index, false); - if (BringWindowToFrontById(WC_VEHICLE_ORDERS, v->index) != NULL) return; + if (BringWindowToFrontById(WC_VEHICLE_ORDERS, v->index) != nullptr) return; /* Using a different WindowDescs for _local_company causes problems. * Due to this we have to close order windows in ChangeWindowOwner/DeleteCompanyWindows, diff --git a/src/os/macosx/crashlog_osx.cpp b/src/os/macosx/crashlog_osx.cpp --- a/src/os/macosx/crashlog_osx.cpp +++ b/src/os/macosx/crashlog_osx.cpp @@ -66,7 +66,7 @@ class CrashLogOSX : public CrashLog { " Machine: %s\n" " Min Ver: %d\n", ver_maj, ver_min, ver_bug, - arch != NULL ? arch->description : "unknown", + arch != nullptr ? arch->description : "unknown", MAC_OS_X_VERSION_MIN_REQUIRED ); } @@ -79,7 +79,7 @@ class CrashLogOSX : public CrashLog { " Message: %s\n\n", strsignal(this->signum), this->signum, - message == NULL ? "" : message + message == nullptr ? "" : message ); } @@ -99,14 +99,14 @@ class CrashLogOSX : public CrashLog { frame = (void **)__builtin_frame_address(0); #endif - for (int i = 0; frame != NULL && i < MAX_STACK_FRAMES; i++) { + for (int i = 0; frame != nullptr && i < MAX_STACK_FRAMES; i++) { /* Get IP for current stack frame. */ #if defined(__ppc__) || defined(__ppc64__) void *ip = frame[2]; #else void *ip = frame[1]; #endif - if (ip == NULL) break; + if (ip == nullptr) break; /* Print running index. */ buffer += seprintf(buffer, last, " [%02d]", i); @@ -118,7 +118,7 @@ class CrashLogOSX : public CrashLog { if (dl_valid && dli.dli_fname) { /* Valid image name? Extract filename from the complete path. */ const char *s = strrchr(dli.dli_fname, '/'); - if (s != NULL) { + if (s != nullptr) { fname = s + 1; } else { fname = dli.dli_fname; @@ -128,13 +128,13 @@ class CrashLogOSX : public CrashLog { buffer += seprintf(buffer, last, " %-20s " PRINTF_PTR, fname, (uintptr_t)ip); /* Print function offset if information is available. */ - if (dl_valid && dli.dli_sname != NULL && dli.dli_saddr != NULL) { + if (dl_valid && dli.dli_sname != nullptr && dli.dli_saddr != nullptr) { /* Try to demangle a possible C++ symbol. */ int status = -1; - char *func_name = abi::__cxa_demangle(dli.dli_sname, NULL, 0, &status); + char *func_name = abi::__cxa_demangle(dli.dli_sname, nullptr, 0, &status); long int offset = (intptr_t)ip - (intptr_t)dli.dli_saddr; - buffer += seprintf(buffer, last, " (%s + %ld)", func_name != NULL ? func_name : dli.dli_sname, offset); + buffer += seprintf(buffer, last, " (%s + %ld)", func_name != nullptr ? func_name : dli.dli_sname, offset); free(func_name); } diff --git a/src/os/macosx/splash.cpp b/src/os/macosx/splash.cpp --- a/src/os/macosx/splash.cpp +++ b/src/os/macosx/splash.cpp @@ -54,7 +54,7 @@ static void PNGAPI png_my_warning(png_st void DisplaySplashImage() { FILE *f = FioFOpenFile(SPLASH_IMAGE_FILE, "r", BASESET_DIR); - if (f == NULL) return; + if (f == nullptr) return; png_byte header[8]; fread(header, sizeof(png_byte), 8, f); @@ -63,23 +63,23 @@ void DisplaySplashImage() return; } - png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp) NULL, png_my_error, png_my_warning); + png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp) nullptr, png_my_error, png_my_warning); - if (png_ptr == NULL) { + if (png_ptr == nullptr) { fclose(f); return; } png_infop info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) { - png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + if (info_ptr == nullptr) { + png_destroy_read_struct(&png_ptr, (png_infopp)nullptr, (png_infopp)nullptr); fclose(f); return; } png_infop end_info = png_create_info_struct(png_ptr); - if (end_info == NULL) { - png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + if (end_info == nullptr) { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)nullptr); fclose(f); return; } @@ -93,7 +93,7 @@ void DisplaySplashImage() png_init_io(png_ptr, f); png_set_sig_bytes(png_ptr, 8); - png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); + png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, nullptr); uint width = png_get_image_width(png_ptr, info_ptr); uint height = png_get_image_height(png_ptr, info_ptr); diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -22,7 +22,7 @@ #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) /** Cached current locale. */ -static CFLocaleRef _osx_locale = NULL; +static CFLocaleRef _osx_locale = nullptr; /** CoreText cache for font information, cleared when OTTD changes fonts. */ static CTFontRef _font_cache[FS_END]; @@ -125,21 +125,21 @@ static CGFloat SpriteFontGetWidth(void * } static CTRunDelegateCallbacks _sprite_font_callback = { - kCTRunDelegateCurrentVersion, NULL, NULL, NULL, + kCTRunDelegateCurrentVersion, nullptr, nullptr, nullptr, &SpriteFontGetWidth }; /* static */ ParagraphLayouter *CoreTextParagraphLayoutFactory::GetParagraphLayout(CharType *buff, CharType *buff_end, FontMap &fontMapping) { - if (!MacOSVersionIsAtLeast(10, 5, 0)) return NULL; + if (!MacOSVersionIsAtLeast(10, 5, 0)) return nullptr; /* Can't layout an empty string. */ ptrdiff_t length = buff_end - buff; - if (length == 0) return NULL; + if (length == 0) return nullptr; /* Can't layout our in-built sprite fonts. */ for (const auto &i : fontMapping) { - if (i.second->fc->IsBuiltInFont()) return NULL; + if (i.second->fc->IsBuiltInFont()) return nullptr; } /* Make attributed string with embedded font information. */ @@ -156,10 +156,10 @@ static CTRunDelegateCallbacks _sprite_fo for (const auto &i : fontMapping) { if (i.first - last == 0) continue; - if (_font_cache[i.second->fc->GetSize()] == NULL) { + if (_font_cache[i.second->fc->GetSize()] == nullptr) { /* Cache font information. */ CFStringRef font_name = CFStringCreateWithCString(kCFAllocatorDefault, i.second->fc->GetFontName(), kCFStringEncodingUTF8); - _font_cache[i.second->fc->GetSize()] = CTFontCreateWithName(font_name, i.second->fc->GetFontSize(), NULL); + _font_cache[i.second->fc->GetSize()] = CTFontCreateWithName(font_name, i.second->fc->GetFontSize(), nullptr); CFRelease(font_name); } CFAttributedStringSetAttribute(str, CFRangeMake(last, i.first - last), kCTFontAttributeName, _font_cache[i.second->fc->GetSize()]); @@ -185,12 +185,12 @@ static CTRunDelegateCallbacks _sprite_fo CTTypesetterRef typesetter = CTTypesetterCreateWithAttributedString(str); CFRelease(str); - return typesetter != NULL ? new CoreTextParagraphLayout(typesetter, buff, length, fontMapping) : NULL; + return typesetter != nullptr ? new CoreTextParagraphLayout(typesetter, buff, length, fontMapping) : nullptr; } /* virtual */ std::unique_ptr CoreTextParagraphLayout::NextLine(int max_width) { - if (this->cur_offset >= this->length) return NULL; + if (this->cur_offset >= this->length) return nullptr; /* Get line break position, trying word breaking first and breaking somewhere if that doesn't work. */ CFIndex len = CTTypesetterSuggestLineBreak(this->typesetter, this->cur_offset, max_width); @@ -200,7 +200,7 @@ static CTRunDelegateCallbacks _sprite_fo CTLineRef line = CTTypesetterCreateLine(this->typesetter, CFRangeMake(this->cur_offset, len)); this->cur_offset += len; - return std::unique_ptr(line != NULL ? new CoreTextLine(line, this->font_map, this->text_buffer) : NULL); + return std::unique_ptr(line != nullptr ? new CoreTextLine(line, this->font_map, this->text_buffer) : nullptr); } CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff) : font(font) @@ -233,7 +233,7 @@ CoreTextParagraphLayout::CoreTextVisualR this->positions[i * 2 + 1] = pts[i].y; } } - this->total_advance = (int)CTRunGetTypographicBounds(run, CFRangeMake(0, 0), NULL, NULL, NULL); + this->total_advance = (int)CTRunGetTypographicBounds(run, CFRangeMake(0, 0), nullptr, nullptr, nullptr); this->positions[this->glyphs.size() * 2] = this->positions[0] + this->total_advance; } @@ -271,9 +271,9 @@ int CoreTextParagraphLayout::CoreTextLin /** Delete CoreText font reference for a specific font size. */ void MacOSResetScriptCache(FontSize size) { - if (_font_cache[size] != NULL) { + if (_font_cache[size] != nullptr) { CFRelease(_font_cache[size]); - _font_cache[size] = NULL; + _font_cache[size] = nullptr; } } @@ -282,7 +282,7 @@ void MacOSSetCurrentLocaleName(const cha { if (!MacOSVersionIsAtLeast(10, 5, 0)) return; - if (_osx_locale != NULL) CFRelease(_osx_locale); + if (_osx_locale != nullptr) CFRelease(_osx_locale); CFStringRef iso = CFStringCreateWithCString(kCFAllocatorNull, iso_code, kCFStringEncodingUTF8); _osx_locale = CFLocaleCreate(kCFAllocatorDefault, iso); @@ -425,7 +425,7 @@ int MacOSStringCompare(const char *s1, c /* static */ StringIterator *OSXStringIterator::Create() { - if (!MacOSVersionIsAtLeast(10, 5, 0)) return NULL; + if (!MacOSVersionIsAtLeast(10, 5, 0)) return nullptr; return new OSXStringIterator(); } @@ -441,11 +441,11 @@ int MacOSStringCompare(const char *s1, c /* static */ StringIterator *OSXStringIterator::Create() { - return NULL; + return nullptr; } /* static */ ParagraphLayouter *CoreTextParagraphLayoutFactory::GetParagraphLayout(CharType *buff, CharType *buff_end, FontMap &fontMapping) { - return NULL; + return nullptr; } #endif /* (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) */ diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp --- a/src/os/os2/os2.cpp +++ b/src/os/os2/os2.cpp @@ -102,7 +102,7 @@ bool FiosGetDiskFreeSpace(const char *pa struct diskfree_t free; char drive = path[0] - 'A' + 1; - if (tot != NULL && _getdiskfree(drive, &free) == 0) { + if (tot != nullptr && _getdiskfree(drive, &free) == 0) { *tot = free.avail_clusters * free.sectors_per_cluster * free.bytes_per_sector; return true; } @@ -119,7 +119,7 @@ bool FiosGetDiskFreeSpace(const char *pa free = (uint64)s.f_frsize * s.f_bavail; } #endif - if (tot != NULL) *tot = free; + if (tot != nullptr) *tot = free; return true; #endif } @@ -173,7 +173,7 @@ void ShowOSErrorBox(const char *buf, boo int CDECL main(int argc, char *argv[]) { - SetRandomSeed(time(NULL)); + SetRandomSeed(time(nullptr)); /* Make sure our arguments contain only valid UTF-8 characters. */ for (int i = 0; i < argc; i++) ValidateString(argv[i]); @@ -191,7 +191,7 @@ bool GetClipboardContents(char *buffer, { const char *text = (const char*)WinQueryClipbrdData(hab, CF_TEXT); - if (text != NULL) + if (text != nullptr) { strecpy(buffer, text, last); WinCloseClipbrd(hab); diff --git a/src/os/unix/crashlog_unix.cpp b/src/os/unix/crashlog_unix.cpp --- a/src/os/unix/crashlog_unix.cpp +++ b/src/os/unix/crashlog_unix.cpp @@ -68,7 +68,7 @@ class CrashLogUnix : public CrashLog { " Message: %s\n\n", strsignal(this->signum), this->signum, - message == NULL ? "" : message + message == nullptr ? "" : message ); } diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -84,7 +84,7 @@ bool FiosGetDiskFreeSpace(const char *pa if (statvfs(path, &s) != 0) return false; free = (uint64)s.f_frsize * s.f_bavail; #endif - if (tot != NULL) *tot = free; + if (tot != nullptr) *tot = free; return true; } @@ -130,9 +130,9 @@ static const char *GetLocalCode() #else /* Strip locale (eg en_US.UTF-8) to only have UTF-8 */ const char *locale = GetCurrentLocale("LC_CTYPE"); - if (locale != NULL) locale = strchr(locale, '.'); + if (locale != nullptr) locale = strchr(locale, '.'); - return (locale == NULL) ? "" : locale + 1; + return (locale == nullptr) ? "" : locale + 1; #endif } @@ -158,7 +158,7 @@ static const char *convert_tofrom_fs(ico strecpy(outbuf, name, outbuf + outlen); - iconv(convd, NULL, NULL, NULL, NULL); + iconv(convd, nullptr, nullptr, nullptr, nullptr); if (iconv(convd, &inbuf, &inlen, &outbuf, &outlen) == (size_t)(-1)) { DEBUG(misc, 0, "[iconv] error converting '%s'. Errno %d", name, errno); } @@ -246,13 +246,13 @@ int CDECL main(int argc, char *argv[]) cocoaSetupAutoreleasePool(); /* This is passed if we are launched by double-clicking */ if (argc >= 2 && strncmp(argv[1], "-psn", 4) == 0) { - argv[1] = NULL; + argv[1] = nullptr; argc = 1; } #endif CrashLog::InitialiseCrashLog(); - SetRandomSeed(time(NULL)); + SetRandomSeed(time(nullptr)); signal(SIGPIPE, SIG_IGN); @@ -282,7 +282,7 @@ void OSOpenBrowser(const char *url) const char *args[3]; args[0] = "xdg-open"; args[1] = url; - args[2] = NULL; + args[2] = nullptr; execvp(args[0], const_cast(args)); DEBUG(misc, 0, "Failed to open url: %s", url); exit(0); diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -66,7 +66,7 @@ public: * A crash log is always generated when it's generated. * @param ep the data related to the exception. */ - CrashLogWindows(EXCEPTION_POINTERS *ep = NULL) : + CrashLogWindows(EXCEPTION_POINTERS *ep = nullptr) : ep(ep) { this->crashlog[0] = '\0'; @@ -81,7 +81,7 @@ public: static CrashLogWindows *current; }; -/* static */ CrashLogWindows *CrashLogWindows::current = NULL; +/* static */ CrashLogWindows *CrashLogWindows::current = nullptr; /* virtual */ char *CrashLogWindows::LogOSVersion(char *buffer, const char *last) const { @@ -114,7 +114,7 @@ public: " Message: %s\n\n", (int)ep->ExceptionRecord->ExceptionCode, (size_t)ep->ExceptionRecord->ExceptionAddress, - message == NULL ? "" : message + message == nullptr ? "" : message ); } @@ -156,7 +156,7 @@ static void GetFileInfo(DebugFileInfo *d HANDLE file; memset(dfi, 0, sizeof(*dfi)); - file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); + file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, 0); if (file != INVALID_HANDLE_VALUE) { byte buffer[1024]; DWORD numread; @@ -165,7 +165,7 @@ static void GetFileInfo(DebugFileInfo *d uint32 crc = (uint32)-1; for (;;) { - if (ReadFile(file, buffer, sizeof(buffer), &numread, NULL) == 0 || numread == 0) { + if (ReadFile(file, buffer, sizeof(buffer), &numread, nullptr) == 0 || numread == 0) { break; } filesize += numread; @@ -174,7 +174,7 @@ static void GetFileInfo(DebugFileInfo *d dfi->size = filesize; dfi->crc32 = crc ^ (uint32)-1; - if (GetFileTime(file, NULL, NULL, &write_time)) { + if (GetFileTime(file, nullptr, nullptr, &write_time)) { FileTimeToSystemTime(&write_time, &dfi->file_time); } CloseHandle(file); @@ -217,7 +217,7 @@ static char *PrintModuleInfo(char *outpu BOOL res; HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId()); - if (proc != NULL) { + if (proc != nullptr) { res = EnumProcessModules(proc, modules, sizeof(modules), &needed); CloseHandle(proc); if (res) { @@ -228,7 +228,7 @@ static char *PrintModuleInfo(char *outpu } } } - output = PrintModuleInfo(output, last, NULL); + output = PrintModuleInfo(output, last, nullptr); return output + seprintf(output, last, "\n"); } @@ -362,7 +362,7 @@ char *CrashLogWindows::AppendDecodedStac if (LoadLibraryList((Function*)&proc, dbg_import)) { /* Initialize symbol handler. */ HANDLE hCur = GetCurrentProcess(); - proc.pSymInitialize(hCur, NULL, TRUE); + proc.pSymInitialize(hCur, nullptr, TRUE); /* Load symbols only when needed, fail silently on errors, demangle symbol names. */ proc.pSymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_FAIL_CRITICAL_ERRORS | SYMOPT_UNDNAME); @@ -399,7 +399,7 @@ char *CrashLogWindows::AppendDecodedStac #else IMAGE_FILE_MACHINE_I386, #endif - hCur, GetCurrentThread(), &frame, &ctx, NULL, proc.pSymFunctionTableAccess64, proc.pSymGetModuleBase64, NULL)) break; + hCur, GetCurrentThread(), &frame, &ctx, nullptr, proc.pSymFunctionTableAccess64, proc.pSymGetModuleBase64, nullptr)) break; if (frame.AddrPC.Offset == frame.AddrReturn.Offset) { buffer += seprintf(buffer, last, " \n"); @@ -443,16 +443,16 @@ char *CrashLogWindows::AppendDecodedStac { int ret = 0; HMODULE dbghelp = LoadLibrary(_T("dbghelp.dll")); - if (dbghelp != NULL) { + if (dbghelp != nullptr) { typedef BOOL (WINAPI *MiniDumpWriteDump_t)(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, CONST PMINIDUMP_EXCEPTION_INFORMATION, CONST PMINIDUMP_USER_STREAM_INFORMATION, CONST PMINIDUMP_CALLBACK_INFORMATION); MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump"); - if (funcMiniDumpWriteDump != NULL) { + if (funcMiniDumpWriteDump != nullptr) { seprintf(filename, filename_last, "%scrash.dmp", _personal_dir); - HANDLE file = CreateFile(OTTD2FS(filename), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); + HANDLE file = CreateFile(OTTD2FS(filename), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, 0, 0); HANDLE proc = GetCurrentProcess(); DWORD procid = GetCurrentProcessId(); MINIDUMP_EXCEPTION_INFORMATION mdei; @@ -470,7 +470,7 @@ char *CrashLogWindows::AppendDecodedStac mdei.ExceptionPointers = ep; mdei.ClientPointers = false; - funcMiniDumpWriteDump(proc, procid, file, MiniDumpWithDataSegs, &mdei, &musi, NULL); + funcMiniDumpWriteDump(proc, procid, file, MiniDumpWithDataSegs, &mdei, &musi, nullptr); ret = 1; } else { ret = -1; @@ -488,11 +488,11 @@ static void ShowCrashlogWindow(); * Stack pointer for use when 'starting' the crash handler. * Not static as gcc's inline assembly needs it that way. */ -void *_safe_esp = NULL; +void *_safe_esp = nullptr; static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep) { - if (CrashLogWindows::current != NULL) { + if (CrashLogWindows::current != nullptr) { CrashLog::AfterCrashLogCleanup(); ExitProcess(2); } @@ -501,7 +501,7 @@ static LONG WINAPI ExceptionHandler(EXCE static const TCHAR _emergency_crash[] = _T("A serious fault condition occurred in the game. The game will shut down.\n") _T("As you loaded an emergency savegame no crash information will be generated.\n"); - MessageBox(NULL, _emergency_crash, _T("Fatal Application Failure"), MB_ICONERROR); + MessageBox(nullptr, _emergency_crash, _T("Fatal Application Failure"), MB_ICONERROR); ExitProcess(3); } @@ -510,7 +510,7 @@ static LONG WINAPI ExceptionHandler(EXCE _T("A serious fault condition occurred in the game. The game will shut down.\n") _T("As you loaded an savegame for which you do not have the required NewGRFs\n") _T("no crash information will be generated.\n"); - MessageBox(NULL, _saveload_crash, _T("Fatal Application Failure"), MB_ICONERROR); + MessageBox(nullptr, _saveload_crash, _T("Fatal Application Failure"), MB_ICONERROR); ExitProcess(3); } @@ -525,7 +525,7 @@ static LONG WINAPI ExceptionHandler(EXCE /* Close any possible log files */ CloseConsoleLogIfActive(); - if ((VideoDriver::GetInstance() == NULL || VideoDriver::GetInstance()->HasGUI()) && _safe_esp != NULL) { + if ((VideoDriver::GetInstance() == nullptr || VideoDriver::GetInstance()->HasGUI()) && _safe_esp != nullptr) { #ifdef _M_AMD64 ep->ContextRecord->Rip = (DWORD64)ShowCrashlogWindow; ep->ContextRecord->Rsp = (DWORD64)_safe_esp; @@ -542,7 +542,7 @@ static LONG WINAPI ExceptionHandler(EXCE static void CDECL CustomAbort(int signal) { - RaiseException(0xE1212012, 0, 0, NULL); + RaiseException(0xE1212012, 0, 0, nullptr); } /* static */ void CrashLog::InitialiseCrashLog() @@ -693,5 +693,5 @@ static void ShowCrashlogWindow() { ShowCursor(TRUE); ShowWindow(GetActiveWindow(), FALSE); - DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(100), NULL, CrashDialogFunc); + DialogBox(GetModuleHandle(nullptr), MAKEINTRESOURCE(100), nullptr, CrashDialogFunc); } diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -86,7 +86,7 @@ public: int num_glyphs; Font *font; - mutable int *glyph_to_char = NULL; + mutable int *glyph_to_char = nullptr; public: UniscribeVisualRun(const UniscribeRun &range, int x); @@ -139,9 +139,9 @@ public: void UniscribeResetScriptCache(FontSize size) { - if (_script_cache[size] != NULL) { + if (_script_cache[size] != nullptr) { ScriptFreeCache(&_script_cache[size]); - _script_cache[size] = NULL; + _script_cache[size] = nullptr; } } @@ -168,9 +168,9 @@ static bool UniscribeShapeRun(const Unis /* The char-to-glyph array is the same size as the input. */ range.char_to_glyph.resize(range.len); - HDC temp_dc = NULL; - HFONT old_font = NULL; - HFONT cur_font = NULL; + HDC temp_dc = nullptr; + HFONT old_font = nullptr; + HFONT cur_font = nullptr; while (true) { /* Shape the text run by determining the glyphs needed for display. */ @@ -217,9 +217,9 @@ static bool UniscribeShapeRun(const Unis } else if (hr == E_PENDING) { /* Glyph data is not in cache, load native font. */ cur_font = HFontFromFont(range.font); - if (cur_font == NULL) return false; // Sorry, no dice. + if (cur_font == nullptr) return false; // Sorry, no dice. - temp_dc = CreateCompatibleDC(NULL); + temp_dc = CreateCompatibleDC(nullptr); SetMapMode(temp_dc, MM_TEXT); old_font = (HFONT)SelectObject(temp_dc, cur_font); } else if (hr == USP_E_SCRIPT_NOT_IN_FONT && range.sa.eScript != SCRIPT_UNDEFINED) { @@ -227,19 +227,19 @@ static bool UniscribeShapeRun(const Unis range.sa.eScript = SCRIPT_UNDEFINED; } else { /* Some unknown other error. */ - if (temp_dc != NULL) { + if (temp_dc != nullptr) { SelectObject(temp_dc, old_font); DeleteObject(cur_font); - ReleaseDC(NULL, temp_dc); + ReleaseDC(nullptr, temp_dc); } return false; } } - if (temp_dc != NULL) { + if (temp_dc != nullptr) { SelectObject(temp_dc, old_font); DeleteObject(cur_font); - ReleaseDC(NULL, temp_dc); + ReleaseDC(nullptr, temp_dc); } return true; @@ -280,16 +280,16 @@ static std::vector Uniscrib { int32 length = buff_end - buff; /* Can't layout an empty string. */ - if (length == 0) return NULL; + if (length == 0) return nullptr; /* Can't layout our in-built sprite fonts. */ for (auto const &pair : fontMapping) { - if (pair.second->fc->IsBuiltInFont()) return NULL; + if (pair.second->fc->IsBuiltInFont()) return nullptr; } /* Itemize text. */ std::vector items = UniscribeItemizeString(buff, length); - if (items.size() == 0) return NULL; + if (items.size() == 0) return nullptr; /* Build ranges from the items and the font map. A range is a run of text * that is part of a single item and formatted using a single font style. */ @@ -306,7 +306,7 @@ static std::vector Uniscrib /* Shape the range. */ if (!UniscribeShapeRun(buff, ranges.back())) { - return NULL; + return nullptr; } /* If we are at the end of the current item, advance to the next item. */ @@ -323,7 +323,7 @@ static std::vector Uniscrib std::vector::iterator start_run = this->cur_range; std::vector::iterator last_run = this->cur_range; - if (start_run == this->ranges.end()) return NULL; + if (start_run == this->ranges.end()) return nullptr; /* Add remaining width of the first run if it is a broken run. */ int cur_width = 0; @@ -355,7 +355,7 @@ static std::vector Uniscrib int last_cluster = this->cur_range_offset + 1; for (std::vector::iterator r = start_run; r != last_run; r++) { log_attribs.resize(r->pos - start_run->pos + r->len); - if (FAILED(ScriptBreak(this->text_buffer + r->pos + start_offs, r->len - start_offs, &r->sa, &log_attribs[r->pos - start_run->pos + start_offs]))) return NULL; + if (FAILED(ScriptBreak(this->text_buffer + r->pos + start_offs, r->len - start_offs, &r->sa, &log_attribs[r->pos - start_run->pos + start_offs]))) return nullptr; std::vector dx(r->len); ScriptGetLogicalWidths(&r->sa, r->len, (int)r->glyphs.size(), &r->advances[0], &r->char_to_glyph[0], &r->vis_attribs[0], &dx[0]); @@ -401,7 +401,7 @@ static std::vector Uniscrib bidi_level.push_back(r->sa.s.uBidiLevel); } std::vector vis_to_log(bidi_level.size()); - if (FAILED(ScriptLayout((int)bidi_level.size(), &bidi_level[0], &vis_to_log[0], NULL))) return NULL; + if (FAILED(ScriptLayout((int)bidi_level.size(), &bidi_level[0], &vis_to_log[0], nullptr))) return nullptr; /* Create line. */ std::unique_ptr line(new UniscribeLine()); @@ -415,14 +415,14 @@ static std::vector Uniscrib if (i_run == last_run - 1 && remaing_offset < (last_run - 1)->len) { run.len = remaing_offset - 1; - if (!UniscribeShapeRun(this->text_buffer, run)) return NULL; + if (!UniscribeShapeRun(this->text_buffer, run)) return nullptr; } if (i_run == start_run && this->cur_range_offset > 0) { assert(run.len - this->cur_range_offset > 0); run.pos += this->cur_range_offset; run.len -= this->cur_range_offset; - if (!UniscribeShapeRun(this->text_buffer, run)) return NULL; + if (!UniscribeShapeRun(this->text_buffer, run)) return nullptr; } line->emplace_back(run, cur_pos); @@ -490,12 +490,12 @@ UniscribeParagraphLayout::UniscribeVisua start_pos(other.start_pos), total_advance(other.total_advance), num_glyphs(other.num_glyphs), font(other.font) { this->glyph_to_char = other.glyph_to_char; - other.glyph_to_char = NULL; + other.glyph_to_char = nullptr; } const int *UniscribeParagraphLayout::UniscribeVisualRun::GetGlyphToCharMap() const { - if (this->glyph_to_char == NULL) { + if (this->glyph_to_char == nullptr) { this->glyph_to_char = CallocT(this->GetGlyphCount()); /* The char to glyph array contains the first glyph index of the cluster that is associated diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -61,14 +61,14 @@ bool LoadLibraryList(Function proc[], co HMODULE lib; lib = LoadLibrary(MB_TO_WIDE(dll)); - if (lib == NULL) return false; + if (lib == nullptr) return false; for (;;) { FARPROC p; while (*dll++ != '\0') { /* Nothing */ } if (*dll == '\0') break; p = GetProcAddress(lib, dll); - if (p == NULL) return false; + if (p == nullptr) return false; *proc++ = (Function)p; } dll++; @@ -84,7 +84,7 @@ void ShowOSErrorBox(const char *buf, boo void OSOpenBrowser(const char *url) { - ShellExecute(GetActiveWindow(), _T("open"), OTTD2FS(url), NULL, NULL, SW_SHOWNORMAL); + ShellExecute(GetActiveWindow(), _T("open"), OTTD2FS(url), nullptr, nullptr, SW_SHOWNORMAL); } /* Code below for windows version of opendir/readdir/closedir copied and @@ -142,7 +142,7 @@ DIR *opendir(const TCHAR *path) if ((fa != INVALID_FILE_ATTRIBUTES) && (fa & FILE_ATTRIBUTE_DIRECTORY)) { d = dir_calloc(); - if (d != NULL) { + if (d != nullptr) { TCHAR search_path[MAX_PATH]; bool slash = path[_tcslen(path) - 1] == '\\'; @@ -158,14 +158,14 @@ DIR *opendir(const TCHAR *path) d->at_first_entry = true; } else { dir_free(d); - d = NULL; + d = nullptr; } } else { errno = ENOMEM; } } else { /* path not found or not a directory */ - d = NULL; + d = nullptr; errno = ENOENT; } @@ -179,11 +179,11 @@ struct dirent *readdir(DIR *d) if (d->at_first_entry) { /* the directory was empty when opened */ - if (d->hFind == INVALID_HANDLE_VALUE) return NULL; + if (d->hFind == INVALID_HANDLE_VALUE) return nullptr; d->at_first_entry = false; } else if (!FindNextFile(d->hFind, &d->fd)) { // determine cause and bail if (GetLastError() == ERROR_NO_MORE_FILES) SetLastError(prev_err); - return NULL; + return nullptr; } /* This entry has passed all checks; return information about it. @@ -251,7 +251,7 @@ bool FiosGetDiskFreeSpace(const char *pa DWORD spc, bps, nfc, tnc; _sntprintf(root, lengthof(root), _T("%c:") _T(PATHSEP), path[0]); - if (tot != NULL && GetDiskFreeSpace(root, &spc, &bps, &nfc, &tnc)) { + if (tot != nullptr && GetDiskFreeSpace(root, &spc, &bps, &nfc, &tnc)) { *tot = ((spc * bps) * (uint64)nfc); retval = true; } @@ -339,9 +339,9 @@ void CreateConsole() *stderr = *fdopen(2, "w" ); #endif - setvbuf(stdin, NULL, _IONBF, 0); - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); + setvbuf(stdin, nullptr, _IONBF, 0); + setvbuf(stdout, nullptr, _IONBF, 0); + setvbuf(stderr, nullptr, _IONBF, 0); } /** Temporary pointer to get the help message to the window */ @@ -398,7 +398,7 @@ void ShowInfo(const char *str) * ShowInfo are much shorter, or so long they need this way of displaying * them anyway. */ _help_msg = str; - DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(101), NULL, HelpDialogFunc); + DialogBox(GetModuleHandle(nullptr), MAKEINTRESOURCE(101), nullptr, HelpDialogFunc); } else { /* We need to put the text in a separate buffer because the default * buffer in OTTD2FS might not be large enough (512 chars). */ @@ -459,28 +459,28 @@ void DetermineBasePaths(const char *exe) char tmp[MAX_PATH]; TCHAR path[MAX_PATH]; #ifdef WITH_PERSONAL_DIR - if (SUCCEEDED(OTTDSHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, path))) { + if (SUCCEEDED(OTTDSHGetFolderPath(nullptr, CSIDL_PERSONAL, nullptr, SHGFP_TYPE_CURRENT, path))) { strecpy(tmp, FS2OTTD(path), lastof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); strecat(tmp, PERSONAL_DIR, lastof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); _searchpaths[SP_PERSONAL_DIR] = stredup(tmp); } else { - _searchpaths[SP_PERSONAL_DIR] = NULL; + _searchpaths[SP_PERSONAL_DIR] = nullptr; } - if (SUCCEEDED(OTTDSHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, SHGFP_TYPE_CURRENT, path))) { + if (SUCCEEDED(OTTDSHGetFolderPath(nullptr, CSIDL_COMMON_DOCUMENTS, nullptr, SHGFP_TYPE_CURRENT, path))) { strecpy(tmp, FS2OTTD(path), lastof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); strecat(tmp, PERSONAL_DIR, lastof(tmp)); AppendPathSeparator(tmp, lastof(tmp)); _searchpaths[SP_SHARED_DIR] = stredup(tmp); } else { - _searchpaths[SP_SHARED_DIR] = NULL; + _searchpaths[SP_SHARED_DIR] = nullptr; } #else - _searchpaths[SP_PERSONAL_DIR] = NULL; - _searchpaths[SP_SHARED_DIR] = NULL; + _searchpaths[SP_PERSONAL_DIR] = nullptr; + _searchpaths[SP_SHARED_DIR] = nullptr; #endif /* Get the path to working directory of OpenTTD */ @@ -488,15 +488,15 @@ void DetermineBasePaths(const char *exe) AppendPathSeparator(tmp, lastof(tmp)); _searchpaths[SP_WORKING_DIR] = stredup(tmp); - if (!GetModuleFileName(NULL, path, lengthof(path))) { + if (!GetModuleFileName(nullptr, path, lengthof(path))) { DEBUG(misc, 0, "GetModuleFileName failed (%lu)\n", GetLastError()); - _searchpaths[SP_BINARY_DIR] = NULL; + _searchpaths[SP_BINARY_DIR] = nullptr; } else { TCHAR exec_dir[MAX_PATH]; _tcsncpy(path, convert_to_fs(exe, path, lengthof(path)), lengthof(path)); - if (!GetFullPathName(path, lengthof(exec_dir), exec_dir, NULL)) { + if (!GetFullPathName(path, lengthof(exec_dir), exec_dir, nullptr)) { DEBUG(misc, 0, "GetFullPathName failed (%lu)\n", GetLastError()); - _searchpaths[SP_BINARY_DIR] = NULL; + _searchpaths[SP_BINARY_DIR] = nullptr; } else { strecpy(tmp, convert_from_fs(exec_dir, tmp, lengthof(tmp)), lastof(tmp)); char *s = strrchr(tmp, PATHSEPCHAR); @@ -505,8 +505,8 @@ void DetermineBasePaths(const char *exe) } } - _searchpaths[SP_INSTALLATION_DIR] = NULL; - _searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL; + _searchpaths[SP_INSTALLATION_DIR] = nullptr; + _searchpaths[SP_APPLICATION_BUNDLE_DIR] = nullptr; } @@ -516,18 +516,18 @@ bool GetClipboardContents(char *buffer, const char *ptr; if (IsClipboardFormatAvailable(CF_UNICODETEXT)) { - OpenClipboard(NULL); + OpenClipboard(nullptr); cbuf = GetClipboardData(CF_UNICODETEXT); ptr = (const char*)GlobalLock(cbuf); - int out_len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)ptr, -1, buffer, (last - buffer) + 1, NULL, NULL); + int out_len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)ptr, -1, buffer, (last - buffer) + 1, nullptr, nullptr); GlobalUnlock(cbuf); CloseClipboard(); if (out_len == 0) return false; #if !defined(UNICODE) } else if (IsClipboardFormatAvailable(CF_TEXT)) { - OpenClipboard(NULL); + OpenClipboard(nullptr); cbuf = GetClipboardData(CF_TEXT); ptr = (const char*)GlobalLock(cbuf); @@ -596,7 +596,7 @@ char *convert_from_fs(const TCHAR *name, const WCHAR *wide_buf = name; #else /* Convert string from the local codepage to UTF-16. */ - int wide_len = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0); + int wide_len = MultiByteToWideChar(CP_ACP, 0, name, -1, nullptr, 0); if (wide_len == 0) { utf8_buf[0] = '\0'; return utf8_buf; @@ -607,7 +607,7 @@ char *convert_from_fs(const TCHAR *name, #endif /* Convert UTF-16 string to UTF-8. */ - int len = WideCharToMultiByte(CP_UTF8, 0, wide_buf, -1, utf8_buf, (int)buflen, NULL, NULL); + int len = WideCharToMultiByte(CP_UTF8, 0, wide_buf, -1, utf8_buf, (int)buflen, nullptr, nullptr); if (len == 0) utf8_buf[0] = '\0'; return utf8_buf; @@ -630,7 +630,7 @@ TCHAR *convert_to_fs(const char *name, T int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, system_buf, (int)buflen); if (len == 0) system_buf[0] = '\0'; #else - int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); + int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, nullptr, 0); if (len == 0) { system_buf[0] = '\0'; return system_buf; @@ -639,7 +639,7 @@ TCHAR *convert_to_fs(const char *name, T WCHAR *wide_buf = AllocaM(WCHAR, len); MultiByteToWideChar(CP_UTF8, 0, name, -1, wide_buf, len); - len = WideCharToMultiByte(console_cp ? CP_OEMCP : CP_ACP, 0, wide_buf, len, system_buf, (int)buflen, NULL, NULL); + len = WideCharToMultiByte(console_cp ? CP_OEMCP : CP_ACP, 0, wide_buf, len, system_buf, (int)buflen, nullptr, nullptr); if (len == 0) system_buf[0] = '\0'; #endif @@ -654,7 +654,7 @@ TCHAR *convert_to_fs(const char *name, T */ HRESULT OTTDSHGetFolderPath(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath) { - static HRESULT (WINAPI *SHGetFolderPath)(HWND, int, HANDLE, DWORD, LPTSTR) = NULL; + static HRESULT (WINAPI *SHGetFolderPath)(HWND, int, HANDLE, DWORD, LPTSTR) = nullptr; static bool first_time = true; /* We only try to load the library one time; if it fails, it fails */ @@ -674,7 +674,7 @@ HRESULT OTTDSHGetFolderPath(HWND hwnd, i first_time = false; } - if (SHGetFolderPath != NULL) return SHGetFolderPath(hwnd, csidl, hToken, dwFlags, pszPath); + if (SHGetFolderPath != nullptr) return SHGetFolderPath(hwnd, csidl, hToken, dwFlags, pszPath); /* SHGetFolderPath doesn't exist, try a more conservative approach, * eg environment variables. This is only included for legacy modes @@ -698,7 +698,7 @@ HRESULT OTTDSHGetFolderPath(HWND hwnd, i HKEY key; if (RegOpenKeyEx(csidl == CSIDL_PERSONAL ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE, REGSTR_PATH_SPECIAL_FOLDERS, 0, KEY_READ, &key) != ERROR_SUCCESS) break; DWORD len = MAX_PATH; - ret = RegQueryValueEx(key, csidl == CSIDL_PERSONAL ? _T("Personal") : _T("Common Documents"), NULL, NULL, (LPBYTE)pszPath, &len); + ret = RegQueryValueEx(key, csidl == CSIDL_PERSONAL ? _T("Personal") : _T("Common Documents"), nullptr, nullptr, (LPBYTE)pszPath, &len); RegCloseKey(key); if (ret == ERROR_SUCCESS) return (HRESULT)0; break; @@ -718,7 +718,7 @@ const char *GetCurrentLocale(const char if (GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, lang, lengthof(lang)) == 0 || GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, country, lengthof(country)) == 0) { /* Unable to retrieve the locale. */ - return NULL; + return nullptr; } /* Format it as 'en_us'. */ static char retbuf[6] = {lang[0], lang[1], '_', country[0], country[1], 0}; @@ -750,7 +750,7 @@ void Win32SetCurrentLocaleName(const cha int OTTDStringCompare(const char *s1, const char *s2) { typedef int (WINAPI *PFNCOMPARESTRINGEX)(LPCWSTR, DWORD, LPCWCH, int, LPCWCH, int, LPVOID, LPVOID, LPARAM); - static PFNCOMPARESTRINGEX _CompareStringEx = NULL; + static PFNCOMPARESTRINGEX _CompareStringEx = nullptr; static bool first_time = true; #ifndef SORT_DIGITSASNUMBERS @@ -765,10 +765,10 @@ int OTTDStringCompare(const char *s1, co first_time = false; } - if (_CompareStringEx != NULL) { + if (_CompareStringEx != nullptr) { /* CompareStringEx takes UTF-16 strings, even in ANSI-builds. */ - int len_s1 = MultiByteToWideChar(CP_UTF8, 0, s1, -1, NULL, 0); - int len_s2 = MultiByteToWideChar(CP_UTF8, 0, s2, -1, NULL, 0); + int len_s1 = MultiByteToWideChar(CP_UTF8, 0, s1, -1, nullptr, 0); + int len_s2 = MultiByteToWideChar(CP_UTF8, 0, s2, -1, nullptr, 0); if (len_s1 != 0 && len_s2 != 0) { LPWSTR str_s1 = AllocaM(WCHAR, len_s1); @@ -777,7 +777,7 @@ int OTTDStringCompare(const char *s1, co MultiByteToWideChar(CP_UTF8, 0, s1, -1, str_s1, len_s1); MultiByteToWideChar(CP_UTF8, 0, s2, -1, str_s2, len_s2); - int result = _CompareStringEx(_cur_iso_locale, LINGUISTIC_IGNORECASE | SORT_DIGITSASNUMBERS, str_s1, -1, str_s2, -1, NULL, NULL, 0); + int result = _CompareStringEx(_cur_iso_locale, LINGUISTIC_IGNORECASE | SORT_DIGITSASNUMBERS, str_s1, -1, str_s2, -1, nullptr, nullptr, 0); if (result != 0) return result; } } diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -46,10 +46,10 @@ struct OskWindow : public Window { OskWindow(WindowDesc *desc, Window *parent, int button) : Window(desc) { this->parent = parent; - assert(parent != NULL); + assert(parent != nullptr); NWidgetCore *par_wid = parent->GetWidget(button); - assert(par_wid != NULL); + assert(par_wid != nullptr); assert(parent->querystrings.Contains(button)); this->qs = parent->querystrings.Find(button)->second; @@ -166,7 +166,7 @@ struct OskWindow : public Window { break; case WID_OSK_OK: - if (this->qs->orig == NULL || strcmp(this->qs->text.buf, this->qs->orig) != 0) { + if (this->qs->orig == nullptr || strcmp(this->qs->text.buf, this->qs->orig) != 0) { /* pass information by simulating a button press on parent window */ if (this->qs->ok_button >= 0) { this->parent->OnClick(pt, this->qs->ok_button, 1); @@ -427,7 +427,7 @@ void ShowOnScreenKeyboard(Window *parent void UpdateOSKOriginalText(const Window *parent, int button) { OskWindow *osk = dynamic_cast(FindWindowById(WC_OSK, 0)); - if (osk == NULL || osk->parent != parent || osk->text_btn != button) return; + if (osk == nullptr || osk->parent != parent || osk->text_btn != button) return; free(osk->orig_str_buf); osk->orig_str_buf = stredup(osk->qs->text.buf); @@ -444,5 +444,5 @@ void UpdateOSKOriginalText(const Window bool IsOSKOpenedFor(const Window *w, int button) { OskWindow *osk = dynamic_cast(FindWindowById(WC_OSK, 0)); - return osk != NULL && osk->parent == w && osk->text_btn == button; + return osk != nullptr && osk->parent == w && osk->text_btn == button; } diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -53,27 +53,27 @@ struct CFollowTrackT CPerformanceTimer *m_pPerf; RailTypes m_railtypes; - inline CFollowTrackT(const VehicleType *v = NULL, RailTypes railtype_override = INVALID_RAILTYPES, CPerformanceTimer *pPerf = NULL) + inline CFollowTrackT(const VehicleType *v = nullptr, RailTypes railtype_override = INVALID_RAILTYPES, CPerformanceTimer *pPerf = nullptr) { Init(v, railtype_override, pPerf); } - inline CFollowTrackT(Owner o, RailTypes railtype_override = INVALID_RAILTYPES, CPerformanceTimer *pPerf = NULL) + inline CFollowTrackT(Owner o, RailTypes railtype_override = INVALID_RAILTYPES, CPerformanceTimer *pPerf = nullptr) { - m_veh = NULL; + m_veh = nullptr; Init(o, railtype_override, pPerf); } inline void Init(const VehicleType *v, RailTypes railtype_override, CPerformanceTimer *pPerf) { - assert(!IsRailTT() || (v != NULL && v->type == VEH_TRAIN)); + assert(!IsRailTT() || (v != nullptr && v->type == VEH_TRAIN)); m_veh = v; - Init(v != NULL ? v->owner : INVALID_OWNER, IsRailTT() && railtype_override == INVALID_RAILTYPES ? Train::From(v)->compatible_railtypes : railtype_override, pPerf); + Init(v != nullptr ? v->owner : INVALID_OWNER, IsRailTT() && railtype_override == INVALID_RAILTYPES ? Train::From(v)->compatible_railtypes : railtype_override, pPerf); } inline void Init(Owner o, RailTypes railtype_override, CPerformanceTimer *pPerf) { - assert(!IsRoadTT() || m_veh != NULL); + assert(!IsRoadTT() || m_veh != nullptr); assert(!IsRailTT() || railtype_override != INVALID_RAILTYPES); m_veh_owner = o; m_pPerf = pPerf; @@ -126,7 +126,7 @@ struct CFollowTrackT m_err = EC_NONE; assert( ((TrackStatusToTrackdirBits( - GetTileTrackStatus(m_old_tile, TT(), (IsRoadTT() && m_veh != NULL) ? RoadVehicle::From(m_veh)->compatible_roadtypes : 0) + GetTileTrackStatus(m_old_tile, TT(), (IsRoadTT() && m_veh != nullptr) ? RoadVehicle::From(m_veh)->compatible_roadtypes : 0) ) & TrackdirToTrackdirBits(m_old_td)) != 0) || (IsTram() && GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR) // Disable the assertion for single tram bits ); @@ -447,7 +447,7 @@ protected: public: /** Helper for pathfinders - get min/max speed on the m_old_tile/m_old_td */ - int GetSpeedLimit(int *pmin_speed = NULL) const + int GetSpeedLimit(int *pmin_speed = nullptr) const { int min_speed = 0; int max_speed = INT_MAX; // no limit @@ -465,7 +465,7 @@ public: } /* if min speed was requested, return it */ - if (pmin_speed != NULL) *pmin_speed = min_speed; + if (pmin_speed != nullptr) *pmin_speed = min_speed; return max_speed; } }; diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/npf/aystar.cpp --- a/src/pathfinder/npf/aystar.cpp +++ b/src/pathfinder/npf/aystar.cpp @@ -32,7 +32,7 @@ /** * This looks in the hash whether a node exists in the closed list. * @param node Node to search. - * @return The #PathNode if it is available, else \c NULL + * @return The #PathNode if it is available, else \c nullptr */ PathNode *AyStar::ClosedListIsInList(const AyStarNode *node) { @@ -55,7 +55,7 @@ void AyStar::ClosedListAdd(const PathNod /** * Check whether a node is in the open list. * @param node Node to search. - * @return If the node is available, it is returned, else \c NULL is returned. + * @return If the node is available, it is returned, else \c nullptr is returned. */ OpenListNode *AyStar::OpenListIsInList(const AyStarNode *node) { @@ -65,13 +65,13 @@ OpenListNode *AyStar::OpenListIsInList(c /** * Gets the best node from the open list. * It deletes the returned node from the open list. - * @returns the best node available, or \c NULL of none is found. + * @returns the best node available, or \c nullptr of none is found. */ OpenListNode *AyStar::OpenListPop() { /* Return the item the Queue returns.. the best next OpenList item. */ OpenListNode *res = (OpenListNode*)this->openlist_queue.Pop(); - if (res != NULL) { + if (res != nullptr) { this->openlist_hash.DeleteValue(res->path.node.tile, res->path.node.direction); } @@ -105,7 +105,7 @@ void AyStar::CheckTile(AyStarNode *curre OpenListNode *check; /* Check the new node against the ClosedList */ - if (this->ClosedListIsInList(current) != NULL) return; + if (this->ClosedListIsInList(current) != nullptr) return; /* Calculate the G-value for this node */ new_g = this->CalculateG(this, current, parent); @@ -131,7 +131,7 @@ void AyStar::CheckTile(AyStarNode *curre /* Check if this item is already in the OpenList */ check = this->OpenListIsInList(current); - if (check != NULL) { + if (check != nullptr) { uint i; /* Yes, check if this g value is lower.. */ if (new_g > check->g) return; @@ -167,11 +167,11 @@ int AyStar::Loop() /* Get the best node from OpenList */ OpenListNode *current = this->OpenListPop(); /* If empty, drop an error */ - if (current == NULL) return AYSTAR_EMPTY_OPENLIST; + if (current == nullptr) return AYSTAR_EMPTY_OPENLIST; /* Check for end node and if found, return that code */ if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE && !CheckIgnoreFirstTile(¤t->path)) { - if (this->FoundEndNode != NULL) { + if (this->FoundEndNode != nullptr) { this->FoundEndNode(this, current); } free(current); @@ -285,7 +285,7 @@ void AyStar::AddStartNode(AyStarNode *st printf("[AyStar] Starting A* Algorithm from node (%d, %d, %d)\n", TileX(start_node->tile), TileY(start_node->tile), start_node->direction); #endif - this->OpenListAdd(NULL, start_node, 0, g); + this->OpenListAdd(nullptr, start_node, 0, g); } /** diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -103,7 +103,7 @@ static inline void NPFSetFlag(AyStarNode bool CheckIgnoreFirstTile(const PathNode *node) { - return (node->parent == NULL && HasBit(node->node.user_data[NPF_NODE_FLAGS], NPF_FLAG_IGNORE_START_TILE)); + return (node->parent == nullptr && HasBit(node->node.user_data[NPF_NODE_FLAGS], NPF_FLAG_IGNORE_START_TILE)); } /** @@ -192,7 +192,7 @@ static int32 NPFCalcStationOrTileHeurist * choice */ static void NPFFillTrackdirChoice(AyStarNode *current, OpenListNode *parent) { - if (parent->path.parent == NULL) { + if (parent->path.parent == nullptr) { Trackdir trackdir = current->direction; /* This is a first order decision, so we'd better save the * direction we chose */ @@ -584,7 +584,7 @@ static const PathNode *FindSafePosition( /* If there is no signal, reserve the whole path. */ PathNode *sig = path; - for (; path->parent != NULL; path = path->parent) { + for (; path->parent != nullptr; path = path->parent) { if (IsSafeWaitingPosition(v, path->node.tile, path->node.direction, true, _settings_game.pf.forbid_90_deg)) { sig = path; } @@ -625,7 +625,7 @@ static void NPFSaveTargetData(AyStar *as ftd->node = current->path.node; ftd->res_okay = false; - if (as->user_target != NULL && ((NPFFindStationOrTileData*)as->user_target)->reserve_path && user->type == TRANSPORT_RAIL) { + if (as->user_target != nullptr && ((NPFFindStationOrTileData*)as->user_target)->reserve_path && user->type == TRANSPORT_RAIL) { /* Path reservation is requested. */ const Train *v = Train::From(((NPFFindStationOrTileData *)as->user_target)->v); @@ -647,7 +647,7 @@ static void NPFSaveTargetData(AyStar *as if (!IsWaitingPositionFree(v, target->node.tile, target->node.direction, _settings_game.pf.forbid_90_deg)) return; } - for (const PathNode *cur = target; cur->parent != NULL; cur = cur->parent) { + for (const PathNode *cur = target; cur->parent != nullptr; cur = cur->parent) { if (!TryReserveRailTrack(cur->node.tile, TrackdirToTrack(cur->node.direction))) { /* Reservation failed, undo. */ ClearPathReservation(target, cur); @@ -957,7 +957,7 @@ static void NPFFollowTrack(AyStar *aysta /* * Plan a route to the specified target (which is checked by target_proc), - * from start1 and if not NULL, from start2 as well. The type of transport we + * from start1 and if not nullptr, from start2 as well. The type of transport we * are checking is in type. reverse_penalty is applied to all routes that * originate from the second start node. * When we are looking for one specific target (optionally multiple tiles), we @@ -989,7 +989,7 @@ static NPFFoundTargetData NPFRouteIntern NPFSetFlag(start1, NPF_FLAG_IGNORE_START_TILE, ignore_start_tile1); NPFSetFlag(start1, NPF_FLAG_IGNORE_RESERVED, ignore_reserved); _npf_aystar.AddStartNode(start1, 0); - if (start2 != NULL) { + if (start2 != nullptr) { start2->user_data[NPF_TRACKDIR_CHOICE] = INVALID_TRACKDIR; start2->user_data[NPF_NODE_FLAGS] = 0; NPFSetFlag(start2, NPF_FLAG_IGNORE_START_TILE, ignore_start_tile2); @@ -1017,10 +1017,10 @@ static NPFFoundTargetData NPFRouteIntern assert(r != AYSTAR_STILL_BUSY); if (result.best_bird_dist != 0) { - if (target != NULL) { + if (target != nullptr) { DEBUG(npf, 1, "Could not find route to tile 0x%X from 0x%X.", target->dest_coords, start1->tile); } else { - /* Assumption: target == NULL, so we are looking for a depot */ + /* Assumption: target == nullptr, so we are looking for a depot */ DEBUG(npf, 1, "Could not find route to a depot from tile 0x%X.", start1->tile); } @@ -1041,7 +1041,7 @@ static NPFFoundTargetData NPFRouteToStat start1.direction = trackdir1; start2.direction = trackdir2; - return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindStationOrTile, NPFCalcStationOrTileHeuristic, user, 0); + return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : nullptr), ignore_start_tile2, target, NPFFindStationOrTile, NPFCalcStationOrTileHeuristic, user, 0); } /* Will search from the given tile and direction, for a route to the given @@ -1069,9 +1069,9 @@ static NPFFoundTargetData NPFRouteToDepo start1.direction = trackdir1; start2.direction = trackdir2; - /* perform a breadth first search. Target is NULL, + /* perform a breadth first search. Target is nullptr, * since we are just looking for any depot...*/ - return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindDepot, NPFCalcZero, user, reverse_penalty, false, max_penalty); + return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : nullptr), ignore_start_tile2, target, NPFFindDepot, NPFCalcZero, user, reverse_penalty, false, max_penalty); } void InitializeNPF() @@ -1121,7 +1121,7 @@ FindDepotData NPFRoadVehicleFindNearestD Trackdir trackdir = v->GetVehicleTrackdir(); AyStarUserData user = { v->owner, TRANSPORT_ROAD, INVALID_RAILTYPES, v->compatible_roadtypes }; - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, INVALID_TILE, INVALID_TRACKDIR, false, NULL, &user, 0, max_penalty); + NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, INVALID_TILE, INVALID_TRACKDIR, false, nullptr, &user, 0, max_penalty); if (ftd.best_bird_dist != 0) return FindDepotData(); @@ -1233,10 +1233,10 @@ bool NPFTrainFindNearestSafeTile(const T RailTypes railtypes = v->compatible_railtypes; if (override_railtype) railtypes |= GetRailTypeInfo(v->railtype)->compatible_railtypes; - /* perform a breadth first search. Target is NULL, + /* perform a breadth first search. Target is nullptr, * since we are just looking for any safe tile...*/ AyStarUserData user = { v->owner, TRANSPORT_RAIL, railtypes, ROADTYPES_NONE }; - return NPFRouteInternal(&start1, true, NULL, false, &fstd, NPFFindSafeTile, NPFCalcZero, &user, 0, true).res_okay; + return NPFRouteInternal(&start1, true, nullptr, false, &fstd, NPFFindSafeTile, NPFCalcZero, &user, 0, true).res_okay; } bool NPFTrainCheckReverse(const Train *v) @@ -1269,7 +1269,7 @@ Track NPFTrainChooseTrack(const Train *v AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE }; NPFFoundTargetData ftd = NPFRouteToStationOrTile(origin.tile, origin.trackdir, true, &fstd, &user); - if (target != NULL) { + if (target != nullptr) { target->tile = ftd.node.tile; target->trackdir = (Trackdir)ftd.node.direction; target->okay = ftd.res_okay; diff --git a/src/pathfinder/npf/queue.cpp b/src/pathfinder/npf/queue.cpp --- a/src/pathfinder/npf/queue.cpp +++ b/src/pathfinder/npf/queue.cpp @@ -37,7 +37,7 @@ void BinaryHeap::Clear(bool free_values) uint j; for (i = 0; i < this->blocks; i++) { - if (this->elements[i] == NULL) { + if (this->elements[i] == nullptr) { /* No more allocated blocks */ break; } @@ -55,7 +55,7 @@ void BinaryHeap::Clear(bool free_values) if (i != 0) { /* Leave the first block of memory alone */ free(this->elements[i]); - this->elements[i] = NULL; + this->elements[i] = nullptr; } } this->size = 0; @@ -73,7 +73,7 @@ void BinaryHeap::Free(bool free_values) this->Clear(free_values); for (i = 0; i < this->blocks; i++) { - if (this->elements[i] == NULL) break; + if (this->elements[i] == nullptr) break; free(this->elements[i]); } free(this->elements); @@ -88,7 +88,7 @@ bool BinaryHeap::Push(void *item, int pr if (this->size == this->max_size) return false; assert(this->size < this->max_size); - if (this->elements[this->size >> BINARY_HEAP_BLOCKSIZE_BITS] == NULL) { + if (this->elements[this->size >> BINARY_HEAP_BLOCKSIZE_BITS] == nullptr) { /* The currently allocated blocks are full, allocate a new one */ assert((this->size & BINARY_HEAP_BLOCKSIZE_MASK) == 0); this->elements[this->size >> BINARY_HEAP_BLOCKSIZE_BITS] = MallocT(BINARY_HEAP_BLOCKSIZE); @@ -195,7 +195,7 @@ void *BinaryHeap::Pop() { void *result; - if (this->size == 0) return NULL; + if (this->size == 0) return nullptr; /* The best item is always on top, so give that as result */ result = this->GetElement(1).item; @@ -264,7 +264,7 @@ void Hash::Delete(bool free_values) /* Free the first value */ if (free_values) free(this->buckets[i].value); node = this->buckets[i].next; - while (node != NULL) { + while (node != nullptr) { HashNode *prev = node; node = node->next; @@ -296,7 +296,7 @@ void Hash::PrintStatistics() const const HashNode *node; used_buckets++; - for (node = &this->buckets[i]; node != NULL; node = node->next) collision++; + for (node = &this->buckets[i]; node != nullptr; node = node->next) collision++; if (collision > max_collision) max_collision = collision; } if (collision >= lengthof(usage)) collision = lengthof(usage) - 1; @@ -351,7 +351,7 @@ void Hash::Clear(bool free_values) /* Free the first value */ if (free_values) free(this->buckets[i].value); node = this->buckets[i].next; - while (node != NULL) { + while (node != nullptr) { HashNode *prev = node; node = node->next; @@ -365,32 +365,32 @@ void Hash::Clear(bool free_values) /** * Finds the node that that saves this key pair. If it is not - * found, returns NULL. If it is found, *prev is set to the + * found, returns nullptr. If it is found, *prev is set to the * node before the one found, or if the node found was the first in the bucket - * to NULL. If it is not found, *prev is set to the last HashNode in the - * bucket, or NULL if it is empty. prev can also be NULL, in which case it is + * to nullptr. If it is not found, *prev is set to the last HashNode in the + * bucket, or nullptr if it is empty. prev can also be nullptr, in which case it is * not used for output. */ HashNode *Hash::FindNode(uint key1, uint key2, HashNode** prev_out) const { uint hash = this->hash(key1, key2); - HashNode *result = NULL; + HashNode *result = nullptr; /* Check if the bucket is empty */ if (!this->buckets_in_use[hash]) { - if (prev_out != NULL) *prev_out = NULL; - result = NULL; + if (prev_out != nullptr) *prev_out = nullptr; + result = nullptr; /* Check the first node specially */ } else if (this->buckets[hash].key1 == key1 && this->buckets[hash].key2 == key2) { /* Save the value */ result = this->buckets + hash; - if (prev_out != NULL) *prev_out = NULL; + if (prev_out != nullptr) *prev_out = nullptr; /* Check all other nodes */ } else { HashNode *prev = this->buckets + hash; HashNode *node; - for (node = prev->next; node != NULL; node = node->next) { + for (node = prev->next; node != nullptr; node = node->next) { if (node->key1 == key1 && node->key2 == key2) { /* Found it */ result = node; @@ -398,14 +398,14 @@ HashNode *Hash::FindNode(uint key1, uint } prev = node; } - if (prev_out != NULL) *prev_out = prev; + if (prev_out != nullptr) *prev_out = prev; } return result; } /** * Deletes the value with the specified key pair from the hash and returns - * that value. Returns NULL when the value was not present. The value returned + * that value. Returns nullptr when the value was not present. The value returned * is _not_ free()'d! */ void *Hash::DeleteValue(uint key1, uint key2) @@ -414,15 +414,15 @@ void *Hash::DeleteValue(uint key1, uint HashNode *prev; // Used as output var for below function call HashNode *node = this->FindNode(key1, key2, &prev); - if (node == NULL) { + if (node == nullptr) { /* not found */ - result = NULL; - } else if (prev == NULL) { + result = nullptr; + } else if (prev == nullptr) { /* It is in the first node, we can't free that one, so we free * the next one instead (if there is any)*/ /* Save the value */ result = node->value; - if (node->next != NULL) { + if (node->next != nullptr) { HashNode *next = node->next; /* Copy the second to the first */ *node = *next; @@ -443,20 +443,20 @@ void *Hash::DeleteValue(uint key1, uint /* Free the node */ free(node); } - if (result != NULL) this->size--; + if (result != nullptr) this->size--; return result; } /** * Sets the value associated with the given key pair to the given value. - * Returns the old value if the value was replaced, NULL when it was not yet present. + * Returns the old value if the value was replaced, nullptr when it was not yet present. */ void *Hash::Set(uint key1, uint key2, void *value) { HashNode *prev; HashNode *node = this->FindNode(key1, key2, &prev); - if (node != NULL) { + if (node != nullptr) { /* Found it */ void *result = node->value; @@ -464,7 +464,7 @@ void *Hash::Set(uint key1, uint key2, vo return result; } /* It is not yet present, let's add it */ - if (prev == NULL) { + if (prev == nullptr) { /* The bucket is still empty */ uint hash = this->hash(key1, key2); this->buckets_in_use[hash] = true; @@ -474,21 +474,21 @@ void *Hash::Set(uint key1, uint key2, vo node = MallocT(1); prev->next = node; } - node->next = NULL; + node->next = nullptr; node->key1 = key1; node->key2 = key2; node->value = value; this->size++; - return NULL; + return nullptr; } /** - * Gets the value associated with the given key pair, or NULL when it is not + * Gets the value associated with the given key pair, or nullptr when it is not * present. */ void *Hash::Get(uint key1, uint key2) const { - HashNode *node = this->FindNode(key1, key2, NULL); + HashNode *node = this->FindNode(key1, key2, nullptr); - return (node != NULL) ? node->value : NULL; + return (node != nullptr) ? node->value : nullptr; } diff --git a/src/pathfinder/pf_performance_timer.hpp b/src/pathfinder/pf_performance_timer.hpp --- a/src/pathfinder/pf_performance_timer.hpp +++ b/src/pathfinder/pf_performance_timer.hpp @@ -53,7 +53,7 @@ struct CPerfStartReal inline CPerfStartReal(CPerformanceTimer& perf) : m_pperf(&perf) { - if (m_pperf != NULL) m_pperf->Start(); + if (m_pperf != nullptr) m_pperf->Start(); } inline ~CPerfStartReal() @@ -63,9 +63,9 @@ struct CPerfStartReal inline void Stop() { - if (m_pperf != NULL) { + if (m_pperf != nullptr) { m_pperf->Stop(); - m_pperf = NULL; + m_pperf = nullptr; } } }; diff --git a/src/pathfinder/yapf/nodelist.hpp b/src/pathfinder/yapf/nodelist.hpp --- a/src/pathfinder/yapf/nodelist.hpp +++ b/src/pathfinder/yapf/nodelist.hpp @@ -42,7 +42,7 @@ public: /** default constructor */ CNodeList_HashTableT() : m_open_queue(2048) { - m_new_node = NULL; + m_new_node = nullptr; } /** destructor */ @@ -65,7 +65,7 @@ public: /** allocate new data item from m_arr */ inline Titem_ *CreateNewNode() { - if (m_new_node == NULL) m_new_node = m_arr.AppendC(); + if (m_new_node == nullptr) m_new_node = m_arr.AppendC(); return m_new_node; } @@ -74,7 +74,7 @@ public: { /* for now it is enough to invalidate m_new_node if it is our given node */ if (&item == m_new_node) { - m_new_node = NULL; + m_new_node = nullptr; } /* TODO: do we need to store best nodes found in some extra list/array? Probably not now. */ } @@ -82,11 +82,11 @@ public: /** insert given item as open node (into m_open and m_open_queue) */ inline void InsertOpenNode(Titem_ &item) { - assert(m_closed.Find(item.GetKey()) == NULL); + assert(m_closed.Find(item.GetKey()) == nullptr); m_open.Push(item); m_open_queue.Include(&item); if (&item == m_new_node) { - m_new_node = NULL; + m_new_node = nullptr; } } @@ -96,7 +96,7 @@ public: if (!m_open_queue.IsEmpty()) { return m_open_queue.Begin(); } - return NULL; + return nullptr; } /** remove and return the best open node */ @@ -107,10 +107,10 @@ public: m_open.Pop(*item); return item; } - return NULL; + return nullptr; } - /** return the open node specified by a key or NULL if not found */ + /** return the open node specified by a key or nullptr if not found */ inline Titem_ *FindOpenNode(const Key &key) { Titem_ *item = m_open.Find(key); @@ -129,11 +129,11 @@ public: /** close node */ inline void InsertClosedNode(Titem_ &item) { - assert(m_open.Find(item.GetKey()) == NULL); + assert(m_open.Find(item.GetKey()) == nullptr); m_closed.Push(item); } - /** return the closed node specified by a key or NULL if not found */ + /** return the closed node specified by a key or nullptr if not found */ inline Titem_ *FindClosedNode(const Key &key) { Titem_ *item = m_closed.Find(key); diff --git a/src/pathfinder/yapf/yapf_base.hpp b/src/pathfinder/yapf/yapf_base.hpp --- a/src/pathfinder/yapf/yapf_base.hpp +++ b/src/pathfinder/yapf/yapf_base.hpp @@ -81,11 +81,11 @@ public: public: /** default constructor */ inline CYapfBaseT() - : m_pBestDestNode(NULL) - , m_pBestIntermediateNode(NULL) + : m_pBestDestNode(nullptr) + , m_pBestIntermediateNode(nullptr) , m_settings(&_settings_game.pf.yapf) , m_max_search_nodes(PfGetSettings().max_search_nodes) - , m_veh(NULL) + , m_veh(nullptr) , m_stats_cost_calcs(0) , m_stats_cache_hits(0) , m_num_steps(0) @@ -131,12 +131,12 @@ public: for (;;) { m_num_steps++; Node *n = m_nodes.GetBestOpenNode(); - if (n == NULL) { + if (n == nullptr) { break; } /* if the best open node was worse than the best path found, we can finish */ - if (m_pBestDestNode != NULL && m_pBestDestNode->GetCost() < n->GetCostEstimate()) { + if (m_pBestDestNode != nullptr && m_pBestDestNode->GetCost() < n->GetCostEstimate()) { break; } @@ -150,7 +150,7 @@ public: } } - bDestFound &= (m_pBestDestNode != NULL); + bDestFound &= (m_pBestDestNode != nullptr); perf.Stop(); if (_debug_yapf_level >= 2) { @@ -158,7 +158,7 @@ public: _total_pf_time_us += t; if (_debug_yapf_level >= 3) { - UnitID veh_idx = (m_veh != NULL) ? m_veh->unitnumber : 0; + UnitID veh_idx = (m_veh != nullptr) ? m_veh->unitnumber : 0; char ttc = Yapf().TransportTypeChar(); float cache_hit_ratio = (m_stats_cache_hits == 0) ? 0.0f : ((float)m_stats_cache_hits / (float)(m_stats_cache_hits + m_stats_cost_calcs) * 100.0f); int cost = bDestFound ? m_pBestDestNode->m_cost : -1; @@ -180,7 +180,7 @@ public: */ inline Node *GetBestNode() { - return (m_pBestDestNode != NULL) ? m_pBestDestNode : m_pBestIntermediateNode; + return (m_pBestDestNode != nullptr) ? m_pBestDestNode : m_pBestIntermediateNode; } /** @@ -198,7 +198,7 @@ public: { Yapf().PfNodeCacheFetch(n); /* insert the new node only if it is not there */ - if (m_nodes.FindOpenNode(n.m_key) == NULL) { + if (m_nodes.FindOpenNode(n.m_key) == nullptr) { m_nodes.InsertOpenNode(n); } else { /* if we are here, it means that node is already there - how it is possible? @@ -229,7 +229,7 @@ public: */ void PruneIntermediateNodeBranch() { - while (Yapf().m_pBestIntermediateNode != NULL && (Yapf().m_pBestIntermediateNode->m_segment->m_end_segment_reason & ESRB_CHOICE_FOLLOWS) == 0) { + while (Yapf().m_pBestIntermediateNode != nullptr && (Yapf().m_pBestIntermediateNode->m_segment->m_end_segment_reason & ESRB_CHOICE_FOLLOWS) == 0) { Yapf().m_pBestIntermediateNode = Yapf().m_pBestIntermediateNode->m_parent; } } @@ -262,20 +262,20 @@ public: /* detect the destination */ bool bDestination = Yapf().PfDetectDestination(n); if (bDestination) { - if (m_pBestDestNode == NULL || n < *m_pBestDestNode) { + if (m_pBestDestNode == nullptr || n < *m_pBestDestNode) { m_pBestDestNode = &n; } m_nodes.FoundBestNode(n); return; } - if (m_max_search_nodes > 0 && (m_pBestIntermediateNode == NULL || (m_pBestIntermediateNode->GetCostEstimate() - m_pBestIntermediateNode->GetCost()) > (n.GetCostEstimate() - n.GetCost()))) { + if (m_max_search_nodes > 0 && (m_pBestIntermediateNode == nullptr || (m_pBestIntermediateNode->GetCostEstimate() - m_pBestIntermediateNode->GetCost()) > (n.GetCostEstimate() - n.GetCost()))) { m_pBestIntermediateNode = &n; } /* check new node against open list */ Node *openNode = m_nodes.FindOpenNode(n.GetKey()); - if (openNode != NULL) { + if (openNode != nullptr) { /* another node exists with the same key in the open list * is it better than new one? */ if (n.GetCostEstimate() < openNode->GetCostEstimate()) { @@ -290,7 +290,7 @@ public: /* check new node against closed list */ Node *closedNode = m_nodes.FindClosedNode(n.GetKey()); - if (closedNode != NULL) { + if (closedNode != nullptr) { /* another node exists with the same key in the closed list * is it better than new one? */ int node_est = n.GetCostEstimate(); diff --git a/src/pathfinder/yapf/yapf_common.hpp b/src/pathfinder/yapf/yapf_common.hpp --- a/src/pathfinder/yapf/yapf_common.hpp +++ b/src/pathfinder/yapf/yapf_common.hpp @@ -46,7 +46,7 @@ public: for (TrackdirBits tdb = m_orgTrackdirs; tdb != TRACKDIR_BIT_NONE; tdb = KillFirstBit(tdb)) { Trackdir td = (Trackdir)FindFirstBit2x64(tdb); Node &n1 = Yapf().CreateNewNode(); - n1.Set(NULL, m_orgTile, td, is_choice); + n1.Set(nullptr, m_orgTile, td, is_choice); Yapf().AddStartupNode(n1); } } @@ -92,12 +92,12 @@ public: { if (m_orgTile != INVALID_TILE && m_orgTd != INVALID_TRACKDIR) { Node &n1 = Yapf().CreateNewNode(); - n1.Set(NULL, m_orgTile, m_orgTd, false); + n1.Set(nullptr, m_orgTile, m_orgTd, false); Yapf().AddStartupNode(n1); } if (m_revTile != INVALID_TILE && m_revTd != INVALID_TRACKDIR) { Node &n2 = Yapf().CreateNewNode(); - n2.Set(NULL, m_revTile, m_revTd, false); + n2.Set(nullptr, m_revTile, m_revTd, false); n2.m_cost = m_reverse_penalty; Yapf().AddStartupNode(n2); } diff --git a/src/pathfinder/yapf/yapf_costcache.hpp b/src/pathfinder/yapf/yapf_costcache.hpp --- a/src/pathfinder/yapf/yapf_costcache.hpp +++ b/src/pathfinder/yapf/yapf_costcache.hpp @@ -143,7 +143,7 @@ struct CSegmentCostCacheT : public CSegm inline Tsegment& Get(Key &key, bool *found) { Tsegment *item = m_map.Find(key); - if (item == NULL) { + if (item == nullptr) { *found = false; item = new (m_heap.Append()) Tsegment(key); m_map.Push(*item); diff --git a/src/pathfinder/yapf/yapf_costrail.hpp b/src/pathfinder/yapf/yapf_costrail.hpp --- a/src/pathfinder/yapf/yapf_costrail.hpp +++ b/src/pathfinder/yapf/yapf_costrail.hpp @@ -251,7 +251,7 @@ public: { int cost = 0; const Train *v = Yapf().GetVehicle(); - assert(v != NULL); + assert(v != nullptr); assert(v->type == VEH_TRAIN); assert(v->gcache.cached_total_length != 0); int missing_platform_length = CeilDiv(v->gcache.cached_total_length, TILE_SIZE) - platform_length; @@ -285,7 +285,7 @@ public: CPerfStart perf_cost(Yapf().m_perf_cost); /* Does the node have some parent node? */ - bool has_parent = (n.m_parent != NULL); + bool has_parent = (n.m_parent != nullptr); /* Do we already have a cached segment? */ CachedData &segment = *n.m_segment; @@ -606,7 +606,7 @@ no_entry_cost: // jump here at the begin /* Station platform-length penalty. */ if ((end_segment_reason & ESRB_STATION) != ESRB_NONE) { const BaseStation *st = BaseStation::GetByTile(n.GetLastTile()); - assert(st != NULL); + assert(st != nullptr); uint platform_length = st->GetPlatformLength(n.GetLastTile(), ReverseDiagDir(TrackdirToExitdir(n.GetLastTrackdir()))); /* Reduce the extra cost caused by passing-station penalty (each station receives it in the segment cost). */ extra_cost -= Yapf().PfGetSettings().rail_station_penalty * platform_length; @@ -624,7 +624,7 @@ no_entry_cost: // jump here at the begin inline bool CanUseGlobalCache(Node &n) const { return !m_disable_cache - && (n.m_parent != NULL) + && (n.m_parent != nullptr) && (n.m_parent->m_num_signals_passed >= m_sig_look_ahead_costs.Size()); } diff --git a/src/pathfinder/yapf/yapf_node.hpp b/src/pathfinder/yapf/yapf_node.hpp --- a/src/pathfinder/yapf/yapf_node.hpp +++ b/src/pathfinder/yapf/yapf_node.hpp @@ -72,7 +72,7 @@ struct CYapfNodeT { inline void Set(Node *parent, TileIndex tile, Trackdir td, bool is_choice) { m_key.Set(tile, td); - m_hash_next = NULL; + m_hash_next = nullptr; m_parent = parent; m_cost = 0; m_estimate = 0; diff --git a/src/pathfinder/yapf/yapf_node_rail.hpp b/src/pathfinder/yapf/yapf_node_rail.hpp --- a/src/pathfinder/yapf/yapf_node_rail.hpp +++ b/src/pathfinder/yapf/yapf_node_rail.hpp @@ -83,7 +83,7 @@ struct CYapfRailSegment , m_last_signal_tile(INVALID_TILE) , m_last_signal_td(INVALID_TRACKDIR) , m_end_segment_reason(ESRB_NONE) - , m_hash_next(NULL) + , m_hash_next(nullptr) {} inline const Key& GetKey() const @@ -142,8 +142,8 @@ struct CYapfRailNodeT inline void Set(CYapfRailNodeT *parent, TileIndex tile, Trackdir td, bool is_choice) { base::Set(parent, tile, td, is_choice); - m_segment = NULL; - if (parent == NULL) { + m_segment = nullptr; + if (parent == nullptr) { m_num_signals_passed = 0; flags_u.m_inherited_flags = 0; m_last_red_signal_type = SIGTYPE_NORMAL; @@ -169,19 +169,19 @@ struct CYapfRailNodeT inline TileIndex GetLastTile() const { - assert(m_segment != NULL); + assert(m_segment != nullptr); return m_segment->m_last_tile; } inline Trackdir GetLastTrackdir() const { - assert(m_segment != NULL); + assert(m_segment != nullptr); return m_segment->m_last_td; } inline void SetLastTileTrackdir(TileIndex tile, Trackdir td) { - assert(m_segment != NULL); + assert(m_segment != nullptr); m_segment->m_last_tile = tile; m_segment->m_last_td = td; } diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -28,8 +28,8 @@ template void DumpState(T pf2.DumpBase(dmp2); FILE *f1 = fopen("yapf1.txt", "wt"); FILE *f2 = fopen("yapf2.txt", "wt"); - assert(f1 != NULL); - assert(f2 != NULL); + assert(f1 != nullptr); + assert(f2 != nullptr); fwrite(dmp1.m_out.Data(), 1, dmp1.m_out.Size(), f1); fwrite(dmp2.m_out.Data(), 1, dmp2.m_out.Size(), f2); fclose(f1); @@ -84,7 +84,7 @@ private: tile = TILE_ADD(tile, diff); } while (IsCompatibleTrainStationTile(tile, start) && tile != m_origin_tile); - TriggerStationRandomisation(NULL, start, SRT_PATH_RESERVATION); + TriggerStationRandomisation(nullptr, start, SRT_PATH_RESERVATION); return true; } @@ -138,7 +138,7 @@ public: /** Check the node for a possible reservation target. */ inline void FindSafePositionOnNode(Node *node) { - assert(node->m_parent != NULL); + assert(node->m_parent != nullptr); /* We will never pass more than two signals, no need to check for a safe tile. */ if (node->m_parent->m_num_signals_passed >= 2) return; @@ -154,7 +154,7 @@ public: m_res_fail_tile = INVALID_TILE; m_origin_tile = origin; - if (target != NULL) { + if (target != nullptr) { target->tile = m_res_dest; target->trackdir = m_res_dest_td; target->okay = false; @@ -163,7 +163,7 @@ public: /* Don't bother if the target is reserved. */ if (!IsWaitingPositionFree(Yapf().GetVehicle(), m_res_dest, m_res_dest_td)) return false; - for (Node *node = m_res_node; node->m_parent != NULL; node = node->m_parent) { + for (Node *node = m_res_node; node->m_parent != nullptr; node = node->m_parent) { node->IterateTiles(Yapf().GetVehicle(), Yapf(), *this, &CYapfReserveTrack::ReserveSingleTrack); if (m_res_fail_tile != INVALID_TILE) { /* Reservation failed, undo. */ @@ -173,13 +173,13 @@ public: /* If this is the node that failed, stop at the failed tile. */ m_res_fail_tile = fail_node == node ? stop_tile : INVALID_TILE; fail_node->IterateTiles(Yapf().GetVehicle(), Yapf(), *this, &CYapfReserveTrack::UnreserveSingleTrack); - } while (fail_node != node && (fail_node = fail_node->m_parent) != NULL); + } while (fail_node != node && (fail_node = fail_node->m_parent) != nullptr); return false; } } - if (target != NULL) target->okay = true; + if (target != nullptr) target->okay = true; if (Yapf().CanUseGlobalCache(*m_res_node)) { YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK); @@ -270,7 +270,7 @@ public: /* walk through the path back to the origin */ Node *pNode = n; - while (pNode->m_parent != NULL) { + while (pNode->m_parent != nullptr) { pNode = pNode->m_parent; } @@ -351,15 +351,15 @@ public: this->SetReservationTarget(pNode, pNode->GetLastTile(), pNode->GetLastTrackdir()); /* Walk through the path back to the origin. */ - Node *pPrev = NULL; - while (pNode->m_parent != NULL) { + Node *pPrev = nullptr; + while (pNode->m_parent != nullptr) { pPrev = pNode; pNode = pNode->m_parent; this->FindSafePositionOnNode(pPrev); } - return dont_reserve || this->TryReservePath(NULL, pNode->GetLastTile()); + return dont_reserve || this->TryReservePath(nullptr, pNode->GetLastTile()); } }; @@ -408,7 +408,7 @@ public: if (_debug_desync_level < 2) { result1 = pf1.ChooseRailTrack(v, tile, enterdir, tracks, path_found, reserve_track, target); } else { - result1 = pf1.ChooseRailTrack(v, tile, enterdir, tracks, path_found, false, NULL); + result1 = pf1.ChooseRailTrack(v, tile, enterdir, tracks, path_found, false, nullptr); Tpf pf2; pf2.DisableCache(true); Trackdir result2 = pf2.ChooseRailTrack(v, tile, enterdir, tracks, path_found, reserve_track, target); @@ -423,7 +423,7 @@ public: inline Trackdir ChooseRailTrack(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool reserve_track, PBSTileInfo *target) { - if (target != NULL) target->tile = INVALID_TILE; + if (target != nullptr) target->tile = INVALID_TILE; /* set origin and destination nodes */ PBSTileInfo origin = FollowTrainReservation(v); @@ -436,14 +436,14 @@ public: /* if path not found - return INVALID_TRACKDIR */ Trackdir next_trackdir = INVALID_TRACKDIR; Node *pNode = Yapf().GetBestNode(); - if (pNode != NULL) { + if (pNode != nullptr) { /* reserve till end of path */ this->SetReservationTarget(pNode, pNode->GetLastTile(), pNode->GetLastTrackdir()); /* path was found or at least suggested * walk through the path back to the origin */ - Node *pPrev = NULL; - while (pNode->m_parent != NULL) { + Node *pPrev = nullptr; + while (pNode->m_parent != nullptr) { pPrev = pNode; pNode = pNode->m_parent; @@ -494,7 +494,7 @@ public: /* path was found * walk through the path back to the origin */ Node *pNode = Yapf().GetBestNode(); - while (pNode->m_parent != NULL) { + while (pNode->m_parent != nullptr) { pNode = pNode->m_parent; } diff --git a/src/pathfinder/yapf/yapf_road.cpp b/src/pathfinder/yapf/yapf_road.cpp --- a/src/pathfinder/yapf/yapf_road.cpp +++ b/src/pathfinder/yapf/yapf_road.cpp @@ -118,7 +118,7 @@ public: /* start at n.m_key.m_tile / n.m_key.m_td and walk to the end of segment */ TileIndex tile = n.m_key.m_tile; Trackdir trackdir = n.m_key.m_td; - int parent_cost = (n.m_parent != NULL) ? n.m_parent->m_cost : 0; + int parent_cost = (n.m_parent != nullptr) ? n.m_parent->m_cost : 0; for (;;) { /* base tile cost depending on distance between edges */ @@ -381,13 +381,13 @@ public: /* if path not found - return INVALID_TRACKDIR */ Trackdir next_trackdir = INVALID_TRACKDIR; Node *pNode = Yapf().GetBestNode(); - if (pNode != NULL) { + if (pNode != nullptr) { uint steps = 0; - for (Node *n = pNode; n->m_parent != NULL; n = n->m_parent) steps++; + for (Node *n = pNode; n->m_parent != nullptr; n = n->m_parent) steps++; /* path was found or at least suggested * walk through the path back to its origin */ - while (pNode->m_parent != NULL) { + while (pNode->m_parent != nullptr) { steps--; if (pNode->GetIsChoice() && steps < YAPF_ROADVEH_PATH_CACHE_SEGMENTS) { TrackdirByte td; @@ -436,7 +436,7 @@ public: if (!Yapf().FindPath(v)) return dist; Node *pNode = Yapf().GetBestNode(); - if (pNode != NULL) { + if (pNode != nullptr) { /* path was found * get the path cost estimate */ dist = pNode->GetCostEstimate(); diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -89,13 +89,13 @@ public: Trackdir next_trackdir = INVALID_TRACKDIR; // this would mean "path not found" Node *pNode = pf.GetBestNode(); - if (pNode != NULL) { + if (pNode != nullptr) { uint steps = 0; - for (Node *n = pNode; n->m_parent != NULL; n = n->m_parent) steps++; + for (Node *n = pNode; n->m_parent != nullptr; n = n->m_parent) steps++; /* walk through the path back to the origin */ - Node *pPrevNode = NULL; - while (pNode->m_parent != NULL) { + Node *pPrevNode = nullptr; + while (pNode->m_parent != nullptr) { steps--; if (steps > 0 && steps < YAPF_SHIP_PATH_CACHE_LENGTH) { TrackdirByte td; @@ -138,11 +138,11 @@ public: if (!pf.FindPath(v)) return false; Node *pNode = pf.GetBestNode(); - if (pNode == NULL) return false; + if (pNode == nullptr) return false; /* path was found * walk through the path back to the origin */ - while (pNode->m_parent != NULL) { + while (pNode->m_parent != nullptr) { pNode = pNode->m_parent; } diff --git a/src/pbs.cpp b/src/pbs.cpp --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -116,7 +116,7 @@ bool TryReserveRailTrack(TileIndex tile, case MP_STATION: if (HasStationRail(tile) && !HasStationReservation(tile)) { SetRailStationReservation(tile, true); - if (trigger_stations && IsRailStation(tile)) TriggerStationRandomisation(NULL, tile, SRT_PATH_RESERVATION); + if (trigger_stations && IsRailStation(tile)) TriggerStationRandomisation(nullptr, tile, SRT_PATH_RESERVATION); MarkTileDirtyByTile(tile); // some GRFs need redraw after reserving track return true; } @@ -258,8 +258,8 @@ struct FindTrainOnTrackInfo { PBSTileInfo res; ///< Information about the track. Train *best; ///< The currently "best" vehicle we have found. - /** Init the best location to NULL always! */ - FindTrainOnTrackInfo() : best(NULL) {} + /** Init the best location to nullptr always! */ + FindTrainOnTrackInfo() : best(nullptr) {} }; /** Callback for Has/FindVehicleOnPos to find a train on a specific track. */ @@ -267,18 +267,18 @@ static Vehicle *FindTrainOnTrackEnum(Veh { FindTrainOnTrackInfo *info = (FindTrainOnTrackInfo *)data; - if (v->type != VEH_TRAIN || (v->vehstatus & VS_CRASHED)) return NULL; + if (v->type != VEH_TRAIN || (v->vehstatus & VS_CRASHED)) return nullptr; Train *t = Train::From(v); if (t->track == TRACK_BIT_WORMHOLE || HasBit((TrackBits)t->track, TrackdirToTrack(info->res.trackdir))) { t = t->First(); /* ALWAYS return the lowest ID (anti-desync!) */ - if (info->best == NULL || t->index < info->best->index) info->best = t; + if (info->best == nullptr || t->index < info->best->index) info->best = t; return t; } - return NULL; + return nullptr; } /** @@ -300,24 +300,24 @@ PBSTileInfo FollowTrainReservation(const FindTrainOnTrackInfo ftoti; ftoti.res = FollowReservation(v->owner, GetRailTypeInfo(v->railtype)->compatible_railtypes, tile, trackdir); ftoti.res.okay = IsSafeWaitingPosition(v, ftoti.res.tile, ftoti.res.trackdir, true, _settings_game.pf.forbid_90_deg); - if (train_on_res != NULL) { + if (train_on_res != nullptr) { FindVehicleOnPos(ftoti.res.tile, &ftoti, FindTrainOnTrackEnum); - if (ftoti.best != NULL) *train_on_res = ftoti.best->First(); - if (*train_on_res == NULL && IsRailStationTile(ftoti.res.tile)) { + if (ftoti.best != nullptr) *train_on_res = ftoti.best->First(); + if (*train_on_res == nullptr && IsRailStationTile(ftoti.res.tile)) { /* The target tile is a rail station. The track follower * has stopped on the last platform tile where we haven't * found a train. Also check all previous platform tiles * for a possible train. */ TileIndexDiff diff = TileOffsByDiagDir(TrackdirToExitdir(ReverseTrackdir(ftoti.res.trackdir))); - for (TileIndex st_tile = ftoti.res.tile + diff; *train_on_res == NULL && IsCompatibleTrainStationTile(st_tile, ftoti.res.tile); st_tile += diff) { + for (TileIndex st_tile = ftoti.res.tile + diff; *train_on_res == nullptr && IsCompatibleTrainStationTile(st_tile, ftoti.res.tile); st_tile += diff) { FindVehicleOnPos(st_tile, &ftoti, FindTrainOnTrackEnum); - if (ftoti.best != NULL) *train_on_res = ftoti.best->First(); + if (ftoti.best != nullptr) *train_on_res = ftoti.best->First(); } } - if (*train_on_res == NULL && IsTileType(ftoti.res.tile, MP_TUNNELBRIDGE)) { + if (*train_on_res == nullptr && IsTileType(ftoti.res.tile, MP_TUNNELBRIDGE)) { /* The target tile is a bridge/tunnel, also check the other end tile. */ FindVehicleOnPos(GetOtherTunnelBridgeEnd(ftoti.res.tile), &ftoti, FindTrainOnTrackEnum); - if (ftoti.best != NULL) *train_on_res = ftoti.best->First(); + if (ftoti.best != nullptr) *train_on_res = ftoti.best->First(); } } return ftoti.res; @@ -328,7 +328,7 @@ PBSTileInfo FollowTrainReservation(const * * @param tile A tile on the path. * @param track A reserved track on the tile. - * @return The vehicle holding the reservation or NULL if the path is stray. + * @return The vehicle holding the reservation or nullptr if the path is stray. */ Train *GetTrainForReservation(TileIndex tile, Track track) { @@ -349,25 +349,25 @@ Train *GetTrainForReservation(TileIndex ftoti.res = FollowReservation(GetTileOwner(tile), rts, tile, trackdir, true); FindVehicleOnPos(ftoti.res.tile, &ftoti, FindTrainOnTrackEnum); - if (ftoti.best != NULL) return ftoti.best; + if (ftoti.best != nullptr) return ftoti.best; /* Special case for stations: check the whole platform for a vehicle. */ if (IsRailStationTile(ftoti.res.tile)) { TileIndexDiff diff = TileOffsByDiagDir(TrackdirToExitdir(ReverseTrackdir(ftoti.res.trackdir))); for (TileIndex st_tile = ftoti.res.tile + diff; IsCompatibleTrainStationTile(st_tile, ftoti.res.tile); st_tile += diff) { FindVehicleOnPos(st_tile, &ftoti, FindTrainOnTrackEnum); - if (ftoti.best != NULL) return ftoti.best; + if (ftoti.best != nullptr) return ftoti.best; } } /* Special case for bridges/tunnels: check the other end as well. */ if (IsTileType(ftoti.res.tile, MP_TUNNELBRIDGE)) { FindVehicleOnPos(GetOtherTunnelBridgeEnd(ftoti.res.tile), &ftoti, FindTrainOnTrackEnum); - if (ftoti.best != NULL) return ftoti.best; + if (ftoti.best != nullptr) return ftoti.best; } } - return NULL; + return nullptr; } /** diff --git a/src/pbs.h b/src/pbs.h --- a/src/pbs.h +++ b/src/pbs.h @@ -44,7 +44,7 @@ struct PBSTileInfo { PBSTileInfo(TileIndex _t, Trackdir _td, bool _okay) : tile(_t), trackdir(_td), okay(_okay) {} }; -PBSTileInfo FollowTrainReservation(const Train *v, Vehicle **train_on_res = NULL); +PBSTileInfo FollowTrainReservation(const Train *v, Vehicle **train_on_res = nullptr); bool IsSafeWaitingPosition(const Train *v, TileIndex tile, Trackdir trackdir, bool include_line_end, bool forbid_90deg = false); bool IsWaitingPositionFree(const Train *v, TileIndex tile, Trackdir trackdir, bool forbid_90deg = false); diff --git a/src/querystring_gui.h b/src/querystring_gui.h --- a/src/querystring_gui.h +++ b/src/querystring_gui.h @@ -37,7 +37,7 @@ struct QueryString { * @param size Maximum size in bytes. * @param chars Maximum size in chars. */ - QueryString(uint16 size, uint16 chars = UINT16_MAX) : ok_button(ACTION_NOTHING), cancel_button(ACTION_DESELECT), text(size, chars), orig(NULL) + QueryString(uint16 size, uint16 chars = UINT16_MAX) : ok_button(ACTION_NOTHING), cancel_button(ACTION_DESELECT), text(size, chars), orig(nullptr) { } @@ -79,11 +79,11 @@ public: /** * Get the currently marked text. * @param[out] length Length of the marked text. - * @return Begining of the marked area or NULL if no text is marked. + * @return Begining of the marked area or nullptr if no text is marked. */ const char *GetMarkedText(size_t *length) const { - if (this->text.markend == 0) return NULL; + if (this->text.markend == 0) return nullptr; *length = this->text.markend - this->text.markpos; return this->text.buf + this->text.markpos; diff --git a/src/rail.h b/src/rail.h --- a/src/rail.h +++ b/src/rail.h @@ -270,7 +270,7 @@ public: byte sorting_order; /** - * NewGRF providing the Action3 for the railtype. NULL if not available. + * NewGRF providing the Action3 for the railtype. nullptr if not available. */ const GRFFile *grffile[RTSG_END]; @@ -281,7 +281,7 @@ public: inline bool UsesOverlay() const { - return this->group[RTSG_GROUND] != NULL; + return this->group[RTSG_GROUND] != nullptr; } /** diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -622,7 +622,7 @@ CommandCost CmdRemoveSingleRail(TileInde * so do not call GetTileOwner(tile) in any case here */ Owner owner = INVALID_OWNER; - Train *v = NULL; + Train *v = nullptr; switch (GetTileType(tile)) { case MP_ROAD: { @@ -643,7 +643,7 @@ CommandCost CmdRemoveSingleRail(TileInde if (flags & DC_EXEC) { if (HasReservedTracks(tile, trackbit)) { v = GetTrainForReservation(tile, track); - if (v != NULL) FreeTrainTrackReservation(v); + if (v != nullptr) FreeTrainTrackReservation(v); } owner = GetTileOwner(tile); Company::Get(owner)->infrastructure.rail[GetRailType(tile)] -= LEVELCROSSING_TRACKBIT_FACTOR; @@ -681,7 +681,7 @@ CommandCost CmdRemoveSingleRail(TileInde if (flags & DC_EXEC) { if (HasReservedTracks(tile, trackbit)) { v = GetTrainForReservation(tile, track); - if (v != NULL) FreeTrainTrackReservation(v); + if (v != nullptr) FreeTrainTrackReservation(v); } owner = GetTileOwner(tile); @@ -736,7 +736,7 @@ CommandCost CmdRemoveSingleRail(TileInde YapfNotifyTrackLayoutChange(tile, track); } - if (v != NULL) TryPathReserve(v, true); + if (v != nullptr) TryPathReserve(v, true); } return cost; @@ -1095,13 +1095,13 @@ CommandCost CmdBuildSingleSignal(TileInd } if (flags & DC_EXEC) { - Train *v = NULL; + Train *v = nullptr; /* The new/changed signal could block our path. As this can lead to * stale reservations, we clear the path reservation here and try * to redo it later on. */ if (HasReservedTracks(tile, TrackToTrackBits(track))) { v = GetTrainForReservation(tile, track); - if (v != NULL) FreeTrainTrackReservation(v); + if (v != nullptr) FreeTrainTrackReservation(v); } if (!HasSignals(tile)) { @@ -1177,7 +1177,7 @@ CommandCost CmdBuildSingleSignal(TileInd MarkTileDirtyByTile(tile); AddTrackToSignalBuffer(tile, track, _current_company); YapfNotifyTrackLayoutChange(tile, track); - if (v != NULL) { + if (v != nullptr) { /* Extend the train's path if it's not stopped or loading, or not at a safe position. */ if (!(((v->vehstatus & VS_STOPPED) && v->cur_speed == 0) || v->current_order.IsType(OT_LOADING)) || !IsSafeWaitingPosition(v, v->tile, v->GetVehicleTrackdir(), true, _settings_game.pf.forbid_90_deg)) { @@ -1467,13 +1467,13 @@ CommandCost CmdRemoveSingleSignal(TileIn /* Do it? */ if (flags & DC_EXEC) { - Train *v = NULL; + Train *v = nullptr; if (HasReservedTracks(tile, TrackToTrackBits(track))) { v = GetTrainForReservation(tile, track); } else if (IsPbsSignal(GetSignalType(tile, track))) { /* PBS signal, might be the end of a path reservation. */ Trackdir td = TrackToTrackdir(track); - for (int i = 0; v == NULL && i < 2; i++, td = ReverseTrackdir(td)) { + for (int i = 0; v == nullptr && i < 2; i++, td = ReverseTrackdir(td)) { /* Only test the active signal side. */ if (!HasSignalOnTrackdir(tile, ReverseTrackdir(td))) continue; TileIndex next = TileAddByDiagDir(tile, TrackdirToExitdir(td)); @@ -1497,7 +1497,7 @@ CommandCost CmdRemoveSingleSignal(TileIn AddTrackToSignalBuffer(tile, track, GetTileOwner(tile)); YapfNotifyTrackLayoutChange(tile, track); - if (v != NULL) TryPathReserve(v, false); + if (v != nullptr) TryPathReserve(v, false); MarkTileDirtyByTile(tile); } @@ -1531,12 +1531,12 @@ CommandCost CmdRemoveSignalTrack(TileInd /** Update power of train under which is the railtype being converted */ static Vehicle *UpdateTrainPowerProc(Vehicle *v, void *data) { - if (v->type != VEH_TRAIN) return NULL; + if (v->type != VEH_TRAIN) return nullptr; TrainList *affected_trains = static_cast(data); include(*affected_trains, Train::From(v)->First()); - return NULL; + return nullptr; } /** @@ -1620,7 +1620,7 @@ CommandCost CmdConvertRail(TileIndex til Track track; while ((track = RemoveFirstTrack(&reserved)) != INVALID_TRACK) { Train *v = GetTrainForReservation(tile, track); - if (v != NULL && !HasPowerOnRail(v->railtype, totype)) { + if (v != nullptr && !HasPowerOnRail(v->railtype, totype)) { /* No power on new rail type, reroute. */ FreeTrainTrackReservation(v); vehicles_affected.push_back(v); @@ -1702,7 +1702,7 @@ CommandCost CmdConvertRail(TileIndex til Track track = DiagDirToDiagTrack(GetTunnelBridgeDirection(tile)); if (HasTunnelBridgeReservation(tile)) { Train *v = GetTrainForReservation(tile, track); - if (v != NULL && !HasPowerOnRail(v->railtype, totype)) { + if (v != nullptr && !HasPowerOnRail(v->railtype, totype)) { /* No power on new rail type, reroute. */ FreeTrainTrackReservation(v); vehicles_affected.push_back(v); @@ -1777,11 +1777,11 @@ static CommandCost RemoveTrainDepot(Tile /* read variables before the depot is removed */ DiagDirection dir = GetRailDepotDirection(tile); Owner owner = GetTileOwner(tile); - Train *v = NULL; + Train *v = nullptr; if (HasDepotReservation(tile)) { v = GetTrainForReservation(tile, DiagDirToDiagTrack(dir)); - if (v != NULL) FreeTrainTrackReservation(v); + if (v != nullptr) FreeTrainTrackReservation(v); } Company::Get(owner)->infrastructure.rail[GetRailType(tile)]--; @@ -1791,7 +1791,7 @@ static CommandCost RemoveTrainDepot(Tile DoClearSquare(tile); AddSideToSignalBuffer(tile, dir, owner); YapfNotifyTrackLayoutChange(tile, DiagDirToDiagTrack(dir)); - if (v != NULL) TryPathReserve(v, true); + if (v != nullptr) TryPathReserve(v, true); } return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_CLEAR_DEPOT_TRAIN]); @@ -2064,7 +2064,7 @@ static const SubSprite _halftile_sub_spr static inline void DrawTrackSprite(SpriteID sprite, PaletteID pal, const TileInfo *ti, Slope s) { - DrawGroundSprite(sprite, pal, NULL, 0, (ti->tileh & s) ? -8 : 0); + DrawGroundSprite(sprite, pal, nullptr, 0, (ti->tileh & s) ? -8 : 0); } static void DrawTrackBitsOverlay(TileInfo *ti, TrackBits track, const RailtypeInfo *rti) @@ -2258,7 +2258,7 @@ static void DrawTrackBits(TileInfo *ti, SpriteID image; PaletteID pal = PAL_NONE; - const SubSprite *sub = NULL; + const SubSprite *sub = nullptr; bool junction = false; /* Select the sprite to use. */ @@ -2355,10 +2355,10 @@ static void DrawTrackBits(TileInfo *ti, DrawGroundSprite(_track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.single_sloped - 20, PALETTE_CRASH); } } - if (pbs & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n, PALETTE_CRASH, NULL, 0, ti->tileh & SLOPE_N ? -(int)TILE_HEIGHT : 0); - if (pbs & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s, PALETTE_CRASH, NULL, 0, ti->tileh & SLOPE_S ? -(int)TILE_HEIGHT : 0); - if (pbs & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w, PALETTE_CRASH, NULL, 0, ti->tileh & SLOPE_W ? -(int)TILE_HEIGHT : 0); - if (pbs & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e, PALETTE_CRASH, NULL, 0, ti->tileh & SLOPE_E ? -(int)TILE_HEIGHT : 0); + if (pbs & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n, PALETTE_CRASH, nullptr, 0, ti->tileh & SLOPE_N ? -(int)TILE_HEIGHT : 0); + if (pbs & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s, PALETTE_CRASH, nullptr, 0, ti->tileh & SLOPE_S ? -(int)TILE_HEIGHT : 0); + if (pbs & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w, PALETTE_CRASH, nullptr, 0, ti->tileh & SLOPE_W ? -(int)TILE_HEIGHT : 0); + if (pbs & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e, PALETTE_CRASH, nullptr, 0, ti->tileh & SLOPE_E ? -(int)TILE_HEIGHT : 0); } if (IsValidCorner(halftile_corner)) { @@ -2378,7 +2378,7 @@ static void DrawTrackBits(TileInfo *ti, if (_game_mode != GM_MENU && _settings_client.gui.show_track_reservation && HasReservedTracks(ti->tile, CornerToTrackBits(halftile_corner))) { static const byte _corner_to_track_sprite[] = {3, 1, 2, 0}; - DrawGroundSprite(_corner_to_track_sprite[halftile_corner] + rti->base_sprites.single_n, PALETTE_CRASH, NULL, 0, -(int)TILE_HEIGHT); + DrawGroundSprite(_corner_to_track_sprite[halftile_corner] + rti->base_sprites.single_n, PALETTE_CRASH, nullptr, 0, -(int)TILE_HEIGHT); } } } @@ -2958,7 +2958,7 @@ static VehicleEnterTileStatus VehicleEnt if (fract_coord_leave == fract_coord) { /* Leave the depot. */ - if ((v = v->Next()) != NULL) { + if ((v = v->Next()) != nullptr) { v->vehstatus &= ~VS_HIDDEN; v->track = (DiagDirToAxis(dir) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y); } @@ -2969,7 +2969,7 @@ static VehicleEnterTileStatus VehicleEnt v->track = TRACK_BIT_DEPOT, v->vehstatus |= VS_HIDDEN; v->direction = ReverseDir(v->direction); - if (v->Next() == NULL) VehicleEnterDepot(v->First()); + if (v->Next() == nullptr) VehicleEnterDepot(v->First()); v->tile = tile; InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); @@ -3034,7 +3034,7 @@ static CommandCost TestAutoslopeOnRailTi */ static Vehicle *EnsureNoShipProc(Vehicle *v, void *data) { - return v->type == VEH_SHIP ? v : NULL; + return v->type == VEH_SHIP ? v : nullptr; } static CommandCost TerraformTile_Track(TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new) @@ -3047,7 +3047,7 @@ static CommandCost TerraformTile_Track(T bool was_water = (GetRailGroundType(tile) == RAIL_GROUND_WATER && IsSlopeWithOneCornerRaised(tileh_old)); /* Allow clearing the water only if there is no ship */ - if (was_water && HasVehicleOnPos(tile, NULL, &EnsureNoShipProc)) return_cmd_error(STR_ERROR_SHIP_IN_THE_WAY); + if (was_water && HasVehicleOnPos(tile, nullptr, &EnsureNoShipProc)) return_cmd_error(STR_ERROR_SHIP_IN_THE_WAY); /* First test autoslope. However if it succeeds we still have to test the rest, because non-autoslope terraforming is cheaper. */ CommandCost autoslope_result = TestAutoslopeOnRailTile(tile, flags, z_old, tileh_old, z_new, tileh_new, rail_bits); @@ -3090,14 +3090,14 @@ extern const TileTypeProcs _tile_type_ra DrawTile_Track, // draw_tile_proc GetSlopePixelZ_Track, // get_slope_z_proc ClearTile_Track, // clear_tile_proc - NULL, // add_accepted_cargo_proc + nullptr, // add_accepted_cargo_proc GetTileDesc_Track, // get_tile_desc_proc GetTileTrackStatus_Track, // get_tile_track_status_proc ClickTile_Track, // click_tile_proc - NULL, // animate_tile_proc + nullptr, // animate_tile_proc TileLoop_Track, // tile_loop_proc ChangeTileOwner_Track, // change_tile_owner_proc - NULL, // add_produced_cargo_proc + nullptr, // add_produced_cargo_proc VehicleEnter_Track, // vehicle_enter_tile_proc GetFoundation_Track, // get_foundation_proc TerraformTile_Track, // terraform_tile_proc diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -78,9 +78,9 @@ static void ShowSignalBuilder(Window *pa */ static bool IsStationAvailable(const StationSpec *statspec) { - if (statspec == NULL || !HasBit(statspec->callback_mask, CBM_STATION_AVAIL)) return true; + if (statspec == nullptr || !HasBit(statspec->callback_mask, CBM_STATION_AVAIL)) return true; - uint16 cb_res = GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE); + uint16 cb_res = GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, nullptr, INVALID_TILE); if (cb_res == CALLBACK_FAILED) return true; return Convert8bitBooleanCallback(statspec->grf_prop.grffile, CBID_STATION_AVAILABILITY, cb_res); @@ -234,7 +234,7 @@ static void GenericPlaceSignals(TileInde /* various bitstuffed elements for CmdBuildSingleSignal() */ uint32 p1 = track; - if (w != NULL) { + if (w != nullptr) { /* signal GUI is used */ SB(p1, 3, 1, _ctrl_pressed); SB(p1, 4, 1, _cur_signal_variant); @@ -250,7 +250,7 @@ static void GenericPlaceSignals(TileInde } DoCommandP(tile, p1, 0, CMD_BUILD_SIGNALS | - CMD_MSG((w != NULL && _convert_signal_button) ? STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE : STR_ERROR_CAN_T_BUILD_SIGNALS_HERE), + CMD_MSG((w != nullptr && _convert_signal_button) ? STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE : STR_ERROR_CAN_T_BUILD_SIGNALS_HERE), CcPlaySound_SPLAT_RAIL); } } @@ -388,7 +388,7 @@ static void HandleAutoSignalPlacement() const Window *w = FindWindowById(WC_BUILD_SIGNAL, 0); - if (w != NULL) { + if (w != nullptr) { /* signal GUI is used */ SB(p2, 3, 1, 0); SB(p2, 4, 1, _cur_signal_variant); @@ -683,7 +683,7 @@ struct BuildRailToolbarWindow : Window { void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { /* no dragging if you have pressed the convert button */ - if (FindWindowById(WC_BUILD_SIGNAL, 0) != NULL && _convert_signal_button && this->IsWidgetLowered(WID_RAT_BUILD_SIGNALS)) return; + if (FindWindowById(WC_BUILD_SIGNAL, 0) != nullptr && _convert_signal_button && this->IsWidgetLowered(WID_RAT_BUILD_SIGNALS)) return; VpSelectTilesWithMethod(pt.x, pt.y, select_method); } @@ -781,7 +781,7 @@ static EventState RailToolbarGlobalHotke if (_game_mode != GM_NORMAL || !CanBuildVehicleInfrastructure(VEH_TRAIN)) return ES_NOT_HANDLED; extern RailType _last_built_railtype; Window *w = ShowBuildRailToolbar(_last_built_railtype); - if (w == NULL) return ES_NOT_HANDLED; + if (w == nullptr) return ES_NOT_HANDLED; return w->OnHotkey(hotkey); } @@ -862,12 +862,12 @@ static WindowDesc _build_rail_desc( * If the terraform toolbar is linked to the toolbar, that window is also opened. * * @param railtype Rail type to open the window for - * @return newly opened rail toolbar, or NULL if the toolbar could not be opened. + * @return newly opened rail toolbar, or nullptr if the toolbar could not be opened. */ Window *ShowBuildRailToolbar(RailType railtype) { - if (!Company::IsValidID(_local_company)) return NULL; - if (!ValParamRailtype(railtype)) return NULL; + if (!Company::IsValidID(_local_company)) return nullptr; + if (!ValParamRailtype(railtype)) return nullptr; DeleteWindowByClass(WC_BUILD_TOOLBAR); _cur_railtype = railtype; @@ -907,7 +907,7 @@ private: */ void CheckSelectedSize(const StationSpec *statspec) { - if (statspec == NULL || _settings_client.gui.station_dragdrop) return; + if (statspec == nullptr || _settings_client.gui.station_dragdrop) return; /* If current number of tracks is not allowed, make it as big as possible */ if (HasBit(statspec->disallowed_platforms, _settings_client.gui.station_numtracks - 1)) { @@ -937,7 +937,7 @@ public: BuildRailStationWindow(WindowDesc *desc, Window *parent, bool newstation) : PickerWindowBase(desc, parent) { this->coverage_height = 2 * FONT_HEIGHT_NORMAL + 3 * WD_PAR_VSEP_NORMAL; - this->vscroll = NULL; + this->vscroll = nullptr; _railstation.newstations = newstation; this->CreateNestedTree(); @@ -970,7 +970,7 @@ public: * type is 'selected'. */ _railstation.station_class = STAT_CLASS_DFLT; _railstation.station_type = 0; - this->vscroll2 = NULL; + this->vscroll2 = nullptr; } if (newstation) { _railstation.station_count = StationClass::Get(_railstation.station_class)->GetSpecCount(); @@ -999,7 +999,7 @@ public: void OnPaint() override { bool newstations = _railstation.newstations; - const StationSpec *statspec = newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : NULL; + const StationSpec *statspec = newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; if (_settings_client.gui.station_dragdrop) { SetTileSelectSize(1, 1); @@ -1018,7 +1018,7 @@ public: for (uint bits = 0; bits < 7; bits++) { bool disable = bits >= _settings_game.station.station_spread; - if (statspec == NULL) { + if (statspec == nullptr) { this->SetWidgetDisabledState(bits + WID_BRAS_PLATFORM_NUM_1, disable); this->SetWidgetDisabledState(bits + WID_BRAS_PLATFORM_LEN_1, disable); } else { @@ -1078,7 +1078,7 @@ public: StationClass *stclass = StationClass::Get(statclass); for (uint16 j = 0; j < stclass->GetSpecCount(); j++) { const StationSpec *statspec = stclass->GetSpec(j); - SetDParam(0, (statspec != NULL && statspec->name != 0) ? statspec->name : STR_STATION_CLASS_DFLT); + SetDParam(0, (statspec != nullptr && statspec->name != 0) ? statspec->name : STR_STATION_CLASS_DFLT); d = maxdim(d, GetStringBoundingBox(str)); } } @@ -1180,7 +1180,7 @@ public: void OnResize() override { - if (this->vscroll != NULL) { // New stations available. + if (this->vscroll != nullptr) { // New stations available. this->vscroll->SetCapacityFromWidget(this, WID_BRAS_NEWST_LIST); } } @@ -1189,7 +1189,7 @@ public: { if (widget == WID_BRAS_SHOW_NEWST_TYPE) { const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type); - SetDParam(0, (statspec != NULL && statspec->name != 0) ? statspec->name : STR_STATION_CLASS_DFLT); + SetDParam(0, (statspec != nullptr && statspec->name != 0) ? statspec->name : STR_STATION_CLASS_DFLT); } } @@ -1221,8 +1221,8 @@ public: _settings_client.gui.station_dragdrop = false; - const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : NULL; - if (statspec != NULL && HasBit(statspec->disallowed_lengths, _settings_client.gui.station_platlength - 1)) { + const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; + if (statspec != nullptr && HasBit(statspec->disallowed_lengths, _settings_client.gui.station_platlength - 1)) { /* The previously selected number of platforms in invalid */ for (uint i = 0; i < 7; i++) { if (!HasBit(statspec->disallowed_lengths, i)) { @@ -1256,8 +1256,8 @@ public: _settings_client.gui.station_dragdrop = false; - const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : NULL; - if (statspec != NULL && HasBit(statspec->disallowed_platforms, _settings_client.gui.station_numtracks - 1)) { + const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; + if (statspec != nullptr && HasBit(statspec->disallowed_platforms, _settings_client.gui.station_numtracks - 1)) { /* The previously selected number of tracks in invalid */ for (uint i = 0; i < 7; i++) { if (!HasBit(statspec->disallowed_platforms, i)) { @@ -1282,8 +1282,8 @@ public: this->ToggleWidgetLoweredState(WID_BRAS_PLATFORM_DRAG_N_DROP); /* get the first allowed length/number of platforms */ - const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : NULL; - if (statspec != NULL && HasBit(statspec->disallowed_lengths, _settings_client.gui.station_platlength - 1)) { + const StationSpec *statspec = _railstation.newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : nullptr; + if (statspec != nullptr && HasBit(statspec->disallowed_lengths, _settings_client.gui.station_platlength - 1)) { for (uint i = 0; i < 7; i++) { if (!HasBit(statspec->disallowed_lengths, i)) { this->RaiseWidget(_settings_client.gui.station_platlength + WID_BRAS_PLATFORM_LEN_BEGIN); @@ -1292,7 +1292,7 @@ public: } } } - if (statspec != NULL && HasBit(statspec->disallowed_platforms, _settings_client.gui.station_numtracks - 1)) { + if (statspec != nullptr && HasBit(statspec->disallowed_platforms, _settings_client.gui.station_numtracks - 1)) { for (uint i = 0; i < 7; i++) { if (!HasBit(statspec->disallowed_platforms, i)) { this->RaiseWidget(_settings_client.gui.station_numtracks + WID_BRAS_PLATFORM_NUM_BEGIN); @@ -1598,7 +1598,7 @@ public: /* If 'remove' button of rail build toolbar is active, disable it. */ if (_remove_button_clicked) { Window *w = FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_RAIL); - if (w != NULL) ToggleRailButton_Remove(w); + if (w != nullptr) ToggleRailButton_Remove(w); } break; @@ -1768,7 +1768,7 @@ static const NWidgetPart _nested_build_d }; static WindowDesc _build_depot_desc( - WDP_AUTO, NULL, 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_build_depot_widgets, lengthof(_nested_build_depot_widgets) @@ -1896,7 +1896,7 @@ void ReinitGuiAfterToggleElrail(bool dis if (disable && _last_built_railtype == RAILTYPE_ELECTRIC) { _last_built_railtype = _cur_railtype = RAILTYPE_RAIL; BuildRailToolbarWindow *w = dynamic_cast(FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_RAIL)); - if (w != NULL) w->ModifyRailType(_cur_railtype); + if (w != nullptr) w->ModifyRailType(_cur_railtype); } MarkWholeScreenDirty(); } @@ -1943,7 +1943,7 @@ static void SetDefaultRailGui() _last_built_railtype = _cur_railtype = rt; BuildRailToolbarWindow *w = dynamic_cast(FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_RAIL)); - if (w != NULL) w->ModifyRailType(_cur_railtype); + if (w != nullptr) w->ModifyRailType(_cur_railtype); } /** @@ -1958,7 +1958,7 @@ bool ResetSignalVariant(int32 p) if (new_variant != _cur_signal_variant) { Window *w = FindWindowById(WC_BUILD_SIGNAL, 0); - if (w != NULL) { + if (w != nullptr) { w->SetDirty(); w->RaiseWidget((_cur_signal_variant == SIG_ELECTRIC ? WID_BS_ELECTRIC_NORM : WID_BS_SEMAPHORE_NORM) + _cur_signal_type); } diff --git a/src/road.cpp b/src/road.cpp --- a/src/road.cpp +++ b/src/road.cpp @@ -115,7 +115,7 @@ bool HasRoadTypesAvail(const CompanyID c avail_roadtypes = ROADTYPES_ROAD; } else { Company *c = Company::GetIfValid(company); - if (c == NULL) return false; + if (c == nullptr) return false; avail_roadtypes = (RoadTypes)c->avail_roadtypes | ROADTYPES_ROAD; // road is available for always for everybody } return (rts & ~avail_roadtypes) == 0; diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -136,7 +136,7 @@ CommandCost CheckAllowRemoveRoad(TileInd if (_cheats.magic_bulldozer.value) return CommandCost(); Town *t = ClosestTownFromTile(tile, UINT_MAX); - if (t == NULL) return CommandCost(); + if (t == nullptr) return CommandCost(); /* check if you're allowed to remove the street owned by a town * removal allowance depends on difficulty setting */ @@ -227,7 +227,7 @@ static CommandCost RemoveRoad(TileIndex cost.AddCost(len * 2 * _price[PR_CLEAR_ROAD]); if (flags & DC_EXEC) { Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { /* A full diagonal road tile has two road bits. */ c->infrastructure.road[rt] -= len * 2 * TUNNELBRIDGE_TRACKBIT_FACTOR; DirtyCompanyInfrastructureWindows(c->index); @@ -258,7 +258,7 @@ static CommandCost RemoveRoad(TileIndex cost.AddCost(_price[PR_CLEAR_ROAD] * 2); if (flags & DC_EXEC) { Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { /* A full diagonal road tile has two road bits. */ c->infrastructure.road[rt] -= 2; DirtyCompanyInfrastructureWindows(c->index); @@ -319,7 +319,7 @@ static CommandCost RemoveRoad(TileIndex } Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.road[rt] -= CountBits(pieces); DirtyCompanyInfrastructureWindows(c->index); } @@ -333,7 +333,7 @@ static CommandCost RemoveRoad(TileIndex if (rt == ROADTYPE_ROAD && IsRoadOwner(tile, ROADTYPE_ROAD, OWNER_TOWN)) { /* Update nearest-town index */ const Town *town = CalcClosestTownFromTile(tile); - SetTownIndex(tile, town == NULL ? INVALID_TOWN : town->index); + SetTownIndex(tile, town == nullptr ? INVALID_TOWN : town->index); } SetRoadBits(tile, ROAD_NONE, rt); SetRoadTypes(tile, rts); @@ -367,7 +367,7 @@ static CommandCost RemoveRoad(TileIndex if (flags & DC_EXEC) { Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { /* A full diagonal road tile has two road bits. */ c->infrastructure.road[rt] -= 2; DirtyCompanyInfrastructureWindows(c->index); @@ -384,7 +384,7 @@ static CommandCost RemoveRoad(TileIndex /* Update rail count for level crossings. The plain track should still be accounted * for, so only subtract the difference to the level crossing cost. */ c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.rail[GetRailType(tile)] -= LEVELCROSSING_TRACKBIT_FACTOR - 1; DirtyCompanyInfrastructureWindows(c->index); } @@ -494,13 +494,13 @@ CommandCost CmdBuildRoad(TileIndex tile, if ((Company::IsValidID(company) && p2 != 0) || (company == OWNER_TOWN && !Town::IsValidID(p2)) || (company == OWNER_DEITY && p2 != 0)) return CMD_ERROR; if (company != OWNER_TOWN) { const Town *town = CalcClosestTownFromTile(tile); - p2 = (town != NULL) ? town->index : INVALID_TOWN; + p2 = (town != nullptr) ? town->index : INVALID_TOWN; if (company == OWNER_DEITY) { company = OWNER_TOWN; /* If we are not within a town, we are not owned by the town */ - if (town == NULL || DistanceSquare(tile, town->xy) > town->cache.squared_town_zone_radius[HZB_TOWN_EDGE]) { + if (town == nullptr || DistanceSquare(tile, town->xy) > town->cache.squared_town_zone_radius[HZB_TOWN_EDGE]) { company = OWNER_NONE; } } @@ -633,7 +633,7 @@ CommandCost CmdBuildRoad(TileIndex tile, YapfNotifyTrackLayoutChange(tile, railtrack); /* Update company infrastructure counts. A level crossing has two road bits. */ Company *c = Company::GetIfValid(company); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.road[rt] += 2; if (rt != ROADTYPE_ROAD) c->infrastructure.road[ROADTYPE_ROAD] += 2; DirtyCompanyInfrastructureWindows(company); @@ -641,7 +641,7 @@ CommandCost CmdBuildRoad(TileIndex tile, /* Update rail count for level crossings. The plain track is already * counted, so only add the difference to the level crossing cost. */ c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.rail[GetRailType(tile)] += LEVELCROSSING_TRACKBIT_FACTOR - 1; DirtyCompanyInfrastructureWindows(c->index); } @@ -783,7 +783,7 @@ do_clear:; /* Update company infrastructure count. */ Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { if (IsTileType(tile, MP_TUNNELBRIDGE)) num_pieces *= TUNNELBRIDGE_TRACKBIT_FACTOR; c->infrastructure.road[rt] += num_pieces; DirtyCompanyInfrastructureWindows(c->index); @@ -1064,7 +1064,7 @@ static CommandCost RemoveRoadDepot(TileI if (flags & DC_EXEC) { Company *c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) { + if (c != nullptr) { /* A road depot has two road bits. */ c->infrastructure.road[FIND_FIRST_BIT(GetRoadTypes(tile))] -= 2; DirtyCompanyInfrastructureWindows(c->index); @@ -1449,7 +1449,7 @@ void UpdateNearestTownForRoadTiles(bool TownID tid = INVALID_TOWN; if (!invalidate) { const Town *town = CalcClosestTownFromTile(t); - if (town != NULL) tid = town->index; + if (town != nullptr) tid = town->index; } SetTownIndex(t, tid); } @@ -1522,7 +1522,7 @@ static void TileLoop_Road(TileIndex tile if (!HasRoadWorks(tile)) { HouseZonesBits grp = HZB_TOWN_EDGE; - if (t != NULL) { + if (t != nullptr) { grp = GetTownRadiusGroup(t, tile); /* Show an animation to indicate road work */ @@ -1751,7 +1751,7 @@ static VehicleEnterTileStatus VehicleEnt rv->state = RVSB_IN_DEPOT; rv->vehstatus |= VS_HIDDEN; rv->direction = ReverseDir(rv->direction); - if (rv->Next() == NULL) VehicleEnterDepot(rv->First()); + if (rv->Next() == nullptr) VehicleEnterDepot(rv->First()); rv->tile = tile; InvalidateWindowData(WC_VEHICLE_DEPOT, rv->tile); @@ -1863,14 +1863,14 @@ extern const TileTypeProcs _tile_type_ro DrawTile_Road, // draw_tile_proc GetSlopePixelZ_Road, // get_slope_z_proc ClearTile_Road, // clear_tile_proc - NULL, // add_accepted_cargo_proc + nullptr, // add_accepted_cargo_proc GetTileDesc_Road, // get_tile_desc_proc GetTileTrackStatus_Road, // get_tile_track_status_proc ClickTile_Road, // click_tile_proc - NULL, // animate_tile_proc + nullptr, // animate_tile_proc TileLoop_Road, // tile_loop_proc ChangeTileOwner_Road, // change_tile_owner_proc - NULL, // add_produced_cargo_proc + nullptr, // add_produced_cargo_proc VehicleEnter_Road, // vehicle_enter_tile_proc GetFoundation_Road, // get_foundation_proc TerraformTile_Road, // terraform_tile_proc diff --git a/src/road_gui.cpp b/src/road_gui.cpp --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -681,7 +681,7 @@ struct BuildRoadToolbarWindow : Window { */ static EventState RoadToolbarGlobalHotkeys(int hotkey) { - Window *w = NULL; + Window *w = nullptr; switch (_game_mode) { case GM_NORMAL: { extern RoadType _last_built_roadtype; @@ -697,7 +697,7 @@ static EventState RoadToolbarGlobalHotke break; } - if (w == NULL) return ES_NOT_HANDLED; + if (w == nullptr) return ES_NOT_HANDLED; return w->OnHotkey(hotkey); } @@ -804,11 +804,11 @@ static WindowDesc _build_tramway_desc( * * If the terraform toolbar is linked to the toolbar, that window is also opened. * - * @return newly opened road toolbar, or NULL if the toolbar could not be opened. + * @return newly opened road toolbar, or nullptr if the toolbar could not be opened. */ Window *ShowBuildRoadToolbar(RoadType roadtype) { - if (!Company::IsValidID(_local_company)) return NULL; + if (!Company::IsValidID(_local_company)) return nullptr; _cur_roadtype = roadtype; DeleteWindowByClass(WC_BUILD_TOOLBAR); @@ -852,7 +852,7 @@ static WindowDesc _build_road_scen_desc( /** * Show the road building toolbar in the scenario editor. - * @return The just opened toolbar, or \c NULL if the toolbar was already open. + * @return The just opened toolbar, or \c nullptr if the toolbar was already open. */ Window *ShowBuildRoadScenToolbar() { @@ -940,7 +940,7 @@ static const NWidgetPart _nested_build_r }; static WindowDesc _build_road_depot_desc( - WDP_AUTO, NULL, 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_BUILD_DEPOT, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_build_road_depot_widgets, lengthof(_nested_build_road_depot_widgets) @@ -1100,7 +1100,7 @@ static const NWidgetPart _nested_road_st }; static WindowDesc _road_station_picker_desc( - WDP_AUTO, NULL, 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_road_station_picker_widgets, lengthof(_nested_road_station_picker_widgets) @@ -1138,7 +1138,7 @@ static const NWidgetPart _nested_tram_st }; static WindowDesc _tram_station_picker_desc( - WDP_AUTO, NULL, 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_BUS_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_tram_station_picker_widgets, lengthof(_nested_tram_station_picker_widgets) diff --git a/src/roadstop.cpp b/src/roadstop.cpp --- a/src/roadstop.cpp +++ b/src/roadstop.cpp @@ -43,7 +43,7 @@ RoadStop::~RoadStop() */ RoadStop *RoadStop::GetNextRoadStop(const RoadVehicle *v) const { - for (RoadStop *rs = this->next; rs != NULL; rs = rs->next) { + for (RoadStop *rs = this->next; rs != nullptr; rs = rs->next) { /* The vehicle cannot go to this roadstop (different roadtype) */ if ((GetRoadTypes(rs->xy) & v->compatible_roadtypes) == ROADTYPES_NONE) continue; /* The vehicle is articulated and can therefore not go to a standard road stop. */ @@ -53,7 +53,7 @@ RoadStop *RoadStop::GetNextRoadStop(cons return rs; } - return NULL; + return nullptr; } /** @@ -63,7 +63,7 @@ RoadStop *RoadStop::GetNextRoadStop(cons */ void RoadStop::MakeDriveThrough() { - assert(this->east == NULL && this->west == NULL); + assert(this->east == nullptr && this->west == nullptr); RoadStopType rst = GetRoadStopType(this->xy); DiagDirection dir = GetRoadStopDir(this->xy); @@ -73,21 +73,21 @@ void RoadStop::MakeDriveThrough() /* Information about the tile north of us */ TileIndex north_tile = this->xy - offset; bool north = IsDriveThroughRoadStopContinuation(this->xy, north_tile); - RoadStop *rs_north = north ? RoadStop::GetByTile(north_tile, rst) : NULL; + RoadStop *rs_north = north ? RoadStop::GetByTile(north_tile, rst) : nullptr; /* Information about the tile south of us */ TileIndex south_tile = this->xy + offset; bool south = IsDriveThroughRoadStopContinuation(this->xy, south_tile); - RoadStop *rs_south = south ? RoadStop::GetByTile(south_tile, rst) : NULL; + RoadStop *rs_south = south ? RoadStop::GetByTile(south_tile, rst) : nullptr; /* Amount of road stops that will be added to the 'northern' head */ int added = 1; - if (north && rs_north->east != NULL) { // (east != NULL) == (west != NULL) + if (north && rs_north->east != nullptr) { // (east != nullptr) == (west != nullptr) /* There is a more northern one, so this can join them */ this->east = rs_north->east; this->west = rs_north->west; - if (south && rs_south->east != NULL) { // (east != NULL) == (west != NULL) + if (south && rs_south->east != nullptr) { // (east != nullptr) == (west != nullptr) /* There more southern tiles too, they must 'join' us too */ ClrBit(rs_south->status, RSSFB_BASE_ENTRY); this->east->occupied += rs_south->east->occupied; @@ -100,13 +100,13 @@ void RoadStop::MakeDriveThrough() /* Make all 'children' of the southern tile take the new master */ for (; IsDriveThroughRoadStopContinuation(this->xy, south_tile); south_tile += offset) { rs_south = RoadStop::GetByTile(south_tile, rst); - if (rs_south->east == NULL) break; + if (rs_south->east == nullptr) break; rs_south->east = rs_north->east; rs_south->west = rs_north->west; added++; } } - } else if (south && rs_south->east != NULL) { // (east != NULL) == (west != NULL) + } else if (south && rs_south->east != nullptr) { // (east != nullptr) == (west != nullptr) /* There is one to the south, but not to the north... so we become 'parent' */ this->east = rs_south->east; this->west = rs_south->west; @@ -131,7 +131,7 @@ void RoadStop::MakeDriveThrough() */ void RoadStop::ClearDriveThrough() { - assert(this->east != NULL && this->west != NULL); + assert(this->east != nullptr && this->west != nullptr); RoadStopType rst = GetRoadStopType(this->xy); DiagDirection dir = GetRoadStopDir(this->xy); @@ -141,12 +141,12 @@ void RoadStop::ClearDriveThrough() /* Information about the tile north of us */ TileIndex north_tile = this->xy - offset; bool north = IsDriveThroughRoadStopContinuation(this->xy, north_tile); - RoadStop *rs_north = north ? RoadStop::GetByTile(north_tile, rst) : NULL; + RoadStop *rs_north = north ? RoadStop::GetByTile(north_tile, rst) : nullptr; /* Information about the tile south of us */ TileIndex south_tile = this->xy + offset; bool south = IsDriveThroughRoadStopContinuation(this->xy, south_tile); - RoadStop *rs_south = south ? RoadStop::GetByTile(south_tile, rst) : NULL; + RoadStop *rs_south = south ? RoadStop::GetByTile(south_tile, rst) : nullptr; /* Must only be cleared after we determined which neighbours are * part of our little entry 'queue' */ @@ -207,8 +207,8 @@ void RoadStop::ClearDriveThrough() /* Make sure we don't get used for something 'incorrect' */ ClrBit(this->status, RSSFB_BASE_ENTRY); - this->east = NULL; - this->west = NULL; + this->east = nullptr; + this->west = nullptr; } /** @@ -271,7 +271,7 @@ bool RoadStop::Enter(RoadVehicle *rv) for (RoadStop *rs = st->GetPrimaryRoadStop(type);; rs = rs->next) { if (rs->xy == tile) return rs; - assert(rs->next != NULL); + assert(rs->next != nullptr); } } @@ -325,25 +325,25 @@ struct RoadStopEntryRebuilderHelper { * Add road vehicles to the station's list if needed. * @param v the found vehicle * @param data the extra data used to make our decision - * @return always NULL + * @return always nullptr */ Vehicle *FindVehiclesInRoadStop(Vehicle *v, void *data) { RoadStopEntryRebuilderHelper *rserh = (RoadStopEntryRebuilderHelper*)data; /* Not a RV or not in the right direction or crashed :( */ - if (v->type != VEH_ROAD || DirToDiagDir(v->direction) != rserh->dir || !v->IsPrimaryVehicle() || (v->vehstatus & VS_CRASHED) != 0) return NULL; + if (v->type != VEH_ROAD || DirToDiagDir(v->direction) != rserh->dir || !v->IsPrimaryVehicle() || (v->vehstatus & VS_CRASHED) != 0) return nullptr; RoadVehicle *rv = RoadVehicle::From(v); /* Don't add ones not in a road stop */ - if (rv->state < RVSB_IN_ROAD_STOP) return NULL; + if (rv->state < RVSB_IN_ROAD_STOP) return nullptr; /* Do not add duplicates! */ for (RVList::iterator it = rserh->vehicles.begin(); it != rserh->vehicles.end(); it++) { - if (rv == *it) return NULL; + if (rv == *it) return nullptr; } rserh->vehicles.push_back(rv); - return NULL; + return nullptr; } /** diff --git a/src/roadveh.h b/src/roadveh.h --- a/src/roadveh.h +++ b/src/roadveh.h @@ -133,7 +133,7 @@ struct RoadVehicle FINAL : public Ground int GetDisplaySpeed() const { return this->gcache.last_speed / 2; } int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed / 2; } Money GetRunningCost() const; - int GetDisplayImageWidth(Point *offset = NULL) const; + int GetDisplayImageWidth(Point *offset = nullptr) const; bool IsInDepot() const { return this->state == RVSB_IN_DEPOT; } bool Tick(); void OnNewDay(); diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -86,14 +86,14 @@ bool RoadVehicle::IsBus() const /** * Get the width of a road vehicle image in the GUI. - * @param offset Additional offset for positioning the sprite; set to NULL if not needed + * @param offset Additional offset for positioning the sprite; set to nullptr if not needed * @return Width in pixels */ int RoadVehicle::GetDisplayImageWidth(Point *offset) const { int reference_width = ROADVEHINFO_DEFAULT_VEHICLE_WIDTH; - if (offset != NULL) { + if (offset != nullptr) { offset->x = ScaleGUITrad(reference_width) / 2; offset->y = 0; } @@ -192,7 +192,7 @@ static uint GetRoadVehLength(const RoadV uint length = VEHICLE_LENGTH; uint16 veh_len = CALLBACK_FAILED; - if (e->GetGRF() != NULL && e->GetGRF()->grf_version >= 8) { + if (e->GetGRF() != nullptr && e->GetGRF()->grf_version >= 8) { /* Use callback 36 */ veh_len = GetVehicleProperty(v, PROP_ROADVEH_SHORTEN_FACTOR, CALLBACK_FAILED); if (veh_len != CALLBACK_FAILED && veh_len >= VEHICLE_LENGTH) ErrorUnknownCallbackResult(e->GetGRFID(), CBID_VEHICLE_LENGTH, veh_len); @@ -223,7 +223,7 @@ void RoadVehUpdateCache(RoadVehicle *v, v->gcache.cached_total_length = 0; - for (RoadVehicle *u = v; u != NULL; u = u->Next()) { + for (RoadVehicle *u = v; u != nullptr; u = u->Next()) { /* Check the v->first cache. */ assert(u->First() == v); @@ -315,7 +315,7 @@ CommandCost CmdBuildRoadVehicle(TileInde v->InvalidateNewGRFCacheOfChain(); /* Call various callbacks after the whole consist has been constructed */ - for (RoadVehicle *u = v; u != NULL; u = u->Next()) { + for (RoadVehicle *u = v; u != nullptr; u = u->Next()) { u->cargo_cap = u->GetEngine()->DetermineCapacity(u); u->refit_cap = 0; v->InvalidateNewGRFCache(); @@ -350,8 +350,8 @@ bool RoadVehicle::FindClosestDepot(TileI FindDepotData rfdd = FindClosestRoadDepot(this, 0); if (rfdd.best_length == UINT_MAX) return false; - if (location != NULL) *location = rfdd.tile; - if (destination != NULL) *destination = GetDepotIndex(rfdd.tile); + if (location != nullptr) *location = rfdd.tile; + if (destination != nullptr) *destination = GetDepotIndex(rfdd.tile); return true; } @@ -368,7 +368,7 @@ bool RoadVehicle::FindClosestDepot(TileI CommandCost CmdTurnRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { RoadVehicle *v = RoadVehicle::GetIfValid(p1); - if (v == NULL) return CMD_ERROR; + if (v == nullptr) return CMD_ERROR; if (!v->IsPrimaryVehicle()) return CMD_ERROR; @@ -397,7 +397,7 @@ CommandCost CmdTurnRoadVeh(TileIndex til void RoadVehicle::MarkDirty() { - for (RoadVehicle *v = this; v != NULL; v = v->Next()) { + for (RoadVehicle *v = this; v != nullptr; v = v->Next()) { v->colourmap = PAL_NONE; v->UpdateViewport(true, false); } @@ -440,7 +440,7 @@ inline int RoadVehicle::GetCurrentMaxSpe int max_speed = this->vcache.cached_max_speed; /* Limit speed to 50% while reversing, 75% in curves. */ - for (const RoadVehicle *u = this; u != NULL; u = u->Next()) { + for (const RoadVehicle *u = this; u != nullptr; u = u->Next()) { if (_settings_game.vehicle.roadveh_acceleration_model == AM_REALISTIC) { if (this->state <= RVSB_TRACKDIR_MASK && IsReversingRoadTrackdir((Trackdir)this->state)) { max_speed = this->vcache.cached_max_speed / 2; @@ -467,8 +467,8 @@ static void DeleteLastRoadVeh(RoadVehicl { RoadVehicle *first = v->First(); Vehicle *u = v; - for (; v->Next() != NULL; v = v->Next()) u = v; - u->SetNext(NULL); + for (; v->Next() != nullptr; v = v->Next()) u = v; + u->SetNext(nullptr); v->last_station_visited = first->last_station_visited; // for PreDestructor /* Only leave the road stop when we're really gone. */ @@ -488,7 +488,7 @@ static void RoadVehSetRandomDirection(Ro v->direction = ChangeDir(v->direction, delta[r & 3]); v->UpdateViewport(true, true); - } while ((v = v->Next()) != NULL); + } while ((v = v->Next()) != nullptr); } /** @@ -504,7 +504,7 @@ static bool RoadVehIsCrashed(RoadVehicle } else if (v->crashed_ctr <= 45) { if ((v->tick_counter & 7) == 0) RoadVehSetRandomDirection(v); } else if (v->crashed_ctr >= 2220 && !(v->tick_counter & 0x1F)) { - bool ret = v->Next() != NULL; + bool ret = v->Next() != nullptr; DeleteLastRoadVeh(v); return ret; } @@ -516,7 +516,7 @@ static bool RoadVehIsCrashed(RoadVehicle * Check routine whether a road and a train vehicle have collided. * @param v %Train vehicle to test. * @param data Road vehicle to test. - * @return %Train vehicle if the vehicles collided, else \c NULL. + * @return %Train vehicle if the vehicles collided, else \c nullptr. */ static Vehicle *EnumCheckRoadVehCrashTrain(Vehicle *v, void *data) { @@ -525,7 +525,7 @@ static Vehicle *EnumCheckRoadVehCrashTra return (v->type == VEH_TRAIN && abs(v->z_pos - u->z_pos) <= 6 && abs(v->x_pos - u->x_pos) <= 4 && - abs(v->y_pos - u->y_pos) <= 4) ? v : NULL; + abs(v->y_pos - u->y_pos) <= 4) ? v : nullptr; } uint RoadVehicle::Crash(bool flooded) @@ -564,7 +564,7 @@ static void RoadVehCrash(RoadVehicle *v) static bool RoadVehCheckTrainCrash(RoadVehicle *v) { - for (RoadVehicle *u = v; u != NULL; u = u->Next()) { + for (RoadVehicle *u = v; u != nullptr; u = u->Next()) { if (u->state == RVSB_WORMHOLE) continue; TileIndex tile = u->tile; @@ -641,7 +641,7 @@ static Vehicle *EnumCheckRoadVehClose(Ve } } - return NULL; + return nullptr; } static RoadVehicle *RoadVehFindCloseTo(RoadVehicle *v, int x, int y, Direction dir, bool update_blocked_ctr = true) @@ -649,7 +649,7 @@ static RoadVehicle *RoadVehFindCloseTo(R RoadVehFindData rvf; RoadVehicle *front = v->First(); - if (front->reverse_ctr != 0) return NULL; + if (front->reverse_ctr != 0) return nullptr; rvf.x = x; rvf.y = y; @@ -670,10 +670,10 @@ static RoadVehicle *RoadVehFindCloseTo(R * It can be disabled. */ if (rvf.best_diff == UINT_MAX) { front->blocked_ctr = 0; - return NULL; + return nullptr; } - if (update_blocked_ctr && ++front->blocked_ctr > 1480) return NULL; + if (update_blocked_ctr && ++front->blocked_ctr > 1480) return nullptr; return RoadVehicle::From(rvf.best); } @@ -772,7 +772,7 @@ static Vehicle *EnumFindVehBlockingOvert { const OvertakeData *od = (OvertakeData*)data; - return (v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v) ? v : NULL; + return (v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v) ? v : nullptr; } /** @@ -1006,7 +1006,7 @@ struct RoadDriveEntry { static bool RoadVehLeaveDepot(RoadVehicle *v, bool first) { /* Don't leave unless v and following wagons are in the depot. */ - for (const RoadVehicle *u = v; u != NULL; u = u->Next()) { + for (const RoadVehicle *u = v; u != nullptr; u = u->Next()) { if (u->state != RVSB_IN_DEPOT || u->tile != v->tile) return false; } @@ -1026,7 +1026,7 @@ static bool RoadVehLeaveDepot(RoadVehicl return true; } - if (RoadVehFindCloseTo(v, x, y, v->direction, false) != NULL) return true; + if (RoadVehFindCloseTo(v, x, y, v->direction, false) != nullptr) return true; VehicleServiceInDepot(v); @@ -1161,7 +1161,7 @@ bool IndividualRoadVehicleController(Roa if (v->IsFrontEngine()) { const Vehicle *u = RoadVehFindCloseTo(v, gp.x, gp.y, v->direction); - if (u != NULL) { + if (u != nullptr) { v->cur_speed = u->First()->cur_speed; return false; } @@ -1225,7 +1225,7 @@ again: case TRACKDIR_RVREV_SW: needed = ROAD_NE; break; case TRACKDIR_RVREV_NW: needed = ROAD_SE; break; } - if ((v->Previous() != NULL && v->Previous()->tile == tile) || + if ((v->Previous() != nullptr && v->Previous()->tile == tile) || (v->IsFrontEngine() && IsNormalRoadTile(tile) && !HasRoadWorks(tile) && (needed & GetRoadBits(tile, ROADTYPE_TRAM)) != ROAD_NONE)) { /* @@ -1274,7 +1274,7 @@ again: Direction new_dir = RoadVehGetSlidingDirection(v, x, y); if (v->IsFrontEngine()) { Vehicle *u = RoadVehFindCloseTo(v, x, y, new_dir); - if (u != NULL) { + if (u != nullptr) { v->cur_speed = u->First()->cur_speed; return false; } @@ -1376,7 +1376,7 @@ again: int y = TileY(v->tile) * TILE_SIZE + rdp[turn_around_start_frame].y; Direction new_dir = RoadVehGetSlidingDirection(v, x, y); - if (v->IsFrontEngine() && RoadVehFindCloseTo(v, x, y, new_dir) != NULL) return false; + if (v->IsFrontEngine() && RoadVehFindCloseTo(v, x, y, new_dir) != nullptr) return false; uint32 r = VehicleEnterTile(v, v->tile, x, y); if (HasBit(r, VETS_CANNOT_ENTER)) { @@ -1402,7 +1402,7 @@ again: /* This vehicle is not in a wormhole and it hasn't entered a new tile. If * it's on a depot tile, check if it's time to activate the next vehicle in * the chain yet. */ - if (v->Next() != NULL && IsRoadDepotTile(v->tile)) { + if (v->Next() != nullptr && IsRoadDepotTile(v->tile)) { if (v->frame == v->gcache.cached_veh_length + RVC_DEPOT_START_FRAME) { RoadVehLeaveDepot(v->Next(), false); } @@ -1419,7 +1419,7 @@ again: * Check for another vehicle to overtake */ RoadVehicle *u = RoadVehFindCloseTo(v, x, y, new_dir); - if (u != NULL) { + if (u != nullptr) { u = u->First(); /* There is a vehicle in front overtake it if possible */ if (v->overtaking == 0) RoadVehCheckOvertake(v, u); @@ -1569,7 +1569,7 @@ static bool RoadVehController(RoadVehicl j -= adv_spd; RoadVehicle *u = v; - for (RoadVehicle *prev = NULL; u != NULL; prev = u, u = u->Next()) { + for (RoadVehicle *prev = nullptr; u != nullptr; prev = u, u = u->Next()) { if (!IndividualRoadVehicleController(u, prev)) { blocked = true; break; @@ -1586,7 +1586,7 @@ static bool RoadVehController(RoadVehicl v->SetLastSpeed(); - for (RoadVehicle *u = v; u != NULL; u = u->Next()) { + for (RoadVehicle *u = v; u != nullptr; u = u->Next()) { if ((u->vehstatus & VS_HIDDEN) != 0) continue; u->UpdateViewport(false, false); diff --git a/src/roadveh_gui.cpp b/src/roadveh_gui.cpp --- a/src/roadveh_gui.cpp +++ b/src/roadveh_gui.cpp @@ -47,7 +47,7 @@ void DrawRoadVehDetails(const Vehicle *v memset(subtype_text, 0, sizeof(subtype_text)); - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { max_cargo[u->cargo_type] += u->cargo_cap; if (u->cargo_cap > 0) { StringID text = GetCargoSubtypeText(u); @@ -80,7 +80,7 @@ void DrawRoadVehDetails(const Vehicle *v DrawString(left, right, y + FONT_HEIGHT_NORMAL + y_offset, capacity, TC_BLUE); - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { if (u->cargo_cap == 0) continue; str = STR_VEHICLE_DETAILS_CARGO_EMPTY; @@ -143,7 +143,7 @@ void DrawRoadVehImage(const Vehicle *v, _cur_dpi = &tmp_dpi; int px = rtl ? max_width + skip : -skip; - for (; u != NULL && (rtl ? px > 0 : px < max_width); u = u->Next()) { + for (; u != nullptr && (rtl ? px > 0 : px < max_width); u = u->Next()) { Point offset; int width = u->GetDisplayImageWidth(&offset); diff --git a/src/safeguards.h b/src/safeguards.h --- a/src/safeguards.h +++ b/src/safeguards.h @@ -12,7 +12,7 @@ * * Unsafe methods are, for example, strndup and strncpy because they may leave the * string without a null termination, but also strdup and strndup because they can - * return NULL and then all strdups would need to be guarded against that instead + * return nullptr and then all strdups would need to be guarded against that instead * of using the current MallocT/ReallocT/CallocT technique of just giving the user * an error that too much memory was used instead of spreading that code though * the whole code base. diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -263,14 +263,14 @@ static void InitializeWindowsAndCaches() /* Identify owners of persistent storage arrays */ Industry *i; FOR_ALL_INDUSTRIES(i) { - if (i->psa != NULL) { + if (i->psa != nullptr) { i->psa->feature = GSF_INDUSTRIES; i->psa->tile = i->location.tile; } } Station *s; FOR_ALL_STATIONS(s) { - if (s->airport.psa != NULL) { + if (s->airport.psa != nullptr) { s->airport.psa->feature = GSF_AIRPORTS; s->airport.psa->tile = s->airport.tile; } @@ -303,9 +303,9 @@ static void InitializeWindowsAndCaches() } typedef void (CDECL *SignalHandlerPointer)(int); -static SignalHandlerPointer _prev_segfault = NULL; -static SignalHandlerPointer _prev_abort = NULL; -static SignalHandlerPointer _prev_fpe = NULL; +static SignalHandlerPointer _prev_segfault = nullptr; +static SignalHandlerPointer _prev_abort = nullptr; +static SignalHandlerPointer _prev_fpe = nullptr; static void CDECL HandleSavegameLoadCrash(int signum); @@ -375,7 +375,7 @@ static void CDECL HandleSavegameLoadCras char *p = buffer; p += seprintf(p, lastof(buffer), "Loading your savegame caused OpenTTD to crash.\n"); - for (const GRFConfig *c = _grfconfig; !_saveload_crash_with_missing_newgrfs && c != NULL; c = c->next) { + for (const GRFConfig *c = _grfconfig; !_saveload_crash_with_missing_newgrfs && c != nullptr; c = c->next) { _saveload_crash_with_missing_newgrfs = HasBit(c->flags, GCF_COMPATIBLE) || c->status == GCS_NOT_FOUND; } @@ -393,7 +393,7 @@ static void CDECL HandleSavegameLoadCras "Please load the savegame with the appropriate NewGRFs installed.\n" "The missing/compatible NewGRFs are:\n"); - for (const GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (const GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (HasBit(c->flags, GCF_COMPATIBLE)) { const GRFIdentifier *replaced = GetOverriddenIdentifier(c); char buf[40]; @@ -414,14 +414,14 @@ static void CDECL HandleSavegameLoadCras ShowInfo(buffer); - SignalHandlerPointer call = NULL; + SignalHandlerPointer call = nullptr; switch (signum) { case SIGSEGV: call = _prev_segfault; break; case SIGABRT: call = _prev_abort; break; case SIGFPE: call = _prev_fpe; break; default: NOT_REACHED(); } - if (call != NULL) call(signum); + if (call != nullptr) call(signum); } /** @@ -434,7 +434,7 @@ static void FixOwnerOfRailTrack(TileInde assert(!Company::IsValidID(GetTileOwner(t)) && (IsLevelCrossingTile(t) || IsPlainRailTile(t))); /* remove leftover rail piece from crossing (from very old savegames) */ - Train *v = NULL, *w; + Train *v = nullptr, *w; FOR_ALL_TRAINS(w) { if (w->tile == t) { v = w; @@ -442,7 +442,7 @@ static void FixOwnerOfRailTrack(TileInde } } - if (v != NULL) { + if (v != nullptr) { /* when there is a train on crossing (it could happen in TTD), set owner of crossing to train owner */ SetTileOwner(t, v->owner); return; @@ -631,22 +631,22 @@ bool AfterLoadGame() Company *c; FOR_ALL_COMPANIES(c) { c->name = CopyFromOldName(c->name_1); - if (c->name != NULL) c->name_1 = STR_SV_UNNAMED; + if (c->name != nullptr) c->name_1 = STR_SV_UNNAMED; c->president_name = CopyFromOldName(c->president_name_1); - if (c->president_name != NULL) c->president_name_1 = SPECSTR_PRESIDENT_NAME; + if (c->president_name != nullptr) c->president_name_1 = SPECSTR_PRESIDENT_NAME; } Station *st; FOR_ALL_STATIONS(st) { st->name = CopyFromOldName(st->string_id); /* generating new name would be too much work for little effect, use the station name fallback */ - if (st->name != NULL) st->string_id = STR_SV_STNAME_FALLBACK; + if (st->name != nullptr) st->string_id = STR_SV_STNAME_FALLBACK; } Town *t; FOR_ALL_TOWNS(t) { t->name = CopyFromOldName(t->townnametype); - if (t->name != NULL) t->townnametype = SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name; + if (t->name != nullptr) t->townnametype = SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name; } } @@ -676,7 +676,7 @@ bool AfterLoadGame() /* Check if all NewGRFs are present, we are very strict in MP mode */ GRFListCompatibility gcf_res = IsGoodGRFConfigList(_grfconfig); - for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (c->status == GCS_NOT_FOUND) { GamelogGRFRemove(c->ident.grfid); } else if (HasBit(c->flags, GCF_COMPATIBLE)) { @@ -787,7 +787,7 @@ bool AfterLoadGame() { Company *c; FOR_ALL_COMPANIES(c) { - if (c->is_ai && c->ai_instance == NULL) AI::StartNew(c->index); + if (c->is_ai && c->ai_instance == nullptr) AI::StartNew(c->index); } } @@ -987,7 +987,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_16)) { Company *c; FOR_ALL_COMPANIES(c) { - c->engine_renew_list = NULL; + c->engine_renew_list = nullptr; c->settings.engine_renew = false; c->settings.engine_renew_months = 6; c->settings.engine_renew_money = 100000; @@ -1000,7 +1000,7 @@ bool AfterLoadGame() * companies are 'invalid'. */ c = Company::GetIfValid(COMPANY_FIRST); - if (!_network_dedicated && c != NULL) { + if (!_network_dedicated && c != nullptr) { c->settings = _settings_client.company; } } @@ -1104,7 +1104,7 @@ bool AfterLoadGame() } if (!IsRoadDepot(t) && !HasTownOwnedRoad(t)) { const Town *town = CalcClosestTownFromTile(t); - if (town != NULL) SetTownIndex(t, town->index); + if (town != nullptr) SetTownIndex(t, town->index); } _m[t].m4 = 0; break; @@ -1711,9 +1711,9 @@ bool AfterLoadGame() Vehicle *v; FOR_ALL_VEHICLES(v) { - if (v->orders.list != NULL && v->orders.list->GetFirstOrder() != NULL && v->orders.list->GetFirstOrder()->IsType(OT_NOTHING)) { + if (v->orders.list != nullptr && v->orders.list->GetFirstOrder() != nullptr && v->orders.list->GetFirstOrder()->IsType(OT_NOTHING)) { v->orders.list->FreeChain(); - v->orders.list = NULL; + v->orders.list = nullptr; } v->current_order.ConvertFromOldSavegame(); @@ -2165,7 +2165,7 @@ bool AfterLoadGame() FOR_ALL_DISASTERVEHICLES(v) { if (v->subtype == 2 /* ST_SMALL_UFO */ && v->current_order.GetDestination() != 0) { const Vehicle *u = Vehicle::GetIfValid(v->dest_tile); - if (u == NULL || u->type != VEH_ROAD || !RoadVehicle::From(u)->IsFrontEngine()) { + if (u == nullptr || u->type != VEH_ROAD || !RoadVehicle::From(u)->IsFrontEngine()) { delete v; } } @@ -2186,7 +2186,7 @@ bool AfterLoadGame() assert_compile(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE); assert(CargoPayment::CanAllocateItem()); Vehicle *v = *iter; - if (v->cargo_payment == NULL) v->cargo_payment = new CargoPayment(v); + if (v->cargo_payment == nullptr) v->cargo_payment = new CargoPayment(v); } } } @@ -2199,7 +2199,7 @@ bool AfterLoadGame() for (auto tile = _animated_tiles.begin(); tile < _animated_tiles.end(); /* Nothing */) { /* Remove if tile is not animated */ - bool remove = _tile_type_procs[GetTileType(*tile)]->animate_tile_proc == NULL; + bool remove = _tile_type_procs[GetTileType(*tile)]->animate_tile_proc == nullptr; /* and remove if duplicate */ for (auto j = _animated_tiles.begin(); !remove && j < tile; j++) { @@ -2271,7 +2271,7 @@ bool AfterLoadGame() /* Town -> Town */ const Station *ss = Station::GetIfValid(s->src); const Station *sd = Station::GetIfValid(s->dst); - if (ss != NULL && sd != NULL && ss->owner == sd->owner && + if (ss != nullptr && sd != nullptr && ss->owner == sd->owner && Company::IsValidID(ss->owner)) { s->src_type = s->dst_type = ST_TOWN; s->src = ss->town->index; @@ -2438,13 +2438,13 @@ bool AfterLoadGame() FOR_ALL_AIRCRAFT(v) { if (!v->IsNormalAircraft()) continue; Station *st = GetTargetAirportIfValid(v); - if (st == NULL && v->state != FLYING) { + if (st == nullptr && v->state != FLYING) { v->state = FLYING; UpdateAircraftCache(v); AircraftNextAirportPos_and_Order(v); /* get aircraft back on running altitude */ if ((v->vehstatus & VS_CRASHED) == 0) { - GetAircraftFlightLevelBounds(v, &v->z_pos, NULL); + GetAircraftFlightLevelBounds(v, &v->z_pos, nullptr); SetAircraftPosition(v, v->x_pos, v->y_pos, GetAircraftFlightLevel(v)); } } @@ -2506,11 +2506,11 @@ bool AfterLoadGame() * order they have in the pool. */ Waypoint *wp; FOR_ALL_WAYPOINTS(wp) { - if (wp->name != NULL) wp->town_cn = UINT16_MAX; + if (wp->name != nullptr) wp->town_cn = UINT16_MAX; } FOR_ALL_WAYPOINTS(wp) { - if (wp->name != NULL) MakeDefaultName(wp); + if (wp->name != nullptr) MakeDefaultName(wp); } } @@ -2742,7 +2742,7 @@ bool AfterLoadGame() if (!IsSavegameVersionBefore(SLV_76)) { Industry *ind; FOR_ALL_INDUSTRIES(ind) { - assert(ind->psa != NULL); + assert(ind->psa != nullptr); /* Check if the old storage was empty. */ bool is_empty = true; @@ -2757,7 +2757,7 @@ bool AfterLoadGame() ind->psa->grfid = _industry_mngr.GetGRFID(ind->type); } else { delete ind->psa; - ind->psa = NULL; + ind->psa = nullptr; } } } @@ -2766,7 +2766,7 @@ bool AfterLoadGame() Station *st; FOR_ALL_STATIONS(st) { if (!(st->facilities & FACIL_AIRPORT)) continue; - assert(st->airport.psa != NULL); + assert(st->airport.psa != nullptr); /* Check if the old storage was empty. */ bool is_empty = true; @@ -2781,7 +2781,7 @@ bool AfterLoadGame() st->airport.psa->grfid = _airport_mngr.GetGRFID(st->airport.type); } else { delete st->airport.psa; - st->airport.psa = NULL; + st->airport.psa = nullptr; } } @@ -2821,12 +2821,12 @@ bool AfterLoadGame() /* Set the default cargo requirement for town growth */ switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != NULL) t->goal[TE_FOOD] = TOWN_GROWTH_WINTER; + if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_WINTER; break; case LT_TROPIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != NULL) t->goal[TE_FOOD] = TOWN_GROWTH_DESERT; - if (FindFirstCargoWithTownEffect(TE_WATER) != NULL) t->goal[TE_WATER] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownEffect(TE_WATER) != nullptr) t->goal[TE_WATER] = TOWN_GROWTH_DESERT; break; } } @@ -2946,7 +2946,7 @@ bool AfterLoadGame() TileIndex prev_tile = v->tile; uint prev_tile_skip = 0; uint cur_skip = 0; - for (RoadVehicle *u = v; u != NULL; u = u->Next()) { + for (RoadVehicle *u = v; u != nullptr; u = u->Next()) { if (u->tile != prev_tile) { prev_tile_skip = cur_skip; prev_tile = u->tile; @@ -2980,7 +2980,7 @@ bool AfterLoadGame() } while (cur_skip > skip_frames[0]) { RoadVehicle *u = v; - RoadVehicle *prev = NULL; + RoadVehicle *prev = nullptr; for (uint sf : skip_frames) { extern bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev); if (sf >= cur_skip) IndividualRoadVehicleController(u, prev); @@ -3111,7 +3111,7 @@ bool AfterLoadGame() } else { /* Link neutral station back to industry, as this is not saved. */ Industry *ind; - FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != NULL) ind->neutral_station->industry = ind; + FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != nullptr) ind->neutral_station->industry = ind; } if (IsSavegameVersionBefore(SLV_TREES_WATER_CLASS)) { diff --git a/src/saveload/ai_sl.cpp b/src/saveload/ai_sl.cpp --- a/src/saveload/ai_sl.cpp +++ b/src/saveload/ai_sl.cpp @@ -53,7 +53,7 @@ static void SaveReal_AIPL(int *index_ptr _ai_saveload_settings[0] = '\0'; config->SettingsToString(_ai_saveload_settings, lastof(_ai_saveload_settings)); - SlObject(NULL, _ai_company); + SlObject(nullptr, _ai_company); /* If the AI was active, store his data too */ if (Company::IsValidAiID(index)) AI::Save(index); } @@ -62,7 +62,7 @@ static void Load_AIPL() { /* Free all current data */ for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { - AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->Change(NULL); + AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->Change(nullptr); } CompanyID index; @@ -71,7 +71,7 @@ static void Load_AIPL() _ai_saveload_is_random = 0; _ai_saveload_version = -1; - SlObject(NULL, _ai_company); + SlObject(nullptr, _ai_company); if (_networking && !_network_server) { if (Company::IsValidAiID(index)) AIInstance::LoadEmpty(); @@ -81,7 +81,7 @@ static void Load_AIPL() AIConfig *config = AIConfig::GetConfig(index, AIConfig::SSS_FORCE_GAME); if (StrEmpty(_ai_saveload_name)) { /* A random AI. */ - config->Change(NULL, -1, false, true); + config->Change(nullptr, -1, false, true); } else { config->Change(_ai_saveload_name, _ai_saveload_version, false, _ai_saveload_is_random); if (!config->HasScript()) { @@ -125,5 +125,5 @@ static void Save_AIPL() } extern const ChunkHandler _ai_chunk_handlers[] = { - { 'AIPL', Save_AIPL, Load_AIPL, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'AIPL', Save_AIPL, Load_AIPL, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/airport_sl.cpp b/src/saveload/airport_sl.cpp --- a/src/saveload/airport_sl.cpp +++ b/src/saveload/airport_sl.cpp @@ -37,6 +37,6 @@ static void Load_ATID() } extern const ChunkHandler _airport_chunk_handlers[] = { - { 'ATID', Save_ATID, Load_ATID, NULL, NULL, CH_ARRAY }, - { 'APID', Save_APID, Load_APID, NULL, NULL, CH_ARRAY | CH_LAST }, + { 'ATID', Save_ATID, Load_ATID, nullptr, nullptr, CH_ARRAY }, + { 'APID', Save_APID, Load_APID, nullptr, nullptr, CH_ARRAY | CH_LAST }, }; diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -58,5 +58,5 @@ static void Load_ANIT() * the animated tile table. */ extern const ChunkHandler _animated_tile_chunk_handlers[] = { - { 'ANIT', Save_ANIT, Load_ANIT, NULL, NULL, CH_RIFF | CH_LAST}, + { 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_RIFF | CH_LAST}, }; diff --git a/src/saveload/autoreplace_sl.cpp b/src/saveload/autoreplace_sl.cpp --- a/src/saveload/autoreplace_sl.cpp +++ b/src/saveload/autoreplace_sl.cpp @@ -63,5 +63,5 @@ static void Ptrs_ERNW() } extern const ChunkHandler _autoreplace_chunk_handlers[] = { - { 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, NULL, CH_ARRAY | CH_LAST}, + { 'ERNW', Save_ERNW, Load_ERNW, Ptrs_ERNW, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/cargomonitor_sl.cpp b/src/saveload/cargomonitor_sl.cpp --- a/src/saveload/cargomonitor_sl.cpp +++ b/src/saveload/cargomonitor_sl.cpp @@ -121,6 +121,6 @@ static void LoadPickup() /** Chunk definition of the cargomonitoring maps. */ extern const ChunkHandler _cargomonitor_chunk_handlers[] = { - { 'CMDL', SaveDelivery, LoadDelivery, NULL, NULL, CH_ARRAY}, - { 'CMPU', SavePickup, LoadPickup, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'CMDL', SaveDelivery, LoadDelivery, nullptr, nullptr, CH_ARRAY}, + { 'CMPU', SavePickup, LoadPickup, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp --- a/src/saveload/cargopacket_sl.cpp +++ b/src/saveload/cargopacket_sl.cpp @@ -139,5 +139,5 @@ static void Load_CAPA() /** Chunk handlers related to cargo packets. */ extern const ChunkHandler _cargopacket_chunk_handlers[] = { - { 'CAPA', Save_CAPA, Load_CAPA, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'CAPA', Save_CAPA, Load_CAPA, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/cheat_sl.cpp b/src/saveload/cheat_sl.cpp --- a/src/saveload/cheat_sl.cpp +++ b/src/saveload/cheat_sl.cpp @@ -51,5 +51,5 @@ static void Load_CHTS() /** Chunk handlers related to cheats. */ extern const ChunkHandler _cheat_chunk_handlers[] = { - { 'CHTS', Save_CHTS, Load_CHTS, NULL, NULL, CH_RIFF | CH_LAST}, + { 'CHTS', Save_CHTS, Load_CHTS, nullptr, nullptr, CH_RIFF | CH_LAST}, }; diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -111,7 +111,7 @@ void AfterLoadCompanyStats() switch (GetTileType(tile)) { case MP_RAILWAY: c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) { + if (c != nullptr) { uint pieces = 1; if (IsPlainRail(tile)) { TrackBits bits = GetTrackBits(tile); @@ -127,7 +127,7 @@ void AfterLoadCompanyStats() case MP_ROAD: { if (IsLevelCrossing(tile)) { c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) c->infrastructure.rail[GetRailType(tile)] += LEVELCROSSING_TRACKBIT_FACTOR; + if (c != nullptr) c->infrastructure.rail[GetRailType(tile)] += LEVELCROSSING_TRACKBIT_FACTOR; } /* Iterate all present road types as each can have a different owner. */ @@ -135,19 +135,19 @@ void AfterLoadCompanyStats() FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) { c = Company::GetIfValid(IsRoadDepot(tile) ? GetTileOwner(tile) : GetRoadOwner(tile, rt)); /* A level crossings and depots have two road bits. */ - if (c != NULL) c->infrastructure.road[rt] += IsNormalRoad(tile) ? CountBits(GetRoadBits(tile, rt)) : 2; + if (c != nullptr) c->infrastructure.road[rt] += IsNormalRoad(tile) ? CountBits(GetRoadBits(tile, rt)) : 2; } break; } case MP_STATION: c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL && GetStationType(tile) != STATION_AIRPORT && !IsBuoy(tile)) c->infrastructure.station++; + if (c != nullptr && GetStationType(tile) != STATION_AIRPORT && !IsBuoy(tile)) c->infrastructure.station++; switch (GetStationType(tile)) { case STATION_RAIL: case STATION_WAYPOINT: - if (c != NULL && !IsStationTileBlocked(tile)) c->infrastructure.rail[GetRailType(tile)]++; + if (c != nullptr && !IsStationTileBlocked(tile)) c->infrastructure.rail[GetRailType(tile)]++; break; case STATION_BUS: @@ -156,7 +156,7 @@ void AfterLoadCompanyStats() RoadType rt; FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) { c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) c->infrastructure.road[rt] += 2; // A road stop has two road bits. + if (c != nullptr) c->infrastructure.road[rt] += 2; // A road stop has two road bits. } break; } @@ -164,7 +164,7 @@ void AfterLoadCompanyStats() case STATION_DOCK: case STATION_BUOY: if (GetWaterClass(tile) == WATER_CLASS_CANAL) { - if (c != NULL) c->infrastructure.water++; + if (c != nullptr) c->infrastructure.water++; } break; @@ -176,7 +176,7 @@ void AfterLoadCompanyStats() case MP_WATER: if (IsShipDepot(tile) || IsLock(tile)) { c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) { + if (c != nullptr) { if (IsShipDepot(tile)) c->infrastructure.water += LOCK_DEPOT_TILE_FACTOR; if (IsLock(tile) && GetLockPart(tile) == LOCK_PART_MIDDLE) { /* The middle tile specifies the owner of the lock. */ @@ -190,7 +190,7 @@ void AfterLoadCompanyStats() case MP_OBJECT: if (GetWaterClass(tile) == WATER_CLASS_CANAL) { c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) c->infrastructure.water++; + if (c != nullptr) c->infrastructure.water++; } break; @@ -205,7 +205,7 @@ void AfterLoadCompanyStats() switch (GetTunnelBridgeTransportType(tile)) { case TRANSPORT_RAIL: c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) c->infrastructure.rail[GetRailType(tile)] += len; + if (c != nullptr) c->infrastructure.rail[GetRailType(tile)] += len; break; case TRANSPORT_ROAD: { @@ -213,14 +213,14 @@ void AfterLoadCompanyStats() RoadType rt; FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) { c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) c->infrastructure.road[rt] += len * 2; // A full diagonal road has two road bits. + if (c != nullptr) c->infrastructure.road[rt] += len * 2; // A full diagonal road has two road bits. } break; } case TRANSPORT_WATER: c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) c->infrastructure.water += len; + if (c != nullptr) c->infrastructure.water += len; break; default: @@ -414,7 +414,7 @@ static void SaveLoad_PLYR_common(Company int i; SlObject(cprops, _company_desc); - if (c != NULL) { + if (c != nullptr) { SlObject(c, _company_settings_desc); } else { char nothing; @@ -444,7 +444,7 @@ static void SaveLoad_PLYR_common(Company /* Write each livery entry. */ int num_liveries = IsSavegameVersionBefore(SLV_63) ? LS_END - 4 : (IsSavegameVersionBefore(SLV_85) ? LS_END - 2: LS_END); bool update_in_use = IsSavegameVersionBefore(SLV_GROUP_LIVERIES); - if (c != NULL) { + if (c != nullptr) { for (i = 0; i < num_liveries; i++) { SlObject(&c->livery[i], _company_livery_desc); if (update_in_use && i != LS_DEFAULT) { @@ -507,7 +507,7 @@ static void Check_PLYR() int index; while ((index = SlIterateArray()) != -1) { CompanyProperties *cprops = new CompanyProperties(); - SaveLoad_PLYR_common(NULL, cprops); + SaveLoad_PLYR_common(nullptr, cprops); /* We do not load old custom names */ if (IsSavegameVersionBefore(SLV_84)) { @@ -520,7 +520,7 @@ static void Check_PLYR() } } - if (cprops->name == NULL && !IsInsideMM(cprops->name_1, SPECSTR_COMPANY_NAME_START, SPECSTR_COMPANY_NAME_LAST + 1) && + if (cprops->name == nullptr && !IsInsideMM(cprops->name_1, SPECSTR_COMPANY_NAME_START, SPECSTR_COMPANY_NAME_LAST + 1) && cprops->name_1 != STR_GAME_SAVELOAD_NOT_AVAILABLE && cprops->name_1 != STR_SV_UNNAMED && cprops->name_1 != SPECSTR_ANDCO_NAME && cprops->name_1 != SPECSTR_PRESIDENT_NAME && cprops->name_1 != SPECSTR_SILLY_NAME) { diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp --- a/src/saveload/depot_sl.cpp +++ b/src/saveload/depot_sl.cpp @@ -64,5 +64,5 @@ static void Ptrs_DEPT() } extern const ChunkHandler _depot_chunk_handlers[] = { - { 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, NULL, CH_ARRAY | CH_LAST}, + { 'DEPT', Save_DEPT, Load_DEPT, Ptrs_DEPT, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp --- a/src/saveload/economy_sl.cpp +++ b/src/saveload/economy_sl.cpp @@ -22,8 +22,8 @@ static void Load_PRIC() { /* Old games store 49 base prices, very old games store them as int32 */ int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64; - SlArray(NULL, 49, vt | SLE_VAR_NULL); - SlArray(NULL, 49, SLE_FILE_U16 | SLE_VAR_NULL); + SlArray(nullptr, 49, vt | SLE_VAR_NULL); + SlArray(nullptr, 49, SLE_FILE_U16 | SLE_VAR_NULL); } /** Cargo payment rates in pre 126 savegames */ @@ -31,8 +31,8 @@ static void Load_CAPR() { uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64; - SlArray(NULL, num_cargo, vt | SLE_VAR_NULL); - SlArray(NULL, num_cargo, SLE_FILE_U16 | SLE_VAR_NULL); + SlArray(nullptr, num_cargo, vt | SLE_VAR_NULL); + SlArray(nullptr, num_cargo, SLE_FILE_U16 | SLE_VAR_NULL); } static const SaveLoad _economy_desc[] = { @@ -101,8 +101,8 @@ static void Ptrs_CAPY() extern const ChunkHandler _economy_chunk_handlers[] = { - { 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, NULL, CH_ARRAY}, - { 'PRIC', NULL, Load_PRIC, NULL, NULL, CH_RIFF | CH_AUTO_LENGTH}, - { 'CAPR', NULL, Load_CAPR, NULL, NULL, CH_RIFF | CH_AUTO_LENGTH}, - { 'ECMY', Save_ECMY, Load_ECMY, NULL, NULL, CH_RIFF | CH_LAST}, + { 'CAPY', Save_CAPY, Load_CAPY, Ptrs_CAPY, nullptr, CH_ARRAY}, + { 'PRIC', nullptr, Load_PRIC, nullptr, nullptr, CH_RIFF | CH_AUTO_LENGTH}, + { 'CAPR', nullptr, Load_CAPR, nullptr, nullptr, CH_RIFF | CH_AUTO_LENGTH}, + { 'ECMY', Save_ECMY, Load_ECMY, nullptr, nullptr, CH_RIFF | CH_LAST}, }; diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -68,7 +68,7 @@ static Engine* CallocEngine() */ static void FreeEngine(Engine *e) { - if (e != NULL) { + if (e != nullptr) { e->~Engine(); free(e); } @@ -141,7 +141,7 @@ void CopyTempEngineData() e->preview_wait = se->preview_wait; e->company_avail = se->company_avail; e->company_hidden = se->company_hidden; - if (se->name != NULL) e->name = stredup(se->name); + if (se->name != nullptr) e->name = stredup(se->name); } /* Get rid of temporary data */ @@ -197,7 +197,7 @@ static void Load_EIDS() } extern const ChunkHandler _engine_chunk_handlers[] = { - { 'EIDS', Save_EIDS, Load_EIDS, NULL, NULL, CH_ARRAY }, - { 'ENGN', Save_ENGN, Load_ENGN, NULL, NULL, CH_ARRAY }, - { 'ENGS', NULL, Load_ENGS, NULL, NULL, CH_RIFF | CH_LAST }, + { 'EIDS', Save_EIDS, Load_EIDS, nullptr, nullptr, CH_ARRAY }, + { 'ENGN', Save_ENGN, Load_ENGN, nullptr, nullptr, CH_ARRAY }, + { 'ENGS', nullptr, Load_ENGS, nullptr, nullptr, CH_RIFF | CH_LAST }, }; diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -52,19 +52,19 @@ static void SaveReal_GSDT(int *index_ptr _game_saveload_settings[0] = '\0'; config->SettingsToString(_game_saveload_settings, lastof(_game_saveload_settings)); - SlObject(NULL, _game_script); + SlObject(nullptr, _game_script); Game::Save(); } static void Load_GSDT() { /* Free all current data */ - GameConfig::GetConfig(GameConfig::SSS_FORCE_GAME)->Change(NULL); + GameConfig::GetConfig(GameConfig::SSS_FORCE_GAME)->Change(nullptr); if ((CompanyID)SlIterateArray() == (CompanyID)-1) return; _game_saveload_version = -1; - SlObject(NULL, _game_script); + SlObject(nullptr, _game_script); if (_networking && !_network_server) { GameInstance::LoadEmpty(); @@ -110,7 +110,7 @@ static void Load_GSDT() static void Save_GSDT() { SlSetArrayIndex(0); - SlAutolength((AutolengthProc *)SaveReal_GSDT, NULL); + SlAutolength((AutolengthProc *)SaveReal_GSDT, nullptr); } extern GameStrings *_current_data; @@ -134,10 +134,10 @@ static void SaveReal_GSTR(const Language _game_saveload_string = ls->language; _game_saveload_strings = (uint)ls->lines.size(); - SlObject(NULL, _game_language_header); + SlObject(nullptr, _game_language_header); for (const auto &i : ls->lines) { _game_saveload_string = i.c_str(); - SlObject(NULL, _game_language_string); + SlObject(nullptr, _game_language_string); } } @@ -147,22 +147,22 @@ static void Load_GSTR() _current_data = new GameStrings(); while (SlIterateArray() != -1) { - _game_saveload_string = NULL; - SlObject(NULL, _game_language_header); + _game_saveload_string = nullptr; + SlObject(nullptr, _game_language_header); - std::unique_ptr ls(new LanguageStrings(_game_saveload_string != NULL ? _game_saveload_string : "")); + std::unique_ptr ls(new LanguageStrings(_game_saveload_string != nullptr ? _game_saveload_string : "")); for (uint i = 0; i < _game_saveload_strings; i++) { - SlObject(NULL, _game_language_string); - ls->lines.emplace_back(_game_saveload_string != NULL ? _game_saveload_string : ""); + SlObject(nullptr, _game_language_string); + ls->lines.emplace_back(_game_saveload_string != nullptr ? _game_saveload_string : ""); } _current_data->raw_strings.push_back(std::move(ls)); } - /* If there were no strings in the savegame, set GameStrings to NULL */ + /* If there were no strings in the savegame, set GameStrings to nullptr */ if (_current_data->raw_strings.size() == 0) { delete _current_data; - _current_data = NULL; + _current_data = nullptr; return; } @@ -172,7 +172,7 @@ static void Load_GSTR() static void Save_GSTR() { - if (_current_data == NULL) return; + if (_current_data == nullptr) return; for (uint i = 0; i < _current_data->raw_strings.size(); i++) { SlSetArrayIndex(i); @@ -181,6 +181,6 @@ static void Save_GSTR() } extern const ChunkHandler _game_chunk_handlers[] = { - { 'GSTR', Save_GSTR, Load_GSTR, NULL, NULL, CH_ARRAY }, - { 'GSDT', Save_GSDT, Load_GSDT, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'GSTR', Save_GSTR, Load_GSTR, nullptr, nullptr, CH_ARRAY }, + { 'GSDT', Save_GSDT, Load_GSDT, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp --- a/src/saveload/gamelog_sl.cpp +++ b/src/saveload/gamelog_sl.cpp @@ -106,7 +106,7 @@ assert_compile(lengthof(_glog_desc) == G static void Load_GLOG_common(LoggedAction *&gamelog_action, uint &gamelog_actions) { - assert(gamelog_action == NULL); + assert(gamelog_action == nullptr); assert(gamelog_actions == 0); GamelogActionType at; @@ -117,7 +117,7 @@ static void Load_GLOG_common(LoggedActio la->at = at; SlObject(la, _glog_action_desc); // has to be saved after 'DATE'! - la->change = NULL; + la->change = nullptr; la->changes = 0; GamelogChangeType ct; @@ -125,7 +125,7 @@ static void Load_GLOG_common(LoggedActio la->change = ReallocT(la->change, la->changes + 1); LoggedChange *lc = &la->change[la->changes++]; - /* for SLE_STR, pointer has to be valid! so make it NULL */ + /* for SLE_STR, pointer has to be valid! so make it nullptr */ memset(lc, 0, sizeof(*lc)); lc->ct = ct; @@ -179,5 +179,5 @@ static void Check_GLOG() } extern const ChunkHandler _gamelog_chunk_handlers[] = { - { 'GLOG', Save_GLOG, Load_GLOG, NULL, Check_GLOG, CH_RIFF | CH_LAST } + { 'GLOG', Save_GLOG, Load_GLOG, nullptr, Check_GLOG, CH_RIFF | CH_LAST } }; diff --git a/src/saveload/goal_sl.cpp b/src/saveload/goal_sl.cpp --- a/src/saveload/goal_sl.cpp +++ b/src/saveload/goal_sl.cpp @@ -45,5 +45,5 @@ static void Load_GOAL() } extern const ChunkHandler _goal_chunk_handlers[] = { - { 'GOAL', Save_GOAL, Load_GOAL, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'GOAL', Save_GOAL, Load_GOAL, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -61,5 +61,5 @@ static void Load_GRPS() } extern const ChunkHandler _group_chunk_handlers[] = { - { 'GRPS', Save_GRPS, Load_GRPS, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'GRPS', Save_GRPS, Load_GRPS, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -183,9 +183,9 @@ static void Load_ITBL() } extern const ChunkHandler _industry_chunk_handlers[] = { - { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, NULL, CH_ARRAY}, - { 'IIDS', Save_IIDS, Load_IIDS, NULL, NULL, CH_ARRAY}, - { 'TIDS', Save_TIDS, Load_TIDS, NULL, NULL, CH_ARRAY}, - { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, NULL, NULL, CH_RIFF}, - { 'ITBL', Save_ITBL, Load_ITBL, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, nullptr, CH_ARRAY}, + { 'IIDS', Save_IIDS, Load_IIDS, nullptr, nullptr, CH_ARRAY}, + { 'TIDS', Save_TIDS, Load_TIDS, nullptr, nullptr, CH_ARRAY}, + { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, nullptr, nullptr, CH_RIFF}, + { 'ITBL', Save_ITBL, Load_ITBL, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/labelmaps_sl.cpp b/src/saveload/labelmaps_sl.cpp --- a/src/saveload/labelmaps_sl.cpp +++ b/src/saveload/labelmaps_sl.cpp @@ -119,6 +119,6 @@ static void Load_RAIL() } extern const ChunkHandler _labelmaps_chunk_handlers[] = { - { 'RAIL', Save_RAIL, Load_RAIL, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'RAIL', Save_RAIL, Load_RAIL, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -64,7 +64,7 @@ const SaveLoad *GetLinkGraphJobDesc() int setting = 0; const SettingDesc *desc = GetSettingDescription(setting); while (desc->save.cmd != SL_END) { - if (desc->desc.name != NULL && strncmp(desc->desc.name, prefix, prefixlen) == 0) { + if (desc->desc.name != nullptr && strncmp(desc->desc.name, prefix, prefixlen) == 0) { SaveLoad sl = desc->save; char *&address = reinterpret_cast(sl.address); address -= offset_gamesettings; @@ -290,7 +290,7 @@ static void Ptrs_LGRS() } extern const ChunkHandler _linkgraph_chunk_handlers[] = { - { 'LGRP', Save_LGRP, Load_LGRP, NULL, NULL, CH_ARRAY }, - { 'LGRJ', Save_LGRJ, Load_LGRJ, NULL, NULL, CH_ARRAY }, - { 'LGRS', Save_LGRS, Load_LGRS, Ptrs_LGRS, NULL, CH_LAST } + { 'LGRP', Save_LGRP, Load_LGRP, nullptr, nullptr, CH_ARRAY }, + { 'LGRJ', Save_LGRJ, Load_LGRJ, nullptr, nullptr, CH_ARRAY }, + { 'LGRS', Save_LGRS, Load_LGRS, Ptrs_LGRS, nullptr, CH_LAST } }; diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -297,15 +297,15 @@ static void Save_MAP8() extern const ChunkHandler _map_chunk_handlers[] = { - { 'MAPS', Save_MAPS, Load_MAPS, NULL, Check_MAPS, CH_RIFF }, - { 'MAPT', Save_MAPT, Load_MAPT, NULL, NULL, CH_RIFF }, - { 'MAPH', Save_MAPH, Load_MAPH, NULL, NULL, CH_RIFF }, - { 'MAPO', Save_MAP1, Load_MAP1, NULL, NULL, CH_RIFF }, - { 'MAP2', Save_MAP2, Load_MAP2, NULL, NULL, CH_RIFF }, - { 'M3LO', Save_MAP3, Load_MAP3, NULL, NULL, CH_RIFF }, - { 'M3HI', Save_MAP4, Load_MAP4, NULL, NULL, CH_RIFF }, - { 'MAP5', Save_MAP5, Load_MAP5, NULL, NULL, CH_RIFF }, - { 'MAPE', Save_MAP6, Load_MAP6, NULL, NULL, CH_RIFF }, - { 'MAP7', Save_MAP7, Load_MAP7, NULL, NULL, CH_RIFF }, - { 'MAP8', Save_MAP8, Load_MAP8, NULL, NULL, CH_RIFF | CH_LAST }, + { 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_RIFF }, + { 'MAPT', Save_MAPT, Load_MAPT, nullptr, nullptr, CH_RIFF }, + { 'MAPH', Save_MAPH, Load_MAPH, nullptr, nullptr, CH_RIFF }, + { 'MAPO', Save_MAP1, Load_MAP1, nullptr, nullptr, CH_RIFF }, + { 'MAP2', Save_MAP2, Load_MAP2, nullptr, nullptr, CH_RIFF }, + { 'M3LO', Save_MAP3, Load_MAP3, nullptr, nullptr, CH_RIFF }, + { 'M3HI', Save_MAP4, Load_MAP4, nullptr, nullptr, CH_RIFF }, + { 'MAP5', Save_MAP5, Load_MAP5, nullptr, nullptr, CH_RIFF }, + { 'MAPE', Save_MAP6, Load_MAP6, nullptr, nullptr, CH_RIFF }, + { 'MAP7', Save_MAP7, Load_MAP7, nullptr, nullptr, CH_RIFF }, + { 'MAP8', Save_MAP8, Load_MAP8, nullptr, nullptr, CH_RIFF | CH_LAST }, }; diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -36,7 +36,7 @@ void SaveViewportBeforeSaveGame() { const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); - if (w != NULL) { + if (w != nullptr) { _saved_scrollpos_x = w->viewport->scrollpos_x; _saved_scrollpos_y = w->viewport->scrollpos_y; _saved_scrollpos_zoom = w->viewport->zoom; @@ -151,6 +151,6 @@ static void SaveLoad_VIEW() } extern const ChunkHandler _misc_chunk_handlers[] = { - { 'DATE', SaveLoad_DATE, SaveLoad_DATE, NULL, Check_DATE, CH_RIFF}, - { 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, NULL, NULL, CH_RIFF | CH_LAST}, + { 'DATE', SaveLoad_DATE, SaveLoad_DATE, nullptr, Check_DATE, CH_RIFF}, + { 'VIEW', SaveLoad_VIEW, SaveLoad_VIEW, nullptr, nullptr, CH_RIFF | CH_LAST}, }; diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp --- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -73,7 +73,7 @@ static void Save_NGRF() { int index = 0; - for (GRFConfig *c = _grfconfig; c != NULL; c = c->next) { + for (GRFConfig *c = _grfconfig; c != nullptr; c = c->next) { if (HasBit(c->flags, GCF_STATIC)) continue; SlSetArrayIndex(index++); SlObject(c, _grfconfig_desc); @@ -98,7 +98,7 @@ static void Load_NGRF() if (_game_mode == GM_MENU) { /* Intro game must not have NewGRF. */ - if (_grfconfig != NULL) SlErrorCorrupt("The intro game must not use NewGRF"); + if (_grfconfig != nullptr) SlErrorCorrupt("The intro game must not use NewGRF"); /* Activate intro NewGRFs (townnames) */ ResetGRFConfig(false); @@ -114,5 +114,5 @@ static void Check_NGRF() } extern const ChunkHandler _newgrf_chunk_handlers[] = { - { 'NGRF', Save_NGRF, Load_NGRF, NULL, Check_NGRF, CH_ARRAY | CH_LAST } + { 'NGRF', Save_NGRF, Load_NGRF, nullptr, Check_NGRF, CH_ARRAY | CH_LAST } }; diff --git a/src/saveload/object_sl.cpp b/src/saveload/object_sl.cpp --- a/src/saveload/object_sl.cpp +++ b/src/saveload/object_sl.cpp @@ -74,6 +74,6 @@ static void Load_OBID() } extern const ChunkHandler _object_chunk_handlers[] = { - { 'OBID', Save_OBID, Load_OBID, NULL, NULL, CH_ARRAY }, - { 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, NULL, CH_ARRAY | CH_LAST}, + { 'OBID', Save_OBID, Load_OBID, nullptr, nullptr, CH_ARRAY }, + { 'OBJS', Save_OBJS, Load_OBJS, Ptrs_OBJS, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -154,11 +154,11 @@ bool LoadChunk(LoadgameState *ls, void * default: NOT_REACHED(); } - /* When both pointers are NULL, we are just skipping data */ - if (base_ptr == NULL && chunk->ptr == NULL) continue; + /* When both pointers are nullptr, we are just skipping data */ + if (base_ptr == nullptr && chunk->ptr == nullptr) continue; /* Writing to the var: bits 8 to 15 have the VAR type */ - if (chunk->ptr == NULL) ptr = base_ptr + chunk->offset; + if (chunk->ptr == nullptr) ptr = base_ptr + chunk->offset; /* Write the data */ switch (GetOldChunkVarType(chunk->type)) { @@ -174,7 +174,7 @@ bool LoadChunk(LoadgameState *ls, void * } /* Increase pointer base for arrays when looping */ - if (chunk->amount > 1 && chunk->ptr != NULL) ptr += CalcOldVarLen(chunk->type); + if (chunk->amount > 1 && chunk->ptr != nullptr) ptr += CalcOldVarLen(chunk->type); } } } @@ -259,7 +259,7 @@ static SavegameType DetermineOldSavegame } } - if (title != NULL) { + if (title != nullptr) { switch (type) { case SGT_TTO: title = strecpy(title, "(TTO) ", last); break; case SGT_TTD: title = strecpy(title, "(TTD) ", last); break; @@ -284,14 +284,14 @@ bool LoadOldSaveGame(const char *file) /* Open file */ ls.file = FioFOpenFile(file, "rb", NO_DIRECTORY); - if (ls.file == NULL) { + if (ls.file == nullptr) { DEBUG(oldloader, 0, "Cannot open file '%s'", file); return false; } - SavegameType type = DetermineOldSavegameType(ls.file, NULL, NULL); + SavegameType type = DetermineOldSavegameType(ls.file, nullptr, nullptr); - LoadOldMainProc *proc = NULL; + LoadOldMainProc *proc = nullptr; switch (type) { case SGT_TTO: proc = &LoadTTOMain; break; @@ -303,7 +303,7 @@ bool LoadOldSaveGame(const char *file) bool game_loaded; try { - game_loaded = proc != NULL && proc(&ls); + game_loaded = proc != nullptr && proc(&ls); } catch (...) { game_loaded = false; } @@ -323,7 +323,7 @@ void GetOldSaveGameName(const char *file { FILE *f = FioFOpenFile(file, "rb", NO_DIRECTORY); - if (f == NULL) { + if (f == nullptr) { *title = '\0'; return; } diff --git a/src/saveload/oldloader.h b/src/saveload/oldloader.h --- a/src/saveload/oldloader.h +++ b/src/saveload/oldloader.h @@ -90,7 +90,7 @@ struct OldChunks { uint32 amount; ///< Amount of fields void *ptr; ///< Pointer where to save the data (may only be set if offset is 0) - uint offset; ///< Offset from basepointer (may only be set if ptr is NULL) + uint offset; ///< Offset from basepointer (may only be set if ptr is nullptr) OldChunkProc *proc; ///< Pointer to function that is called with OC_CHUNK }; @@ -125,12 +125,12 @@ static inline uint32 ReadUint32(Loadgame * - OCL_CHUNK: load another proc to load a part of the savegame, 'amount' times * - OCL_ASSERT: to check if we are really at the place we expect to be.. because old savegames are too binary to be sure ;) */ -#define OCL_SVAR(type, base, offset) { type, 1, NULL, (uint)cpp_offsetof(base, offset), NULL } -#define OCL_VAR(type, amount, pointer) { type, amount, pointer, 0, NULL } -#define OCL_END() { OC_END, 0, NULL, 0, NULL } -#define OCL_CNULL(type, amount) { OC_NULL | type, amount, NULL, 0, NULL } -#define OCL_CCHUNK(type, amount, proc) { OC_CHUNK | type, amount, NULL, 0, proc } -#define OCL_ASSERT(type, size) { OC_ASSERT | type, 1, NULL, size, NULL } +#define OCL_SVAR(type, base, offset) { type, 1, nullptr, (uint)cpp_offsetof(base, offset), nullptr } +#define OCL_VAR(type, amount, pointer) { type, amount, pointer, 0, nullptr } +#define OCL_END() { OC_END, 0, nullptr, 0, nullptr } +#define OCL_CNULL(type, amount) { OC_NULL | type, amount, nullptr, 0, nullptr } +#define OCL_CCHUNK(type, amount, proc) { OC_CHUNK | type, amount, nullptr, 0, proc } +#define OCL_ASSERT(type, size) { OC_ASSERT | type, 1, nullptr, size, nullptr } #define OCL_NULL(amount) OCL_CNULL((OldChunkType)0, amount) #define OCL_CHUNK(amount, proc) OCL_CCHUNK((OldChunkType)0, amount, proc) diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -178,7 +178,7 @@ void FixOldVehicles() FOR_ALL_VEHICLES(v) { if ((size_t)v->next == 0xFFFF) { - v->next = NULL; + v->next = nullptr; } else { v->next = Vehicle::GetIfValid((size_t)v->next); } @@ -452,7 +452,7 @@ static bool FixTTOEngines() e->preview_company = INVALID_COMPANY; e->preview_asked = (CompanyMask)-1; e->preview_wait = 0; - e->name = NULL; + e->name = nullptr; } return true; @@ -621,7 +621,7 @@ static const OldChunks order_chunk[] = { static bool LoadOldOrder(LoadgameState *ls, int num) { - if (!LoadChunk(ls, NULL, order_chunk)) return false; + if (!LoadChunk(ls, nullptr, order_chunk)) return false; Order *o = new (num) Order(); o->AssignOrder(UnpackOldOrder(_old_order)); @@ -632,7 +632,7 @@ static bool LoadOldOrder(LoadgameState * /* Relink the orders to each other (in the orders for one vehicle are behind each other, * with an invalid order (OT_NOTHING) as indication that it is the last order */ Order *prev = Order::GetIfValid(num - 1); - if (prev != NULL) prev->next = o; + if (prev != nullptr) prev->next = o; } return true; @@ -646,7 +646,7 @@ static bool LoadOldAnimTileList(Loadgame OCL_END () }; - if (!LoadChunk(ls, NULL, anim_chunk)) return false; + if (!LoadChunk(ls, nullptr, anim_chunk)) return false; /* The first zero in the loaded array indicates the end of the list. */ for (int i = 0; i < 256; i++) { @@ -671,7 +671,7 @@ static bool LoadOldDepot(LoadgameState * if (d->xy != 0) { /* In some cases, there could be depots referencing invalid town. */ Town *t = Town::GetIfValid(RemapTownIndex(_old_town_index)); - if (t == NULL) t = Town::GetRandom(); + if (t == nullptr) t = Town::GetRandom(); d->town = t; } else { delete d; @@ -876,7 +876,7 @@ static bool LoadOldCompanyYearly(Loadgam if (_savegame_type == SGT_TTO && i == 6) { _old_yearly = 0; // property maintenance } else { - if (!LoadChunk(ls, NULL, _company_yearly_chunk)) return false; + if (!LoadChunk(ls, nullptr, _company_yearly_chunk)) return false; } c->yearly_expenses[num][i] = _old_yearly; @@ -1106,8 +1106,8 @@ static bool LoadOldVehicleUnion(Loadgame uint temp = ls->total_read; bool res; - if (v == NULL) { - res = LoadChunk(ls, NULL, vehicle_empty_chunk); + if (v == nullptr) { + res = LoadChunk(ls, nullptr, vehicle_empty_chunk); } else { switch (v->type) { default: SlErrorCorrupt("Invalid vehicle type"); @@ -1240,7 +1240,7 @@ bool LoadOldVehicle(LoadgameState *ls, i uint type = ReadByte(ls); switch (type) { default: return false; - case 0x00 /* VEH_INVALID */: v = NULL; break; + case 0x00 /* VEH_INVALID */: v = nullptr; break; case 0x25 /* MONORAIL */: case 0x20 /* VEH_TRAIN */: v = new (_current_vehicle_id) Train(); break; case 0x21 /* VEH_ROAD */: v = new (_current_vehicle_id) RoadVehicle(); break; @@ -1251,7 +1251,7 @@ bool LoadOldVehicle(LoadgameState *ls, i } if (!LoadChunk(ls, v, vehicle_chunk)) return false; - if (v == NULL) continue; + if (v == nullptr) continue; v->refit_cap = v->cargo_cap; SpriteID sprite = v->sprite_seq.seq[0].sprite; @@ -1318,7 +1318,7 @@ bool LoadOldVehicle(LoadgameState *ls, i /* Read the vehicle type and allocate the right vehicle */ switch (ReadByte(ls)) { default: SlErrorCorrupt("Invalid vehicle type"); - case 0x00 /* VEH_INVALID */: v = NULL; break; + case 0x00 /* VEH_INVALID */: v = nullptr; break; case 0x10 /* VEH_TRAIN */: v = new (_current_vehicle_id) Train(); break; case 0x11 /* VEH_ROAD */: v = new (_current_vehicle_id) RoadVehicle(); break; case 0x12 /* VEH_SHIP */: v = new (_current_vehicle_id) Ship(); break; @@ -1328,7 +1328,7 @@ bool LoadOldVehicle(LoadgameState *ls, i } if (!LoadChunk(ls, v, vehicle_chunk)) return false; - if (v == NULL) continue; + if (v == nullptr) continue; _old_vehicle_names[_current_vehicle_id] = RemapOldStringID(_old_string_id); @@ -1756,9 +1756,9 @@ bool LoadTTDMain(LoadgameState *ls) /* Load the biggest chunk */ SmallStackSafeStackAlloc map3; _old_map3 = map3.data; - _old_vehicle_names = NULL; + _old_vehicle_names = nullptr; try { - if (!LoadChunk(ls, NULL, main_chunk)) { + if (!LoadChunk(ls, nullptr, main_chunk)) { DEBUG(oldloader, 0, "Loading failed"); free(_old_vehicle_names); return false; @@ -1803,7 +1803,7 @@ bool LoadTTOMain(LoadgameState *ls) _old_vehicle_names = vehnames.data; /* Load the biggest chunk */ - if (!LoadChunk(ls, NULL, main_chunk)) { + if (!LoadChunk(ls, nullptr, main_chunk)) { DEBUG(oldloader, 0, "Loading failed"); return false; } diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -178,7 +178,7 @@ static void Load_ORDR() /* The orders were built like this: * While the order is valid, set the previous will get its next pointer set */ Order *prev = Order::GetIfValid(order_index - 1); - if (prev != NULL) prev->next = o; + if (prev != nullptr) prev->next = o; } } else { int index; @@ -306,7 +306,7 @@ static void Ptrs_BKOR() } extern const ChunkHandler _order_chunk_handlers[] = { - { 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, NULL, CH_ARRAY}, - { 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, NULL, CH_ARRAY}, - { 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, NULL, CH_ARRAY | CH_LAST}, + { 'BKOR', Save_BKOR, Load_BKOR, Ptrs_BKOR, nullptr, CH_ARRAY}, + { 'ORDR', Save_ORDR, Load_ORDR, Ptrs_ORDR, nullptr, CH_ARRAY}, + { 'ORDL', Save_ORDL, Load_ORDL, Ptrs_ORDL, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -95,7 +95,7 @@ struct ReadBuffer { * Initialise our variables. * @param reader The filter to actually read data. */ - ReadBuffer(LoadFilter *reader) : bufp(NULL), bufe(NULL), reader(reader), read(0) + ReadBuffer(LoadFilter *reader) : bufp(nullptr), bufe(nullptr), reader(reader), read(0) { } @@ -131,7 +131,7 @@ struct MemoryDumper { byte *bufe; ///< End of the buffer we write to. /** Initialise our variables. */ - MemoryDumper() : buf(NULL), bufe(NULL) + MemoryDumper() : buf(nullptr), bufe(nullptr) { } @@ -247,7 +247,7 @@ extern const ChunkHandler _airport_chunk extern const ChunkHandler _object_chunk_handlers[]; extern const ChunkHandler _persistent_storage_chunk_handlers[]; -/** Array of all chunks in a savegame, \c NULL terminated. */ +/** Array of all chunks in a savegame, \c nullptr terminated. */ static const ChunkHandler * const _chunk_handlers[] = { _gamelog_chunk_handlers, _map_chunk_handlers, @@ -282,7 +282,7 @@ static const ChunkHandler * const _chunk _airport_chunk_handlers, _object_chunk_handlers, _persistent_storage_chunk_handlers, - NULL, + nullptr, }; /** @@ -290,10 +290,10 @@ static const ChunkHandler * const _chunk * @param ch the chunk handler iterator */ #define FOR_ALL_CHUNK_HANDLERS(ch) \ - for (const ChunkHandler * const *chsc = _chunk_handlers; *chsc != NULL; chsc++) \ - for (const ChunkHandler *ch = *chsc; ch != NULL; ch = (ch->flags & CH_LAST) ? NULL : ch + 1) - -/** Null all pointers (convert index -> NULL) */ + for (const ChunkHandler * const *chsc = _chunk_handlers; *chsc != nullptr; chsc++) \ + for (const ChunkHandler *ch = *chsc; ch != nullptr; ch = (ch->flags & CH_LAST) ? nullptr : ch + 1) + +/** Null all pointers (convert index -> nullptr) */ static void SlNullPointers() { _sl.action = SLA_NULL; @@ -306,7 +306,7 @@ static void SlNullPointers() DEBUG(sl, 1, "Nulling pointers"); FOR_ALL_CHUNK_HANDLERS(ch) { - if (ch->ptrs_proc != NULL) { + if (ch->ptrs_proc != nullptr) { DEBUG(sl, 2, "Nulling pointers for %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id); ch->ptrs_proc(); } @@ -331,14 +331,14 @@ void NORETURN SlError(StringID string, c if (_sl.action == SLA_LOAD_CHECK) { _load_check_data.error = string; free(_load_check_data.error_data); - _load_check_data.error_data = (extra_msg == NULL) ? NULL : stredup(extra_msg); + _load_check_data.error_data = (extra_msg == nullptr) ? nullptr : stredup(extra_msg); } else { _sl.error_str = string; free(_sl.extra_msg); - _sl.extra_msg = (extra_msg == NULL) ? NULL : stredup(extra_msg); + _sl.extra_msg = (extra_msg == nullptr) ? nullptr : stredup(extra_msg); } - /* We have to NULL all pointers here; we might be in a state where + /* We have to nullptr all pointers here; we might be in a state where * the pointers are actually filled with indices, which means that * when we access them during cleaning the pool dereferences of * those indices will be made with segmentation faults as result. */ @@ -389,7 +389,7 @@ static std::thread _save_thread; static void SetAsyncSaveFinish(AsyncSaveFinishProc proc) { if (_exit_game) return; - while (_async_save_finish.load(std::memory_order_acquire) != NULL) CSleep(10); + while (_async_save_finish.load(std::memory_order_acquire) != nullptr) CSleep(10); _async_save_finish.store(proc, std::memory_order_release); } @@ -399,8 +399,8 @@ static void SetAsyncSaveFinish(AsyncSave */ void ProcessAsyncSaveFinish() { - AsyncSaveFinishProc proc = _async_save_finish.exchange(NULL, std::memory_order_acq_rel); - if (proc == NULL) return; + AsyncSaveFinishProc proc = _async_save_finish.exchange(nullptr, std::memory_order_acq_rel); + if (proc == nullptr) return; proc(); @@ -863,7 +863,7 @@ static void SlSaveLoadConv(void *ptr, Va */ static inline size_t SlCalcNetStringLen(const char *ptr, size_t length) { - if (ptr == NULL) return 0; + if (ptr == nullptr) return 0; return min(strlen(ptr), length - 1); } @@ -948,7 +948,7 @@ static void SlString(void *ptr, size_t l case SLE_VAR_STRQ: // Malloc'd string, free previous incarnation, and allocate free(*(char **)ptr); if (len == 0) { - *(char **)ptr = NULL; + *(char **)ptr = nullptr; return; } else { *(char **)ptr = MallocT(len + 1); // terminating '\0' @@ -1043,7 +1043,7 @@ void SlArray(void *array, size_t length, * Pointers cannot be saved to a savegame, so this functions gets * the index of the item, and if not available, it hussles with * pointers (looks really bad :() - * Remember that a NULL item has value 0, and all + * Remember that a nullptr item has value 0, and all * indices have +1, so vehicle 0 is saved as index 1. * @param obj The object that we want to get the index of * @param rt SLRefType type of the object the index is being sought of @@ -1053,7 +1053,7 @@ static size_t ReferenceToInt(const void { assert(_sl.action == SLA_SAVE); - if (obj == NULL) return 0; + if (obj == nullptr) return 0; switch (rt) { case REF_VEHICLE_OLD: // Old vehicles we save as new ones @@ -1076,7 +1076,7 @@ static size_t ReferenceToInt(const void * Pointers cannot be loaded from a savegame, so this function * gets the index from the savegame and returns the appropriate * pointer from the already loaded base. - * Remember that an index of 0 is a NULL pointer so all indices + * Remember that an index of 0 is a nullptr pointer so all indices * are +1 so vehicle 0 is saved as 1. * @param index The index that is being converted to a pointer * @param rt SLRefType type of the object the pointer is sought of @@ -1094,8 +1094,8 @@ static void *IntToReference(size_t index rt = REF_VEHICLE; } - /* No need to look up NULL pointers, just return immediately */ - if (index == (rt == REF_VEHICLE_OLD ? 0xFFFF : 0)) return NULL; + /* No need to look up nullptr pointers, just return immediately */ + if (index == (rt == REF_VEHICLE_OLD ? 0xFFFF : 0)) return nullptr; /* Correct index. Old vehicles were saved differently: * invalid vehicle was 0xFFFF, now we use 0x0000 for everything invalid. */ @@ -1109,7 +1109,7 @@ static void *IntToReference(size_t index case REF_ORDER: if (Order::IsValidID(index)) return Order::Get(index); /* in old versions, invalid order was used to mark end of order list */ - if (IsSavegameVersionBefore(SLV_5, 2)) return NULL; + if (IsSavegameVersionBefore(SLV_5, 2)) return nullptr; SlErrorCorrupt("Referencing invalid Order"); case REF_VEHICLE_OLD: @@ -1499,7 +1499,7 @@ bool SlObjectMember(void *ptr, const Sav *(void **)ptr = IntToReference(*(size_t *)ptr, (SLRefType)conv); break; case SLA_NULL: - *(void **)ptr = NULL; + *(void **)ptr = nullptr; break; default: NOT_REACHED(); } @@ -1565,7 +1565,7 @@ void SlObject(void *object, const SaveLo */ void SlGlobList(const SaveLoadGlobVarList *sldg) { - SlObject(NULL, (const SaveLoad*)sldg); + SlObject(nullptr, (const SaveLoad*)sldg); } /** @@ -1637,7 +1637,7 @@ static void SlLoadChunk(const ChunkHandl /** * Load a chunk of data for checking savegames. - * If the chunkhandler is NULL, the chunk is skipped. + * If the chunkhandler is nullptr, the chunk is skipped. * @param ch The chunkhandler that will be used for the operation */ static void SlLoadCheckChunk(const ChunkHandler *ch) @@ -1708,7 +1708,7 @@ static inline void SlStubSaveProc2(void */ static void SlStubSaveProc() { - SlAutolength(SlStubSaveProc2, NULL); + SlAutolength(SlStubSaveProc2, nullptr); } /** @@ -1721,7 +1721,7 @@ static void SlSaveChunk(const ChunkHandl ChunkSaveLoadProc *proc = ch->save_proc; /* Don't save any chunk information if there is no save handler. */ - if (proc == NULL) return; + if (proc == nullptr) return; SlWriteUint32(ch->id); DEBUG(sl, 2, "Saving chunk %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id); @@ -1773,7 +1773,7 @@ static void SlSaveChunks() static const ChunkHandler *SlFindChunkHandler(uint32 id) { FOR_ALL_CHUNK_HANDLERS(ch) if (ch->id == id) return ch; - return NULL; + return nullptr; } /** Load all chunks */ @@ -1786,7 +1786,7 @@ static void SlLoadChunks() DEBUG(sl, 2, "Loading chunk %c%c%c%c", id >> 24, id >> 16, id >> 8, id); ch = SlFindChunkHandler(id); - if (ch == NULL) SlErrorCorrupt("Unknown chunk type"); + if (ch == nullptr) SlErrorCorrupt("Unknown chunk type"); SlLoadChunk(ch); } } @@ -1801,7 +1801,7 @@ static void SlLoadCheckChunks() DEBUG(sl, 2, "Loading chunk %c%c%c%c", id >> 24, id >> 16, id >> 8, id); ch = SlFindChunkHandler(id); - if (ch == NULL) SlErrorCorrupt("Unknown chunk type"); + if (ch == nullptr) SlErrorCorrupt("Unknown chunk type"); SlLoadCheckChunk(ch); } } @@ -1814,7 +1814,7 @@ static void SlFixPointers() DEBUG(sl, 1, "Fixing pointers"); FOR_ALL_CHUNK_HANDLERS(ch) { - if (ch->ptrs_proc != NULL) { + if (ch->ptrs_proc != nullptr) { DEBUG(sl, 2, "Fixing pointers for %c%c%c%c", ch->id >> 24, ch->id >> 16, ch->id >> 8, ch->id); ch->ptrs_proc(); } @@ -1835,24 +1835,24 @@ struct FileReader : LoadFilter { * Create the file reader, so it reads from a specific file. * @param file The file to read from. */ - FileReader(FILE *file) : LoadFilter(NULL), file(file), begin(ftell(file)) + FileReader(FILE *file) : LoadFilter(nullptr), file(file), begin(ftell(file)) { } /** Make sure everything is cleaned up. */ ~FileReader() { - if (this->file != NULL) fclose(this->file); - this->file = NULL; + if (this->file != nullptr) fclose(this->file); + this->file = nullptr; /* Make sure we don't double free. */ - _sl.sf = NULL; + _sl.sf = nullptr; } size_t Read(byte *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ - if (this->file == NULL) return 0; + if (this->file == nullptr) return 0; return fread(buf, 1, size, this->file); } @@ -1874,7 +1874,7 @@ struct FileWriter : SaveFilter { * Create the file writer, so it writes to a specific file. * @param file The file to write to. */ - FileWriter(FILE *file) : SaveFilter(NULL), file(file) + FileWriter(FILE *file) : SaveFilter(nullptr), file(file) { } @@ -1884,21 +1884,21 @@ struct FileWriter : SaveFilter { this->Finish(); /* Make sure we don't double free. */ - _sl.sf = NULL; + _sl.sf = nullptr; } void Write(byte *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ - if (this->file == NULL) return; + if (this->file == nullptr) return; if (fwrite(buf, 1, size, this->file) != size) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE); } void Finish() override { - if (this->file != NULL) fclose(this->file); - this->file = NULL; + if (this->file != nullptr) fclose(this->file); + this->file = nullptr; } }; @@ -1953,7 +1953,7 @@ struct LZOLoadFilter : LoadFilter { if (tmp[0] != lzo_adler32(0, out, size + sizeof(uint32))) SlErrorCorrupt("Bad checksum"); /* Decompress */ - int ret = lzo1x_decompress_safe(out + sizeof(uint32) * 1, size, buf, &len, NULL); + int ret = lzo1x_decompress_safe(out + sizeof(uint32) * 1, size, buf, &len, nullptr); if (ret != LZO_E_OK) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); return len; } @@ -2147,7 +2147,7 @@ struct ZlibSaveFilter : SaveFilter { void Finish() override { - this->WriteLoop(NULL, 0, Z_FINISH); + this->WriteLoop(nullptr, 0, Z_FINISH); this->chain->Finish(); } }; @@ -2266,7 +2266,7 @@ struct LZMASaveFilter : SaveFilter { void Finish() override { - this->WriteLoop(NULL, 0, LZMA_FINISH); + this->WriteLoop(nullptr, 0, LZMA_FINISH); this->chain->Finish(); } }; @@ -2296,7 +2296,7 @@ static const SaveLoadFormat _saveload_fo /* Roughly 75% larger than zlib level 6 at only ~7% of the CPU usage. */ {"lzo", TO_BE32X('OTTD'), CreateLoadFilter, CreateSaveFilter, 0, 0, 0}, #else - {"lzo", TO_BE32X('OTTD'), NULL, NULL, 0, 0, 0}, + {"lzo", TO_BE32X('OTTD'), nullptr, nullptr, 0, 0, 0}, #endif /* Roughly 5 times larger at only 1% of the CPU usage over zlib level 6. */ {"none", TO_BE32X('OTTN'), CreateLoadFilter, CreateSaveFilter, 0, 0, 0}, @@ -2306,7 +2306,7 @@ static const SaveLoadFormat _saveload_fo * 1 is "only" 3 times as fast. Level 0 results in uncompressed savegames at about 8 times the cost of "none". */ {"zlib", TO_BE32X('OTTZ'), CreateLoadFilter, CreateSaveFilter, 0, 6, 9}, #else - {"zlib", TO_BE32X('OTTZ'), NULL, NULL, 0, 0, 0}, + {"zlib", TO_BE32X('OTTZ'), nullptr, nullptr, 0, 0, 0}, #endif #if defined(WITH_LIBLZMA) /* Level 2 compression is speed wise as fast as zlib level 6 compression (old default), but results in ~10% smaller saves. @@ -2316,14 +2316,14 @@ static const SaveLoadFormat _saveload_fo * It's OTTX and not e.g. OTTL because liblzma is part of xz-utils and .tar.xz is preferred over .tar.lzma. */ {"lzma", TO_BE32X('OTTX'), CreateLoadFilter, CreateSaveFilter, 0, 2, 9}, #else - {"lzma", TO_BE32X('OTTX'), NULL, NULL, 0, 0, 0}, + {"lzma", TO_BE32X('OTTX'), nullptr, nullptr, 0, 0, 0}, #endif }; /** * Return the savegameformat of the game. Whether it was created with ZLIB compression * uncompressed, or another type - * @param s Name of the savegame format. If NULL it picks the first available one + * @param s Name of the savegame format. If nullptr it picks the first available one * @param compression_level Output for telling what compression level we want. * @return Pointer to SaveLoadFormat struct giving all characteristics of this type of savegame */ @@ -2337,12 +2337,12 @@ static const SaveLoadFormat *GetSavegame if (!StrEmpty(s)) { /* Get the ":..." of the compression level out of the way */ char *complevel = strrchr(s, ':'); - if (complevel != NULL) *complevel = '\0'; + if (complevel != nullptr) *complevel = '\0'; for (const SaveLoadFormat *slf = &_saveload_formats[0]; slf != endof(_saveload_formats); slf++) { - if (slf->init_write != NULL && strcmp(s, slf->name) == 0) { + if (slf->init_write != nullptr && strcmp(s, slf->name) == 0) { *compression_level = slf->default_compression; - if (complevel != NULL) { + if (complevel != nullptr) { /* There is a compression level in the string. * First restore the : we removed to do proper name matching, * then move the the begin of the actual version. */ @@ -2368,7 +2368,7 @@ static const SaveLoadFormat *GetSavegame ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM, WL_CRITICAL); /* Restore the string by adding the : back */ - if (complevel != NULL) *complevel = ':'; + if (complevel != nullptr) *complevel = ':'; } *compression_level = def->default_compression; return def; @@ -2385,16 +2385,16 @@ extern bool LoadOldSaveGame(const char * static inline void ClearSaveLoadState() { delete _sl.dumper; - _sl.dumper = NULL; + _sl.dumper = nullptr; delete _sl.sf; - _sl.sf = NULL; + _sl.sf = nullptr; delete _sl.reader; - _sl.reader = NULL; + _sl.reader = nullptr; delete _sl.lf; - _sl.lf = NULL; + _sl.lf = nullptr; } /** @@ -2614,7 +2614,7 @@ static SaveOrLoadResult DoLoad(LoadFilte } /* loader for this savegame type is not implemented? */ - if (fmt->init_load == NULL) { + if (fmt->init_load == nullptr) { char err_str[64]; seprintf(err_str, lastof(err_str), "Loader for '%s' is not available.", fmt->name); SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, err_str); @@ -2769,11 +2769,11 @@ SaveOrLoadResult SaveOrLoad(const char * FILE *fh = (fop == SLO_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb); /* Make it a little easier to load savegames from the console */ - if (fh == NULL && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SAVE_DIR); - if (fh == NULL && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", BASE_DIR); - if (fh == NULL && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SCENARIO_DIR); - - if (fh == NULL) { + if (fh == nullptr && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SAVE_DIR); + if (fh == nullptr && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", BASE_DIR); + if (fh == nullptr && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SCENARIO_DIR); + + if (fh == nullptr) { SlError(fop == SLO_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -641,11 +641,11 @@ typedef SaveLoad SaveLoadGlobVarList; /** Translate values ingame to different values in the savegame and vv. */ #define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION) -#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0} -#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0} +#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, nullptr, 0} +#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, nullptr, 0} /** End marker of a struct/class save or load. */ -#define SLE_END() {false, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0} +#define SLE_END() {false, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, nullptr, 0} /** * Storage of global simple variables, references (pointers), and arrays. @@ -746,10 +746,10 @@ typedef SaveLoad SaveLoadGlobVarList; * @param from First savegame version that has the empty space. * @param to Last savegame version that has the empty space. */ -#define SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to, (void*)NULL} +#define SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to, (void*)nullptr} /** End marker of global variables save or load. */ -#define SLEG_END() {true, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0} +#define SLEG_END() {true, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, nullptr, 0} /** * Checks whether the savegame is below \a major.\a minor. @@ -813,13 +813,13 @@ static inline bool IsNumericType(VarType /** * Get the address of the variable. Which one to pick depends on the object - * pointer. If it is NULL we are dealing with global variables so the address + * pointer. If it is nullptr we are dealing with global variables so the address * is taken. If non-null only the offset is stored in the union and we need * to add this to the address of the object */ static inline void *GetVariableAddress(const void *object, const SaveLoad *sld) { - return const_cast((const byte*)(sld->global ? NULL : object) + (ptrdiff_t)sld->address); + return const_cast((const byte*)(sld->global ? nullptr : object) + (ptrdiff_t)sld->address); } int64 ReadValue(const void *ptr, VarType conv); @@ -841,7 +841,7 @@ void SlGlobList(const SaveLoadGlobVarLis void SlArray(void *array, size_t length, VarType conv); void SlObject(void *object, const SaveLoad *sld); bool SlObjectMember(void *object, const SaveLoad *sld); -void NORETURN SlError(StringID string, const char *extra_msg = NULL); +void NORETURN SlError(StringID string, const char *extra_msg = nullptr); void NORETURN SlErrorCorrupt(const char *msg); void NORETURN SlErrorCorruptFmt(const char *format, ...); diff --git a/src/saveload/saveload_filter.h b/src/saveload/saveload_filter.h --- a/src/saveload/saveload_filter.h +++ b/src/saveload/saveload_filter.h @@ -89,7 +89,7 @@ struct SaveFilter { */ virtual void Finish() { - if (this->chain != NULL) this->chain->Finish(); + if (this->chain != nullptr) this->chain->Finish(); } }; diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -68,5 +68,5 @@ static void Load_SIGN() /** Chunk handlers related to signs. */ extern const ChunkHandler _sign_chunk_handlers[] = { - { 'SIGN', Save_SIGN, Load_SIGN, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'SIGN', Save_SIGN, Load_SIGN, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -47,7 +47,7 @@ void MoveBuoysToWaypoints() VehicleType vt = ol->GetFirstSharedVehicle()->type; if (vt != VEH_SHIP && vt != VEH_TRAIN) continue; - for (Order *o = ol->GetFirstOrder(); o != NULL; o = o->next) UpdateWaypointOrder(o); + for (Order *o = ol->GetFirstOrder(); o != nullptr; o = o->next) UpdateWaypointOrder(o); } Vehicle *v; @@ -68,7 +68,7 @@ void MoveBuoysToWaypoints() Town *town = st->town; StringID string_id = st->string_id; char *name = st->name; - st->name = NULL; + st->name = nullptr; Date build_date = st->build_date; /* TTDPatch could use "buoys with rail station" for rail waypoints */ bool train = st->train_station.tile != INVALID_TILE; @@ -116,13 +116,13 @@ void AfterLoadStations() for (uint i = 0; i < st->num_specs; i++) { if (st->speclist[i].grfid == 0) continue; - st->speclist[i].spec = StationClass::GetByGrf(st->speclist[i].grfid, st->speclist[i].localidx, NULL); + st->speclist[i].spec = StationClass::GetByGrf(st->speclist[i].grfid, st->speclist[i].localidx, nullptr); } if (Station::IsExpected(st)) { Station *sta = Station::From(st); - for (const RoadStop *rs = sta->bus_stops; rs != NULL; rs = rs->next) sta->bus_station.Add(rs->xy); - for (const RoadStop *rs = sta->truck_stops; rs != NULL; rs = rs->next) sta->truck_station.Add(rs->xy); + for (const RoadStop *rs = sta->bus_stops; rs != nullptr; rs = rs->next) sta->bus_station.Add(rs->xy); + for (const RoadStop *rs = sta->truck_stops; rs != nullptr; rs = rs->next) sta->truck_station.Add(rs->xy); } StationUpdateCachedTriggers(st); @@ -544,11 +544,11 @@ static void Load_STNN() for (CargoID i = 0; i < num_cargo; i++) { SlObject(&st->goods[i], GetGoodsDesc()); FlowSaveLoad flow; - FlowStat *fs = NULL; + FlowStat *fs = nullptr; StationID prev_source = INVALID_STATION; for (uint32 j = 0; j < _num_flows; ++j) { SlObject(&flow, _flow_desc); - if (fs == NULL || prev_source != flow.source) { + if (fs == nullptr || prev_source != flow.source) { fs = &(st->goods[i].flows.insert(std::make_pair(flow.source, FlowStat(flow.via, flow.share, flow.restricted))).first->second); } else { fs->AppendShare(flow.via, flow.share, flow.restricted); @@ -638,7 +638,7 @@ static void Ptrs_ROADSTOP() } extern const ChunkHandler _station_chunk_handlers[] = { - { 'STNS', NULL, Load_STNS, Ptrs_STNS, NULL, CH_ARRAY }, - { 'STNN', Save_STNN, Load_STNN, Ptrs_STNN, NULL, CH_ARRAY }, - { 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, NULL, CH_ARRAY | CH_LAST}, + { 'STNS', nullptr, Load_STNS, Ptrs_STNS, nullptr, CH_ARRAY }, + { 'STNN', Save_STNN, Load_STNN, Ptrs_STNN, nullptr, CH_ARRAY }, + { 'ROAD', Save_ROADSTOP, Load_ROADSTOP, Ptrs_ROADSTOP, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp --- a/src/saveload/storage_sl.cpp +++ b/src/saveload/storage_sl.cpp @@ -50,5 +50,5 @@ static void Save_PSAC() /** Chunk handler for persistent storages. */ extern const ChunkHandler _persistent_storage_chunk_handlers[] = { - { 'PSAC', Save_PSAC, Load_PSAC, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'PSAC', Save_PSAC, Load_PSAC, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/story_sl.cpp b/src/saveload/story_sl.cpp --- a/src/saveload/story_sl.cpp +++ b/src/saveload/story_sl.cpp @@ -102,6 +102,6 @@ static void Load_STORY_PAGE() } extern const ChunkHandler _story_page_chunk_handlers[] = { - { 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, NULL, NULL, CH_ARRAY}, - { 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY}, + { 'STPA', Save_STORY_PAGE, Load_STORY_PAGE, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/strings_sl.cpp b/src/saveload/strings_sl.cpp --- a/src/saveload/strings_sl.cpp +++ b/src/saveload/strings_sl.cpp @@ -49,7 +49,7 @@ StringID RemapOldStringID(StringID s) } /** Location to load the old names to. */ -char *_old_name_array = NULL; +char *_old_name_array = nullptr; /** * Copy and convert old custom names to UTF-8. @@ -61,7 +61,7 @@ char *_old_name_array = NULL; char *CopyFromOldName(StringID id) { /* Is this name an (old) custom name? */ - if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return NULL; + if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return nullptr; if (IsSavegameVersionBefore(SLV_37)) { /* Allow for expansion when converted to UTF-8. */ @@ -109,7 +109,7 @@ char *CopyFromOldName(StringID id) void ResetOldNames() { free(_old_name_array); - _old_name_array = NULL; + _old_name_array = nullptr; } /** @@ -140,5 +140,5 @@ static void Load_NAME() /** Chunk handlers related to strings. */ extern const ChunkHandler _name_chunk_handlers[] = { - { 'NAME', NULL, Load_NAME, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'NAME', nullptr, Load_NAME, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/subsidy_sl.cpp b/src/saveload/subsidy_sl.cpp --- a/src/saveload/subsidy_sl.cpp +++ b/src/saveload/subsidy_sl.cpp @@ -48,5 +48,5 @@ static void Load_SUBS() } extern const ChunkHandler _subsidy_chunk_handlers[] = { - { 'SUBS', Save_SUBS, Load_SUBS, NULL, NULL, CH_ARRAY | CH_LAST}, + { 'SUBS', Save_SUBS, Load_SUBS, nullptr, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -321,6 +321,6 @@ static void Ptrs_TOWN() /** Chunk handler for towns. */ extern const ChunkHandler _town_chunk_handlers[] = { - { 'HIDS', Save_HIDS, Load_HIDS, NULL, NULL, CH_ARRAY }, - { 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, NULL, CH_ARRAY | CH_LAST}, + { 'HIDS', Save_HIDS, Load_HIDS, nullptr, nullptr, CH_ARRAY }, + { 'CITY', Save_TOWN, Load_TOWN, Ptrs_TOWN, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -36,7 +36,7 @@ void ConnectMultiheadedTrains() Train *v; FOR_ALL_TRAINS(v) { - v->other_multiheaded_part = NULL; + v->other_multiheaded_part = nullptr; } FOR_ALL_TRAINS(v) { @@ -56,8 +56,8 @@ void ConnectMultiheadedTrains() bool sequential_matching = v->IsFrontEngine(); - for (Train *u = v; u != NULL; u = u->GetNextVehicle()) { - if (u->other_multiheaded_part != NULL) continue; // we already linked this one + for (Train *u = v; u != nullptr; u = u->GetNextVehicle()) { + if (u->other_multiheaded_part != nullptr) continue; // we already linked this one if (u->IsMultiheaded()) { if (!u->IsEngine()) { @@ -70,8 +70,8 @@ void ConnectMultiheadedTrains() EngineID eid = u->engine_type; Train *w; if (sequential_matching) { - for (w = u->GetNextVehicle(); w != NULL; w = w->GetNextVehicle()) { - if (w->engine_type != eid || w->other_multiheaded_part != NULL || !w->IsMultiheaded()) continue; + for (w = u->GetNextVehicle(); w != nullptr; w = w->GetNextVehicle()) { + if (w->engine_type != eid || w->other_multiheaded_part != nullptr || !w->IsMultiheaded()) continue; /* we found a car to partner with this engine. Now we will make sure it face the right way */ if (w->IsEngine()) { @@ -82,8 +82,8 @@ void ConnectMultiheadedTrains() } } else { uint stack_pos = 0; - for (w = u->GetNextVehicle(); w != NULL; w = w->GetNextVehicle()) { - if (w->engine_type != eid || w->other_multiheaded_part != NULL || !w->IsMultiheaded()) continue; + for (w = u->GetNextVehicle(); w != nullptr; w = w->GetNextVehicle()) { + if (w->engine_type != eid || w->other_multiheaded_part != nullptr || !w->IsMultiheaded()) continue; if (w->IsEngine()) { stack_pos++; @@ -94,7 +94,7 @@ void ConnectMultiheadedTrains() } } - if (w != NULL) { + if (w != nullptr) { w->other_multiheaded_part = u; u->other_multiheaded_part = w; } else { @@ -118,7 +118,7 @@ void ConvertOldMultiheadToNew() FOR_ALL_TRAINS(t) { if (HasBit(t->subtype, 7) && ((t->subtype & ~0x80) == 0 || (t->subtype & ~0x80) == 4)) { - for (Train *u = t; u != NULL; u = u->Next()) { + for (Train *u = t; u != nullptr; u = u->Next()) { const RailVehicleInfo *rvi = RailVehInfo(u->engine_type); ClrBit(u->subtype, 7); @@ -200,7 +200,7 @@ void UpdateOldAircraft() if (a->subtype == AIR_HELICOPTER) a->Next()->Next()->cur_speed = 32; /* set new position x,y,z */ - GetAircraftFlightLevelBounds(a, &a->z_pos, NULL); + GetAircraftFlightLevelBounds(a, &a->z_pos, nullptr); SetAircraftPosition(a, gp.x, gp.y, GetAircraftFlightLevel(a)); } } @@ -252,11 +252,11 @@ void AfterLoadVehicles(bool part_of_load FOR_ALL_VEHICLES(v) { /* Reinstate the previous pointer */ - if (v->Next() != NULL) v->Next()->previous = v; - if (v->NextShared() != NULL) v->NextShared()->previous_shared = v; + if (v->Next() != nullptr) v->Next()->previous = v; + if (v->NextShared() != nullptr) v->NextShared()->previous_shared = v; if (part_of_load) v->fill_percent_te_id = INVALID_TE_ID; - v->first = NULL; + v->first = nullptr; if (v->IsGroundVehicle()) v->GetGroundVehicleCache()->first_engine = INVALID_ENGINE; } @@ -272,9 +272,9 @@ void AfterLoadVehicles(bool part_of_load std::map mapping; FOR_ALL_VEHICLES(v) { - if (v->orders.old != NULL) { + if (v->orders.old != nullptr) { if (IsSavegameVersionBefore(SLV_105)) { // Pre-105 didn't save an OrderList - if (mapping[v->orders.old] == NULL) { + if (mapping[v->orders.old] == nullptr) { /* This adds the whole shared vehicle chain for case b */ /* Creating an OrderList here is safe because the number of vehicles @@ -290,7 +290,7 @@ void AfterLoadVehicles(bool part_of_load } } } else { // OrderList was saved as such, only recalculate not saved values - if (v->PreviousShared() == NULL) { + if (v->PreviousShared() == nullptr) { v->orders.list->Initialize(v->orders.list->first, v); } } @@ -300,8 +300,8 @@ void AfterLoadVehicles(bool part_of_load FOR_ALL_VEHICLES(v) { /* Fill the first pointers */ - if (v->Previous() == NULL) { - for (Vehicle *u = v; u != NULL; u = u->Next()) { + if (v->Previous() == nullptr) { + for (Vehicle *u = v; u != nullptr; u = u->Next()) { u->first = v; } } @@ -311,12 +311,12 @@ void AfterLoadVehicles(bool part_of_load if (IsSavegameVersionBefore(SLV_105)) { /* Before 105 there was no order for shared orders, thus it messed up horribly */ FOR_ALL_VEHICLES(v) { - if (v->First() != v || v->orders.list != NULL || v->previous_shared != NULL || v->next_shared == NULL) continue; + if (v->First() != v || v->orders.list != nullptr || v->previous_shared != nullptr || v->next_shared == nullptr) continue; /* As above, allocating OrderList here is safe. */ assert(OrderList::CanAllocateItem()); - v->orders.list = new OrderList(NULL, v); - for (Vehicle *u = v; u != NULL; u = u->next_shared) { + v->orders.list = new OrderList(nullptr, v); + for (Vehicle *u = v; u != nullptr; u = u->next_shared) { u->orders.list = v->orders.list; } } @@ -392,9 +392,9 @@ void AfterLoadVehicles(bool part_of_load CheckValidVehicles(); FOR_ALL_VEHICLES(v) { - assert(v->first != NULL); + assert(v->first != nullptr); - v->trip_occupancy = CalcPercentVehicleFilled(v, NULL); + v->trip_occupancy = CalcPercentVehicleFilled(v, nullptr); switch (v->type) { case VEH_TRAIN: { @@ -502,7 +502,7 @@ void FixupTrainLengths() /* The vehicle center is now more to the front depending on vehicle length, * so we need to move all vehicles forward to cover the difference to the * old center, otherwise wagon spacing in trains would be broken upon load. */ - for (Train *u = Train::From(v); u != NULL; u = u->Next()) { + for (Train *u = Train::From(v); u != nullptr; u = u->Next()) { if (u->track == TRACK_BIT_DEPOT || (u->vehstatus & VS_CRASHED)) continue; Train *next = u->Next(); @@ -514,7 +514,7 @@ void FixupTrainLengths() if (!TrainController(u, next, false)) break; } - if (next != NULL && done < diff && u->IsFrontEngine()) { + if (next != nullptr && done < diff && u->IsFrontEngine()) { /* Pulling the front vehicle forwards failed, we either encountered a dead-end * or a red signal. To fix this, we try to move the whole train the required * space backwards and re-do the fix up of the front vehicle. */ @@ -530,14 +530,14 @@ void FixupTrainLengths() /* We moved the first vehicle which is now the last. Move it back to the * original position as we will fix up the last vehicle later in the loop. */ - for (int i = 0; i < done; i++) TrainController(u->Last(), NULL); + for (int i = 0; i < done; i++) TrainController(u->Last(), nullptr); /* Move the train backwards to get space for the first vehicle. As the stopping * distance from a line end is rounded up, move the train one unit more to cater * for front vehicles with odd lengths. */ int moved; for (moved = 0; moved < diff + 1; moved++) { - if (!TrainController(u, NULL, false)) break; + if (!TrainController(u, nullptr, false)) break; } /* Swap start<>end, start+1<>end-1, ... again. */ @@ -556,17 +556,17 @@ void FixupTrainLengths() /* We moved one unit more backwards than needed for even-length front vehicles, * try to move that unit forward again. We don't care if this step fails. */ - TrainController(u, NULL, false); + TrainController(u, nullptr, false); } /* If the next wagon is still in a depot, check if it shouldn't be outside already. */ - if (next != NULL && next->track == TRACK_BIT_DEPOT) { + if (next != nullptr && next->track == TRACK_BIT_DEPOT) { int d = TicksToLeaveDepot(u); if (d <= 0) { /* Next vehicle should have left the depot already, show it and pull forward. */ next->vehstatus &= ~VS_HIDDEN; next->track = TrackToTrackBits(GetRailDepotTrack(next->tile)); - for (int i = 0; i >= d; i--) TrainController(next, NULL); + for (int i = 0; i >= d; i--) TrainController(next, nullptr); } } } @@ -960,5 +960,5 @@ static void Ptrs_VEHS() } extern const ChunkHandler _veh_chunk_handlers[] = { - { 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, NULL, CH_SPARSE_ARRAY | CH_LAST}, + { 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, nullptr, CH_SPARSE_ARRAY | CH_LAST}, }; diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -88,7 +88,7 @@ void MoveWaypointsToBaseStations() StationClass* stclass = StationClass::Get(STAT_CLASS_WAYP); for (uint i = 0; i < stclass->GetSpecCount(); i++) { const StationSpec *statspec = stclass->GetSpec(i); - if (statspec != NULL && statspec->grf_prop.grffile->grfid == wp.grfid && statspec->grf_prop.local_id == wp.localidx) { + if (statspec != nullptr && statspec->grf_prop.grffile->grfid == wp.grfid && statspec->grf_prop.local_id == wp.localidx) { wp.spec = statspec; break; } @@ -122,7 +122,7 @@ void MoveWaypointsToBaseStations() SetRailStationReservation(t, reserved); - if (wp.spec != NULL) { + if (wp.spec != nullptr) { SetCustomStationSpecIndex(t, AllocateSpecToStation(wp.spec, new_wp, true)); } new_wp->rect.BeforeAddTile(t, StationRect::ADD_FORCE); @@ -136,7 +136,7 @@ void MoveWaypointsToBaseStations() FOR_ALL_ORDER_LISTS(ol) { if (ol->GetFirstSharedVehicle()->type != VEH_TRAIN) continue; - for (Order *o = ol->GetFirstOrder(); o != NULL; o = o->next) UpdateWaypointOrder(o); + for (Order *o = ol->GetFirstOrder(); o != nullptr; o = o->next) UpdateWaypointOrder(o); } Vehicle *v; @@ -199,10 +199,10 @@ static void Ptrs_WAYP() /* Only for versions 12 .. 122 */ if (!Town::IsValidID(wp.town_index)) { /* Upon a corrupted waypoint we'll likely get here. The next step will be to - * loop over all Ptrs procs to NULL the pointers. However, we don't know - * whether we're in the NULL or "normal" Ptrs proc. So just clear the list + * loop over all Ptrs procs to nullptr the pointers. However, we don't know + * whether we're in the nullptr or "normal" Ptrs proc. So just clear the list * of old waypoints we constructed and then this waypoint (and the other - * possibly corrupt ones) will not be queried in the NULL Ptrs proc run. */ + * possibly corrupt ones) will not be queried in the nullptr Ptrs proc run. */ _old_waypoints.clear(); SlErrorCorrupt("Referencing invalid Town"); } @@ -215,5 +215,5 @@ static void Ptrs_WAYP() } extern const ChunkHandler _waypoint_chunk_handlers[] = { - { 'CHKP', NULL, Load_WAYP, Ptrs_WAYP, NULL, CH_ARRAY | CH_LAST}, + { 'CHKP', nullptr, Load_WAYP, Ptrs_WAYP, nullptr, CH_ARRAY | CH_LAST}, }; diff --git a/src/screenshot.cpp b/src/screenshot.cpp --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -120,7 +120,7 @@ static bool MakeBMPImage(const char *nam } FILE *f = fopen(name, "wb"); - if (f == NULL) return false; + if (f == nullptr) return false; /* Each scanline must be aligned on a 32bit boundary */ uint bytewidth = Align(w * bpp, 4); // bytes per line in file @@ -268,18 +268,18 @@ static bool MakePNGImage(const char *nam if (pixelformat != 8 && pixelformat != 32) return false; f = fopen(name, "wb"); - if (f == NULL) return false; + if (f == nullptr) return false; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, const_cast(name), png_my_error, png_my_warning); - if (png_ptr == NULL) { + if (png_ptr == nullptr) { fclose(f); return false; } info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) { - png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + if (info_ptr == nullptr) { + png_destroy_write_struct(&png_ptr, (png_infopp)nullptr); fclose(f); return false; } @@ -311,7 +311,7 @@ static bool MakePNGImage(const char *nam char *p = buf; p += seprintf(p, lastof(buf), "Graphics set: %s (%u)\n", BaseGraphics::GetUsedSet()->name, BaseGraphics::GetUsedSet()->version); p = strecpy(p, "NewGRFs:\n", lastof(buf)); - for (const GRFConfig *c = _game_mode == GM_MENU ? NULL : _grfconfig; c != NULL; c = c->next) { + for (const GRFConfig *c = _game_mode == GM_MENU ? nullptr : _grfconfig; c != nullptr; c = c->next) { p += seprintf(p, lastof(buf), "%08X ", BSWAP32(c->ident.grfid)); p = md5sumToString(p, lastof(buf), c->ident.md5sum); p += seprintf(p, lastof(buf), " %s\n", c->filename); @@ -319,7 +319,7 @@ static bool MakePNGImage(const char *nam p = strecpy(p, "\nCompanies:\n", lastof(buf)); const Company *c; FOR_ALL_COMPANIES(c) { - if (c->ai_info == NULL) { + if (c->ai_info == nullptr) { p += seprintf(p, lastof(buf), "%2i: Human\n", (int)c->index); } else { p += seprintf(p, lastof(buf), "%2i: %s (v%d)\n", (int)c->index, c->ai_info->GetName(), c->ai_info->GetVersion()); @@ -447,7 +447,7 @@ static bool MakePCXImage(const char *nam if (pixelformat != 8 || w == 0) return false; f = fopen(name, "wb"); - if (f == NULL) return false; + if (f == nullptr) return false; memset(&pcx, 0, sizeof(pcx)); @@ -701,7 +701,7 @@ static const char *MakeScreenshotName(co static bool MakeSmallScreenshot(bool crashlog) { const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension, crashlog), CurrentScreenCallback, NULL, _screen.width, _screen.height, + return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension, crashlog), CurrentScreenCallback, nullptr, _screen.width, _screen.height, BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette); } @@ -743,7 +743,7 @@ void SetupScreenshotViewport(ScreenshotT vp->top = 0; vp->width = UnScaleByZoom(vp->virtual_width, vp->zoom); vp->height = UnScaleByZoom(vp->virtual_height, vp->zoom); - vp->overlay = NULL; + vp->overlay = nullptr; } /** @@ -800,7 +800,7 @@ bool MakeHeightmapScreenshot(const char palette[i].b = i; } const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; - return sf->proc(filename, HeightmapCallback, NULL, MapSizeX(), MapSizeY(), 8, palette); + return sf->proc(filename, HeightmapCallback, nullptr, MapSizeX(), MapSizeY(), 8, palette); } /** @@ -821,7 +821,7 @@ bool MakeScreenshot(ScreenshotType t, co } _screenshot_name[0] = '\0'; - if (name != NULL) strecpy(_screenshot_name, name, lastof(_screenshot_name)); + if (name != nullptr) strecpy(_screenshot_name, name, lastof(_screenshot_name)); bool ret; switch (t) { diff --git a/src/script/api/script_basestation.cpp b/src/script/api/script_basestation.cpp --- a/src/script/api/script_basestation.cpp +++ b/src/script/api/script_basestation.cpp @@ -22,12 +22,12 @@ /* static */ bool ScriptBaseStation::IsValidBaseStation(StationID station_id) { const BaseStation *st = ::BaseStation::GetIfValid(station_id); - return st != NULL && (st->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY || st->owner == OWNER_NONE); + return st != nullptr && (st->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY || st->owner == OWNER_NONE); } /* static */ char *ScriptBaseStation::GetName(StationID station_id) { - if (!IsValidBaseStation(station_id)) return NULL; + if (!IsValidBaseStation(station_id)) return nullptr; ::SetDParam(0, station_id); return GetString(::Station::IsValidID(station_id) ? STR_STATION_NAME : STR_WAYPOINT_NAME); @@ -39,7 +39,7 @@ EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY); EnforcePrecondition(false, IsValidBaseStation(station_id)); - EnforcePrecondition(false, name != NULL); + EnforcePrecondition(false, name != nullptr); const char *text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_STATION_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); diff --git a/src/script/api/script_basestation.hpp b/src/script/api/script_basestation.hpp --- a/src/script/api/script_basestation.hpp +++ b/src/script/api/script_basestation.hpp @@ -52,7 +52,7 @@ public: * @param station_id The basestation to set the name of. * @param name The new name of the station (can be either a raw string, or a ScriptText object). * @pre IsValidBaseStation(station_id). - * @pre name != NULL && len(name) != 0. + * @pre name != nullptr && len(name) != 0. * @game @pre Valid ScriptCompanyMode active in scope. * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @return True if the name was changed. diff --git a/src/script/api/script_bridge.cpp b/src/script/api/script_bridge.cpp --- a/src/script/api/script_bridge.cpp +++ b/src/script/api/script_bridge.cpp @@ -102,7 +102,7 @@ static void _DoCommandReturnBuildBridge1 ScriptObject::SetCallbackVariable(0, start); ScriptObject::SetCallbackVariable(1, end); - return ScriptObject::DoCommand(end, start, type | bridge_id, CMD_BUILD_BRIDGE, NULL, &::_DoCommandReturnBuildBridge1); + return ScriptObject::DoCommand(end, start, type | bridge_id, CMD_BUILD_BRIDGE, nullptr, &::_DoCommandReturnBuildBridge1); } /* static */ bool ScriptBridge::_BuildBridgeRoad1() @@ -114,7 +114,7 @@ static void _DoCommandReturnBuildBridge1 DiagDirection dir_1 = ::DiagdirBetweenTiles(end, start); DiagDirection dir_2 = ::ReverseDiagDir(dir_1); - return ScriptObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (ScriptObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, NULL, &::_DoCommandReturnBuildBridge2); + return ScriptObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (ScriptObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, nullptr, &::_DoCommandReturnBuildBridge2); } /* static */ bool ScriptBridge::_BuildBridgeRoad2() @@ -138,8 +138,8 @@ static void _DoCommandReturnBuildBridge1 /* static */ char *ScriptBridge::GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type) { - EnforcePrecondition(NULL, vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER); - if (!IsValidBridge(bridge_id)) return NULL; + EnforcePrecondition(nullptr, vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER); + if (!IsValidBridge(bridge_id)) return nullptr; return GetString(vehicle_type == ScriptVehicle::VT_WATER ? STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT : ::GetBridgeSpec(bridge_id)->transport_name[vehicle_type]); } diff --git a/src/script/api/script_cargo.cpp b/src/script/api/script_cargo.cpp --- a/src/script/api/script_cargo.cpp +++ b/src/script/api/script_cargo.cpp @@ -29,7 +29,7 @@ /* static */ char *ScriptCargo::GetCargoLabel(CargoID cargo_type) { - if (!IsValidCargo(cargo_type)) return NULL; + if (!IsValidCargo(cargo_type)) return nullptr; const CargoSpec *cargo = ::CargoSpec::Get(cargo_type); /* cargo->label is a uint32 packing a 4 character non-terminated string, diff --git a/src/script/api/script_client.cpp b/src/script/api/script_client.cpp --- a/src/script/api/script_client.cpp +++ b/src/script/api/script_client.cpp @@ -20,37 +20,37 @@ * Finds NetworkClientInfo given client-identifier, * is used by other methods to resolve client-identifier. * @param client The client to get info structure for - * @return A pointer to corresponding CI struct or NULL when not found. + * @return A pointer to corresponding CI struct or nullptr when not found. */ static NetworkClientInfo *FindClientInfo(ScriptClient::ClientID client) { - if (client == ScriptClient::CLIENT_INVALID) return NULL; - if (!_networking) return NULL; + if (client == ScriptClient::CLIENT_INVALID) return nullptr; + if (!_networking) return nullptr; return NetworkClientInfo::GetByClientID((::ClientID)client); } /* static */ ScriptClient::ClientID ScriptClient::ResolveClientID(ScriptClient::ClientID client) { - return (FindClientInfo(client) == NULL ? ScriptClient::CLIENT_INVALID : client); + return (FindClientInfo(client) == nullptr ? ScriptClient::CLIENT_INVALID : client); } /* static */ char *ScriptClient::GetName(ScriptClient::ClientID client) { NetworkClientInfo *ci = FindClientInfo(client); - if (ci == NULL) return NULL; + if (ci == nullptr) return nullptr; return stredup(ci->client_name); } /* static */ ScriptCompany::CompanyID ScriptClient::GetCompany(ScriptClient::ClientID client) { NetworkClientInfo *ci = FindClientInfo(client); - if (ci == NULL) return ScriptCompany::COMPANY_INVALID; + if (ci == nullptr) return ScriptCompany::COMPANY_INVALID; return (ScriptCompany::CompanyID)ci->client_playas; } /* static */ ScriptDate::Date ScriptClient::GetJoinDate(ScriptClient::ClientID client) { NetworkClientInfo *ci = FindClientInfo(client); - if (ci == NULL) return ScriptDate::DATE_INVALID; + if (ci == nullptr) return ScriptDate::DATE_INVALID; return (ScriptDate::Date)ci->join_date; } diff --git a/src/script/api/script_company.cpp b/src/script/api/script_company.cpp --- a/src/script/api/script_company.cpp +++ b/src/script/api/script_company.cpp @@ -45,7 +45,7 @@ { CCountedPtr counter(name); - EnforcePrecondition(false, name != NULL); + EnforcePrecondition(false, name != nullptr); const char *text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_COMPANY_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); @@ -56,7 +56,7 @@ /* static */ char *ScriptCompany::GetName(ScriptCompany::CompanyID company) { company = ResolveCompanyID(company); - if (company == COMPANY_INVALID) return NULL; + if (company == COMPANY_INVALID) return nullptr; ::SetDParam(0, company); return GetString(STR_COMPANY_NAME); @@ -66,7 +66,7 @@ { CCountedPtr counter(name); - EnforcePrecondition(false, name != NULL); + EnforcePrecondition(false, name != nullptr); const char *text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_PRESIDENT_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); @@ -312,7 +312,7 @@ if ((::LiveryScheme)scheme < LS_BEGIN || (::LiveryScheme)scheme >= LS_END) return COLOUR_INVALID; const Company *c = ::Company::GetIfValid(_current_company); - if (c == NULL) return COLOUR_INVALID; + if (c == nullptr) return COLOUR_INVALID; return (ScriptCompany::Colours)c->livery[scheme].colour1; } @@ -322,7 +322,7 @@ if ((::LiveryScheme)scheme < LS_BEGIN || (::LiveryScheme)scheme >= LS_END) return COLOUR_INVALID; const Company *c = ::Company::GetIfValid(_current_company); - if (c == NULL) return COLOUR_INVALID; + if (c == nullptr) return COLOUR_INVALID; return (ScriptCompany::Colours)c->livery[scheme].colour2; } diff --git a/src/script/api/script_company.hpp b/src/script/api/script_company.hpp --- a/src/script/api/script_company.hpp +++ b/src/script/api/script_company.hpp @@ -139,7 +139,7 @@ public: /** * Set the name of your company. * @param name The new name of the company (can be either a raw string, or a ScriptText object). - * @pre name != NULL && len(name) != 0. + * @pre name != nullptr && len(name) != 0. * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @return True if the name was changed. */ @@ -156,7 +156,7 @@ public: /** * Set the name of your president. * @param name The new name of the president (can be either a raw string, or a ScriptText object). - * @pre name != NULL && len(name) != 0. + * @pre name != nullptr && len(name) != 0. * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @return True if the name was changed. */ diff --git a/src/script/api/script_controller.cpp b/src/script/api/script_controller.cpp --- a/src/script/api/script_controller.cpp +++ b/src/script/api/script_controller.cpp @@ -43,7 +43,7 @@ ticks = 1; } - throw Script_Suspend(ticks, NULL); + throw Script_Suspend(ticks, nullptr); } /* static */ void ScriptController::Break(const char* message) @@ -119,7 +119,7 @@ ScriptController::~ScriptController() strtolower(library_name); ScriptInfo *lib = ScriptObject::GetActiveInstance()->FindLibrary(library, version); - if (lib == NULL) { + if (lib == nullptr) { char error[1024]; seprintf(error, lastof(error), "couldn't find library '%s' with version %d", library, version); throw sq_throwerror(vm, error); diff --git a/src/script/api/script_engine.cpp b/src/script/api/script_engine.cpp --- a/src/script/api/script_engine.cpp +++ b/src/script/api/script_engine.cpp @@ -25,7 +25,7 @@ /* static */ bool ScriptEngine::IsValidEngine(EngineID engine_id) { const Engine *e = ::Engine::GetIfValid(engine_id); - if (e == NULL || !e->IsEnabled()) return false; + if (e == nullptr || !e->IsEnabled()) return false; /* AIs have only access to engines they can purchase or still have in use. * Deity has access to all engined that will be or were available ever. */ @@ -36,12 +36,12 @@ /* static */ bool ScriptEngine::IsBuildable(EngineID engine_id) { const Engine *e = ::Engine::GetIfValid(engine_id); - return e != NULL && ::IsEngineBuildable(engine_id, e->type, ScriptObject::GetCompany()); + return e != nullptr && ::IsEngineBuildable(engine_id, e->type, ScriptObject::GetCompany()); } /* static */ char *ScriptEngine::GetName(EngineID engine_id) { - if (!IsValidEngine(engine_id)) return NULL; + if (!IsValidEngine(engine_id)) return nullptr; ::SetDParam(0, engine_id); return GetString(STR_ENGINE_NAME); diff --git a/src/script/api/script_error.hpp b/src/script/api/script_error.hpp --- a/src/script/api/script_error.hpp +++ b/src/script/api/script_error.hpp @@ -44,7 +44,7 @@ * @param string The string that is checked. */ #define EnforcePreconditionEncodedText(returnval, string) \ - if ((string) == NULL) { \ + if ((string) == nullptr) { \ ScriptObject::SetLastError(ScriptError::ERR_PRECONDITION_TOO_MANY_PARAMETERS); \ return returnval; \ } \ diff --git a/src/script/api/script_event.cpp b/src/script/api/script_event.cpp --- a/src/script/api/script_event.cpp +++ b/src/script/api/script_event.cpp @@ -23,7 +23,7 @@ struct ScriptEventData { /* static */ void ScriptEventController::CreateEventPointer() { - assert(ScriptObject::GetEventPointer() == NULL); + assert(ScriptObject::GetEventPointer() == nullptr); ScriptObject::GetEventPointer() = new ScriptEventData(); } @@ -45,7 +45,7 @@ struct ScriptEventData { /* static */ bool ScriptEventController::IsEventWaiting() { - if (ScriptObject::GetEventPointer() == NULL) ScriptEventController::CreateEventPointer(); + if (ScriptObject::GetEventPointer() == nullptr) ScriptEventController::CreateEventPointer(); ScriptEventData *data = (ScriptEventData *)ScriptObject::GetEventPointer(); return !data->stack.empty(); @@ -53,10 +53,10 @@ struct ScriptEventData { /* static */ ScriptEvent *ScriptEventController::GetNextEvent() { - if (ScriptObject::GetEventPointer() == NULL) ScriptEventController::CreateEventPointer(); + if (ScriptObject::GetEventPointer() == nullptr) ScriptEventController::CreateEventPointer(); ScriptEventData *data = (ScriptEventData *)ScriptObject::GetEventPointer(); - if (data->stack.empty()) return NULL; + if (data->stack.empty()) return nullptr; ScriptEvent *e = data->stack.front(); data->stack.pop(); @@ -65,7 +65,7 @@ struct ScriptEventData { /* static */ void ScriptEventController::InsertEvent(ScriptEvent *event) { - if (ScriptObject::GetEventPointer() == NULL) ScriptEventController::CreateEventPointer(); + if (ScriptObject::GetEventPointer() == nullptr) ScriptEventController::CreateEventPointer(); ScriptEventData *data = (ScriptEventData *)ScriptObject::GetEventPointer(); event->AddRef(); diff --git a/src/script/api/script_event_types.cpp b/src/script/api/script_event_types.cpp --- a/src/script/api/script_event_types.cpp +++ b/src/script/api/script_event_types.cpp @@ -25,12 +25,12 @@ bool ScriptEventEnginePreview::IsEngineValid() const { const Engine *e = ::Engine::GetIfValid(this->engine); - return e != NULL && e->IsEnabled(); + return e != nullptr && e->IsEnabled(); } char *ScriptEventEnginePreview::GetName() { - if (!this->IsEngineValid()) return NULL; + if (!this->IsEngineValid()) return nullptr; ::SetDParam(0, this->engine); return GetString(STR_ENGINE_NAME); @@ -132,13 +132,13 @@ ScriptEventAdminPort::~ScriptEventAdminP } #define SKIP_EMPTY(p) while (*(p) == ' ' || *(p) == '\n' || *(p) == '\r') (p)++; -#define RETURN_ERROR(stack) { ScriptLog::Error("Received invalid JSON data from AdminPort."); if (stack != 0) sq_pop(vm, stack); return NULL; } +#define RETURN_ERROR(stack) { ScriptLog::Error("Received invalid JSON data from AdminPort."); if (stack != 0) sq_pop(vm, stack); return nullptr; } SQInteger ScriptEventAdminPort::GetObject(HSQUIRRELVM vm) { char *p = this->json; - if (this->ReadTable(vm, p) == NULL) { + if (this->ReadTable(vm, p) == nullptr) { sq_pushnull(vm); return 1; } @@ -189,18 +189,18 @@ char *ScriptEventAdminPort::ReadTable(HS if (*p++ != '"') RETURN_ERROR(1); p = ReadString(vm, p); - if (p == NULL) { + if (p == nullptr) { sq_pop(vm, 1); - return NULL; + return nullptr; } SKIP_EMPTY(p); if (*p++ != ':') RETURN_ERROR(2); p = this->ReadValue(vm, p); - if (p == NULL) { + if (p == nullptr) { sq_pop(vm, 2); - return NULL; + return nullptr; } sq_rawset(vm, -3); @@ -241,7 +241,7 @@ char *ScriptEventAdminPort::ReadValue(HS case '"': { /* String */ p = ReadString(vm, ++p); - if (p == NULL) return NULL; + if (p == nullptr) return nullptr; break; } @@ -249,7 +249,7 @@ char *ScriptEventAdminPort::ReadValue(HS case '{': { /* Table */ p = this->ReadTable(vm, p); - if (p == NULL) return NULL; + if (p == nullptr) return nullptr; break; } @@ -268,9 +268,9 @@ char *ScriptEventAdminPort::ReadValue(HS while (*p++ != ']') { p = this->ReadValue(vm, p); - if (p == NULL) { + if (p == nullptr) { sq_pop(vm, 1); - return NULL; + return nullptr; } sq_arrayappend(vm, -2); diff --git a/src/script/api/script_gamesettings.cpp b/src/script/api/script_gamesettings.cpp --- a/src/script/api/script_gamesettings.cpp +++ b/src/script/api/script_gamesettings.cpp @@ -21,7 +21,7 @@ { uint i; const SettingDesc *sd = GetSettingFromName(setting, &i); - return sd != NULL && sd->desc.cmd != SDT_STRING; + return sd != nullptr && sd->desc.cmd != SDT_STRING; } /* static */ int32 ScriptGameSettings::GetValue(const char *setting) diff --git a/src/script/api/script_goal.cpp b/src/script/api/script_goal.cpp --- a/src/script/api/script_goal.cpp +++ b/src/script/api/script_goal.cpp @@ -34,14 +34,14 @@ CCountedPtr counter(goal); EnforcePrecondition(GOAL_INVALID, ScriptObject::GetCompany() == OWNER_DEITY); - EnforcePrecondition(GOAL_INVALID, goal != NULL); + EnforcePrecondition(GOAL_INVALID, goal != nullptr); const char *text = goal->GetEncodedText(); EnforcePreconditionEncodedText(GOAL_INVALID, text); EnforcePrecondition(GOAL_INVALID, company == ScriptCompany::COMPANY_INVALID || ScriptCompany::ResolveCompanyID(company) != ScriptCompany::COMPANY_INVALID); uint8 c = company; if (company == ScriptCompany::COMPANY_INVALID) c = INVALID_COMPANY; - StoryPage *story_page = NULL; + StoryPage *story_page = nullptr; if (type == GT_STORY_PAGE && ScriptStoryPage::IsValidStoryPage((ScriptStoryPage::StoryPageID)destination)) story_page = ::StoryPage::Get((ScriptStoryPage::StoryPageID)destination); EnforcePrecondition(GOAL_INVALID, (type == GT_NONE && destination == 0) || @@ -49,7 +49,7 @@ (type == GT_INDUSTRY && ScriptIndustry::IsValidIndustry(destination)) || (type == GT_TOWN && ScriptTown::IsValidTown(destination)) || (type == GT_COMPANY && ScriptCompany::ResolveCompanyID((ScriptCompany::CompanyID)destination) != ScriptCompany::COMPANY_INVALID) || - (type == GT_STORY_PAGE && story_page != NULL && (c == INVALID_COMPANY ? story_page->company == INVALID_COMPANY : story_page->company == INVALID_COMPANY || story_page->company == c))); + (type == GT_STORY_PAGE && story_page != nullptr && (c == INVALID_COMPANY ? story_page->company == INVALID_COMPANY : story_page->company == INVALID_COMPANY || story_page->company == c))); if (!ScriptObject::DoCommand(0, type | (c << 8), destination, CMD_CREATE_GOAL, text, &ScriptInstance::DoCommandReturnGoalID)) return GOAL_INVALID; @@ -71,7 +71,7 @@ EnforcePrecondition(false, IsValidGoal(goal_id)); EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); - EnforcePrecondition(false, goal != NULL); + EnforcePrecondition(false, goal != nullptr); EnforcePrecondition(false, !StrEmpty(goal->GetEncodedText())); return ScriptObject::DoCommand(0, goal_id, 0, CMD_SET_GOAL_TEXT, goal->GetEncodedText()); @@ -85,11 +85,11 @@ EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); /* Ensure null as used for emtpy string. */ - if (progress != NULL && StrEmpty(progress->GetEncodedText())) { - progress = NULL; + if (progress != nullptr && StrEmpty(progress->GetEncodedText())) { + progress = nullptr; } - return ScriptObject::DoCommand(0, goal_id, 0, CMD_SET_GOAL_PROGRESS, progress != NULL ? progress->GetEncodedText() : NULL); + return ScriptObject::DoCommand(0, goal_id, 0, CMD_SET_GOAL_PROGRESS, progress != nullptr ? progress->GetEncodedText() : nullptr); } /* static */ bool ScriptGoal::SetCompleted(GoalID goal_id, bool completed) @@ -106,7 +106,7 @@ EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); Goal *g = Goal::Get(goal_id); - return g != NULL && g->completed; + return g != nullptr && g->completed; } /* static */ bool ScriptGoal::DoQuestion(uint16 uniqueid, uint8 target, bool is_client, Text *question, QuestionType type, int buttons) @@ -114,7 +114,7 @@ CCountedPtr counter(question); EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); - EnforcePrecondition(false, question != NULL); + EnforcePrecondition(false, question != nullptr); const char *text = question->GetEncodedText(); EnforcePreconditionEncodedText(false, text); EnforcePrecondition(false, CountBits(buttons) >= 1 && CountBits(buttons) <= 3); diff --git a/src/script/api/script_goal.hpp b/src/script/api/script_goal.hpp --- a/src/script/api/script_goal.hpp +++ b/src/script/api/script_goal.hpp @@ -99,7 +99,7 @@ public: * @param destination The destination of the \a type type. * @return The new GoalID, or GOAL_INVALID if it failed. * @pre No ScriptCompanyMode may be in scope. - * @pre goal != NULL && len(goal) != 0. + * @pre goal != nullptr && len(goal) != 0. * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID. * @pre if type is GT_STORY_PAGE, the company of the goal and the company of the story page need to match: * \li Global goals can only reference global story pages. @@ -122,7 +122,7 @@ public: * @param goal The new goal text (can be either a raw string, or a ScriptText object). * @return True if the action succeeded. * @pre No ScriptCompanyMode may be in scope. - * @pre goal != NULL && len(goal) != 0. + * @pre goal != nullptr && len(goal) != 0. * @pre IsValidGoal(goal_id). */ static bool SetText(GoalID goal_id, Text *goal); @@ -133,7 +133,7 @@ public: * the progress string short. * @param goal_id The goal to update. * @param progress The new progress text for the goal (can be either a raw string, - * or a ScriptText object). To clear the progress string you can pass NULL or an + * or a ScriptText object). To clear the progress string you can pass nullptr or an * empty string. * @return True if the action succeeded. * @pre No ScriptCompanyMode may be in scope. @@ -169,7 +169,7 @@ public: * @param buttons Any combinations (at least 1, up to 3) of buttons defined in QuestionButton. Like BUTTON_YES + BUTTON_NO. * @return True if the action succeeded. * @pre No ScriptCompanyMode may be in scope. - * @pre question != NULL && len(question) != 0. + * @pre question != nullptr && len(question) != 0. * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID. * @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3. * @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer. @@ -187,7 +187,7 @@ public: * @return True if the action succeeded. * @pre No ScriptCompanyMode may be in scope. * @pre ScriptGame::IsMultiplayer() - * @pre question != NULL && len(question) != 0. + * @pre question != nullptr && len(question) != 0. * @pre ResolveClientID(client) != CLIENT_INVALID. * @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3. * @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer. diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -25,12 +25,12 @@ /* static */ bool ScriptGroup::IsValidGroup(GroupID group_id) { const Group *g = ::Group::GetIfValid(group_id); - return g != NULL && g->owner == ScriptObject::GetCompany(); + return g != nullptr && g->owner == ScriptObject::GetCompany(); } /* static */ ScriptGroup::GroupID ScriptGroup::CreateGroup(ScriptVehicle::VehicleType vehicle_type, GroupID parent_group_id) { - if (!ScriptObject::DoCommand(0, (::VehicleType)vehicle_type, parent_group_id, CMD_CREATE_GROUP, NULL, &ScriptInstance::DoCommandReturnGroupID)) return GROUP_INVALID; + if (!ScriptObject::DoCommand(0, (::VehicleType)vehicle_type, parent_group_id, CMD_CREATE_GROUP, nullptr, &ScriptInstance::DoCommandReturnGroupID)) return GROUP_INVALID; /* In case of test-mode, we return GroupID 0 */ return (ScriptGroup::GroupID)0; @@ -55,7 +55,7 @@ CCountedPtr counter(name); EnforcePrecondition(false, IsValidGroup(group_id)); - EnforcePrecondition(false, name != NULL); + EnforcePrecondition(false, name != nullptr); const char *text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_GROUP_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); @@ -65,7 +65,7 @@ /* static */ char *ScriptGroup::GetName(GroupID group_id) { - if (!IsValidGroup(group_id)) return NULL; + if (!IsValidGroup(group_id)) return nullptr; ::SetDParam(0, group_id); return GetString(STR_GROUP_NAME); diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -71,7 +71,7 @@ public: * @param group_id The group to set the name for. * @param name The name for the group (can be either a raw string, or a ScriptText object). * @pre IsValidGroup(group_id). - * @pre name != NULL && len(name) != 0 + * @pre name != nullptr && len(name) != 0 * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @return True if and only if the name was changed. */ diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp --- a/src/script/api/script_industry.cpp +++ b/src/script/api/script_industry.cpp @@ -39,7 +39,7 @@ /* static */ char *ScriptIndustry::GetName(IndustryID industry_id) { - if (!IsValidIndustry(industry_id)) return NULL; + if (!IsValidIndustry(industry_id)) return nullptr; ::SetDParam(0, industry_id); return GetString(STR_INDUSTRY_NAME); diff --git a/src/script/api/script_industrytype.cpp b/src/script/api/script_industrytype.cpp --- a/src/script/api/script_industrytype.cpp +++ b/src/script/api/script_industrytype.cpp @@ -59,14 +59,14 @@ /* static */ char *ScriptIndustryType::GetName(IndustryType industry_type) { - if (!IsValidIndustryType(industry_type)) return NULL; + if (!IsValidIndustryType(industry_type)) return nullptr; return GetString(::GetIndustrySpec(industry_type)->name); } /* static */ ScriptList *ScriptIndustryType::GetProducedCargo(IndustryType industry_type) { - if (!IsValidIndustryType(industry_type)) return NULL; + if (!IsValidIndustryType(industry_type)) return nullptr; const IndustrySpec *ins = ::GetIndustrySpec(industry_type); @@ -80,7 +80,7 @@ /* static */ ScriptList *ScriptIndustryType::GetAcceptedCargo(IndustryType industry_type) { - if (!IsValidIndustryType(industry_type)) return NULL; + if (!IsValidIndustryType(industry_type)) return nullptr; const IndustrySpec *ins = ::GetIndustrySpec(industry_type); diff --git a/src/script/api/script_list.cpp b/src/script/api/script_list.cpp --- a/src/script/api/script_list.cpp +++ b/src/script/api/script_list.cpp @@ -109,7 +109,7 @@ public: void End() { - this->bucket_list = NULL; + this->bucket_list = nullptr; this->has_no_more_items = true; this->item_next = 0; } @@ -119,7 +119,7 @@ public: */ void FindNext() { - if (this->bucket_list == NULL) { + if (this->bucket_list == nullptr) { this->has_no_more_items = true; return; } @@ -128,7 +128,7 @@ public: if (this->bucket_list_iter == this->bucket_list->end()) { this->bucket_iter++; if (this->bucket_iter == this->list->buckets.end()) { - this->bucket_list = NULL; + this->bucket_list = nullptr; return; } this->bucket_list = &(*this->bucket_iter).second; @@ -203,7 +203,7 @@ public: void End() { - this->bucket_list = NULL; + this->bucket_list = nullptr; this->has_no_more_items = true; this->item_next = 0; } @@ -213,14 +213,14 @@ public: */ void FindNext() { - if (this->bucket_list == NULL) { + if (this->bucket_list == nullptr) { this->has_no_more_items = true; return; } if (this->bucket_list_iter == this->bucket_list->begin()) { if (this->bucket_iter == this->list->buckets.begin()) { - this->bucket_list = NULL; + this->bucket_list = nullptr; return; } this->bucket_iter--; diff --git a/src/script/api/script_list.hpp b/src/script/api/script_list.hpp --- a/src/script/api/script_list.hpp +++ b/src/script/api/script_list.hpp @@ -198,7 +198,7 @@ public: /** * Remove everything that is in the given list from this list (same item index that is). * @param list the list of items to remove. - * @pre list != NULL + * @pre list != nullptr */ void RemoveList(ScriptList *list); @@ -242,7 +242,7 @@ public: /** * Keeps everything that is in the given list from this list (same item index that is). * @param list the list of items to keep. - * @pre list != NULL + * @pre list != nullptr */ void KeepList(ScriptList *list); diff --git a/src/script/api/script_log.cpp b/src/script/api/script_log.cpp --- a/src/script/api/script_log.cpp +++ b/src/script/api/script_log.cpp @@ -35,7 +35,7 @@ /* static */ void ScriptLog::Log(ScriptLog::ScriptLogType level, const char *message) { - if (ScriptObject::GetLogPointer() == NULL) { + if (ScriptObject::GetLogPointer() == nullptr) { ScriptObject::GetLogPointer() = new LogData(); LogData *log = (LogData *)ScriptObject::GetLogPointer(); @@ -59,7 +59,7 @@ /* Cut string after first \n */ char *p; - while ((p = strchr(log->lines[log->pos], '\n')) != NULL) { + while ((p = strchr(log->lines[log->pos], '\n')) != nullptr) { *p = '\0'; break; } diff --git a/src/script/api/script_marine.cpp b/src/script/api/script_marine.cpp --- a/src/script/api/script_marine.cpp +++ b/src/script/api/script_marine.cpp @@ -166,9 +166,9 @@ /* static */ Money ScriptMarine::GetBuildCost(BuildType build_type) { switch (build_type) { - case BT_DOCK: return ::GetPrice(PR_BUILD_STATION_DOCK, 1, NULL); - case BT_DEPOT: return ::GetPrice(PR_BUILD_DEPOT_SHIP, 1, NULL); - case BT_BUOY: return ::GetPrice(PR_BUILD_WAYPOINT_BUOY, 1, NULL); + case BT_DOCK: return ::GetPrice(PR_BUILD_STATION_DOCK, 1, nullptr); + case BT_DEPOT: return ::GetPrice(PR_BUILD_DEPOT_SHIP, 1, nullptr); + case BT_BUOY: return ::GetPrice(PR_BUILD_WAYPOINT_BUOY, 1, nullptr); default: return -1; } } diff --git a/src/script/api/script_news.cpp b/src/script/api/script_news.cpp --- a/src/script/api/script_news.cpp +++ b/src/script/api/script_news.cpp @@ -25,7 +25,7 @@ { CCountedPtr counter(text); - EnforcePrecondition(false, text != NULL); + EnforcePrecondition(false, text != nullptr); const char *encoded = text->GetEncodedText(); EnforcePreconditionEncodedText(false, encoded); EnforcePrecondition(false, type == NT_ECONOMY || type == NT_SUBSIDIES || type == NT_GENERAL); diff --git a/src/script/api/script_news.hpp b/src/script/api/script_news.hpp --- a/src/script/api/script_news.hpp +++ b/src/script/api/script_news.hpp @@ -61,7 +61,7 @@ public: * - For #NR_TOWN this parameter should be a valid townID (ScriptTown::IsValidTown). * @return True if the action succeeded. * @pre type must be #NT_ECONOMY, #NT_SUBSIDIES, or #NT_GENERAL. - * @pre text != NULL. + * @pre text != nullptr. * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID. * @pre The \a reference condition must be fulfilled. */ diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -36,7 +36,7 @@ static ScriptStorage *GetStorage() } -/* static */ ScriptInstance *ScriptObject::ActiveInstance::active = NULL; +/* static */ ScriptInstance *ScriptObject::ActiveInstance::active = nullptr; ScriptObject::ActiveInstance::ActiveInstance(ScriptInstance *instance) { @@ -51,7 +51,7 @@ ScriptObject::ActiveInstance::~ActiveIns /* static */ ScriptInstance *ScriptObject::GetActiveInstance() { - assert(ScriptObject::ActiveInstance::active != NULL); + assert(ScriptObject::ActiveInstance::active != nullptr); return ScriptObject::ActiveInstance::active; } @@ -296,16 +296,16 @@ ScriptObject::ActiveInstance::~ActiveIns } /* Set the default callback to return a true/false result of the DoCommand */ - if (callback == NULL) callback = &ScriptInstance::DoCommandReturn; + if (callback == nullptr) callback = &ScriptInstance::DoCommandReturn; /* Are we only interested in the estimate costs? */ - bool estimate_only = GetDoCommandMode() != NULL && !GetDoCommandMode()(); + bool estimate_only = GetDoCommandMode() != nullptr && !GetDoCommandMode()(); /* Only set p2 when the command does not come from the network. */ if (GetCommandFlags(cmd) & CMD_CLIENT_ID && p2 == 0) p2 = UINT32_MAX; /* Try to perform the command. */ - CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, (_networking && !_generating_world) ? ScriptObject::GetActiveInstance()->GetDoCommandCallback() : NULL, text, false, estimate_only); + CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, (_networking && !_generating_world) ? ScriptObject::GetActiveInstance()->GetDoCommandCallback() : nullptr, text, false, estimate_only); /* We failed; set the error and bail out */ if (res.Failed()) { @@ -328,7 +328,7 @@ ScriptObject::ActiveInstance::~ActiveIns if (_generating_world) { IncreaseDoCommandCosts(res.GetCost()); - if (callback != NULL) { + if (callback != nullptr) { /* Insert return value into to stack and throw a control code that * the return value in the stack should be used. */ callback(GetActiveInstance()); diff --git a/src/script/api/script_object.hpp b/src/script/api/script_object.hpp --- a/src/script/api/script_object.hpp +++ b/src/script/api/script_object.hpp @@ -69,7 +69,7 @@ protected: /** * Executes a raw DoCommand for the script. */ - static bool DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint cmd, const char *text = NULL, Script_SuspendCallbackProc *callback = NULL); + static bool DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint cmd, const char *text = nullptr, Script_SuspendCallbackProc *callback = nullptr); /** * Sets the DoCommand costs counter to a value. diff --git a/src/script/api/script_order.cpp b/src/script/api/script_order.cpp --- a/src/script/api/script_order.cpp +++ b/src/script/api/script_order.cpp @@ -66,7 +66,7 @@ static const Order *ResolveOrder(Vehicle const Order *order = &v->current_order; if (order->GetType() == OT_GOTO_DEPOT && !(order->GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) return order; order_position = ScriptOrder::ResolveOrderPosition(vehicle_id, order_position); - if (order_position == ScriptOrder::ORDER_INVALID) return NULL; + if (order_position == ScriptOrder::ORDER_INVALID) return nullptr; } const Order *order = v->GetFirstOrder(); while (order->GetType() == OT_IMPLICIT) order = order->next; @@ -108,7 +108,7 @@ static int ScriptOrderPositionToRealOrde if (!IsValidVehicleOrder(vehicle_id, order_position)) return false; const Order *order = ::ResolveOrder(vehicle_id, order_position); - return order != NULL && order->GetType() == OT_GOTO_STATION; + return order != nullptr && order->GetType() == OT_GOTO_STATION; } /* static */ bool ScriptOrder::IsGotoDepotOrder(VehicleID vehicle_id, OrderPosition order_position) @@ -116,7 +116,7 @@ static int ScriptOrderPositionToRealOrde if (!IsValidVehicleOrder(vehicle_id, order_position)) return false; const Order *order = ::ResolveOrder(vehicle_id, order_position); - return order != NULL && order->GetType() == OT_GOTO_DEPOT; + return order != nullptr && order->GetType() == OT_GOTO_DEPOT; } /* static */ bool ScriptOrder::IsGotoWaypointOrder(VehicleID vehicle_id, OrderPosition order_position) @@ -124,7 +124,7 @@ static int ScriptOrderPositionToRealOrde if (!IsValidVehicleOrder(vehicle_id, order_position)) return false; const Order *order = ::ResolveOrder(vehicle_id, order_position); - return order != NULL && order->GetType() == OT_GOTO_WAYPOINT; + return order != nullptr && order->GetType() == OT_GOTO_WAYPOINT; } /* static */ bool ScriptOrder::IsConditionalOrder(VehicleID vehicle_id, OrderPosition order_position) @@ -150,7 +150,7 @@ static int ScriptOrderPositionToRealOrde if (!IsValidVehicleOrder(vehicle_id, order_position)) return false; const Order *order = ::ResolveOrder(vehicle_id, order_position); - return order != NULL && order->IsRefit(); + return order != nullptr && order->IsRefit(); } /* static */ bool ScriptOrder::IsCurrentOrderPartOfOrderList(VehicleID vehicle_id) @@ -240,7 +240,7 @@ static int ScriptOrderPositionToRealOrde if (!IsValidVehicleOrder(vehicle_id, order_position)) return INVALID_TILE; const Order *order = ::ResolveOrder(vehicle_id, order_position); - if (order == NULL || order->GetType() == OT_CONDITIONAL) return INVALID_TILE; + if (order == nullptr || order->GetType() == OT_CONDITIONAL) return INVALID_TILE; const Vehicle *v = ::Vehicle::Get(vehicle_id); switch (order->GetType()) { @@ -263,9 +263,9 @@ static int ScriptOrderPositionToRealOrde } } else if (st->dock_tile != INVALID_TILE) { return st->dock_tile; - } else if (st->bus_stops != NULL) { + } else if (st->bus_stops != nullptr) { return st->bus_stops->xy; - } else if (st->truck_stops != NULL) { + } else if (st->truck_stops != nullptr) { return st->truck_stops->xy; } else if (st->airport.tile != INVALID_TILE) { TILE_AREA_LOOP(tile, st->airport) { @@ -294,7 +294,7 @@ static int ScriptOrderPositionToRealOrde if (!IsValidVehicleOrder(vehicle_id, order_position)) return OF_INVALID; const Order *order = ::ResolveOrder(vehicle_id, order_position); - if (order == NULL || order->GetType() == OT_CONDITIONAL || order->GetType() == OT_DUMMY) return OF_INVALID; + if (order == nullptr || order->GetType() == OT_CONDITIONAL || order->GetType() == OT_DUMMY) return OF_INVALID; ScriptOrderFlags order_flags = OF_NONE; order_flags |= (ScriptOrderFlags)order->GetNonStopType(); @@ -586,7 +586,7 @@ static void _DoCommandReturnSetOrderFlag EnforcePrecondition(false, (order_flags & OF_GOTO_NEAREST_DEPOT) == (current & OF_GOTO_NEAREST_DEPOT)); if ((current & OF_NON_STOP_FLAGS) != (order_flags & OF_NON_STOP_FLAGS)) { - return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & OF_NON_STOP_FLAGS) << 4 | MOF_NON_STOP, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags); + return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & OF_NON_STOP_FLAGS) << 4 | MOF_NON_STOP, CMD_MODIFY_ORDER, nullptr, &::_DoCommandReturnSetOrderFlags); } switch (order->GetType()) { @@ -595,16 +595,16 @@ static void _DoCommandReturnSetOrderFlag uint data = DA_ALWAYS_GO; if (order_flags & OF_SERVICE_IF_NEEDED) data = DA_SERVICE; if (order_flags & OF_STOP_IN_DEPOT) data = DA_STOP; - return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (data << 4) | MOF_DEPOT_ACTION, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags); + return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (data << 4) | MOF_DEPOT_ACTION, CMD_MODIFY_ORDER, nullptr, &::_DoCommandReturnSetOrderFlags); } break; case OT_GOTO_STATION: if ((current & OF_UNLOAD_FLAGS) != (order_flags & OF_UNLOAD_FLAGS)) { - return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & OF_UNLOAD_FLAGS) << 2 | MOF_UNLOAD, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags); + return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & OF_UNLOAD_FLAGS) << 2 | MOF_UNLOAD, CMD_MODIFY_ORDER, nullptr, &::_DoCommandReturnSetOrderFlags); } if ((current & OF_LOAD_FLAGS) != (order_flags & OF_LOAD_FLAGS)) { - return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & OF_LOAD_FLAGS) >> 1 | MOF_LOAD, CMD_MODIFY_ORDER, NULL, &::_DoCommandReturnSetOrderFlags); + return ScriptObject::DoCommand(0, vehicle_id | (order_pos << 20), (order_flags & OF_LOAD_FLAGS) >> 1 | MOF_LOAD, CMD_MODIFY_ORDER, nullptr, &::_DoCommandReturnSetOrderFlags); } break; diff --git a/src/script/api/script_rail.cpp b/src/script/api/script_rail.cpp --- a/src/script/api/script_rail.cpp +++ b/src/script/api/script_rail.cpp @@ -25,7 +25,7 @@ /* static */ char *ScriptRail::GetName(RailType rail_type) { - if (!IsRailTypeAvailable(rail_type)) return NULL; + if (!IsRailTypeAvailable(rail_type)) return nullptr; return GetString(GetRailTypeInfo((::RailType)rail_type)->strings.menu_text); } @@ -185,7 +185,7 @@ if (res != CALLBACK_FAILED) { int index = 0; const StationSpec *spec = StationClass::GetByGrf(file->grfid, res, &index); - if (spec == NULL) { + if (spec == nullptr) { DEBUG(grf, 1, "%s returned an invalid station ID for 'AI construction/purchase selection (18)' callback", file->filename); } else { /* We might have gotten an usable station spec. Try to build it, but if it fails we'll fall back to the original station. */ @@ -487,10 +487,10 @@ static bool IsValidSignalType(int signal switch (build_type) { case BT_TRACK: return ::RailBuildCost((::RailType)railtype); - case BT_SIGNAL: return ::GetPrice(PR_BUILD_SIGNALS, 1, NULL); - case BT_DEPOT: return ::GetPrice(PR_BUILD_DEPOT_TRAIN, 1, NULL); - case BT_STATION: return ::GetPrice(PR_BUILD_STATION_RAIL, 1, NULL) + ::GetPrice(PR_BUILD_STATION_RAIL_LENGTH, 1, NULL); - case BT_WAYPOINT: return ::GetPrice(PR_BUILD_WAYPOINT_RAIL, 1, NULL); + case BT_SIGNAL: return ::GetPrice(PR_BUILD_SIGNALS, 1, nullptr); + case BT_DEPOT: return ::GetPrice(PR_BUILD_DEPOT_TRAIN, 1, nullptr); + case BT_STATION: return ::GetPrice(PR_BUILD_STATION_RAIL, 1, nullptr) + ::GetPrice(PR_BUILD_STATION_RAIL_LENGTH, 1, nullptr); + case BT_WAYPOINT: return ::GetPrice(PR_BUILD_WAYPOINT_RAIL, 1, nullptr); default: return -1; } } diff --git a/src/script/api/script_road.cpp b/src/script/api/script_road.cpp --- a/src/script/api/script_road.cpp +++ b/src/script/api/script_road.cpp @@ -588,10 +588,10 @@ static bool NeighbourHasReachableRoad(:: if (!ScriptRoad::IsRoadTypeAvailable(roadtype)) return -1; switch (build_type) { - case BT_ROAD: return ::GetPrice(PR_BUILD_ROAD, 1, NULL); - case BT_DEPOT: return ::GetPrice(PR_BUILD_DEPOT_ROAD, 1, NULL); - case BT_BUS_STOP: return ::GetPrice(PR_BUILD_STATION_BUS, 1, NULL); - case BT_TRUCK_STOP: return ::GetPrice(PR_BUILD_STATION_TRUCK, 1, NULL); + case BT_ROAD: return ::GetPrice(PR_BUILD_ROAD, 1, nullptr); + case BT_DEPOT: return ::GetPrice(PR_BUILD_DEPOT_ROAD, 1, nullptr); + case BT_BUS_STOP: return ::GetPrice(PR_BUILD_STATION_BUS, 1, nullptr); + case BT_TRUCK_STOP: return ::GetPrice(PR_BUILD_STATION_TRUCK, 1, nullptr); default: return -1; } } diff --git a/src/script/api/script_sign.cpp b/src/script/api/script_sign.cpp --- a/src/script/api/script_sign.cpp +++ b/src/script/api/script_sign.cpp @@ -23,7 +23,7 @@ /* static */ bool ScriptSign::IsValidSign(SignID sign_id) { const Sign *si = ::Sign::GetIfValid(sign_id); - return si != NULL && (si->owner == ScriptObject::GetCompany() || si->owner == OWNER_DEITY); + return si != nullptr && (si->owner == ScriptObject::GetCompany() || si->owner == OWNER_DEITY); } /* static */ ScriptCompany::CompanyID ScriptSign::GetOwner(SignID sign_id) @@ -38,7 +38,7 @@ CCountedPtr counter(name); EnforcePrecondition(false, IsValidSign(sign_id)); - EnforcePrecondition(false, name != NULL); + EnforcePrecondition(false, name != nullptr); const char *text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_SIGN_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); @@ -48,7 +48,7 @@ /* static */ char *ScriptSign::GetName(SignID sign_id) { - if (!IsValidSign(sign_id)) return NULL; + if (!IsValidSign(sign_id)) return nullptr; ::SetDParam(0, sign_id); return GetString(STR_SIGN_NAME); @@ -73,7 +73,7 @@ CCountedPtr counter(name); EnforcePrecondition(INVALID_SIGN, ::IsValidTile(location)); - EnforcePrecondition(INVALID_SIGN, name != NULL); + EnforcePrecondition(INVALID_SIGN, name != nullptr); const char *text = name->GetDecodedText(); EnforcePreconditionEncodedText(INVALID_SIGN, text); EnforcePreconditionCustomError(INVALID_SIGN, ::Utf8StringLength(text) < MAX_LENGTH_SIGN_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); diff --git a/src/script/api/script_sign.hpp b/src/script/api/script_sign.hpp --- a/src/script/api/script_sign.hpp +++ b/src/script/api/script_sign.hpp @@ -45,7 +45,7 @@ public: * @param sign_id The sign to set the name for. * @param name The name for the sign (can be either a raw string, or a ScriptText object). * @pre IsValidSign(sign_id). - * @pre name != NULL && len(name) != 0. + * @pre name != nullptr && len(name) != 0. * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @return True if and only if the name was changed. */ @@ -81,7 +81,7 @@ public: * @param location The place to build the sign. * @param name The text to place on the sign (can be either a raw string, or a ScriptText object). * @pre ScriptMap::IsValidTile(location). - * @pre name != NULL && len(name) != 0. + * @pre name != nullptr && len(name) != 0. * @exception ScriptSign::ERR_SIGN_TOO_MANY_SIGNS * @return The SignID of the build sign (use IsValidSign() to check for validity). * In test-mode it returns 0 if successful, or any other value to indicate diff --git a/src/script/api/script_station.cpp b/src/script/api/script_station.cpp --- a/src/script/api/script_station.cpp +++ b/src/script/api/script_station.cpp @@ -23,7 +23,7 @@ /* static */ bool ScriptStation::IsValidStation(StationID station_id) { const Station *st = ::Station::GetIfValid(station_id); - return st != NULL && (st->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY || st->owner == OWNER_NONE); + return st != nullptr && (st->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY || st->owner == OWNER_NONE); } /* static */ ScriptCompany::CompanyID ScriptStation::GetOwner(StationID station_id) @@ -213,10 +213,10 @@ template ::RoadTypes r = RoadTypeToRoadTypes((::RoadType)road_type); - for (const RoadStop *rs = ::Station::Get(station_id)->GetPrimaryRoadStop(ROADSTOP_BUS); rs != NULL; rs = rs->next) { + for (const RoadStop *rs = ::Station::Get(station_id)->GetPrimaryRoadStop(ROADSTOP_BUS); rs != nullptr; rs = rs->next) { if ((::GetRoadTypes(rs->xy) & r) != 0) return true; } - for (const RoadStop *rs = ::Station::Get(station_id)->GetPrimaryRoadStop(ROADSTOP_TRUCK); rs != NULL; rs = rs->next) { + for (const RoadStop *rs = ::Station::Get(station_id)->GetPrimaryRoadStop(ROADSTOP_TRUCK); rs != nullptr; rs = rs->next) { if ((::GetRoadTypes(rs->xy) & r) != 0) return true; } diff --git a/src/script/api/script_stationlist.cpp b/src/script/api/script_stationlist.cpp --- a/src/script/api/script_stationlist.cpp +++ b/src/script/api/script_stationlist.cpp @@ -32,7 +32,7 @@ ScriptStationList_Vehicle::ScriptStation Vehicle *v = ::Vehicle::Get(vehicle_id); - for (Order *o = v->GetFirstOrder(); o != NULL; o = o->next) { + for (Order *o = v->GetFirstOrder(); o != nullptr; o = o->next) { if (o->IsType(OT_GOTO_STATION)) this->AddItem(o->GetDestination()); } } @@ -120,7 +120,7 @@ private: CargoCollector::CargoCollector(ScriptStationList_Cargo *parent, StationID station_id, CargoID cargo, StationID other) : - list(parent), ge(NULL), other_station(other), last_key(INVALID_STATION), amount(0) + list(parent), ge(nullptr), other_station(other), last_key(INVALID_STATION), amount(0) { if (!ScriptStation::IsValidStation(station_id)) return; if (!ScriptCargo::IsValidCargo(cargo)) return; @@ -176,7 +176,7 @@ templatecargo.Packets()->begin(); StationCargoList::ConstIterator end = collector.GE()->cargo.Packets()->end(); @@ -190,7 +190,7 @@ templateflows.begin(); FlowStatMap::const_iterator end = collector.GE()->flows.end(); @@ -215,7 +215,7 @@ ScriptStationList_CargoWaitingViaByFrom: StationID station_id, CargoID cargo, StationID via) { CargoCollector collector(this, station_id, cargo, via); - if (collector.GE() == NULL) return; + if (collector.GE() == nullptr) return; std::pair range = collector.GE()->cargo.Packets()->equal_range(via); @@ -261,7 +261,7 @@ ScriptStationList_CargoPlannedFromByVia: StationID station_id, CargoID cargo, StationID from) { CargoCollector collector(this, station_id, cargo, from); - if (collector.GE() == NULL) return; + if (collector.GE() == nullptr) return; FlowStatMap::const_iterator iter = collector.GE()->flows.find(from); if (iter == collector.GE()->flows.end()) return; diff --git a/src/script/api/script_story_page.cpp b/src/script/api/script_story_page.cpp --- a/src/script/api/script_story_page.cpp +++ b/src/script/api/script_story_page.cpp @@ -48,7 +48,7 @@ c, 0, CMD_CREATE_STORY_PAGE, - title != NULL? title->GetEncodedText() : NULL, + title != nullptr? title->GetEncodedText() : nullptr, &ScriptInstance::DoCommandReturnStoryPageID)) return STORY_PAGE_INVALID; /* In case of test-mode, we return StoryPageID 0 */ @@ -61,7 +61,7 @@ EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, ScriptObject::GetCompany() == OWNER_DEITY); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, IsValidStoryPage(story_page_id)); - EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, (type != SPET_TEXT && type != SPET_LOCATION) || (text != NULL && !StrEmpty(text->GetEncodedText()))); + EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, (type != SPET_TEXT && type != SPET_LOCATION) || (text != nullptr && !StrEmpty(text->GetEncodedText()))); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, type != SPET_LOCATION || ::IsValidTile(reference)); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, type != SPET_GOAL || ScriptGoal::IsValidGoal((ScriptGoal::GoalID)reference)); EnforcePrecondition(STORY_PAGE_ELEMENT_INVALID, type != SPET_GOAL || !(StoryPage::Get(story_page_id)->company == INVALID_COMPANY && Goal::Get(reference)->company != INVALID_COMPANY)); @@ -70,7 +70,7 @@ story_page_id + (type << 16), type == SPET_GOAL ? reference : 0, CMD_CREATE_STORY_PAGE_ELEMENT, - type == SPET_TEXT || type == SPET_LOCATION ? text->GetEncodedText() : NULL, + type == SPET_TEXT || type == SPET_LOCATION ? text->GetEncodedText() : nullptr, &ScriptInstance::DoCommandReturnStoryPageElementID)) return STORY_PAGE_ELEMENT_INVALID; /* In case of test-mode, we return StoryPageElementID 0 */ @@ -88,7 +88,7 @@ StoryPage *p = StoryPage::Get(pe->page); ::StoryPageElementType type = pe->type; - EnforcePrecondition(false, (type != ::SPET_TEXT && type != ::SPET_LOCATION) || (text != NULL && !StrEmpty(text->GetEncodedText()))); + EnforcePrecondition(false, (type != ::SPET_TEXT && type != ::SPET_LOCATION) || (text != nullptr && !StrEmpty(text->GetEncodedText()))); EnforcePrecondition(false, type != ::SPET_LOCATION || ::IsValidTile(reference)); EnforcePrecondition(false, type != ::SPET_GOAL || ScriptGoal::IsValidGoal((ScriptGoal::GoalID)reference)); EnforcePrecondition(false, type != ::SPET_GOAL || !(p->company == INVALID_COMPANY && Goal::Get(reference)->company != INVALID_COMPANY)); @@ -97,7 +97,7 @@ story_page_element_id, type == ::SPET_GOAL ? reference : 0, CMD_UPDATE_STORY_PAGE_ELEMENT, - type == ::SPET_TEXT || type == ::SPET_LOCATION ? text->GetEncodedText() : NULL); + type == ::SPET_TEXT || type == ::SPET_LOCATION ? text->GetEncodedText() : nullptr); } /* static */ uint32 ScriptStoryPage::GetPageSortValue(StoryPageID story_page_id) @@ -121,7 +121,7 @@ EnforcePrecondition(false, IsValidStoryPage(story_page_id)); EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); - return ScriptObject::DoCommand(0, story_page_id, 0, CMD_SET_STORY_PAGE_TITLE, title != NULL? title->GetEncodedText() : NULL); + return ScriptObject::DoCommand(0, story_page_id, 0, CMD_SET_STORY_PAGE_TITLE, title != nullptr? title->GetEncodedText() : nullptr); } /* static */ ScriptCompany::CompanyID ScriptStoryPage::GetCompany(StoryPageID story_page_id) @@ -147,7 +147,7 @@ EnforcePrecondition(false, IsValidStoryPage(story_page_id)); EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); - return ScriptObject::DoCommand(0, story_page_id, date, CMD_SET_STORY_PAGE_DATE, NULL); + return ScriptObject::DoCommand(0, story_page_id, date, CMD_SET_STORY_PAGE_DATE, nullptr); } diff --git a/src/script/api/script_story_page.hpp b/src/script/api/script_story_page.hpp --- a/src/script/api/script_story_page.hpp +++ b/src/script/api/script_story_page.hpp @@ -97,7 +97,7 @@ public: * @return The new StoryPageElementID, or STORY_PAGE_ELEMENT_INVALID if it failed. * @pre No ScriptCompanyMode may be in scope. * @pre IsValidStoryPage(story_page). - * @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != NULL && len(text) != 0). + * @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != nullptr && len(text) != 0). * @pre type != SPET_LOCATION || ScriptMap::IsValidTile(reference). * @pre type != SPET_GOAL || ScriptGoal::IsValidGoal(reference). * @pre if type is SPET_GOAL and story_page is a global page, then referenced goal must be global. @@ -112,7 +112,7 @@ public: * @return True if the action succeeded. * @pre No ScriptCompanyMode may be in scope. * @pre IsValidStoryPage(story_page). - * @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != NULL && len(text) != 0). + * @pre (type != SPET_TEXT && type != SPET_LOCATION) || (text != nullptr && len(text) != 0). * @pre type != SPET_LOCATION || ScriptMap::IsValidTile(reference). * @pre type != SPET_GOAL || ScriptGoal::IsValidGoal(reference). * @pre if type is SPET_GOAL and story_page is a global page, then referenced goal must be global. diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -63,7 +63,7 @@ ScriptText::~ScriptText() { for (int i = 0; i < SCRIPT_TEXT_MAX_PARAMETERS; i++) { free(this->params[i]); - if (this->paramt[i] != NULL) this->paramt[i]->Release(); + if (this->paramt[i] != nullptr) this->paramt[i]->Release(); } } @@ -72,11 +72,11 @@ SQInteger ScriptText::_SetParam(int para if (parameter >= SCRIPT_TEXT_MAX_PARAMETERS) return SQ_ERROR; free(this->params[parameter]); - if (this->paramt[parameter] != NULL) this->paramt[parameter]->Release(); + if (this->paramt[parameter] != nullptr) this->paramt[parameter]->Release(); this->parami[parameter] = 0; - this->params[parameter] = NULL; - this->paramt[parameter] = NULL; + this->params[parameter] = nullptr; + this->paramt[parameter] = nullptr; switch (sq_gettype(vm, -1)) { case OT_STRING: { @@ -97,7 +97,7 @@ SQInteger ScriptText::_SetParam(int para } case OT_INSTANCE: { - SQUserPointer real_instance = NULL; + SQUserPointer real_instance = nullptr; HSQOBJECT instance; sq_getstackobj(vm, -1, &instance); @@ -112,7 +112,7 @@ SQInteger ScriptText::_SetParam(int para /* Get the 'real' instance of this class */ sq_getinstanceup(vm, -1, &real_instance, 0); - if (real_instance == NULL) return SQ_ERROR; + if (real_instance == nullptr) return SQ_ERROR; ScriptText *value = static_cast(real_instance); value->AddRef(); @@ -183,7 +183,7 @@ const char *ScriptText::GetEncodedText() static char buf[1024]; int param_count = 0; this->_GetEncodedText(buf, lastof(buf), param_count); - return (param_count > SCRIPT_TEXT_MAX_PARAMETERS) ? NULL : buf; + return (param_count > SCRIPT_TEXT_MAX_PARAMETERS) ? nullptr : buf; } char *ScriptText::_GetEncodedText(char *p, char *lastofp, int ¶m_count) @@ -191,12 +191,12 @@ char *ScriptText::_GetEncodedText(char * p += Utf8Encode(p, SCC_ENCODED); p += seprintf(p, lastofp, "%X", this->string); for (int i = 0; i < this->paramc; i++) { - if (this->params[i] != NULL) { + if (this->params[i] != nullptr) { p += seprintf(p, lastofp, ":\"%s\"", this->params[i]); param_count++; continue; } - if (this->paramt[i] != NULL) { + if (this->paramt[i] != nullptr) { p += seprintf(p, lastofp, ":"); p = this->paramt[i]->_GetEncodedText(p, lastofp, param_count); continue; @@ -211,7 +211,7 @@ char *ScriptText::_GetEncodedText(char * const char *Text::GetDecodedText() { const char *encoded_text = this->GetEncodedText(); - if (encoded_text == NULL) return NULL; + if (encoded_text == nullptr) return nullptr; static char buf[1024]; ::SetDParamStr(0, encoded_text); diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -23,14 +23,14 @@ class Text : public ScriptObject { public: /** * Convert a ScriptText to a normal string. - * @return A string (in a static buffer), or NULL. + * @return A string (in a static buffer), or nullptr. * @api -all */ virtual const char *GetEncodedText() = 0; /** * Convert a #ScriptText into a decoded normal string. - * @return A string (in a static buffer), or NULL. + * @return A string (in a static buffer), or nullptr. * @api -all */ const char *GetDecodedText(); diff --git a/src/script/api/script_tile.cpp b/src/script/api/script_tile.cpp --- a/src/script/api/script_tile.cpp +++ b/src/script/api/script_tile.cpp @@ -292,7 +292,7 @@ if (!::IsValidTile(tile)) return INVALID_TOWN; Town *town = ::ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority); - if (town == NULL) return INVALID_TOWN; + if (town == nullptr) return INVALID_TOWN; return town->index; } @@ -302,7 +302,7 @@ if (!::IsValidTile(tile)) return INVALID_TOWN; Town *town = ::ClosestTownFromTile(tile, UINT_MAX); - if (town == NULL) return INVALID_TOWN; + if (town == nullptr) return INVALID_TOWN; return town->index; } @@ -310,14 +310,14 @@ /* static */ Money ScriptTile::GetBuildCost(BuildType build_type) { switch (build_type) { - case BT_FOUNDATION: return ::GetPrice(PR_BUILD_FOUNDATION, 1, NULL); - case BT_TERRAFORM: return ::GetPrice(PR_TERRAFORM, 1, NULL); - case BT_BUILD_TREES: return ::GetPrice(PR_BUILD_TREES, 1, NULL); - case BT_CLEAR_GRASS: return ::GetPrice(PR_CLEAR_GRASS, 1, NULL); - case BT_CLEAR_ROUGH: return ::GetPrice(PR_CLEAR_ROUGH, 1, NULL); - case BT_CLEAR_ROCKY: return ::GetPrice(PR_CLEAR_ROCKS, 1, NULL); - case BT_CLEAR_FIELDS: return ::GetPrice(PR_CLEAR_FIELDS, 1, NULL); - case BT_CLEAR_HOUSE: return ::GetPrice(PR_CLEAR_HOUSE, 1, NULL); + case BT_FOUNDATION: return ::GetPrice(PR_BUILD_FOUNDATION, 1, nullptr); + case BT_TERRAFORM: return ::GetPrice(PR_TERRAFORM, 1, nullptr); + case BT_BUILD_TREES: return ::GetPrice(PR_BUILD_TREES, 1, nullptr); + case BT_CLEAR_GRASS: return ::GetPrice(PR_CLEAR_GRASS, 1, nullptr); + case BT_CLEAR_ROUGH: return ::GetPrice(PR_CLEAR_ROUGH, 1, nullptr); + case BT_CLEAR_ROCKY: return ::GetPrice(PR_CLEAR_ROCKS, 1, nullptr); + case BT_CLEAR_FIELDS: return ::GetPrice(PR_CLEAR_FIELDS, 1, nullptr); + case BT_CLEAR_HOUSE: return ::GetPrice(PR_CLEAR_HOUSE, 1, nullptr); default: return -1; } } diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -35,7 +35,7 @@ /* static */ char *ScriptTown::GetName(TownID town_id) { - if (!IsValidTown(town_id)) return NULL; + if (!IsValidTown(town_id)) return nullptr; ::SetDParam(0, town_id); return GetString(STR_TOWN_NAME); @@ -45,8 +45,8 @@ { CCountedPtr counter(name); - const char *text = NULL; - if (name != NULL) { + const char *text = nullptr; + if (name != nullptr) { text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_TOWN_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); @@ -60,7 +60,7 @@ { CCountedPtr counter(text); - EnforcePrecondition(false, text != NULL); + EnforcePrecondition(false, text != nullptr); const char *encoded_text = text->GetEncodedText(); EnforcePreconditionEncodedText(false, encoded_text); EnforcePrecondition(false, IsValidTown(town_id)); @@ -257,7 +257,7 @@ if (ScriptObject::GetCompany() == OWNER_DEITY) return false; if (!IsValidTown(town_id)) return false; - return HasBit(::GetMaskOfTownActions(NULL, ScriptObject::GetCompany(), ::Town::Get(town_id)), town_action); + return HasBit(::GetMaskOfTownActions(nullptr, ScriptObject::GetCompany(), ::Town::Get(town_id)), town_action); } /* static */ bool ScriptTown::PerformTownAction(TownID town_id, TownAction town_action) @@ -293,8 +293,8 @@ layout = (RoadLayout) (byte)_settings_game.economy.town_layout; } - const char *text = NULL; - if (name != NULL) { + const char *text = nullptr; + if (name != nullptr) { text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_TOWN_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); diff --git a/src/script/api/script_town.hpp b/src/script/api/script_town.hpp --- a/src/script/api/script_town.hpp +++ b/src/script/api/script_town.hpp @@ -148,7 +148,7 @@ public: /** * Rename a town. * @param town_id The town to rename - * @param name The new name of the town. If NULL or an empty string is passed, the town name will be reset to the default name. + * @param name The new name of the town. If nullptr or an empty string is passed, the town name will be reset to the default name. * @pre IsValidTown(town_id). * @return True if the action succeeded. * @api -ai @@ -402,7 +402,7 @@ public: * @param size The town size of the new town. * @param city True if the new town should be a city. * @param layout The town layout of the new town. - * @param name The name of the new town. Pass NULL to use a random town name. + * @param name The name of the new town. Pass nullptr to use a random town name. * @game @pre no company mode in scope || ScriptSettings.GetValue("economy.found_town") != 0. * @ai @pre ScriptSettings.GetValue("economy.found_town") != 0. * @game @pre no company mode in scope || size != TOWN_SIZE_LARGE. diff --git a/src/script/api/script_tunnel.cpp b/src/script/api/script_tunnel.cpp --- a/src/script/api/script_tunnel.cpp +++ b/src/script/api/script_tunnel.cpp @@ -102,7 +102,7 @@ static void _DoCommandReturnBuildTunnel1 } ScriptObject::SetCallbackVariable(0, start); - return ScriptObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL, NULL, &::_DoCommandReturnBuildTunnel1); + return ScriptObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL, nullptr, &::_DoCommandReturnBuildTunnel1); } /* static */ bool ScriptTunnel::_BuildTunnelRoad1() @@ -114,7 +114,7 @@ static void _DoCommandReturnBuildTunnel1 DiagDirection dir_1 = ::DiagdirBetweenTiles(end, start); DiagDirection dir_2 = ::ReverseDiagDir(dir_1); - return ScriptObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (ScriptObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, NULL, &::_DoCommandReturnBuildTunnel2); + return ScriptObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (ScriptObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, nullptr, &::_DoCommandReturnBuildTunnel2); } /* static */ bool ScriptTunnel::_BuildTunnelRoad2() diff --git a/src/script/api/script_vehicle.cpp b/src/script/api/script_vehicle.cpp --- a/src/script/api/script_vehicle.cpp +++ b/src/script/api/script_vehicle.cpp @@ -29,7 +29,7 @@ /* static */ bool ScriptVehicle::IsValidVehicle(VehicleID vehicle_id) { const Vehicle *v = ::Vehicle::GetIfValid(vehicle_id); - return v != NULL && (v->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon())); + return v != nullptr && (v->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon())); } /* static */ ScriptCompany::CompanyID ScriptVehicle::GetOwner(VehicleID vehicle_id) @@ -46,8 +46,8 @@ int num = 1; const Train *v = ::Train::GetIfValid(vehicle_id); - if (v != NULL) { - while ((v = v->GetNextUnit()) != NULL) num++; + if (v != nullptr) { + while ((v = v->GetNextUnit()) != nullptr) num++; } return num; @@ -71,7 +71,7 @@ EnforcePreconditionCustomError(VEHICLE_INVALID, !ScriptGameSettings::IsDisabledVehicleType((ScriptVehicle::VehicleType)type), ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - if (!ScriptObject::DoCommand(depot, engine_id | (cargo << 24), 0, ::GetCmdBuildVeh(type), NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; + if (!ScriptObject::DoCommand(depot, engine_id | (cargo << 24), 0, ::GetCmdBuildVeh(type), nullptr, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; /* In case of test-mode, we return VehicleID 0 */ return 0; @@ -104,7 +104,7 @@ EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY); EnforcePrecondition(false, IsValidVehicle(vehicle_id)); - if (!ScriptObject::DoCommand(depot, vehicle_id, share_orders, CMD_CLONE_VEHICLE, NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; + if (!ScriptObject::DoCommand(depot, vehicle_id, share_orders, CMD_CLONE_VEHICLE, nullptr, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; /* In case of test-mode, we return VehicleID 0 */ return 0; @@ -120,13 +120,13 @@ const Train *v = ::Train::Get(source_vehicle_id); while (source_wagon-- > 0) v = v->GetNextUnit(); - const Train *w = NULL; + const Train *w = nullptr; if (dest_vehicle_id != -1) { w = ::Train::Get(dest_vehicle_id); while (dest_wagon-- > 0) w = w->GetNextUnit(); } - return ScriptObject::DoCommand(0, v->index | (move_attached_wagons ? 1 : 0) << 20, w == NULL ? ::INVALID_VEHICLE : w->index, CMD_MOVE_RAIL_VEHICLE); + return ScriptObject::DoCommand(0, v->index | (move_attached_wagons ? 1 : 0) << 20, w == nullptr ? ::INVALID_VEHICLE : w->index, CMD_MOVE_RAIL_VEHICLE); } /* static */ bool ScriptVehicle::MoveWagon(VehicleID source_vehicle_id, int source_wagon, int dest_vehicle_id, int dest_wagon) @@ -243,7 +243,7 @@ EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY); EnforcePrecondition(false, IsValidVehicle(vehicle_id)); - EnforcePrecondition(false, name != NULL); + EnforcePrecondition(false, name != nullptr); const char *text = name->GetDecodedText(); EnforcePreconditionEncodedText(false, text); EnforcePreconditionCustomError(false, ::Utf8StringLength(text) < MAX_LENGTH_VEHICLE_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG); @@ -293,7 +293,7 @@ /* static */ char *ScriptVehicle::GetName(VehicleID vehicle_id) { - if (!IsValidVehicle(vehicle_id)) return NULL; + if (!IsValidVehicle(vehicle_id)) return nullptr; ::SetDParam(0, vehicle_id); return GetString(STR_VEHICLE_NAME); @@ -410,7 +410,7 @@ if (!ScriptCargo::IsValidCargo(cargo)) return -1; uint32 amount = 0; - for (const Vehicle *v = ::Vehicle::Get(vehicle_id); v != NULL; v = v->Next()) { + for (const Vehicle *v = ::Vehicle::Get(vehicle_id); v != nullptr; v = v->Next()) { if (v->cargo_type == cargo) amount += v->cargo_cap; } @@ -423,7 +423,7 @@ if (!ScriptCargo::IsValidCargo(cargo)) return -1; uint32 amount = 0; - for (const Vehicle *v = ::Vehicle::Get(vehicle_id); v != NULL; v = v->Next()) { + for (const Vehicle *v = ::Vehicle::Get(vehicle_id); v != nullptr; v = v->Next()) { if (v->cargo_type == cargo) amount += v->cargo.StoredCount(); } @@ -455,7 +455,7 @@ if (!IsValidVehicle(vehicle_id)) return false; Vehicle *v = ::Vehicle::Get(vehicle_id); - return v->orders.list != NULL && v->orders.list->GetNumVehicles() > 1; + return v->orders.list != nullptr && v->orders.list->GetNumVehicles() > 1; } /* static */ int ScriptVehicle::GetReliability(VehicleID vehicle_id) diff --git a/src/script/api/script_vehicle.hpp b/src/script/api/script_vehicle.hpp --- a/src/script/api/script_vehicle.hpp +++ b/src/script/api/script_vehicle.hpp @@ -115,7 +115,7 @@ public: * @param vehicle_id The vehicle to set the name for. * @param name The name for the vehicle (can be either a raw string, or a ScriptText object). * @pre IsValidVehicle(vehicle_id). - * @pre name != NULL && len(name) != 0. + * @pre name != nullptr && len(name) != 0. * @game @pre Valid ScriptCompanyMode active in scope. * @exception ScriptError::ERR_NAME_IS_NOT_UNIQUE * @return True if and only if the name was changed. diff --git a/src/script/api/script_vehiclelist.cpp b/src/script/api/script_vehiclelist.cpp --- a/src/script/api/script_vehiclelist.cpp +++ b/src/script/api/script_vehiclelist.cpp @@ -101,7 +101,7 @@ ScriptVehicleList_SharedOrders::ScriptVe { if (!ScriptVehicle::IsValidVehicle(vehicle_id)) return; - for (const Vehicle *v = Vehicle::Get(vehicle_id)->FirstShared(); v != NULL; v = v->NextShared()) { + for (const Vehicle *v = Vehicle::Get(vehicle_id)->FirstShared(); v != nullptr; v = v->NextShared()) { this->AddItem(v->index); } } diff --git a/src/script/api/script_waypoint.cpp b/src/script/api/script_waypoint.cpp --- a/src/script/api/script_waypoint.cpp +++ b/src/script/api/script_waypoint.cpp @@ -20,7 +20,7 @@ /* static */ bool ScriptWaypoint::IsValidWaypoint(StationID waypoint_id) { const Waypoint *wp = ::Waypoint::GetIfValid(waypoint_id); - return wp != NULL && (wp->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY || wp->owner == OWNER_NONE); + return wp != nullptr && (wp->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY || wp->owner == OWNER_NONE); } /* static */ StationID ScriptWaypoint::GetWaypointID(TileIndex tile) diff --git a/src/script/api/script_waypointlist.cpp b/src/script/api/script_waypointlist.cpp --- a/src/script/api/script_waypointlist.cpp +++ b/src/script/api/script_waypointlist.cpp @@ -32,7 +32,7 @@ ScriptWaypointList_Vehicle::ScriptWaypoi const Vehicle *v = ::Vehicle::Get(vehicle_id); - for (const Order *o = v->GetFirstOrder(); o != NULL; o = o->next) { + for (const Order *o = v->GetFirstOrder(); o != nullptr; o = o->next) { if (o->IsType(OT_GOTO_WAYPOINT)) this->AddItem(o->GetDestination()); } } diff --git a/src/script/api/script_window.cpp b/src/script/api/script_window.cpp --- a/src/script/api/script_window.cpp +++ b/src/script/api/script_window.cpp @@ -34,10 +34,10 @@ if (ScriptGame::IsMultiplayer()) return false; if (number == NUMBER_ALL) { - return (FindWindowByClass((::WindowClass)window) != NULL); + return (FindWindowByClass((::WindowClass)window) != nullptr); } - return FindWindowById((::WindowClass)window, number) != NULL; + return FindWindowById((::WindowClass)window, number) != nullptr; } /* static */ void ScriptWindow::Highlight(WindowClass window, uint32 number, uint8 widget, TextColour colour) @@ -56,6 +56,6 @@ } const NWidgetBase *wid = w->GetWidget(widget); - if (wid == NULL) return; + if (wid == nullptr) return; w->SetWidgetHighlight(widget, (::TextColour)colour); } diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -21,17 +21,17 @@ void ScriptConfig::Change(const char *name, int version, bool force_exact_match, bool is_random) { free(this->name); - this->name = (name == NULL) ? NULL : stredup(name); - this->info = (name == NULL) ? NULL : this->FindInfo(this->name, version, force_exact_match); - this->version = (info == NULL) ? -1 : info->GetVersion(); + this->name = (name == nullptr) ? nullptr : stredup(name); + this->info = (name == nullptr) ? nullptr : this->FindInfo(this->name, version, force_exact_match); + this->version = (info == nullptr) ? -1 : info->GetVersion(); this->is_random = is_random; - if (this->config_list != NULL) delete this->config_list; - this->config_list = (info == NULL) ? NULL : new ScriptConfigItemList(); - if (this->config_list != NULL) this->PushExtraConfigList(); + if (this->config_list != nullptr) delete this->config_list; + this->config_list = (info == nullptr) ? nullptr : new ScriptConfigItemList(); + if (this->config_list != nullptr) this->PushExtraConfigList(); this->ClearConfigList(); - if (_game_mode == GM_NORMAL && this->info != NULL) { + if (_game_mode == GM_NORMAL && this->info != nullptr) { /* If we're in an existing game and the Script is changed, set all settings * for the Script that have the random flag to a random value. */ for (ScriptConfigItemList::const_iterator it = this->info->GetConfigList()->begin(); it != this->info->GetConfigList()->end(); it++) { @@ -45,10 +45,10 @@ void ScriptConfig::Change(const char *na ScriptConfig::ScriptConfig(const ScriptConfig *config) { - this->name = (config->name == NULL) ? NULL : stredup(config->name); + this->name = (config->name == nullptr) ? nullptr : stredup(config->name); this->info = config->info; this->version = config->version; - this->config_list = NULL; + this->config_list = nullptr; this->is_random = config->is_random; for (SettingValueList::const_iterator it = config->settings.begin(); it != config->settings.end(); it++) { @@ -61,7 +61,7 @@ ScriptConfig::~ScriptConfig() { free(this->name); this->ResetSettings(); - if (this->config_list != NULL) delete this->config_list; + if (this->config_list != nullptr) delete this->config_list; } ScriptInfo *ScriptConfig::GetInfo() const @@ -71,8 +71,8 @@ ScriptInfo *ScriptConfig::GetInfo() cons const ScriptConfigItemList *ScriptConfig::GetConfigList() { - if (this->info != NULL) return this->info->GetConfigList(); - if (this->config_list == NULL) { + if (this->info != nullptr) return this->info->GetConfigList(); + if (this->config_list == nullptr) { this->config_list = new ScriptConfigItemList(); this->PushExtraConfigList(); } @@ -106,10 +106,10 @@ int ScriptConfig::GetSetting(const char void ScriptConfig::SetSetting(const char *name, int value) { /* You can only set Script specific settings if an Script is selected. */ - if (this->info == NULL) return; + if (this->info == nullptr) return; const ScriptConfigItem *config_item = this->info->GetConfigItem(name); - if (config_item == NULL) return; + if (config_item == nullptr) return; value = Clamp(value, config_item->min_value, config_item->max_value); @@ -140,7 +140,7 @@ void ScriptConfig::AddRandomDeviation() bool ScriptConfig::HasScript() const { - return this->info != NULL; + return this->info != nullptr; } bool ScriptConfig::IsRandom() const @@ -163,18 +163,18 @@ void ScriptConfig::StringToSettings(cons char *value_copy = stredup(value); char *s = value_copy; - while (s != NULL) { + while (s != nullptr) { /* Analyze the string ('name=value,name=value\0') */ char *item_name = s; s = strchr(s, '='); - if (s == NULL) break; + if (s == nullptr) break; if (*s == '\0') break; *s = '\0'; s++; char *item_value = s; s = strchr(s, ','); - if (s != NULL) { + if (s != nullptr) { *s = '\0'; s++; } @@ -209,7 +209,7 @@ void ScriptConfig::SettingsToString(char const char *ScriptConfig::GetTextfile(TextfileType type, CompanyID slot) const { - if (slot == INVALID_COMPANY || this->GetInfo() == NULL) return NULL; + if (slot == INVALID_COMPANY || this->GetInfo() == nullptr) return nullptr; return ::GetTextfile(type, (slot == OWNER_DEITY) ? GAME_DIR : AI_DIR, this->GetInfo()->GetMainScript()); } diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp --- a/src/script/script_config.hpp +++ b/src/script/script_config.hpp @@ -61,10 +61,10 @@ protected: public: ScriptConfig() : - name(NULL), + name(nullptr), version(-1), - info(NULL), - config_list(NULL), + info(nullptr), + config_list(nullptr), is_random(false) {} @@ -178,7 +178,7 @@ public: * Search a textfile file next to this script. * @param type The type of the textfile to search for. * @param slot #CompanyID to check status of. - * @return The filename for the textfile, \c NULL otherwise. + * @return The filename for the textfile, \c nullptr otherwise. */ const char *GetTextfile(TextfileType type, CompanyID slot) const; diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -25,7 +25,7 @@ ScriptInfo::~ScriptInfo() for (ScriptConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { free((*it).name); free((*it).description); - if (it->labels != NULL) { + if (it->labels != nullptr) { for (auto &lbl_map : *(*it).labels) { free(lbl_map.second); } @@ -85,7 +85,7 @@ bool ScriptInfo::CheckMethod(const char /* Get location information of the scanner */ info->main_script = stredup(info->scanner->GetMainScript()); const char *tar_name = info->scanner->GetTarFile(); - if (tar_name != NULL) info->tar_file = stredup(tar_name); + if (tar_name != nullptr) info->tar_file = stredup(tar_name); /* Cache the data the info file gives us. */ if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetAuthor", &info->author, MAX_GET_OPS)) return SQ_ERROR; @@ -111,7 +111,7 @@ bool ScriptInfo::CheckMethod(const char bool ScriptInfo::GetSettings() { - return this->engine->CallMethod(*this->SQ_instance, "GetSettings", NULL, MAX_GET_SETTING_OPS); + return this->engine->CallMethod(*this->SQ_instance, "GetSettings", nullptr, MAX_GET_SETTING_OPS); } SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm) @@ -138,8 +138,8 @@ SQInteger ScriptInfo::AddSetting(HSQUIRR /* Don't allow '=' and ',' in configure setting names, as we need those * 2 chars to nicely store the settings as a string. */ - while ((s = strchr(name, '=')) != NULL) *s = '_'; - while ((s = strchr(name, ',')) != NULL) *s = '_'; + while ((s = strchr(name, '=')) != nullptr) *s = '_'; + while ((s = strchr(name, ',')) != nullptr) *s = '_'; config.name = name; items |= 0x001; } else if (strcmp(key, "description") == 0) { @@ -233,18 +233,18 @@ SQInteger ScriptInfo::AddLabels(HSQUIRRE if (SQ_FAILED(sq_getstring(vm, -2, &setting_name))) return SQ_ERROR; ValidateString(setting_name); - ScriptConfigItem *config = NULL; + ScriptConfigItem *config = nullptr; for (ScriptConfigItemList::iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { if (strcmp((*it).name, setting_name) == 0) config = &(*it); } - if (config == NULL) { + if (config == nullptr) { char error[1024]; seprintf(error, lastof(error), "Trying to add labels for non-defined setting '%s'", setting_name); this->engine->ThrowError(error); return SQ_ERROR; } - if (config->labels != NULL) return SQ_ERROR; + if (config->labels != nullptr) return SQ_ERROR; config->labels = new LabelMapping; @@ -289,7 +289,7 @@ const ScriptConfigItem *ScriptInfo::GetC for (ScriptConfigItemList::const_iterator it = this->config_list.begin(); it != this->config_list.end(); it++) { if (strcmp((*it).name, name) == 0) return &(*it); } - return NULL; + return nullptr; } int ScriptInfo::GetSettingDefaultValue(const char *name) const diff --git a/src/script/script_info.hpp b/src/script/script_info.hpp --- a/src/script/script_info.hpp +++ b/src/script/script_info.hpp @@ -32,19 +32,19 @@ static const int MAX_GET_SETTING_OPS class ScriptInfo : public SimpleCountedObject { public: ScriptInfo() : - engine(NULL), - SQ_instance(NULL), - main_script(NULL), - tar_file(NULL), - author(NULL), - name(NULL), - short_name(NULL), - description(NULL), - date(NULL), - instance_name(NULL), + engine(nullptr), + SQ_instance(nullptr), + main_script(nullptr), + tar_file(nullptr), + author(nullptr), + name(nullptr), + short_name(nullptr), + description(nullptr), + date(nullptr), + instance_name(nullptr), version(0), - url(NULL), - scanner(NULL) + url(nullptr), + scanner(nullptr) {} ~ScriptInfo(); diff --git a/src/script/script_info_dummy.cpp b/src/script/script_info_dummy.cpp --- a/src/script/script_info_dummy.cpp +++ b/src/script/script_info_dummy.cpp @@ -86,11 +86,11 @@ void Script_CreateDummy(HSQUIRRELVM vm, char *p = safe_error_message; do { newline = strchr(p, '\n'); - if (newline != NULL) *newline = '\0'; + if (newline != nullptr) *newline = '\0'; dp += seprintf(dp, lastof(dummy_script), " %sLog.Error(\"%s\");\n", type, p); p = newline + 1; - } while (newline != NULL); + } while (newline != nullptr); strecpy(dp, " }\n}\n", lastof(dummy_script)); diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -34,8 +34,8 @@ ScriptStorage::~ScriptStorage() { /* Free our pointers */ - if (event_data != NULL) ScriptEventController::FreeEventPointer(); - if (log_data != NULL) ScriptLog::FreeLogPointer(); + if (event_data != nullptr) ScriptEventController::FreeEventPointer(); + if (log_data != nullptr) ScriptLog::FreeLogPointer(); } /** @@ -50,17 +50,17 @@ static void PrintFunc(bool error_msg, co } ScriptInstance::ScriptInstance(const char *APIName) : - engine(NULL), - versionAPI(NULL), - controller(NULL), - storage(NULL), - instance(NULL), + engine(nullptr), + versionAPI(nullptr), + controller(nullptr), + storage(nullptr), + instance(nullptr), is_started(false), is_dead(false), is_save_data_on_stack(false), suspend(0), is_paused(false), - callback(NULL) + callback(nullptr) { this->storage = new ScriptStorage(); this->engine = new Squirrel(APIName); @@ -135,8 +135,8 @@ ScriptInstance::~ScriptInstance() { ScriptObject::ActiveInstance active(this); - if (instance != NULL) this->engine->ReleaseObject(this->instance); - if (engine != NULL) delete this->engine; + if (instance != nullptr) this->engine->ReleaseObject(this->instance); + if (engine != nullptr) delete this->engine; delete this->storage; delete this->controller; free(this->instance); @@ -153,10 +153,10 @@ void ScriptInstance::Died() DEBUG(script, 0, "The script died unexpectedly."); this->is_dead = true; - if (this->instance != NULL) this->engine->ReleaseObject(this->instance); + if (this->instance != nullptr) this->engine->ReleaseObject(this->instance); delete this->engine; - this->instance = NULL; - this->engine = NULL; + this->instance = nullptr; + this->engine = nullptr; } void ScriptInstance::GameLoop() @@ -179,7 +179,7 @@ void ScriptInstance::GameLoop() _current_company = ScriptObject::GetCompany(); /* If there is a callback to call, call that first */ - if (this->callback != NULL) { + if (this->callback != nullptr) { if (this->is_save_data_on_stack) { sq_poptop(this->engine->GetVM()); this->is_save_data_on_stack = false; @@ -195,7 +195,7 @@ void ScriptInstance::GameLoop() } this->suspend = 0; - this->callback = NULL; + this->callback = nullptr; if (!this->is_started) { try { @@ -351,7 +351,7 @@ static const SaveLoad _script_byte[] = { case OT_INTEGER: { if (!test) { _script_sl_byte = SQSL_INT; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } SQInteger res; sq_getinteger(vm, index, &res); @@ -365,7 +365,7 @@ static const SaveLoad _script_byte[] = { case OT_STRING: { if (!test) { _script_sl_byte = SQSL_STRING; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } const SQChar *buf; sq_getstring(vm, index, &buf); @@ -376,7 +376,7 @@ static const SaveLoad _script_byte[] = { } if (!test) { _script_sl_byte = (byte)len; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); SlArray(const_cast(buf), len, SLE_CHAR); } return true; @@ -385,7 +385,7 @@ static const SaveLoad _script_byte[] = { case OT_ARRAY: { if (!test) { _script_sl_byte = SQSL_ARRAY; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } sq_pushnull(vm); while (SQ_SUCCEEDED(sq_next(vm, index - 1))) { @@ -400,7 +400,7 @@ static const SaveLoad _script_byte[] = { sq_pop(vm, 1); if (!test) { _script_sl_byte = SQSL_ARRAY_TABLE_END; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } return true; } @@ -408,7 +408,7 @@ static const SaveLoad _script_byte[] = { case OT_TABLE: { if (!test) { _script_sl_byte = SQSL_TABLE; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } sq_pushnull(vm); while (SQ_SUCCEEDED(sq_next(vm, index - 1))) { @@ -423,7 +423,7 @@ static const SaveLoad _script_byte[] = { sq_pop(vm, 1); if (!test) { _script_sl_byte = SQSL_ARRAY_TABLE_END; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } return true; } @@ -431,13 +431,13 @@ static const SaveLoad _script_byte[] = { case OT_BOOL: { if (!test) { _script_sl_byte = SQSL_BOOL; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } SQBool res; sq_getbool(vm, index, &res); if (!test) { _script_sl_byte = res ? 1 : 0; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } return true; } @@ -445,7 +445,7 @@ static const SaveLoad _script_byte[] = { case OT_NULL: { if (!test) { _script_sl_byte = SQSL_NULL; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } return true; } @@ -459,7 +459,7 @@ static const SaveLoad _script_byte[] = { /* static */ void ScriptInstance::SaveEmpty() { _script_sl_byte = 0; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } void ScriptInstance::Save() @@ -467,7 +467,7 @@ void ScriptInstance::Save() ScriptObject::ActiveInstance active(this); /* Don't save data if the script didn't start yet or if it crashed. */ - if (this->engine == NULL || this->engine->HasScriptCrashed()) { + if (this->engine == nullptr || this->engine->HasScriptCrashed()) { SaveEmpty(); return; } @@ -475,7 +475,7 @@ void ScriptInstance::Save() HSQUIRRELVM vm = this->engine->GetVM(); if (this->is_save_data_on_stack) { _script_sl_byte = 1; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); /* Save the data that was just loaded. */ SaveObject(vm, -1, SQUIRREL_MAX_DEPTH, false); } else if (!this->is_started) { @@ -518,7 +518,7 @@ void ScriptInstance::Save() sq_pushobject(vm, savedata); if (SaveObject(vm, -1, SQUIRREL_MAX_DEPTH, true)) { _script_sl_byte = 1; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); SaveObject(vm, -1, SQUIRREL_MAX_DEPTH, false); this->is_save_data_on_stack = true; } else { @@ -528,7 +528,7 @@ void ScriptInstance::Save() } else { ScriptLog::Warning("Save function is not implemented"); _script_sl_byte = 0; - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); } } @@ -553,50 +553,50 @@ bool ScriptInstance::IsPaused() /* static */ bool ScriptInstance::LoadObjects(HSQUIRRELVM vm) { - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); switch (_script_sl_byte) { case SQSL_INT: { int value; SlArray(&value, 1, SLE_INT32); - if (vm != NULL) sq_pushinteger(vm, (SQInteger)value); + if (vm != nullptr) sq_pushinteger(vm, (SQInteger)value); return true; } case SQSL_STRING: { - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); static char buf[256]; SlArray(buf, _script_sl_byte, SLE_CHAR); - if (vm != NULL) sq_pushstring(vm, buf, -1); + if (vm != nullptr) sq_pushstring(vm, buf, -1); return true; } case SQSL_ARRAY: { - if (vm != NULL) sq_newarray(vm, 0); + if (vm != nullptr) sq_newarray(vm, 0); while (LoadObjects(vm)) { - if (vm != NULL) sq_arrayappend(vm, -2); + if (vm != nullptr) sq_arrayappend(vm, -2); /* The value is popped from the stack by squirrel. */ } return true; } case SQSL_TABLE: { - if (vm != NULL) sq_newtable(vm); + if (vm != nullptr) sq_newtable(vm); while (LoadObjects(vm)) { LoadObjects(vm); - if (vm != NULL) sq_rawset(vm, -3); + if (vm != nullptr) sq_rawset(vm, -3); /* The key (-2) and value (-1) are popped from the stack by squirrel. */ } return true; } case SQSL_BOOL: { - SlObject(NULL, _script_byte); - if (vm != NULL) sq_pushbool(vm, (SQBool)(_script_sl_byte != 0)); + SlObject(nullptr, _script_byte); + if (vm != nullptr) sq_pushbool(vm, (SQBool)(_script_sl_byte != 0)); return true; } case SQSL_NULL: { - if (vm != NULL) sq_pushnull(vm); + if (vm != nullptr) sq_pushnull(vm); return true; } @@ -610,24 +610,24 @@ bool ScriptInstance::IsPaused() /* static */ void ScriptInstance::LoadEmpty() { - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); /* Check if there was anything saved at all. */ if (_script_sl_byte == 0) return; - LoadObjects(NULL); + LoadObjects(nullptr); } void ScriptInstance::Load(int version) { ScriptObject::ActiveInstance active(this); - if (this->engine == NULL || version == -1) { + if (this->engine == nullptr || version == -1) { LoadEmpty(); return; } HSQUIRRELVM vm = this->engine->GetVM(); - SlObject(NULL, _script_byte); + SlObject(nullptr, _script_byte); /* Check if there was anything saved at all. */ if (_script_sl_byte == 0) return; diff --git a/src/script/script_instance.hpp b/src/script/script_instance.hpp --- a/src/script/script_instance.hpp +++ b/src/script/script_instance.hpp @@ -52,7 +52,7 @@ public: * Find a library. * @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. */ virtual class ScriptInfo *FindLibrary(const char *library, int version) = 0; diff --git a/src/script/script_scanner.cpp b/src/script/script_scanner.cpp --- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -28,19 +28,19 @@ bool ScriptScanner::AddFile(const char * { free(this->main_script); this->main_script = stredup(filename); - if (this->main_script == NULL) return false; + if (this->main_script == nullptr) return false; free(this->tar_file); - if (tar_filename != NULL) { + if (tar_filename != nullptr) { this->tar_file = stredup(tar_filename); - if (this->tar_file == NULL) return false; + if (this->tar_file == nullptr) return false; } else { - this->tar_file = NULL; + this->tar_file = nullptr; } const char *end = this->main_script + strlen(this->main_script) + 1; char *p = strrchr(this->main_script, PATHSEPCHAR); - if (p == NULL) { + if (p == nullptr) { p = this->main_script; } else { /* Skip over the path separator character. We don't need that. */ @@ -58,9 +58,9 @@ bool ScriptScanner::AddFile(const char * } ScriptScanner::ScriptScanner() : - engine(NULL), - main_script(NULL), - tar_file(NULL) + engine(nullptr), + main_script(nullptr), + tar_file(nullptr) { } @@ -203,7 +203,7 @@ struct ScriptFileChecksumCreator : FileS /* Open the file ... */ FILE *f = FioFOpenFile(filename, "rb", this->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) { @@ -241,7 +241,7 @@ static bool IsSameScript(const ContentIn ScriptFileChecksumCreator checksum(dir); const char *tar_filename = info->GetTarFile(); TarList::iterator iter; - if (tar_filename != NULL && (iter = _tar_list[dir].find(tar_filename)) != _tar_list[dir].end()) { + if (tar_filename != nullptr && (iter = _tar_list[dir].find(tar_filename)) != _tar_list[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 MD5 checksumming. */ TarFileList::iterator tar; @@ -251,7 +251,7 @@ static bool IsSameScript(const ContentIn /* Check the extension. */ const char *ext = strrchr(tar->first.c_str(), '.'); - if (ext == NULL || strcasecmp(ext, ".nut") != 0) continue; + if (ext == nullptr || strcasecmp(ext, ".nut") != 0) continue; checksum.AddFile(tar->first.c_str(), 0, tar_filename); } @@ -281,5 +281,5 @@ const char *ScriptScanner::FindMainScrip for (ScriptInfoList::iterator it = this->info_list.begin(); it != this->info_list.end(); it++) { if (IsSameScript(ci, md5sum, (*it).second, this->GetDirectory())) return (*it).second->GetMainScript(); } - return NULL; + return nullptr; } diff --git a/src/script/script_scanner.hpp b/src/script/script_scanner.hpp --- a/src/script/script_scanner.hpp +++ b/src/script/script_scanner.hpp @@ -73,7 +73,7 @@ public: * Find a script of a #ContentInfo * @param ci The information to compare to. * @param md5sum Whether to check the MD5 checksum. - * @return A filename of a file of the content, else \c NULL. + * @return A filename of a file of the content, else \c nullptr. */ const char *FindMainScript(const ContentInfo *ci, bool md5sum); diff --git a/src/script/script_storage.hpp b/src/script/script_storage.hpp --- a/src/script/script_storage.hpp +++ b/src/script/script_storage.hpp @@ -63,8 +63,8 @@ private: public: ScriptStorage() : - mode (NULL), - mode_instance (NULL), + mode (nullptr), + mode_instance (nullptr), root_company (INVALID_OWNER), company (INVALID_OWNER), delay (1), @@ -82,8 +82,8 @@ public: /* calback_value (can't be set) */ road_type (INVALID_ROADTYPE), rail_type (INVALID_RAILTYPE), - event_data (NULL), - log_data (NULL) + event_data (nullptr), + log_data (nullptr) { } ~ScriptStorage(); diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -31,7 +31,7 @@ void Squirrel::CompileError(HSQUIRRELVM Squirrel *engine = (Squirrel *)sq_getforeignptr(vm); engine->crashed = true; SQPrintFunc *func = engine->print_func; - if (func == NULL) { + if (func == nullptr) { DEBUG(misc, 0, "[Squirrel] Compile error: %s", buf); } else { (*func)(true, buf); @@ -49,7 +49,7 @@ void Squirrel::ErrorPrintFunc(HSQUIRRELV /* Check if we have a custom print function */ SQPrintFunc *func = ((Squirrel *)sq_getforeignptr(vm))->print_func; - if (func == NULL) { + if (func == nullptr) { fprintf(stderr, "%s", buf); } else { (*func)(true, buf); @@ -67,7 +67,7 @@ void Squirrel::RunError(HSQUIRRELVM vm, seprintf(buf, lastof(buf), "Your script made an error: %s\n", error); Squirrel *engine = (Squirrel *)sq_getforeignptr(vm); SQPrintFunc *func = engine->print_func; - if (func == NULL) { + if (func == nullptr) { fprintf(stderr, "%s", buf); } else { (*func)(true, buf); @@ -106,7 +106,7 @@ void Squirrel::PrintFunc(HSQUIRRELVM vm, /* Check if we have a custom print function */ SQPrintFunc *func = ((Squirrel *)sq_getforeignptr(vm))->print_func; - if (func == NULL) { + if (func == nullptr) { printf("%s", buf); } else { (*func)(false, buf); @@ -234,8 +234,8 @@ bool Squirrel::CallMethod(HSQOBJECT inst } /* Call the method */ sq_pushobject(this->vm, instance); - if (SQ_FAILED(sq_call(this->vm, 1, ret == NULL ? SQFalse : SQTrue, SQTrue, suspend))) return false; - if (ret != NULL) sq_getstackobj(vm, -1, ret); + if (SQ_FAILED(sq_call(this->vm, 1, ret == nullptr ? SQFalse : SQTrue, SQTrue, suspend))) return false; + if (ret != nullptr) sq_getstackobj(vm, -1, ret); /* Reset the top, but don't do so for the script main function, as we need * a correct stack when resuming. */ if (suspend == -1 || !this->IsSuspended()) sq_settop(this->vm, top); @@ -305,7 +305,7 @@ bool Squirrel::CallBoolMethod(HSQOBJECT return false; } - if (instance != NULL) { + if (instance != nullptr) { /* Find our instance */ sq_getstackobj(vm, -1, instance); /* Add a reference to it, so it survives for ever */ @@ -316,16 +316,16 @@ bool Squirrel::CallBoolMethod(HSQOBJECT /* Store it in the class */ sq_setinstanceup(vm, -1, real_instance); - if (release_hook != NULL) sq_setreleasehook(vm, -1, release_hook); + if (release_hook != nullptr) sq_setreleasehook(vm, -1, release_hook); - if (instance != NULL) sq_settop(vm, oldtop); + if (instance != nullptr) sq_settop(vm, oldtop); return true; } bool Squirrel::CreateClassInstance(const char *class_name, void *real_instance, HSQOBJECT *instance) { - return Squirrel::CreateClassInstanceVM(this->vm, class_name, real_instance, instance, NULL); + return Squirrel::CreateClassInstanceVM(this->vm, class_name, real_instance, instance, nullptr); } Squirrel::Squirrel(const char *APIName) : @@ -336,8 +336,8 @@ Squirrel::Squirrel(const char *APIName) void Squirrel::Initialize() { - this->global_pointer = NULL; - this->print_func = NULL; + this->global_pointer = nullptr; + this->print_func = nullptr; this->crashed = false; this->overdrawn_ops = 0; this->vm = sq_open(1024); @@ -436,15 +436,15 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM size_t size; if (strncmp(this->GetAPIName(), "AI", 2) == 0) { file = FioFOpenFile(filename, "rb", AI_DIR, &size); - if (file == NULL) file = FioFOpenFile(filename, "rb", AI_LIBRARY_DIR, &size); + if (file == nullptr) file = FioFOpenFile(filename, "rb", AI_LIBRARY_DIR, &size); } else if (strncmp(this->GetAPIName(), "GS", 2) == 0) { file = FioFOpenFile(filename, "rb", GAME_DIR, &size); - if (file == NULL) file = FioFOpenFile(filename, "rb", GAME_LIBRARY_DIR, &size); + if (file == nullptr) file = FioFOpenFile(filename, "rb", GAME_LIBRARY_DIR, &size); } else { NOT_REACHED(); } - if (file == NULL) { + if (file == nullptr) { return sq_throwerror(vm, "cannot open the file"); } unsigned short bom = 0; diff --git a/src/script/squirrel.hpp b/src/script/squirrel.hpp --- a/src/script/squirrel.hpp +++ b/src/script/squirrel.hpp @@ -26,7 +26,7 @@ private: HSQUIRRELVM vm; ///< The VirtualMachine instance for squirrel void *global_pointer; ///< Can be set by who ever initializes Squirrel - SQPrintFunc *print_func; ///< Points to either NULL, or a custom print handler + SQPrintFunc *print_func; ///< Points to either nullptr, or a custom print handler bool crashed; ///< True if the squirrel script made an error. int overdrawn_ops; ///< The amount of operations we have overdrawn. const char *APIName; ///< Name of the API used for this squirrel. @@ -93,7 +93,7 @@ public: * Adds a function to the stack. Depending on the current state this means * either a method or a global function. */ - void AddMethod(const char *method_name, SQFUNCTION proc, uint nparam = 0, const char *params = NULL, void *userdata = NULL, int size = 0); + void AddMethod(const char *method_name, SQFUNCTION proc, uint nparam = 0, const char *params = nullptr, void *userdata = nullptr, int size = 0); /** * Adds a const to the stack. Depending on the current state this means @@ -155,7 +155,7 @@ public: * @return False if the script crashed or returned a wrong type. */ bool CallMethod(HSQOBJECT instance, const char *method_name, HSQOBJECT *ret, int suspend); - bool CallMethod(HSQOBJECT instance, const char *method_name, int suspend) { return this->CallMethod(instance, method_name, NULL, suspend); } + bool CallMethod(HSQOBJECT instance, const char *method_name, int suspend) { return this->CallMethod(instance, method_name, nullptr, suspend); } bool CallStringMethodStrdup(HSQOBJECT instance, const char *method_name, const char **res, int suspend); bool CallIntegerMethod(HSQOBJECT instance, const char *method_name, int *res, int suspend); bool CallBoolMethod(HSQOBJECT instance, const char *method_name, bool *res, int suspend); diff --git a/src/script/squirrel_class.hpp b/src/script/squirrel_class.hpp --- a/src/script/squirrel_class.hpp +++ b/src/script/squirrel_class.hpp @@ -35,7 +35,7 @@ public: void DefSQMethod(Squirrel *engine, Func function_proc, const char *function_name) { using namespace SQConvert; - engine->AddMethod(function_name, DefSQNonStaticCallback, 0, NULL, &function_proc, sizeof(function_proc)); + engine->AddMethod(function_name, DefSQNonStaticCallback, 0, nullptr, &function_proc, sizeof(function_proc)); } /** @@ -45,7 +45,7 @@ public: void DefSQAdvancedMethod(Squirrel *engine, Func function_proc, const char *function_name) { using namespace SQConvert; - engine->AddMethod(function_name, DefSQAdvancedNonStaticCallback, 0, NULL, &function_proc, sizeof(function_proc)); + engine->AddMethod(function_name, DefSQAdvancedNonStaticCallback, 0, nullptr, &function_proc, sizeof(function_proc)); } /** @@ -68,7 +68,7 @@ public: void DefSQStaticMethod(Squirrel *engine, Func function_proc, const char *function_name) { using namespace SQConvert; - engine->AddMethod(function_name, DefSQStaticCallback, 0, NULL, &function_proc, sizeof(function_proc)); + engine->AddMethod(function_name, DefSQStaticCallback, 0, nullptr, &function_proc, sizeof(function_proc)); } /** @@ -78,7 +78,7 @@ public: void DefSQAdvancedStaticMethod(Squirrel *engine, Func function_proc, const char *function_name) { using namespace SQConvert; - engine->AddMethod(function_name, DefSQAdvancedStaticCallback, 0, NULL, &function_proc, sizeof(function_proc)); + engine->AddMethod(function_name, DefSQAdvancedStaticCallback, 0, nullptr, &function_proc, sizeof(function_proc)); } /** @@ -120,7 +120,7 @@ public: void AddSQAdvancedConstructor(Squirrel *engine) { using namespace SQConvert; - engine->AddMethod("constructor", DefSQAdvancedConstructorCallback, 0, NULL); + engine->AddMethod("constructor", DefSQAdvancedConstructorCallback, 0, nullptr); } void PostRegister(Squirrel *engine) diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -88,8 +88,8 @@ namespace SQConvert { template <> inline int Return (HSQUIRRELVM vm, int64 res) { sq_pushinteger(vm, res); return 1; } template <> inline int Return (HSQUIRRELVM vm, Money res) { sq_pushinteger(vm, res); return 1; } template <> inline int Return (HSQUIRRELVM vm, bool res) { sq_pushbool (vm, res); return 1; } - template <> inline int Return (HSQUIRRELVM vm, char *res) { if (res == NULL) sq_pushnull(vm); else { sq_pushstring(vm, res, -1); free(res); } return 1; } - template <> inline int Return(HSQUIRRELVM vm, const char *res) { if (res == NULL) sq_pushnull(vm); else { sq_pushstring(vm, res, -1); } return 1; } + template <> inline int Return (HSQUIRRELVM vm, char *res) { if (res == nullptr) sq_pushnull(vm); else { sq_pushstring(vm, res, -1); free(res); } return 1; } + template <> inline int Return(HSQUIRRELVM vm, const char *res) { if (res == nullptr) sq_pushnull(vm); else { sq_pushstring(vm, res, -1); } return 1; } template <> inline int Return (HSQUIRRELVM vm, void *res) { sq_pushuserpointer(vm, res); return 1; } template <> inline int Return (HSQUIRRELVM vm, HSQOBJECT res) { sq_pushobject(vm, res); return 1; } @@ -739,8 +739,8 @@ namespace SQConvert { { /* Find the amount of params we got */ int nparam = sq_gettop(vm); - SQUserPointer ptr = NULL; - SQUserPointer real_instance = NULL; + SQUserPointer ptr = nullptr; + SQUserPointer real_instance = nullptr; HSQOBJECT instance; /* Get the 'SQ' instance of this class */ @@ -759,7 +759,7 @@ namespace SQConvert { sq_getinstanceup(vm, 1, &real_instance, 0); /* Get the real function pointer */ sq_getuserdata(vm, nparam, &ptr, 0); - if (real_instance == NULL) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call"); + if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call"); /* Remove the userdata from the stack */ sq_pop(vm, 1); @@ -781,8 +781,8 @@ namespace SQConvert { { /* Find the amount of params we got */ int nparam = sq_gettop(vm); - SQUserPointer ptr = NULL; - SQUserPointer real_instance = NULL; + SQUserPointer ptr = nullptr; + SQUserPointer real_instance = nullptr; HSQOBJECT instance; /* Get the 'SQ' instance of this class */ @@ -801,7 +801,7 @@ namespace SQConvert { sq_getinstanceup(vm, 1, &real_instance, 0); /* Get the real function pointer */ sq_getuserdata(vm, nparam, &ptr, 0); - if (real_instance == NULL) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call"); + if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call"); /* Remove the userdata from the stack */ sq_pop(vm, 1); @@ -819,14 +819,14 @@ namespace SQConvert { { /* Find the amount of params we got */ int nparam = sq_gettop(vm); - SQUserPointer ptr = NULL; + SQUserPointer ptr = nullptr; /* Get the real function pointer */ sq_getuserdata(vm, nparam, &ptr, 0); try { /* Delegate it to a template that can handle this specific function */ - return HelperT::SQCall((Tcls *)NULL, *(Tmethod *)ptr, vm); + return HelperT::SQCall((Tcls *)nullptr, *(Tmethod *)ptr, vm); } catch (SQInteger e) { return e; } @@ -843,7 +843,7 @@ namespace SQConvert { { /* Find the amount of params we got */ int nparam = sq_gettop(vm); - SQUserPointer ptr = NULL; + SQUserPointer ptr = nullptr; /* Get the real function pointer */ sq_getuserdata(vm, nparam, &ptr, 0); @@ -862,7 +862,7 @@ namespace SQConvert { static SQInteger DefSQDestructorCallback(SQUserPointer p, SQInteger size) { /* Remove the real instance too */ - if (p != NULL) ((Tcls *)p)->Release(); + if (p != nullptr) ((Tcls *)p)->Release(); return 0; } @@ -876,7 +876,7 @@ namespace SQConvert { { try { /* Create the real instance */ - Tcls *instance = HelperT::SQConstruct((Tcls *)NULL, (Tmethod)NULL, vm); + Tcls *instance = HelperT::SQConstruct((Tcls *)nullptr, (Tmethod)nullptr, vm); sq_setinstanceup(vm, -Tnparam, instance); sq_setreleasehook(vm, -Tnparam, DefSQDestructorCallback); instance->AddRef(); diff --git a/src/script/squirrel_std.cpp b/src/script/squirrel_std.cpp --- a/src/script/squirrel_std.cpp +++ b/src/script/squirrel_std.cpp @@ -51,7 +51,7 @@ SQInteger SquirrelStd::require(HSQUIRREL /* Get the script-name of the current file, so we can work relative from it */ SQStackInfos si; sq_stackinfos(vm, 1, &si); - if (si.source == NULL) { + if (si.source == nullptr) { DEBUG(misc, 0, "[squirrel] Couldn't detect the script-name of the 'require'-caller; this should never happen!"); return SQ_ERROR; } @@ -60,7 +60,7 @@ SQInteger SquirrelStd::require(HSQUIRREL strecpy(path, si.source, lastof(path)); /* Keep the dir, remove the rest */ SQChar *s = strrchr(path, PATHSEPCHAR); - if (s != NULL) { + if (s != nullptr) { /* Keep the PATHSEPCHAR there, remove the rest */ s++; *s = '\0'; diff --git a/src/settings.cpp b/src/settings.cpp --- a/src/settings.cpp +++ b/src/settings.cpp @@ -96,7 +96,7 @@ static const char * const _list_group_na "newgrf", "servers", "server_bind_addresses", - NULL + nullptr }; /** @@ -114,7 +114,7 @@ static size_t LookupOneOfMany(const char if (onelen == 0) onelen = strlen(one); /* check if it's an integer */ - if (*one >= '0' && *one <= '9') return strtoul(one, NULL, 0); + if (*one >= '0' && *one <= '9') return strtoul(one, nullptr, 0); idx = 0; for (;;) { @@ -218,7 +218,7 @@ static bool LoadIntList(const char *str, int items[64]; int i, nitems; - if (str == NULL) { + if (str == nullptr) { memset(items, 0, sizeof(items)); nitems = nelems; } else { @@ -348,7 +348,7 @@ static void MakeManyOfMany(char *buf, co */ static const void *StringToVal(const SettingDescBase *desc, const char *orig_str) { - const char *str = orig_str == NULL ? "" : orig_str; + const char *str = orig_str == nullptr ? "" : orig_str; switch (desc->cmd) { case SDT_NUMX: { @@ -373,7 +373,7 @@ static const void *StringToVal(const Set size_t r = LookupOneOfMany(desc->many, str); /* if the first attempt of conversion from string to the appropriate value fails, * look if we have defined a converter from old value to new value. */ - if (r == (size_t)-1 && desc->proc_cnvt != NULL) r = desc->proc_cnvt(str); + if (r == (size_t)-1 && desc->proc_cnvt != nullptr) r = desc->proc_cnvt(str); if (r != (size_t)-1) return (void*)r; // and here goes converted value ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE); @@ -409,7 +409,7 @@ static const void *StringToVal(const Set default: break; } - return NULL; + return nullptr; } /** @@ -508,7 +508,7 @@ static void IniLoadSettings(IniFile *ini /* For settings.xx.yy load the settings from [xx] yy = ? */ s = strchr(sdb->name, '.'); - if (s != NULL) { + if (s != nullptr) { group = ini->GetGroup(sdb->name, s - sdb->name); s++; } else { @@ -517,19 +517,19 @@ static void IniLoadSettings(IniFile *ini } item = group->GetItem(s, false); - if (item == NULL && group != group_def) { + if (item == nullptr && group != group_def) { /* For settings.xx.yy load the settings from [settingss] yy = ? in case the previous * did not exist (e.g. loading old config files with a [settings] section */ item = group_def->GetItem(s, false); } - if (item == NULL) { + if (item == nullptr) { /* For settings.xx.zz.yy load the settings from [zz] yy = ? in case the previous * did not exist (e.g. loading old config files with a [yapf] section */ const char *sc = strchr(s, '.'); - if (sc != NULL) item = ini->GetGroup(s, sc - s)->GetItem(sc + 1, false); + if (sc != nullptr) item = ini->GetGroup(s, sc - s)->GetItem(sc + 1, false); } - p = (item == NULL) ? sdb->def : StringToVal(sdb, item->value); + p = (item == nullptr) ? sdb->def : StringToVal(sdb, item->value); ptr = GetVariableAddress(object, sld); switch (sdb->cmd) { @@ -544,16 +544,16 @@ static void IniLoadSettings(IniFile *ini switch (GetVarMemType(sld->conv)) { case SLE_VAR_STRB: case SLE_VAR_STRBQ: - if (p != NULL) strecpy((char*)ptr, (const char*)p, (char*)ptr + sld->length - 1); + if (p != nullptr) strecpy((char*)ptr, (const char*)p, (char*)ptr + sld->length - 1); break; case SLE_VAR_STR: case SLE_VAR_STRQ: free(*(char**)ptr); - *(char**)ptr = p == NULL ? NULL : stredup((const char*)p); + *(char**)ptr = p == nullptr ? nullptr : stredup((const char*)p); break; - case SLE_VAR_CHAR: if (p != NULL) *(char *)ptr = *(const char *)p; break; + case SLE_VAR_CHAR: if (p != nullptr) *(char *)ptr = *(const char *)p; break; default: NOT_REACHED(); } @@ -567,7 +567,7 @@ static void IniLoadSettings(IniFile *ini /* Use default */ LoadIntList((const char*)sdb->def, ptr, sld->length, GetVarMemType(sld->conv)); - } else if (sd->desc.proc_cnvt != NULL) { + } else if (sd->desc.proc_cnvt != nullptr) { sd->desc.proc_cnvt((const char*)p); } break; @@ -591,7 +591,7 @@ static void IniLoadSettings(IniFile *ini */ static void IniSaveSettings(IniFile *ini, const SettingDesc *sd, const char *grpname, void *object) { - IniGroup *group_def = NULL, *group; + IniGroup *group_def = nullptr, *group; IniItem *item; char buf[512]; const char *s; @@ -608,11 +608,11 @@ static void IniSaveSettings(IniFile *ini /* XXX - wtf is this?? (group override?) */ s = strchr(sdb->name, '.'); - if (s != NULL) { + if (s != nullptr) { group = ini->GetGroup(sdb->name, s - sdb->name); s++; } else { - if (group_def == NULL) group_def = ini->GetGroup(grpname); + if (group_def == nullptr) group_def = ini->GetGroup(grpname); s = sdb->name; group = group_def; } @@ -620,7 +620,7 @@ static void IniSaveSettings(IniFile *ini item = group->GetItem(s, true); ptr = GetVariableAddress(object, sld); - if (item->value != NULL) { + if (item->value != nullptr) { /* check if the value is the same as the old value */ const void *p = StringToVal(sdb, item->value); @@ -633,7 +633,7 @@ static void IniSaveSettings(IniFile *ini case SDT_MANYOFMANY: switch (GetVarMemType(sld->conv)) { case SLE_VAR_BL: - if (*(bool*)ptr == (p != NULL)) continue; + if (*(bool*)ptr == (p != nullptr)) continue; break; case SLE_VAR_I8: @@ -684,7 +684,7 @@ static void IniSaveSettings(IniFile *ini case SLE_VAR_STR: strecpy(buf, *(char**)ptr, lastof(buf)); break; case SLE_VAR_STRQ: - if (*(char**)ptr == NULL) { + if (*(char**)ptr == nullptr) { buf[0] = '\0'; } else { seprintf(buf, lastof(buf), "\"%s\"", *(char**)ptr); @@ -711,7 +711,7 @@ static void IniSaveSettings(IniFile *ini /** * Loads all items from a 'grpname' section into a list - * The list parameter can be a NULL pointer, in this case nothing will be + * The list parameter can be a nullptr pointer, in this case nothing will be * saved and a callback function should be defined that will take over the * list-handling and store the data itself somewhere. * @param ini IniFile handle to the ini file with the source data @@ -722,18 +722,18 @@ static void IniLoadSettingList(IniFile * { IniGroup *group = ini->GetGroup(grpname); - if (group == NULL) return; + if (group == nullptr) return; list.clear(); - for (const IniItem *item = group->item; item != NULL; item = item->next) { - if (item->name != NULL) list.emplace_back(item->name); + for (const IniItem *item = group->item; item != nullptr; item = item->next) { + if (item->name != nullptr) list.emplace_back(item->name); } } /** * Saves all items from a list into the 'grpname' section - * The list parameter can be a NULL pointer, in this case a callback function + * The list parameter can be a nullptr pointer, in this case a callback function * should be defined that will provide the source data to be saved. * @param ini IniFile handle to the ini file where the destination data is saved * @param grpname character string identifying the section-header of the ini file @@ -744,7 +744,7 @@ static void IniSaveSettingList(IniFile * { IniGroup *group = ini->GetGroup(grpname); - if (group == NULL) return; + if (group == nullptr) return; group->Clear(); for (const auto &iter : list) { @@ -805,7 +805,7 @@ SettingType SettingDesc::GetType() const /** Reposition the main toolbar as the setting changed. */ static bool v_PositionMainToolbar(int32 p1) { - if (_game_mode != GM_MENU) PositionMainToolbar(NULL); + if (_game_mode != GM_MENU) PositionMainToolbar(nullptr); return true; } @@ -813,9 +813,9 @@ static bool v_PositionMainToolbar(int32 static bool v_PositionStatusbar(int32 p1) { if (_game_mode != GM_MENU) { - PositionStatusbar(NULL); - PositionNewsMessage(NULL); - PositionNetworkChatWindow(NULL); + PositionStatusbar(nullptr); + PositionNewsMessage(nullptr); + PositionNetworkChatWindow(nullptr); } return true; } @@ -1416,14 +1416,14 @@ static void AILoadConfig(IniFile *ini, c /* Clean any configured AI */ for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { - AIConfig::GetConfig(c, AIConfig::SSS_FORCE_NEWGAME)->Change(NULL); + AIConfig::GetConfig(c, AIConfig::SSS_FORCE_NEWGAME)->Change(nullptr); } /* If no group exists, return */ - if (group == NULL) return; + if (group == nullptr) return; CompanyID c = COMPANY_FIRST; - for (item = group->item; c < MAX_COMPANIES && item != NULL; c++, item = item->next) { + for (item = group->item; c < MAX_COMPANIES && item != nullptr; c++, item = item->next) { AIConfig *config = AIConfig::GetConfig(c, AIConfig::SSS_FORCE_NEWGAME); config->Change(item->name); @@ -1433,7 +1433,7 @@ static void AILoadConfig(IniFile *ini, c continue; } } - if (item->value != NULL) config->StringToSettings(item->value); + if (item->value != nullptr) config->StringToSettings(item->value); } } @@ -1443,13 +1443,13 @@ static void GameLoadConfig(IniFile *ini, IniItem *item; /* Clean any configured GameScript */ - GameConfig::GetConfig(GameConfig::SSS_FORCE_NEWGAME)->Change(NULL); + GameConfig::GetConfig(GameConfig::SSS_FORCE_NEWGAME)->Change(nullptr); /* If no group exists, return */ - if (group == NULL) return; + if (group == nullptr) return; item = group->item; - if (item == NULL) return; + if (item == nullptr) return; GameConfig *config = GameConfig::GetConfig(AIConfig::SSS_FORCE_NEWGAME); @@ -1460,7 +1460,7 @@ static void GameLoadConfig(IniFile *ini, return; } } - if (item->value != NULL) config->StringToSettings(item->value); + if (item->value != nullptr) config->StringToSettings(item->value); } /** @@ -1507,13 +1507,13 @@ static GRFConfig *GRFLoadConfig(IniFile { IniGroup *group = ini->GetGroup(grpname); IniItem *item; - GRFConfig *first = NULL; + GRFConfig *first = nullptr; GRFConfig **curr = &first; - if (group == NULL) return NULL; + if (group == nullptr) return nullptr; - for (item = group->item; item != NULL; item = item->next) { - GRFConfig *c = NULL; + for (item = group->item; item != nullptr; item = item->next) { + GRFConfig *c = nullptr; uint8 grfid_buf[4], md5sum[16]; char *filename = item->name; @@ -1530,14 +1530,14 @@ static GRFConfig *GRFLoadConfig(IniFile uint32 grfid = grfid_buf[0] | (grfid_buf[1] << 8) | (grfid_buf[2] << 16) | (grfid_buf[3] << 24); if (has_md5sum) { const GRFConfig *s = FindGRFConfig(grfid, FGCM_EXACT, md5sum); - if (s != NULL) c = new GRFConfig(*s); + if (s != nullptr) c = new GRFConfig(*s); } - if (c == NULL && !FioCheckFileExists(filename, NEWGRF_DIR)) { + if (c == nullptr && !FioCheckFileExists(filename, NEWGRF_DIR)) { const GRFConfig *s = FindGRFConfig(grfid, FGCM_NEWEST_VALID); - if (s != NULL) c = new GRFConfig(*s); + if (s != nullptr) c = new GRFConfig(*s); } } - if (c == NULL) c = new GRFConfig(filename); + if (c == nullptr) c = new GRFConfig(filename); /* Parse parameters */ if (!StrEmpty(item->value)) { @@ -1572,7 +1572,7 @@ static GRFConfig *GRFLoadConfig(IniFile /* Check for duplicate GRFID (will also check for duplicate filenames) */ bool duplicate = false; - for (const GRFConfig *gc = first; gc != NULL; gc = gc->next) { + for (const GRFConfig *gc = first; gc != nullptr; gc = gc->next) { if (gc->ident.grfid == c->ident.grfid) { SetDParamStr(0, c->filename); SetDParamStr(1, gc->filename); @@ -1601,7 +1601,7 @@ static void AISaveConfig(IniFile *ini, c { IniGroup *group = ini->GetGroup(grpname); - if (group == NULL) return; + if (group == nullptr) return; group->Clear(); for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { @@ -1625,7 +1625,7 @@ static void GameSaveConfig(IniFile *ini, { IniGroup *group = ini->GetGroup(grpname); - if (group == NULL) return; + if (group == nullptr) return; group->Clear(); GameConfig *config = GameConfig::GetConfig(AIConfig::SSS_FORCE_NEWGAME); @@ -1671,7 +1671,7 @@ static void GRFSaveConfig(IniFile *ini, IniGroup *group = ini->GetGroup(grpname); const GRFConfig *c; - for (c = list; c != NULL; c = c->next) { + for (c = list; c != nullptr; c = c->next) { /* Hex grfid (4 bytes in nibbles), "|", hex md5sum (16 bytes in nibbles), "|", file system path. */ char key[4 * 2 + 1 + 16 * 2 + 1 + MAX_PATH]; char params[512]; @@ -1688,9 +1688,9 @@ static void GRFSaveConfig(IniFile *ini, static void HandleSettingDescs(IniFile *ini, SettingDescProc *proc, SettingDescProcList *proc_list, bool basic_settings = true, bool other_settings = true) { if (basic_settings) { - proc(ini, (const SettingDesc*)_misc_settings, "misc", NULL); + proc(ini, (const SettingDesc*)_misc_settings, "misc", nullptr); #if defined(_WIN32) && !defined(DEDICATED) - proc(ini, (const SettingDesc*)_win32_settings, "win32", NULL); + proc(ini, (const SettingDesc*)_win32_settings, "win32", nullptr); #endif /* _WIN32 */ } @@ -1739,7 +1739,7 @@ void LoadFromConfig(bool minimal) /* Display sheduled errors */ extern void ScheduleErrorMessage(ErrorList &datas); ScheduleErrorMessage(_settings_error_list); - if (FindWindowById(WC_ERRMSG, 0) == NULL) ShowFirstError(); + if (FindWindowById(WC_ERRMSG, 0) == nullptr) ShowFirstError(); } delete ini; @@ -1774,7 +1774,7 @@ StringList GetGRFPresetList() StringList list; std::unique_ptr ini(IniLoadConfig()); - for (IniGroup *group = ini->group; group != NULL; group = group->next) { + for (IniGroup *group = ini->group; group != nullptr; group = group->next) { if (strncmp(group->name, "preset-", 7) == 0) { list.emplace_back(group->name + 7); } @@ -1838,7 +1838,7 @@ void DeleteGRFPresetFromConfig(const cha const SettingDesc *GetSettingDescription(uint index) { - if (index >= lengthof(_settings)) return NULL; + if (index >= lengthof(_settings)) return nullptr; return &_settings[index]; } @@ -1857,7 +1857,7 @@ CommandCost CmdChangeSetting(TileIndex t { const SettingDesc *sd = GetSettingDescription(p1); - if (sd == NULL) return CMD_ERROR; + if (sd == nullptr) return CMD_ERROR; if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) return CMD_ERROR; if (!sd->IsEditable(true)) return CMD_ERROR; @@ -1873,7 +1873,7 @@ CommandCost CmdChangeSetting(TileIndex t if (oldval == newval) return CommandCost(); - if (sd->desc.proc != NULL && !sd->desc.proc(newval)) { + if (sd->desc.proc != nullptr && !sd->desc.proc(newval)) { WriteValue(var, sd->save.conv, (int64)oldval); return CommandCost(); } @@ -1916,7 +1916,7 @@ CommandCost CmdChangeCompanySetting(Tile if (oldval == newval) return CommandCost(); - if (sd->desc.proc != NULL && !sd->desc.proc(newval)) { + if (sd->desc.proc != nullptr && !sd->desc.proc(newval)) { WriteValue(var, sd->save.conv, (int64)oldval); return CommandCost(); } @@ -1949,7 +1949,7 @@ bool SetSettingValue(uint index, int32 v void *var2 = GetVariableAddress(&_settings_newgame, &sd->save); Write_ValidateSetting(var2, sd, value); } - if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv)); + if (sd->desc.proc != nullptr) sd->desc.proc((int32)ReadValue(var, sd->save.conv)); SetWindowClassesDirty(WC_GAME_OPTIONS); @@ -1983,7 +1983,7 @@ void SetCompanySetting(uint index, int32 } else { void *var = GetVariableAddress(&_settings_client.company, &sd->save); Write_ValidateSetting(var, sd, value); - if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv)); + if (sd->desc.proc != nullptr) sd->desc.proc((int32)ReadValue(var, sd->save.conv)); } } @@ -2012,7 +2012,7 @@ void SyncCompanySettings() const void *new_var = GetVariableAddress(&_settings_client.company, &sd->save); uint32 old_value = (uint32)ReadValue(old_var, sd->save.conv); uint32 new_value = (uint32)ReadValue(new_var, sd->save.conv); - if (old_value != new_value) NetworkSendCommand(0, i, new_value, CMD_CHANGE_COMPANY_SETTING, NULL, NULL, _local_company); + if (old_value != new_value) NetworkSendCommand(0, i, new_value, CMD_CHANGE_COMPANY_SETTING, nullptr, nullptr, _local_company); } } @@ -2025,7 +2025,7 @@ uint GetCompanySettingIndex(const char * { uint i; const SettingDesc *sd = GetSettingFromName(name, &i); - assert(sd != NULL && (sd->desc.flags & SGF_PER_COMPANY) != 0); + assert(sd != nullptr && (sd->desc.flags & SGF_PER_COMPANY) != 0); return i; } @@ -2044,12 +2044,12 @@ bool SetSettingValue(uint index, const c if (GetVarMemType(sd->save.conv) == SLE_VAR_STRQ) { char **var = (char**)GetVariableAddress((_game_mode == GM_MENU || force_newgame) ? &_settings_newgame : &_settings_game, &sd->save); free(*var); - *var = strcmp(value, "(null)") == 0 ? NULL : stredup(value); + *var = strcmp(value, "(null)") == 0 ? nullptr : stredup(value); } else { - char *var = (char*)GetVariableAddress(NULL, &sd->save); + char *var = (char*)GetVariableAddress(nullptr, &sd->save); strecpy(var, value, &var[sd->save.length - 1]); } - if (sd->desc.proc != NULL) sd->desc.proc(0); + if (sd->desc.proc != nullptr) sd->desc.proc(0); return true; } @@ -2059,7 +2059,7 @@ bool SetSettingValue(uint index, const c * @param name Name of the setting to return a setting description of * @param i Pointer to an integer that will contain the index of the setting after the call, if it is successful. * @return Pointer to the setting description of setting \a name if it can be found, - * \c NULL indicates failure to obtain the description + * \c nullptr indicates failure to obtain the description */ const SettingDesc *GetSettingFromName(const char *name, uint *i) { @@ -2075,7 +2075,7 @@ const SettingDesc *GetSettingFromName(co for (*i = 0, sd = _settings; sd->save.cmd != SL_END; sd++, (*i)++) { if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue; const char *short_name = strchr(sd->desc.name, '.'); - if (short_name != NULL) { + if (short_name != nullptr) { short_name++; if (strcmp(short_name, name) == 0) return sd; } @@ -2088,7 +2088,7 @@ const SettingDesc *GetSettingFromName(co if (strcmp(sd->desc.name, name) == 0) return sd; } - return NULL; + return nullptr; } /* Those 2 functions need to be here, else we have to make some stuff non-static @@ -2098,7 +2098,7 @@ void IConsoleSetSetting(const char *name uint index; const SettingDesc *sd = GetSettingFromName(name, &index); - if (sd == NULL) { + if (sd == nullptr) { IConsolePrintF(CC_WARNING, "'%s' is an unknown setting.", name); return; } @@ -2131,7 +2131,7 @@ void IConsoleSetSetting(const char *name { uint index; const SettingDesc *sd = GetSettingFromName(name, &index); - assert(sd != NULL); + assert(sd != nullptr); SetSettingValue(index, value); } @@ -2147,7 +2147,7 @@ void IConsoleGetSetting(const char *name const SettingDesc *sd = GetSettingFromName(name, &index); const void *ptr; - if (sd == NULL) { + if (sd == nullptr) { IConsolePrintF(CC_WARNING, "'%s' is an unknown setting.", name); return; } @@ -2171,7 +2171,7 @@ void IConsoleGetSetting(const char *name /** * List all settings and their value to the console * - * @param prefilter If not \c NULL, only list settings with names that begin with \a prefilter prefix + * @param prefilter If not \c nullptr, only list settings with names that begin with \a prefilter prefix */ void IConsoleListSettings(const char *prefilter) { @@ -2179,7 +2179,7 @@ void IConsoleListSettings(const char *pr for (const SettingDesc *sd = _settings; sd->save.cmd != SL_END; sd++) { if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to)) continue; - if (prefilter != NULL && strstr(sd->desc.name, prefilter) == NULL) continue; + if (prefilter != nullptr && strstr(sd->desc.name, prefilter) == nullptr) continue; char value[80]; const void *ptr = GetVariableAddress(&GetGameSettings(), &sd->save); @@ -2199,7 +2199,7 @@ void IConsoleListSettings(const char *pr /** * Save and load handler for settings * @param osd SettingDesc struct containing all information - * @param object can be either NULL in which case we load global variables or + * @param object can be either nullptr in which case we load global variables or * a pointer to a struct which is getting saved */ static void LoadSettings(const SettingDesc *osd, void *object) @@ -2216,7 +2216,7 @@ static void LoadSettings(const SettingDe /** * Save and load handler for settings * @param sd SettingDesc struct containing all information - * @param object can be either NULL in which case we load global variables or + * @param object can be either nullptr in which case we load global variables or * a pointer to a struct which is getting saved */ static void SaveSettings(const SettingDesc *sd, void *object) @@ -2265,8 +2265,8 @@ static void Save_PATS() } extern const ChunkHandler _setting_chunk_handlers[] = { - { 'OPTS', NULL, Load_OPTS, NULL, NULL, CH_RIFF}, - { 'PATS', Save_PATS, Load_PATS, NULL, Check_PATS, CH_RIFF | CH_LAST}, + { 'OPTS', nullptr, Load_OPTS, nullptr, nullptr, CH_RIFF}, + { 'PATS', Save_PATS, Load_PATS, nullptr, Check_PATS, CH_RIFF | CH_LAST}, }; static bool IsSignedVarMemType(VarType vt) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -73,7 +73,7 @@ static const StringID _font_zoom_dropdow }; int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1; ///< Number of original town names. -static StringID *_grf_names = NULL; ///< Pointer to town names defined by NewGRFs. +static StringID *_grf_names = nullptr; ///< Pointer to town names defined by NewGRFs. static int _nb_grf_names = 0; ///< Number of town names defined by NewGRFs. static Dimension _circle_size; ///< Dimension of the circle +/- icon. This is here as not all users are within the class of the settings window. @@ -198,7 +198,7 @@ struct GameOptionsWindow : Window { * Build the dropdown list for a specific widget. * @param widget Widget to build list for * @param selected_index Currently selected item - * @return the built dropdown list, or NULL if the widget has no dropdown menu. + * @return the built dropdown list, or nullptr if the widget has no dropdown menu. */ DropDownList BuildDropDownList(int widget, int *selected_index) const { @@ -436,19 +436,19 @@ struct GameOptionsWindow : Window { void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_GO_BASE_GRF_TEXTFILE && widget < WID_GO_BASE_GRF_TEXTFILE + TFT_END) { - if (BaseGraphics::GetUsedSet() == NULL) return; + if (BaseGraphics::GetUsedSet() == nullptr) return; ShowBaseSetTextfileWindow((TextfileType)(widget - WID_GO_BASE_GRF_TEXTFILE), BaseGraphics::GetUsedSet(), STR_CONTENT_TYPE_BASE_GRAPHICS); return; } if (widget >= WID_GO_BASE_SFX_TEXTFILE && widget < WID_GO_BASE_SFX_TEXTFILE + TFT_END) { - if (BaseSounds::GetUsedSet() == NULL) return; + if (BaseSounds::GetUsedSet() == nullptr) return; ShowBaseSetTextfileWindow((TextfileType)(widget - WID_GO_BASE_SFX_TEXTFILE), BaseSounds::GetUsedSet(), STR_CONTENT_TYPE_BASE_SOUNDS); return; } if (widget >= WID_GO_BASE_MUSIC_TEXTFILE && widget < WID_GO_BASE_MUSIC_TEXTFILE + TFT_END) { - if (BaseMusic::GetUsedSet() == NULL) return; + if (BaseMusic::GetUsedSet() == nullptr) return; ShowBaseSetTextfileWindow((TextfileType)(widget - WID_GO_BASE_MUSIC_TEXTFILE), BaseMusic::GetUsedSet(), STR_CONTENT_TYPE_BASE_MUSIC); return; @@ -508,7 +508,7 @@ struct GameOptionsWindow : Window { case WID_GO_ROADSIDE_DROPDOWN: // Road side if (this->opt->vehicle.road_side != index) { // only change if setting changed uint i; - if (GetSettingFromName("vehicle.road_side", &i) == NULL) NOT_REACHED(); + if (GetSettingFromName("vehicle.road_side", &i) == nullptr) NOT_REACHED(); SetSettingValue(i, index); MarkWholeScreenDirty(); } @@ -584,9 +584,9 @@ struct GameOptionsWindow : Window { this->GetWidget(WID_GO_BASE_GRF_STATUS)->SetDataTip(missing_files ? STR_EMPTY : STR_GAME_OPTIONS_BASE_GRF_STATUS, STR_NULL); for (TextfileType tft = TFT_BEGIN; tft < TFT_END; tft++) { - this->SetWidgetDisabledState(WID_GO_BASE_GRF_TEXTFILE + tft, BaseGraphics::GetUsedSet() == NULL || BaseGraphics::GetUsedSet()->GetTextfile(tft) == NULL); - this->SetWidgetDisabledState(WID_GO_BASE_SFX_TEXTFILE + tft, BaseSounds::GetUsedSet() == NULL || BaseSounds::GetUsedSet()->GetTextfile(tft) == NULL); - this->SetWidgetDisabledState(WID_GO_BASE_MUSIC_TEXTFILE + tft, BaseMusic::GetUsedSet() == NULL || BaseMusic::GetUsedSet()->GetTextfile(tft) == NULL); + this->SetWidgetDisabledState(WID_GO_BASE_GRF_TEXTFILE + tft, BaseGraphics::GetUsedSet() == nullptr || BaseGraphics::GetUsedSet()->GetTextfile(tft) == nullptr); + this->SetWidgetDisabledState(WID_GO_BASE_SFX_TEXTFILE + tft, BaseSounds::GetUsedSet() == nullptr || BaseSounds::GetUsedSet()->GetTextfile(tft) == nullptr); + this->SetWidgetDisabledState(WID_GO_BASE_MUSIC_TEXTFILE + tft, BaseMusic::GetUsedSet() == nullptr || BaseMusic::GetUsedSet()->GetTextfile(tft) == nullptr); } missing_files = BaseMusic::GetUsedSet()->GetNumInvalid() == 0; @@ -879,14 +879,14 @@ bool BaseSettingEntry::IsVisible(const B * Find setting entry at row \a row_num * @param row_num Index of entry to return * @param cur_row Current row number - * @return The requested setting entry or \c NULL if it not found (folded or filtered) + * @return The requested setting entry or \c nullptr if it not found (folded or filtered) */ BaseSettingEntry *BaseSettingEntry::FindEntry(uint row_num, uint *cur_row) { - if (this->IsFiltered()) return NULL; + if (this->IsFiltered()) return nullptr; if (row_num == *cur_row) return this; (*cur_row)++; - return NULL; + return nullptr; } /** @@ -961,7 +961,7 @@ uint BaseSettingEntry::Draw(GameSettings SettingEntry::SettingEntry(const char *name) { this->name = name; - this->setting = NULL; + this->setting = nullptr; this->index = 0; } @@ -973,7 +973,7 @@ void SettingEntry::Init(byte level) { BaseSettingEntry::Init(level); this->setting = GetSettingFromName(this->name, &this->index); - assert(this->setting != NULL); + assert(this->setting != nullptr); } /** @@ -1253,14 +1253,14 @@ uint SettingsContainer::Length() const * Find the setting entry at row number \a row_num * @param row_num Index of entry to return * @param cur_row Variable used for keeping track of the current row number. Should point to memory initialized to \c 0 when first called. - * @return The requested setting entry or \c NULL if it does not exist + * @return The requested setting entry or \c nullptr if it does not exist */ BaseSettingEntry *SettingsContainer::FindEntry(uint row_num, uint *cur_row) { - BaseSettingEntry *pe = NULL; + BaseSettingEntry *pe = nullptr; for (EntryVector::iterator it = this->entries.begin(); it != this->entries.end(); ++it) { pe = (*it)->FindEntry(row_num, cur_row); - if (pe != NULL) { + if (pe != nullptr) { break; } } @@ -1416,14 +1416,14 @@ uint SettingsPage::Length() const * Find setting entry at row \a row_num * @param row_num Index of entry to return * @param cur_row Current row number - * @return The requested setting entry or \c NULL if it not found (folded or filtered) + * @return The requested setting entry or \c nullptr if it not found (folded or filtered) */ BaseSettingEntry *SettingsPage::FindEntry(uint row_num, uint *cur_row) { - if (this->IsFiltered()) return NULL; + if (this->IsFiltered()) return nullptr; if (row_num == *cur_row) return this; (*cur_row)++; - if (this->folded) return NULL; + if (this->folded) return nullptr; return SettingsContainer::FindEntry(row_num, cur_row); } @@ -1479,9 +1479,9 @@ void SettingsPage::DrawSetting(GameSetti /** Construct settings tree */ static SettingsContainer &GetSettingsTree() { - static SettingsContainer *main = NULL; + static SettingsContainer *main = nullptr; - if (main == NULL) + if (main == nullptr) { /* Build up the dynamic settings-array only once per OpenTTD session */ main = new SettingsContainer(); @@ -1801,10 +1801,10 @@ struct GameSettingsWindow : Window { static GameSettings *settings_ptr; ///< Pointer to the game settings being displayed and modified. - SettingEntry *valuewindow_entry; ///< If non-NULL, pointer to setting for which a value-entering window has been opened. - SettingEntry *clicked_entry; ///< If non-NULL, pointer to a clicked numeric setting (with a depressed left or right button). - SettingEntry *last_clicked; ///< If non-NULL, pointer to the last clicked setting. - SettingEntry *valuedropdown_entry; ///< If non-NULL, pointer to the value for which a dropdown window is currently opened. + SettingEntry *valuewindow_entry; ///< If non-nullptr, pointer to setting for which a value-entering window has been opened. + SettingEntry *clicked_entry; ///< If non-nullptr, pointer to a clicked numeric setting (with a depressed left or right button). + SettingEntry *last_clicked; ///< If non-nullptr, pointer to the last clicked setting. + SettingEntry *valuedropdown_entry; ///< If non-nullptr, pointer to the value for which a dropdown window is currently opened. bool closing_dropdown; ///< True, if the dropdown list is currently closing. SettingFilter filter; ///< Filter for the list. @@ -1828,10 +1828,10 @@ struct GameSettingsWindow : Window { _circle_size = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED)); GetSettingsTree().FoldAll(); // Close all sub-pages - this->valuewindow_entry = NULL; // No setting entry for which a entry window is opened - this->clicked_entry = NULL; // No numeric setting buttons are depressed - this->last_clicked = NULL; - this->valuedropdown_entry = NULL; + this->valuewindow_entry = nullptr; // No setting entry for which a entry window is opened + this->clicked_entry = nullptr; // No numeric setting buttons are depressed + this->last_clicked = nullptr; + this->valuedropdown_entry = nullptr; this->closing_dropdown = false; this->manually_changed_folding = false; @@ -1885,9 +1885,9 @@ struct GameSettingsWindow : Window { { if (this->closing_dropdown) { this->closing_dropdown = false; - assert(this->valuedropdown_entry != NULL); + assert(this->valuedropdown_entry != nullptr); this->valuedropdown_entry->SetButtons(0); - this->valuedropdown_entry = NULL; + this->valuedropdown_entry = nullptr; } /* Reserve the correct number of lines for the 'some search results are hidden' notice in the central settings display panel. */ @@ -1977,7 +1977,7 @@ struct GameSettingsWindow : Window { } case WID_GS_HELP_TEXT: - if (this->last_clicked != NULL) { + if (this->last_clicked != nullptr) { const SettingDesc *sd = this->last_clicked->setting; int y = r.top; @@ -2006,7 +2006,7 @@ struct GameSettingsWindow : Window { /** * Set the entry that should have its help text displayed, and mark the window dirty so it gets repainted. - * @param pe Setting to display help text of, use \c NULL to stop displaying help of the currently displayed setting. + * @param pe Setting to display help text of, use \c nullptr to stop displaying help of the currently displayed setting. */ void SetDisplayedHelpText(SettingEntry *pe) { @@ -2055,14 +2055,14 @@ struct GameSettingsWindow : Window { uint cur_row = 0; BaseSettingEntry *clicked_entry = GetSettingsTree().FindEntry(btn, &cur_row); - if (clicked_entry == NULL) return; // Clicked below the last setting of the page + if (clicked_entry == nullptr) return; // Clicked below the last setting of the page int x = (_current_text_dir == TD_RTL ? this->width - 1 - pt.x : pt.x) - SETTINGTREE_LEFT_OFFSET - (clicked_entry->level + 1) * LEVEL_WIDTH; // Shift x coordinate if (x < 0) return; // Clicked left of the entry SettingsPage *clicked_page = dynamic_cast(clicked_entry); - if (clicked_page != NULL) { - this->SetDisplayedHelpText(NULL); + if (clicked_page != nullptr) { + this->SetDisplayedHelpText(nullptr); clicked_page->folded = !clicked_page->folded; // Flip 'folded'-ness of the sub-page this->manually_changed_folding = true; @@ -2072,7 +2072,7 @@ struct GameSettingsWindow : Window { } SettingEntry *pe = dynamic_cast(clicked_entry); - assert(pe != NULL); + assert(pe != nullptr); const SettingDesc *sd = pe->setting; /* return if action is only active in network, or only settable by server */ @@ -2094,9 +2094,9 @@ struct GameSettingsWindow : Window { HideDropDownMenu(this); this->closing_dropdown = false; this->valuedropdown_entry->SetButtons(0); - this->valuedropdown_entry = NULL; + this->valuedropdown_entry = nullptr; } else { - if (this->valuedropdown_entry != NULL) this->valuedropdown_entry->SetButtons(0); + if (this->valuedropdown_entry != nullptr) this->valuedropdown_entry->SetButtons(0); this->closing_dropdown = false; const NWidgetBase *wid = this->GetWidget(WID_GS_OPTIONSPANEL); @@ -2161,7 +2161,7 @@ struct GameSettingsWindow : Window { /* Set up scroller timeout for numeric values */ if (value != oldvalue) { - if (this->clicked_entry != NULL) { // Release previous buttons if any + if (this->clicked_entry != nullptr) { // Release previous buttons if any this->clicked_entry->SetButtons(0); } this->clicked_entry = pe; @@ -2199,9 +2199,9 @@ struct GameSettingsWindow : Window { void OnTimeout() override { - if (this->clicked_entry != NULL) { // On timeout, release any depressed buttons + if (this->clicked_entry != nullptr) { // On timeout, release any depressed buttons this->clicked_entry->SetButtons(0); - this->clicked_entry = NULL; + this->clicked_entry = nullptr; this->SetDirty(); } } @@ -2209,9 +2209,9 @@ struct GameSettingsWindow : Window { void OnQueryTextFinished(char *str) override { /* The user pressed cancel */ - if (str == NULL) return; + if (str == nullptr) return; - assert(this->valuewindow_entry != NULL); + assert(this->valuewindow_entry != nullptr); const SettingDesc *sd = this->valuewindow_entry->setting; int32 value; @@ -2260,7 +2260,7 @@ struct GameSettingsWindow : Window { default: if (widget < 0) { /* Deal with drop down boxes on the panel. */ - assert(this->valuedropdown_entry != NULL); + assert(this->valuedropdown_entry != nullptr); const SettingDesc *sd = this->valuedropdown_entry->setting; assert(sd->desc.flags & SGF_MULTISTRING); @@ -2289,7 +2289,7 @@ struct GameSettingsWindow : Window { * the same dropdown button was clicked again, and then not open the dropdown again. * So, we only remember that it was closed, and process it on the next OnPaint, which is * after OnClick. */ - assert(this->valuedropdown_entry != NULL); + assert(this->valuedropdown_entry != nullptr); this->closing_dropdown = true; this->SetDirty(); } @@ -2314,8 +2314,8 @@ struct GameSettingsWindow : Window { } this->vscroll->SetCount(GetSettingsTree().Length() + this->warn_lines); - if (this->last_clicked != NULL && !GetSettingsTree().IsVisible(this->last_clicked)) { - this->SetDisplayedHelpText(NULL); + if (this->last_clicked != nullptr && !GetSettingsTree().IsVisible(this->last_clicked)) { + this->SetDisplayedHelpText(nullptr); } bool all_folded = true; @@ -2344,7 +2344,7 @@ struct GameSettingsWindow : Window { } }; -GameSettings *GameSettingsWindow::settings_ptr = NULL; +GameSettings *GameSettingsWindow::settings_ptr = nullptr; static const NWidgetPart _nested_settings_selection_widgets[] = { NWidget(NWID_HORIZONTAL), @@ -2603,7 +2603,7 @@ struct CustomCurrencyWindow : Window { void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; switch (this->query_widget) { case WID_CC_RATE: @@ -2680,7 +2680,7 @@ static const NWidgetPart _nested_cust_cu }; static WindowDesc _cust_currency_desc( - WDP_CENTER, NULL, 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_CUSTOM_CURRENCY, WC_NONE, 0, _nested_cust_currency_widgets, lengthof(_nested_cust_currency_widgets) diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -160,10 +160,10 @@ private: struct SettingsIniFile : IniLoadFile { /** * Construct a new ini loader. - * @param list_group_names A \c NULL terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST - * @param seq_group_names A \c NULL terminated list with group names that should be loaded as lists of names. @see IGT_SEQUENCE + * @param list_group_names A \c nullptr terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST + * @param seq_group_names A \c nullptr terminated list with group names that should be loaded as lists of names. @see IGT_SEQUENCE */ - SettingsIniFile(const char * const *list_group_names = NULL, const char * const *seq_group_names = NULL) : + SettingsIniFile(const char * const *list_group_names = nullptr, const char * const *seq_group_names = nullptr) : IniLoadFile(list_group_names, seq_group_names) { } @@ -173,7 +173,7 @@ struct SettingsIniFile : IniLoadFile { /* Open the text file in binary mode to prevent end-of-line translations * done by ftell() and friends, as defined by K&R. */ FILE *in = fopen(filename, "rb"); - if (in == NULL) return NULL; + if (in == nullptr) return nullptr; fseek(in, 0L, SEEK_END); *size = ftell(in); @@ -202,9 +202,9 @@ static const char *DEFAULTS_GROUP_NAME */ static IniLoadFile *LoadIniFile(const char *filename) { - static const char * const seq_groups[] = {PREAMBLE_GROUP_NAME, POSTAMBLE_GROUP_NAME, NULL}; + static const char * const seq_groups[] = {PREAMBLE_GROUP_NAME, POSTAMBLE_GROUP_NAME, nullptr}; - IniLoadFile *ini = new SettingsIniFile(NULL, seq_groups); + IniLoadFile *ini = new SettingsIniFile(nullptr, seq_groups); ini->LoadFromDisk(filename, NO_DIRECTORY); return ini; } @@ -217,8 +217,8 @@ static IniLoadFile *LoadIniFile(const ch static void DumpGroup(IniLoadFile *ifile, const char * const group_name) { IniGroup *grp = ifile->GetGroup(group_name, 0, false); - if (grp != NULL && grp->type == IGT_SEQUENCE) { - for (IniItem *item = grp->item; item != NULL; item = item->next) { + if (grp != nullptr && grp->type == IGT_SEQUENCE) { + for (IniItem *item = grp->item; item != nullptr; item = item->next) { if (item->name) { _stored_output.Add(item->name); _stored_output.Add("\n", 1); @@ -231,14 +231,14 @@ static void DumpGroup(IniLoadFile *ifile * Find the value of a template variable. * @param name Name of the item to find. * @param grp Group currently being expanded (searched first). - * @param defaults Fallback group to search, \c NULL skips the search. - * @return Text of the item if found, else \c NULL. + * @param defaults Fallback group to search, \c nullptr skips the search. + * @return Text of the item if found, else \c nullptr. */ static const char *FindItemValue(const char *name, IniGroup *grp, IniGroup *defaults) { IniItem *item = grp->GetItem(name, false); - if (item == NULL && defaults != NULL) item = defaults->GetItem(name, false); - if (item == NULL || item->value == NULL) return NULL; + if (item == nullptr && defaults != nullptr) item = defaults->GetItem(name, false); + if (item == nullptr || item->value == nullptr) return nullptr; return item->value; } @@ -249,30 +249,30 @@ static const char *FindItemValue(const c static void DumpSections(IniLoadFile *ifile) { static const int MAX_VAR_LENGTH = 64; - static const char * const special_group_names[] = {PREAMBLE_GROUP_NAME, POSTAMBLE_GROUP_NAME, DEFAULTS_GROUP_NAME, TEMPLATES_GROUP_NAME, NULL}; + static const char * const special_group_names[] = {PREAMBLE_GROUP_NAME, POSTAMBLE_GROUP_NAME, DEFAULTS_GROUP_NAME, TEMPLATES_GROUP_NAME, nullptr}; IniGroup *default_grp = ifile->GetGroup(DEFAULTS_GROUP_NAME, 0, false); IniGroup *templates_grp = ifile->GetGroup(TEMPLATES_GROUP_NAME, 0, false); - if (templates_grp == NULL) return; + if (templates_grp == nullptr) return; /* Output every group, using its name as template name. */ - for (IniGroup *grp = ifile->group; grp != NULL; grp = grp->next) { + for (IniGroup *grp = ifile->group; grp != nullptr; grp = grp->next) { const char * const *sgn; - for (sgn = special_group_names; *sgn != NULL; sgn++) if (strcmp(grp->name, *sgn) == 0) break; - if (*sgn != NULL) continue; + for (sgn = special_group_names; *sgn != nullptr; sgn++) if (strcmp(grp->name, *sgn) == 0) break; + if (*sgn != nullptr) continue; IniItem *template_item = templates_grp->GetItem(grp->name, false); // Find template value. - if (template_item == NULL || template_item->value == NULL) { + if (template_item == nullptr || template_item->value == nullptr) { fprintf(stderr, "settingsgen: Warning: Cannot find template %s\n", grp->name); continue; } /* Prefix with #if/#ifdef/#ifndef */ - static const char * const pp_lines[] = {"if", "ifdef", "ifndef", NULL}; + static const char * const pp_lines[] = {"if", "ifdef", "ifndef", nullptr}; int count = 0; - for (const char * const *name = pp_lines; *name != NULL; name++) { + for (const char * const *name = pp_lines; *name != nullptr; name++) { const char *condition = FindItemValue(*name, grp, default_grp); - if (condition != NULL) { + if (condition != nullptr) { _stored_output.Add("#", 1); _stored_output.Add(*name); _stored_output.Add(" ", 1); @@ -311,7 +311,7 @@ static void DumpSections(IniLoadFile *if if (i > 0) { /* Find the text to output. */ const char *valitem = FindItemValue(variable, grp, default_grp); - if (valitem != NULL) _stored_output.Add(valitem); + if (valitem != nullptr) _stored_output.Add(valitem); } else { _stored_output.Add("$", 1); } @@ -331,10 +331,10 @@ static void DumpSections(IniLoadFile *if */ static void CopyFile(const char *fname, FILE *out_fp) { - if (fname == NULL) return; + if (fname == nullptr) return; FILE *in_fp = fopen(fname, "r"); - if (in_fp == NULL) { + if (in_fp == nullptr) { fprintf(stderr, "settingsgen: Warning: Cannot open file %s for copying\n", fname); return; } @@ -361,10 +361,10 @@ static void CopyFile(const char *fname, static bool CompareFiles(const char *n1, const char *n2) { FILE *f2 = fopen(n2, "rb"); - if (f2 == NULL) return false; + if (f2 == nullptr) return false; FILE *f1 = fopen(n1, "rb"); - if (f1 == NULL) { + if (f1 == nullptr) { fclose(f2); error("can't open %s", n1); } @@ -392,7 +392,7 @@ static bool CompareFiles(const char *n1, static const OptionData _opts[] = { GETOPT_NOVAL( 'v', "--version"), GETOPT_NOVAL( 'h', "--help"), - GETOPT_GENERAL('h', '?', NULL, ODF_NO_VALUE), + GETOPT_GENERAL('h', '?', nullptr, ODF_NO_VALUE), GETOPT_VALUE( 'o', "--output"), GETOPT_VALUE( 'b', "--before"), GETOPT_VALUE( 'a', "--after"), @@ -435,9 +435,9 @@ static void ProcessIniFile(const char *f */ int CDECL main(int argc, char *argv[]) { - const char *output_file = NULL; - const char *before_file = NULL; - const char *after_file = NULL; + const char *output_file = nullptr; + const char *before_file = nullptr; + const char *after_file = nullptr; GetOptData mgo(argc - 1, argv + 1, _opts); for (;;) { @@ -483,7 +483,7 @@ int CDECL main(int argc, char *argv[]) for (int i = 0; i < mgo.numleft; i++) ProcessIniFile(mgo.argv[i]); /* Write output. */ - if (output_file == NULL) { + if (output_file == nullptr) { CopyFile(before_file, stdout); _stored_output.Write(stdout); CopyFile(after_file, stdout); @@ -491,7 +491,7 @@ int CDECL main(int argc, char *argv[]) static const char * const tmp_output = "tmp2.xxx"; FILE *fp = fopen(tmp_output, "w"); - if (fp == NULL) { + if (fp == nullptr) { fprintf(stderr, "settingsgen: Warning: Cannot open file %s\n", tmp_output); return 1; } diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -145,7 +145,7 @@ static const Depot *FindClosestShipDepot { /* Find the closest depot */ const Depot *depot; - const Depot *best_depot = NULL; + const Depot *best_depot = nullptr; /* If we don't have a maximum distance, i.e. distance = 0, * we want to find any depot so the best distance of no * depot must be more than any correct distance. On the @@ -184,7 +184,7 @@ static void CheckIfShipNeedsService(Vehi const Depot *depot = FindClosestShipDepot(v, max_distance); - if (depot == NULL) { + if (depot == nullptr) { if (v->current_order.IsType(OT_GOTO_DEPOT)) { v->current_order.MakeDummy(); SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); @@ -333,7 +333,7 @@ void Ship::UpdateDeltaXY() */ static Vehicle *EnsureNoVisibleShipProc(Vehicle *v, void *data) { - return v->type == VEH_SHIP && (v->vehstatus & VS_HIDDEN) == 0 ? v : NULL; + return v->type == VEH_SHIP && (v->vehstatus & VS_HIDDEN) == 0 ? v : nullptr; } static bool CheckShipLeaveDepot(Ship *v) @@ -352,7 +352,7 @@ static bool CheckShipLeaveDepot(Ship *v) /* Don't leave depot if another vehicle is already entering/leaving */ /* This helps avoid CPU load if many ships are set to start at the same time */ - if (HasVehicleOnPos(v->tile, NULL, &EnsureNoVisibleShipProc)) return true; + if (HasVehicleOnPos(v->tile, nullptr, &EnsureNoVisibleShipProc)) return true; TileIndex tile = v->tile; Axis axis = GetShipDepotAxis(tile); @@ -869,10 +869,10 @@ bool Ship::FindClosestDepot(TileIndex *l { const Depot *depot = FindClosestShipDepot(this, 0); - if (depot == NULL) return false; + if (depot == nullptr) return false; - if (location != NULL) *location = depot->xy; - if (destination != NULL) *destination = depot->index; + if (location != nullptr) *location = depot->xy; + if (destination != nullptr) *destination = depot->index; return true; } diff --git a/src/signal.cpp b/src/signal.cpp --- a/src/signal.cpp +++ b/src/signal.cpp @@ -192,7 +192,7 @@ static SmallSettype != VEH_TRAIN || Train::From(v)->track == TRACK_BIT_DEPOT) return NULL; + if (v->type != VEH_TRAIN || Train::From(v)->track == TRACK_BIT_DEPOT) return nullptr; return v; } @@ -283,13 +283,13 @@ static SigFlags ExploreSegment(Owner own if (IsRailDepot(tile)) { if (enterdir == INVALID_DIAGDIR) { // from 'inside' - train just entered or left the depot - if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; exitdir = GetRailDepotDirection(tile); tile += TileOffsByDiagDir(exitdir); enterdir = ReverseDiagDir(exitdir); break; } else if (enterdir == GetRailDepotDirection(tile)) { // entered a depot - if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; continue; } else { continue; @@ -306,7 +306,7 @@ static SigFlags ExploreSegment(Owner own if (!(flags & SF_TRAIN) && EnsureNoTrainOnTrackBits(tile, tracks).Failed()) flags |= SF_TRAIN; } else { if (tracks_masked == TRACK_BIT_NONE) continue; // no incidating track - if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; } if (HasSignals(tile)) { // there is exactly one track - not zero, because there is exit from this tile @@ -358,7 +358,7 @@ static SigFlags ExploreSegment(Owner own if (DiagDirToAxis(enterdir) != GetRailStationAxis(tile)) continue; // different axis if (IsStationTileBlocked(tile)) continue; // 'eye-candy' station tile - if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; tile += TileOffsByDiagDir(exitdir); break; @@ -367,7 +367,7 @@ static SigFlags ExploreSegment(Owner own if (GetTileOwner(tile) != owner) continue; if (DiagDirToAxis(enterdir) == GetCrossingRoadAxis(tile)) continue; // different axis - if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; tile += TileOffsByDiagDir(exitdir); break; @@ -377,13 +377,13 @@ static SigFlags ExploreSegment(Owner own DiagDirection dir = GetTunnelBridgeDirection(tile); if (enterdir == INVALID_DIAGDIR) { // incoming from the wormhole - if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; enterdir = dir; exitdir = ReverseDiagDir(dir); tile += TileOffsByDiagDir(exitdir); // just skip to next tile } else { // NOT incoming from the wormhole! if (ReverseDiagDir(enterdir) != dir) continue; - if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; + if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum)) flags |= SF_TRAIN; tile = GetOtherTunnelBridgeEnd(tile); // just skip to exit tile enterdir = INVALID_DIAGDIR; exitdir = INVALID_DIAGDIR; diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -81,7 +81,7 @@ CommandCost CmdPlaceSign(TileIndex tile, CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Sign *si = Sign::GetIfValid(p1); - if (si == NULL) return CMD_ERROR; + if (si == nullptr) return CMD_ERROR; if (si->owner == OWNER_DEITY && _current_company != OWNER_DEITY && _game_mode != GM_EDITOR) return CMD_ERROR; /* Rename the signs when empty, otherwise remove it */ diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -45,7 +45,7 @@ struct SignList { StringFilter string_filter; ///< The match string to be used when the GUIList is (re)-sorted. static bool match_case; ///< Should case sensitive matching be used? - static char default_name[64]; ///< Default sign name, used if Sign::name is NULL. + static char default_name[64]; ///< Default sign name, used if Sign::name is nullptr. /** * Creates a SignList with filtering disabled by default. @@ -81,8 +81,8 @@ struct SignList { const char *a_name = (*a)->name; const char *b_name = (*b)->name; - if (a_name == NULL) a_name = SignList::default_name; - if (b_name == NULL) b_name = SignList::default_name; + if (a_name == nullptr) a_name = SignList::default_name; + if (b_name == nullptr) b_name = SignList::default_name; int r = strnatcmp(a_name, b_name); // Sort by name (natural sorting). @@ -100,7 +100,7 @@ struct SignList { /* Same performance benefit as above for sorting. */ const char *a_name = (*a)->name; - if (a_name == NULL) a_name = SignList::default_name; + if (a_name == nullptr) a_name = SignList::default_name; filter.ResetState(); filter.AddLine(a_name); @@ -168,7 +168,7 @@ struct SignListWindow : Window, SignList void OnInit() override { - /* Default sign name, used if Sign::name is NULL. */ + /* Default sign name, used if Sign::name is nullptr. */ GetString(SignList::default_name, STR_DEFAULT_SIGN_NAME, lastof(SignList::default_name)); this->signs.ForceResort(); this->SortSignsList(); @@ -352,7 +352,7 @@ static EventState SignListGlobalHotkeys( { if (_game_mode == GM_MENU) return ES_NOT_HANDLED; Window *w = ShowSignList(); - if (w == NULL) return ES_NOT_HANDLED; + if (w == nullptr) return ES_NOT_HANDLED; return w->OnHotkey(hotkey); } @@ -402,7 +402,7 @@ static WindowDesc _sign_list_desc( /** * Open the sign list window * - * @return newly opened sign list window, or NULL if the window could not be opened. + * @return newly opened sign list window, or nullptr if the window could not be opened. */ Window *ShowSignList() { @@ -418,7 +418,7 @@ Window *ShowSignList() static bool RenameSign(SignID index, const char *text) { bool remove = StrEmpty(text); - DoCommandP(0, index, 0, CMD_RENAME_SIGN | (StrEmpty(text) ? CMD_MSG(STR_ERROR_CAN_T_DELETE_SIGN) : CMD_MSG(STR_ERROR_CAN_T_CHANGE_SIGN_NAME)), NULL, text); + DoCommandP(0, index, 0, CMD_RENAME_SIGN | (StrEmpty(text) ? CMD_MSG(STR_ERROR_CAN_T_DELETE_SIGN) : CMD_MSG(STR_ERROR_CAN_T_CHANGE_SIGN_NAME)), nullptr, text); return remove; } @@ -442,7 +442,7 @@ struct SignWindow : Window, SignList { void UpdateSignEditWindow(const Sign *si) { /* Display an empty string when the sign hasn't been edited yet */ - if (si->name != NULL) { + if (si->name != nullptr) { SetDParam(0, si->index); this->name_editbox.text.Assign(STR_SIGN_NAME); } else { @@ -559,7 +559,7 @@ static WindowDesc _query_sign_edit_desc( void HandleClickOnSign(const Sign *si) { if (_ctrl_pressed && (si->owner == _local_company || (si->owner == OWNER_DEITY && _game_mode == GM_EDITOR))) { - RenameSign(si->index, NULL); + RenameSign(si->index, nullptr); return; } ShowRenameSignWindow(si); @@ -585,5 +585,5 @@ void DeleteRenameSignWindow(SignID sign) { SignWindow *w = dynamic_cast(FindWindowById(WC_QUERY_STRING, WN_QUERY_STRING_SIGN)); - if (w != NULL && w->cur_sign == sign) delete w; + if (w != nullptr && w->cur_sign == sign) delete w; } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -272,9 +272,9 @@ struct SmallMapColourScheme { /** Available colour schemes for height maps. */ static SmallMapColourScheme _heightmap_schemes[] = { - {NULL, _green_map_heights, lengthof(_green_map_heights), MKCOLOUR_XXXX(0x54)}, ///< Green colour scheme. - {NULL, _dark_green_map_heights, lengthof(_dark_green_map_heights), MKCOLOUR_XXXX(0x62)}, ///< Dark green colour scheme. - {NULL, _violet_map_heights, lengthof(_violet_map_heights), MKCOLOUR_XXXX(0x81)}, ///< Violet colour scheme. + {nullptr, _green_map_heights, lengthof(_green_map_heights), MKCOLOUR_XXXX(0x54)}, ///< Green colour scheme. + {nullptr, _dark_green_map_heights, lengthof(_dark_green_map_heights), MKCOLOUR_XXXX(0x62)}, ///< Dark green colour scheme. + {nullptr, _violet_map_heights, lengthof(_violet_map_heights), MKCOLOUR_XXXX(0x81)}, ///< Violet colour scheme. }; /** @@ -283,7 +283,7 @@ static SmallMapColourScheme _heightmap_s void BuildLandLegend() { /* The smallmap window has never been initialized, so no need to change the legend. */ - if (_heightmap_schemes[0].height_colours == NULL) return; + if (_heightmap_schemes[0].height_colours == nullptr) return; /* * The general idea of this function is to fill the legend with an appropriate evenly spaced @@ -1071,7 +1071,7 @@ SmallMapWindow::SmallMapWindow(WindowDes this->SetupWidgetData(); - this->SetZoomLevel(ZLC_INITIALIZE, NULL); + this->SetZoomLevel(ZLC_INITIALIZE, nullptr); this->SmallMapCenterOnCurrentPos(); this->SetOverlayCargoMask(); } @@ -1474,7 +1474,7 @@ int SmallMapWindow::GetPositionOnLegend( case WID_SM_ENABLE_ALL: case WID_SM_DISABLE_ALL: { - LegendAndColour *tbl = NULL; + LegendAndColour *tbl = nullptr; switch (this->map_type) { case SMT_INDUSTRY: tbl = _legend_from_industries; @@ -1682,7 +1682,7 @@ class NWidgetSmallmapDisplay : public NW public: NWidgetSmallmapDisplay() : NWidgetContainer(NWID_VERTICAL) { - this->smallmap_window = NULL; + this->smallmap_window = nullptr; } void SetupSmallestSize(Window *w, bool init_array) override @@ -1694,7 +1694,7 @@ public: bar->SetupSmallestSize(w, init_array); this->smallmap_window = dynamic_cast(w); - assert(this->smallmap_window != NULL); + assert(this->smallmap_window != nullptr); this->smallest_x = max(display->smallest_x, bar->smallest_x + smallmap_window->GetMinLegendWidth()); this->smallest_y = display->smallest_y + max(bar->smallest_y, smallmap_window->GetLegendHeight(smallmap_window->min_number_of_columns)); this->fill_x = max(display->fill_x, bar->fill_x); @@ -1729,17 +1729,17 @@ public: NWidgetCore *GetWidgetFromPos(int x, int y) override { - if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { NWidgetCore *widget = child_wid->GetWidgetFromPos(x, y); - if (widget != NULL) return widget; + if (widget != nullptr) return widget; } - return NULL; + return nullptr; } void Draw(const Window *w) override { - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) child_wid->Draw(w); + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) child_wid->Draw(w); } }; @@ -1862,7 +1862,7 @@ bool ScrollMainWindowTo(int x, int y, in if (res) return res; SmallMapWindow *w = dynamic_cast(FindWindowById(WC_SMALLMAP, 0)); - if (w != NULL) w->SmallMapCenterOnCurrentPos(); + if (w != nullptr) w->SmallMapCenterOnCurrentPos(); return res; } diff --git a/src/sortlist_type.h b/src/sortlist_type.h --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -81,8 +81,8 @@ protected: public: GUIList() : - sort_func_list(NULL), - filter_func_list(NULL), + sort_func_list(nullptr), + filter_func_list(nullptr), flags(VL_FIRST_SORT), sort_type(0), filter_type(0), @@ -296,7 +296,7 @@ public: */ bool Sort() { - assert(this->sort_func_list != NULL); + assert(this->sort_func_list != nullptr); return this->Sort(this->sort_func_list[this->sort_type]); } @@ -367,7 +367,7 @@ public: */ bool Filter(F filter_data) { - if (this->filter_func_list == NULL) return false; + if (this->filter_func_list == nullptr) return false; return this->Filter(this->filter_func_list[this->filter_type], filter_data); } diff --git a/src/sound.cpp b/src/sound.cpp --- a/src/sound.cpp +++ b/src/sound.cpp @@ -30,7 +30,7 @@ static void OpenBankFile(const char *fil memset(_original_sounds, 0, sizeof(_original_sounds)); /* If there is no sound file (nosound set), don't load anything */ - if (filename == NULL) return; + if (filename == nullptr) return; FioOpenFile(SOUND_SLOT, filename, BASESET_DIR); size_t pos = FioGetPos(); @@ -110,7 +110,7 @@ static void OpenBankFile(const char *fil static bool SetBankSource(MixerChannel *mc, const SoundEntry *sound) { - assert(sound != NULL); + assert(sound != nullptr); /* Check for valid sound size. */ if (sound->file_size == 0 || sound->file_size > ((size_t)-1) - 2) return false; @@ -162,7 +162,7 @@ static void StartSound(SoundID sound_id, if (volume == 0) return; SoundEntry *sound = GetSound(sound_id); - if (sound == NULL) return; + if (sound == nullptr) return; /* NewGRF sound that wasn't loaded yet? */ if (sound->rate == 0 && sound->file_slot != 0) { @@ -177,7 +177,7 @@ static void StartSound(SoundID sound_id, if (sound->rate == 0) return; MixerChannel *mc = MxAllocateChannel(); - if (mc == NULL) return; + if (mc == nullptr) return; if (!SetBankSource(mc, sound)) return; @@ -244,7 +244,7 @@ static void SndPlayScreenCoordFx(SoundID FOR_ALL_WINDOWS_FROM_BACK(w) { const ViewPort *vp = w->viewport; - if (vp != NULL && + if (vp != nullptr && left < vp->virtual_left + vp->virtual_width && right > vp->virtual_left && top < vp->virtual_top + vp->virtual_height && bottom > vp->virtual_top) { int screen_x = (left + right) / 2 - vp->virtual_left; @@ -304,14 +304,14 @@ template template /* static */ bool BaseMedia::DetermineBestSet() { - if (BaseMedia::used_set != NULL) return true; + if (BaseMedia::used_set != nullptr) return true; - const Tbase_set *best = NULL; - for (const Tbase_set *c = BaseMedia::available_sets; c != NULL; c = c->next) { + const Tbase_set *best = nullptr; + for (const Tbase_set *c = BaseMedia::available_sets; c != nullptr; c = c->next) { /* Skip unusable sets */ if (c->GetNumMissing() != 0) continue; - if (best == NULL || + if (best == nullptr || (best->fallback && !c->fallback) || best->valid_files < c->valid_files || (best->valid_files == c->valid_files && @@ -321,6 +321,6 @@ template } BaseMedia::used_set = best; - return BaseMedia::used_set != NULL; + return BaseMedia::used_set != nullptr; } diff --git a/src/sound/allegro_s.cpp b/src/sound/allegro_s.cpp --- a/src/sound/allegro_s.cpp +++ b/src/sound/allegro_s.cpp @@ -22,18 +22,18 @@ static FSoundDriver_Allegro iFSoundDriver_Allegro; /** The stream we are writing too */ -static AUDIOSTREAM *_stream = NULL; +static AUDIOSTREAM *_stream = nullptr; /** The number of samples in the buffer */ static int _buffer_size; void SoundDriver_Allegro::MainLoop() { /* We haven't opened a stream yet */ - if (_stream == NULL) return; + if (_stream == nullptr) return; void *data = get_audio_stream_buffer(_stream); /* We don't have to fill the stream yet */ - if (data == NULL) return; + if (data == nullptr) return; /* Mix the samples */ MxMixSamples(data, _buffer_size); @@ -54,14 +54,14 @@ extern int _allegro_instance_count; const char *SoundDriver_Allegro::Start(const char * const *parm) { - if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) { + if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { DEBUG(driver, 0, "allegro: install_allegro failed '%s'", allegro_error); return "Failed to set up Allegro"; } _allegro_instance_count++; /* Initialise the sound */ - if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) { + if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, nullptr) != 0) { DEBUG(driver, 0, "allegro: install_sound failed '%s'", allegro_error); return "Failed to set up Allegro sound"; } @@ -76,14 +76,14 @@ const char *SoundDriver_Allegro::Start(c _buffer_size = GetDriverParamInt(parm, "samples", 1024) * hz / 11025; _stream = play_audio_stream(_buffer_size, 16, true, hz, 255, 128); MxInitialize(hz); - return NULL; + return nullptr; } void SoundDriver_Allegro::Stop() { - if (_stream != NULL) { + if (_stream != nullptr) { stop_audio_stream(_stream); - _stream = NULL; + _stream = nullptr; } remove_sound(); diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp --- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -80,9 +80,9 @@ const char *SoundDriver_Cocoa::Start(con desc.componentFlags = 0; desc.componentFlagsMask = 0; - AudioComponent comp = AudioComponentFindNext (NULL, &desc); - if (comp == NULL) { - return "cocoa_s: Failed to start CoreAudio: AudioComponentFindNext returned NULL"; + AudioComponent comp = AudioComponentFindNext (nullptr, &desc); + if (comp == nullptr) { + return "cocoa_s: Failed to start CoreAudio: AudioComponentFindNext returned nullptr"; } /* Open & initialize the default output audio unit */ @@ -101,9 +101,9 @@ const char *SoundDriver_Cocoa::Start(con desc.componentFlags = 0; desc.componentFlagsMask = 0; - Component comp = FindNextComponent (NULL, &desc); - if (comp == NULL) { - return "cocoa_s: Failed to start CoreAudio: FindNextComponent returned NULL"; + Component comp = FindNextComponent (nullptr, &desc); + if (comp == nullptr) { + return "cocoa_s: Failed to start CoreAudio: FindNextComponent returned nullptr"; } /* Open & initialize the default output audio unit */ @@ -126,7 +126,7 @@ const char *SoundDriver_Cocoa::Start(con /* Set the audio callback */ callback.inputProc = audioCallback; - callback.inputProcRefCon = NULL; + callback.inputProcRefCon = nullptr; if (AudioUnitSetProperty(_outputAudioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &callback, sizeof(callback)) != noErr) { return "cocoa_s: Failed to start CoreAudio: AudioUnitSetProperty (kAudioUnitProperty_SetRenderCallback)"; } @@ -137,7 +137,7 @@ const char *SoundDriver_Cocoa::Start(con } /* We're running! */ - return NULL; + return nullptr; } diff --git a/src/sound/null_s.h b/src/sound/null_s.h --- a/src/sound/null_s.h +++ b/src/sound/null_s.h @@ -17,7 +17,7 @@ /** Implementation of the null sound driver. */ class SoundDriver_Null : public SoundDriver { public: - const char *Start(const char * const *param) override { return NULL; } + const char *Start(const char * const *param) override { return nullptr; } void Stop() override { } const char *GetName() const override { return "null"; } diff --git a/src/sound/sdl_s.cpp b/src/sound/sdl_s.cpp --- a/src/sound/sdl_s.cpp +++ b/src/sound/sdl_s.cpp @@ -54,7 +54,7 @@ const char *SoundDriver_SDL::Start(const MxInitialize(spec.freq); SDL_OpenAudio(&spec, &spec); SDL_PauseAudio(0); - return NULL; + return nullptr; } void SoundDriver_SDL::Stop() diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -50,12 +50,12 @@ static DWORD WINAPI SoundThread(LPVOID a if ((hdr->dwFlags & WHDR_INQUEUE) != 0) continue; MxMixSamples(hdr->lpData, hdr->dwBufferLength / 4); if (waveOutWrite(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { - MessageBox(NULL, _T("Sounds are disabled until restart."), _T("waveOutWrite failed"), MB_ICONINFORMATION); + MessageBox(nullptr, _T("Sounds are disabled until restart."), _T("waveOutWrite failed"), MB_ICONINFORMATION); return 0; } } WaitForSingleObject(_event, INFINITE); - } while (_waveout != NULL); + } while (_waveout != nullptr); return 0; } @@ -75,7 +75,7 @@ const char *SoundDriver_Win32::Start(con _bufsize = min(_bufsize, UINT16_MAX); try { - if (NULL == (_event = CreateEvent(NULL, FALSE, FALSE, NULL))) throw "Failed to create event"; + if (nullptr == (_event = CreateEvent(nullptr, FALSE, FALSE, nullptr))) throw "Failed to create event"; if (waveOutOpen(&_waveout, WAVE_MAPPER, &wfex, (DWORD_PTR)_event, 0, CALLBACK_EVENT) != MMSYSERR_NOERROR) throw "waveOutOpen failed"; @@ -84,13 +84,13 @@ const char *SoundDriver_Win32::Start(con PrepareHeader(&_wave_hdr[0]); PrepareHeader(&_wave_hdr[1]); - if (NULL == (_thread = CreateThread(NULL, 8192, SoundThread, 0, 0, &_threadId))) throw "Failed to create thread"; + if (nullptr == (_thread = CreateThread(nullptr, 8192, SoundThread, 0, 0, &_threadId))) throw "Failed to create thread"; } catch (const char *error) { this->Stop(); return error; } - return NULL; + return nullptr; } void SoundDriver_Win32::Stop() @@ -98,7 +98,7 @@ void SoundDriver_Win32::Stop() HWAVEOUT waveout = _waveout; /* Stop the sound thread. */ - _waveout = NULL; + _waveout = nullptr; SetEvent(_event); WaitForSingleObject(_thread, INFINITE); diff --git a/src/sound/xaudio2_s.cpp b/src/sound/xaudio2_s.cpp --- a/src/sound/xaudio2_s.cpp +++ b/src/sound/xaudio2_s.cpp @@ -125,7 +125,7 @@ static StreamingVoiceContext* _voice_con * Initialises the XAudio2 driver. * * @param parm Driver parameters. -* @return An error message if unsuccessful, or NULL otherwise. +* @return An error message if unsuccessful, or nullptr otherwise. * */ const char *SoundDriver_XAudio2::Start(const char * const *parm) @@ -140,7 +140,7 @@ const char *SoundDriver_XAudio2::Start(c _xaudio_dll_handle = LoadLibraryA(XAUDIO2_DLL_A); - if (_xaudio_dll_handle == NULL) + if (_xaudio_dll_handle == nullptr) { CoUninitialize(); @@ -150,7 +150,7 @@ const char *SoundDriver_XAudio2::Start(c API_XAudio2Create xAudio2Create = (API_XAudio2Create) GetProcAddress(_xaudio_dll_handle, "XAudio2Create"); - if (xAudio2Create == NULL) + if (xAudio2Create == nullptr) { FreeLibrary(_xaudio_dll_handle); CoUninitialize(); @@ -248,7 +248,7 @@ const char *SoundDriver_XAudio2::Start(c return "Failed to submit the first audio buffer"; } - return NULL; + return nullptr; } /** diff --git a/src/sprite.cpp b/src/sprite.cpp --- a/src/sprite.cpp +++ b/src/sprite.cpp @@ -75,7 +75,7 @@ void DrawCommonTileSeq(const TileInfo *t SetBit(image, PALETTE_MODIFIER_TRANSPARENT); pal = PALETTE_TO_TRANSPARENT; } - DrawGroundSprite(image, pal, NULL, offs_x, offs_y); + DrawGroundSprite(image, pal, nullptr, offs_x, offs_y); } } } diff --git a/src/spritecache.cpp b/src/spritecache.cpp --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -44,7 +44,7 @@ struct SpriteCache { static uint _spritecache_items = 0; -static SpriteCache *_spritecache = NULL; +static SpriteCache *_spritecache = nullptr; static inline SpriteCache *GetSpriteCache(uint index) @@ -424,7 +424,7 @@ static void *ReadSprite(const SpriteCach } if (sprite_avail == 0) { - if (sprite_type == ST_MAPGEN) return NULL; + if (sprite_type == ST_MAPGEN) return nullptr; if (id == SPR_IMG_QUERY) usererror("Okay... something went horribly wrong. I couldn't load the fallback sprite. What should I do?"); return (void*)GetRawSprite(SPR_IMG_QUERY, ST_NORMAL, allocator); } @@ -535,7 +535,7 @@ bool LoadNextSprite(int load_index, byte byte grf_type = FioReadByte(); SpriteType type; - void *data = NULL; + void *data = nullptr; if (grf_type == 0xFF) { /* Some NewGRF files have "empty" pseudo-sprites which are 1 * byte long. Catch these so the sprites won't be displayed. */ @@ -595,7 +595,7 @@ void DupSprite(SpriteID old_spr, SpriteI scnew->file_slot = scold->file_slot; scnew->file_pos = scold->file_pos; - scnew->ptr = NULL; + scnew->ptr = nullptr; scnew->id = scold->id; scnew->type = scold->type; scnew->warned = false; @@ -643,7 +643,7 @@ void IncreaseSpriteLRU() for (i = 0; i != _spritecache_items; i++) { SpriteCache *sc = GetSpriteCache(i); - if (sc->ptr != NULL) { + if (sc->ptr != nullptr) { if (sc->lru >= 0) { sc->lru = -1; } else if (sc->lru != -32768) { @@ -715,7 +715,7 @@ static void DeleteEntryFromSpriteCache(u MemBlock *s = (MemBlock*)GetSpriteCache(item)->ptr - 1; assert(!(s->size & S_FREE_MASK)); s->size |= S_FREE_MASK; - GetSpriteCache(item)->ptr = NULL; + GetSpriteCache(item)->ptr = nullptr; /* And coalesce adjacent free blocks */ for (s = _spritecache_ptr; s->size != 0; s = NextBlock(s)) { @@ -737,7 +737,7 @@ static void DeleteEntryFromSpriteCache() cur_lru = 0xffff; for (SpriteID i = 0; i != _spritecache_items; i++) { SpriteCache *sc = GetSpriteCache(i); - if (sc->type != ST_RECOLOUR && sc->ptr != NULL && sc->lru < cur_lru) { + if (sc->type != ST_RECOLOUR && sc->ptr != nullptr && sc->lru < cur_lru) { cur_lru = sc->lru; best = i; } @@ -807,7 +807,7 @@ static void *HandleInvalidSpriteRequest( SpriteType available = sc->type; if (requested == ST_FONT && available == ST_NORMAL) { - if (sc->ptr == NULL) sc->type = ST_FONT; + if (sc->ptr == nullptr) sc->type = ST_FONT; return GetRawSprite(sprite, sc->type, allocator); } @@ -837,7 +837,7 @@ static void *HandleInvalidSpriteRequest( * If the sprite is not available or of wrong type, a fallback sprite is returned. * @param sprite Sprite to read. * @param type Expected sprite type. - * @param allocator Allocator function to use. Set to NULL to use the usual sprite cache. + * @param allocator Allocator function to use. Set to nullptr to use the usual sprite cache. * @return Sprite raw data */ void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator) @@ -856,14 +856,14 @@ void *GetRawSprite(SpriteID sprite, Spri if (sc->type != type) return HandleInvalidSpriteRequest(sprite, type, sc, allocator); - if (allocator == NULL) { + if (allocator == nullptr) { /* Load sprite into/from spritecache */ /* Update LRU */ sc->lru = ++_sprite_lru_counter; /* Load the sprite, if it is not loaded, yet */ - if (sc->ptr == NULL) sc->ptr = ReadSprite(sc, sprite, type, AllocSprite); + if (sc->ptr == nullptr) sc->ptr = ReadSprite(sc, sprite, type, AllocSprite); return sc->ptr; } else { @@ -882,7 +882,7 @@ static void GfxInitSpriteCache() /* Remember 'target_size' from the previous allocation attempt, so we do not try to reach the target_size multiple times in case of failure. */ static uint last_alloc_attempt = 0; - if (_spritecache_ptr == NULL || (_allocated_sprite_cache_size != target_size && target_size != last_alloc_attempt)) { + if (_spritecache_ptr == nullptr || (_allocated_sprite_cache_size != target_size && target_size != last_alloc_attempt)) { delete[] reinterpret_cast(_spritecache_ptr); last_alloc_attempt = target_size; @@ -893,10 +893,10 @@ static void GfxInitSpriteCache() /* Try to allocate 50% more to make sure we do not allocate almost all available. */ _spritecache_ptr = reinterpret_cast(new byte[_allocated_sprite_cache_size + _allocated_sprite_cache_size / 2]); } catch (std::bad_alloc &) { - _spritecache_ptr = NULL; + _spritecache_ptr = nullptr; } - if (_spritecache_ptr != NULL) { + if (_spritecache_ptr != nullptr) { /* Allocation succeeded, but we wanted less. */ delete[] reinterpret_cast(_spritecache_ptr); _spritecache_ptr = reinterpret_cast(new byte[_allocated_sprite_cache_size]); @@ -906,7 +906,7 @@ static void GfxInitSpriteCache() /* Try again to allocate half. */ _allocated_sprite_cache_size >>= 1; } - } while (_spritecache_ptr == NULL); + } while (_spritecache_ptr == nullptr); if (_allocated_sprite_cache_size != target_size) { DEBUG(misc, 0, "Not enough memory to allocate %d MiB of spritecache. Spritecache was reduced to %d MiB.", target_size / 1024 / 1024, _allocated_sprite_cache_size / 1024 / 1024); @@ -931,7 +931,7 @@ void GfxInitSpriteMem() /* Reset the spritecache 'pool' */ free(_spritecache); _spritecache_items = 0; - _spritecache = NULL; + _spritecache = nullptr; _compact_cache_counter = 0; } @@ -945,7 +945,7 @@ void GfxClearSpriteCache() /* Clear sprite ptr for all cached items */ for (uint i = 0; i != _spritecache_items; i++) { SpriteCache *sc = GetSpriteCache(i); - if (sc->type != ST_RECOLOUR && sc->ptr != NULL) DeleteEntryFromSpriteCache(i); + if (sc->type != ST_RECOLOUR && sc->ptr != nullptr) DeleteEntryFromSpriteCache(i); } } diff --git a/src/spritecache.h b/src/spritecache.h --- a/src/spritecache.h +++ b/src/spritecache.h @@ -27,7 +27,7 @@ extern uint _sprite_cache_size; typedef void *AllocatorProc(size_t size); -void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator = NULL); +void *GetRawSprite(SpriteID sprite, SpriteType type, AllocatorProc *allocator = nullptr); bool SpriteExists(SpriteID sprite); SpriteType GetSpriteType(SpriteID sprite); diff --git a/src/station.cpp b/src/station.cpp --- a/src/station.cpp +++ b/src/station.cpp @@ -108,7 +108,7 @@ Station::~Station() for (CargoID c = 0; c < NUM_CARGO; ++c) { LinkGraph *lg = LinkGraph::GetIfValid(this->goods[c].link_graph); - if (lg == NULL) continue; + if (lg == nullptr) continue; for (NodeID node = 0; node < lg->Size(); ++node) { Station *st = Station::Get((*lg)[node].Station()); @@ -187,7 +187,7 @@ RoadStop *Station::GetPrimaryRoadStop(co { RoadStop *rs = this->GetPrimaryRoadStop(v->IsBus() ? ROADSTOP_BUS : ROADSTOP_TRUCK); - for (; rs != NULL; rs = rs->next) { + for (; rs != nullptr; rs = rs->next) { /* The vehicle cannot go to this roadstop (different roadtype) */ if ((GetRoadTypes(rs->xy) & v->compatible_roadtypes) == ROADTYPES_NONE) continue; /* The vehicle is articulated and can therefore not go to a standard road stop. */ @@ -326,13 +326,13 @@ uint Station::GetCatchmentRadius() const uint ret = CA_NONE; if (_settings_game.station.modified_catchment) { - if (this->bus_stops != NULL) ret = max(ret, CA_BUS); - if (this->truck_stops != NULL) ret = max(ret, CA_TRUCK); + if (this->bus_stops != nullptr) ret = max(ret, CA_BUS); + if (this->truck_stops != nullptr) ret = max(ret, CA_TRUCK); if (this->train_station.tile != INVALID_TILE) ret = max(ret, CA_TRAIN); if (this->dock_tile != INVALID_TILE) ret = max(ret, CA_DOCK); if (this->airport.tile != INVALID_TILE) ret = max(ret, this->airport.GetSpec()->catchment); } else { - if (this->bus_stops != NULL || this->truck_stops != NULL || this->train_station.tile != INVALID_TILE || this->dock_tile != INVALID_TILE || this->airport.tile != INVALID_TILE) { + if (this->bus_stops != nullptr || this->truck_stops != nullptr || this->train_station.tile != INVALID_TILE || this->dock_tile != INVALID_TILE || this->airport.tile != INVALID_TILE) { ret = CA_UNMODIFIED; } } @@ -423,7 +423,7 @@ void Station::RecomputeCatchment() } this->catchment_tiles.Initialize(GetCatchmentRect()); - if (!_settings_game.station.serve_neutral_industries && this->industry != NULL) { + if (!_settings_game.station.serve_neutral_industries && this->industry != nullptr) { /* Station is associated with an industry, so we only need to deliver to that industry. */ TILE_AREA_LOOP(tile, this->industry->location) { if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == this->industry->index) { @@ -464,7 +464,7 @@ void Station::RecomputeCatchment() Industry *i = Industry::GetByTile(tile); /* Ignore industry if it has a neutral station. It already can't be this station. */ - if (!_settings_game.station.serve_neutral_industries && i->neutral_station != NULL) continue; + if (!_settings_game.station.serve_neutral_industries && i->neutral_station != nullptr) continue; i->stations_near.insert(this); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -117,7 +117,7 @@ CommandCost GetStationAround(TileArea ta } } } - *st = (closest_station == INVALID_STATION) ? NULL : T::Get(closest_station); + *st = (closest_station == INVALID_STATION) ? nullptr : T::Get(closest_station); return CommandCost(); } @@ -356,13 +356,13 @@ static StringID GenerateStationName(Stat /** * Find the closest deleted station of the current company * @param tile the tile to search from. - * @return the closest station or NULL if too far. + * @return the closest station or nullptr if too far. */ static Station *GetClosestDeletedStation(TileIndex tile) { uint threshold = 8; - Station *best_station = NULL; + Station *best_station = nullptr; ForAllStationsRadius(tile, threshold, [&](Station *st) { if (!st->IsInUse() && st->owner == _current_company) { uint cur_dist = DistanceManhattan(tile, st->xy); @@ -370,7 +370,7 @@ static Station *GetClosestDeletedStation if (cur_dist < threshold) { threshold = cur_dist; best_station = st; - } else if (cur_dist == threshold && best_station != NULL) { + } else if (cur_dist == threshold && best_station != nullptr) { /* In case of a tie, lowest station ID wins */ if (st->index < best_station->index) best_station = st; } @@ -528,7 +528,7 @@ CargoArray GetProductionAroundTiles(Tile for (IndustryID industry : industries) { const Industry *i = Industry::Get(industry); /* Skip industry with neutral station */ - if (i->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) continue; + if (i->neutral_station != nullptr && !_settings_game.station.serve_neutral_industries) continue; for (uint j = 0; j < lengthof(i->produced_cargo); j++) { CargoID cargo = i->produced_cargo[j]; @@ -545,13 +545,13 @@ CargoArray GetProductionAroundTiles(Tile * @param w X extent of area * @param h Y extent of area * @param rad Search radius in addition to given area - * @param always_accepted bitmask of cargo accepted by houses and headquarters; can be NULL - * @param ind Industry associated with neutral station (e.g. oil rig) or NULL + * @param always_accepted bitmask of cargo accepted by houses and headquarters; can be nullptr + * @param ind Industry associated with neutral station (e.g. oil rig) or nullptr */ CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted) { CargoArray acceptance; - if (always_accepted != NULL) *always_accepted = 0; + if (always_accepted != nullptr) *always_accepted = 0; int x = TileX(tile); int y = TileY(tile); @@ -573,7 +573,7 @@ CargoArray GetAcceptanceAroundTiles(Tile TileIndex tile = TileXY(xc, yc); /* Ignore industry if it has a neutral station. */ - if (!_settings_game.station.serve_neutral_industries && IsTileType(tile, MP_INDUSTRY) && Industry::GetByTile(tile)->neutral_station != NULL) continue; + if (!_settings_game.station.serve_neutral_industries && IsTileType(tile, MP_INDUSTRY) && Industry::GetByTile(tile)->neutral_station != nullptr) continue; AddAcceptedCargo(tile, acceptance, always_accepted); } @@ -585,12 +585,12 @@ CargoArray GetAcceptanceAroundTiles(Tile /** * Get the acceptance of cargoes around the station in. * @param st Station to get acceptance of. - * @param always_accepted bitmask of cargo accepted by houses and headquarters; can be NULL + * @param always_accepted bitmask of cargo accepted by houses and headquarters; can be nullptr */ static CargoArray GetAcceptanceAroundStation(const Station *st, CargoTypes *always_accepted) { CargoArray acceptance; - if (always_accepted != NULL) *always_accepted = 0; + if (always_accepted != nullptr) *always_accepted = 0; BitmapTileIterator it(st->catchment_tiles); for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { @@ -712,9 +712,9 @@ static void UpdateStationSignCoord(BaseS static CommandCost BuildStationPart(Station **st, DoCommandFlag flags, bool reuse, TileArea area, StationNaming name_class) { /* Find a deleted station close to us */ - if (*st == NULL && reuse) *st = GetClosestDeletedStation(area.tile); - - if (*st != NULL) { + if (*st == nullptr && reuse) *st = GetClosestDeletedStation(area.tile); + + if (*st != nullptr) { if ((*st)->owner != _current_company) { return_cmd_error(CMD_ERROR); } @@ -894,7 +894,7 @@ static CommandCost CheckFlatLandRailStat uint invalid_dirs = 5 << axis; const StationSpec *statspec = StationClass::Get(spec_class)->GetSpec(spec_index); - bool slope_cb = statspec != NULL && HasBit(statspec->callback_mask, CBM_STATION_SLOPE_CHECK); + bool slope_cb = statspec != nullptr && HasBit(statspec->callback_mask, CBM_STATION_SLOPE_CHECK); TILE_AREA_LOOP(tile_cur, tile_area) { CommandCost ret = CheckBuildableTile(tile_cur, invalid_dirs, allowed_z, false); @@ -910,7 +910,7 @@ static CommandCost CheckFlatLandRailStat /* if station is set, then we have special handling to allow building on top of already existing stations. * so station points to INVALID_STATION if we can build on any station. * Or it points to a station if we're only allowed to build on exactly that station. */ - if (station != NULL && IsTileType(tile_cur, MP_STATION)) { + if (station != nullptr && IsTileType(tile_cur, MP_STATION)) { if (!IsRailStation(tile_cur)) { return ClearTile_Station(tile_cur, DC_AUTO); // get error message } else { @@ -941,7 +941,7 @@ static CommandCost CheckFlatLandRailStat /* Check for trains having a reservation for this tile. */ if (HasBit(GetRailReservationTrackBits(tile_cur), track)) { Train *v = GetTrainForReservation(tile_cur, track); - if (v != NULL) { + if (v != nullptr) { affected_vehicles.push_back(v); } } @@ -986,7 +986,7 @@ static CommandCost CheckFlatLandRoadStop /* If station is set, then we have special handling to allow building on top of already existing stations. * Station points to INVALID_STATION if we can build on any station. * Or it points to a station if we're only allowed to build on exactly that station. */ - if (station != NULL && IsTileType(cur_tile, MP_STATION)) { + if (station != nullptr && IsTileType(cur_tile, MP_STATION)) { if (!IsRoadStop(cur_tile)) { return ClearTile_Station(cur_tile, DC_AUTO); // Get error message. } else { @@ -1125,7 +1125,7 @@ static inline byte *CreateMulti(byte *la */ void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSpec *statspec) { - if (statspec != NULL && statspec->lengths >= plat_len && + if (statspec != nullptr && statspec->lengths >= plat_len && statspec->platforms[plat_len - 1] >= numtracks && statspec->layouts[plat_len - 1][numtracks - 1]) { /* Custom layout defined, follow it. */ @@ -1161,7 +1161,7 @@ void GetStationLayout(byte *layout, int template CommandCost FindJoiningBaseStation(StationID existing_station, StationID station_to_join, bool adjacent, TileArea ta, T **st) { - assert(*st == NULL); + assert(*st == nullptr); bool check_surrounding = true; if (_settings_game.station.adjacent_stations) { @@ -1174,7 +1174,7 @@ CommandCost FindJoiningBaseStation(Stati /* Extend the current station, and don't check whether it will * be near any other stations. */ *st = T::GetIfValid(existing_station); - check_surrounding = (*st == NULL); + check_surrounding = (*st == nullptr); } } else { /* There's no station here. Don't check the tiles surrounding this @@ -1190,7 +1190,7 @@ CommandCost FindJoiningBaseStation(Stati } /* Distant join */ - if (*st == NULL && station_to_join != INVALID_STATION) *st = T::GetIfValid(station_to_join); + if (*st == nullptr && station_to_join != INVALID_STATION) *st = T::GetIfValid(station_to_join); return CommandCost(); } @@ -1318,14 +1318,14 @@ CommandCost CmdBuildRailStation(TileInde cost.AddCost((numtracks * _price[PR_BUILD_STATION_RAIL] + _price[PR_BUILD_STATION_RAIL_LENGTH]) * plat_len); cost.AddCost(numtracks * plat_len * RailBuildCost(rt)); - Station *st = NULL; + Station *st = nullptr; ret = FindJoiningStation(est, station_to_join, adjacent, new_location, &st); if (ret.Failed()) return ret; ret = BuildStationPart(&st, flags, reuse, new_location, STATIONNAMING_RAIL); if (ret.Failed()) return ret; - if (st != NULL && st->train_station.tile != INVALID_TILE) { + if (st != nullptr && st->train_station.tile != INVALID_TILE) { CommandCost ret = CanExpandRailStation(st, new_location, axis); if (ret.Failed()) return ret; } @@ -1335,7 +1335,7 @@ CommandCost CmdBuildRailStation(TileInde int specindex = AllocateSpecToStation(statspec, st, (flags & DC_EXEC) != 0); if (specindex == -1) return_cmd_error(STR_ERROR_TOO_MANY_STATION_SPECS); - if (statspec != NULL) { + if (statspec != nullptr) { /* Perform NewStation checks */ /* Check if the station size is permitted */ @@ -1345,7 +1345,7 @@ CommandCost CmdBuildRailStation(TileInde /* Check if the station is buildable */ if (HasBit(statspec->callback_mask, CBM_STATION_AVAIL)) { - uint16 cb_res = GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE); + uint16 cb_res = GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, nullptr, INVALID_TILE); if (cb_res != CALLBACK_FAILED && !Convert8bitBooleanCallback(statspec->grf_prop.grffile, CBID_STATION_AVAILABILITY, cb_res)) return CMD_ERROR; } } @@ -1361,7 +1361,7 @@ CommandCost CmdBuildRailStation(TileInde st->rect.BeforeAddRect(tile_org, w_org, h_org, StationRect::ADD_TRY); - if (statspec != NULL) { + if (statspec != nullptr) { /* Include this station spec's animation trigger bitmask * in the station's cached copy. */ st->cached_anim_triggers |= statspec->animation.triggers; @@ -1385,7 +1385,7 @@ CommandCost CmdBuildRailStation(TileInde if (IsRailStationTile(tile) && HasStationReservation(tile)) { /* Check for trains having a reservation for this tile. */ Train *v = GetTrainForReservation(tile, AxisToTrack(GetRailStationAxis(tile))); - if (v != NULL) { + if (v != nullptr) { affected_vehicles.push_back(v); FreeTrainReservation(v); } @@ -1411,12 +1411,12 @@ CommandCost CmdBuildRailStation(TileInde if (!IsStationTileBlocked(tile)) c->infrastructure.rail[rt]++; c->infrastructure.station++; - if (statspec != NULL) { + if (statspec != nullptr) { /* Use a fixed axis for GetPlatformInfo as our platforms / numtracks are always the right way around */ uint32 platinfo = GetPlatformInfo(AXIS_X, GetStationGfx(tile), plat_len, numtracks_orig, plat_len - w, numtracks_orig - numtracks, false); /* As the station is not yet completely finished, the station does not yet exist. */ - uint16 callback = GetStationCallback(CBID_STATION_TILE_LAYOUT, platinfo, 0, statspec, NULL, tile); + uint16 callback = GetStationCallback(CBID_STATION_TILE_LAYOUT, platinfo, 0, statspec, nullptr, tile); if (callback != CALLBACK_FAILED) { if (callback < 8) { SetStationGfx(tile, (callback & ~1) + axis); @@ -1569,7 +1569,7 @@ CommandCost RemoveFromRailBaseStation(Ti /* Check ownership of station */ T *st = T::GetByTile(tile); - if (st == NULL) continue; + if (st == nullptr) continue; if (_current_company != OWNER_WATER) { CommandCost ret = CheckOwnership(st->owner); @@ -1592,11 +1592,11 @@ CommandCost RemoveFromRailBaseStation(Ti Track track = GetRailStationTrack(tile); Owner owner = GetTileOwner(tile); RailType rt = GetRailType(tile); - Train *v = NULL; + Train *v = nullptr; if (HasStationReservation(tile)) { v = GetTrainForReservation(tile, track); - if (v != NULL) FreeTrainReservation(v); + if (v != nullptr) FreeTrainReservation(v); } bool build_rail = keep_rail && !IsStationTileBlocked(tile); @@ -1616,7 +1616,7 @@ CommandCost RemoveFromRailBaseStation(Ti include(affected_stations, st); - if (v != NULL) RestoreTrainReservation(v); + if (v != nullptr) RestoreTrainReservation(v); } } @@ -1784,13 +1784,13 @@ static RoadStop **FindRoadStopSpot(bool { RoadStop **primary_stop = (truck_station) ? &st->truck_stops : &st->bus_stops; - if (*primary_stop == NULL) { + if (*primary_stop == nullptr) { /* we have no roadstop of the type yet, so write a "primary stop" */ return primary_stop; } else { /* there are stops already, so append to the end of the list */ RoadStop *stop = *primary_stop; - while (stop->next != NULL) stop = stop->next; + while (stop->next != nullptr) stop = stop->next; return &stop->next; } } @@ -1878,7 +1878,7 @@ CommandCost CmdBuildRoadStop(TileIndex t if (ret.Failed()) return ret; cost.AddCost(ret); - Station *st = NULL; + Station *st = nullptr; ret = FindJoiningRoadStop(est, station_to_join, HasBit(p2, 5), roadstop_area, &st); if (ret.Failed()) return ret; @@ -1922,7 +1922,7 @@ CommandCost CmdBuildRoadStop(TileIndex t RoadType rt; FOR_EACH_SET_ROADTYPE(rt, cur_rts | rts) { Company *c = Company::GetIfValid(rt == ROADTYPE_ROAD ? road_owner : tram_owner); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.road[rt] += 2 - (IsNormalRoadTile(cur_tile) && HasBit(cur_rts, rt) ? CountBits(GetRoadBits(cur_tile, rt)) : 0); DirtyCompanyInfrastructureWindows(c->index); } @@ -1941,7 +1941,7 @@ CommandCost CmdBuildRoadStop(TileIndex t } } - if (st != NULL) { + if (st != nullptr) { st->AfterStationTileSetChange(true, type ? STATION_TRUCK: STATION_BUS); } return cost; @@ -1961,7 +1961,7 @@ static Vehicle *ClearRoadStopStatusEnum( if (HasBit(rv->state, RVS_IN_DT_ROAD_STOP)) rv->state &= RVSB_ROAD_STOP_TRACKDIR_MASK; } - return NULL; + return nullptr; } @@ -1992,12 +1992,12 @@ static CommandCost RemoveRoadStop(TileIn cur_stop = RoadStop::GetByTile(tile, ROADSTOP_BUS); } - assert(cur_stop != NULL); + assert(cur_stop != nullptr); /* don't do the check for drive-through road stops when company bankrupts */ if (IsDriveThroughStopTile(tile) && (flags & DC_BANKRUPT)) { /* remove the 'going through road stop' status from all vehicles on that tile */ - if (flags & DC_EXEC) FindVehicleOnPos(tile, NULL, &ClearRoadStopStatusEnum); + if (flags & DC_EXEC) FindVehicleOnPos(tile, nullptr, &ClearRoadStopStatusEnum); } else { CommandCost ret = EnsureNoVehicleOnGround(tile); if (ret.Failed()) return ret; @@ -2008,7 +2008,7 @@ static CommandCost RemoveRoadStop(TileIn /* removed the first stop in the list */ *primary_stop = cur_stop->next; /* removed the only stop? */ - if (*primary_stop == NULL) { + if (*primary_stop == nullptr) { st->facilities &= (is_truck ? ~FACIL_TRUCK_STOP : ~FACIL_BUS_STOP); } } else { @@ -2022,7 +2022,7 @@ static CommandCost RemoveRoadStop(TileIn RoadType rt; FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) { Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.road[rt] -= 2; DirtyCompanyInfrastructureWindows(c->index); } @@ -2055,10 +2055,10 @@ static CommandCost RemoveRoadStop(TileIn /* Update the tile area of the truck/bus stop */ if (is_truck) { st->truck_station.Clear(); - for (const RoadStop *rs = st->truck_stops; rs != NULL; rs = rs->next) st->truck_station.Add(rs->xy); + for (const RoadStop *rs = st->truck_stops; rs != nullptr; rs = rs->next) st->truck_station.Add(rs->xy); } else { st->bus_station.Clear(); - for (const RoadStop *rs = st->bus_stops; rs != NULL; rs = rs->next) st->bus_station.Add(rs->xy); + for (const RoadStop *rs = st->bus_stops; rs != nullptr; rs = rs->next) st->bus_station.Add(rs->xy); } } @@ -2131,7 +2131,7 @@ CommandCost CmdRemoveRoadStop(TileIndex RoadType rt; FOR_EACH_SET_ROADTYPE(rt, rts) { Company *c = Company::GetIfValid(GetRoadOwner(cur_tile, rt)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.road[rt] += CountBits(road_bits); DirtyCompanyInfrastructureWindows(c->index); } @@ -2198,7 +2198,7 @@ uint8 GetAirportNoiseLevelForDistance(co */ Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist) { - Town *t, *nearest = NULL; + Town *t, *nearest = nullptr; uint add = as->size_x + as->size_y - 2; // GetMinimalAirportDistanceToTile can differ from DistanceManhattan by this much mindist = UINT_MAX - add; // prevent overflow FOR_ALL_TOWNS(t) { @@ -2291,7 +2291,7 @@ CommandCost CmdBuildAirport(TileIndex ti /* Check if local auth would allow a new airport */ StringID authority_refuse_message = STR_NULL; - Town *authority_refuse_town = NULL; + Town *authority_refuse_town = nullptr; if (_settings_game.economy.station_noise_level) { /* do not allow to build a new airport if this raise the town noise over the maximum allowed by town */ @@ -2317,17 +2317,17 @@ CommandCost CmdBuildAirport(TileIndex ti return_cmd_error(authority_refuse_message); } - Station *st = NULL; + Station *st = nullptr; ret = FindJoiningStation(INVALID_STATION, station_to_join, HasBit(p2, 0), airport_area, &st); if (ret.Failed()) return ret; /* Distant join */ - if (st == NULL && distant_join) st = Station::GetIfValid(station_to_join); + if (st == nullptr && distant_join) st = Station::GetIfValid(station_to_join); ret = BuildStationPart(&st, flags, reuse, airport_area, (GetAirport(airport_type)->flags & AirportFTAClass::AIRPLANES) ? STATIONNAMING_AIRPORT : STATIONNAMING_HELIPORT); if (ret.Failed()) return ret; - if (st != NULL && st->airport.tile != INVALID_TILE) { + if (st != nullptr && st->airport.tile != INVALID_TILE) { return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT); } @@ -2571,17 +2571,17 @@ CommandCost CmdBuildDock(TileIndex tile, _dock_w_chk[direction], _dock_h_chk[direction]); /* middle */ - Station *st = NULL; + Station *st = nullptr; ret = FindJoiningStation(INVALID_STATION, station_to_join, HasBit(p1, 0), dock_area, &st); if (ret.Failed()) return ret; /* Distant join */ - if (st == NULL && distant_join) st = Station::GetIfValid(station_to_join); + if (st == nullptr && distant_join) st = Station::GetIfValid(station_to_join); ret = BuildStationPart(&st, flags, reuse, dock_area, STATIONNAMING_DOCK); if (ret.Failed()) return ret; - if (st != NULL && st->dock_tile != INVALID_TILE) return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK); + if (st != nullptr && st->dock_tile != INVALID_TILE) return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK); if (flags & DC_EXEC) { st->dock_tile = tile; @@ -2671,7 +2671,7 @@ const DrawTileSprites *GetStationTileLay * Check whether a sprite is a track sprite, which can be replaced by a non-track ground sprite and a rail overlay. * If the ground sprite is suitable, \a ground is replaced with the new non-track ground sprite, and \a overlay_offset * is set to the overlay to draw. - * @param ti Positional info for the tile to decide snowyness etc. May be NULL. + * @param ti Positional info for the tile to decide snowyness etc. May be nullptr. * @param[in,out] ground Groundsprite to draw. * @param[out] overlay_offset Overlay to draw. * @return true if overlay can be drawn. @@ -2712,7 +2712,7 @@ bool SplitGroundSpriteForOverlay(const T return false; } - if (ti != NULL) { + if (ti != nullptr) { /* Decide snow/desert from tile */ switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: @@ -2734,16 +2734,16 @@ bool SplitGroundSpriteForOverlay(const T static void DrawTile_Station(TileInfo *ti) { - const NewGRFSpriteLayout *layout = NULL; + const NewGRFSpriteLayout *layout = nullptr; DrawTileSprites tmp_rail_layout; - const DrawTileSprites *t = NULL; + const DrawTileSprites *t = nullptr; RoadTypes roadtypes; int32 total_offset; - const RailtypeInfo *rti = NULL; + const RailtypeInfo *rti = nullptr; uint32 relocation = 0; uint32 ground_relocation = 0; - BaseStation *st = NULL; - const StationSpec *statspec = NULL; + BaseStation *st = nullptr; + const StationSpec *statspec = nullptr; uint tile_layout = 0; if (HasStationRail(ti->tile)) { @@ -2756,7 +2756,7 @@ static void DrawTile_Station(TileInfo *t st = BaseStation::GetByTile(ti->tile); statspec = st->speclist[GetCustomStationSpecIndex(ti->tile)].spec; - if (statspec != NULL) { + if (statspec != nullptr) { tile_layout = GetStationGfx(ti->tile); if (HasBit(statspec->callback_mask, CBM_STATION_SPRITE_LAYOUT)) { @@ -2765,11 +2765,11 @@ static void DrawTile_Station(TileInfo *t } /* Ensure the chosen tile layout is valid for this custom station */ - if (statspec->renderdata != NULL) { + if (statspec->renderdata != nullptr) { layout = &statspec->renderdata[tile_layout < statspec->tiles ? tile_layout : (uint)GetRailStationAxis(ti->tile)]; if (!layout->NeedsPreprocessing()) { t = layout; - layout = NULL; + layout = nullptr; } } } @@ -2784,7 +2784,7 @@ static void DrawTile_Station(TileInfo *t gfx = GetAirportGfx(ti->tile); if (gfx >= NEW_AIRPORTTILE_OFFSET) { const AirportTileSpec *ats = AirportTileSpec::Get(gfx); - if (ats->grf_prop.spritegroup[0] != NULL && DrawNewAirportTile(ti, Station::GetByTile(ti->tile), gfx, ats)) { + if (ats->grf_prop.spritegroup[0] != nullptr && DrawNewAirportTile(ti, Station::GetByTile(ti->tile), gfx, ats)) { return; } /* No sprite group (or no valid one) found, meaning no graphics associated. @@ -2821,11 +2821,11 @@ static void DrawTile_Station(TileInfo *t palette = PALETTE_TO_GREY; } - if (layout == NULL && (t == NULL || t->seq == NULL)) t = GetStationTileLayout(GetStationType(ti->tile), gfx); + if (layout == nullptr && (t == nullptr || t->seq == nullptr)) t = GetStationTileLayout(GetStationType(ti->tile), gfx); /* don't show foundation for docks */ if (ti->tileh != SLOPE_FLAT && !IsDock(ti->tile)) { - if (statspec != NULL && HasBit(statspec->flags, SSF_CUSTOM_FOUNDATIONS)) { + if (statspec != nullptr && HasBit(statspec->flags, SSF_CUSTOM_FOUNDATIONS)) { /* Station has custom foundations. * Check whether the foundation continues beyond the tile's upper sides. */ uint edge_info = 0; @@ -2912,7 +2912,7 @@ draw_default_foundation: } } } else { - if (layout != NULL) { + if (layout != nullptr) { /* Sprite layout which needs preprocessing */ bool separate_ground = HasBit(statspec->flags, SSF_SEPARATE_GROUND); uint32 var10_values = layout->PrepareLayout(total_offset, rti->fallback_railtype, 0, 0, separate_ground); @@ -2924,7 +2924,7 @@ draw_default_foundation: tmp_rail_layout.seq = layout->GetLayout(&tmp_rail_layout.ground); t = &tmp_rail_layout; total_offset = 0; - } else if (statspec != NULL) { + } else if (statspec != nullptr) { /* Simple sprite layout */ ground_relocation = relocation = GetCustomStationRelocation(statspec, st, ti->tile, 0); if (HasBit(statspec->flags, SSF_SEPARATE_GROUND)) { @@ -2936,7 +2936,7 @@ draw_default_foundation: SpriteID image = t->ground.sprite; PaletteID pal = t->ground.pal; RailTrackOffset overlay_offset; - if (rti != NULL && rti->UsesOverlay() && SplitGroundSpriteForOverlay(ti, &image, &overlay_offset)) { + if (rti != nullptr && rti->UsesOverlay() && SplitGroundSpriteForOverlay(ti, &image, &overlay_offset)) { SpriteID ground = GetCustomRailSprite(rti, ti->tile, RTSG_GROUND); DrawGroundSprite(image, PAL_NONE); DrawGroundSprite(ground + overlay_offset, PAL_NONE); @@ -2979,7 +2979,7 @@ void StationPickerDrawSprite(int x, int int32 total_offset = 0; PaletteID pal = COMPANY_SPRITE_COLOUR(_local_company); const DrawTileSprites *t = GetStationTileLayout(st, image); - const RailtypeInfo *rti = NULL; + const RailtypeInfo *rti = nullptr; if (railtype != INVALID_RAILTYPE) { rti = GetRailTypeInfo(railtype); @@ -2988,7 +2988,7 @@ void StationPickerDrawSprite(int x, int SpriteID img = t->ground.sprite; RailTrackOffset overlay_offset; - if (rti != NULL && rti->UsesOverlay() && SplitGroundSpriteForOverlay(NULL, &img, &overlay_offset)) { + if (rti != nullptr && rti->UsesOverlay() && SplitGroundSpriteForOverlay(nullptr, &img, &overlay_offset)) { SpriteID ground = GetCustomRailSprite(rti, INVALID_TILE, RTSG_GROUND); DrawSprite(img, PAL_NONE, x, y); DrawSprite(ground + overlay_offset, PAL_NONE, x, y); @@ -3044,11 +3044,11 @@ static void GetTileDesc_Station(TileInde if (HasStationTileRail(tile)) { const StationSpec *spec = GetStationSpec(tile); - if (spec != NULL) { + if (spec != nullptr) { td->station_class = StationClass::Get(spec->cls_id)->name; td->station_name = spec->name; - if (spec->grf_prop.grffile != NULL) { + if (spec->grf_prop.grffile != nullptr) { const GRFConfig *gc = GetGRFConfig(spec->grf_prop.grffile->grfid); td->grf = gc->GetName(); } @@ -3067,10 +3067,10 @@ static void GetTileDesc_Station(TileInde const AirportTileSpec *ats = AirportTileSpec::GetByTile(tile); td->airport_tile_name = ats->name; - if (as->grf_prop.grffile != NULL) { + if (as->grf_prop.grffile != nullptr) { const GRFConfig *gc = GetGRFConfig(as->grf_prop.grffile->grfid); td->grf = gc->GetName(); - } else if (ats->grf_prop.grffile != NULL) { + } else if (ats->grf_prop.grffile != nullptr) { const GRFConfig *gc = GetGRFConfig(ats->grf_prop.grffile->grfid); td->grf = gc->GetName(); } @@ -3090,7 +3090,7 @@ static void GetTileDesc_Station(TileInde const IndustrySpec *is = GetIndustrySpec(i->type); td->owner[0] = i->owner; str = is->name; - if (is->grf_prop.grffile != NULL) td->grf = GetGRFConfig(is->grf_prop.grffile->grfid)->GetName(); + if (is->grf_prop.grffile != nullptr) td->grf = GetGRFConfig(is->grf_prop.grffile->grfid)->GetName(); break; } case STATION_DOCK: str = STR_LAI_STATION_DESCRIPTION_SHIP_DOCK; break; @@ -3315,7 +3315,7 @@ static void TruncateCargo(const CargoSpe ge->cargo.Truncate(amount, &waiting_per_source); for (StationCargoAmountMap::iterator i(waiting_per_source.begin()); i != waiting_per_source.end(); ++i) { Station *source_station = Station::GetIfValid(i->first); - if (source_station == NULL) continue; + if (source_station == nullptr) continue; GoodsEntry &source_ge = source_station->goods[cs->Index()]; source_ge.max_waiting_cargo = max(source_ge.max_waiting_cargo, i->second); @@ -3494,7 +3494,7 @@ void RerouteCargo(Station *st, CargoID c /* Reroute cargo staged to be transferred. */ for (std::list::iterator it(st->loading_vehicles.begin()); it != st->loading_vehicles.end(); ++it) { - for (Vehicle *v = *it; v != NULL; v = v->Next()) { + for (Vehicle *v = *it; v != nullptr; v = v->Next()) { if (v->cargo_type != c) continue; v->cargo.Reroute(UINT_MAX, &v->cargo, avoid, avoid2, &ge); } @@ -3515,7 +3515,7 @@ void DeleteStaleLinks(Station *from) const bool auto_distributed = (_settings_game.linkgraph.GetDistributionType(c) != DT_MANUAL); GoodsEntry &ge = from->goods[c]; LinkGraph *lg = LinkGraph::GetIfValid(ge.link_graph); - if (lg == NULL) continue; + if (lg == nullptr) continue; Node node = (*lg)[ge.node]; for (EdgeIterator it(node.Begin()); it != node.End();) { Edge edge = it->second; @@ -3535,7 +3535,7 @@ void DeleteStaleLinks(Station *from) FOR_ALL_ORDER_LISTS(l) { bool found_from = false; bool found_to = false; - for (Order *order = l->GetFirstOrder(); order != NULL; order = order->next) { + for (Order *order = l->GetFirstOrder(); order != nullptr; order = order->next) { if (!order->IsType(OT_GOTO_STATION) && !order->IsType(OT_IMPLICIT)) continue; if (order->GetDestination() == from->index) { found_from = true; @@ -3606,7 +3606,7 @@ void IncreaseStats(Station *st, CargoID GoodsEntry &ge1 = st->goods[cargo]; Station *st2 = Station::Get(next_station_id); GoodsEntry &ge2 = st2->goods[cargo]; - LinkGraph *lg = NULL; + LinkGraph *lg = nullptr; if (ge1.link_graph == INVALID_LINK_GRAPH) { if (ge2.link_graph == INVALID_LINK_GRAPH) { if (LinkGraph::CanAllocateItem()) { @@ -3642,7 +3642,7 @@ void IncreaseStats(Station *st, CargoID } } } - if (lg != NULL) { + if (lg != nullptr) { (*lg)[ge1.node].UpdateEdge(ge2.node, capacity, usage, mode); } } @@ -3655,7 +3655,7 @@ void IncreaseStats(Station *st, CargoID */ void IncreaseStats(Station *st, const Vehicle *front, StationID next_station_id) { - for (const Vehicle *v = front; v != NULL; v = v->Next()) { + for (const Vehicle *v = front; v != nullptr; v = v->Next()) { if (v->refit_cap > 0) { /* The cargo count can indeed be higher than the refit_cap if * wagons have been auto-replaced and subsequently auto- @@ -3752,7 +3752,7 @@ static uint UpdateStationWaiting(Station StationID next = ge.GetVia(st->index); ge.cargo.Append(new CargoPacket(st->index, st->xy, amount, source_type, source_id), next); - LinkGraph *lg = NULL; + LinkGraph *lg = nullptr; if (ge.link_graph == INVALID_LINK_GRAPH) { if (LinkGraph::CanAllocateItem()) { lg = new LinkGraph(type); @@ -3765,7 +3765,7 @@ static uint UpdateStationWaiting(Station } else { lg = LinkGraph::Get(ge.link_graph); } - if (lg != NULL) (*lg)[ge.node].UpdateSupply(amount); + if (lg != nullptr) (*lg)[ge.node].UpdateSupply(amount); if (!ge.HasRating()) { InvalidateWindowData(WC_STATION_LIST, st->index); @@ -3786,7 +3786,7 @@ static bool IsUniqueStationName(const ch const Station *st; FOR_ALL_STATIONS(st) { - if (st->name != NULL && strcmp(st->name, name) == 0) return false; + if (st->name != nullptr && strcmp(st->name, name) == 0) return false; } return true; @@ -3804,7 +3804,7 @@ static bool IsUniqueStationName(const ch CommandCost CmdRenameStation(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Station *st = Station::GetIfValid(p1); - if (st == NULL) return CMD_ERROR; + if (st == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(st->owner); if (ret.Failed()) return ret; @@ -3818,7 +3818,7 @@ CommandCost CmdRenameStation(TileIndex t if (flags & DC_EXEC) { free(st->name); - st->name = reset ? NULL : stredup(text); + st->name = reset ? nullptr : stredup(text); st->UpdateVirtCoord(); InvalidateWindowData(WC_STATION_LIST, st->owner, 1); @@ -3873,10 +3873,10 @@ void FindStationsAroundTiles(const TileA for (StationID stationid : seen_stations) { Station *st = Station::GetIfValid(stationid); - if (st == NULL) continue; /* Waypoint */ + if (st == nullptr) continue; /* Waypoint */ /* Check if station is attached to an industry */ - if (!_settings_game.station.serve_neutral_industries && st->industry != NULL) continue; + if (!_settings_game.station.serve_neutral_industries && st->industry != nullptr) continue; /* Test if the tile is within the station's catchment */ TILE_AREA_LOOP(tile, location) { @@ -3906,8 +3906,8 @@ uint MoveGoodsToStation(CargoID type, ui /* Return if nothing to do. Also the rounding below fails for 0. */ if (amount == 0) return 0; - Station *st1 = NULL; // Station with best rating - Station *st2 = NULL; // Second best station + Station *st1 = nullptr; // Station with best rating + Station *st2 = nullptr; // Second best station uint best_rating1 = 0; // rating of st1 uint best_rating2 = 0; // rating of st2 @@ -3926,28 +3926,28 @@ uint MoveGoodsToStation(CargoID type, ui } /* This station can be used, add it to st1/st2 */ - if (st1 == NULL || st->goods[type].rating >= best_rating1) { + if (st1 == nullptr || st->goods[type].rating >= best_rating1) { st2 = st1; best_rating2 = best_rating1; st1 = st; best_rating1 = st->goods[type].rating; - } else if (st2 == NULL || st->goods[type].rating >= best_rating2) { + } else if (st2 == nullptr || st->goods[type].rating >= best_rating2) { st2 = st; best_rating2 = st->goods[type].rating; } } /* no stations around at all? */ - if (st1 == NULL) return 0; + if (st1 == nullptr) return 0; /* From now we'll calculate with fractal cargo amounts. * First determine how much cargo we really have. */ amount *= best_rating1 + 1; - if (st2 == NULL) { + if (st2 == nullptr) { /* only one station around */ return UpdateStationWaiting(st1, type, amount, source_type, source_id); } /* several stations around, the best two (highest rating) are in st1 and st2 */ - assert(st1 != NULL); - assert(st2 != NULL); + assert(st1 != nullptr); + assert(st2 != nullptr); assert(best_rating1 != 0 || best_rating2 != 0); /* Then determine the amount the worst station gets. We do it this way as the @@ -4598,14 +4598,14 @@ extern const TileTypeProcs _tile_type_st DrawTile_Station, // draw_tile_proc GetSlopePixelZ_Station, // get_slope_z_proc ClearTile_Station, // clear_tile_proc - NULL, // add_accepted_cargo_proc + nullptr, // add_accepted_cargo_proc GetTileDesc_Station, // get_tile_desc_proc GetTileTrackStatus_Station, // get_tile_track_status_proc ClickTile_Station, // click_tile_proc AnimateTile_Station, // animate_tile_proc TileLoop_Station, // tile_loop_proc ChangeTileOwner_Station, // change_tile_owner_proc - NULL, // add_produced_cargo_proc + nullptr, // add_produced_cargo_proc VehicleEnter_Station, // vehicle_enter_tile_proc GetFoundation_Station, // get_foundation_proc TerraformTile_Station, // terraform_tile_proc diff --git a/src/station_func.h b/src/station_func.h --- a/src/station_func.h +++ b/src/station_func.h @@ -29,7 +29,7 @@ void ShowStationViewWindow(StationID sta void UpdateAllStationVirtCoords(); CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad); -CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted = NULL); +CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted = nullptr); void UpdateStationAcceptance(Station *st, bool show_msg); diff --git a/src/station_gui.cpp b/src/station_gui.cpp --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -296,7 +296,7 @@ protected: if (!this->stations.Sort()) return; /* Reset name sorter sort cache */ - this->last_station = NULL; + this->last_station = nullptr; /* Set the modified widget dirty */ this->SetWidgetDirty(WID_STL_LIST); @@ -655,7 +655,7 @@ byte CompanyStationsWindow::facilities = bool CompanyStationsWindow::include_empty = true; const CargoTypes CompanyStationsWindow::cargo_filter_max = ALL_CARGOTYPES; CargoTypes CompanyStationsWindow::cargo_filter = ALL_CARGOTYPES; -const Station *CompanyStationsWindow::last_station = NULL; +const Station *CompanyStationsWindow::last_station = nullptr; /* Available station sorting functions */ GUIStationList::SortFunction * const CompanyStationsWindow::sorter_funcs[] = { @@ -903,9 +903,9 @@ public: } /** - * Retrieve a child for the given station. Return NULL if it doesn't exist. + * Retrieve a child for the given station. Return nullptr if it doesn't exist. * @param station ID of the station the child we're looking for is associated with. - * @return a child entry for the given station or NULL. + * @return a child entry for the given station or nullptr. */ CargoDataEntry *Retrieve(StationID station) const { @@ -914,9 +914,9 @@ public: } /** - * Retrieve a child for the given cargo. Return NULL if it doesn't exist. + * Retrieve a child for the given cargo. Return nullptr if it doesn't exist. * @param cargo ID of the cargo the child we're looking for is associated with. - * @return a child entry for the given cargo or NULL. + * @return a child entry for the given cargo or nullptr. */ CargoDataEntry *Retrieve(CargoID cargo) const { @@ -1001,7 +1001,7 @@ private: }; CargoDataEntry::CargoDataEntry() : - parent(NULL), + parent(nullptr), station(INVALID_STATION), num_children(0), count(0), @@ -1025,19 +1025,19 @@ CargoDataEntry::CargoDataEntry(StationID {} CargoDataEntry::CargoDataEntry(StationID station) : - parent(NULL), + parent(nullptr), station(station), num_children(0), count(0), - children(NULL) + children(nullptr) {} CargoDataEntry::CargoDataEntry(CargoID cargo) : - parent(NULL), + parent(nullptr), cargo(cargo), num_children(0), count(0), - children(NULL) + children(nullptr) {} CargoDataEntry::~CargoDataEntry() @@ -1051,14 +1051,14 @@ CargoDataEntry::~CargoDataEntry() */ void CargoDataEntry::Clear() { - if (this->children != NULL) { + if (this->children != nullptr) { for (CargoDataSet::iterator i = this->children->begin(); i != this->children->end(); ++i) { assert(*i != this); delete *i; } this->children->clear(); } - if (this->parent != NULL) this->parent->count -= this->count; + if (this->parent != nullptr) this->parent->count -= this->count; this->count = 0; this->num_children = 0; } @@ -1107,7 +1107,7 @@ CargoDataEntry *CargoDataEntry::InsertOr void CargoDataEntry::Update(uint count) { this->count += count; - if (this->parent != NULL) this->parent->Update(count); + if (this->parent != nullptr) this->parent->Update(count); } /** @@ -1116,7 +1116,7 @@ void CargoDataEntry::Update(uint count) void CargoDataEntry::IncrementSize() { ++this->num_children; - if (this->parent != NULL) this->parent->IncrementSize(); + if (this->parent != nullptr) this->parent->IncrementSize(); } void CargoDataEntry::Resort(CargoSortType type, SortOrder order) @@ -1129,7 +1129,7 @@ void CargoDataEntry::Resort(CargoSortTyp CargoDataEntry *CargoDataEntry::Retrieve(CargoDataSet::iterator i) const { if (i == this->children->end()) { - return NULL; + return nullptr; } else { assert(this->children->value_comp().GetSortType() != ST_COUNT); return *i; @@ -1330,7 +1330,7 @@ struct StationViewWindow : public Window if (count == 0) return; bool auto_distributed = _settings_game.linkgraph.GetDistributionType(cargo) != DT_MANUAL; const CargoDataEntry *expand = &this->expanded_rows; - for (int i = 0; i < NUM_COLUMNS && expand != NULL; ++i) { + for (int i = 0; i < NUM_COLUMNS && expand != nullptr; ++i) { switch (groupings[i]) { case GR_CARGO: assert(i == 0); @@ -1571,13 +1571,13 @@ struct StationViewWindow : public Window StationID next = it.GetKey(); const CargoDataEntry *source_entry = source_dest->Retrieve(cp->SourceStation()); - if (source_entry == NULL) { + if (source_entry == nullptr) { this->ShowCargo(cargo, i, cp->SourceStation(), next, INVALID_STATION, cp->Count()); continue; } const CargoDataEntry *via_entry = source_entry->Retrieve(next); - if (via_entry == NULL) { + if (via_entry == nullptr) { this->ShowCargo(cargo, i, cp->SourceStation(), next, INVALID_STATION, cp->Count()); continue; } @@ -1600,7 +1600,7 @@ struct StationViewWindow : public Window { for (CargoID i = 0; i < NUM_CARGO; i++) { - if (this->cached_destinations.Retrieve(i) == NULL) { + if (this->cached_destinations.Retrieve(i) == nullptr) { this->RecalcDestinations(i); } @@ -1620,13 +1620,13 @@ struct StationViewWindow : public Window { std::list stations; const CargoDataEntry *parent = data->GetParent(); - if (parent->GetParent() == NULL) { + if (parent->GetParent() == nullptr) { this->displayed_rows.push_back(RowDisplay(&this->expanded_rows, data->GetCargo())); return; } StationID next = data->GetStation(); - while (parent->GetParent()->GetParent() != NULL) { + while (parent->GetParent()->GetParent() != nullptr) { stations.push_back(parent->GetStation()); parent = parent->GetParent(); } @@ -1764,7 +1764,7 @@ struct StationViewWindow : public Window DrawString(text_left, text_right, y, str); if (column < NUM_COLUMNS - 1) { - const char *sym = NULL; + const char *sym = nullptr; if (cd->GetNumChildren() > 0) { sym = "-"; } else if (auto_distributed && str != STR_STATION_VIEW_RESERVED) { @@ -1832,7 +1832,7 @@ struct StationViewWindow : public Window const LinkGraph *lg = LinkGraph::GetIfValid(ge->link_graph); SetDParam(0, cs->name); - SetDParam(1, lg != NULL ? lg->Monthly((*lg)[ge->node].Supply()) : 0); + SetDParam(1, lg != nullptr ? lg->Monthly((*lg)[ge->node].Supply()) : 0); SetDParam(2, STR_CARGO_RATING_APPALLING + (ge->rating >> 5)); SetDParam(3, ToPercent8(ge->rating)); DrawString(r.left + WD_FRAMERECT_LEFT + 6, r.right - WD_FRAMERECT_RIGHT - 6, y, STR_STATION_VIEW_CARGO_SUPPLY_RATING); @@ -1849,7 +1849,7 @@ struct StationViewWindow : public Window template void HandleCargoWaitingClick(CargoDataEntry *filter, Tid next) { - if (filter->Retrieve(next) != NULL) { + if (filter->Retrieve(next) != nullptr) { filter->Remove(next); } else { filter->InsertOrRetrieve(next); @@ -2048,9 +2048,9 @@ struct StationViewWindow : public Window void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; - DoCommandP(0, this->window_number, 0, CMD_RENAME_STATION | CMD_MSG(STR_ERROR_CAN_T_RENAME_STATION), NULL, str); + DoCommandP(0, this->window_number, 0, CMD_RENAME_STATION | CMD_MSG(STR_ERROR_CAN_T_RENAME_STATION), nullptr, str); } void OnResize() override @@ -2201,13 +2201,13 @@ static const T *FindStationsNearby(TileA /* Only search tiles where we have a chance to stay within the station spread. * The complete check needs to be done in the callback as we don't know the * extent of the found station, yet. */ - if (distant_join && min(ta.w, ta.h) >= _settings_game.station.station_spread) return NULL; + if (distant_join && min(ta.w, ta.h) >= _settings_game.station.station_spread) return nullptr; uint max_dist = distant_join ? _settings_game.station.station_spread - min(ta.w, ta.h) : 1; TileIndex tile = TileAddByDir(ctx.tile, DIR_N); CircularTileSearch(&tile, max_dist, ta.w, ta.h, AddNearbyStation, &ctx); - return NULL; + return nullptr; } static const NWidgetPart _nested_select_station_widgets[] = { @@ -2360,7 +2360,7 @@ static bool StationJoinerNeeded(const Co /* If a window is already opened and we didn't ctrl-click, * return true (i.e. just flash the old window) */ Window *selection_window = FindWindowById(WC_SELECT_STATION, 0); - if (selection_window != NULL) { + if (selection_window != nullptr) { /* Abort current distant-join and start new one */ delete selection_window; UpdateTileSelection(); @@ -2376,7 +2376,7 @@ static bool StationJoinerNeeded(const Co * If adjacent-stations is disabled and we are building next to a station, do not show the selection window. * but join the other station immediately. */ const T *st = FindStationsNearby(ta, false); - return st == NULL && (_settings_game.station.adjacent_stations || _stations_nearby_list.size() == 0); + return st == nullptr && (_settings_game.station.adjacent_stations || _stations_nearby_list.size() == 0); } /** diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -149,7 +149,7 @@ struct StatusBarWindow : Window { case WID_S_RIGHT: { /* Draw company money, if any */ const Company *c = Company::GetIfValid(_local_company); - if (c != NULL) { + if (c != nullptr) { SetDParam(0, c->money); DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER); } @@ -164,7 +164,7 @@ struct StatusBarWindow : Window { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_AUTOSAVE, TC_FROMSTRING, SA_HOR_CENTER); } else if (_pause_mode != PM_UNPAUSED) { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, STR_STATUSBAR_PAUSED, TC_FROMSTRING, SA_HOR_CENTER); - } else if (this->ticker_scroll < TICKER_STOP && FindWindowById(WC_NEWS_WINDOW, 0) == NULL && _statusbar_news_item != NULL && _statusbar_news_item->string_id != 0) { + } else if (this->ticker_scroll < TICKER_STOP && FindWindowById(WC_NEWS_WINDOW, 0) == nullptr && _statusbar_news_item != nullptr && _statusbar_news_item->string_id != 0) { /* Draw the scrolling news text */ if (!DrawScrollingStatusText(_statusbar_news_item, this->ticker_scroll, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, r.bottom)) { InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); @@ -248,7 +248,7 @@ static const NWidgetPart _nested_main_st }; static WindowDesc _main_status_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_STATUS_BAR, WC_NONE, WDF_NO_FOCUS, _nested_main_status_widgets, lengthof(_nested_main_status_widgets) @@ -260,7 +260,7 @@ static WindowDesc _main_status_desc( bool IsNewsTickerShown() { const StatusBarWindow *w = dynamic_cast(FindWindowById(WC_STATUS_BAR, 0)); - return w != NULL && w->ticker_scroll < StatusBarWindow::TICKER_STOP; + return w != nullptr && w->ticker_scroll < StatusBarWindow::TICKER_STOP; } /** diff --git a/src/story.cpp b/src/story.cpp --- a/src/story.cpp +++ b/src/story.cpp @@ -124,7 +124,7 @@ CommandCost CmdCreateStoryPage(TileIndex s->date = _date; s->company = company; if (StrEmpty(text)) { - s->title = NULL; + s->title = nullptr; } else { s->title = stredup(text); } @@ -241,7 +241,7 @@ CommandCost CmdSetStoryPageTitle(TileInd StoryPage *p = StoryPage::Get(page_id); free(p->title); if (StrEmpty(text)) { - p->title = NULL; + p->title = nullptr; } else { p->title = stredup(text); } diff --git a/src/story_base.h b/src/story_base.h --- a/src/story_base.h +++ b/src/story_base.h @@ -58,7 +58,7 @@ struct StoryPageElement : StoryPageEleme inline StoryPageElement() { } /** - * (Empty) destructor has to be defined else operator delete might be called with NULL parameter + * (Empty) destructor has to be defined else operator delete might be called with nullptr parameter */ inline ~StoryPageElement() { free(this->text); } }; @@ -80,7 +80,7 @@ struct StoryPage : StoryPagePool::PoolIt inline StoryPage() { } /** - * (Empty) destructor has to be defined else operator delete might be called with NULL parameter + * (Empty) destructor has to be defined else operator delete might be called with nullptr parameter */ inline ~StoryPage() { diff --git a/src/story_gui.cpp b/src/story_gui.cpp --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -81,7 +81,7 @@ protected: this->story_page_elements.clear(); const StoryPage *p = GetSelPage(); - if (p != NULL) { + if (p != nullptr) { const StoryPageElement *pe; FOR_ALL_STORY_PAGE_ELEMENTS(pe) { if (pe->page == p->index) { @@ -115,11 +115,11 @@ protected: /** * Get instance of selected page. - * @return Instance of selected page or NULL if no page is selected. + * @return Instance of selected page or nullptr if no page is selected. */ StoryPage *GetSelPage() const { - if (!_story_page_pool.IsValidID(selected_page_id)) return NULL; + if (!_story_page_pool.IsValidID(selected_page_id)) return nullptr; return _story_page_pool.Get(selected_page_id); } @@ -170,7 +170,7 @@ protected: { /* Generate generic title if selected page have no custom title. */ StoryPage *page = this->GetSelPage(); - if (page != NULL && page->title == NULL) { + if (page != nullptr && page->title == nullptr) { SetDParam(0, GetSelPageNum() + 1); GetString(selected_generic_title, STR_STORY_BOOK_GENERIC_PAGE_ITEM, lastof(selected_generic_title)); } @@ -193,10 +193,10 @@ protected: /* Find the last available page which is previous to the current selected page. */ const StoryPage *last_available; - last_available = NULL; + last_available = nullptr; for (const StoryPage *p : this->story_pages) { if (p->index == this->selected_page_id) { - if (last_available == NULL) return; // No previous page available. + if (last_available == nullptr) return; // No previous page available. this->SetSelectedPage(last_available->index); return; } @@ -234,8 +234,8 @@ protected: uint16 page_num = 1; for (const StoryPage *p : this->story_pages) { bool current_page = p->index == this->selected_page_id; - DropDownListStringItem *item = NULL; - if (p->title != NULL) { + DropDownListStringItem *item = nullptr; + if (p->title != nullptr) { item = new DropDownListCharStringItem(p->title, p->index, current_page); } else { /* No custom title => use a generic page title with page number. */ @@ -270,12 +270,12 @@ protected: uint GetHeadHeight(int max_width) const { StoryPage *page = this->GetSelPage(); - if (page == NULL) return 0; + if (page == nullptr) return 0; int height = 0; /* Title lines */ height += FONT_HEIGHT_NORMAL; // Date always use exactly one line. - SetDParamStr(0, page->title != NULL ? page->title : this->selected_generic_title); + SetDParamStr(0, page->title != nullptr ? page->title : this->selected_generic_title); height += GetStringHeight(STR_STORY_BOOK_TITLE, max_width); return height; @@ -292,7 +292,7 @@ protected: switch (pe.type) { case SPET_GOAL: { Goal *g = Goal::Get((GoalID) pe.referenced_id); - if (g == NULL) return SPR_IMG_GOAL_BROKEN_REF; + if (g == nullptr) return SPR_IMG_GOAL_BROKEN_REF; return g->completed ? SPR_IMG_GOAL_COMPLETED : SPR_IMG_GOAL; } case SPET_LOCATION: @@ -336,7 +336,7 @@ protected: uint GetContentHeight() { StoryPage *page = this->GetSelPage(); - if (page == NULL) return 0; + if (page == nullptr) return 0; int max_width = GetAvailablePageContentWidth(); uint element_vertical_dist = FONT_HEIGHT_NORMAL; @@ -458,7 +458,7 @@ public: switch (widget) { case WID_SB_SEL_PAGE: { StoryPage *page = this->GetSelPage(); - SetDParamStr(0, page != NULL && page->title != NULL ? page->title : this->selected_generic_title); + SetDParamStr(0, page != nullptr && page->title != nullptr ? page->title : this->selected_generic_title); break; } case WID_SB_CAPTION: @@ -492,7 +492,7 @@ public: if (widget != WID_SB_PAGE_PANEL) return; StoryPage *page = this->GetSelPage(); - if (page == NULL) return; + if (page == nullptr) return; const int x = r.left + WD_FRAMETEXT_LEFT; const int y = r.top + WD_FRAMETEXT_TOP; @@ -518,7 +518,7 @@ public: y_offset += line_height; /* Title */ - SetDParamStr(0, page->title != NULL ? page->title : this->selected_generic_title); + SetDParamStr(0, page->title != nullptr ? page->title : this->selected_generic_title); y_offset = DrawStringMultiLine(0, right - x, y_offset, bottom - y, STR_STORY_BOOK_TITLE, TC_BLACK, SA_TOP | SA_HOR_CENTER); /* Page elements */ @@ -533,8 +533,8 @@ public: case SPET_GOAL: { Goal *g = Goal::Get((GoalID) pe->referenced_id); - StringID string_id = g == NULL ? STR_STORY_BOOK_INVALID_GOAL_REF : STR_JUST_RAW_STRING; - if (g != NULL) SetDParamStr(0, g->text); + StringID string_id = g == nullptr ? STR_STORY_BOOK_INVALID_GOAL_REF : STR_JUST_RAW_STRING; + if (g != nullptr) SetDParamStr(0, g->text); DrawActionElement(y_offset, right - x, line_height, GetPageElementSprite(*pe), string_id); break; } @@ -567,7 +567,7 @@ public: for (uint16 i = 0; i < this->story_pages.size(); i++) { const StoryPage *s = this->story_pages[i]; - if (s->title != NULL) { + if (s->title != nullptr) { SetDParamStr(0, s->title); } else { SetDParamStr(0, this->selected_generic_title); diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -106,7 +106,7 @@ struct FileStringReader : StringReader { StringReader(data, file, master, translation) { this->fh = fopen(file, "rb"); - if (this->fh == NULL) error("Could not open %s", file); + if (this->fh == nullptr) error("Could not open %s", file); } /** Free/close the file. */ @@ -135,7 +135,7 @@ struct FileStringReader : StringReader { void FileStringReader::HandlePragma(char *str) { if (!memcmp(str, "id ", 3)) { - this->data.next_string_id = strtoul(str + 3, NULL, 0); + this->data.next_string_id = strtoul(str + 3, nullptr, 0); } else if (!memcmp(str, "name ", 5)) { strecpy(_lang.name, str + 5, lastof(_lang.name)); } else if (!memcmp(str, "ownname ", 8)) { @@ -161,14 +161,14 @@ void FileStringReader::HandlePragma(char strecpy(_lang.digit_decimal_separator, strcmp(str, "{NBSP}") == 0 ? NBSP : str, lastof(_lang.digit_decimal_separator)); } else if (!memcmp(str, "winlangid ", 10)) { const char *buf = str + 10; - long langid = strtol(buf, NULL, 16); + long langid = strtol(buf, nullptr, 16); if (langid > (long)UINT16_MAX || langid < 0) { error("Invalid winlangid %s", buf); } _lang.winlangid = (uint16)langid; } else if (!memcmp(str, "grflangid ", 10)) { const char *buf = str + 10; - long langid = strtol(buf, NULL, 16); + long langid = strtol(buf, nullptr, 16); if (langid >= 0x7F || langid < 0) { error("Invalid grflangid %s", buf); } @@ -180,7 +180,7 @@ void FileStringReader::HandlePragma(char for (;;) { const char *s = ParseWord(&buf); - if (s == NULL) break; + if (s == nullptr) break; if (_lang.num_genders >= MAX_NUM_GENDERS) error("Too many genders, max %d", MAX_NUM_GENDERS); strecpy(_lang.genders[_lang.num_genders], s, lastof(_lang.genders[_lang.num_genders])); _lang.num_genders++; @@ -192,7 +192,7 @@ void FileStringReader::HandlePragma(char for (;;) { const char *s = ParseWord(&buf); - if (s == NULL) break; + if (s == nullptr) break; if (_lang.num_cases >= MAX_NUM_CASES) error("Too many cases, max %d", MAX_NUM_CASES); strecpy(_lang.cases[_lang.num_cases], s, lastof(_lang.cases[_lang.num_cases])); _lang.num_cases++; @@ -205,10 +205,10 @@ void FileStringReader::HandlePragma(char bool CompareFiles(const char *n1, const char *n2) { FILE *f2 = fopen(n2, "rb"); - if (f2 == NULL) return false; + if (f2 == nullptr) return false; FILE *f1 = fopen(n1, "rb"); - if (f1 == NULL) { + if (f1 == nullptr) { fclose(f2); error("can't open %s", n1); } @@ -246,7 +246,7 @@ struct FileWriter { this->filename = stredup(filename); this->fh = fopen(this->filename, "wb"); - if (this->fh == NULL) { + if (this->fh == nullptr) { error("Could not open %s", this->filename); } } @@ -255,14 +255,14 @@ struct FileWriter { void Finalise() { fclose(this->fh); - this->fh = NULL; + this->fh = nullptr; } /** Make sure the file is closed. */ virtual ~FileWriter() { /* If we weren't closed an exception was thrown, so remove the temporary file. */ - if (fh != NULL) { + if (fh != nullptr) { fclose(this->fh); unlink(this->filename); } @@ -418,7 +418,7 @@ static const OptionData _opts[] = { GETOPT_NOVAL( 't', "--todo"), GETOPT_NOVAL( 'w', "--warning"), GETOPT_NOVAL( 'h', "--help"), - GETOPT_GENERAL('h', '?', NULL, ODF_NO_VALUE), + GETOPT_GENERAL('h', '?', nullptr, ODF_NO_VALUE), GETOPT_VALUE( 's', "--source_dir"), GETOPT_VALUE( 'd', "--dest_dir"), GETOPT_END(), @@ -428,7 +428,7 @@ int CDECL main(int argc, char *argv[]) { char pathbuf[MAX_PATH]; const char *src_dir = "."; - const char *dest_dir = NULL; + const char *dest_dir = nullptr; GetOptData mgo(argc - 1, argv + 1, _opts); for (;;) { @@ -512,7 +512,7 @@ int CDECL main(int argc, char *argv[]) } } - if (dest_dir == NULL) dest_dir = src_dir; // if dest_dir is not specified, it equals src_dir + if (dest_dir == nullptr) dest_dir = src_dir; // if dest_dir is not specified, it equals src_dir try { /* strgen has two modes of operation. If no (free) arguments are passed @@ -551,17 +551,17 @@ int CDECL main(int argc, char *argv[]) const char *translation = replace_pathsep(mgo.argv[i]); const char *file = strrchr(translation, PATHSEPCHAR); - FileStringReader translation_reader(data, translation, false, file == NULL || strcmp(file + 1, "english.txt") != 0); + FileStringReader translation_reader(data, translation, false, file == nullptr || strcmp(file + 1, "english.txt") != 0); translation_reader.ParseFile(); // target file if (_errors != 0) return 1; /* get the targetfile, strip any directories and append to destination path */ r = strrchr(mgo.argv[i], PATHSEPCHAR); - mkpath(pathbuf, lastof(pathbuf), dest_dir, (r != NULL) ? &r[1] : mgo.argv[i]); + mkpath(pathbuf, lastof(pathbuf), dest_dir, (r != nullptr) ? &r[1] : mgo.argv[i]); /* rename the .txt (input-extension) to .lng */ r = strrchr(pathbuf, '.'); - if (r == NULL || strcmp(r, ".txt") != 0) r = strchr(pathbuf, '\0'); + if (r == nullptr || strcmp(r, ".txt") != 0) r = strchr(pathbuf, '\0'); strecpy(r, ".lng", lastof(pathbuf)); LanguageFileWriter writer(pathbuf); diff --git a/src/strgen/strgen.h b/src/strgen/strgen.h --- a/src/strgen/strgen.h +++ b/src/strgen/strgen.h @@ -73,7 +73,7 @@ struct StringReader { * Read a single line from the source of strings. * @param buffer The buffer to read the data in to. * @param last The last element in the buffer. - * @return The buffer, or NULL if at the end of the file. + * @return The buffer, or nullptr if at the end of the file. */ virtual char *ReadLine(char *buffer, const char *last) = 0; diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -59,8 +59,8 @@ Case::~Case() * @param line The line this string was found on. */ LangString::LangString(const char *name, const char *english, int index, int line) : - name(stredup(name)), english(stredup(english)), translated(NULL), - hash_next(0), index(index), line(line), translated_case(NULL) + name(stredup(name)), english(stredup(english)), translated(nullptr), + hash_next(0), index(index), line(line), translated_case(nullptr) { } @@ -77,10 +77,10 @@ LangString::~LangString() void LangString::FreeTranslation() { free(this->translated); - this->translated = NULL; + this->translated = nullptr; delete this->translated_case; - this->translated_case = NULL; + this->translated_case = nullptr; } /** @@ -107,7 +107,7 @@ void StringData::FreeTranslation() { for (size_t i = 0; i < this->max_strings; i++) { LangString *ls = this->strings[i]; - if (ls != NULL) ls->FreeTranslation(); + if (ls != nullptr) ls->FreeTranslation(); } } @@ -140,7 +140,7 @@ void StringData::Add(const char *s, Lang /** * Find a LangString based on the string name. * @param s The string name to search on. - * @return The LangString or NULL if it is not known. + * @return The LangString or nullptr if it is not known. */ LangString *StringData::Find(const char *s) { @@ -152,7 +152,7 @@ LangString *StringData::Find(const char if (strcmp(ls->name, s) == 0) return ls; idx = ls->hash_next; } - return NULL; + return nullptr; } /** @@ -181,7 +181,7 @@ uint StringData::Version() const for (size_t i = 0; i < this->max_strings; i++) { const LangString *ls = this->strings[i]; - if (ls != NULL) { + if (ls != nullptr) { const CmdStruct *cs; const char *s; char buf[MAX_COMMAND_PARAM_SIZE]; @@ -194,7 +194,7 @@ uint StringData::Version() const hash = this->VersionHashStr(hash, s + 1); s = ls->english; - while ((cs = ParseCommandString(&s, buf, &argno, &casei)) != NULL) { + while ((cs = ParseCommandString(&s, buf, &argno, &casei)) != nullptr) { if (cs->flags & C_DONTCOUNT) continue; hash ^= (cs - _cmd_structs) * 0x1234567; @@ -213,7 +213,7 @@ uint StringData::Version() const uint StringData::CountInUse(uint tab) const { int i; - for (i = TAB_SIZE; --i >= 0;) if (this->strings[(tab * TAB_SIZE) + i] != NULL) break; + for (i = TAB_SIZE; --i >= 0;) if (this->strings[(tab * TAB_SIZE) + i] != nullptr) break; return i + 1; } @@ -327,7 +327,7 @@ bool ParseRelNum(char **buf, int *value, } else { *value = v; } - if (offset != NULL && *end == ':') { + if (offset != nullptr && *end == ':') { /* Take the Nth within */ s = end + 1; *offset = strtol(s, &end, 0); @@ -337,13 +337,13 @@ bool ParseRelNum(char **buf, int *value, return true; } -/* Parse out the next word, or NULL */ +/* Parse out the next word, or nullptr */ char *ParseWord(char **buf) { char *s = *buf, *r; while (*s == ' ' || *s == '\t') s++; - if (*s == '\0') return NULL; + if (*s == '\0') return nullptr; if (*s == '"') { r = ++s; @@ -399,8 +399,8 @@ void EmitPlural(Buffer *buffer, char *bu const CmdStruct *cmd = _cur_pcs.cmd[argidx]; if (offset == -1) { /* Use default offset */ - if (cmd == NULL || cmd->default_plural_offset < 0) { - strgen_fatal("Command '%s' has no (default) plural position", cmd == NULL ? "" : cmd->cmd); + if (cmd == nullptr || cmd->default_plural_offset < 0) { + strgen_fatal("Command '%s' has no (default) plural position", cmd == nullptr ? "" : cmd->cmd); } offset = cmd->default_plural_offset; } @@ -408,7 +408,7 @@ void EmitPlural(Buffer *buffer, char *bu /* Parse each string */ for (nw = 0; nw < MAX_PLURALS; nw++) { words[nw] = ParseWord(&buf); - if (words[nw] == NULL) break; + if (words[nw] == nullptr) break; } if (nw == 0) { @@ -462,13 +462,13 @@ void EmitGender(Buffer *buffer, char *bu if (!ParseRelNum(&buf, &argidx, &offset)) {} const CmdStruct *cmd = _cur_pcs.cmd[argidx]; - if (cmd == NULL || (cmd->flags & C_GENDER) == 0) { - strgen_fatal("Command '%s' can't have a gender", cmd == NULL ? "" : cmd->cmd); + if (cmd == nullptr || (cmd->flags & C_GENDER) == 0) { + strgen_fatal("Command '%s' can't have a gender", cmd == nullptr ? "" : cmd->cmd); } for (nw = 0; nw < MAX_NUM_GENDERS; nw++) { words[nw] = ParseWord(&buf); - if (words[nw] == NULL) break; + if (words[nw] == nullptr) break; } if (nw != _lang.num_genders) strgen_fatal("Bad # of arguments for gender command"); @@ -484,7 +484,7 @@ static const CmdStruct *FindCmd(const ch for (const CmdStruct *cs = _cmd_structs; cs != endof(_cmd_structs); cs++) { if (strncmp(cs->cmd, s, len) == 0 && cs->cmd[len] == '\0') return cs; } - return NULL; + return nullptr; } static uint ResolveCaseName(const char *str, size_t len) @@ -501,7 +501,7 @@ static uint ResolveCaseName(const char * } -/* returns NULL on eof +/* returns nullptr on eof * else returns command struct */ static const CmdStruct *ParseCommandString(const char **str, char *param, int *argno, int *casei) { @@ -513,7 +513,7 @@ static const CmdStruct *ParseCommandStri /* Scan to the next command, exit if there's no next command. */ for (; *s != '{'; s++) { - if (*s == '\0') return NULL; + if (*s == '\0') return nullptr; } s++; // Skip past the { @@ -532,9 +532,9 @@ static const CmdStruct *ParseCommandStri } while (c != '}' && c != ' ' && c != '=' && c != '.' && c != 0); const CmdStruct *cmd = FindCmd(start, s - start - 1); - if (cmd == NULL) { + if (cmd == nullptr) { strgen_error("Undefined command '%.*s'", (int)(s - start - 1), start); - return NULL; + return nullptr; } if (c == '.') { @@ -552,7 +552,7 @@ static const CmdStruct *ParseCommandStri if (c == '\0') { strgen_error("Missing } from command '%s'", start); - return NULL; + return nullptr; } @@ -565,7 +565,7 @@ static const CmdStruct *ParseCommandStri if (c == '}') break; if (c == '\0') { strgen_error("Missing } from command '%s'", start); - return NULL; + return nullptr; } if (s - start == MAX_COMMAND_PARAM_SIZE) error("param command too long"); *param++ = c; @@ -609,7 +609,7 @@ static void ExtractCommandString(ParsedC /* read until next command from a. */ const CmdStruct *ar = ParseCommandString(&s, param, &argno, &casei); - if (ar == NULL) break; + if (ar == nullptr) break; /* Sanity checking */ if (argno != -1 && ar->consumes == 0) strgen_fatal("Non consumer param can't have a paramindex"); @@ -617,7 +617,7 @@ static void ExtractCommandString(ParsedC if (ar->consumes) { if (argno != -1) argidx = argno; if (argidx < 0 || (uint)argidx >= lengthof(p->cmd)) strgen_fatal("invalid param idx %d", argidx); - if (p->cmd[argidx] != NULL && p->cmd[argidx] != ar) strgen_fatal("duplicate param idx %d", argidx); + if (p->cmd[argidx] != nullptr && p->cmd[argidx] != ar) strgen_fatal("duplicate param idx %d", argidx); p->cmd[argidx++] = ar; } else if (!(ar->flags & C_DONTCOUNT)) { // Ignore some of them @@ -632,7 +632,7 @@ static void ExtractCommandString(ParsedC static const CmdStruct *TranslateCmdForCompare(const CmdStruct *a) { - if (a == NULL) return NULL; + if (a == nullptr) return nullptr; if (strcmp(a->cmd, "STRING1") == 0 || strcmp(a->cmd, "STRING2") == 0 || @@ -677,7 +677,7 @@ static bool CheckCommandsMatch(char *a, if (templ.pairs[i].a == lang.pairs[j].a && strcmp(templ.pairs[i].v, lang.pairs[j].v) == 0) { /* it was found in both. zero it out from lang so we don't find it again */ - lang.pairs[j].a = NULL; + lang.pairs[j].a = nullptr; found = true; break; } @@ -694,8 +694,8 @@ static bool CheckCommandsMatch(char *a, for (uint i = 0; i < lengthof(templ.cmd); i++) { if (TranslateCmdForCompare(templ.cmd[i]) != lang.cmd[i]) { strgen_warning("%s: Param idx #%d '%s' doesn't match with template command '%s'", name, i, - lang.cmd[i] == NULL ? "" : TranslateCmdForCompare(lang.cmd[i])->cmd, - templ.cmd[i] == NULL ? "" : templ.cmd[i]->cmd); + lang.cmd[i] == nullptr ? "" : TranslateCmdForCompare(lang.cmd[i])->cmd, + templ.cmd[i] == nullptr ? "" : templ.cmd[i]->cmd); result = false; } } @@ -714,7 +714,7 @@ void StringReader::HandleString(char *st if (*str == ';' || *str == ' ' || *str == '\0') return; char *s = strchr(str, ':'); - if (s == NULL) { + if (s == nullptr) { strgen_error("Line has no ':' delimiter"); return; } @@ -747,23 +747,23 @@ void StringReader::HandleString(char *st /* Check if the string has a case.. * The syntax for cases is IDENTNAME.case */ char *casep = strchr(str, '.'); - if (casep != NULL) *casep++ = '\0'; + if (casep != nullptr) *casep++ = '\0'; /* Check if this string already exists.. */ LangString *ent = this->data.Find(str); if (this->master) { - if (casep != NULL) { + if (casep != nullptr) { strgen_error("Cases in the base translation are not supported."); return; } - if (ent != NULL) { + if (ent != nullptr) { strgen_error("String name '%s' is used multiple times", str); return; } - if (this->data.strings[this->data.next_string_id] != NULL) { + if (this->data.strings[this->data.next_string_id] != nullptr) { strgen_error("String ID 0x%X for '%s' already in use by '%s'", this->data.next_string_id, str, this->data.strings[this->data.next_string_id]->name); return; } @@ -771,12 +771,12 @@ void StringReader::HandleString(char *st /* Allocate a new LangString */ this->data.Add(str, new LangString(str, s, this->data.next_string_id++, _cur_line)); } else { - if (ent == NULL) { + if (ent == nullptr) { strgen_warning("String name '%s' does not exist in master file", str); return; } - if (ent->translated && casep == NULL) { + if (ent->translated && casep == nullptr) { strgen_error("String name '%s' is used multiple times", str); return; } @@ -784,7 +784,7 @@ void StringReader::HandleString(char *st /* make sure that the commands match */ if (!CheckCommandsMatch(s, ent->english, str)) return; - if (casep != NULL) { + if (casep != nullptr) { ent->translated_case = new Case(ResolveCaseName(casep, strlen(casep)), s, ent->translated_case); } else { ent->translated = stredup(s); @@ -830,7 +830,7 @@ void StringReader::ParseFile() strecpy(_lang.digit_decimal_separator, ".", lastof(_lang.digit_decimal_separator)); _cur_line = 1; - while (this->ReadLine(buf, lastof(buf)) != NULL) { + while (this->ReadLine(buf, lastof(buf)) != nullptr) { rstrip(buf); this->HandleString(buf); _cur_line++; @@ -845,7 +845,7 @@ void HeaderWriter::WriteHeader(const Str { int last = 0; for (size_t i = 0; i < data.max_strings; i++) { - if (data.strings[i] != NULL) { + if (data.strings[i] != nullptr) { this->WriteStringID(data.strings[i]->name, (int)i); last = (int)i; } @@ -862,18 +862,18 @@ static int TranslateArgumentIdx(int argi strgen_fatal("invalid argidx %d", argidx); } const CmdStruct *cs = _cur_pcs.cmd[argidx]; - if (cs != NULL && cs->consumes <= offset) { + if (cs != nullptr && cs->consumes <= offset) { strgen_fatal("invalid argidx offset %d:%d", argidx, offset); } - if (_cur_pcs.cmd[argidx] == NULL) { + if (_cur_pcs.cmd[argidx] == nullptr) { strgen_fatal("no command for this argidx %d", argidx); } for (int i = sum = 0; i < argidx; i++) { const CmdStruct *cs = _cur_pcs.cmd[i]; - sum += (cs != NULL) ? cs->consumes : 1; + sum += (cs != nullptr) ? cs->consumes : 1; } return sum + offset; @@ -901,7 +901,7 @@ static void PutCommandString(Buffer *buf int argno; int casei; const CmdStruct *cs = ParseCommandString(&str, param, &argno, &casei); - if (cs == NULL) break; + if (cs == nullptr) break; if (casei != -1) { buffer->AppendUtf8(SCC_SET_CASE); // {SET_CASE} @@ -918,7 +918,7 @@ static void PutCommandString(Buffer *buf /* Output the one from the master string... it's always accurate. */ cs = _cur_pcs.cmd[_cur_argidx++]; - if (cs == NULL) { + if (cs == nullptr) { strgen_fatal("%s: No argument exists at position %d", _cur_ident, _cur_argidx - 1); } } @@ -961,7 +961,7 @@ void LanguageWriter::WriteLang(const Str for (uint j = 0; j != in_use[tab]; j++) { const LangString *ls = data.strings[(tab * TAB_SIZE) + j]; - if (ls != NULL && ls->translated == NULL) _lang.missing++; + if (ls != nullptr && ls->translated == nullptr) _lang.missing++; } } @@ -980,7 +980,7 @@ void LanguageWriter::WriteLang(const Str const char *cmdp; /* For undefined strings, just set that it's an empty string */ - if (ls == NULL) { + if (ls == nullptr) { this->WriteLength(0); continue; } @@ -989,7 +989,7 @@ void LanguageWriter::WriteLang(const Str _cur_line = ls->line; /* Produce a message if a string doesn't have a translation. */ - if (_show_todo > 0 && ls->translated == NULL) { + if (_show_todo > 0 && ls->translated == nullptr) { if ((_show_todo & 2) != 0) { strgen_warning("'%s' is untranslated", ls->name); } @@ -1002,17 +1002,17 @@ void LanguageWriter::WriteLang(const Str /* Extract the strings and stuff from the english command string */ ExtractCommandString(&_cur_pcs, ls->english, false); - if (ls->translated_case != NULL || ls->translated != NULL) { + if (ls->translated_case != nullptr || ls->translated != nullptr) { casep = ls->translated_case; cmdp = ls->translated; } else { - casep = NULL; + casep = nullptr; cmdp = ls->english; } _translated = cmdp != ls->english; - if (casep != NULL) { + if (casep != nullptr) { const Case *c; uint num; @@ -1026,7 +1026,7 @@ void LanguageWriter::WriteLang(const Str buffer.AppendByte(num); /* Write each case */ - for (c = casep; c != NULL; c = c->next) { + for (c = casep; c != nullptr; c = c->next) { buffer.AppendByte(c->caseidx); /* Make some space for the 16-bit length */ uint pos = (uint)buffer.size(); @@ -1042,7 +1042,7 @@ void LanguageWriter::WriteLang(const Str } } - if (cmdp != NULL) PutCommandString(&buffer, cmdp); + if (cmdp != nullptr) PutCommandString(&buffer, cmdp); this->WriteLength((uint)buffer.size()); this->Write(buffer.data(), buffer.size()); diff --git a/src/string.cpp b/src/string.cpp --- a/src/string.cpp +++ b/src/string.cpp @@ -71,7 +71,7 @@ int CDECL vseprintf(char *str, const cha * * 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)); @@ -99,7 +99,7 @@ char *strecat(char *dst, const char *src * * 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)); @@ -131,13 +131,13 @@ char *strecpy(char *dst, const char *src /** * Create a duplicate of the given string. * @param s The string to duplicate. - * @param last The last character that is safe to duplicate. If NULL, the whole string is duplicated. + * @param last The last character that is safe to duplicate. If nullptr, the whole string is duplicated. * @note The maximum length of the resulting string might therefore be last - s + 1. * @return The duplicate of the string. */ char *stredup(const char *s, const char *last) { - size_t len = last == NULL ? strlen(s) : ttd_strnlen(s, last - s + 1); + size_t len = last == nullptr ? strlen(s) : ttd_strnlen(s, last - s + 1); char *tmp = CallocT(len + 1); memcpy(tmp, s, len); return tmp; @@ -447,7 +447,7 @@ char *md5sumToString(char *buf, const ch */ size_t Utf8Decode(WChar *c, const char *s) { - assert(c != NULL); + assert(c != nullptr); if (!HasBit(s[0], 7)) { /* Single byte character: 0xxxxxxx */ @@ -551,7 +551,7 @@ char *strcasestr(const char *haystack, c hay_len--; } - return NULL; + return nullptr; } #endif /* DEFINE_STRCASESTR */ @@ -585,7 +585,7 @@ int strnatcmp(const char *s1, const char } #ifdef WITH_ICU_I18N - if (_current_collator != NULL) { + if (_current_collator != nullptr) { UErrorCode status = U_ZERO_ERROR; int result = _current_collator->compareUTF8(s1, s2, status); if (U_SUCCESS(status)) return result; @@ -628,11 +628,11 @@ class IcuStringIterator : public StringI std::vector utf16_to_utf8; ///< Mapping from UTF-16 code point position to index in the UTF-8 source string. public: - IcuStringIterator() : char_itr(NULL), word_itr(NULL) + IcuStringIterator() : char_itr(nullptr), word_itr(nullptr) { UErrorCode status = U_ZERO_ERROR; - this->char_itr = icu::BreakIterator::createCharacterInstance(icu::Locale(_current_language != NULL ? _current_language->isocode : "en"), status); - this->word_itr = icu::BreakIterator::createWordInstance(icu::Locale(_current_language != NULL ? _current_language->isocode : "en"), status); + this->char_itr = icu::BreakIterator::createCharacterInstance(icu::Locale(_current_language != nullptr ? _current_language->isocode : "en"), status); + this->word_itr = icu::BreakIterator::createWordInstance(icu::Locale(_current_language != nullptr ? _current_language->isocode : "en"), status); this->utf16_str.push_back('\0'); this->utf16_to_utf8.push_back(0); @@ -779,7 +779,7 @@ class DefaultStringIterator : public Str size_t cur_pos; ///< Current iteration position. public: - DefaultStringIterator() : string(NULL), len(0), cur_pos(0) + DefaultStringIterator() : string(nullptr), len(0), cur_pos(0) { } @@ -792,7 +792,7 @@ public: virtual size_t SetCurPosition(size_t pos) { - assert(this->string != NULL && pos <= this->len); + assert(this->string != nullptr && pos <= this->len); /* Sanitize in case we get a position inside an UTF-8 sequence. */ while (pos > 0 && IsUtf8Part(this->string[pos])) pos--; return this->cur_pos = pos; @@ -800,7 +800,7 @@ public: virtual size_t Next(IterType what) { - assert(this->string != NULL); + assert(this->string != nullptr); /* Already at the end? */ if (this->cur_pos >= this->len) return END; @@ -838,7 +838,7 @@ public: virtual size_t Prev(IterType what) { - assert(this->string != NULL); + assert(this->string != nullptr); /* Already at the beginning? */ if (this->cur_pos == 0) return END; @@ -878,7 +878,7 @@ public: /* static */ StringIterator *StringIterator::Create() { StringIterator *i = OSXStringIterator::Create(); - if (i != NULL) return i; + if (i != nullptr) return i; return new DefaultStringIterator(); } diff --git a/src/string_func.h b/src/string_func.h --- a/src/string_func.h +++ b/src/string_func.h @@ -33,7 +33,7 @@ char *strecat(char *dst, const char *src, const char *last); char *strecpy(char *dst, const char *src, const char *last); -char *stredup(const char *src, const char *last = NULL); +char *stredup(const char *src, const char *last = nullptr); int CDECL seprintf(char *str, const char *last, const char *format, ...) WARN_FORMAT(3, 4); int CDECL vseprintf(char *str, const char *last, const char *format, va_list ap); @@ -54,11 +54,11 @@ bool StrValid(const char *str, const cha * * @param s The pointer to the first element of the buffer * @return true if the buffer starts with the terminating null-character or - * if the given pointer points to NULL else return false + * if the given pointer points to nullptr else return false */ static inline bool StrEmpty(const char *s) { - return s == NULL || s[0] == '\0'; + return s == nullptr || s[0] == '\0'; } /** diff --git a/src/stringfilter.cpp b/src/stringfilter.cpp --- a/src/stringfilter.cpp +++ b/src/stringfilter.cpp @@ -33,14 +33,14 @@ void StringFilter::SetFilterTerm(const c this->word_matches = 0; free(this->filter_buffer); - assert(str != NULL); + assert(str != nullptr); char *dest = MallocT(strlen(str) + 1); this->filter_buffer = dest; WChar state = STATE_WHITESPACE; const char *pos = str; - WordState *word = NULL; + WordState *word = nullptr; size_t len; for (;; pos += len) { WChar c; @@ -48,9 +48,9 @@ void StringFilter::SetFilterTerm(const c if (c == 0 || (state == STATE_WORD && IsWhitespace(c))) { /* Finish word */ - if (word != NULL) { + if (word != nullptr) { *(dest++) = '\0'; - word = NULL; + word = nullptr; } state = STATE_WHITESPACE; if (c != 0) continue; else break; @@ -75,7 +75,7 @@ void StringFilter::SetFilterTerm(const c } /* Add to word */ - if (word == NULL) { + if (word == nullptr) { /*C++17: word = &*/ this->word_index.push_back({dest, false}); word = &this->word_index.back(); } @@ -106,12 +106,12 @@ void StringFilter::ResetState() */ void StringFilter::AddLine(const char *str) { - if (str == NULL) return; + if (str == nullptr) return; - bool match_case = this->case_sensitive != NULL && *this->case_sensitive; + bool match_case = this->case_sensitive != nullptr && *this->case_sensitive; for (WordState &ws : this->word_index) { if (!ws.match) { - if ((match_case ? strstr(str, ws.start) : strcasestr(str, ws.start)) != NULL) { + if ((match_case ? strstr(str, ws.start) : strcasestr(str, ws.start)) != nullptr) { ws.match = true; this->word_matches++; } diff --git a/src/stringfilter_type.h b/src/stringfilter_type.h --- a/src/stringfilter_type.h +++ b/src/stringfilter_type.h @@ -47,9 +47,9 @@ private: public: /** * Constructor for filter. - * @param case_sensitive Pointer to a (usually static) variable controlling the case-sensitivity. NULL means always case-insensitive. + * @param case_sensitive Pointer to a (usually static) variable controlling the case-sensitivity. nullptr means always case-insensitive. */ - StringFilter(const bool *case_sensitive = NULL) : filter_buffer(NULL), word_matches(0), case_sensitive(case_sensitive) {} + StringFilter(const bool *case_sensitive = nullptr) : filter_buffer(nullptr), word_matches(0), case_sensitive(case_sensitive) {} ~StringFilter() { free(this->filter_buffer); } void SetFilterTerm(const char *str); diff --git a/src/strings.cpp b/src/strings.cpp --- a/src/strings.cpp +++ b/src/strings.cpp @@ -45,12 +45,12 @@ char _config_language_file[MAX_PATH]; ///< The file (name) stored in the configuration. LanguageList _languages; ///< The actual list of language meta data. -const LanguageMetadata *_current_language = NULL; ///< The currently loaded language. +const LanguageMetadata *_current_language = nullptr; ///< The currently loaded language. TextDirection _current_text_dir; ///< Text direction of the currently selected language. #ifdef WITH_ICU_I18N -icu::Collator *_current_collator = NULL; ///< Collator for the language currently in use. +icu::Collator *_current_collator = nullptr; ///< Collator for the language currently in use. #endif /* WITH_ICU_I18N */ static uint64 _global_string_params_data[20]; ///< Global array of string parameters. To access, use #SetDParam. @@ -60,7 +60,7 @@ StringParameters _global_string_params(_ /** Reset the type array. */ void StringParameters::ClearTypeInformation() { - assert(this->type != NULL); + assert(this->type != nullptr); MemSetT(this->type, 0, this->num_param); } @@ -75,7 +75,7 @@ int64 StringParameters::GetInt64(WChar t DEBUG(misc, 0, "Trying to read invalid string parameter"); return 0; } - if (this->type != NULL) { + if (this->type != nullptr) { if (this->type[this->offset] != 0 && this->type[this->offset] != type) { DEBUG(misc, 0, "Trying to read string parameter with wrong type"); return 0; @@ -172,7 +172,7 @@ void CopyOutDParam(uint64 *dst, const ch strings[i] = stredup((const char *)(size_t)_global_string_params.GetParam(i)); dst[i] = (size_t)strings[i]; } else { - strings[i] = NULL; + strings[i] = nullptr; } } } @@ -320,7 +320,7 @@ static char *FormatNumber(char *buff, in for (int i = 0; i < max_digits; i++) { if (i == max_digits - fractional_digits) { const char *decimal_separator = _settings_game.locale.digit_decimal_separator; - if (decimal_separator == NULL) decimal_separator = _langpack->digit_decimal_separator; + if (decimal_separator == nullptr) decimal_separator = _langpack->digit_decimal_separator; buff += seprintf(buff, last, "%s", decimal_separator); } @@ -345,7 +345,7 @@ static char *FormatNumber(char *buff, in static char *FormatCommaNumber(char *buff, int64 number, const char *last, int fractional_digits = 0) { const char *separator = _settings_game.locale.digit_group_separator; - if (separator == NULL) separator = _langpack->digit_group_separator; + if (separator == nullptr) separator = _langpack->digit_group_separator; return FormatNumber(buff, number, last, separator, 1, fractional_digits); } @@ -384,7 +384,7 @@ static char *FormatBytes(char *buff, int } const char *decimal_separator = _settings_game.locale.digit_decimal_separator; - if (decimal_separator == NULL) decimal_separator = _langpack->digit_decimal_separator; + if (decimal_separator == nullptr) decimal_separator = _langpack->digit_decimal_separator; if (number < 1024) { id = 0; @@ -478,8 +478,8 @@ static char *FormatGenericCurrency(char } const char *separator = _settings_game.locale.digit_group_separator_currency; - if (separator == NULL && !StrEmpty(_currency->separator)) separator = _currency->separator; - if (separator == NULL) separator = _langpack->digit_group_separator_currency; + if (separator == nullptr && !StrEmpty(_currency->separator)) separator = _currency->separator; + if (separator == nullptr) separator = _langpack->digit_group_separator_currency; buff = FormatNumber(buff, number, last, separator); buff = strecpy(buff, multiplier, last); @@ -937,7 +937,7 @@ static char *FormatString(char *buff, co char buf[256]; bool old_sgd = _scan_for_gender_data; _scan_for_gender_data = true; - StringParameters tmp_params(args->GetPointerToOffset(offset), args->num_param - offset, NULL); + StringParameters tmp_params(args->GetPointerToOffset(offset), args->num_param - offset, nullptr); p = FormatString(buf, input, &tmp_params, lastof(buf)); _scan_for_gender_data = old_sgd; *p = '\0'; @@ -1016,8 +1016,8 @@ static char *FormatString(char *buff, co if (game_script && GetStringTab(str) != TEXT_TAB_GAMESCRIPT_START) break; /* WARNING. It's prohibited for the included string to consume any arguments. * For included strings that consume argument, you should use STRING1, STRING2 etc. - * To debug stuff you can set argv to NULL and it will tell you */ - StringParameters tmp_params(args->GetDataPointer(), args->GetDataLeft(), NULL); + * To debug stuff you can set argv to nullptr and it will tell you */ + StringParameters tmp_params(args->GetDataPointer(), args->GetDataLeft(), nullptr); buff = GetStringWithArgs(buff, str, &tmp_params, last, next_substr_case_index, game_script); next_substr_case_index = 0; break; @@ -1270,9 +1270,9 @@ static char *FormatString(char *buff, co case SCC_COMPANY_NAME: { // {COMPANY} const Company *c = Company::GetIfValid(args->GetInt32()); - if (c == NULL) break; + if (c == nullptr) break; - if (c->name != NULL) { + if (c->name != nullptr) { int64 args_array[] = {(int64)(size_t)c->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1307,7 +1307,7 @@ static char *FormatString(char *buff, co } const Depot *d = Depot::Get(args->GetInt32()); - if (d->name != NULL) { + if (d->name != nullptr) { int64 args_array[] = {(int64)(size_t)d->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1321,14 +1321,14 @@ static char *FormatString(char *buff, co case SCC_ENGINE_NAME: { // {ENGINE} const Engine *e = Engine::GetIfValid(args->GetInt32(SCC_ENGINE_NAME)); - if (e == NULL) break; + if (e == nullptr) break; - if (e->name != NULL && e->IsEnabled()) { + if (e->name != nullptr && e->IsEnabled()) { int64 args_array[] = {(int64)(size_t)e->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { - StringParameters tmp_params(NULL, 0, NULL); + StringParameters tmp_params(nullptr, 0, nullptr); buff = GetStringWithArgs(buff, e->info.string_id, &tmp_params, last); } break; @@ -1336,9 +1336,9 @@ static char *FormatString(char *buff, co case SCC_GROUP_NAME: { // {GROUP} const Group *g = Group::GetIfValid(args->GetInt32()); - if (g == NULL) break; + if (g == nullptr) break; - if (g->name != NULL) { + if (g->name != nullptr) { int64 args_array[] = {(int64)(size_t)g->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1353,12 +1353,12 @@ static char *FormatString(char *buff, co case SCC_INDUSTRY_NAME: { // {INDUSTRY} const Industry *i = Industry::GetIfValid(args->GetInt32(SCC_INDUSTRY_NAME)); - if (i == NULL) break; + if (i == nullptr) break; if (_scan_for_gender_data) { /* Gender is defined by the industry type. * STR_FORMAT_INDUSTRY_NAME may have the town first, so it would result in the gender of the town name */ - StringParameters tmp_params(NULL, 0, NULL); + StringParameters tmp_params(nullptr, 0, nullptr); buff = FormatString(buff, GetStringPtr(GetIndustrySpec(i->type)->name), &tmp_params, last, next_substr_case_index); } else { /* First print the town name and the industry type name. */ @@ -1373,9 +1373,9 @@ static char *FormatString(char *buff, co case SCC_PRESIDENT_NAME: { // {PRESIDENT_NAME} const Company *c = Company::GetIfValid(args->GetInt32(SCC_PRESIDENT_NAME)); - if (c == NULL) break; + if (c == nullptr) break; - if (c->president_name != NULL) { + if (c->president_name != nullptr) { int64 args_array[] = {(int64)(size_t)c->president_name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1391,16 +1391,16 @@ static char *FormatString(char *buff, co StationID sid = args->GetInt32(SCC_STATION_NAME); const Station *st = Station::GetIfValid(sid); - if (st == NULL) { + if (st == nullptr) { /* The station doesn't exist anymore. The only place where we might * be "drawing" an invalid station is in the case of cargo that is * in transit. */ - StringParameters tmp_params(NULL, 0, NULL); + StringParameters tmp_params(nullptr, 0, nullptr); buff = GetStringWithArgs(buff, STR_UNKNOWN_STATION, &tmp_params, last); break; } - if (st->name != NULL) { + if (st->name != nullptr) { int64 args_array[] = {(int64)(size_t)st->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1428,9 +1428,9 @@ static char *FormatString(char *buff, co case SCC_TOWN_NAME: { // {TOWN} const Town *t = Town::GetIfValid(args->GetInt32(SCC_TOWN_NAME)); - if (t == NULL) break; + if (t == nullptr) break; - if (t->name != NULL) { + if (t->name != nullptr) { int64 args_array[] = {(int64)(size_t)t->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1442,9 +1442,9 @@ static char *FormatString(char *buff, co case SCC_WAYPOINT_NAME: { // {WAYPOINT} Waypoint *wp = Waypoint::GetIfValid(args->GetInt32(SCC_WAYPOINT_NAME)); - if (wp == NULL) break; + if (wp == nullptr) break; - if (wp->name != NULL) { + if (wp->name != nullptr) { int64 args_array[] = {(int64)(size_t)wp->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1460,9 +1460,9 @@ static char *FormatString(char *buff, co case SCC_VEHICLE_NAME: { // {VEHICLE} const Vehicle *v = Vehicle::GetIfValid(args->GetInt32(SCC_VEHICLE_NAME)); - if (v == NULL) break; + if (v == nullptr) break; - if (v->name != NULL) { + if (v->name != nullptr) { int64 args_array[] = {(int64)(size_t)v->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); @@ -1486,14 +1486,14 @@ static char *FormatString(char *buff, co case SCC_SIGN_NAME: { // {SIGN} const Sign *si = Sign::GetIfValid(args->GetInt32()); - if (si == NULL) break; + if (si == nullptr) break; - if (si->name != NULL) { + if (si->name != nullptr) { int64 args_array[] = {(int64)(size_t)si->name}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); } else { - StringParameters tmp_params(NULL, 0, NULL); + StringParameters tmp_params(nullptr, 0, nullptr); buff = GetStringWithArgs(buff, STR_DEFAULT_SIGN_NAME, &tmp_params, last); } break; @@ -1717,7 +1717,7 @@ bool ReadLanguagePack(const LanguageMeta /* Current language pack */ size_t len; LanguagePack *lang_pack = (LanguagePack *)ReadFileToMem(lang->file, &len, 1U << 20); - if (lang_pack == NULL) return false; + if (lang_pack == nullptr) return false; /* End of read data (+ terminating zero added in ReadFileToMem()) */ const char *end = (char *)lang_pack + len + 1; @@ -1797,20 +1797,20 @@ bool ReadLanguagePack(const LanguageMeta #ifdef WITH_ICU_I18N /* Delete previous collator. */ - if (_current_collator != NULL) { + if (_current_collator != nullptr) { delete _current_collator; - _current_collator = NULL; + _current_collator = nullptr; } /* Create a collator instance for our current locale. */ UErrorCode status = U_ZERO_ERROR; _current_collator = icu::Collator::createInstance(icu::Locale(_current_language->isocode), status); /* Sort number substrings by their numerical value. */ - if (_current_collator != NULL) _current_collator->setAttribute(UCOL_NUMERIC_COLLATION, UCOL_ON, status); + if (_current_collator != nullptr) _current_collator->setAttribute(UCOL_NUMERIC_COLLATION, UCOL_ON, status); /* Avoid using the collator if it is not correctly set. */ if (U_FAILURE(status)) { delete _current_collator; - _current_collator = NULL; + _current_collator = nullptr; } #endif /* WITH_ICU_I18N */ @@ -1840,22 +1840,22 @@ bool ReadLanguagePack(const LanguageMeta * First check some default values, after this one we passed ourselves * and if none exist return the value for $LANG * @param param environment variable to check conditionally if default ones are not - * set. Pass NULL if you don't want additional checks. - * @return return string containing current charset, or NULL if not-determinable + * set. Pass nullptr if you don't want additional checks. + * @return return string containing current charset, or nullptr if not-determinable */ const char *GetCurrentLocale(const char *param) { const char *env; env = getenv("LANGUAGE"); - if (env != NULL) return env; + if (env != nullptr) return env; env = getenv("LC_ALL"); - if (env != NULL) return env; + if (env != nullptr) return env; - if (param != NULL) { + if (param != nullptr) { env = getenv(param); - if (env != NULL) return env; + if (env != nullptr) return env; } return getenv("LANG"); @@ -1877,7 +1877,7 @@ int CDECL StringIDSorter(const StringID /** * Get the language with the given NewGRF language ID. * @param newgrflangid NewGRF languages ID to check. - * @return The language's metadata, or NULL if it is not known. + * @return The language's metadata, or nullptr if it is not known. */ const LanguageMetadata *GetLanguage(byte newgrflangid) { @@ -1885,7 +1885,7 @@ const LanguageMetadata *GetLanguage(byte if (newgrflangid == lang.newgrflangid) return ⟨ } - return NULL; + return nullptr; } /** @@ -1897,7 +1897,7 @@ const LanguageMetadata *GetLanguage(byte static bool GetLanguageFileHeader(const char *file, LanguagePackHeader *hdr) { FILE *f = fopen(file, "rb"); - if (f == NULL) return false; + if (f == nullptr) return false; size_t read = fread(hdr, sizeof(*hdr), 1, f); fclose(f); @@ -1919,14 +1919,14 @@ static bool GetLanguageFileHeader(const static void GetLanguageList(const char *path) { DIR *dir = ttd_opendir(path); - if (dir != NULL) { + if (dir != nullptr) { struct dirent *dirent; - while ((dirent = readdir(dir)) != NULL) { + while ((dirent = readdir(dir)) != nullptr) { const char *d_name = FS2OTTD(dirent->d_name); const char *extension = strrchr(d_name, '.'); /* Not a language file */ - if (extension == NULL || strcmp(extension, ".lng") != 0) continue; + if (extension == nullptr || strcmp(extension, ".lng") != 0) continue; LanguageMetadata lmd; seprintf(lmd.file, lastof(lmd.file), "%s%s", path, d_name); @@ -1934,7 +1934,7 @@ static void GetLanguageList(const char * /* Check whether the file is of the correct version */ if (!GetLanguageFileHeader(lmd.file, &lmd)) { DEBUG(misc, 3, "%s is not a valid language file", lmd.file); - } else if (GetLanguage(lmd.newgrflangid) != NULL) { + } else if (GetLanguage(lmd.newgrflangid) != nullptr) { DEBUG(misc, 3, "%s's language ID is already known", lmd.file); } else { _languages.push_back(lmd); @@ -1961,10 +1961,10 @@ void InitializeLanguagePacks() /* Acquire the locale of the current system */ const char *lang = GetCurrentLocale("LC_MESSAGES"); - if (lang == NULL) lang = "en_GB"; + if (lang == nullptr) lang = "en_GB"; - const LanguageMetadata *chosen_language = NULL; ///< Matching the language in the configuration file or the current locale - const LanguageMetadata *language_fallback = NULL; ///< Using pt_PT for pt_BR locale when pt_BR is not available + const LanguageMetadata *chosen_language = nullptr; ///< Matching the language in the configuration file or the current locale + const LanguageMetadata *language_fallback = nullptr; ///< Using pt_PT for pt_BR locale when pt_BR is not available const LanguageMetadata *en_GB_fallback = _languages.data(); ///< Fallback when no locale-matching language has been found /* Find a proper language. */ @@ -1985,8 +1985,8 @@ void InitializeLanguagePacks() /* We haven't found the language in the config nor the one in the locale. * Now we set it to one of the fallback languages */ - if (chosen_language == NULL) { - chosen_language = (language_fallback != NULL) ? language_fallback : en_GB_fallback; + if (chosen_language == nullptr) { + chosen_language = (language_fallback != nullptr) ? language_fallback : en_GB_fallback; } if (!ReadLanguagePack(chosen_language)) usererror("Can't read language pack '%s'", chosen_language->file); @@ -2005,7 +2005,7 @@ const char *GetCurrentLanguageIsoCode() * Check whether there are glyphs missing in the current language. * @param[out] str Pointer to an address for storing the text pointer. * @return If glyphs are missing, return \c true, else return \c false. - * @post If \c true is returned and str is not NULL, *str points to a string that is found to contain at least one missing glyph. + * @post If \c true is returned and str is not nullptr, *str points to a string that is found to contain at least one missing glyph. */ bool MissingGlyphSearcher::FindMissingGlyphs(const char **str) { @@ -2017,9 +2017,9 @@ bool MissingGlyphSearcher::FindMissingGl } this->Reset(); - for (const char *text = this->NextString(); text != NULL; text = this->NextString()) { + for (const char *text = this->NextString(); text != nullptr; text = this->NextString()) { FontSize size = this->DefaultSize(); - if (str != NULL) *str = text; + if (str != nullptr) *str = text; for (WChar c = Utf8Consume(&text); c != '\0'; c = Utf8Consume(&text)) { if (c >= SCC_FIRST_FONT && c <= SCC_LAST_FONT) { size = (FontSize)(c - SCC_FIRST_FONT); @@ -2050,7 +2050,7 @@ class LanguagePackGlyphSearcher : public const char *NextString() override { - if (this->i >= TEXT_TAB_END) return NULL; + if (this->i >= TEXT_TAB_END) return nullptr; const char *ret = _langpack_offs[_langtab_start[this->i] + this->j]; @@ -2089,13 +2089,13 @@ class LanguagePackGlyphSearcher : public * been added. * @param base_font Whether to look at the base font as well. * @param searcher The methods to use to search for strings to check. - * If NULL the loaded language pack searcher is used. + * If nullptr the loaded language pack searcher is used. */ void CheckForMissingGlyphs(bool base_font, MissingGlyphSearcher *searcher) { static LanguagePackGlyphSearcher pack_searcher; - if (searcher == NULL) searcher = &pack_searcher; - bool bad_font = !base_font || searcher->FindMissingGlyphs(NULL); + if (searcher == nullptr) searcher = &pack_searcher; + bool bad_font = !base_font || searcher->FindMissingGlyphs(nullptr); #ifdef WITH_FREETYPE if (bad_font) { /* We found an unprintable character... lets try whether we can find diff --git a/src/strings_func.h b/src/strings_func.h --- a/src/strings_func.h +++ b/src/strings_func.h @@ -60,9 +60,9 @@ static inline StringID MakeStringID(Stri } class StringParameters { - StringParameters *parent; ///< If not NULL, this instance references data from this parent instance. + StringParameters *parent; ///< If not nullptr, this instance references data from this parent instance. uint64 *data; ///< Array with the actual data. - WChar *type; ///< Array with type information about the data. Can be NULL when no type information is needed. See #StringControlCode. + WChar *type; ///< Array with type information about the data. Can be nullptr when no type information is needed. See #StringControlCode. public: uint offset; ///< Current offset in the data/type arrays. @@ -70,7 +70,7 @@ public: /** Create a new StringParameters instance. */ StringParameters(uint64 *data, uint num_param, WChar *type) : - parent(NULL), + parent(nullptr), data(data), type(type), offset(0), @@ -80,9 +80,9 @@ public: /** Create a new StringParameters instance. */ template StringParameters(int64 (&data)[Tnum_param]) : - parent(NULL), + parent(nullptr), data((uint64 *)data), - type(NULL), + type(nullptr), offset(0), num_param(Tnum_param) { @@ -100,8 +100,8 @@ public: num_param(size) { assert(size <= parent.GetDataLeft()); - if (parent.type == NULL) { - this->type = NULL; + if (parent.type == nullptr) { + this->type = nullptr; } else { this->type = parent.type + parent.offset; } @@ -109,7 +109,7 @@ public: ~StringParameters() { - if (this->parent != NULL) { + if (this->parent != nullptr) { this->parent->offset += this->num_param; } } @@ -148,7 +148,7 @@ public: /** Does this instance store information about the type of the parameters. */ bool HasTypeInformation() const { - return this->type != NULL; + return this->type != nullptr; } /** Get the type of a specific element. */ @@ -250,7 +250,7 @@ public: /** * Get the next string to search through. - * @return The next string or NULL if there is none. + * @return The next string or nullptr if there is none. */ virtual const char *NextString() = 0; @@ -281,6 +281,6 @@ public: bool FindMissingGlyphs(const char **str); }; -void CheckForMissingGlyphs(bool base_font = true, MissingGlyphSearcher *search = NULL); +void CheckForMissingGlyphs(bool base_font = true, MissingGlyphSearcher *search = nullptr); #endif /* STRINGS_FUNC_H */ diff --git a/src/subsidy.cpp b/src/subsidy.cpp --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -376,7 +376,7 @@ bool FindSubsidyIndustryCargoRoute() /* Select a random industry. */ const Industry *src_ind = Industry::GetRandom(); - if (src_ind == NULL) return false; + if (src_ind == nullptr) return false; uint trans, total; @@ -441,7 +441,7 @@ bool FindSubsidyCargoDestination(CargoID case ST_INDUSTRY: { /* Select a random industry. */ const Industry *dst_ind = Industry::GetRandom(); - if (dst_ind == NULL) return false; + if (dst_ind == nullptr) return false; /* The industry must accept the cargo */ bool valid = std::find(dst_ind->accepts_cargo, endof(dst_ind->accepts_cargo), cid) != endof(dst_ind->accepts_cargo); diff --git a/src/subsidy_base.h b/src/subsidy_base.h --- a/src/subsidy_base.h +++ b/src/subsidy_base.h @@ -36,7 +36,7 @@ struct Subsidy : SubsidyPool::PoolItem<& inline Subsidy() { } /** - * (Empty) destructor has to be defined else operator delete might be called with NULL parameter + * (Empty) destructor has to be defined else operator delete might be called with nullptr parameter */ inline ~Subsidy() { } diff --git a/src/table/airport_defaults.h b/src/table/airport_defaults.h --- a/src/table/airport_defaults.h +++ b/src/table/airport_defaults.h @@ -386,7 +386,7 @@ static const Direction _default_airports /** AirportSpec definition for airports without any depot. */ #define AS_ND(ap_name, size_x, size_y, min_year, max_year, catchment, noise, maint_cost, ttdpatch_type, class_id, name, preview) \ - AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _default_airports_rotation, lengthof(_tile_table_##ap_name), NULL, 0, \ + AS_GENERIC(&_airportfta_##ap_name, _tile_table_##ap_name, _default_airports_rotation, lengthof(_tile_table_##ap_name), nullptr, 0, \ size_x, size_y, noise, catchment, min_year, max_year, maint_cost, ttdpatch_type, class_id, name, preview, true) /** AirportSpec definition for airports with at least one depot. */ @@ -405,12 +405,12 @@ extern const AirportSpec _origin_airport AS(helidepot, 2, 2, 1976, MAX_YEAR, 4, 2, 7, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELIDEPOT, SPR_AIRPORT_PREVIEW_HELIDEPOT), AS(intercontinental, 9, 11, 2002, MAX_YEAR, 10, 25, 72, ATP_TTDP_LARGE, APC_HUB, STR_AIRPORT_INTERCONTINENTAL, SPR_AIRPORT_PREVIEW_INTERCONTINENTAL), AS(helistation, 4, 2, 1980, MAX_YEAR, 4, 3, 14, ATP_TTDP_SMALL, APC_HELIPORT, STR_AIRPORT_HELISTATION, SPR_AIRPORT_PREVIEW_HELISTATION), - AS_GENERIC(&_airportfta_oilrig, NULL, _default_airports_rotation, 0, NULL, 0, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false), + AS_GENERIC(&_airportfta_oilrig, nullptr, _default_airports_rotation, 0, nullptr, 0, 1, 1, 0, 4, 0, 0, 0, ATP_TTDP_OILRIG, APC_HELIPORT, STR_NULL, 0, false), }; assert_compile(NEW_AIRPORT_OFFSET == lengthof(_origin_airport_specs)); -const AirportSpec AirportSpec::dummy = AS_GENERIC(&_airportfta_dummy, NULL, _default_airports_rotation, 0, NULL, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR, 0, ATP_TTDP_LARGE, APC_BEGIN, STR_NULL, 0, false); +const AirportSpec AirportSpec::dummy = AS_GENERIC(&_airportfta_dummy, nullptr, _default_airports_rotation, 0, nullptr, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR, 0, ATP_TTDP_LARGE, APC_BEGIN, STR_NULL, 0, false); #undef AS #undef AS_ND diff --git a/src/table/bridge_land.h b/src/table/bridge_land.h --- a/src/table/bridge_land.h +++ b/src/table/bridge_land.h @@ -741,7 +741,7 @@ static const PalSpriteID * const * const * @param nrd description of the road bridge in query tool */ #define MBR(y, mnl, mxl, p, mxs, spr, plt, dsc, nrl, nrd) \ - {y, mnl, mxl, p, mxs, spr, plt, dsc, { nrl, nrd }, NULL, 0} + {y, mnl, mxl, p, mxs, spr, plt, dsc, { nrl, nrd }, nullptr, 0} const BridgeSpec _orig_bridge[] = { /* diff --git a/src/table/build_industry.h b/src/table/build_industry.h --- a/src/table/build_industry.h +++ b/src/table/build_industry.h @@ -1213,7 +1213,7 @@ enum IndustryTypes { industry name building text messages : Closure production up production down */ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { - MI(_tile_table_coal_mine, 0, NULL, + MI(_tile_table_coal_mine, 0, nullptr, 210, 0xB3333333, 2, 3, 0, 0, 8, 8, 0, 0, 1, IT_POWER_STATION, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COAL, 15, CT_INVALID, 0, 5, @@ -1223,7 +1223,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_COAL_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_power_station, 0, NULL, + MI(_tile_table_power_station, 0, nullptr, 240, 0xFFFFFFFF, 2, 2, 0, 0, 5, 5, 0, 0, 184, IT_COAL_MINE, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1243,7 +1243,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_SAWMILL, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_forest, 0, NULL, + MI(_tile_table_forest, 0, nullptr, 200, 0xBFFFFFFF, 3, 4, 0, 0, 5, 5, 0, 0, 86, IT_SAWMILL, IT_PAPER_MILL, IT_INVALID, CHECK_FOREST, CT_WOOD, 13, CT_INVALID, 0, 30, @@ -1253,7 +1253,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_FOREST, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_oil_refinery, 0, NULL, + MI(_tile_table_oil_refinery, 0, nullptr, 244, 0xFFFFFFFF, 2, 2, 2, 0, 4, 4, 4, 0, 191, IT_OIL_RIG, IT_INVALID, IT_INVALID, CHECK_REFINERY, CT_GOODS, 0, CT_INVALID, 0, 5, @@ -1263,7 +1263,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_OIL_REFINERY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_oil_rig, 0, NULL, + MI(_tile_table_oil_rig, 0, nullptr, 240, 0x99999999, 6, 0, 0, 0, 0, 0, 0, 0, 152, IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_OIL_RIG, CT_OIL, 15, CT_PASSENGERS, 2, 5, @@ -1293,7 +1293,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_PRINTING_WORKS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_steel_mill, 0, NULL, + MI(_tile_table_steel_mill, 0, nullptr, 215, 0xFFFFFFFF, 2, 0, 0, 0, 5, 0, 0, 0, 10, IT_IRON_MINE, IT_FACTORY, IT_INVALID, CHECK_NOTHING, CT_STEEL, 0, CT_INVALID, 0, 5, @@ -1313,7 +1313,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_FARM, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_copper_mine, 0, NULL, + MI(_tile_table_copper_mine, 0, nullptr, 205, 0xB3333333, 0, 0, 3, 0, 0, 0, 4, 0, 10, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COPPER_ORE, 10, CT_INVALID, 0, 5, @@ -1323,7 +1323,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_COPPER_ORE_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_oil_well, 0, NULL, + MI(_tile_table_oil_well, 0, nullptr, 220, 0x99999999, 0, 5, 3, 0, 4, 5, 5, 0, 152, IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_OIL, 12, CT_INVALID, 0, 5, @@ -1333,7 +1333,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_OIL_WELLS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_bank, 0, NULL, + MI(_tile_table_bank, 0, nullptr, 255, 0xA6666666, 7, 0, 0, 0, 0, 0, 0, 0, 15, IT_BANK_TEMP, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_VALUABLES, 6, CT_INVALID, 0, 5, @@ -1343,7 +1343,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_BANK, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_food_process, 0, NULL, + MI(_tile_table_food_process, 0, nullptr, 206, 0xFFFFFFFF, 0, 2, 2, 0, 0, 3, 4, 0, 55, IT_FRUIT_PLANTATION, IT_FARM, IT_FARM_2, CHECK_NOTHING, CT_FOOD, 0, CT_INVALID, 0, 5, @@ -1363,7 +1363,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_PAPER_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_gold_mine, 0, NULL, + MI(_tile_table_gold_mine, 0, nullptr, 208, 0x99999999, 0, 3, 0, 0, 0, 4, 0, 0, 194, IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_GOLD, 7, CT_INVALID, 0, 5, @@ -1373,7 +1373,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_GOLD_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_bank2, 0, NULL, + MI(_tile_table_bank2, 0, nullptr, 151, 0xA6666666, 0, 3, 3, 0, 0, 6, 5, 0, 15, IT_GOLD_MINE, IT_DIAMOND_MINE, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1383,7 +1383,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_diamond_mine, 0, NULL, + MI(_tile_table_diamond_mine, 0, nullptr, 213, 0x99999999, 0, 0, 3, 0, 0, 0, 4, 0, 184, IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_DIAMONDS, 7, CT_INVALID, 0, 5, @@ -1393,7 +1393,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_DIAMOND_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_iron_mine, 0, NULL, + MI(_tile_table_iron_mine, 0, nullptr, 220, 0xB3333333, 2, 0, 0, 0, 5, 0, 0, 0, 55, IT_STEEL_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_IRON_ORE, 10, CT_INVALID, 0, 5, @@ -1403,7 +1403,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_IRON_ORE_MINE, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_fruit_plantation, 0, NULL, + MI(_tile_table_fruit_plantation, 0, nullptr, 225, 0xBFFFFFFF, 0, 0, 2, 0, 0, 0, 4, 0, 86, IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, CT_FRUIT, 10, CT_INVALID, 0, 15, @@ -1413,7 +1413,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_FRUIT_PLANTATION, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_rubber_plantation, 0, NULL, + MI(_tile_table_rubber_plantation, 0, nullptr, 218, 0xBFFFFFFF, 0, 0, 3, 0, 0, 0, 4, 0, 39, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_PLANTATION, CT_RUBBER, 10, CT_INVALID, 0, 15, @@ -1423,7 +1423,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_RUBBER_PLANTATION, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_water_supply, 0, NULL, + MI(_tile_table_water_supply, 0, nullptr, 199, 0xB3333333, 0, 0, 3, 0, 0, 0, 4, 0, 37, IT_WATER_TOWER, IT_INVALID, IT_INVALID, CHECK_WATER, CT_WATER, 12, CT_INVALID, 0, 5, @@ -1433,7 +1433,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_WATER_SUPPLY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_water_tower, 0, NULL, + MI(_tile_table_water_tower, 0, nullptr, 115, 0xFFFFFFFF, 0, 0, 4, 0, 0, 0, 8, 0, 208, IT_WATER_SUPPLY, IT_INVALID, IT_INVALID, CHECK_WATER, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1453,7 +1453,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_FACTORY_2, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_farm2, 0, NULL, + MI(_tile_table_farm2, 0, nullptr, 250, 0xD9999999, 0, 0, 1, 0, 0, 0, 2, 0, 48, IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, CT_MAIZE, 11, CT_INVALID, 0, 5, @@ -1463,7 +1463,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_FARM_2, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_lumber_mill, 0, NULL, + MI(_tile_table_lumber_mill, 0, nullptr, 135, 0xFFFFFFFF, 0, 0, 0, 0, 0, 0, 0, 0, 194, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_LUMBERMILL, CT_WOOD, 0, CT_INVALID, 0, 5, @@ -1473,7 +1473,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_LUMBER_MILL, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_cotton_candy, 0, NULL, + MI(_tile_table_cotton_candy, 0, nullptr, 195, 0xBFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 5, 48, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COTTON_CANDY, 13, CT_INVALID, 0, 30, @@ -1483,7 +1483,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_COTTON_CANDY_FOREST, STR_NEWS_INDUSTRY_PLANTED, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_candy_factory, 0, NULL, + MI(_tile_table_candy_factory, 0, nullptr, 206, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 5, 174, IT_COTTON_CANDY, IT_TOFFEE_QUARRY, IT_SUGAR_MINE, CHECK_NOTHING, CT_CANDY, 0, CT_INVALID, 0, 5, @@ -1493,7 +1493,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_CANDY_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_battery_farm, 0, NULL, + MI(_tile_table_battery_farm, 0, nullptr, 187, 0xB3333333, 0, 0, 0, 3, 0, 0, 0, 4, 39, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_BATTERIES, 11, CT_INVALID, 0, 30, @@ -1503,7 +1503,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_BATTERY_FARM, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM), - MI(_tile_table_cola_wells, 0, NULL, + MI(_tile_table_cola_wells, 0, nullptr, 193, 0x99999999, 0, 0, 0, 3, 0, 0, 0, 5, 55, IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COLA, 12, CT_INVALID, 0, 5, @@ -1513,7 +1513,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_COLA_WELLS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_toy_shop, 0, NULL, + MI(_tile_table_toy_shop, 0, nullptr, 133, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 4, 208, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, @@ -1523,7 +1523,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_TOY_SHOP, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_toy_factory, 0, NULL, + MI(_tile_table_toy_factory, 0, nullptr, 163, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 5, 10, IT_PLASTIC_FOUNTAINS, IT_BATTERY_FARM, IT_TOY_SHOP, CHECK_NOTHING, CT_TOYS, 0, CT_INVALID, 0, 5, @@ -1543,7 +1543,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_fizzy_drink, 0, NULL, + MI(_tile_table_fizzy_drink, 0, nullptr, 177, 0xFFFFFFFF, 0, 0, 0, 3, 0, 0, 0, 4, 184, IT_COLA_WELLS, IT_BUBBLE_GENERATOR, IT_INVALID, CHECK_NOTHING, CT_FIZZY_DRINKS, 0, CT_INVALID, 0, 5, @@ -1553,7 +1553,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_bubble_generator, 0, NULL, + MI(_tile_table_bubble_generator, 0, nullptr, 203, 0xB3333333, 0, 0, 0, 3, 0, 0, 0, 5, 152, IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_BUBBLEGEN, CT_BUBBLES, 13, CT_INVALID, 0, 5, @@ -1563,7 +1563,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_BUBBLE_GENERATOR, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_toffee_quarry, 0, NULL, + MI(_tile_table_toffee_quarry, 0, nullptr, 213, 0xCCCCCCCC, 0, 0, 0, 3, 0, 0, 0, 5, 194, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_TOFFEE, 10, CT_INVALID, 0, 5, @@ -1573,7 +1573,7 @@ static const IndustrySpec _origin_indust STR_INDUSTRY_NAME_TOFFEE_QUARRY, STR_NEWS_INDUSTRY_CONSTRUCTION, STR_NEWS_INDUSTRY_CLOSURE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL, STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL), - MI(_tile_table_sugar_mine, 0, NULL, + MI(_tile_table_sugar_mine, 0, nullptr, 210, 0xBFFFFFFF, 0, 0, 0, 2, 0, 0, 0, 4, 15, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_SUGAR, 11, CT_INVALID, 0, 5, diff --git a/src/table/cargo_const.h b/src/table/cargo_const.h --- a/src/table/cargo_const.h +++ b/src/table/cargo_const.h @@ -11,7 +11,7 @@ /** Construction macro for a #CargoSpec structure. */ #define MK(bt, label, c, e, f, g, h, fr, te, ks1, ks2, ks3, ks4, ks5, l, m, cmult) \ - {bt, label, c, c, e, cmult, f, {g, h}, fr, te, 0, 0, ks1, ks2, ks3, ks4, ks5, l, m, NULL, NULL, 0} + {bt, label, c, c, e, cmult, f, {g, h}, fr, te, 0, 0, ks1, ks2, ks3, ks4, ks5, l, m, nullptr, nullptr, 0} /** Cargo types available by default. */ static const CargoSpec _default_cargo[] = { MK( 0, 'PASS', 152, 1, 3185, 0, 24, false, TE_PASSENGERS, diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -14,15 +14,15 @@ /* Helper for filling property tables */ #define NIP(prop, base, variable, type, name) { name, (ptrdiff_t)cpp_offsetof(base, variable), cpp_sizeof(base, variable), prop, type } -#define NIP_END() { NULL, 0, 0, 0, 0 } +#define NIP_END() { nullptr, 0, 0, 0, 0 } /* Helper for filling callback tables */ #define NIC(cb_id, base, variable, bit) { #cb_id, (ptrdiff_t)cpp_offsetof(base, variable), cpp_sizeof(base, variable), bit, cb_id } -#define NIC_END() { NULL, 0, 0, 0, 0 } +#define NIC_END() { nullptr, 0, 0, 0, 0 } /* Helper for filling variable tables */ #define NIV(var, name) { name, var } -#define NIV_END() { NULL, 0 } +#define NIV_END() { nullptr, 0 } /*** NewGRF Vehicles ***/ @@ -69,7 +69,7 @@ static const NIVariable _niv_vehicles[] }; class NIHVehicle : public NIHelper { - bool IsInspectable(uint index) const override { return Vehicle::Get(index)->GetGRF() != NULL; } + bool IsInspectable(uint index) const override { return Vehicle::Get(index)->GetGRF() != nullptr; } uint GetParent(uint index) const override { const Vehicle *first = Vehicle::Get(index)->First(); return GetInspectWindowNumber(GetGrfSpecFeature(first->type), first->index); } const void *GetInstance(uint index)const override { return Vehicle::Get(index); } const void *GetSpec(uint index) const override { return Vehicle::Get(index)->GetEngine(); } @@ -85,7 +85,7 @@ class NIHVehicle : public NIHelper { }; static const NIFeature _nif_vehicle = { - NULL, + nullptr, _nic_vehicles, _niv_vehicles, new NIHVehicle(), @@ -132,9 +132,9 @@ static const NIVariable _niv_stations[] }; class NIHStation : public NIHelper { - bool IsInspectable(uint index) const override { return GetStationSpec(index) != NULL; } + bool IsInspectable(uint index) const override { return GetStationSpec(index) != nullptr; } uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); } - const void *GetInstance(uint index)const override { return NULL; } + const void *GetInstance(uint index)const override { return nullptr; } const void *GetSpec(uint index) const override { return GetStationSpec(index); } void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetStationSpec(index)->grf_prop.grffile->grfid : 0; } @@ -147,7 +147,7 @@ class NIHStation : public NIHelper { }; static const NIFeature _nif_station = { - NULL, + nullptr, _nic_stations, _niv_stations, new NIHStation(), @@ -197,9 +197,9 @@ static const NIVariable _niv_house[] = { }; class NIHHouse : public NIHelper { - bool IsInspectable(uint index) const override { return HouseSpec::Get(GetHouseType(index))->grf_prop.grffile != NULL; } + bool IsInspectable(uint index) const override { return HouseSpec::Get(GetHouseType(index))->grf_prop.grffile != nullptr; } uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, GetTownIndex(index)); } - const void *GetInstance(uint index)const override { return NULL; } + const void *GetInstance(uint index)const override { return nullptr; } const void *GetSpec(uint index) const override { return HouseSpec::Get(GetHouseType(index)); } void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_TOWN_NAME, GetTownIndex(index), index); } uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? HouseSpec::Get(GetHouseType(index))->grf_prop.grffile->grfid : 0; } @@ -212,7 +212,7 @@ class NIHHouse : public NIHelper { }; static const NIFeature _nif_house = { - NULL, + nullptr, _nic_house, _niv_house, new NIHHouse(), @@ -247,9 +247,9 @@ static const NIVariable _niv_industrytil }; class NIHIndustryTile : public NIHelper { - bool IsInspectable(uint index) const override { return GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile != NULL; } + bool IsInspectable(uint index) const override { return GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile != nullptr; } uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_INDUSTRIES, GetIndustryIndex(index)); } - const void *GetInstance(uint index)const override { return NULL; } + const void *GetInstance(uint index)const override { return nullptr; } const void *GetSpec(uint index) const override { return GetIndustryTileSpec(GetIndustryGfx(index)); } void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_INDUSTRY_NAME, GetIndustryIndex(index), index); } uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile->grfid : 0; } @@ -262,7 +262,7 @@ class NIHIndustryTile : public NIHelper }; static const NIFeature _nif_industrytile = { - NULL, + nullptr, _nic_industrytiles, _niv_industrytiles, new NIHIndustryTile(), @@ -346,7 +346,7 @@ static const NIVariable _niv_industries[ }; class NIHIndustry : public NIHelper { - bool IsInspectable(uint index) const override { return GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile != NULL; } + bool IsInspectable(uint index) const override { return GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile != nullptr; } uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Industry::Get(index)->town->index); } const void *GetInstance(uint index)const override { return Industry::Get(index); } const void *GetSpec(uint index) const override { return GetIndustrySpec(Industry::Get(index)->type); } @@ -365,7 +365,7 @@ class NIHIndustry : public NIHelper { const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const override { const Industry *i = (const Industry *)this->GetInstance(index); - if (i->psa == NULL) return NULL; + if (i->psa == nullptr) return nullptr; return (int32 *)(&i->psa->storage); } }; @@ -411,7 +411,7 @@ static const NIVariable _niv_objects[] = }; class NIHObject : public NIHelper { - bool IsInspectable(uint index) const override { return ObjectSpec::GetByTile(index)->grf_prop.grffile != NULL; } + bool IsInspectable(uint index) const override { return ObjectSpec::GetByTile(index)->grf_prop.grffile != nullptr; } uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Object::GetByTile(index)->town->index); } const void *GetInstance(uint index)const override { return Object::GetByTile(index); } const void *GetSpec(uint index) const override { return ObjectSpec::GetByTile(index); } @@ -426,7 +426,7 @@ class NIHObject : public NIHelper { }; static const NIFeature _nif_object = { - NULL, + nullptr, _nic_objects, _niv_objects, new NIHObject(), @@ -447,8 +447,8 @@ static const NIVariable _niv_railtypes[] class NIHRailType : public NIHelper { bool IsInspectable(uint index) const override { return true; } uint GetParent(uint index) const override { return UINT32_MAX; } - const void *GetInstance(uint index)const override { return NULL; } - const void *GetSpec(uint index) const override { return NULL; } + const void *GetInstance(uint index)const override { return nullptr; } + const void *GetSpec(uint index) const override { return nullptr; } void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE, INVALID_STRING_ID, index); } uint32 GetGRFID(uint index) const override { return 0; } @@ -456,14 +456,14 @@ class NIHRailType : public NIHelper { { /* There is no unique GRFFile for the tile. Multiple GRFs can define different parts of the railtype. * However, currently the NewGRF Debug GUI does not display variables depending on the GRF (like 0x7F) anyway. */ - RailTypeResolverObject ro(NULL, index, TCX_NORMAL, RTSG_END); + RailTypeResolverObject ro(nullptr, index, TCX_NORMAL, RTSG_END); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } }; static const NIFeature _nif_railtype = { - NULL, - NULL, + nullptr, + nullptr, _niv_railtypes, new NIHRailType(), }; @@ -481,9 +481,9 @@ static const NICallback _nic_airporttile }; class NIHAirportTile : public NIHelper { - bool IsInspectable(uint index) const override { return AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile != NULL; } + bool IsInspectable(uint index) const override { return AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile != nullptr; } uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); } - const void *GetInstance(uint index)const override { return NULL; } + const void *GetInstance(uint index)const override { return nullptr; } const void *GetSpec(uint index) const override { return AirportTileSpec::Get(GetAirportGfx(index)); } void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile->grfid : 0; } @@ -496,7 +496,7 @@ class NIHAirportTile : public NIHelper { }; static const NIFeature _nif_airporttile = { - NULL, + nullptr, _nic_airporttiles, _niv_industrytiles, // Yes, they share this (at least now) new NIHAirportTile(), @@ -522,7 +522,7 @@ class NIHTown : public NIHelper { bool IsInspectable(uint index) const override { return Town::IsValidID(index); } uint GetParent(uint index) const override { return UINT32_MAX; } const void *GetInstance(uint index)const override { return Town::Get(index); } - const void *GetSpec(uint index) const override { return NULL; } + const void *GetSpec(uint index) const override { return nullptr; } void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_TOWN_NAME, index); } uint32 GetGRFID(uint index) const override { return 0; } bool PSAWithParameter() const override { return true; } @@ -530,7 +530,7 @@ class NIHTown : public NIHelper { uint Resolve(uint index, uint var, uint param, bool *avail) const override { - TownResolverObject ro(NULL, Town::Get(index), true); + TownResolverObject ro(nullptr, Town::Get(index), true); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } @@ -543,13 +543,13 @@ class NIHTown : public NIHelper { if ((*iter)->grfid == grfid) return (int32 *)(&(*iter)->storage[0]); } - return NULL; + return nullptr; } }; static const NIFeature _nif_town = { - NULL, - NULL, + nullptr, + nullptr, _niv_towns, new NIHTown(), }; @@ -561,16 +561,16 @@ static const NIFeature * const _nifeatur &_nif_vehicle, // GSF_SHIPS &_nif_vehicle, // GSF_AIRCRAFT &_nif_station, // GSF_STATIONS - NULL, // GSF_CANALS (no callbacks/action2 implemented) - NULL, // GSF_BRIDGES (no callbacks/action2) + nullptr, // GSF_CANALS (no callbacks/action2 implemented) + nullptr, // GSF_BRIDGES (no callbacks/action2) &_nif_house, // GSF_HOUSES - NULL, // GSF_GLOBALVAR (has no "physical" objects) + nullptr, // GSF_GLOBALVAR (has no "physical" objects) &_nif_industrytile, // GSF_INDUSTRYTILES &_nif_industry, // GSF_INDUSTRIES - NULL, // GSF_CARGOES (has no "physical" objects) - NULL, // GSF_SOUNDFX (has no "physical" objects) - NULL, // GSF_AIRPORTS (feature not implemented) - NULL, // GSF_SIGNALS (feature not implemented) + nullptr, // GSF_CARGOES (has no "physical" objects) + nullptr, // GSF_SOUNDFX (has no "physical" objects) + nullptr, // GSF_AIRPORTS (feature not implemented) + nullptr, // GSF_SIGNALS (feature not implemented) &_nif_object, // GSF_OBJECTS &_nif_railtype, // GSF_RAILTYPES &_nif_airporttile, // GSF_AIRPORTTILES diff --git a/src/table/railtypes.h b/src/table/railtypes.h --- a/src/table/railtypes.h +++ b/src/table/railtypes.h @@ -112,8 +112,8 @@ static const RailtypeInfo _original_rail /* sort order */ 0 << 4 | 7, - { NULL }, - { NULL }, + { nullptr }, + { nullptr }, }, /** Electrified railway */ @@ -213,8 +213,8 @@ static const RailtypeInfo _original_rail /* sort order */ 1 << 4 | 7, - { NULL }, - { NULL }, + { nullptr }, + { nullptr }, }, /** Monorail */ @@ -310,8 +310,8 @@ static const RailtypeInfo _original_rail /* sort order */ 2 << 4 | 7, - { NULL }, - { NULL }, + { nullptr }, + { nullptr }, }, /** Maglev */ @@ -407,8 +407,8 @@ static const RailtypeInfo _original_rail /* sort order */ 3 << 4 | 7, - { NULL }, - { NULL }, + { nullptr }, + { nullptr }, }, }; diff --git a/src/table/roadveh_movement.h b/src/table/roadveh_movement.h --- a/src/table/roadveh_movement.h +++ b/src/table/roadveh_movement.h @@ -1445,39 +1445,39 @@ static const RoadDriveEntry * const _roa _roadveh_drive_data_29, _roadveh_tram_turn_sw_1, _roadveh_tram_turn_nw_1, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, }; static const RoadDriveEntry * const * const _road_drive_data[2] = { diff --git a/src/table/station_land.h b/src/table/station_land.h --- a/src/table/station_land.h +++ b/src/table/station_land.h @@ -789,7 +789,7 @@ static const DrawTileSeqStruct _station_ * @param dtss Sequence child sprites of the tile */ #define TILE_SPRITE_LINE(img, dtss) { {img, PAL_NONE}, dtss }, -#define TILE_SPRITE_NULL() { {0, 0}, NULL }, +#define TILE_SPRITE_NULL() { {0, 0}, nullptr }, extern const DrawTileSprites _station_display_datas_rail[] = { TILE_SPRITE_LINE(SPR_RAIL_TRACK_X, _station_display_datas_0) diff --git a/src/tar_type.h b/src/tar_type.h --- a/src/tar_type.h +++ b/src/tar_type.h @@ -25,7 +25,7 @@ struct TarListEntry { /* MSVC goes copying around this struct after initialisation, so it tries * to free filename, which isn't set at that moment... but because it * initializes the variable with garbage, it's going to segfault. */ - TarListEntry() : filename(NULL), dirname(NULL) {} + TarListEntry() : filename(nullptr), dirname(nullptr) {} ~TarListEntry() { free(this->filename); free(this->dirname); } }; diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -278,7 +278,7 @@ CommandCost CmdTerraformLand(TileIndex t /* Is the tile already cleared? */ const ClearedObjectArea *coa = FindClearedObject(tile); - bool indirectly_cleared = coa != NULL && coa->first_tile != tile; + bool indirectly_cleared = coa != nullptr && coa->first_tile != tile; /* Check tiletype-specific things, and add extra-cost */ const bool curr_gen = _generating_world; @@ -304,7 +304,7 @@ CommandCost CmdTerraformLand(TileIndex t } Company *c = Company::GetIfValid(_current_company); - if (c != NULL && GB(c->terraform_limit, 16, 16) < ts.tile_to_new_height.size()) { + if (c != nullptr && GB(c->terraform_limit, 16, 16) < ts.tile_to_new_height.size()) { return_cmd_error(STR_ERROR_TERRAFORM_LIMIT_REACHED); } @@ -326,7 +326,7 @@ CommandCost CmdTerraformLand(TileIndex t SetTileHeight(tile, (uint)height); } - if (c != NULL) c->terraform_limit -= (uint32)ts.tile_to_new_height.size() << 16; + if (c != nullptr) c->terraform_limit -= (uint32)ts.tile_to_new_height.size() << 16; } return total_cost; } @@ -371,7 +371,7 @@ CommandCost CmdLevelLand(TileIndex tile, bool had_success = false; const Company *c = Company::GetIfValid(_current_company); - int limit = (c == NULL ? INT32_MAX : GB(c->terraform_limit, 16, 16)); + int limit = (c == nullptr ? INT32_MAX : GB(c->terraform_limit, 16, 16)); if (limit == 0) return_cmd_error(STR_ERROR_TERRAFORM_LIMIT_REACHED); TileIterator *iter = HasBit(p2, 0) ? (TileIterator *)new DiagonalTileIterator(tile, p1) : new OrthogonalTileIterator(tile, p1); diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -293,8 +293,8 @@ struct TerraformToolbarWindow : Window { static EventState TerraformToolbarGlobalHotkeys(int hotkey) { if (_game_mode != GM_NORMAL) return ES_NOT_HANDLED; - Window *w = ShowTerraformToolbar(NULL); - if (w == NULL) return ES_NOT_HANDLED; + Window *w = ShowTerraformToolbar(nullptr); + if (w == nullptr) return ES_NOT_HANDLED; return w->OnHotkey(hotkey); } @@ -353,14 +353,14 @@ static WindowDesc _terraform_desc( /** * Show the toolbar for terraforming in the game. * @param link The toolbar we might want to link to. - * @return The allocated toolbar if the window was newly opened, else \c NULL. + * @return The allocated toolbar if the window was newly opened, else \c nullptr. */ Window *ShowTerraformToolbar(Window *link) { - if (!Company::IsValidID(_local_company)) return NULL; + if (!Company::IsValidID(_local_company)) return nullptr; Window *w; - if (link == NULL) { + if (link == nullptr) { w = AllocateWindowDescFront(&_terraform_desc, 0); return w; } @@ -631,7 +631,7 @@ struct ScenarioEditorLandscapeGeneration break; case WID_ETT_RESET_LANDSCAPE: // Reset landscape - ShowQuery(STR_QUERY_RESET_LANDSCAPE_CAPTION, STR_RESET_LANDSCAPE_CONFIRMATION_TEXT, NULL, ResetLandscapeConfirmationCallback); + ShowQuery(STR_QUERY_RESET_LANDSCAPE_CAPTION, STR_RESET_LANDSCAPE_CONFIRMATION_TEXT, nullptr, ResetLandscapeConfirmationCallback); break; default: NOT_REACHED(); @@ -720,7 +720,7 @@ static EventState TerraformToolbarEditor { if (_game_mode != GM_EDITOR) return ES_NOT_HANDLED; Window *w = ShowEditorTerraformToolbar(); - if (w == NULL) return ES_NOT_HANDLED; + if (w == nullptr) return ES_NOT_HANDLED; return w->OnHotkey(hotkey); } @@ -747,7 +747,7 @@ static WindowDesc _scen_edit_land_gen_de /** * Show the toolbar for terraforming in the scenario editor. - * @return The allocated toolbar if the window was newly opened, else \c NULL. + * @return The allocated toolbar if the window was newly opened, else \c nullptr. */ Window *ShowEditorTerraformToolbar() { diff --git a/src/terraform_gui.h b/src/terraform_gui.h --- a/src/terraform_gui.h +++ b/src/terraform_gui.h @@ -14,7 +14,7 @@ #include "window_type.h" -Window *ShowTerraformToolbar(Window *link = NULL); +Window *ShowTerraformToolbar(Window *link = nullptr); Window *ShowEditorTerraformToolbar(); #endif /* TERRAFORM_GUI_H */ diff --git a/src/textbuf.cpp b/src/textbuf.cpp --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -164,18 +164,18 @@ bool Textbuf::InsertChar(WChar key) bool Textbuf::InsertString(const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) { uint16 insertpos = (marked && this->marklength != 0) ? this->markpos : this->caretpos; - if (insert_location != NULL) { + if (insert_location != nullptr) { insertpos = insert_location - this->buf; if (insertpos > this->bytes) return false; - if (replacement_end != NULL) { - this->DeleteText(insertpos, replacement_end - this->buf, str == NULL); + if (replacement_end != nullptr) { + this->DeleteText(insertpos, replacement_end - this->buf, str == nullptr); } } else { - if (marked) this->DiscardMarkedText(str == NULL); + if (marked) this->DiscardMarkedText(str == nullptr); } - if (str == NULL) return false; + if (str == nullptr) return false; uint16 bytes = 0, chars = 0; WChar c; @@ -205,7 +205,7 @@ bool Textbuf::InsertString(const char *s this->bytes += bytes; this->chars += chars; - if (!marked && caret == NULL) this->caretpos += bytes; + if (!marked && caret == nullptr) this->caretpos += bytes; assert(this->bytes <= this->max_bytes); assert(this->chars <= this->max_chars); this->buf[this->bytes - 1] = '\0'; // terminating zero diff --git a/src/textbuf_type.h b/src/textbuf_type.h --- a/src/textbuf_type.h +++ b/src/textbuf_type.h @@ -56,7 +56,7 @@ struct Textbuf { bool InsertClipboard(); bool InsertChar(uint32 key); - bool InsertString(const char *str, bool marked, const char *caret = NULL, const char *insert_location = NULL, const char *replacement_end = NULL); + bool InsertString(const char *str, bool marked, const char *caret = nullptr, const char *insert_location = nullptr, const char *replacement_end = nullptr); bool DeleteChar(uint16 keycode); bool MovePos(uint16 keycode); diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -184,7 +184,7 @@ void TextfileWindow::SetupScrollbars() /* virtual */ const char *TextfileWindow::NextString() { - if (this->search_iterator >= this->lines.size()) return NULL; + if (this->search_iterator >= this->lines.size()) return nullptr; return this->lines[this->search_iterator++]; } @@ -214,13 +214,13 @@ void TextfileWindow::SetupScrollbars() * After the call, it contains the size of the uncompressed * data. * - * When decompressing fails, *bufp is set to NULL and *sizep to 0. The + * When decompressing fails, *bufp is set to nullptr and *sizep to 0. The * compressed buffer passed in is still freed in this case. */ static void Gunzip(byte **bufp, size_t *sizep) { static const int BLOCKSIZE = 8192; - byte *buf = NULL; + byte *buf = nullptr; size_t alloc_size = 0; z_stream z; int res; @@ -250,7 +250,7 @@ static void Gunzip(byte **bufp, size_t * *sizep = alloc_size - z.avail_out; } else { /* Something went wrong */ - *bufp = NULL; + *bufp = nullptr; *sizep = 0; free(buf); } @@ -270,13 +270,13 @@ static void Gunzip(byte **bufp, size_t * * After the call, it contains the size of the uncompressed * data. * - * When decompressing fails, *bufp is set to NULL and *sizep to 0. The + * When decompressing fails, *bufp is set to nullptr and *sizep to 0. The * compressed buffer passed in is still freed in this case. */ static void Xunzip(byte **bufp, size_t *sizep) { static const int BLOCKSIZE = 8192; - byte *buf = NULL; + byte *buf = nullptr; size_t alloc_size = 0; lzma_stream z = LZMA_STREAM_INIT; int res; @@ -304,7 +304,7 @@ static void Xunzip(byte **bufp, size_t * *sizep = alloc_size - z.avail_out; } else { /* Something went wrong */ - *bufp = NULL; + *bufp = nullptr; *sizep = 0; free(buf); } @@ -317,14 +317,14 @@ static void Xunzip(byte **bufp, size_t * */ /* virtual */ void TextfileWindow::LoadTextfile(const char *textfile, Subdirectory dir) { - if (textfile == NULL) return; + if (textfile == nullptr) return; this->lines.clear(); /* Get text from file */ size_t filesize; FILE *handle = FioFOpenFile(textfile, "rb", dir, &filesize); - if (handle == NULL) return; + if (handle == nullptr) return; this->text = ReallocT(this->text, filesize); size_t read = fread(this->text, 1, filesize, handle); @@ -334,7 +334,7 @@ static void Xunzip(byte **bufp, size_t * #if defined(WITH_ZLIB) || defined(WITH_LIBLZMA) const char *suffix = strrchr(textfile, '.'); - if (suffix == NULL) return; + if (suffix == nullptr) return; #endif #if defined(WITH_ZLIB) @@ -381,7 +381,7 @@ static void Xunzip(byte **bufp, size_t * * @param type The type of the textfile to search for. * @param dir The subdirectory to search in. * @param filename The filename of the content to look for. - * @return The path to the textfile, \c NULL otherwise. + * @return The path to the textfile, \c nullptr otherwise. */ const char *GetTextfile(TextfileType type, Subdirectory dir, const char *filename) { @@ -394,13 +394,13 @@ const char *GetTextfile(TextfileType typ const char *prefix = prefixes[type]; - if (filename == NULL) return NULL; + if (filename == nullptr) return nullptr; static char file_path[MAX_PATH]; strecpy(file_path, filename, lastof(file_path)); char *slash = strrchr(file_path, PATHSEPCHAR); - if (slash == NULL) return NULL; + if (slash == nullptr) return nullptr; static const char * const exts[] = { "txt", @@ -422,5 +422,5 @@ const char *GetTextfile(TextfileType typ seprintf(slash + 1, lastof(file_path), "%s.%s", prefix, exts[i]); if (FioCheckFileExists(file_path, dir)) return file_path; } - return NULL; + return nullptr; } diff --git a/src/tgp.cpp b/src/tgp.cpp --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -184,7 +184,7 @@ struct HeightMap }; /** Global height map instance */ -static HeightMap _height_map = {NULL, 0, 0, 0, 0}; +static HeightMap _height_map = {nullptr, 0, 0, 0, 0}; /** Conversion: int to height_t */ #define I2H(i) ((i) << height_decimal_bits) @@ -325,7 +325,7 @@ static inline bool AllocHeightMap() static inline void FreeHeightMap() { free(_height_map.h); - _height_map.h = NULL; + _height_map.h = nullptr; } /** @@ -349,7 +349,7 @@ static inline height_t RandomHeight(ampl static void HeightMapGenerate() { /* Trying to apply noise to uninitialized height map */ - assert(_height_map.h != NULL); + assert(_height_map.h != nullptr); int start = max(MAX_TGP_FREQUENCIES - (int)min(MapLogX(), MapLogY()), 0); bool first = true; @@ -423,9 +423,9 @@ static void HeightMapGetMinMaxAvg(height h_avg = (height_t)(h_accu / (_height_map.size_x * _height_map.size_y)); /* Return required results */ - if (min_ptr != NULL) *min_ptr = h_min; - if (max_ptr != NULL) *max_ptr = h_max; - if (avg_ptr != NULL) *avg_ptr = h_avg; + if (min_ptr != nullptr) *min_ptr = h_min; + if (max_ptr != nullptr) *max_ptr = h_max; + if (avg_ptr != nullptr) *avg_ptr = h_avg; } /** Dill histogram and return pointer to its base point - to the count of zero heights */ @@ -1011,5 +1011,5 @@ void GenerateTerrainPerlin() IncreaseGeneratingWorldProgress(GWP_LANDSCAPE); FreeHeightMap(); - GenerateWorldSetAbortCallback(NULL); + GenerateWorldSetAbortCallback(nullptr); } diff --git a/src/thread.h b/src/thread.h --- a/src/thread.h +++ b/src/thread.h @@ -40,7 +40,7 @@ void SetCurrentThreadName(const char *na * Start a new thread. * @tparam TFn Type of the function to call on the thread. * @tparam TArgs Type of the parameters of the thread function. - * @param thr Pointer to a thread object; may be \c NULL if a detached thread is wanted. + * @param thr Pointer to a thread object; may be \c nullptr if a detached thread is wanted. * @param name Name of the thread. * @param _Fx Function to call on the thread. * @param _Ax Arguments for the thread function. @@ -62,7 +62,7 @@ inline bool StartNewThread(std::thread * } }, name, std::forward(_Fx), std::forward(_Ax)...); - if (thr != NULL) { + if (thr != nullptr) { *thr = std::move(t); } else { t.detach(); diff --git a/src/tile_cmd.h b/src/tile_cmd.h --- a/src/tile_cmd.h +++ b/src/tile_cmd.h @@ -168,29 +168,29 @@ void GetTileDesc(TileIndex tile, TileDes static inline void AddAcceptedCargo(TileIndex tile, CargoArray &acceptance, CargoTypes *always_accepted) { AddAcceptedCargoProc *proc = _tile_type_procs[GetTileType(tile)]->add_accepted_cargo_proc; - if (proc == NULL) return; - CargoTypes dummy = 0; // use dummy bitmask so there don't need to be several 'always_accepted != NULL' checks - proc(tile, acceptance, always_accepted == NULL ? &dummy : always_accepted); + if (proc == nullptr) return; + CargoTypes dummy = 0; // use dummy bitmask so there don't need to be several 'always_accepted != nullptr' checks + proc(tile, acceptance, always_accepted == nullptr ? &dummy : always_accepted); } static inline void AddProducedCargo(TileIndex tile, CargoArray &produced) { AddProducedCargoProc *proc = _tile_type_procs[GetTileType(tile)]->add_produced_cargo_proc; - if (proc == NULL) return; + if (proc == nullptr) return; proc(tile, produced); } static inline void AnimateTile(TileIndex tile) { AnimateTileProc *proc = _tile_type_procs[GetTileType(tile)]->animate_tile_proc; - assert(proc != NULL); + assert(proc != nullptr); proc(tile); } static inline bool ClickTile(TileIndex tile) { ClickTileProc *proc = _tile_type_procs[GetTileType(tile)]->click_tile_proc; - if (proc == NULL) return false; + if (proc == nullptr) return false; return proc(tile); } diff --git a/src/tile_map.cpp b/src/tile_map.cpp --- a/src/tile_map.cpp +++ b/src/tile_map.cpp @@ -34,7 +34,7 @@ static Slope GetTileSlopeGivenHeight(int int hmines = min(heast, hsouth); int hmin = min(hminnw, hmines); - if (h != NULL) *h = hmin; + if (h != nullptr) *h = hmin; int hmaxnw = max(hnorth, hwest); int hmaxes = max(heast, hsouth); @@ -55,7 +55,7 @@ static Slope GetTileSlopeGivenHeight(int /** * Return the slope of a given tile inside the map. * @param tile Tile to compute slope of - * @param h If not \c NULL, pointer to storage of z height + * @param h If not \c nullptr, pointer to storage of z height * @return Slope of the tile, except for the HALFTILE part */ Slope GetTileSlope(TileIndex tile, int *h) @@ -78,7 +78,7 @@ Slope GetTileSlope(TileIndex tile, int * * * @param x X coordinate of the tile to compute slope of, may be ouside the map. * @param y Y coordinate of the tile to compute slope of, may be ouside the map. - * @param h If not \c NULL, pointer to storage of z height. + * @param h If not \c nullptr, pointer to storage of z height. * @return Slope of the tile, except for the HALFTILE part. */ Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h) @@ -89,14 +89,14 @@ Slope GetTilePixelSlopeOutsideMap(int x, int hsouth = TileHeightOutsideMap(x + 1, y + 1); // S corner. Slope s = GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth, h); - if (h != NULL) *h *= TILE_HEIGHT; + if (h != nullptr) *h *= TILE_HEIGHT; return s; } /** * Check if a given tile is flat * @param tile Tile to check - * @param h If not \c NULL, pointer to storage of z height (only if tile is flat) + * @param h If not \c nullptr, pointer to storage of z height (only if tile is flat) * @return Whether the tile is flat */ bool IsTileFlat(TileIndex tile, int *h) @@ -111,7 +111,7 @@ bool IsTileFlat(TileIndex tile, int *h) if (TileHeight(TileXY(x1, y2)) != z) return false; if (TileHeight(TileXY(x2, y2)) != z) return false; - if (h != NULL) *h = z; + if (h != nullptr) *h = z; return true; } diff --git a/src/tile_map.h b/src/tile_map.h --- a/src/tile_map.h +++ b/src/tile_map.h @@ -267,22 +267,22 @@ static inline void SetAnimationFrame(Til _me[t].m7 = frame; } -Slope GetTileSlope(TileIndex tile, int *h = NULL); +Slope GetTileSlope(TileIndex tile, int *h = nullptr); int GetTileZ(TileIndex tile); int GetTileMaxZ(TileIndex tile); -bool IsTileFlat(TileIndex tile, int *h = NULL); +bool IsTileFlat(TileIndex tile, int *h = nullptr); /** * Return the slope of a given tile * @param tile Tile to compute slope of - * @param h If not \c NULL, pointer to storage of z height + * @param h If not \c nullptr, pointer to storage of z height * @return Slope of the tile, except for the HALFTILE part */ static inline Slope GetTilePixelSlope(TileIndex tile, int *h) { Slope s = GetTileSlope(tile, h); - if (h != NULL) *h *= TILE_HEIGHT; + if (h != nullptr) *h *= TILE_HEIGHT; return s; } diff --git a/src/tilematrix_type.hpp b/src/tilematrix_type.hpp --- a/src/tilematrix_type.hpp +++ b/src/tilematrix_type.hpp @@ -69,7 +69,7 @@ public: T *data; ///< Pointer to data array. - TileMatrix() : area(INVALID_TILE, 0, 0), data(NULL) {} + TileMatrix() : area(INVALID_TILE, 0, 0), data(nullptr) {} ~TileMatrix() { diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -61,7 +61,7 @@ static void ChangeTimetable(Vehicle *v, v->orders.list->UpdateTotalDuration(total_delta); v->orders.list->UpdateTimetableDuration(timetable_delta); - for (v = v->FirstShared(); v != NULL; v = v->NextShared()) { + for (v = v->FirstShared(); v != nullptr; v = v->NextShared()) { if (v->cur_real_order_index == order_number && v->current_order.Equals(*order)) { switch (mtf) { case MTF_WAIT_TIME: @@ -105,14 +105,14 @@ CommandCost CmdChangeTimetable(TileIndex VehicleID veh = GB(p1, 0, 20); Vehicle *v = Vehicle::GetIfValid(veh); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; VehicleOrderID order_number = GB(p1, 20, 8); Order *order = v->GetOrder(order_number); - if (order == NULL || order->IsType(OT_IMPLICIT)) return CMD_ERROR; + if (order == nullptr || order->IsType(OT_IMPLICIT)) return CMD_ERROR; ModifyTimetableFlags mtf = Extract(p1); if (mtf >= MTF_END) return CMD_ERROR; @@ -199,7 +199,7 @@ CommandCost CmdSetVehicleOnTime(TileInde VehicleID veh = GB(p1, 0, 20); Vehicle *v = Vehicle::GetIfValid(veh); - if (v == NULL || !v->IsPrimaryVehicle() || v->orders.list == NULL) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle() || v->orders.list == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -268,7 +268,7 @@ CommandCost CmdSetTimetableStart(TileInd { bool timetable_all = HasBit(p1, 20); Vehicle *v = Vehicle::GetIfValid(GB(p1, 0, 20)); - if (v == NULL || !v->IsPrimaryVehicle() || v->orders.list == NULL) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle() || v->orders.list == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -284,7 +284,7 @@ CommandCost CmdSetTimetableStart(TileInd std::vector vehs; if (timetable_all) { - for (Vehicle *w = v->orders.list->GetFirstSharedVehicle(); w != NULL; w = w->NextShared()) { + for (Vehicle *w = v->orders.list->GetFirstSharedVehicle(); w != nullptr; w = w->NextShared()) { vehs.push_back(w); } } else { @@ -334,7 +334,7 @@ CommandCost CmdAutofillTimetable(TileInd VehicleID veh = GB(p1, 0, 20); Vehicle *v = Vehicle::GetIfValid(veh); - if (v == NULL || !v->IsPrimaryVehicle() || v->orders.list == NULL) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle() || v->orders.list == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -357,7 +357,7 @@ CommandCost CmdAutofillTimetable(TileInd ClrBit(v->vehicle_flags, VF_AUTOFILL_PRES_WAIT_TIME); } - for (Vehicle *v2 = v->FirstShared(); v2 != NULL; v2 = v2->NextShared()) { + for (Vehicle *v2 = v->FirstShared(); v2 != nullptr; v2 = v2->NextShared()) { if (v2 != v) { /* Stop autofilling; only one vehicle at a time can perform autofill */ ClrBit(v2->vehicle_flags, VF_AUTOFILL_TIMETABLE); @@ -387,7 +387,7 @@ void UpdateVehicleTimetable(Vehicle *v, Order *real_current_order = v->GetOrder(v->cur_real_order_index); VehicleOrderID first_manual_order = 0; - for (Order *o = v->GetFirstOrder(); o != NULL && o->IsType(OT_IMPLICIT); o = o->next) { + for (Order *o = v->GetFirstOrder(); o != nullptr && o->IsType(OT_IMPLICIT); o = o->next) { ++first_manual_order; } @@ -477,7 +477,7 @@ void UpdateVehicleTimetable(Vehicle *v, } } - for (v = v->FirstShared(); v != NULL; v = v->NextShared()) { + for (v = v->FirstShared(); v != nullptr; v = v->NextShared()) { SetWindowDirty(WC_VEHICLE_TIMETABLE, v->index); } } diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -87,7 +87,7 @@ static bool CanDetermineTimeTaken(const */ static void FillTimetableArrivalDepartureTable(const Vehicle *v, VehicleOrderID start, bool travelling, TimetableArrivalDeparture *table, Ticks offset) { - assert(table != NULL); + assert(table != nullptr); assert(v->GetNumOrders() >= 2); assert(start < v->GetNumOrders()); @@ -122,7 +122,7 @@ static void FillTimetableArrivalDepartur order = order->next; if (i >= v->GetNumOrders()) { i = 0; - assert(order == NULL); + assert(order == nullptr); order = v->orders.list->GetFirstOrder(); } } while (i != start); @@ -309,9 +309,9 @@ struct TimetableWindow : Window { if (selected != -1) { const Order *order = v->GetOrder(((selected + 1) / 2) % v->GetNumOrders()); if (selected % 2 == 1) { - disable = order != NULL && (order->IsType(OT_CONDITIONAL) || order->IsType(OT_IMPLICIT)); + disable = order != nullptr && (order->IsType(OT_CONDITIONAL) || order->IsType(OT_IMPLICIT)); } else { - disable = order == NULL || ((!order->IsType(OT_GOTO_STATION) || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) && !order->IsType(OT_CONDITIONAL)); + disable = order == nullptr || ((!order->IsType(OT_GOTO_STATION) || (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION)) && !order->IsType(OT_CONDITIONAL)); } } bool disable_speed = disable || selected % 2 != 1 || v->type == VEH_AIRCRAFT; @@ -322,9 +322,9 @@ struct TimetableWindow : Window { this->SetWidgetDisabledState(WID_VT_CLEAR_SPEED, disable_speed); this->SetWidgetDisabledState(WID_VT_SHARED_ORDER_LIST, !v->IsOrderListShared()); - this->SetWidgetDisabledState(WID_VT_START_DATE, v->orders.list == NULL); - this->SetWidgetDisabledState(WID_VT_RESET_LATENESS, v->orders.list == NULL); - this->SetWidgetDisabledState(WID_VT_AUTOFILL, v->orders.list == NULL); + this->SetWidgetDisabledState(WID_VT_START_DATE, v->orders.list == nullptr); + this->SetWidgetDisabledState(WID_VT_RESET_LATENESS, v->orders.list == nullptr); + this->SetWidgetDisabledState(WID_VT_AUTOFILL, v->orders.list == nullptr); } else { this->DisableWidget(WID_VT_START_DATE); this->DisableWidget(WID_VT_CHANGE_TIME); @@ -367,7 +367,7 @@ struct TimetableWindow : Window { int middle = rtl ? r.right - WD_FRAMERECT_RIGHT - index_column_width : r.left + WD_FRAMERECT_LEFT + index_column_width; const Order *order = v->GetOrder(order_id); - while (order != NULL) { + while (order != nullptr) { /* Don't draw anything if it extends past the end of the window. */ if (!this->vscroll->IsVisible(i)) break; @@ -424,7 +424,7 @@ struct TimetableWindow : Window { * i.e. are only shown if we can calculate all times. * Excluding order lists with only one order makes some things easier. */ - Ticks total_time = v->orders.list != NULL ? v->orders.list->GetTimetableDurationIncomplete() : 0; + Ticks total_time = v->orders.list != nullptr ? v->orders.list->GetTimetableDurationIncomplete() : 0; if (total_time <= 0 || v->GetNumOrders() <= 1 || !HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) break; TimetableArrivalDeparture *arr_dep = AllocaM(TimetableArrivalDeparture, v->GetNumOrders()); @@ -475,7 +475,7 @@ struct TimetableWindow : Window { case WID_VT_SUMMARY_PANEL: { int y = r.top + WD_FRAMERECT_TOP; - Ticks total_time = v->orders.list != NULL ? v->orders.list->GetTimetableDurationIncomplete() : 0; + Ticks total_time = v->orders.list != nullptr ? v->orders.list->GetTimetableDurationIncomplete() : 0; if (total_time != 0) { SetTimetableParams(0, 1, total_time); DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, v->orders.list->IsCompleteTimetable() ? STR_TIMETABLE_TOTAL_TIME : STR_TIMETABLE_TOTAL_TIME_INCOMPLETE); @@ -543,7 +543,7 @@ struct TimetableWindow : Window { const Order *order = v->GetOrder(real); StringID current = STR_EMPTY; - if (order != NULL) { + if (order != nullptr) { uint time = (selected % 2 == 1) ? order->GetTravelTime() : order->GetWaitTime(); if (!_settings_client.gui.timetable_in_ticks) time /= DAY_TICKS; @@ -566,7 +566,7 @@ struct TimetableWindow : Window { StringID current = STR_EMPTY; const Order *order = v->GetOrder(real); - if (order != NULL) { + if (order != nullptr) { if (order->GetMaxSpeed() != UINT16_MAX) { SetDParam(0, ConvertKmhishSpeedToDisplaySpeed(order->GetMaxSpeed())); current = STR_JUST_INT; @@ -616,13 +616,13 @@ struct TimetableWindow : Window { void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; const Vehicle *v = this->vehicle; uint32 p1 = PackTimetableArgs(v, this->sel_index, this->query_is_speed_query); - uint64 val = StrEmpty(str) ? 0 : strtoul(str, NULL, 10); + uint64 val = StrEmpty(str) ? 0 : strtoul(str, nullptr, 10); if (this->query_is_speed_query) { val = ConvertDisplaySpeedToKmhishSpeed(val); } else { diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -616,7 +616,7 @@ static CallBackFunction MenuClickCompany if (_network_server) { DoCommandP(0, CCA_NEW, _network_own_client_id, CMD_COMPANY_CTRL); } else { - NetworkSendCommand(0, CCA_NEW, 0, CMD_COMPANY_CTRL, NULL, NULL, _local_company); + NetworkSendCommand(0, CCA_NEW, 0, CMD_COMPANY_CTRL, nullptr, nullptr, _local_company); } return CBF_NONE; @@ -1055,7 +1055,7 @@ static CallBackFunction ToolbarHelpClick static void MenuClickSmallScreenshot() { - MakeScreenshot(SC_VIEWPORT, NULL); + MakeScreenshot(SC_VIEWPORT, nullptr); } /** @@ -1065,7 +1065,7 @@ static void MenuClickSmallScreenshot() */ static void ScreenshotConfirmCallback(Window *w, bool confirmed) { - if (confirmed) MakeScreenshot(_confirmed_screenshot_type, NULL); + if (confirmed) MakeScreenshot(_confirmed_screenshot_type, nullptr); } /** @@ -1082,10 +1082,10 @@ static void MenuClickLargeWorldScreensho SetDParam(0, vp.width); SetDParam(1, vp.height); _confirmed_screenshot_type = t; - ShowQuery(STR_WARNING_SCREENSHOT_SIZE_CAPTION, STR_WARNING_SCREENSHOT_SIZE_MESSAGE, NULL, ScreenshotConfirmCallback); + ShowQuery(STR_WARNING_SCREENSHOT_SIZE_CAPTION, STR_WARNING_SCREENSHOT_SIZE_MESSAGE, nullptr, ScreenshotConfirmCallback); } else { /* Less than 64M pixels, just do it */ - MakeScreenshot(t, NULL); + MakeScreenshot(t, nullptr); } } @@ -1280,8 +1280,8 @@ static CallBackFunction ToolbarBtn_NULL( typedef CallBackFunction MenuClickedProc(int index); static MenuClickedProc * const _menu_clicked_procs[] = { - NULL, // 0 - NULL, // 1 + nullptr, // 0 + nullptr, // 1 MenuClickSettings, // 2 MenuClickSaveLoad, // 3 MenuClickMap, // 4 @@ -1300,7 +1300,7 @@ static MenuClickedProc * const _menu_cli MenuClickShowShips, // 17 MenuClickShowAir, // 18 MenuClickMap, // 19 - NULL, // 20 + nullptr, // 20 MenuClickBuildRail, // 21 MenuClickBuildRoad, // 22 MenuClickBuildWater, // 23 @@ -1344,7 +1344,7 @@ public: uint nbuttons = 0; /* First initialise some variables... */ - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->SetupSmallestSize(w, init_array); this->smallest_y = max(this->smallest_y, child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom); if (this->IsButton(child_wid->type)) { @@ -1356,7 +1356,7 @@ public: } /* ... then in a second pass make sure the 'current' heights are set. Won't change ever. */ - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->current_y = this->smallest_y; if (!this->IsButton(child_wid->type)) { child_wid->current_x = child_wid->smallest_x; @@ -1384,7 +1384,7 @@ public: /* Create us ourselves a quick lookup table */ NWidgetBase *widgets[WID_TN_END]; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { if (child_wid->type == NWID_SPACER) continue; widgets[((NWidgetCore*)child_wid)->index] = child_wid; } @@ -1403,7 +1403,7 @@ public: /* If we have to give space to the spacers, do that */ if (spacer_space != 0) { NWidgetBase *possible_spacer = rtl ? child_wid->next : child_wid->prev; - if (possible_spacer != NULL && possible_spacer->type == NWID_SPACER) { + if (possible_spacer != nullptr && possible_spacer->type == NWID_SPACER) { uint add = spacer_space / (spacer_count - spacer_i); position += add; spacer_space -= add; @@ -1435,7 +1435,7 @@ public: GfxFillRect(this->pos_x, this->pos_y, this->pos_x + this->current_x - 1, this->pos_y + this->current_y - 1, PC_DARK_RED, FILLRECT_CHECKER); bool rtl = _current_text_dir == TD_RTL; - for (NWidgetBase *child_wid = rtl ? this->tail : this->head; child_wid != NULL; child_wid = rtl ? child_wid->prev : child_wid->next) { + for (NWidgetBase *child_wid = rtl ? this->tail : this->head; child_wid != nullptr; child_wid = rtl ? child_wid->prev : child_wid->next) { if (child_wid->type == NWID_SPACER) continue; if (!this->visible[((NWidgetCore*)child_wid)->index]) continue; @@ -1445,16 +1445,16 @@ public: NWidgetCore *GetWidgetFromPos(int x, int y) override { - if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { if (child_wid->type == NWID_SPACER) continue; if (!this->visible[((NWidgetCore*)child_wid)->index]) continue; NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y); - if (nwid != NULL) return nwid; + if (nwid != nullptr) return nwid; } - return NULL; + return nullptr; } /** @@ -1799,7 +1799,7 @@ class NWidgetScenarioToolbarContainer : /* Find the size of panel_widths */ uint i = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { if (child_wid->type == NWID_SPACER || this->IsButton(child_wid->type)) continue; assert(i < lengthof(this->panel_widths)); @@ -2133,7 +2133,7 @@ struct MainToolbarWindow : Window { void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; - if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT); + if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT); } static HotkeyList hotkeys; @@ -2247,7 +2247,7 @@ static const NWidgetPart _nested_toolbar }; static WindowDesc _toolb_normal_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_MAIN_TOOLBAR, WC_NONE, WDF_NO_FOCUS, _nested_toolbar_normal_widgets, lengthof(_nested_toolbar_normal_widgets), @@ -2277,15 +2277,15 @@ static ToolbarButtonProc * const _scen_t ToolbarScenPlantTrees, ToolbarScenPlaceSign, ToolbarBtn_NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, ToolbarMusicClick, - NULL, + nullptr, ToolbarHelpClick, ToolbarSwitchClick, }; @@ -2479,13 +2479,13 @@ struct ScenarioEditorToolbarWindow : Win void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; - if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT); + if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT); } void OnQueryTextFinished(char *str) override { /* Was 'cancel' pressed? */ - if (str == NULL) return; + if (str == nullptr) return; int32 value; if (!StrEmpty(str)) { @@ -2573,7 +2573,7 @@ static const NWidgetPart _nested_toolb_s }; static WindowDesc _toolb_scen_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_MAIN_TOOLBAR, WC_NONE, WDF_NO_FOCUS, _nested_toolb_scen_widgets, lengthof(_nested_toolb_scen_widgets), diff --git a/src/town.h b/src/town.h --- a/src/town.h +++ b/src/town.h @@ -61,7 +61,7 @@ struct Town : TownPool::PoolItem<&_town_ uint32 townnamegrfid; uint16 townnametype; uint32 townnameparts; - char *name; ///< Custom town name. If NULL, the town was not renamed and uses the generated name. + char *name; ///< Custom town name. If nullptr, the town was not renamed and uses the generated name. byte flags; ///< See #TownFlags. @@ -233,7 +233,7 @@ template void MakeDefaultName(T *obj) { /* We only want to set names if it hasn't been set before, or when we're calling from afterload. */ - assert(obj->name == NULL || obj->town_cn == UINT16_MAX); + assert(obj->name == nullptr || obj->town_cn == UINT16_MAX); obj->town = ClosestTownFromTile(obj->xy, UINT_MAX); @@ -257,7 +257,7 @@ void MakeDefaultName(T *obj) T *lobj = T::GetIfValid(cid); /* check only valid waypoints... */ - if (lobj != NULL && obj != lobj) { + if (lobj != nullptr && obj != lobj) { /* only objects within the same city and with the same type */ if (lobj->town == obj->town && lobj->IsOfType(obj)) { /* if lobj->town_cn < next, uint will overflow to '+inf' */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -163,7 +163,7 @@ void Town::PostDestructor(size_t index) /* Give objects a new home! */ Object *o; FOR_ALL_OBJECTS(o) { - if (o->town == NULL) o->town = CalcClosestTownFromTile(o->location.tile, UINT_MAX); + if (o->town == nullptr) o->town = CalcClosestTownFromTile(o->location.tile, UINT_MAX); } } @@ -182,11 +182,11 @@ void Town::InitializeLayout(TownLayout l /** * Return a random valid town. - * @return random town, NULL if there are no towns + * @return random town, nullptr if there are no towns */ /* static */ Town *Town::GetRandom() { - if (Town::GetNumItems() == 0) return NULL; + if (Town::GetNumItems() == 0) return nullptr; int num = RandomRange((uint16)Town::GetNumItems()); size_t index = MAX_UVALUE(size_t); @@ -259,7 +259,7 @@ static void DrawTile_Town(TileInfo *ti) /* Houses don't necessarily need new graphics. If they don't have a * spritegroup associated with them, then the sprite for the substitute * house id is drawn instead. */ - if (HouseSpec::Get(house_id)->grf_prop.spritegroup[0] != NULL) { + if (HouseSpec::Get(house_id)->grf_prop.spritegroup[0] != nullptr) { DrawNewHouseTile(ti, house_id); return; } else { @@ -316,7 +316,7 @@ static Foundation GetFoundation_Town(Til */ if (hid >= NEW_HOUSE_OFFSET) { const HouseSpec *hs = HouseSpec::Get(hid); - if (hs->grf_prop.spritegroup[0] != NULL && HasBit(hs->callback_mask, CBM_HOUSE_DRAW_FOUNDATIONS)) { + if (hs->grf_prop.spritegroup[0] != nullptr && HasBit(hs->callback_mask, CBM_HOUSE_DRAW_FOUNDATIONS)) { uint32 callback_res = GetHouseCallback(CBID_HOUSE_DRAW_FOUNDATIONS, 0, 0, hid, Town::GetByTile(tile), tile); if (callback_res != CALLBACK_FAILED && !ConvertBooleanCallback(hs->grf_prop.grffile, CBID_HOUSE_DRAW_FOUNDATIONS, callback_res)) return FOUNDATION_NONE; } @@ -752,7 +752,7 @@ static void GetTileDesc_Town(TileIndex t td->str = STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION; } - if (hs->grf_prop.grffile != NULL) { + if (hs->grf_prop.grffile != nullptr) { const GRFConfig *gc = GetGRFConfig(hs->grf_prop.grffile->grfid); td->grf = gc->GetName(); } @@ -1683,12 +1683,12 @@ static void DoCreateTown(Town *t, TileIn /* Set the default cargo requirement for town growth */ switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != NULL) t->goal[TE_FOOD] = TOWN_GROWTH_WINTER; + if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_WINTER; break; case LT_TROPIC: - if (FindFirstCargoWithTownEffect(TE_FOOD) != NULL) t->goal[TE_FOOD] = TOWN_GROWTH_DESERT; - if (FindFirstCargoWithTownEffect(TE_WATER) != NULL) t->goal[TE_WATER] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownEffect(TE_FOOD) != nullptr) t->goal[TE_FOOD] = TOWN_GROWTH_DESERT; + if (FindFirstCargoWithTownEffect(TE_WATER) != nullptr) t->goal[TE_WATER] = TOWN_GROWTH_DESERT; break; } @@ -1776,7 +1776,7 @@ static bool IsUniqueTownName(const char const Town *t; FOR_ALL_TOWNS(t) { - if (t->name != NULL && strcmp(t->name, name) == 0) return false; + if (t->name != nullptr && strcmp(t->name, name) == 0) return false; } return true; @@ -1857,7 +1857,7 @@ CommandCost CmdFoundTown(TileIndex tile, Town *t; if (random) { t = CreateRandomTown(20, townnameparts, size, city, layout); - if (t == NULL) { + if (t == nullptr) { cost = CommandCost(STR_ERROR_NO_SPACE_FOR_TOWN); } else { _new_town_id = t->index; @@ -1869,13 +1869,13 @@ CommandCost CmdFoundTown(TileIndex tile, UpdateNearestTownForRoadTiles(false); old_generating_world.Restore(); - if (t != NULL && !StrEmpty(text)) { + if (t != nullptr && !StrEmpty(text)) { t->name = stredup(text); t->UpdateVirtCoord(); } if (_game_mode != GM_EDITOR) { - /* 't' can't be NULL since 'random' is false outside scenedit */ + /* 't' can't be nullptr since 'random' is false outside scenedit */ assert(!random); if (_current_company == OWNER_DEITY) { @@ -2004,7 +2004,7 @@ static TileIndex FindNearestGoodCoastalT SpotData sp = { INVALID_TILE, 0, layout }; TileIndex coast = tile; - if (CircularTileSearch(&coast, 40, FindNearestEmptyLand, NULL)) { + if (CircularTileSearch(&coast, 40, FindNearestEmptyLand, nullptr)) { CircularTileSearch(&coast, 10, FindFurthestFromWater, &sp); return sp.tile; } @@ -2017,7 +2017,7 @@ static Town *CreateRandomTown(uint attem { assert(_game_mode == GM_EDITOR || _generating_world); // These are the preconditions for CMD_DELETE_TOWN - if (!Town::CanAllocateItem()) return NULL; + if (!Town::CanAllocateItem()) return nullptr; do { /* Generate a tile index not too close from the edge */ @@ -2054,7 +2054,7 @@ static Town *CreateRandomTown(uint attem assert(Town::CanAllocateItem()); } while (--attempts != 0); - return NULL; + return nullptr; } static const byte _num_initial_towns[4] = {5, 11, 23, 46}; // very low, low, normal, high @@ -2086,7 +2086,7 @@ bool GenerateTowns(TownLayout layout) /* Get a unique name for the town. */ if (!GenerateTownName(&townnameparts, &town_names)) continue; /* try 20 times to create a random-sized town for the first loop. */ - if (CreateRandomTown(20, townnameparts, TSZ_RANDOM, city, layout) != NULL) current_number++; // If creation was successful, raise a flag. + if (CreateRandomTown(20, townnameparts, TSZ_RANDOM, city, layout) != nullptr) current_number++; // If creation was successful, raise a flag. } while (--total); town_names.clear(); @@ -2099,7 +2099,7 @@ bool GenerateTowns(TownLayout layout) /* If current_number is still zero at this point, it means that not a single town has been created. * So give it a last try, but now more aggressive */ if (GenerateTownName(&townnameparts) && - CreateRandomTown(10000, townnameparts, TSZ_RANDOM, _settings_game.economy.larger_towns != 0, layout) != NULL) { + CreateRandomTown(10000, townnameparts, TSZ_RANDOM, _settings_game.economy.larger_towns != 0, layout) != nullptr) { return true; } @@ -2608,7 +2608,7 @@ void ClearTownHouse(Town *t, TileIndex t CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Town *t = Town::GetIfValid(p1); - if (t == NULL) return CMD_ERROR; + if (t == nullptr) return CMD_ERROR; bool reset = StrEmpty(text); @@ -2619,7 +2619,7 @@ CommandCost CmdRenameTown(TileIndex tile if (flags & DC_EXEC) { free(t->name); - t->name = reset ? NULL : stredup(text); + t->name = reset ? nullptr : stredup(text); t->UpdateVirtCoord(); InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1); @@ -2639,7 +2639,7 @@ const CargoSpec *FindFirstCargoWithTownE FOR_ALL_CARGOSPECS(cs) { if (cs->town_effect == effect) return cs; } - return NULL; + return nullptr; } /** @@ -2662,11 +2662,11 @@ CommandCost CmdTownCargoGoal(TileIndex t uint16 index = GB(p1, 0, 16); Town *t = Town::GetIfValid(index); - if (t == NULL) return CMD_ERROR; + if (t == nullptr) return CMD_ERROR; /* Validate if there is a cargo which is the requested TownEffect */ const CargoSpec *cargo = FindFirstCargoWithTownEffect(te); - if (cargo == NULL) return CMD_ERROR; + if (cargo == nullptr) return CMD_ERROR; if (flags & DC_EXEC) { t->goal[te] = p2; @@ -2690,11 +2690,11 @@ CommandCost CmdTownSetText(TileIndex til { if (_current_company != OWNER_DEITY) return CMD_ERROR; Town *t = Town::GetIfValid(p1); - if (t == NULL) return CMD_ERROR; + if (t == nullptr) return CMD_ERROR; if (flags & DC_EXEC) { free(t->text); - t->text = StrEmpty(text) ? NULL : stredup(text); + t->text = StrEmpty(text) ? nullptr : stredup(text); InvalidateWindowData(WC_TOWN_VIEW, p1); } @@ -2716,7 +2716,7 @@ CommandCost CmdTownGrowthRate(TileIndex if (GB(p2, 16, 16) != 0) return CMD_ERROR; Town *t = Town::GetIfValid(p1); - if (t == NULL) return CMD_ERROR; + if (t == nullptr) return CMD_ERROR; if (flags & DC_EXEC) { if (p2 == 0) { @@ -2754,7 +2754,7 @@ CommandCost CmdExpandTown(TileIndex tile { if (_game_mode != GM_EDITOR && _current_company != OWNER_DEITY) return CMD_ERROR; Town *t = Town::GetIfValid(p1); - if (t == NULL) return CMD_ERROR; + if (t == nullptr) return CMD_ERROR; if (flags & DC_EXEC) { /* The more houses, the faster we grow */ @@ -2794,7 +2794,7 @@ CommandCost CmdDeleteTown(TileIndex tile { if (_game_mode != GM_EDITOR && !_generating_world) return CMD_ERROR; Town *t = Town::GetIfValid(p1); - if (t == NULL) return CMD_ERROR; + if (t == nullptr) return CMD_ERROR; /* Stations refer to towns. */ const Station *st; @@ -2853,7 +2853,7 @@ CommandCost CmdDeleteTown(TileIndex tile try_clear = true; } else { /* Tell to find a new town. */ - if (flags & DC_EXEC) o->town = NULL; + if (flags & DC_EXEC) o->town = nullptr; } } } @@ -3124,7 +3124,7 @@ static TownActionProc * const _town_acti /** * Get a list of available actions to do at a town. - * @param nump if not NULL add put the number of available actions in it + * @param nump if not nullptr add put the number of available actions in it * @param cid the company that is querying the town * @param t the town that is queried * @return bitmasked value of enabled actions @@ -3167,7 +3167,7 @@ uint GetMaskOfTownActions(int *nump, Com } } - if (nump != NULL) *nump = num; + if (nump != nullptr) *nump = num; return buttons; } @@ -3185,9 +3185,9 @@ uint GetMaskOfTownActions(int *nump, Com CommandCost CmdDoTownAction(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Town *t = Town::GetIfValid(p1); - if (t == NULL || p2 >= lengthof(_town_action_proc)) return CMD_ERROR; - - if (!HasBit(GetMaskOfTownActions(NULL, _current_company, t), p2)) return CMD_ERROR; + if (t == nullptr || p2 >= lengthof(_town_action_proc)) return CMD_ERROR; + + if (!HasBit(GetMaskOfTownActions(nullptr, _current_company, t), p2)) return CMD_ERROR; CommandCost cost(EXPENSES_OTHER, _price[PR_TOWN_ACTION] * _town_action_costs[p2] >> 8); @@ -3389,7 +3389,7 @@ CommandCost CheckIfAuthorityAllowsNewSta if (!Company::IsValidID(_current_company) || (flags & DC_NO_TEST_TOWN_RATING)) return CommandCost(); Town *t = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority); - if (t == NULL) return CommandCost(); + if (t == nullptr) return CommandCost(); if (t->ratings[_current_company] > RATING_VERYPOOR) return CommandCost(); @@ -3401,25 +3401,25 @@ CommandCost CheckIfAuthorityAllowsNewSta * Return the town closest to the given tile within \a threshold. * @param tile Starting point of the search. * @param threshold Biggest allowed distance to the town. - * @return Closest town to \a tile within \a threshold, or \c NULL if there is no such town. + * @return Closest town to \a tile within \a threshold, or \c nullptr if there is no such town. * * @note This function only uses distance, the #ClosestTownFromTile function also takes town ownership into account. */ Town *CalcClosestTownFromTile(TileIndex tile, uint threshold) { - if (Town::GetNumItems() == 0) return NULL; + if (Town::GetNumItems() == 0) return nullptr; TownID tid = _town_kdtree.FindNearest(TileX(tile), TileY(tile)); Town *town = Town::Get(tid); if (DistanceManhattan(tile, town->xy) < threshold) return town; - return NULL; + return nullptr; } /** * Return the town closest (in distance or ownership) to a given tile, within a given threshold. * @param tile Starting point of the search. * @param threshold Biggest allowed distance to the town. - * @return Closest town to \a tile within \a threshold, or \c NULL if there is no such town. + * @return Closest town to \a tile within \a threshold, or \c nullptr if there is no such town. * * @note If you only care about distance, you can use the #CalcClosestTownFromTile function. */ @@ -3436,13 +3436,13 @@ Town *ClosestTownFromTile(TileIndex tile /* in the case we are generating "many random towns", this value may be INVALID_TOWN */ if (_generating_world) return CalcClosestTownFromTile(tile, threshold); assert(Town::GetNumItems() == 0); - return NULL; + return nullptr; } assert(Town::IsValidID(tid)); Town *town = Town::Get(tid); - if (DistanceManhattan(tile, town->xy) >= threshold) town = NULL; + if (DistanceManhattan(tile, town->xy) >= threshold) town = nullptr; return town; } @@ -3505,7 +3505,7 @@ static int GetRating(const Town *t) void ChangeTownRating(Town *t, int add, int max, DoCommandFlag flags) { /* if magic_bulldozer cheat is active, town doesn't penalize for removing stuff */ - if (t == NULL || (flags & DC_NO_MODIFY_TOWN_RATING) || + if (t == nullptr || (flags & DC_NO_MODIFY_TOWN_RATING) || !Company::IsValidID(_current_company) || (_cheats.magic_bulldozer.value && add < 0)) { return; @@ -3542,7 +3542,7 @@ void ChangeTownRating(Town *t, int add, CommandCost CheckforTownRating(DoCommandFlag flags, Town *t, TownRatingCheckType type) { /* if magic_bulldozer cheat is active, town doesn't restrict your destructive actions */ - if (t == NULL || !Company::IsValidID(_current_company) || + if (t == nullptr || !Company::IsValidID(_current_company) || _cheats.magic_bulldozer.value || (flags & DC_NO_TEST_TOWN_RATING)) { return CommandCost(); } @@ -3635,12 +3635,12 @@ extern const TileTypeProcs _tile_type_to AddAcceptedCargo_Town, // add_accepted_cargo_proc GetTileDesc_Town, // get_tile_desc_proc GetTileTrackStatus_Town, // get_tile_track_status_proc - NULL, // click_tile_proc + nullptr, // click_tile_proc AnimateTile_Town, // animate_tile_proc TileLoop_Town, // tile_loop_proc ChangeTileOwner_Town, // change_tile_owner_proc AddProducedCargo_Town, // add_produced_cargo_proc - NULL, // vehicle_enter_tile_proc + nullptr, // vehicle_enter_tile_proc GetFoundation_Town, // get_foundation_proc TerraformTile_Town, // terraform_tile_proc }; diff --git a/src/town_gui.cpp b/src/town_gui.cpp --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -261,7 +261,7 @@ public: int y = this->GetRowFromWidget(pt.y, WID_TA_COMMAND_LIST, 1, FONT_HEIGHT_NORMAL); if (!IsInsideMM(y, 0, 5)) return; - y = GetNthSetBit(GetMaskOfTownActions(NULL, _local_company, this->town), y + this->vscroll->GetPosition() - 1); + y = GetNthSetBit(GetMaskOfTownActions(nullptr, _local_company, this->town), y + this->vscroll->GetPosition() - 1); if (y >= 0) { this->sel_index = y; this->SetDirty(); @@ -362,7 +362,7 @@ public: uint cargo_text_right = r.right - WD_FRAMERECT_RIGHT - (rtl ? 20 : 0); const CargoSpec *cargo = FindFirstCargoWithTownEffect((TownEffect)i); - assert(cargo != NULL); + assert(cargo != nullptr); StringID string; @@ -406,7 +406,7 @@ public: DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, y += FONT_HEIGHT_NORMAL, STR_TOWN_VIEW_NOISE_IN_TOWN); } - if (this->town->text != NULL) { + if (this->town->text != nullptr) { SetDParamStr(0, this->town->text); DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y += FONT_HEIGHT_NORMAL, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK); } @@ -484,7 +484,7 @@ public: if (_settings_game.economy.station_noise_level) aimed_height += FONT_HEIGHT_NORMAL; - if (this->town->text != NULL) { + if (this->town->text != nullptr) { SetDParamStr(0, this->town->text); aimed_height += GetStringHeight(STR_JUST_RAW_STRING, width - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT); } @@ -503,7 +503,7 @@ public: void OnResize() override { - if (this->viewport != NULL) { + if (this->viewport != nullptr) { NWidgetViewport *nvp = this->GetWidget(WID_TV_VIEWPORT); nvp->UpdateViewportCoordinates(this); @@ -526,9 +526,9 @@ public: void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; - DoCommandP(0, this->window_number, 0, CMD_RENAME_TOWN | CMD_MSG(STR_ERROR_CAN_T_RENAME_TOWN), NULL, str); + DoCommandP(0, this->window_number, 0, CMD_RENAME_TOWN | CMD_MSG(STR_ERROR_CAN_T_RENAME_TOWN), nullptr, str); } }; @@ -662,7 +662,7 @@ private: this->vscroll->SetCount((uint)this->towns.size()); // Update scrollbar as well. } /* Always sort the towns. */ - this->last_town = NULL; + this->last_town = nullptr; this->towns.Sort(); this->SetWidgetDirty(WID_TD_LIST); // Force repaint of the displayed towns. } @@ -829,7 +829,7 @@ public: for (uint i = 0; i < this->towns.size(); i++) { const Town *t = this->towns[i]; - assert(t != NULL); + assert(t != nullptr); SetDParam(0, t->index); SetDParamMaxDigits(1, 8); @@ -882,7 +882,7 @@ public: if (id_v >= this->towns.size()) return; // click out of town bounds const Town *t = this->towns[id_v]; - assert(t != NULL); + assert(t != nullptr); if (_ctrl_pressed) { ShowExtraViewPortWindow(t->xy); } else { @@ -938,7 +938,7 @@ public: }; Listing TownDirectoryWindow::last_sorting = {false, 0}; -const Town *TownDirectoryWindow::last_town = NULL; +const Town *TownDirectoryWindow::last_town = nullptr; /** Names of the sorting functions. */ const StringID TownDirectoryWindow::sorter_names[] = { @@ -1111,7 +1111,7 @@ public: void ExecuteFoundTownCommand(TileIndex tile, bool random, StringID errstr, CommandCallback cc) { - const char *name = NULL; + const char *name = nullptr; if (!this->townnamevalid) { name = this->townname_editbox.text.buf; diff --git a/src/townname.cpp b/src/townname.cpp --- a/src/townname.cpp +++ b/src/townname.cpp @@ -31,7 +31,7 @@ TownNameParams::TownNameParams(const Tow grfid(t->townnamegrfid), // by default, use supplied data type(t->townnametype) { - if (t->townnamegrfid != 0 && GetGRFTownName(t->townnamegrfid) == NULL) { + if (t->townnamegrfid != 0 && GetGRFTownName(t->townnamegrfid) == nullptr) { /* Fallback to english original */ this->grfid = 0; this->type = SPECSTR_TOWNNAME_ENGLISH; @@ -92,7 +92,7 @@ bool VerifyTownName(uint32 r, const Town /* Check size and width */ if (Utf8StringLength(buf1) >= MAX_LENGTH_TOWN_NAME_CHARS) return false; - if (town_names != NULL) { + if (town_names != nullptr) { if (town_names->find(buf1) != town_names->end()) return false; town_names->insert(buf1); } else { @@ -101,7 +101,7 @@ bool VerifyTownName(uint32 r, const Town /* We can't just compare the numbers since * several numbers may map to a single name. */ const char *buf = t->name; - if (buf == NULL) { + if (buf == nullptr) { GetTownName(buf2, t, lastof(buf2)); buf = buf2; } @@ -504,8 +504,8 @@ static char *MakeFinnishTownName(char *b char *end = buf - 1; assert(end >= orig); if (*end == 'i') *end = 'e'; - if (strstr(orig, "a") != NULL || strstr(orig, "o") != NULL || strstr(orig, "u") != NULL || - strstr(orig, "A") != NULL || strstr(orig, "O") != NULL || strstr(orig, "U") != NULL) { + if (strstr(orig, "a") != nullptr || strstr(orig, "o") != nullptr || strstr(orig, "u") != nullptr || + strstr(orig, "A") != nullptr || strstr(orig, "O") != nullptr || strstr(orig, "U") != nullptr) { buf = strecpy(buf, "la", last); } else { buf = strecpy(buf, "l\xC3\xA4", last); diff --git a/src/townname_func.h b/src/townname_func.h --- a/src/townname_func.h +++ b/src/townname_func.h @@ -17,7 +17,7 @@ char *GenerateTownNameString(char *buf, const char *last, size_t lang, uint32 seed); char *GetTownName(char *buff, const TownNameParams *par, uint32 townnameparts, const char *last); char *GetTownName(char *buff, const Town *t, const char *last); -bool VerifyTownName(uint32 r, const TownNameParams *par, TownNames *town_names = NULL); -bool GenerateTownName(uint32 *townnameparts, TownNames *town_names = NULL); +bool VerifyTownName(uint32 r, const TownNameParams *par, TownNames *town_names = nullptr); +bool GenerateTownName(uint32 *townnameparts, TownNames *town_names = nullptr); #endif /* TOWNNAME_FUNC_H */ diff --git a/src/train.h b/src/train.h --- a/src/train.h +++ b/src/train.h @@ -118,7 +118,7 @@ struct Train FINAL : public GroundVehicl int GetDisplaySpeed() const { return this->gcache.last_speed; } int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed; } Money GetRunningCost() const; - int GetDisplayImageWidth(Point *offset = NULL) const; + int GetDisplayImageWidth(Point *offset = nullptr) const; bool IsInDepot() const { return this->track == TRACK_BIT_DEPOT; } bool Tick(); void OnNewDay(); @@ -146,7 +146,7 @@ struct Train FINAL : public GroundVehicl inline Train *GetNextUnit() const { Train *v = this->GetNextVehicle(); - if (v != NULL && v->IsRearDualheaded()) v = v->GetNextVehicle(); + if (v != nullptr && v->IsRearDualheaded()) v = v->GetNextVehicle(); return v; } @@ -158,7 +158,7 @@ struct Train FINAL : public GroundVehicl inline Train *GetPrevUnit() { Train *v = this->GetPrevVehicle(); - if (v != NULL && v->IsRearDualheaded()) v = v->GetPrevVehicle(); + if (v != nullptr && v->IsRearDualheaded()) v = v->GetPrevVehicle(); return v; } @@ -173,7 +173,7 @@ struct Train FINAL : public GroundVehicl * longer than the part after the center. This means we have to round up the * length of the next vehicle but may not round the length of the current * vehicle. */ - return this->gcache.cached_veh_length / 2 + (this->Next() != NULL ? this->Next()->gcache.cached_veh_length + 1 : 0) / 2; + return this->gcache.cached_veh_length / 2 + (this->Next() != nullptr ? this->Next()->gcache.cached_veh_length + 1 : 0) / 2; } protected: // These functions should not be called outside acceleration code. diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -78,7 +78,7 @@ void CheckTrainsLengths() FOR_ALL_TRAINS(v) { if (v->First() == v && !(v->vehstatus & VS_CRASHED)) { - for (const Train *u = v, *w = v->Next(); w != NULL; u = w, w = w->Next()) { + for (const Train *u = v, *w = v->Next(); w != nullptr; u = w, w = w->Next()) { if (u->track != TRACK_BIT_DEPOT) { if ((w->track != TRACK_BIT_DEPOT && max(abs(u->x_pos - w->x_pos), abs(u->y_pos - w->y_pos)) != u->CalcNextVehicleOffset()) || @@ -119,7 +119,7 @@ void Train::ConsistChanged(ConsistChange bool train_can_tilt = true; - for (Train *u = this; u != NULL; u = u->Next()) { + for (Train *u = this; u != nullptr; u = u->Next()) { const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type); /* Check the this->first cache. */ @@ -137,20 +137,20 @@ void Train::ConsistChanged(ConsistChange u->InvalidateNewGRFCache(); } - for (Train *u = this; u != NULL; u = u->Next()) { + for (Train *u = this; u != nullptr; u = u->Next()) { /* Update user defined data (must be done before other properties) */ u->tcache.user_def_data = GetVehicleProperty(u, PROP_TRAIN_USER_DATA, u->tcache.user_def_data); this->InvalidateNewGRFCache(); u->InvalidateNewGRFCache(); } - for (Train *u = this; u != NULL; u = u->Next()) { + for (Train *u = this; u != nullptr; u = u->Next()) { const Engine *e_u = u->GetEngine(); const RailVehicleInfo *rvi_u = &e_u->u.rail; if (!HasBit(e_u->info.misc_flags, EF_RAIL_TILTS)) train_can_tilt = false; - /* Cache wagon override sprite group. NULL is returned if there is none */ + /* Cache wagon override sprite group. nullptr is returned if there is none */ u->tcache.cached_override = GetWagonOverrideSpriteSet(u->engine_type, u->cargo_type, u->gcache.first_engine); /* Reset colour map */ @@ -202,7 +202,7 @@ void Train::ConsistChanged(ConsistChange /* check the vehicle length (callback) */ uint16 veh_len = CALLBACK_FAILED; - if (e_u->GetGRF() != NULL && e_u->GetGRF()->grf_version >= 8) { + if (e_u->GetGRF() != nullptr && e_u->GetGRF()->grf_version >= 8) { /* Use callback 36 */ veh_len = GetVehicleProperty(u, PROP_TRAIN_SHORTEN_FACTOR, CALLBACK_FAILED); @@ -316,7 +316,7 @@ int Train::GetCurveSpeedLimit() const int sum = 0; int pos = 0; int lastpos = -1; - for (const Vehicle *u = this; u->Next() != NULL; u = u->Next(), pos++) { + for (const Vehicle *u = this; u->Next() != nullptr; u = u->Next(), pos++) { Direction this_dir = u->direction; Direction next_dir = u->Next()->direction; @@ -400,7 +400,7 @@ int Train::GetCurrentMaxSpeed() const } } - for (const Train *u = this; u != NULL; u = u->Next()) { + for (const Train *u = this; u != nullptr; u = u->Next()) { if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC && u->track == TRACK_BIT_DEPOT) { max_speed = min(max_speed, 61); break; @@ -429,7 +429,7 @@ void Train::UpdateAcceleration() /** * Get the width of a train vehicle image in the GUI. - * @param offset Additional offset for positioning the sprite; set to NULL if not needed + * @param offset Additional offset for positioning the sprite; set to nullptr if not needed * @return Width in pixels */ int Train::GetDisplayImageWidth(Point *offset) const @@ -438,12 +438,12 @@ int Train::GetDisplayImageWidth(Point *o int vehicle_pitch = 0; const Engine *e = this->GetEngine(); - if (e->GetGRF() != NULL && is_custom_sprite(e->u.rail.image_index)) { + if (e->GetGRF() != nullptr && is_custom_sprite(e->u.rail.image_index)) { reference_width = e->GetGRF()->traininfo_vehicle_width; vehicle_pitch = e->GetGRF()->traininfo_vehicle_pitch; } - if (offset != NULL) { + if (offset != nullptr) { offset->x = ScaleGUITrad(reference_width) / 2; offset->y = ScaleGUITrad(vehicle_pitch); } @@ -492,7 +492,7 @@ static void GetRailIcon(EngineID engine, if (is_custom_sprite(spritenum)) { GetCustomVehicleIcon(engine, dir, image_type, result); if (result->IsValid()) { - if (e->GetGRF() != NULL) { + if (e->GetGRF() != nullptr) { y += ScaleGUITrad(e->GetGRF()->traininfo_vehicle_pitch); } return; @@ -805,12 +805,12 @@ static Train *FindGoodVehiclePos(const T Train *t = dst; while (t->engine_type == eng) { t = t->Next(); - if (t == NULL) return dst; + if (t == nullptr) return dst; } } } - return NULL; + return nullptr; } /** Helper type for lists/vectors of trains */ @@ -823,7 +823,7 @@ typedef std::vector TrainList; */ static void MakeTrainBackup(TrainList &list, Train *t) { - for (; t != NULL; t = t->Next()) list.push_back(t); + for (; t != nullptr; t = t->Next()) list.push_back(t); } /** @@ -835,14 +835,14 @@ static void RestoreTrainBackup(TrainList /* No train, nothing to do. */ if (list.size() == 0) return; - Train *prev = NULL; + Train *prev = nullptr; /* Iterate over the list and rebuild it. */ for (Train *t : list) { - if (prev != NULL) { + if (prev != nullptr) { prev->SetNext(t); - } else if (t->Previous() != NULL) { + } else if (t->Previous() != nullptr) { /* Make sure the head of the train is always the first in the chain. */ - t->Previous()->SetNext(NULL); + t->Previous()->SetNext(nullptr); } prev = t; } @@ -859,10 +859,10 @@ static void RemoveFromConsist(Train *par /* Unlink at the front, but make it point to the next * vehicle after the to be remove part. */ - if (part->Previous() != NULL) part->Previous()->SetNext(tail->Next()); + if (part->Previous() != nullptr) part->Previous()->SetNext(tail->Next()); /* Unlink at the back */ - tail->SetNext(NULL); + tail->SetNext(nullptr); } /** @@ -873,7 +873,7 @@ static void RemoveFromConsist(Train *par static void InsertInConsist(Train *dst, Train *chain) { /* We do not want to add something in the middle of an articulated part. */ - assert(dst != NULL && (dst->Next() == NULL || !dst->Next()->IsArticulatedPart())); + assert(dst != nullptr && (dst->Next() == nullptr || !dst->Next()->IsArticulatedPart())); chain->Last()->SetNext(dst->Next()); dst->SetNext(chain); @@ -886,12 +886,12 @@ static void InsertInConsist(Train *dst, */ static void NormaliseDualHeads(Train *t) { - for (; t != NULL; t = t->GetNextVehicle()) { + for (; t != nullptr; t = t->GetNextVehicle()) { if (!t->IsMultiheaded() || !t->IsEngine()) continue; /* Make sure that there are no free cars before next engine */ Train *u; - for (u = t; u->Next() != NULL && !u->Next()->IsEngine(); u = u->Next()) {} + for (u = t; u->Next() != nullptr && !u->Next()->IsEngine(); u = u->Next()) {} if (u == t->other_multiheaded_part) continue; @@ -909,10 +909,10 @@ static void NormaliseDualHeads(Train *t) static void NormaliseSubtypes(Train *chain) { /* Nothing to do */ - if (chain == NULL) return; + if (chain == nullptr) return; /* We must be the first in the chain. */ - assert(chain->Previous() == NULL); + assert(chain->Previous() == nullptr); /* Set the appropriate bits for the first in the chain. */ if (chain->IsWagon()) { @@ -923,7 +923,7 @@ static void NormaliseSubtypes(Train *cha } /* Now clear the bits for the rest of the chain */ - for (Train *t = chain->Next(); t != NULL; t = t->Next()) { + for (Train *t = chain->Next(); t != nullptr; t = t->Next()) { t->ClearFreeWagon(); t->ClearFrontEngine(); } @@ -943,10 +943,10 @@ static CommandCost CheckNewTrain(Train * /* Just add 'new' engines and subtract the original ones. * If that's less than or equal to 0 we can be sure we did * not add any engines (read: trains) along the way. */ - if ((src != NULL && src->IsEngine() ? 1 : 0) + - (dst != NULL && dst->IsEngine() ? 1 : 0) - - (original_src != NULL && original_src->IsEngine() ? 1 : 0) - - (original_dst != NULL && original_dst->IsEngine() ? 1 : 0) <= 0) { + if ((src != nullptr && src->IsEngine() ? 1 : 0) + + (dst != nullptr && dst->IsEngine() ? 1 : 0) - + (original_src != nullptr && original_src->IsEngine() ? 1 : 0) - + (original_dst != nullptr && original_dst->IsEngine() ? 1 : 0) <= 0) { return CommandCost(); } @@ -965,7 +965,7 @@ static CommandCost CheckNewTrain(Train * static CommandCost CheckTrainAttachment(Train *t) { /* No multi-part train, no need to check. */ - if (t == NULL || t->Next() == NULL || !t->IsEngine()) return CommandCost(); + if (t == nullptr || t->Next() == nullptr || !t->IsEngine()) return CommandCost(); /* The maximum length for a train. For each part we decrease this by one * and if the result is negative the train is simply too long. */ @@ -976,19 +976,19 @@ static CommandCost CheckTrainAttachment( /* Break the prev -> t link so it always holds within the loop. */ t = t->Next(); - prev->SetNext(NULL); + prev->SetNext(nullptr); /* Make sure the cache is cleared. */ head->InvalidateNewGRFCache(); - while (t != NULL) { + while (t != nullptr) { allowed_len -= t->gcache.cached_veh_length; Train *next = t->Next(); /* Unlink the to-be-added piece; it is already unlinked from the previous * part due to the fact that the prev -> t link is broken. */ - t->SetNext(NULL); + t->SetNext(nullptr); /* Don't check callback for articulated or rear dual headed parts */ if (!t->IsArticulatedPart() && !t->IsRearDualheaded()) { @@ -1084,8 +1084,8 @@ static void ArrangeTrains(Train **dst_he if (*src_head == *dst_head) { /* If we aren't moving part(s) to a new train, we are just moving the * front back and there is not destination head. */ - *dst_head = NULL; - } else if (*dst_head == NULL) { + *dst_head = nullptr; + } else if (*dst_head == nullptr) { /* If we are moving to a new train the head of the move train would become * the head of the new vehicle. */ *dst_head = src; @@ -1098,7 +1098,7 @@ static void ArrangeTrains(Train **dst_he * In case we are a multiheaded part we want the complete thing to come * with us, so src->GetNextUnit(), however... when we are e.g. a wagon * that is followed by a rear multihead we do not want to include that. */ - *src_head = move_chain ? NULL : + *src_head = move_chain ? nullptr : (src->IsMultiheaded() ? src->GetNextUnit() : src->GetNextVehicle()); } @@ -1122,7 +1122,7 @@ static void ArrangeTrains(Train **dst_he static void NormaliseTrainHead(Train *head) { /* Not much to do! */ - if (head == NULL) return; + if (head == nullptr) return; /* Tell the 'world' the train changed. */ head->ConsistChanged(CCF_ARRANGE); @@ -1159,7 +1159,7 @@ CommandCost CmdMoveRailVehicle(TileIndex bool move_chain = HasBit(p1, 20); Train *src = Train::GetIfValid(s); - if (src == NULL) return CMD_ERROR; + if (src == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(src->owner); if (ret.Failed()) return ret; @@ -1170,10 +1170,10 @@ CommandCost CmdMoveRailVehicle(TileIndex /* if nothing is selected as destination, try and find a matching vehicle to drag to. */ Train *dst; if (d == INVALID_VEHICLE) { - dst = src->IsEngine() ? NULL : FindGoodVehiclePos(src); + dst = src->IsEngine() ? nullptr : FindGoodVehiclePos(src); } else { dst = Train::GetIfValid(d); - if (dst == NULL) return CMD_ERROR; + if (dst == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(dst->owner); if (ret.Failed()) return ret; @@ -1184,7 +1184,7 @@ CommandCost CmdMoveRailVehicle(TileIndex /* if an articulated part is being handled, deal with its parent vehicle */ src = src->GetFirstEnginePart(); - if (dst != NULL) { + if (dst != nullptr) { dst = dst->GetFirstEnginePart(); } @@ -1194,13 +1194,13 @@ CommandCost CmdMoveRailVehicle(TileIndex /* locate the head of the two chains */ Train *src_head = src->First(); Train *dst_head; - if (dst != NULL) { + if (dst != nullptr) { dst_head = dst->First(); if (dst_head->tile != src_head->tile) return CMD_ERROR; /* Now deal with articulated part of destination wagon */ dst = dst->GetLastEnginePart(); } else { - dst_head = NULL; + dst_head = nullptr; } if (src->IsRearDualheaded()) return_cmd_error(STR_ERROR_REAR_ENGINE_FOLLOW_FRONT); @@ -1209,13 +1209,13 @@ CommandCost CmdMoveRailVehicle(TileIndex if (move_chain && src_head == dst_head) return CommandCost(); /* When moving a multiheaded part to be place after itself, bail out. */ - if (!move_chain && dst != NULL && dst->IsRearDualheaded() && src == dst->other_multiheaded_part) return CommandCost(); + if (!move_chain && dst != nullptr && dst->IsRearDualheaded() && src == dst->other_multiheaded_part) return CommandCost(); /* Check if all vehicles in the source train are stopped inside a depot. */ if (!src_head->IsStoppedInDepot()) return_cmd_error(STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT); /* Check if all vehicles in the destination train are stopped inside a depot. */ - if (dst_head != NULL && !dst_head->IsStoppedInDepot()) return_cmd_error(STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT); + if (dst_head != nullptr && !dst_head->IsStoppedInDepot()) return_cmd_error(STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT); /* First make a backup of the order of the trains. That way we can do * whatever we want with the order and later on easily revert. */ @@ -1229,13 +1229,13 @@ CommandCost CmdMoveRailVehicle(TileIndex * For the destination head we do not care if it is the same as the source * head because in that case it's just a copy. */ Train *original_src_head = src_head; - Train *original_dst_head = (dst_head == src_head ? NULL : dst_head); + Train *original_dst_head = (dst_head == src_head ? nullptr : dst_head); /* We want this information from before the rearrangement, but execute this after the validation. - * original_src_head can't be NULL; src is by definition != NULL, so src_head can't be NULL as - * src->GetFirst() always yields non-NULL, so eventually original_src_head != NULL as well. */ + * original_src_head can't be nullptr; src is by definition != nullptr, so src_head can't be nullptr as + * src->GetFirst() always yields non-nullptr, so eventually original_src_head != nullptr as well. */ bool original_src_head_front_engine = original_src_head->IsFrontEngine(); - bool original_dst_head_front_engine = original_dst_head != NULL && original_dst_head->IsFrontEngine(); + bool original_dst_head_front_engine = original_dst_head != nullptr && original_dst_head->IsFrontEngine(); /* (Re)arrange the trains in the wanted arrangement. */ ArrangeTrains(&dst_head, dst, &src_head, src, move_chain); @@ -1308,8 +1308,8 @@ CommandCost CmdMoveRailVehicle(TileIndex } /* Add new heads to statistics */ - if (src_head != NULL && src_head->IsFrontEngine()) GroupStatistics::CountVehicle(src_head, 1); - if (dst_head != NULL && dst_head->IsFrontEngine()) GroupStatistics::CountVehicle(dst_head, 1); + if (src_head != nullptr && src_head->IsFrontEngine()) GroupStatistics::CountVehicle(src_head, 1); + if (dst_head != nullptr && dst_head->IsFrontEngine()) GroupStatistics::CountVehicle(dst_head, 1); /* Handle 'new engine' part of cases #1b, #2b, #3b, #4b and #5 in NormaliseTrainHead. */ NormaliseTrainHead(src_head); @@ -1320,8 +1320,8 @@ CommandCost CmdMoveRailVehicle(TileIndex CheckCargoCapacity(dst_head); } - if (src_head != NULL) src_head->First()->MarkDirty(); - if (dst_head != NULL) dst_head->First()->MarkDirty(); + if (src_head != nullptr) src_head->First()->MarkDirty(); + if (dst_head != nullptr) dst_head->First()->MarkDirty(); /* We are undoubtedly changing something in the depot and train list. */ InvalidateWindowData(WC_VEHICLE_DEPOT, src->tile); @@ -1363,34 +1363,34 @@ CommandCost CmdSellRailWagon(DoCommandFl /* We need to keep track of the new head and the head of what we're going to sell. */ Train *new_head = first; - Train *sell_head = NULL; + Train *sell_head = nullptr; /* Split the train in the wanted way. */ - ArrangeTrains(&sell_head, NULL, &new_head, v, sell_chain); + ArrangeTrains(&sell_head, nullptr, &new_head, v, sell_chain); /* We don't need to validate the second train; it's going to be sold. */ - CommandCost ret = ValidateTrains(NULL, NULL, first, new_head, (flags & DC_AUTOREPLACE) == 0); + CommandCost ret = ValidateTrains(nullptr, nullptr, first, new_head, (flags & DC_AUTOREPLACE) == 0); if (ret.Failed()) { /* Restore the train we had. */ RestoreTrainBackup(original); return ret; } - if (first->orders.list == NULL && !OrderList::CanAllocateItem()) { + if (first->orders.list == nullptr && !OrderList::CanAllocateItem()) { /* Restore the train we had. */ RestoreTrainBackup(original); return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); } CommandCost cost(EXPENSES_NEW_VEHICLES); - for (Train *t = sell_head; t != NULL; t = t->Next()) cost.AddCost(-t->value); + for (Train *t = sell_head; t != nullptr; t = t->Next()) cost.AddCost(-t->value); /* do it? */ if (flags & DC_EXEC) { /* First normalise the sub types of the chain. */ NormaliseSubtypes(new_head); - if (v == first && v->IsEngine() && !sell_chain && new_head != NULL && new_head->IsFrontEngine()) { + if (v == first && v->IsEngine() && !sell_chain && new_head != nullptr && new_head->IsFrontEngine()) { /* We are selling the front engine. In this case we want to * 'give' the order, unit number and such to the new head. */ new_head->orders.list = first->orders.list; @@ -1618,11 +1618,11 @@ void ReverseTrainSwapVeh(Train *v, int l /** * Check if the vehicle is a train * @param v vehicle on tile - * @return v if it is a train, NULL otherwise + * @return v if it is a train, nullptr otherwise */ static Vehicle *TrainOnTileEnum(Vehicle *v, void *) { - return (v->type == VEH_TRAIN) ? v : NULL; + return (v->type == VEH_TRAIN) ? v : nullptr; } @@ -1630,18 +1630,18 @@ static Vehicle *TrainOnTileEnum(Vehicle * Checks if a train is approaching a rail-road crossing * @param v vehicle on tile * @param data tile with crossing we are testing - * @return v if it is approaching a crossing, NULL otherwise + * @return v if it is approaching a crossing, nullptr otherwise */ static Vehicle *TrainApproachingCrossingEnum(Vehicle *v, void *data) { - if (v->type != VEH_TRAIN || (v->vehstatus & VS_CRASHED)) return NULL; + if (v->type != VEH_TRAIN || (v->vehstatus & VS_CRASHED)) return nullptr; Train *t = Train::From(v); - if (!t->IsFrontEngine()) return NULL; + if (!t->IsFrontEngine()) return nullptr; TileIndex tile = *(TileIndex *)data; - if (TrainApproachingCrossingTile(t) != tile) return NULL; + if (TrainApproachingCrossingTile(t) != tile) return nullptr; return t; } @@ -1680,7 +1680,7 @@ void UpdateLevelCrossing(TileIndex tile, assert(IsLevelCrossingTile(tile)); /* reserved || train on crossing || train approaching crossing */ - bool new_state = HasCrossingReservation(tile) || HasVehicleOnPos(tile, NULL, &TrainOnTileEnum) || TrainApproachingCrossing(tile); + bool new_state = HasCrossingReservation(tile) || HasVehicleOnPos(tile, nullptr, &TrainOnTileEnum) || TrainApproachingCrossing(tile); if (new_state != IsCrossingBarred(tile)) { if (new_state && sound) { @@ -1744,23 +1744,23 @@ static void AdvanceWagonsAfterSwap(Train { /* first of all, fix the situation when the train was entering a depot */ Train *dep = v; // last vehicle in front of just left depot - while (dep->Next() != NULL && (dep->track == TRACK_BIT_DEPOT || dep->Next()->track != TRACK_BIT_DEPOT)) { + while (dep->Next() != nullptr && (dep->track == TRACK_BIT_DEPOT || dep->Next()->track != TRACK_BIT_DEPOT)) { dep = dep->Next(); // find first vehicle outside of a depot, with next vehicle inside a depot } Train *leave = dep->Next(); // first vehicle in a depot we are leaving now - if (leave != NULL) { + if (leave != nullptr) { /* 'pull' next wagon out of the depot, so we won't miss it (it could stay in depot forever) */ int d = TicksToLeaveDepot(dep); if (d <= 0) { leave->vehstatus &= ~VS_HIDDEN; // move it out of the depot leave->track = TrackToTrackBits(GetRailDepotTrack(leave->tile)); - for (int i = 0; i >= d; i--) TrainController(leave, NULL); // maybe move it, and maybe let another wagon leave + for (int i = 0; i >= d; i--) TrainController(leave, nullptr); // maybe move it, and maybe let another wagon leave } } else { - dep = NULL; // no vehicle in a depot, so no vehicle leaving a depot + dep = nullptr; // no vehicle in a depot, so no vehicle leaving a depot } Train *base = v; @@ -1770,7 +1770,7 @@ static void AdvanceWagonsAfterSwap(Train /* We have to make sure all wagons that leave a depot because of train reversing are moved correctly * they have already correct spacing, so we have to make sure they are moved how they should */ - bool nomove = (dep == NULL); // If there is no vehicle leaving a depot, limit the number of wagons moved immediately. + bool nomove = (dep == nullptr); // If there is no vehicle leaving a depot, limit the number of wagons moved immediately. while (length > 2) { /* we reached vehicle (originally) in front of a depot, stop now @@ -1786,7 +1786,7 @@ static void AdvanceWagonsAfterSwap(Train int differential = last->CalcNextVehicleOffset() - base->CalcNextVehicleOffset(); /* do not update images now */ - for (int i = 0; i < differential; i++) TrainController(first, (nomove ? last->Next() : NULL)); + for (int i = 0; i < differential; i++) TrainController(first, (nomove ? last->Next() : nullptr)); base = first; // == base->Next() length -= 2; @@ -1834,7 +1834,7 @@ void ReverseTrainDirection(Train *v) v->ConsistChanged(CCF_TRACK); /* update all images */ - for (Train *u = v; u != NULL; u = u->Next()) u->UpdateViewport(false, false); + for (Train *u = v; u != nullptr; u = u->Next()) u->UpdateViewport(false, false); /* update crossing we were approaching */ if (crossing != INVALID_TILE) UpdateLevelCrossing(crossing); @@ -1893,7 +1893,7 @@ void ReverseTrainDirection(Train *v) CommandCost CmdReverseTrainDirection(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Train *v = Train::GetIfValid(p1); - if (v == NULL) return CMD_ERROR; + if (v == nullptr) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -1929,7 +1929,7 @@ CommandCost CmdReverseTrainDirection(Til /* Properly leave the station if we are loading and won't be loading anymore */ if (v->current_order.IsType(OT_LOADING)) { const Vehicle *last = v; - while (last->Next() != NULL) last = last->Next(); + while (last->Next() != nullptr) last = last->Next(); /* not a station || different station --> leave the station */ if (!IsTileType(last->tile, MP_STATION) || GetStationIndex(last->tile) != GetStationIndex(v->tile)) { @@ -1966,7 +1966,7 @@ CommandCost CmdReverseTrainDirection(Til CommandCost CmdForceTrainProceed(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Train *t = Train::GetIfValid(p1); - if (t == NULL) return CMD_ERROR; + if (t == nullptr) return CMD_ERROR; if (!t->IsPrimaryVehicle()) return CMD_ERROR; @@ -2013,9 +2013,9 @@ static FindDepotData FindClosestTrainDep /** * Locate the closest depot for this consist, and return the information to the caller. - * @param[out] location If not \c NULL and a depot is found, store its location in the given address. - * @param[out] destination If not \c NULL and a depot is found, store its index in the given address. - * @param[out] reverse If not \c NULL and a depot is found, store reversal information in the given address. + * @param[out] location If not \c nullptr and a depot is found, store its location in the given address. + * @param[out] destination If not \c nullptr and a depot is found, store its index in the given address. + * @param[out] reverse If not \c nullptr and a depot is found, store reversal information in the given address. * @return A depot has been found. */ bool Train::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse) @@ -2023,9 +2023,9 @@ bool Train::FindClosestDepot(TileIndex * FindDepotData tfdd = FindClosestTrainDepot(this, 0); if (tfdd.best_length == UINT_MAX) return false; - if (location != NULL) *location = tfdd.tile; - if (destination != NULL) *destination = GetDepotIndex(tfdd.tile); - if (reverse != NULL) *reverse = tfdd.reverse; + if (location != nullptr) *location = tfdd.tile; + if (destination != nullptr) *destination = GetDepotIndex(tfdd.tile); + if (reverse != nullptr) *reverse = tfdd.reverse; return true; } @@ -2102,7 +2102,7 @@ static void CheckNextTrainTile(Train *v) if (Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile))) { tracks &= ~TrackCrossesTracks(TrackdirToTrack(ft.m_old_td)); } - ChooseTrainTrack(v, ft.m_new_tile, ft.m_exitdir, tracks, false, NULL, false); + ChooseTrainTrack(v, ft.m_new_tile, ft.m_exitdir, tracks, false, nullptr, false); } } } @@ -2116,7 +2116,7 @@ static void CheckNextTrainTile(Train *v) static bool CheckTrainStayInDepot(Train *v) { /* bail out if not all wagons are in the same depot or not in a depot at all */ - for (const Train *u = v; u != NULL; u = u->Next()) { + for (const Train *u = v; u != nullptr; u = u->Next()) { if (u->track != TRACK_BIT_DEPOT || u->tile != v->tile) return false; } @@ -2245,7 +2245,7 @@ void FreeTrainTrackReservation(const Tra if (IsRailDepotTile(tile) && TrackdirToExitdir(td) != GetRailDepotDirection(tile)) return; if (v->track == TRACK_BIT_DEPOT) { /* Front engine is in a depot. We enter if some part is not in the depot. */ - for (const Train *u = v; u != NULL; u = u->Next()) { + for (const Train *u = v; u != nullptr; u = u->Next()) { if (u->track != TRACK_BIT_DEPOT || u->tile != v->tile) return; } } @@ -2359,8 +2359,8 @@ static PBSTileInfo ExtendTrainReservatio if (ft.m_tiles_skipped != 0) ft.m_new_tile -= TileOffsByDiagDir(ft.m_exitdir) * ft.m_tiles_skipped; /* Choice found, path valid but not okay. Save info about the choice tile as well. */ - if (new_tracks != NULL) *new_tracks = TrackdirBitsToTrackBits(ft.m_new_td_bits); - if (enterdir != NULL) *enterdir = ft.m_exitdir; + if (new_tracks != nullptr) *new_tracks = TrackdirBitsToTrackBits(ft.m_new_td_bits); + if (enterdir != nullptr) *enterdir = ft.m_exitdir; return PBSTileInfo(ft.m_new_tile, ft.m_old_td, false); } @@ -2473,7 +2473,7 @@ public: if (this->index >= this->v->GetNumOrders()) this->index = 0; Order *order = this->v->GetOrder(this->index); - assert(order != NULL); + assert(order != nullptr); switch (order->GetType()) { case OT_GOTO_DEPOT: @@ -2516,7 +2516,7 @@ static Track ChooseTrainTrack(Train *v, assert((tracks & ~TRACK_BIT_MASK) == 0); - if (got_reservation != NULL) *got_reservation = false; + if (got_reservation != nullptr) *got_reservation = false; /* Don't use tracks here as the setting to forbid 90 deg turns might have been switched between reservation and now. */ TrackBits res_tracks = (TrackBits)(GetReservedTrackbits(tile) & DiagdirReachesTracks(enterdir)); @@ -2549,7 +2549,7 @@ static Track ChooseTrainTrack(Train *v, } if (res_dest.okay) { /* Got a valid reservation that ends at a safe target, quick exit. */ - if (got_reservation != NULL) *got_reservation = true; + if (got_reservation != nullptr) *got_reservation = true; if (changed_signal) MarkTileDirtyByTile(tile); TryReserveRailTrack(v->tile, TrackdirToTrack(v->GetVehicleTrackdir())); return best_track; @@ -2608,7 +2608,7 @@ static Track ChooseTrainTrack(Train *v, TrackBits res = GetReservedTrackbits(tile) & DiagdirReachesTracks(enterdir); best_track = FindFirstTrack(res); TryReserveRailTrack(v->tile, TrackdirToTrack(v->GetVehicleTrackdir())); - if (got_reservation != NULL) *got_reservation = true; + if (got_reservation != nullptr) *got_reservation = true; if (changed_signal) MarkTileDirtyByTile(tile); } else { FreeTrainTrackReservation(v); @@ -2617,7 +2617,7 @@ static Track ChooseTrainTrack(Train *v, return best_track; } - if (got_reservation != NULL) *got_reservation = true; + if (got_reservation != nullptr) *got_reservation = true; /* Reservation target found and free, check if it is safe. */ while (!IsSafeWaitingPosition(v, res_dest.tile, res_dest.trackdir, true, _settings_game.pf.forbid_90_deg)) { @@ -2640,7 +2640,7 @@ static Track ChooseTrainTrack(Train *v, /* Path found, but could not be reserved. */ FreeTrainTrackReservation(v); if (mark_stuck) MarkTrainAsStuck(v); - if (got_reservation != NULL) *got_reservation = false; + if (got_reservation != nullptr) *got_reservation = false; changed_signal = false; break; } @@ -2649,7 +2649,7 @@ static Track ChooseTrainTrack(Train *v, if (!TryReserveSafeTrack(v, res_dest.tile, res_dest.trackdir, true)) { FreeTrainTrackReservation(v); if (mark_stuck) MarkTrainAsStuck(v); - if (got_reservation != NULL) *got_reservation = false; + if (got_reservation != nullptr) *got_reservation = false; changed_signal = false; } break; @@ -2688,14 +2688,14 @@ bool TryPathReserve(Train *v, bool mark_ } } - Vehicle *other_train = NULL; + Vehicle *other_train = nullptr; PBSTileInfo origin = FollowTrainReservation(v, &other_train); /* The path we are driving on is already blocked by some other train. * This can only happen in certain situations when mixing path and * block signals or when changing tracks and/or signals. * Exit here as doing any further reservations will probably just * make matters worse. */ - if (other_train != NULL && other_train->index != v->index) { + if (other_train != nullptr && other_train->index != v->index) { if (mark_as_stuck) MarkTrainAsStuck(v); return false; } @@ -2781,7 +2781,7 @@ void Train::MarkDirty() do { v->colourmap = PAL_NONE; v->UpdateViewport(true, false); - } while ((v = v->Next()) != NULL); + } while ((v = v->Next()) != nullptr); /* need to update acceleration and cached values since the goods on the train changed. */ this->CargoChanged(); @@ -2899,7 +2899,7 @@ static bool TrainMovedChangeSignals(Tile /** Tries to reserve track under whole train consist. */ void Train::ReserveTrackUnderConsist() const { - for (const Train *u = this; u != NULL; u = u->Next()) { + for (const Train *u = this; u != nullptr; u = u->Next()) { switch (u->track) { case TRACK_BIT_WORMHOLE: TryReserveRailTrack(u->tile, DiagDirToDiagTrack(GetTunnelBridgeDirection(u->tile))); @@ -2928,7 +2928,7 @@ uint Train::Crash(bool flooded) /* Remove the reserved path in front of the train if it is not stuck. * Also clear all reserved tracks the train is currently on. */ if (!HasBit(this->flags, VRF_TRAIN_STUCK)) FreeTrainTrackReservation(this); - for (const Train *v = this; v != NULL; v = v->Next()) { + for (const Train *v = this; v != nullptr; v = v->Next()) { ClearPathReservation(v, v->tile, v->GetVehicleTrackdir()); if (IsTileType(v->tile, MP_TUNNELBRIDGE)) { /* ClearPathReservation will not free the wormhole exit @@ -2986,23 +2986,23 @@ struct TrainCollideChecker { * Collision test function. * @param v %Train vehicle to test collision with. * @param data %Train being examined. - * @return \c NULL (always continue search) + * @return \c nullptr (always continue search) */ static Vehicle *FindTrainCollideEnum(Vehicle *v, void *data) { TrainCollideChecker *tcc = (TrainCollideChecker*)data; /* not a train or in depot */ - if (v->type != VEH_TRAIN || Train::From(v)->track == TRACK_BIT_DEPOT) return NULL; + if (v->type != VEH_TRAIN || Train::From(v)->track == TRACK_BIT_DEPOT) return nullptr; /* do not crash into trains of another company. */ - if (v->owner != tcc->v->owner) return NULL; + if (v->owner != tcc->v->owner) return nullptr; /* get first vehicle now to make most usual checks faster */ Train *coll = Train::From(v)->First(); /* can't collide with own wagons */ - if (coll == tcc->v) return NULL; + if (coll == tcc->v) return nullptr; int x_diff = v->x_pos - tcc->v->x_pos; int y_diff = v->y_pos - tcc->v->y_pos; @@ -3012,20 +3012,20 @@ static Vehicle *FindTrainCollideEnum(Veh * Differences are shifted by 7, mapping range [-7 .. 8] into [0 .. 15] * Differences are then ORed and then we check for any higher bits */ uint hash = (y_diff + 7) | (x_diff + 7); - if (hash & ~15) return NULL; + if (hash & ~15) return nullptr; /* Slower check using multiplication */ int min_diff = (Train::From(v)->gcache.cached_veh_length + 1) / 2 + (tcc->v->gcache.cached_veh_length + 1) / 2 - 1; - if (x_diff * x_diff + y_diff * y_diff > min_diff * min_diff) return NULL; + if (x_diff * x_diff + y_diff * y_diff > min_diff * min_diff) return nullptr; /* Happens when there is a train under bridge next to bridge head */ - if (abs(v->z_pos - tcc->v->z_pos) > 5) return NULL; + if (abs(v->z_pos - tcc->v->z_pos) > 5) return nullptr; /* crash both trains */ tcc->num += TrainCrashed(tcc->v); tcc->num += TrainCrashed(coll); - return NULL; // continue searching + return nullptr; // continue searching } /** @@ -3067,15 +3067,15 @@ static bool CheckTrainCollision(Train *v static Vehicle *CheckTrainAtSignal(Vehicle *v, void *data) { - if (v->type != VEH_TRAIN || (v->vehstatus & VS_CRASHED)) return NULL; + if (v->type != VEH_TRAIN || (v->vehstatus & VS_CRASHED)) return nullptr; Train *t = Train::From(v); DiagDirection exitdir = *(DiagDirection *)data; /* not front engine of a train, inside wormhole or depot, crashed */ - if (!t->IsFrontEngine() || !(t->track & TRACK_BIT_MASK)) return NULL; - - if (t->cur_speed > 5 || VehicleExitDir(t->direction, t->track) != exitdir) return NULL; + if (!t->IsFrontEngine() || !(t->track & TRACK_BIT_MASK)) return nullptr; + + if (t->cur_speed > 5 || VehicleExitDir(t->direction, t->track) != exitdir) return nullptr; return t; } @@ -3138,7 +3138,7 @@ bool TrainController(Train *v, Vehicle * TrackBits red_signals = TrackdirBitsToTrackBits(TrackStatusToRedSignals(ts) & reachable_trackdirs); TrackBits bits = TrackdirBitsToTrackBits(trackdirbits); - if (Rail90DegTurnDisallowed(GetTileRailType(gp.old_tile), GetTileRailType(gp.new_tile)) && prev == NULL) { + if (Rail90DegTurnDisallowed(GetTileRailType(gp.old_tile), GetTileRailType(gp.new_tile)) && prev == nullptr) { /* We allow wagons to make 90 deg turns, because forbid_90_deg * can be switched on halfway a turn */ bits &= ~TrackCrossesTracks(FindFirstTrack(v->track)); @@ -3151,10 +3151,10 @@ bool TrainController(Train *v, Vehicle * if (!CheckCompatibleRail(v, gp.new_tile)) goto invalid_rail; TrackBits chosen_track; - if (prev == NULL) { + if (prev == nullptr) { /* Currently the locomotive is active. Determine which one of the * available tracks to choose */ - chosen_track = TrackToTrackBits(ChooseTrainTrack(v, gp.new_tile, enterdir, bits, false, NULL, true)); + chosen_track = TrackToTrackBits(ChooseTrainTrack(v, gp.new_tile, enterdir, bits, false, nullptr, true)); assert(chosen_track & (bits | GetReservedTrackbits(gp.new_tile))); if (v->force_proceed != TFP_NONE && IsPlainRailTile(gp.new_tile) && HasSignals(gp.new_tile)) { @@ -3274,7 +3274,7 @@ bool TrainController(Train *v, Vehicle * } /* Clear any track reservation when the last vehicle leaves the tile */ - if (v->Next() == NULL) ClearPathReservation(v, v->tile, v->GetVehicleTrackdir()); + if (v->Next() == nullptr) ClearPathReservation(v, v->tile, v->GetVehicleTrackdir()); v->tile = gp.new_tile; @@ -3291,7 +3291,7 @@ bool TrainController(Train *v, Vehicle * update_signals_crossing = true; if (chosen_dir != v->direction) { - if (prev == NULL && _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) { + if (prev == nullptr && _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) { const AccelerationSlowdownParams *asp = &_accel_slowdown[GetRailTypeInfo(v->railtype)->acceleration_type]; DirDiff diff = DirDifference(v->direction, chosen_dir); v->cur_speed -= (diff == DIRDIFF_45RIGHT || diff == DIRDIFF_45LEFT ? asp->small_turn : asp->large_turn) * v->cur_speed >> 8; @@ -3347,7 +3347,7 @@ bool TrainController(Train *v, Vehicle * /* update the Z position of the vehicle */ int old_z = v->UpdateInclination(gp.new_tile != gp.old_tile, false); - if (prev == NULL) { + if (prev == nullptr) { /* This is the first vehicle in the train */ AffectSpeedByZChange(v, old_z); } @@ -3373,7 +3373,7 @@ bool TrainController(Train *v, Vehicle * /* Signals can only change when the first * (above) or the last vehicle moves. */ - if (v->Next() == NULL) { + if (v->Next() == nullptr) { TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir)); if (IsLevelCrossingTile(gp.old_tile)) UpdateLevelCrossing(gp.old_tile); } @@ -3389,7 +3389,7 @@ bool TrainController(Train *v, Vehicle * invalid_rail: /* We've reached end of line?? */ - if (prev != NULL) error("Disconnecting train"); + if (prev != nullptr) error("Disconnecting train"); reverse_train_direction: if (reverse) { @@ -3406,7 +3406,7 @@ reverse_train_direction: * Collect trackbits of all crashed train vehicles on a tile * @param v Vehicle passed from Find/HasVehicleOnPos() * @param data trackdirbits for the result - * @return NULL to iterate over all vehicles on the tile. + * @return nullptr to iterate over all vehicles on the tile. */ static Vehicle *CollectTrackbitsFromCrashedVehiclesEnum(Vehicle *v, void *data) { @@ -3422,7 +3422,7 @@ static Vehicle *CollectTrackbitsFromCras } } - return NULL; + return nullptr; } /** @@ -3440,8 +3440,8 @@ static void DeleteLastWagon(Train *v) * *u is then the one-before-last wagon, and *v the last * one which will physically be removed */ Train *u = v; - for (; v->Next() != NULL; v = v->Next()) u = v; - u->SetNext(NULL); + for (; v->Next() != nullptr; v = v->Next()) u = v; + u->SetNext(nullptr); if (first != v) { /* Recalculate cached train properties */ @@ -3460,7 +3460,7 @@ static void DeleteLastWagon(Train *v) Owner owner = v->owner; delete v; - v = NULL; // make sure nobody will try to read 'v' anymore + v = nullptr; // make sure nobody will try to read 'v' anymore if (trackbits == TRACK_BIT_WORMHOLE) { /* Vehicle is inside a wormhole, v->track contains no useful value then. */ @@ -3516,7 +3516,7 @@ static void ChangeTrainDirRandomly(Train v->UpdateViewport(false, true); } } - } while ((v = v->Next()) != NULL); + } while ((v = v->Next()) != nullptr); } /** @@ -3548,13 +3548,13 @@ static bool HandleCrashedTrain(Train *v) EV_EXPLOSION_SMALL); break; } - } while ((u = u->Next()) != NULL); + } while ((u = u->Next()) != nullptr); } if (state <= 240 && !(v->tick_counter & 3)) ChangeTrainDirRandomly(v); if (state >= 4440 && !(v->tick_counter & 0x1F)) { - bool ret = v->Next() != NULL; + bool ret = v->Next() != nullptr; DeleteLastWagon(v); return ret; } @@ -3837,7 +3837,7 @@ static bool TrainLocoHandler(Train *v, b /* Loop until the train has finished moving. */ for (;;) { j -= adv_spd; - TrainController(v, NULL); + TrainController(v, nullptr); /* Don't continue to move if the train crashed. */ if (CheckTrainCollision(v)) break; /* Determine distance to next map position */ @@ -3858,7 +3858,7 @@ static bool TrainLocoHandler(Train *v, b v->SetLastSpeed(); } - for (Train *u = v; u != NULL; u = u->Next()) { + for (Train *u = v; u != nullptr; u = u->Next()) { if ((u->vehstatus & VS_HIDDEN) != 0) continue; u->UpdateViewport(false, false); @@ -3889,7 +3889,7 @@ Money Train::GetRunningCost() const if (v->IsMultiheaded()) cost_factor /= 2; cost += GetPrice(e->u.rail.running_cost_class, cost_factor, e->GetGRF()); - } while ((v = v->GetNextVehicle()) != NULL); + } while ((v = v->GetNextVehicle()) != nullptr); return cost; } diff --git a/src/train_gui.cpp b/src/train_gui.cpp --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -33,17 +33,17 @@ void CcBuildWagon(const CommandCost &res if (result.Failed()) return; /* find a locomotive in the depot. */ - const Vehicle *found = NULL; + const Vehicle *found = nullptr; const Train *t; FOR_ALL_TRAINS(t) { if (t->IsFrontEngine() && t->tile == tile && t->IsStoppedInDepot()) { - if (found != NULL) return; // must be exactly one. + if (found != nullptr) return; // must be exactly one. found = t; } } /* if we found a loco, */ - if (found != NULL) { + if (found != nullptr) { found = found->Last(); /* put the new wagon at the end of the loco. */ DoCommandP(0, _new_vehicle_id, found->index, CMD_MOVE_RAIL_VEHICLE); @@ -65,8 +65,8 @@ static int HighlightDragPosition(int px, assert(selection != INVALID_VEHICLE); int dragged_width = 0; - for (Train *t = Train::Get(selection); t != NULL; t = chain ? t->Next() : (t->HasArticulatedPart() ? t->GetNextArticulatedPart() : NULL)) { - dragged_width += t->GetDisplayImageWidth(NULL); + for (Train *t = Train::Get(selection); t != nullptr; t = chain ? t->Next() : (t->HasArticulatedPart() ? t->GetNextArticulatedPart() : nullptr)) { + dragged_width += t->GetDisplayImageWidth(nullptr); } int drag_hlight_left = rtl ? max(px - dragged_width + 1, 0) : px; @@ -112,7 +112,7 @@ void DrawTrainImage(const Train *v, int bool sel_articulated = false; bool dragging = (drag_dest != INVALID_VEHICLE); bool drag_at_end_of_train = (drag_dest == v->index); // Head index is used to mark dragging at end of train. - for (; v != NULL && (rtl ? px > 0 : px < max_width); v = v->Next()) { + for (; v != nullptr && (rtl ? px > 0 : px < max_width); v = v->Next()) { if (dragging && !drag_at_end_of_train && drag_dest == v->index) { /* Highlight the drag-and-drop destination inside the train. */ int drag_hlight_width = HighlightDragPosition(px, max_width, selection, _cursor.vehchain); @@ -292,7 +292,7 @@ static void GetCargoSummaryOfArticulated item->capacity += v->cargo_cap; item->amount += v->cargo.StoredCount(); if (item->source == INVALID_STATION) item->source = v->cargo.Source(); - } while ((v = v->Next()) != NULL && v->IsArticulatedPart()); + } while ((v = v->Next()) != nullptr && v->IsArticulatedPart()); } /** @@ -306,7 +306,7 @@ static uint GetLengthOfArticulatedVehicl do { length += v->GetDisplayImageWidth(); - } while ((v = v->Next()) != NULL && v->IsArticulatedPart()); + } while ((v = v->Next()) != nullptr && v->IsArticulatedPart()); return length; } @@ -324,7 +324,7 @@ int GetTrainDetailsWndVScroll(VehicleID if (det_tab == TDW_TAB_TOTALS) { // Total cargo tab CargoArray act_cargo; CargoArray max_cargo; - for (const Vehicle *v = Vehicle::Get(veh_id); v != NULL; v = v->Next()) { + for (const Vehicle *v = Vehicle::Get(veh_id); v != nullptr; v = v->Next()) { act_cargo[v->cargo_type] += v->cargo.StoredCount(); max_cargo[v->cargo_type] += v->cargo_cap; } @@ -337,7 +337,7 @@ int GetTrainDetailsWndVScroll(VehicleID } num++; // needs one more because first line is description string } else { - for (const Train *v = Train::Get(veh_id); v != NULL; v = v->GetNextVehicle()) { + for (const Train *v = Train::Get(veh_id); v != nullptr; v = v->GetNextVehicle()) { GetCargoSummaryOfArticulatedVehicle(v, &_cargo_summary); num += max(1u, (unsigned)_cargo_summary.size()); @@ -375,7 +375,7 @@ void DrawTrainDetails(const Train *v, in bool rtl = _current_text_dir == TD_RTL; Direction dir = rtl ? DIR_E : DIR_W; int x = rtl ? right : left; - for (; v != NULL && vscroll_pos > -vscroll_cap; v = v->GetNextVehicle()) { + for (; v != nullptr && vscroll_pos > -vscroll_cap; v = v->GetNextVehicle()) { GetCargoSummaryOfArticulatedVehicle(v, &_cargo_summary); /* Draw sprites */ @@ -388,7 +388,7 @@ void DrawTrainDetails(const Train *v, in if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) { int pitch = 0; const Engine *e = Engine::Get(v->engine_type); - if (e->GetGRF() != NULL) { + if (e->GetGRF() != nullptr) { pitch = ScaleGUITrad(e->GetGRF()->traininfo_vehicle_pitch); } PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); @@ -399,7 +399,7 @@ void DrawTrainDetails(const Train *v, in px += rtl ? -width : width; dx += width; u = u->Next(); - } while (u != NULL && u->IsArticulatedPart()); + } while (u != nullptr && u->IsArticulatedPart()); bool separate_sprite_row = (dx > (uint)ScaleGUITrad(TRAIN_DETAILS_MAX_INDENT)); if (separate_sprite_row) { @@ -450,7 +450,7 @@ void DrawTrainDetails(const Train *v, in CargoArray max_cargo; Money feeder_share = 0; - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { act_cargo[u->cargo_type] += u->cargo.StoredCount(); max_cargo[u->cargo_type] += u->cargo_cap; feeder_share += u->cargo.FeederShare(); diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -342,8 +342,8 @@ CommandCost CmdPlantTree(TileIndex tile, /* Check the tree type within the current climate */ if (tree_to_plant != TREE_INVALID && !IsInsideBS(tree_to_plant, _tree_base_by_landscape[_settings_game.game_creation.landscape], _tree_count_by_landscape[_settings_game.game_creation.landscape])) return CMD_ERROR; - Company *c = (_game_mode != GM_EDITOR) ? Company::GetIfValid(_current_company) : NULL; - int limit = (c == NULL ? INT32_MAX : GB(c->tree_limit, 16, 16)); + Company *c = (_game_mode != GM_EDITOR) ? Company::GetIfValid(_current_company) : nullptr; + int limit = (c == nullptr ? INT32_MAX : GB(c->tree_limit, 16, 16)); TileArea ta(tile, p2); TILE_AREA_LOOP(tile, ta) { @@ -364,7 +364,7 @@ CommandCost CmdPlantTree(TileIndex tile, if (flags & DC_EXEC) { AddTreeCount(tile, 1); MarkTileDirtyByTile(tile); - if (c != NULL) c->tree_limit -= 1 << 16; + if (c != nullptr) c->tree_limit -= 1 << 16; } /* 2x as expensive to add more trees to an existing tile */ cost.AddCost(_price[PR_BUILD_TREES] * 2); @@ -419,7 +419,7 @@ CommandCost CmdPlantTree(TileIndex tile, if (_game_mode != GM_EDITOR && Company::IsValidID(_current_company)) { Town *t = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority); - if (t != NULL) ChangeTownRating(t, RATING_TREE_UP_STEP, RATING_TREE_MAXIMUM, flags); + if (t != nullptr) ChangeTownRating(t, RATING_TREE_UP_STEP, RATING_TREE_MAXIMUM, flags); } if (flags & DC_EXEC) { @@ -431,7 +431,7 @@ CommandCost CmdPlantTree(TileIndex tile, /* Plant full grown trees in scenario editor */ PlantTreesOnTile(tile, treetype, 0, _game_mode == GM_EDITOR ? 3 : 0); MarkTileDirtyByTile(tile); - if (c != NULL) c->tree_limit -= 1 << 16; + if (c != nullptr) c->tree_limit -= 1 << 16; /* When planting rainforest-trees, set tropiczone to rainforest in editor. */ if (_game_mode == GM_EDITOR && IsInsideMM(treetype, TREE_RAINFOREST, TREE_CACTUS)) { @@ -552,7 +552,7 @@ static CommandCost ClearTile_Trees(TileI if (Company::IsValidID(_current_company)) { Town *t = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority); - if (t != NULL) ChangeTownRating(t, RATING_TREE_DOWN_STEP, RATING_TREE_MINIMUM, flags); + if (t != nullptr) ChangeTownRating(t, RATING_TREE_DOWN_STEP, RATING_TREE_MINIMUM, flags); } num = GetTreeCount(tile); @@ -803,15 +803,15 @@ extern const TileTypeProcs _tile_type_tr DrawTile_Trees, // draw_tile_proc GetSlopePixelZ_Trees, // get_slope_z_proc ClearTile_Trees, // clear_tile_proc - NULL, // add_accepted_cargo_proc + nullptr, // add_accepted_cargo_proc GetTileDesc_Trees, // get_tile_desc_proc GetTileTrackStatus_Trees, // get_tile_track_status_proc - NULL, // click_tile_proc - NULL, // animate_tile_proc + nullptr, // click_tile_proc + nullptr, // animate_tile_proc TileLoop_Trees, // tile_loop_proc ChangeTileOwner_Trees, // 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_Trees, // get_foundation_proc TerraformTile_Trees, // terraform_tile_proc }; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -84,7 +84,7 @@ void ResetBridges() { /* First, free sprite table data */ for (BridgeType i = 0; i < MAX_BRIDGES; i++) { - if (_bridge[i].sprite_table != NULL) { + if (_bridge[i].sprite_table != nullptr) { for (BridgePieces j = BRIDGE_PIECE_NORTH; j < BRIDGE_PIECE_INVALID; j++) free(_bridge[i].sprite_table[j]); free(_bridge[i].sprite_table); } @@ -150,7 +150,7 @@ static inline const PalSpriteID *GetBrid { const BridgeSpec *bridge = GetBridgeSpec(index); assert(table < BRIDGE_PIECE_INVALID); - if (bridge->sprite_table == NULL || bridge->sprite_table[table] == NULL) { + if (bridge->sprite_table == nullptr || bridge->sprite_table[table] == nullptr) { return _bridge_sprite_table[index][table]; } else { return bridge->sprite_table[table]; @@ -268,7 +268,7 @@ CommandCost CmdBuildBridge(TileIndex end company = OWNER_TOWN; /* If we are not within a town, we are not owned by the town */ - if (town == NULL || DistanceSquare(tile_start, town->xy) > town->cache.squared_town_zone_radius[HZB_TOWN_EDGE]) { + if (town == nullptr || DistanceSquare(tile_start, town->xy) > town->cache.squared_town_zone_radius[HZB_TOWN_EDGE]) { company = OWNER_NONE; } } @@ -329,7 +329,7 @@ CommandCost CmdBuildBridge(TileIndex end _game_mode != GM_EDITOR) { Town *t = ClosestTownFromTile(tile_start, UINT_MAX); - if (t == NULL) { + if (t == nullptr) { return CMD_ERROR; } else { SetDParam(0, t->index); @@ -479,7 +479,7 @@ CommandCost CmdBuildBridge(TileIndex end switch (transport_type) { case TRANSPORT_RAIL: /* Add to company infrastructure count if required. */ - if (is_new_owner && c != NULL) c->infrastructure.rail[railtype] += (bridge_len + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR; + if (is_new_owner && c != nullptr) c->infrastructure.rail[railtype] += (bridge_len + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR; MakeRailBridgeRamp(tile_start, owner, bridge_type, dir, railtype); MakeRailBridgeRamp(tile_end, owner, bridge_type, ReverseDiagDir(dir), railtype); SetTunnelBridgeReservation(tile_start, pbs_reservation); @@ -493,7 +493,7 @@ CommandCost CmdBuildBridge(TileIndex end if (HasBit(prev_roadtypes, ROADTYPE_ROAD) && GetRoadOwner(tile_start, ROADTYPE_ROAD) == OWNER_NONE) ClrBit(prev_roadtypes, ROADTYPE_ROAD); if (HasBit(prev_roadtypes, ROADTYPE_TRAM) && GetRoadOwner(tile_start, ROADTYPE_TRAM) == OWNER_NONE) ClrBit(prev_roadtypes, ROADTYPE_TRAM); } - if (c != NULL) { + if (c != nullptr) { /* Add all new road types to the company infrastructure counter. */ RoadType new_rt; FOR_EACH_SET_ROADTYPE(new_rt, roadtypes ^ prev_roadtypes) { @@ -509,7 +509,7 @@ CommandCost CmdBuildBridge(TileIndex end } case TRANSPORT_WATER: - if (is_new_owner && c != NULL) c->infrastructure.water += (bridge_len + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR; + if (is_new_owner && c != nullptr) c->infrastructure.water += (bridge_len + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR; MakeAqueductBridgeRamp(tile_start, owner, dir); MakeAqueductBridgeRamp(tile_end, owner, ReverseDiagDir(dir)); break; @@ -534,7 +534,7 @@ CommandCost CmdBuildBridge(TileIndex end * and cost is computed in "bridge_gui.c". For AI, Towns this has to be of course calculated */ Company *c = Company::GetIfValid(company); - if (!(flags & DC_QUERY_COST) || (c != NULL && c->is_ai)) { + if (!(flags & DC_QUERY_COST) || (c != nullptr && c->is_ai)) { bridge_len += 2; // begin and end tiles/ramps switch (transport_type) { @@ -543,7 +543,7 @@ CommandCost CmdBuildBridge(TileIndex end default: break; } - if (c != NULL) bridge_len = CalcBridgeLenCostFactor(bridge_len); + if (c != nullptr) bridge_len = CalcBridgeLenCostFactor(bridge_len); if (transport_type != TRANSPORT_WATER) { cost.AddCost((int64)bridge_len * _price[PR_BUILD_BRIDGE] * GetBridgeSpec(bridge_type)->price >> 8); @@ -598,7 +598,7 @@ CommandCost CmdBuildTunnel(TileIndex sta company = OWNER_TOWN; /* If we are not within a town, we are not owned by the town */ - if (town == NULL || DistanceSquare(start_tile, town->xy) > town->cache.squared_town_zone_radius[HZB_TOWN_EDGE]) { + if (town == nullptr || DistanceSquare(start_tile, town->xy) > town->cache.squared_town_zone_radius[HZB_TOWN_EDGE]) { company = OWNER_NONE; } } @@ -680,7 +680,7 @@ CommandCost CmdBuildTunnel(TileIndex sta /* Mark the tile as already cleared for the terraform command. * Do this for all tiles (like trees), not only objects. */ ClearedObjectArea *coa = FindClearedObject(end_tile); - if (coa == NULL) { + if (coa == nullptr) { /*C++17: coa = &*/ _cleared_object_areas.push_back({end_tile, TileArea(end_tile, 1, 1)}); coa = &_cleared_object_areas.back(); } @@ -702,7 +702,7 @@ CommandCost CmdBuildTunnel(TileIndex sta assert(coa >= begin && coa < begin + _cleared_object_areas.size()); size_t coa_index = coa - begin; assert(coa_index < UINT_MAX); // more than 2**32 cleared areas would be a bug in itself - coa = NULL; + coa = nullptr; ret = DoCommand(end_tile, end_tileh & start_tileh, 0, flags, CMD_TERRAFORM_LAND); _cleared_object_areas[(uint)coa_index].first_tile = old_first_tile; @@ -722,13 +722,13 @@ CommandCost CmdBuildTunnel(TileIndex sta Company *c = Company::GetIfValid(company); uint num_pieces = (tiles + 2) * TUNNELBRIDGE_TRACKBIT_FACTOR; if (transport_type == TRANSPORT_RAIL) { - if (!IsTunnelTile(start_tile) && c != NULL) c->infrastructure.rail[railtype] += num_pieces; + if (!IsTunnelTile(start_tile) && c != nullptr) c->infrastructure.rail[railtype] += num_pieces; MakeRailTunnel(start_tile, company, direction, railtype); MakeRailTunnel(end_tile, company, ReverseDiagDir(direction), railtype); AddSideToSignalBuffer(start_tile, INVALID_DIAGDIR, company); YapfNotifyTrackLayoutChange(start_tile, DiagDirToDiagTrack(direction)); } else { - if (c != NULL) { + if (c != nullptr) { RoadType rt; FOR_EACH_SET_ROADTYPE(rt, rts ^ (IsTunnelTile(start_tile) ? GetRoadTypes(start_tile) : ROADTYPES_NONE)) { c->infrastructure.road[rt] += num_pieces * 2; // A full diagonal road has two road bits. @@ -808,7 +808,7 @@ static CommandCost DoClearTunnel(TileInd _build_tunnel_endtile = endtile; - Town *t = NULL; + Town *t = nullptr; if (IsTileOwner(tile, OWNER_TOWN) && _game_mode != GM_EDITOR) { t = ClosestTownFromTile(tile, UINT_MAX); // town penalty rating @@ -833,10 +833,10 @@ static CommandCost DoClearTunnel(TileInd Track track = DiagDirToDiagTrack(dir); Owner owner = GetTileOwner(tile); - Train *v = NULL; + Train *v = nullptr; if (HasTunnelBridgeReservation(tile)) { v = GetTrainForReservation(tile, track); - if (v != NULL) FreeTrainTrackReservation(v); + if (v != nullptr) FreeTrainTrackReservation(v); } if (Company::IsValidID(owner)) { @@ -854,13 +854,13 @@ static CommandCost DoClearTunnel(TileInd YapfNotifyTrackLayoutChange(tile, track); YapfNotifyTrackLayoutChange(endtile, track); - if (v != NULL) TryPathReserve(v); + if (v != nullptr) TryPathReserve(v); } else { RoadType rt; FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) { /* A full diagonal road tile has two road bits. */ Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.road[rt] -= len * 2 * TUNNELBRIDGE_TRACKBIT_FACTOR; DirtyCompanyInfrastructureWindows(c->index); } @@ -893,7 +893,7 @@ static CommandCost DoClearBridge(TileInd DiagDirection direction = GetTunnelBridgeDirection(tile); TileIndexDiff delta = TileOffsByDiagDir(direction); - Town *t = NULL; + Town *t = nullptr; if (IsTileOwner(tile, OWNER_TOWN) && _game_mode != GM_EDITOR) { t = ClosestTownFromTile(tile, UINT_MAX); // town penalty rating @@ -917,11 +917,11 @@ static CommandCost DoClearBridge(TileInd bool rail = GetTunnelBridgeTransportType(tile) == TRANSPORT_RAIL; Owner owner = GetTileOwner(tile); int height = GetBridgeHeight(tile); - Train *v = NULL; + Train *v = nullptr; if (rail && HasTunnelBridgeReservation(tile)) { v = GetTrainForReservation(tile, DiagDirToDiagTrack(direction)); - if (v != NULL) FreeTrainTrackReservation(v); + if (v != nullptr) FreeTrainTrackReservation(v); } /* Update company infrastructure counts. */ @@ -931,7 +931,7 @@ static CommandCost DoClearBridge(TileInd RoadType rt; FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) { Company *c = Company::GetIfValid(GetRoadOwner(tile, rt)); - if (c != NULL) { + if (c != nullptr) { /* A full diagonal road tile has two road bits. */ c->infrastructure.road[rt] -= len * 2 * TUNNELBRIDGE_TRACKBIT_FACTOR; DirtyCompanyInfrastructureWindows(c->index); @@ -963,7 +963,7 @@ static CommandCost DoClearBridge(TileInd YapfNotifyTrackLayoutChange(tile, track); YapfNotifyTrackLayoutChange(endtile, track); - if (v != NULL) TryPathReserve(v, true); + if (v != nullptr) TryPathReserve(v, true); } } @@ -1018,7 +1018,7 @@ static int DrawPillarColumn(int z_bottom { int cur_z; for (cur_z = z_top; cur_z >= z_bottom; cur_z -= TILE_HEIGHT) { - DrawPillar(psid, x, y, cur_z, w, h, NULL); + DrawPillar(psid, x, y, cur_z, w, h, nullptr); } return cur_z; } @@ -1906,14 +1906,14 @@ extern const TileTypeProcs _tile_type_tu DrawTile_TunnelBridge, // draw_tile_proc GetSlopePixelZ_TunnelBridge, // get_slope_z_proc ClearTile_TunnelBridge, // clear_tile_proc - NULL, // add_accepted_cargo_proc + nullptr, // add_accepted_cargo_proc GetTileDesc_TunnelBridge, // get_tile_desc_proc GetTileTrackStatus_TunnelBridge, // get_tile_track_status_proc - NULL, // click_tile_proc - NULL, // animate_tile_proc + nullptr, // click_tile_proc + nullptr, // animate_tile_proc TileLoop_TunnelBridge, // tile_loop_proc ChangeTileOwner_TunnelBridge, // change_tile_owner_proc - NULL, // add_produced_cargo_proc + nullptr, // add_produced_cargo_proc VehicleEnter_TunnelBridge, // vehicle_enter_tile_proc GetFoundation_TunnelBridge, // get_foundation_proc TerraformTile_TunnelBridge, // terraform_tile_proc diff --git a/src/vehicle.cpp b/src/vehicle.cpp --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -163,7 +163,7 @@ bool Vehicle::NeedsAutorenewing(const Co */ void VehicleServiceInDepot(Vehicle *v) { - assert(v != NULL); + assert(v != nullptr); SetWindowDirty(WC_VEHICLE_DETAILS, v->index); // ensure that last service date and reliability are updated do { @@ -173,7 +173,7 @@ void VehicleServiceInDepot(Vehicle *v) /* Prevent vehicles from breaking down directly after exiting the depot. */ v->breakdown_chance /= 4; v = v->Next(); - } while (v != NULL && v->HasEngineType()); + } while (v != nullptr && v->HasEngineType()); } /** @@ -210,7 +210,7 @@ bool Vehicle::NeedsServicing() const Money needed_money = c->settings.engine_renew_money; if (needed_money > c->money) return false; - for (const Vehicle *v = this; v != NULL; v = (v->type == VEH_TRAIN) ? Train::From(v)->GetNextUnit() : NULL) { + for (const Vehicle *v = this; v != nullptr; v = (v->type == VEH_TRAIN) ? Train::From(v)->GetNextUnit() : nullptr) { bool replace_when_old = false; EngineID new_engine = EngineReplacementForCompany(c, v->engine_type, v->group_id, &replace_when_old); @@ -261,13 +261,13 @@ bool Vehicle::NeedsAutomaticServicing() uint Vehicle::Crash(bool flooded) { assert((this->vehstatus & VS_CRASHED) == 0); - assert(this->Previous() == NULL); // IsPrimaryVehicle fails for free-wagon-chains + assert(this->Previous() == nullptr); // IsPrimaryVehicle fails for free-wagon-chains uint pass = 0; /* Stop the vehicle. */ if (this->IsPrimaryVehicle()) this->vehstatus |= VS_STOPPED; /* crash all wagons, and count passengers */ - for (Vehicle *v = this; v != NULL; v = v->Next()) { + for (Vehicle *v = this; v != nullptr; v = v->Next()) { /* We do not transfer reserver cargo back, so TotalCount() instead of StoredCount() */ if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) pass += v->cargo.TotalCount(); v->vehstatus |= VS_CRASHED; @@ -281,7 +281,7 @@ uint Vehicle::Crash(bool flooded) SetWindowDirty(WC_VEHICLE_DEPOT, this->tile); delete this->cargo_payment; - assert(this->cargo_payment == NULL); // cleared by ~CargoPayment + assert(this->cargo_payment == nullptr); // cleared by ~CargoPayment return RandomRange(pass + 1); // Randomise deceased passengers. } @@ -301,7 +301,7 @@ void ShowNewGrfVehicleError(EngineID eng GRFConfig *grfconfig = GetGRFConfig(e->GetGRFID()); /* Missing GRF. Nothing useful can be done in this situation. */ - if (grfconfig == NULL) return; + if (grfconfig == nullptr) return; if (!HasBit(grfconfig->grf_bugs, bug_type)) { SetBit(grfconfig->grf_bugs, bug_type); @@ -384,16 +384,16 @@ static Vehicle *VehicleFromTileHash(int for (int y = yl; ; y = (y + (1 << HASH_BITS)) & (HASH_MASK << HASH_BITS)) { for (int x = xl; ; x = (x + 1) & HASH_MASK) { Vehicle *v = _vehicle_tile_hash[(x + y) & TOTAL_HASH_MASK]; - for (; v != NULL; v = v->hash_tile_next) { + for (; v != nullptr; v = v->hash_tile_next) { Vehicle *a = proc(v, data); - if (find_first && a != NULL) return a; + if (find_first && a != nullptr) return a; } if (x == xu) break; } if (y == yu) break; } - return NULL; + return nullptr; } @@ -442,18 +442,18 @@ void FindVehicleOnPosXY(int x, int y, vo /** * Checks whether a vehicle in on a specific location. It will call proc for - * vehicles until it returns non-NULL. + * vehicles until it returns non-nullptr. * @note Use FindVehicleOnPosXY when you have the intention that all vehicles * should be iterated over. * @param x The X location on the map * @param y The Y location on the map * @param data Arbitrary data passed to proc * @param proc The proc that determines whether a vehicle will be "found". - * @return True if proc returned non-NULL. + * @return True if proc returned non-nullptr. */ bool HasVehicleOnPosXY(int x, int y, void *data, VehicleFromPosProc *proc) { - return VehicleFromPosXY(x, y, data, proc, true) != NULL; + return VehicleFromPosXY(x, y, data, proc, true) != nullptr; } /** @@ -472,14 +472,14 @@ static Vehicle *VehicleFromPos(TileIndex int y = GB(TileY(tile), HASH_RES, HASH_BITS) << HASH_BITS; Vehicle *v = _vehicle_tile_hash[(x + y) & TOTAL_HASH_MASK]; - for (; v != NULL; v = v->hash_tile_next) { + for (; v != nullptr; v = v->hash_tile_next) { if (v->tile != tile) continue; Vehicle *a = proc(v, data); - if (find_first && a != NULL) return a; + if (find_first && a != nullptr) return a; } - return NULL; + return nullptr; } /** @@ -502,31 +502,31 @@ void FindVehicleOnPos(TileIndex tile, vo /** * Checks whether a vehicle is on a specific location. It will call \a proc for - * vehicles until it returns non-NULL. + * vehicles until it returns non-nullptr. * @note Use #FindVehicleOnPos when you have the intention that all vehicles * should be iterated over. * @param tile The location on the map * @param data Arbitrary data passed to \a proc. * @param proc The \a proc that determines whether a vehicle will be "found". - * @return True if proc returned non-NULL. + * @return True if proc returned non-nullptr. */ bool HasVehicleOnPos(TileIndex tile, void *data, VehicleFromPosProc *proc) { - return VehicleFromPos(tile, data, proc, true) != NULL; + return VehicleFromPos(tile, data, proc, true) != nullptr; } /** * Callback that returns 'real' vehicles lower or at height \c *(int*)data . * @param v Vehicle to examine. * @param data Pointer to height data. - * @return \a v if conditions are met, else \c NULL. + * @return \a v if conditions are met, else \c nullptr. */ static Vehicle *EnsureNoVehicleProcZ(Vehicle *v, void *data) { int z = *(int*)data; - if (v->type == VEH_DISASTER || (v->type == VEH_AIRCRAFT && v->subtype == AIR_SHADOW)) return NULL; - if (v->z_pos > z) return NULL; + if (v->type == VEH_DISASTER || (v->type == VEH_AIRCRAFT && v->subtype == AIR_SHADOW)) return nullptr; + if (v->z_pos > z) return nullptr; return v; } @@ -545,15 +545,15 @@ CommandCost EnsureNoVehicleOnGround(Tile * Such a message does not affect MP synchronisation. */ Vehicle *v = VehicleFromPos(tile, &z, &EnsureNoVehicleProcZ, true); - if (v != NULL) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type); + if (v != nullptr) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type); return CommandCost(); } /** Procedure called for every vehicle found in tunnel/bridge in the hash map */ static Vehicle *GetVehicleTunnelBridgeProc(Vehicle *v, void *data) { - if (v->type != VEH_TRAIN && v->type != VEH_ROAD && v->type != VEH_SHIP) return NULL; - if (v == (const Vehicle *)data) return NULL; + if (v->type != VEH_TRAIN && v->type != VEH_ROAD && v->type != VEH_SHIP) return nullptr; + if (v == (const Vehicle *)data) return nullptr; return v; } @@ -572,9 +572,9 @@ CommandCost TunnelBridgeIsFree(TileIndex * Such a message does not affect MP synchronisation. */ Vehicle *v = VehicleFromPos(tile, const_cast(ignore), &GetVehicleTunnelBridgeProc, true); - if (v == NULL) v = VehicleFromPos(endtile, const_cast(ignore), &GetVehicleTunnelBridgeProc, true); - - if (v != NULL) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type); + if (v == nullptr) v = VehicleFromPos(endtile, const_cast(ignore), &GetVehicleTunnelBridgeProc, true); + + if (v != nullptr) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type); return CommandCost(); } @@ -582,10 +582,10 @@ static Vehicle *EnsureNoTrainOnTrackProc { TrackBits rail_bits = *(TrackBits *)data; - if (v->type != VEH_TRAIN) return NULL; + if (v->type != VEH_TRAIN) return nullptr; Train *t = Train::From(v); - if ((t->track != rail_bits) && !TracksOverlap(t->track | rail_bits)) return NULL; + if ((t->track != rail_bits) && !TracksOverlap(t->track | rail_bits)) return nullptr; return v; } @@ -605,7 +605,7 @@ CommandCost EnsureNoTrainOnTrackBits(Til * Such a message does not affect MP synchronisation. */ Vehicle *v = VehicleFromPos(tile, &track_bits, &EnsureNoTrainOnTrackProc, true); - if (v != NULL) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type); + if (v != nullptr) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type); return CommandCost(); } @@ -615,7 +615,7 @@ static void UpdateVehicleTileHash(Vehicl Vehicle **new_hash; if (remove) { - new_hash = NULL; + new_hash = nullptr; } else { int x = GB(TileX(v->tile), HASH_RES, HASH_BITS); int y = GB(TileY(v->tile), HASH_RES, HASH_BITS) << HASH_BITS; @@ -625,15 +625,15 @@ static void UpdateVehicleTileHash(Vehicl if (old_hash == new_hash) return; /* Remove from the old position in the hash table */ - if (old_hash != NULL) { - if (v->hash_tile_next != NULL) v->hash_tile_next->hash_tile_prev = v->hash_tile_prev; + if (old_hash != nullptr) { + if (v->hash_tile_next != nullptr) v->hash_tile_next->hash_tile_prev = v->hash_tile_prev; *v->hash_tile_prev = v->hash_tile_next; } /* Insert vehicle at beginning of the new position in the hash table */ - if (new_hash != NULL) { + if (new_hash != nullptr) { v->hash_tile_next = *new_hash; - if (v->hash_tile_next != NULL) v->hash_tile_next->hash_tile_prev = &v->hash_tile_next; + if (v->hash_tile_next != nullptr) v->hash_tile_next->hash_tile_prev = &v->hash_tile_next; v->hash_tile_prev = new_hash; *new_hash = v; } @@ -650,21 +650,21 @@ static void UpdateVehicleViewportHash(Ve int old_x = v->coord.left; int old_y = v->coord.top; - new_hash = (x == INVALID_COORD) ? NULL : &_vehicle_viewport_hash[GEN_HASH(x, y)]; - old_hash = (old_x == INVALID_COORD) ? NULL : &_vehicle_viewport_hash[GEN_HASH(old_x, old_y)]; + new_hash = (x == INVALID_COORD) ? nullptr : &_vehicle_viewport_hash[GEN_HASH(x, y)]; + old_hash = (old_x == INVALID_COORD) ? nullptr : &_vehicle_viewport_hash[GEN_HASH(old_x, old_y)]; if (old_hash == new_hash) return; /* remove from hash table? */ - if (old_hash != NULL) { - if (v->hash_viewport_next != NULL) v->hash_viewport_next->hash_viewport_prev = v->hash_viewport_prev; + if (old_hash != nullptr) { + if (v->hash_viewport_next != nullptr) v->hash_viewport_next->hash_viewport_prev = v->hash_viewport_prev; *v->hash_viewport_prev = v->hash_viewport_next; } /* insert into hash table? */ - if (new_hash != NULL) { + if (new_hash != nullptr) { v->hash_viewport_next = *new_hash; - if (v->hash_viewport_next != NULL) v->hash_viewport_next->hash_viewport_prev = &v->hash_viewport_next; + if (v->hash_viewport_next != nullptr) v->hash_viewport_next->hash_viewport_prev = &v->hash_viewport_next; v->hash_viewport_prev = new_hash; *new_hash = v; } @@ -673,7 +673,7 @@ static void UpdateVehicleViewportHash(Ve void ResetVehicleHash() { Vehicle *v; - FOR_ALL_VEHICLES(v) { v->hash_tile_current = NULL; } + FOR_ALL_VEHICLES(v) { v->hash_tile_current = nullptr; } memset(_vehicle_viewport_hash, 0, sizeof(_vehicle_viewport_hash)); memset(_vehicle_tile_hash, 0, sizeof(_vehicle_tile_hash)); } @@ -701,7 +701,7 @@ void InitializeVehicles() uint CountVehiclesInChain(const Vehicle *v) { uint count = 0; - do count++; while ((v = v->Next()) != NULL); + do count++; while ((v = v->Next()) != nullptr); return count; } @@ -812,7 +812,7 @@ void Vehicle::PreDestructor() HideFillingPercent(&this->fill_percent_te_id); this->CancelReservation(INVALID_STATION, st); delete this->cargo_payment; - assert(this->cargo_payment == NULL); // cleared by ~CargoPayment + assert(this->cargo_payment == nullptr); // cleared by ~CargoPayment } if (this->IsEngineCountable()) { @@ -827,7 +827,7 @@ void Vehicle::PreDestructor() if (this->type == VEH_AIRCRAFT && this->IsPrimaryVehicle()) { Aircraft *a = Aircraft::From(this); Station *st = GetTargetAirportIfValid(a); - if (st != NULL) { + if (st != nullptr) { const AirportFTA *layout = st->airport.GetFTA()->layout; CLRBITS(st->airport.flags, layout[a->previous_pos].block | layout[a->pos].block); } @@ -842,7 +842,7 @@ void Vehicle::PreDestructor() } } - if (this->Previous() == NULL) { + if (this->Previous() == nullptr) { InvalidateWindowData(WC_VEHICLE_DEPOT, this->tile); } @@ -879,7 +879,7 @@ Vehicle::~Vehicle() if (!(this->vehstatus & VS_HIDDEN)) this->MarkAllViewportsDirty(); Vehicle *v = this->Next(); - this->SetNext(NULL); + this->SetNext(nullptr); delete v; @@ -918,7 +918,7 @@ static void RunVehicleDayProc() /* Run the day_proc for every DAY_TICKS vehicle starting at _date_fract. */ for (size_t i = _date_fract; i < Vehicle::GetPoolSize(); i += DAY_TICKS) { Vehicle *v = Vehicle::Get(i); - if (v == NULL) continue; + if (v == nullptr) continue; /* Call the 32-day callback if needed */ if ((v->day_counter & 0x1F) == 0 && v->HasEngineType()) { @@ -961,7 +961,7 @@ void CallVehicleTicks() FOR_ALL_VEHICLES(v) { /* Vehicle could be deleted in this tick */ if (!v->Tick()) { - assert(Vehicle::Get(vehicle_index) == NULL); + assert(Vehicle::Get(vehicle_index) == nullptr); continue; } @@ -1142,7 +1142,7 @@ void ViewportAddVehicles(DrawPixelInfo * for (int x = xl;; x = (x + GEN_HASHX_INC) & GEN_HASHX_MASK) { const Vehicle *v = _vehicle_viewport_hash[x + y]; // already masked & 0xFFF - while (v != NULL) { + while (v != nullptr) { if (!(v->vehstatus & VS_HIDDEN) && l <= v->coord.right && t <= v->coord.bottom && @@ -1165,14 +1165,14 @@ void ViewportAddVehicles(DrawPixelInfo * * @param vp Viewport clicked in. * @param x X coordinate in the viewport. * @param y Y coordinate in the viewport. - * @return Closest vehicle, or \c NULL if none found. + * @return Closest vehicle, or \c nullptr if none found. */ Vehicle *CheckClickOnVehicle(const ViewPort *vp, int x, int y) { - Vehicle *found = NULL, *v; + Vehicle *found = nullptr, *v; uint dist, best_dist = UINT_MAX; - if ((uint)(x -= vp->left) >= (uint)vp->width || (uint)(y -= vp->top) >= (uint)vp->height) return NULL; + if ((uint)(x -= vp->left) >= (uint)vp->width || (uint)(y -= vp->top) >= (uint)vp->height) return nullptr; x = ScaleByZoom(x, vp->zoom) + vp->virtual_left; y = ScaleByZoom(y, vp->zoom) + vp->virtual_top; @@ -1296,7 +1296,7 @@ bool Vehicle::HandleBreakdown() if (!(this->vehstatus & VS_HIDDEN) && !HasBit(EngInfo(this->engine_type)->misc_flags, EF_NO_BREAKDOWN_SMOKE)) { EffectVehicle *u = CreateEffectVehicleRel(this, 4, 4, 5, EV_BREAKDOWN_SMOKE); - if (u != NULL) u->animation_state = this->breakdown_delay * 2; + if (u != nullptr) u->animation_state = this->breakdown_delay * 2; } } @@ -1347,7 +1347,7 @@ void AgeVehicle(Vehicle *v) SetWindowDirty(WC_VEHICLE_DETAILS, v->index); /* Don't warn about non-primary or not ours vehicles or vehicles that are crashed */ - if (v->Previous() != NULL || v->owner != _local_company || (v->vehstatus & VS_CRASHED) != 0) return; + if (v->Previous() != nullptr || v->owner != _local_company || (v->vehstatus & VS_CRASHED) != 0) return; const Company *c = Company::Get(v->owner); /* Don't warn if a renew is active */ @@ -1389,18 +1389,18 @@ uint8 CalcPercentVehicleFilled(const Veh bool is_loading = front->current_order.IsType(OT_LOADING); - /* The station may be NULL when the (colour) string does not need to be set. */ + /* The station may be nullptr when the (colour) string does not need to be set. */ const Station *st = Station::GetIfValid(front->last_station_visited); - assert(colour == NULL || (st != NULL && is_loading)); + assert(colour == nullptr || (st != nullptr && is_loading)); bool order_no_load = is_loading && (front->current_order.GetLoadType() & OLFB_NO_LOAD); bool order_full_load = is_loading && (front->current_order.GetLoadType() & OLFB_FULL_LOAD); /* Count up max and used */ - for (const Vehicle *v = front; v != NULL; v = v->Next()) { + for (const Vehicle *v = front; v != nullptr; v = v->Next()) { count += v->cargo.StoredCount(); max += v->cargo_cap; - if (v->cargo_cap != 0 && colour != NULL) { + if (v->cargo_cap != 0 && colour != nullptr) { unloading += HasBit(v->vehicle_flags, VF_CARGO_UNLOADING) ? 1 : 0; loading |= !order_no_load && (order_full_load || st->goods[v->cargo_type].HasRating()) && @@ -1409,7 +1409,7 @@ uint8 CalcPercentVehicleFilled(const Veh } } - if (colour != NULL) { + if (colour != nullptr) { if (unloading == 0 && loading) { *colour = STR_PERCENT_UP; } else if (unloading == 0 && !loading) { @@ -1507,7 +1507,7 @@ void VehicleEnterDepot(Vehicle *v) /* Test whether we are heading for this depot. If not, do nothing. * Note: The target depot for nearest-/manual-depot-orders is only updated on junctions, but we want to accept every depot. */ if ((v->current_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS) && - real_order != NULL && !(real_order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && + real_order != nullptr && !(real_order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && (v->type == VEH_AIRCRAFT ? v->current_order.GetDestination() != GetStationIndex(v->tile) : v->dest_tile != v->tile)) { /* We are heading for another depot, keep driving. */ return; @@ -1688,7 +1688,7 @@ VehicleEnterTileStatus VehicleEnterTile( * @param type type of vehicle * @param owner owner of vehicles */ -FreeUnitIDGenerator::FreeUnitIDGenerator(VehicleType type, CompanyID owner) : cache(NULL), maxid(0), curid(0) +FreeUnitIDGenerator::FreeUnitIDGenerator(VehicleType type, CompanyID owner) : cache(nullptr), maxid(0), curid(0) { /* Find maximum */ const Vehicle *v; @@ -1800,17 +1800,17 @@ bool CanBuildVehicleInfrastructure(Vehic * Determines the #LiveryScheme for a vehicle. * @param engine_type Engine of the vehicle. * @param parent_engine_type Engine of the front vehicle, #INVALID_ENGINE if vehicle is at front itself. - * @param v the vehicle, \c NULL if in purchase list etc. + * @param v the vehicle, \c nullptr if in purchase list etc. * @return livery scheme to use. */ LiveryScheme GetEngineLiveryScheme(EngineID engine_type, EngineID parent_engine_type, const Vehicle *v) { - CargoID cargo_type = v == NULL ? (CargoID)CT_INVALID : v->cargo_type; + CargoID cargo_type = v == nullptr ? (CargoID)CT_INVALID : v->cargo_type; const Engine *e = Engine::Get(engine_type); switch (e->type) { default: NOT_REACHED(); case VEH_TRAIN: - if (v != NULL && parent_engine_type != INVALID_ENGINE && (UsesWagonOverride(v) || (v->IsArticulatedPart() && e->u.rail.railveh_type != RAILVEH_WAGON))) { + if (v != nullptr && parent_engine_type != INVALID_ENGINE && (UsesWagonOverride(v) || (v->IsArticulatedPart() && e->u.rail.railveh_type != RAILVEH_WAGON))) { /* Wagonoverrides use the colour scheme of the front engine. * Articulated parts use the colour scheme of the first part. (Not supported for articulated wagons) */ engine_type = parent_engine_type; @@ -1853,7 +1853,7 @@ LiveryScheme GetEngineLiveryScheme(Engin case VEH_ROAD: /* Always use the livery of the front */ - if (v != NULL && parent_engine_type != INVALID_ENGINE) { + if (v != nullptr && parent_engine_type != INVALID_ENGINE) { engine_type = parent_engine_type; e = Engine::Get(engine_type); cargo_type = v->First()->cargo_type; @@ -1890,7 +1890,7 @@ LiveryScheme GetEngineLiveryScheme(Engin * @param engine_type EngineID of the vehicle * @param company Owner of the vehicle * @param parent_engine_type EngineID of the front vehicle. INVALID_VEHICLE if vehicle is at front itself. - * @param v the vehicle. NULL if in purchase list etc. + * @param v the vehicle. nullptr if in purchase list etc. * @param livery_setting The livery settings to use for acquiring the livery information. * @return livery to use */ @@ -1900,9 +1900,9 @@ const Livery *GetEngineLivery(EngineID e LiveryScheme scheme = LS_DEFAULT; if (livery_setting == LIT_ALL || (livery_setting == LIT_COMPANY && company == _local_company)) { - if (v != NULL) { + if (v != nullptr) { const Group *g = Group::GetIfValid(v->First()->group_id); - if (g != NULL) { + if (g != nullptr) { /* Traverse parents until we find a livery or reach the top */ while (g->livery.in_use == 0 && g->parent != INVALID_GROUP) { g = Group::Get(g->parent); @@ -1925,7 +1925,7 @@ const Livery *GetEngineLivery(EngineID e static PaletteID GetEngineColourMap(EngineID engine_type, CompanyID company, EngineID parent_engine_type, const Vehicle *v) { - PaletteID map = (v != NULL) ? v->colourmap : PAL_NONE; + PaletteID map = (v != nullptr) ? v->colourmap : PAL_NONE; /* Return cached value if any */ if (map != PAL_NONE) return map; @@ -1943,7 +1943,7 @@ static PaletteID GetEngineColourMap(Engi * map else it's returned as-is. */ if (!HasBit(callback, 14)) { /* Update cache */ - if (v != NULL) const_cast(v)->colourmap = map; + if (v != nullptr) const_cast(v)->colourmap = map; return map; } } @@ -1962,7 +1962,7 @@ static PaletteID GetEngineColourMap(Engi if (twocc) map += livery->colour2 * 16; /* Update cache */ - if (v != NULL) const_cast(v)->colourmap = map; + if (v != nullptr) const_cast(v)->colourmap = map; return map; } @@ -1974,7 +1974,7 @@ static PaletteID GetEngineColourMap(Engi */ PaletteID GetEnginePalette(EngineID engine_type, CompanyID company) { - return GetEngineColourMap(engine_type, company, INVALID_ENGINE, NULL); + return GetEngineColourMap(engine_type, company, INVALID_ENGINE, nullptr); } /** @@ -2008,7 +2008,7 @@ void Vehicle::DeleteUnreachedImplicitOrd } const Order *order = this->GetOrder(this->cur_implicit_order_index); - while (order != NULL) { + while (order != nullptr) { if (this->cur_implicit_order_index == this->cur_real_order_index) break; if (order->IsType(OT_IMPLICIT)) { @@ -2022,7 +2022,7 @@ void Vehicle::DeleteUnreachedImplicitOrd } /* Wrap around */ - if (order == NULL) { + if (order == nullptr) { order = this->GetOrder(0); this->cur_implicit_order_index = 0; } @@ -2059,12 +2059,12 @@ void Vehicle::BeginLoading() * the 'wrong' terminal when skipping orders etc. */ Order *in_list = this->GetOrder(this->cur_implicit_order_index); if (this->IsGroundVehicle() && - (in_list == NULL || !in_list->IsType(OT_IMPLICIT) || + (in_list == nullptr || !in_list->IsType(OT_IMPLICIT) || in_list->GetDestination() != this->last_station_visited)) { bool suppress_implicit_orders = HasBit(this->GetGroundVehicleFlags(), GVF_SUPPRESS_IMPLICIT_ORDERS); /* Do not create consecutive duplicates of implicit orders */ - Order *prev_order = this->cur_implicit_order_index > 0 ? this->GetOrder(this->cur_implicit_order_index - 1) : (this->GetNumOrders() > 1 ? this->GetLastOrder() : NULL); - if (prev_order == NULL || + Order *prev_order = this->cur_implicit_order_index > 0 ? this->GetOrder(this->cur_implicit_order_index - 1) : (this->GetNumOrders() > 1 ? this->GetLastOrder() : nullptr); + if (prev_order == nullptr || (!prev_order->IsType(OT_IMPLICIT) && !prev_order->IsType(OT_GOTO_STATION)) || prev_order->GetDestination() != this->last_station_visited) { @@ -2077,7 +2077,7 @@ void Vehicle::BeginLoading() bool found = false; while (target_index != this->cur_real_order_index || this->GetNumManualOrders() == 0) { const Order *order = this->GetOrder(target_index); - if (order == NULL) break; // No orders. + if (order == nullptr) break; // No orders. if (order->IsType(OT_IMPLICIT) && order->GetDestination() == this->last_station_visited) { found = true; break; @@ -2113,15 +2113,15 @@ void Vehicle::BeginLoading() } /* Wrap around */ - if (order == NULL) { + if (order == nullptr) { order = this->GetOrder(0); this->cur_implicit_order_index = 0; } - assert(order != NULL); + assert(order != nullptr); } } } else if (!suppress_implicit_orders && - ((this->orders.list == NULL ? OrderList::CanAllocateItem() : this->orders.list->GetNumOrders() < MAX_VEH_ORDER_ID)) && + ((this->orders.list == nullptr ? OrderList::CanAllocateItem() : this->orders.list->GetNumOrders() < MAX_VEH_ORDER_ID)) && Order::CanAllocateItem()) { /* Insert new implicit order */ Order *implicit_order = new Order(); @@ -2165,7 +2165,7 @@ void Vehicle::BeginLoading() */ void Vehicle::CancelReservation(StationID next, Station *st) { - for (Vehicle *v = this; v != NULL; v = v->next) { + for (Vehicle *v = this; v != nullptr; v = v->next) { VehicleCargoList &cargo = v->cargo; if (cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) { DEBUG(misc, 1, "cancelling cargo reservation"); @@ -2185,7 +2185,7 @@ void Vehicle::LeaveStation() assert(this->current_order.IsType(OT_LOADING)); delete this->cargo_payment; - assert(this->cargo_payment == NULL); // cleared by ~CargoPayment + assert(this->cargo_payment == nullptr); // cleared by ~CargoPayment /* Only update the timetable if the vehicle was supposed to stop here. */ if (this->current_order.GetNonStopType() != ONSF_STOP_EVERYWHERE) UpdateVehicleTimetable(this, false); @@ -2214,7 +2214,7 @@ void Vehicle::LeaveStation() st->loading_vehicles.remove(this); HideFillingPercent(&this->fill_percent_te_id); - trip_occupancy = CalcPercentVehicleFilled(this, NULL); + trip_occupancy = CalcPercentVehicleFilled(this, nullptr); if (this->type == VEH_TRAIN && !(this->vehstatus & VS_CRASHED)) { /* Trigger station animation (trains only) */ @@ -2234,7 +2234,7 @@ void Vehicle::LeaveStation() */ void Vehicle::ResetRefitCaps() { - for (Vehicle *v = this; v != NULL; v = v->Next()) v->refit_cap = v->cargo_cap; + for (Vehicle *v = this; v != nullptr; v = v->Next()) v->refit_cap = v->cargo_cap; } /** @@ -2257,7 +2257,7 @@ void Vehicle::HandleLoading(bool mode) /* Only advance to next order if we just loaded at the current one */ const Order *order = this->GetOrder(this->cur_implicit_order_index); - if (order == NULL || + if (order == nullptr || (!order->IsType(OT_IMPLICIT) && !order->IsType(OT_GOTO_STATION)) || order->GetDestination() != this->last_station_visited) { return; @@ -2279,7 +2279,7 @@ void Vehicle::HandleLoading(bool mode) */ void Vehicle::GetConsistFreeCapacities(SmallMap &capacities) const { - for (const Vehicle *v = this; v != NULL; v = v->Next()) { + for (const Vehicle *v = this; v != nullptr; v = v->Next()) { if (v->cargo_cap == 0) continue; SmallPair *pair = capacities.Find(v->cargo_type); if (pair == capacities.End()) { @@ -2293,7 +2293,7 @@ void Vehicle::GetConsistFreeCapacities(S uint Vehicle::GetConsistTotalCapacity() const { uint result = 0; - for (const Vehicle *v = this; v != NULL; v = v->Next()) { + for (const Vehicle *v = this; v != nullptr; v = v->Next()) { result += v->cargo_cap; } return result; @@ -2650,34 +2650,34 @@ void Vehicle::ShowVisualEffect() const CreateEffectVehicleRel(v, x, y, 10, evt); } - } while ((v = v->Next()) != NULL); + } while ((v = v->Next()) != nullptr); if (sound) PlayVehicleSound(this, VSE_VISUAL_EFFECT); } /** * Set the next vehicle of this vehicle. - * @param next the next vehicle. NULL removes the next vehicle. + * @param next the next vehicle. nullptr removes the next vehicle. */ void Vehicle::SetNext(Vehicle *next) { assert(this != next); - if (this->next != NULL) { + if (this->next != nullptr) { /* We had an old next vehicle. Update the first and previous pointers */ - for (Vehicle *v = this->next; v != NULL; v = v->Next()) { + for (Vehicle *v = this->next; v != nullptr; v = v->Next()) { v->first = this->next; } - this->next->previous = NULL; + this->next->previous = nullptr; } this->next = next; - if (this->next != NULL) { + if (this->next != nullptr) { /* A new next vehicle. Update the first and previous pointers */ - if (this->next->previous != NULL) this->next->previous->next = NULL; + if (this->next->previous != nullptr) this->next->previous->next = nullptr; this->next->previous = this; - for (Vehicle *v = this->next; v != NULL; v = v->Next()) { + for (Vehicle *v = this->next; v != nullptr; v = v->Next()) { v->first = this->first; } } @@ -2690,12 +2690,12 @@ void Vehicle::SetNext(Vehicle *next) */ void Vehicle::AddToShared(Vehicle *shared_chain) { - assert(this->previous_shared == NULL && this->next_shared == NULL); - - if (shared_chain->orders.list == NULL) { - assert(shared_chain->previous_shared == NULL); - assert(shared_chain->next_shared == NULL); - this->orders.list = shared_chain->orders.list = new OrderList(NULL, shared_chain); + assert(this->previous_shared == nullptr && this->next_shared == nullptr); + + if (shared_chain->orders.list == nullptr) { + assert(shared_chain->previous_shared == nullptr); + assert(shared_chain->next_shared == nullptr); + this->orders.list = shared_chain->orders.list = new OrderList(nullptr, shared_chain); } this->next_shared = shared_chain->next_shared; @@ -2703,7 +2703,7 @@ void Vehicle::AddToShared(Vehicle *share shared_chain->next_shared = this; - if (this->next_shared != NULL) this->next_shared->previous_shared = this; + if (this->next_shared != nullptr) this->next_shared->previous_shared = this; shared_chain->orders.list->AddVehicle(this); } @@ -2725,7 +2725,7 @@ void Vehicle::RemoveFromShared() this->previous_shared->next_shared = this->NextShared(); } - if (this->next_shared != NULL) this->next_shared->previous_shared = this->previous_shared; + if (this->next_shared != nullptr) this->next_shared->previous_shared = this->previous_shared; if (this->orders.list->GetNumVehicles() == 1) { @@ -2738,8 +2738,8 @@ void Vehicle::RemoveFromShared() InvalidateWindowData(GetWindowClassForVehicleType(this->type), vli.Pack(), this->FirstShared()->index | (1U << 31)); } - this->next_shared = NULL; - this->previous_shared = NULL; + this->next_shared = nullptr; + this->previous_shared = nullptr; } void VehiclesYearlyLoop() @@ -2783,7 +2783,7 @@ void VehiclesYearlyLoop() bool CanVehicleUseStation(EngineID engine_type, const Station *st) { const Engine *e = Engine::GetIfValid(engine_type); - assert(e != NULL); + assert(e != nullptr); switch (e->type) { case VEH_TRAIN: @@ -2815,7 +2815,7 @@ bool CanVehicleUseStation(EngineID engin */ bool CanVehicleUseStation(const Vehicle *v, const Station *st) { - if (v->type == VEH_ROAD) return st->GetPrimaryRoadStop(RoadVehicle::From(v)) != NULL; + if (v->type == VEH_ROAD) return st->GetPrimaryRoadStop(RoadVehicle::From(v)) != nullptr; return CanVehicleUseStation(v->engine_type, st); } @@ -2896,7 +2896,7 @@ void GetVehicleSet(VehicleSet &set, Vehi u = u->GetFirstEnginePart(); /* Include num_vehicles vehicles, not counting articulated parts */ - for (; u != NULL && num_vehicles > 0; num_vehicles--) { + for (; u != nullptr && num_vehicles > 0; num_vehicles--) { do { /* Include current vehicle in the selection. */ include(set, u->index); @@ -2905,7 +2905,7 @@ void GetVehicleSet(VehicleSet &set, Vehi if (u->IsMultiheaded()) include(set, u->other_multiheaded_part->index); u = u->Next(); - } while (u != NULL && u->IsArticulatedPart()); + } while (u != nullptr && u->IsArticulatedPart()); } } } diff --git a/src/vehicle_base.h b/src/vehicle_base.h --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -459,7 +459,7 @@ public: */ inline void InvalidateNewGRFCacheOfChain() { - for (Vehicle *u = this; u != NULL; u = u->Next()) { + for (Vehicle *u = this; u != nullptr; u = u->Next()) { u->InvalidateNewGRFCache(); } } @@ -576,14 +576,14 @@ public: /** * Get the next vehicle of this vehicle. * @note articulated parts are also counted as vehicles. - * @return the next vehicle or NULL when there isn't a next vehicle. + * @return the next vehicle or nullptr when there isn't a next vehicle. */ inline Vehicle *Next() const { return this->next; } /** * Get the previous vehicle of this vehicle. * @note articulated parts are also counted as vehicles. - * @return the previous vehicle or NULL when there isn't a previous vehicle. + * @return the previous vehicle or nullptr when there isn't a previous vehicle. */ inline Vehicle *Previous() const { return this->previous; } @@ -600,7 +600,7 @@ public: inline Vehicle *Last() { Vehicle *v = this; - while (v->Next() != NULL) v = v->Next(); + while (v->Next() != nullptr) v = v->Next(); return v; } @@ -611,22 +611,22 @@ public: inline const Vehicle *Last() const { const Vehicle *v = this; - while (v->Next() != NULL) v = v->Next(); + while (v->Next() != nullptr) v = v->Next(); return v; } /** * Get the vehicle at offset \a n of this vehicle chain. * @param n Offset from the current vehicle. - * @return The new vehicle or NULL if the offset is out-of-bounds. + * @return The new vehicle or nullptr if the offset is out-of-bounds. */ inline Vehicle *Move(int n) { Vehicle *v = this; if (n < 0) { - for (int i = 0; i != n && v != NULL; i--) v = v->Previous(); + for (int i = 0; i != n && v != nullptr; i--) v = v->Previous(); } else { - for (int i = 0; i != n && v != NULL; i++) v = v->Next(); + for (int i = 0; i != n && v != nullptr; i++) v = v->Next(); } return v; } @@ -634,15 +634,15 @@ public: /** * Get the vehicle at offset \a n of this vehicle chain. * @param n Offset from the current vehicle. - * @return The new vehicle or NULL if the offset is out-of-bounds. + * @return The new vehicle or nullptr if the offset is out-of-bounds. */ inline const Vehicle *Move(int n) const { const Vehicle *v = this; if (n < 0) { - for (int i = 0; i != n && v != NULL; i--) v = v->Previous(); + for (int i = 0; i != n && v != nullptr; i--) v = v->Previous(); } else { - for (int i = 0; i != n && v != NULL; i++) v = v->Next(); + for (int i = 0; i != n && v != nullptr; i++) v = v->Next(); } return v; } @@ -651,20 +651,20 @@ public: * Get the first order of the vehicles order list. * @return first order of order list. */ - inline Order *GetFirstOrder() const { return (this->orders.list == NULL) ? NULL : this->orders.list->GetFirstOrder(); } + inline Order *GetFirstOrder() const { return (this->orders.list == nullptr) ? nullptr : this->orders.list->GetFirstOrder(); } void AddToShared(Vehicle *shared_chain); void RemoveFromShared(); /** * Get the next vehicle of the shared vehicle chain. - * @return the next shared vehicle or NULL when there isn't a next vehicle. + * @return the next shared vehicle or nullptr when there isn't a next vehicle. */ inline Vehicle *NextShared() const { return this->next_shared; } /** * Get the previous vehicle of the shared vehicle chain - * @return the previous shared vehicle or NULL when there isn't a previous vehicle. + * @return the previous shared vehicle or nullptr when there isn't a previous vehicle. */ inline Vehicle *PreviousShared() const { return this->previous_shared; } @@ -672,25 +672,25 @@ public: * Get the first vehicle of this vehicle chain. * @return the first vehicle of the chain. */ - inline Vehicle *FirstShared() const { return (this->orders.list == NULL) ? this->First() : this->orders.list->GetFirstSharedVehicle(); } + inline Vehicle *FirstShared() const { return (this->orders.list == nullptr) ? this->First() : this->orders.list->GetFirstSharedVehicle(); } /** * Check if we share our orders with another vehicle. * @return true if there are other vehicles sharing the same order */ - inline bool IsOrderListShared() const { return this->orders.list != NULL && this->orders.list->IsShared(); } + inline bool IsOrderListShared() const { return this->orders.list != nullptr && this->orders.list->IsShared(); } /** * Get the number of orders this vehicle has. * @return the number of orders this vehicle has. */ - inline VehicleOrderID GetNumOrders() const { return (this->orders.list == NULL) ? 0 : this->orders.list->GetNumOrders(); } + inline VehicleOrderID GetNumOrders() const { return (this->orders.list == nullptr) ? 0 : this->orders.list->GetNumOrders(); } /** * Get the number of manually added orders this vehicle has. * @return the number of manually added orders this vehicle has. */ - inline VehicleOrderID GetNumManualOrders() const { return (this->orders.list == NULL) ? 0 : this->orders.list->GetNumManualOrders(); } + inline VehicleOrderID GetNumManualOrders() const { return (this->orders.list == nullptr) ? 0 : this->orders.list->GetNumManualOrders(); } /** * Get the next station the vehicle will stop at. @@ -698,7 +698,7 @@ public: */ inline StationIDStack GetNextStoppingStation() const { - return (this->orders.list == NULL) ? INVALID_STATION : this->orders.list->GetNextStoppingStation(this); + return (this->orders.list == nullptr) ? INVALID_STATION : this->orders.list->GetNextStoppingStation(this); } void ResetRefitCaps(); @@ -853,22 +853,22 @@ public: } /** - * Returns order 'index' of a vehicle or NULL when it doesn't exists + * Returns order 'index' of a vehicle or nullptr when it doesn't exists * @param index the order to fetch * @return the found (or not) order */ inline Order *GetOrder(int index) const { - return (this->orders.list == NULL) ? NULL : this->orders.list->GetOrderAt(index); + return (this->orders.list == nullptr) ? nullptr : this->orders.list->GetOrderAt(index); } /** - * Returns the last order of a vehicle, or NULL if it doesn't exists + * Returns the last order of a vehicle, or nullptr if it doesn't exists * @return last order of a vehicle, if available */ inline Order *GetLastOrder() const { - return (this->orders.list == NULL) ? NULL : this->orders.list->GetLastOrder(); + return (this->orders.list == nullptr) ? nullptr : this->orders.list->GetLastOrder(); } bool IsEngineCountable() const; @@ -900,7 +900,7 @@ public: */ inline bool HasArticulatedPart() const { - return this->Next() != NULL && this->Next()->IsArticulatedPart(); + return this->Next() != nullptr && this->Next()->IsArticulatedPart(); } /** @@ -967,7 +967,7 @@ public: inline Vehicle *GetPrevVehicle() const { Vehicle *v = this->Previous(); - while (v != NULL && v->IsArticulatedPart()) v = v->Previous(); + while (v != nullptr && v->IsArticulatedPart()) v = v->Previous(); return v; } @@ -1103,7 +1103,7 @@ struct SpecializedVehicle : public Vehic */ static inline T *GetIfValid(size_t index) { - return IsValidID(index) ? Get(index) : NULL; + return IsValidID(index) ? Get(index) : nullptr; } /** diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -137,7 +137,7 @@ CommandCost CmdBuildVehicle(TileIndex ti SavedRandomSeeds saved_seeds; if (flags != subflags) SaveRandomSeeds(&saved_seeds); - Vehicle *v = NULL; + Vehicle *v = nullptr; switch (type) { case VEH_TRAIN: value.AddCost(CmdBuildRailVehicle(tile, subflags, e, GB(p1, 24, 8), &v)); break; case VEH_ROAD: value.AddCost(CmdBuildRoadVehicle(tile, subflags, e, GB(p1, 24, 8), &v)); break; @@ -153,7 +153,7 @@ CommandCost CmdBuildVehicle(TileIndex ti } if (refitting) { - value.AddCost(CmdRefitVehicle(tile, flags, v->index, cargo, NULL)); + value.AddCost(CmdRefitVehicle(tile, flags, v->index, cargo, nullptr)); } else { /* Fill in non-refitted capacities */ _returned_refit_capacity = e->GetDisplayDefaultCapacity(&_returned_mail_refit_capacity); @@ -207,7 +207,7 @@ CommandCost CmdSellRailWagon(DoCommandFl CommandCost CmdSellVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Vehicle *v = Vehicle::GetIfValid(GB(p1, 0, 20)); - if (v == NULL) return CMD_ERROR; + if (v == nullptr) return CMD_ERROR; Vehicle *front = v->First(); @@ -220,7 +220,7 @@ CommandCost CmdSellVehicle(TileIndex til /* Can we actually make the order backup, i.e. are there enough orders? */ if (p1 & MAKE_ORDER_BACKUP_FLAG && - front->orders.list != NULL && + front->orders.list != nullptr && !front->orders.list->IsShared() && !Order::CanAllocateItem(front->orders.list->GetNumOrders())) { /* Only happens in exceptional cases when there aren't enough orders anyhow. @@ -244,7 +244,7 @@ CommandCost CmdSellVehicle(TileIndex til /** * Helper to run the refit cost callback. - * @param v The vehicle we are refitting, can be NULL. + * @param v The vehicle we are refitting, can be nullptr. * @param engine_type Which engine to refit * @param new_cid Cargo type we are refitting to. * @param new_subtype New cargo subtype. @@ -257,7 +257,7 @@ static int GetRefitCostFactor(const Vehi const Engine *e = Engine::Get(engine_type); /* Is this vehicle a NewGRF vehicle? */ - if (e->GetGRF() != NULL) { + if (e->GetGRF() != nullptr) { const CargoSpec *cs = CargoSpec::Get(new_cid); uint32 param1 = (cs->classes << 16) | (new_subtype << 8) | e->GetGRF()->cargo_map[new_cid]; @@ -271,12 +271,12 @@ static int GetRefitCostFactor(const Vehi } *auto_refit_allowed = e->info.refit_cost == 0; - return (v == NULL || v->cargo_type != new_cid) ? e->info.refit_cost : 0; + return (v == nullptr || v->cargo_type != new_cid) ? e->info.refit_cost : 0; } /** * Learn the price of refitting a certain engine - * @param v The vehicle we are refitting, can be NULL. + * @param v The vehicle we are refitting, can be nullptr. * @param engine_type Which engine to refit * @param new_cid Cargo type we are refitting to. * @param new_subtype New cargo subtype. @@ -358,7 +358,7 @@ static CommandCost RefitVehicle(Vehicle v->InvalidateNewGRFCacheOfChain(); byte actual_subtype = new_subtype; - for (; v != NULL; v = (only_this ? NULL : v->Next())) { + for (; v != nullptr; v = (only_this ? nullptr : v->Next())) { /* Reset actual_subtype for every new vehicle */ if (!v->IsArticulatedPart()) actual_subtype = new_subtype; @@ -469,7 +469,7 @@ static CommandCost RefitVehicle(Vehicle CommandCost CmdRefitVehicle(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; /* Don't allow disasters and sparks and such to be refitted. * We cannot check for IsPrimaryVehicle as autoreplace also refits in free wagon chains. */ @@ -560,7 +560,7 @@ CommandCost CmdStartStopVehicle(TileInde if ((flags & DC_AUTOREPLACE) == 0) SetBit(p2, 0); Vehicle *v = Vehicle::GetIfValid(p1); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -652,7 +652,7 @@ CommandCost CmdMassStartStopVehicle(Tile if (!GenerateVehicleSortList(&list, vli)) return CMD_ERROR; } else { /* Get the list of vehicles in the depot */ - BuildDepotVehicleList(vli.vtype, tile, &list, NULL); + BuildDepotVehicleList(vli.vtype, tile, &list, nullptr); } for (uint i = 0; i < list.size(); i++) { @@ -751,7 +751,7 @@ static bool IsUniqueVehicleName(const ch const Vehicle *v; FOR_ALL_VEHICLES(v) { - if (v->name != NULL && strcmp(v->name, name) == 0) return false; + if (v->name != nullptr && strcmp(v->name, name) == 0) return false; } return true; @@ -821,11 +821,11 @@ CommandCost CmdCloneVehicle(TileIndex ti CommandCost total_cost(EXPENSES_NEW_VEHICLES); Vehicle *v = Vehicle::GetIfValid(p1); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; Vehicle *v_front = v; - Vehicle *w = NULL; - Vehicle *w_front = NULL; - Vehicle *w_rear = NULL; + Vehicle *w = nullptr; + Vehicle *w_front = nullptr; + Vehicle *w_rear = nullptr; /* * v_front is the front engine in the original vehicle @@ -845,7 +845,7 @@ CommandCost CmdCloneVehicle(TileIndex ti int veh_counter = 0; do { veh_counter++; - } while ((v = v->Next()) != NULL); + } while ((v = v->Next()) != nullptr); if (!Vehicle::CanAllocateItem(veh_counter)) { return_cmd_error(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME); @@ -873,7 +873,7 @@ CommandCost CmdCloneVehicle(TileIndex ti if (cost.Failed()) { /* Can't build a part, then sell the stuff we already made; clear up the mess */ - if (w_front != NULL) DoCommand(w_front->tile, w_front->index | (1 << 20), 0, flags, GetCmdSellVeh(w_front)); + if (w_front != nullptr) DoCommand(w_front->tile, w_front->index | (1 << 20), 0, flags, GetCmdSellVeh(w_front)); return cost; } @@ -906,7 +906,7 @@ CommandCost CmdCloneVehicle(TileIndex ti } w_rear = w; // trains needs to know the last car in the train, so they can add more in next loop } - } while (v->type == VEH_TRAIN && (v = v->GetNextVehicle()) != NULL); + } while (v->type == VEH_TRAIN && (v = v->GetNextVehicle()) != nullptr); if ((flags & DC_EXEC) && v_front->type == VEH_TRAIN) { /* for trains this needs to be the front engine due to the callback function */ @@ -932,7 +932,7 @@ CommandCost CmdCloneVehicle(TileIndex ti do { do { if (flags & DC_EXEC) { - assert(w != NULL); + assert(w != nullptr); /* Find out what's the best sub type */ byte subtype = GetBestFittingSubType(v, w, v->cargo_type); @@ -952,7 +952,7 @@ CommandCost CmdCloneVehicle(TileIndex ti if (v->cargo_type != initial_cargo && initial_cargo != CT_INVALID) { bool dummy; - total_cost.AddCost(GetRefitCost(NULL, v->engine_type, v->cargo_type, v->cargo_subtype, &dummy)); + total_cost.AddCost(GetRefitCost(nullptr, v->engine_type, v->cargo_type, v->cargo_subtype, &dummy)); } } @@ -961,10 +961,10 @@ CommandCost CmdCloneVehicle(TileIndex ti } else { break; } - } while (v != NULL); + } while (v != nullptr); if ((flags & DC_EXEC) && v->type == VEH_TRAIN) w = w->GetNextVehicle(); - } while (v->type == VEH_TRAIN && (v = v->GetNextVehicle()) != NULL); + } while (v->type == VEH_TRAIN && (v = v->GetNextVehicle()) != nullptr); if (flags & DC_EXEC) { /* @@ -975,7 +975,7 @@ CommandCost CmdCloneVehicle(TileIndex ti DoCommand(0, w_front->index | (p2 & 1 ? CO_SHARE : CO_COPY) << 30, v_front->index, flags, CMD_CLONE_ORDER); /* Now clone the vehicle's name, if it has one. */ - if (v_front->name != NULL) CloneVehicleName(v_front, w_front); + if (v_front->name != nullptr) CloneVehicleName(v_front, w_front); } /* Since we can't estimate the cost of cloning a vehicle accurately we must @@ -1045,7 +1045,7 @@ CommandCost CmdSendVehicleToDepot(TileIn } Vehicle *v = Vehicle::GetIfValid(GB(p1, 0, 20)); - if (v == NULL) return CMD_ERROR; + if (v == nullptr) return CMD_ERROR; if (!v->IsPrimaryVehicle()) return CMD_ERROR; return v->SendToDepot(flags, (DepotCommand)(p1 & DEPOT_COMMAND_MASK)); @@ -1063,7 +1063,7 @@ CommandCost CmdSendVehicleToDepot(TileIn CommandCost CmdRenameVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Vehicle *v = Vehicle::GetIfValid(p1); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; @@ -1077,7 +1077,7 @@ CommandCost CmdRenameVehicle(TileIndex t if (flags & DC_EXEC) { free(v->name); - v->name = reset ? NULL : stredup(text); + v->name = reset ? nullptr : stredup(text); InvalidateWindowClassesData(GetWindowClassForVehicleType(v->type), 1); MarkWholeScreenDirty(); } @@ -1101,7 +1101,7 @@ CommandCost CmdRenameVehicle(TileIndex t CommandCost CmdChangeServiceInt(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Vehicle *v = Vehicle::GetIfValid(p1); - if (v == NULL || !v->IsPrimaryVehicle()) return CMD_ERROR; + if (v == nullptr || !v->IsPrimaryVehicle()) return CMD_ERROR; CommandCost ret = CheckOwnership(v->owner); if (ret.Failed()) return ret; diff --git a/src/vehicle_func.h b/src/vehicle_func.h --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -60,7 +60,7 @@ byte GetBestFittingSubType(Vehicle *v_fr void ViewportAddVehicles(DrawPixelInfo *dpi); void ShowNewGrfVehicleError(EngineID engine, StringID part1, StringID part2, GRFBugs bug_type, bool critical); -CommandCost TunnelBridgeIsFree(TileIndex tile, TileIndex endtile, const Vehicle *ignore = NULL); +CommandCost TunnelBridgeIsFree(TileIndex tile, TileIndex endtile, const Vehicle *ignore = nullptr); void DecreaseVehicleValue(Vehicle *v); void CheckVehicleBreakdown(Vehicle *v); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -181,14 +181,14 @@ DropDownList BaseVehicleListWindow::Buil } /* cached values for VehicleNameSorter to spare many GetString() calls */ -static const Vehicle *_last_vehicle[2] = { NULL, NULL }; +static const Vehicle *_last_vehicle[2] = { nullptr, nullptr }; void BaseVehicleListWindow::SortVehicleList() { if (this->vehicles.Sort()) return; /* invalidate cached values for name sorter - vehicle names could change */ - _last_vehicle[0] = _last_vehicle[1] = NULL; + _last_vehicle[0] = _last_vehicle[1] = nullptr; } void DepotSortList(VehicleList *list) @@ -235,7 +235,7 @@ byte GetBestFittingSubType(Vehicle *v_fr /* Create a list of subtypes used by the various parts of v_for */ static std::vector subtypes; subtypes.clear(); - for (; v_from != NULL; v_from = v_from->HasArticulatedPart() ? v_from->GetNextArticulatedPart() : NULL) { + for (; v_from != nullptr; v_from = v_from->HasArticulatedPart() ? v_from->GetNextArticulatedPart() : nullptr) { const Engine *e_from = v_from->GetEngine(); if (!e_from->CanCarryCargo() || !HasBit(e_from->info.callback_mask, CBM_VEHICLE_CARGO_SUFFIX)) continue; include(subtypes, GetCargoSubtypeText(v_from)); @@ -245,7 +245,7 @@ byte GetBestFittingSubType(Vehicle *v_fr bool success = false; if (subtypes.size() > 0) { /* Check whether any articulated part is refittable to 'dest_cargo_type' with a subtype listed in 'subtypes' */ - for (Vehicle *v = v_for; v != NULL; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL) { + for (Vehicle *v = v_for; v != nullptr; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : nullptr) { const Engine *e = v->GetEngine(); if (!e->CanCarryCargo() || !HasBit(e->info.callback_mask, CBM_VEHICLE_CARGO_SUFFIX)) continue; if (!HasBit(e->info.refit_mask, dest_cargo_type) && v->cargo_type != dest_cargo_type) continue; @@ -507,7 +507,7 @@ struct RefitWindow : public Window { } current_index++; } - } while (v->IsGroundVehicle() && (v = v->Next()) != NULL); + } while (v->IsGroundVehicle() && (v = v->Next()) != nullptr); } /** @@ -570,10 +570,10 @@ struct RefitWindow : public Window { */ RefitOption *GetRefitOption() { - if (this->sel[0] < 0) return NULL; + if (this->sel[0] < 0) return nullptr; SubtypeList &l = this->list[this->sel[0]]; - if ((uint)this->sel[1] >= l.size()) return NULL; + if ((uint)this->sel[1] >= l.size()) return nullptr; return &l[this->sel[1]]; } @@ -587,7 +587,7 @@ struct RefitWindow : public Window { this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_VR_SCROLLBAR); - this->hscroll = (v->IsGroundVehicle() ? this->GetScrollbar(WID_VR_HSCROLLBAR) : NULL); + this->hscroll = (v->IsGroundVehicle() ? this->GetScrollbar(WID_VR_HSCROLLBAR) : nullptr); this->GetWidget(WID_VR_SELECT_HEADER)->tool_tip = STR_REFIT_TRAIN_LIST_TOOLTIP + v->type; this->GetWidget(WID_VR_MATRIX)->tool_tip = STR_REFIT_TRAIN_LIST_TOOLTIP + v->type; NWidgetCore *nwi = this->GetWidget(WID_VR_REFIT); @@ -604,7 +604,7 @@ struct RefitWindow : public Window { void OnInit() override { - if (this->cargo != NULL) { + if (this->cargo != nullptr) { /* Store the RefitOption currently in use. */ RefitOption current_refit_option = *(this->cargo); @@ -612,8 +612,8 @@ struct RefitWindow : public Window { this->BuildRefitList(); this->sel[0] = -1; this->sel[1] = 0; - this->cargo = NULL; - for (uint i = 0; this->cargo == NULL && i < NUM_CARGO; i++) { + this->cargo = nullptr; + for (uint i = 0; this->cargo == nullptr && i < NUM_CARGO; i++) { for (uint j = 0; j < list[i].size(); j++) { if (list[i][j] == current_refit_option) { this->sel[0] = i; @@ -635,7 +635,7 @@ struct RefitWindow : public Window { void OnPaint() override { /* Determine amount of items for scroller. */ - if (this->hscroll != NULL) this->hscroll->SetCount(this->vehicle_width); + if (this->hscroll != nullptr) this->hscroll->SetCount(this->vehicle_width); /* Calculate sprite position. */ NWidgetCore *vehicle_panel_display = this->GetWidget(WID_VR_VEHICLE_PANEL_DISPLAY); @@ -729,7 +729,7 @@ struct RefitWindow : public Window { case WID_VR_VEHICLE_PANEL_DISPLAY: { Vehicle *v = Vehicle::Get(this->window_number); DrawVehicleImage(v, this->sprite_left + WD_FRAMERECT_LEFT, this->sprite_right - WD_FRAMERECT_RIGHT, - r.top + WD_FRAMERECT_TOP, INVALID_VEHICLE, EIT_IN_DETAILS, this->hscroll != NULL ? this->hscroll->GetPosition() : 0); + r.top + WD_FRAMERECT_TOP, INVALID_VEHICLE, EIT_IN_DETAILS, this->hscroll != nullptr ? this->hscroll->GetPosition() : 0); /* Highlight selected vehicles. */ if (this->order != INVALID_VEH_ORDER_ID) break; @@ -742,7 +742,7 @@ struct RefitWindow : public Window { int left = INT32_MIN; int width = 0; - for (Train *u = Train::From(v); u != NULL; u = u->Next()) { + for (Train *u = Train::From(v); u != nullptr; u = u->Next()) { /* Start checking. */ const bool contained = std::find(vehicles_to_refit.begin(), vehicles_to_refit.end(), u->index) != vehicles_to_refit.end(); if (contained && left == INT32_MIN) { @@ -751,8 +751,8 @@ struct RefitWindow : public Window { } /* Draw a selection. */ - if ((!contained || u->Next() == NULL) && left != INT32_MIN) { - if (u->Next() == NULL && contained) { + if ((!contained || u->Next() == nullptr) && left != INT32_MIN) { + if (u->Next() == nullptr && contained) { int current_width = u->GetDisplayImageWidth(); width += current_width; x += current_width; @@ -790,7 +790,7 @@ struct RefitWindow : public Window { break; case WID_VR_INFO: - if (this->cargo != NULL) { + if (this->cargo != nullptr) { StringID string = this->GetCapacityString(this->cargo); if (string != INVALID_STRING_ID) { DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, @@ -857,7 +857,7 @@ struct RefitWindow : public Window { const NWidgetCore *matrix_widget = this->GetWidget(WID_VR_VEHICLE_PANEL_DISPLAY); if (_current_text_dir == TD_RTL) click_x = matrix_widget->current_x - click_x; click_x -= this->vehicle_margin; - if (this->hscroll != NULL) click_x += this->hscroll->GetPosition(); + if (this->hscroll != nullptr) click_x += this->hscroll->GetPosition(); return click_x; } @@ -878,7 +878,7 @@ struct RefitWindow : public Window { if (left_x >= 0) { const Train *u = Train::From(v); bool start_counting = false; - for (; u != NULL; u = u->Next()) { + for (; u != nullptr; u = u->Next()) { int current_width = u->GetDisplayImageWidth(); left_x -= current_width; right_x -= current_width; @@ -942,7 +942,7 @@ struct RefitWindow : public Window { } case WID_VR_REFIT: // refit button - if (this->cargo != NULL) { + if (this->cargo != nullptr) { const Vehicle *v = Vehicle::Get(this->window_number); if (this->order == INVALID_VEH_ORDER_ID) { @@ -986,7 +986,7 @@ struct RefitWindow : public Window { { this->vehicle_width = GetVehicleWidth(Vehicle::Get(this->window_number), EIT_IN_DETAILS); this->vscroll->SetCapacityFromWidget(this, WID_VR_MATRIX); - if (this->hscroll != NULL) this->hscroll->SetCapacityFromWidget(this, WID_VR_VEHICLE_PANEL_DISPLAY); + if (this->hscroll != nullptr) this->hscroll->SetCapacityFromWidget(this, WID_VR_VEHICLE_PANEL_DISPLAY); } }; @@ -1137,8 +1137,8 @@ static int CDECL VehicleCargoSorter(cons CargoArray diff; /* Append the cargo of the connected waggons */ - for (v = *a; v != NULL; v = v->Next()) diff[v->cargo_type] += v->cargo_cap; - for (v = *b; v != NULL; v = v->Next()) diff[v->cargo_type] -= v->cargo_cap; + for (v = *a; v != nullptr; v = v->Next()) diff[v->cargo_type] += v->cargo_cap; + for (v = *b; v != nullptr; v = v->Next()) diff[v->cargo_type] -= v->cargo_cap; int r = 0; for (CargoID i = 0; i < NUM_CARGO; i++) { @@ -1176,8 +1176,8 @@ static int CDECL VehicleValueSorter(cons const Vehicle *u; Money diff = 0; - for (u = *a; u != NULL; u = u->Next()) diff += u->value; - for (u = *b; u != NULL; u = u->Next()) diff -= u->value; + for (u = *a; u != nullptr; u = u->Next()) diff += u->value; + for (u = *b; u != nullptr; u = u->Next()) diff -= u->value; int r = ClampToI32(diff); return (r != 0) ? r : VehicleNumberSorter(a, b); @@ -1218,10 +1218,10 @@ void InitializeGUI() static inline void ChangeVehicleWindow(WindowClass window_class, VehicleID from_index, VehicleID to_index) { Window *w = FindWindowById(window_class, from_index); - if (w != NULL) { + if (w != nullptr) { /* Update window_number */ w->window_number = to_index; - if (w->viewport != NULL) w->viewport->follow_vehicle = to_index; + if (w->viewport != nullptr) w->viewport->follow_vehicle = to_index; /* Update vehicle drag data */ if (_thd.window_class == window_class && _thd.window_number == (WindowNumber)from_index) { @@ -1291,7 +1291,7 @@ static const NWidgetPart _nested_vehicle static void DrawSmallOrderList(const Vehicle *v, int left, int right, int y, VehicleOrderID start = 0) { const Order *order = v->GetOrder(start); - if (order == NULL) return; + if (order == nullptr) return; bool rtl = _current_text_dir == TD_RTL; int l_offset = rtl ? 0 : ScaleGUITrad(6); @@ -1312,7 +1312,7 @@ static void DrawSmallOrderList(const Veh oid++; order = order->next; - if (order == NULL) { + if (order == nullptr) { order = v->orders.list->GetFirstOrder(); oid = 0; } @@ -1397,7 +1397,7 @@ void BaseVehicleListWindow::DrawVehicleL DrawVehicleImage(v, image_left, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0); DrawString(text_left, text_right, y + line_height - FONT_HEIGHT_SMALL - WD_FRAMERECT_BOTTOM - 1, STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR); - if (v->name != NULL) { + if (v->name != nullptr) { /* The vehicle got a name so we will print it */ SetDParam(0, v->index); DrawString(text_left, text_right, y, STR_TINY_BLACK_VEHICLE); @@ -1869,7 +1869,7 @@ struct VehicleDetailsWindow : Window { const Vehicle *v = Vehicle::Get(window_number); this->CreateNestedTree(); - this->vscroll = (v->type == VEH_TRAIN ? this->GetScrollbar(WID_VD_SCROLLBAR) : NULL); + this->vscroll = (v->type == VEH_TRAIN ? this->GetScrollbar(WID_VD_SCROLLBAR) : nullptr); this->FinishInitNested(window_number); this->GetWidget(WID_VD_RENAME_VEHICLE)->tool_tip = STR_VEHICLE_DETAILS_TRAIN_RENAME + v->type; @@ -1914,7 +1914,7 @@ struct VehicleDetailsWindow : Window { /* An articulated RV has its text drawn under the sprite instead of after it, hence 15 pixels extra. */ desired_height = WD_FRAMERECT_TOP + ScaleGUITrad(15) + 3 * FONT_HEIGHT_NORMAL + 2 + WD_FRAMERECT_BOTTOM; /* Add space for the cargo amount for each part. */ - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { if (u->cargo_cap != 0) desired_height += FONT_HEIGHT_NORMAL + 1; } } else { @@ -2219,15 +2219,15 @@ struct VehicleDetailsWindow : Window { void OnQueryTextFinished(char *str) override { - if (str == NULL) return; - - DoCommandP(0, this->window_number, 0, CMD_RENAME_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN + Vehicle::Get(this->window_number)->type), NULL, str); + if (str == nullptr) return; + + DoCommandP(0, this->window_number, 0, CMD_RENAME_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN + Vehicle::Get(this->window_number)->type), nullptr, str); } void OnResize() override { NWidgetCore *nwi = this->GetWidget(WID_VD_MATRIX); - if (nwi != NULL) { + if (nwi != nullptr) { this->vscroll->SetCapacityFromWidget(this, WID_VD_MATRIX); } } @@ -2382,7 +2382,7 @@ void CcStartStopVehicle(const CommandCos if (result.Failed()) return; const Vehicle *v = Vehicle::GetIfValid(p1); - if (v == NULL || !v->IsPrimaryVehicle() || v->owner != _local_company) return; + if (v == nullptr || !v->IsPrimaryVehicle() || v->owner != _local_company) return; StringID msg = (v->vehstatus & VS_STOPPED) ? STR_VEHICLE_COMMAND_STOPPED : STR_VEHICLE_COMMAND_STARTED; Point pt = RemapCoords(v->x_pos, v->y_pos, v->z_pos); @@ -2397,7 +2397,7 @@ void CcStartStopVehicle(const CommandCos void StartStopVehicle(const Vehicle *v, bool texteffect) { assert(v->IsPrimaryVehicle()); - DoCommandP(v->tile, v->index, 0, _vehicle_command_translation_table[VCT_CMD_START_STOP][v->type], texteffect ? CcStartStopVehicle : NULL); + DoCommandP(v->tile, v->index, 0, _vehicle_command_translation_table[VCT_CMD_START_STOP][v->type], texteffect ? CcStartStopVehicle : nullptr); } /** Checks whether the vehicle may be refitted at the moment.*/ @@ -2407,7 +2407,7 @@ static bool IsVehicleRefitable(const Veh do { if (IsEngineRefittable(v->engine_type)) return true; - } while (v->IsGroundVehicle() && (v = v->Next()) != NULL); + } while (v->IsGroundVehicle() && (v = v->Next()) != nullptr); return false; } @@ -2709,7 +2709,7 @@ public: * most likely already open, but is also visible in the vehicle viewport. */ DoCommandP(v->tile, v->index, _ctrl_pressed ? 1 : 0, _vehicle_command_translation_table[VCT_CMD_CLONE_VEH][v->type], - _ctrl_pressed ? NULL : CcCloneVehicle); + _ctrl_pressed ? nullptr : CcCloneVehicle); break; case WID_VV_TURN_AROUND: // turn around assert(v->IsGroundVehicle()); @@ -2725,7 +2725,7 @@ public: void OnResize() override { - if (this->viewport != NULL) { + if (this->viewport != nullptr) { NWidgetViewport *nvp = this->GetWidget(WID_VV_VIEWPORT); nvp->UpdateViewportCoordinates(this); } @@ -2797,7 +2797,7 @@ void ShowVehicleViewWindow(const Vehicle */ bool VehicleClicked(const Vehicle *v) { - assert(v != NULL); + assert(v != nullptr); if (!(_thd.place_mode & HT_VEHICLE)) return false; v = v->First(); @@ -2809,7 +2809,7 @@ bool VehicleClicked(const Vehicle *v) void StopGlobalFollowVehicle(const Vehicle *v) { Window *w = FindWindowById(WC_MAIN_WINDOW, 0); - if (w != NULL && w->viewport->follow_vehicle == v->index) { + if (w != nullptr && w->viewport->follow_vehicle == v->index) { ScrollMainWindowTo(v->x_pos, v->y_pos, v->z_pos, true); // lock the main view on the vehicle's last position w->viewport->follow_vehicle = INVALID_VEHICLE; } @@ -2864,7 +2864,7 @@ int GetVehicleWidth(const Vehicle *v, En { if (v->type == VEH_TRAIN || v->type == VEH_ROAD) { int vehicle_width = 0; - for (const Vehicle *u = v; u != NULL; u = u->Next()) { + for (const Vehicle *u = v; u != nullptr; u = u->Next()) { vehicle_width += GetSingleVehicleWidth(u, image_type); } return vehicle_width; @@ -2884,7 +2884,7 @@ void SetMouseCursorVehicle(const Vehicle _cursor.sprite_count = 0; int total_width = 0; - for (; v != NULL; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL) { + for (; v != nullptr; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : nullptr) { if (total_width >= 2 * (int)VEHICLEINFO_FULL_VEHICLE_WIDTH) break; PaletteID pal = (v->vehstatus & VS_CRASHED) ? PALETTE_CRASH : GetVehiclePalette(v); diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -65,13 +65,13 @@ bool VehicleListIdentifier::UnpackIfVali * @param type Type of vehicle * @param tile The tile the depot is located on * @param engines Pointer to list to add vehicles to - * @param wagons Pointer to list to add wagons to (can be NULL) + * @param wagons Pointer to list to add wagons to (can be nullptr) * @param individual_wagons If true add every wagon to \a wagons which is not attached to an engine. If false only add the first wagon of every row. */ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons, bool individual_wagons) { engines->clear(); - if (wagons != NULL && wagons != engines) wagons->clear(); + if (wagons != nullptr && wagons != engines) wagons->clear(); const Vehicle *v; FOR_ALL_VEHICLES(v) { @@ -84,7 +84,7 @@ void BuildDepotVehicleList(VehicleType t const Train *t = Train::From(v); if (t->IsArticulatedPart() || t->IsRearDualheaded()) continue; if (t->track != TRACK_BIT_DEPOT) continue; - if (wagons != NULL && t->First()->IsFreeWagon()) { + if (wagons != nullptr && t->First()->IsFreeWagon()) { if (individual_wagons || t->IsFreeWagon()) wagons->push_back(t); continue; } @@ -104,7 +104,7 @@ void BuildDepotVehicleList(VehicleType t /* Ensure the lists are not wasting too much space. If the lists are fresh * (i.e. built within a command) then this will actually do nothing. */ engines->shrink_to_fit(); - if (wagons != NULL && wagons != engines) wagons->shrink_to_fit(); + if (wagons != nullptr && wagons != engines) wagons->shrink_to_fit(); } /** @@ -139,9 +139,9 @@ bool GenerateVehicleSortList(VehicleList case VL_SHARED_ORDERS: /* Add all vehicles from this vehicle's shared order list */ v = Vehicle::GetIfValid(vli.index); - if (v == NULL || v->type != vli.vtype || !v->IsPrimaryVehicle()) return false; + if (v == nullptr || v->type != vli.vtype || !v->IsPrimaryVehicle()) return false; - for (; v != NULL; v = v->NextShared()) { + for (; v != nullptr; v = v->NextShared()) { list->push_back(v); } break; diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -140,7 +140,7 @@ static void GetVideoModes() set_gfx_mode(_fullscreen ? GFX_AUTODETECT_FULLSCREEN : GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); GFX_MODE_LIST *mode_list = get_gfx_mode_list(gfx_driver->id); - if (mode_list == NULL) { + if (mode_list == nullptr) { memcpy(_resolutions, default_resolutions, sizeof(default_resolutions)); _num_resolutions = lengthof(default_resolutions); return; @@ -243,7 +243,7 @@ static bool CreateMainSurface(uint w, ui bool VideoDriver_Allegro::ClaimMousePointer() { select_mouse_cursor(MOUSE_CURSOR_NONE); - show_mouse(NULL); + show_mouse(nullptr); disable_hardware_cursor(); return true; } @@ -424,7 +424,7 @@ int _allegro_instance_count = 0; const char *VideoDriver_Allegro::Start(const char * const *parm) { - if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) { + if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, nullptr)) { DEBUG(driver, 0, "allegro: install_allegro failed '%s'", allegro_error); return "Failed to set up Allegro"; } @@ -437,8 +437,8 @@ const char *VideoDriver_Allegro::Start(c #if defined _DEBUG /* Allegro replaces SEGV/ABRT signals meaning that the debugger will never * be triggered, so rereplace the signals and make the debugger useful. */ - signal(SIGABRT, NULL); - signal(SIGSEGV, NULL); + signal(SIGABRT, nullptr); + signal(SIGSEGV, nullptr); #endif GetVideoModes(); @@ -448,7 +448,7 @@ const char *VideoDriver_Allegro::Start(c MarkWholeScreenDirty(); set_close_button_callback(HandleExitGameRequest); - return NULL; + return nullptr; } void VideoDriver_Allegro::Stop() @@ -463,7 +463,7 @@ static uint32 GetTime() { struct timeval tim; - gettimeofday(&tim, NULL); + gettimeofday(&tim, nullptr); return tim.tv_usec / 1000 + tim.tv_sec * 1000; } #else diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -87,7 +87,7 @@ static void WINAPI CheckForConsoleInput( DWORD nb; HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); for (;;) { - ReadFile(hStdin, _win_console_thread_buffer, lengthof(_win_console_thread_buffer), &nb, NULL); + ReadFile(hStdin, _win_console_thread_buffer, lengthof(_win_console_thread_buffer), &nb, nullptr); if (nb >= lengthof(_win_console_thread_buffer)) nb = lengthof(_win_console_thread_buffer) - 1; _win_console_thread_buffer[nb] = '\0'; @@ -102,12 +102,12 @@ static void CreateWindowsConsoleThread() { DWORD dwThreadId; /* Create event to signal when console input is ready */ - _hInputReady = CreateEvent(NULL, false, false, NULL); - _hWaitForInputHandling = CreateEvent(NULL, false, false, NULL); - if (_hInputReady == NULL || _hWaitForInputHandling == NULL) usererror("Cannot create console event!"); + _hInputReady = CreateEvent(nullptr, false, false, nullptr); + _hWaitForInputHandling = CreateEvent(nullptr, false, false, nullptr); + if (_hInputReady == nullptr || _hWaitForInputHandling == nullptr) usererror("Cannot create console event!"); - _hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CheckForConsoleInput, NULL, 0, &dwThreadId); - if (_hThread == NULL) usererror("Cannot create console thread!"); + _hThread = CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)CheckForConsoleInput, nullptr, 0, &dwThreadId); + if (_hThread == nullptr) usererror("Cannot create console thread!"); DEBUG(driver, 2, "Windows console thread started"); } @@ -130,7 +130,7 @@ static void *_dedicated_video_mem; /* Whether a fork has been done. */ bool _dedicated_forks; -extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = NULL); +extern bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, GameMode newgm, Subdirectory subdir, struct LoadFilter *lf = nullptr); static FVideoDriver_Dedicated iFVideoDriver_Dedicated; @@ -138,7 +138,7 @@ static FVideoDriver_Dedicated iFVideoDri const char *VideoDriver_Dedicated::Start(const char * const *parm) { int bpp = BlitterFactory::GetCurrentBlitter()->GetScreenDepth(); - _dedicated_video_mem = (bpp == 0) ? NULL : MallocT(_cur_resolution.width * _cur_resolution.height * (bpp / 8)); + _dedicated_video_mem = (bpp == 0) ? nullptr : MallocT(_cur_resolution.width * _cur_resolution.height * (bpp / 8)); _screen.width = _screen.pitch = _cur_resolution.width; _screen.height = _cur_resolution.height; @@ -164,7 +164,7 @@ const char *VideoDriver_Dedicated::Start #endif DEBUG(driver, 1, "Loading dedicated server"); - return NULL; + return nullptr; } void VideoDriver_Dedicated::Stop() @@ -192,14 +192,14 @@ static bool InputWaiting() FD_SET(STDIN, &readfds); /* don't care about writefds and exceptfds: */ - return select(STDIN + 1, &readfds, NULL, NULL, &tv) > 0; + return select(STDIN + 1, &readfds, nullptr, nullptr, &tv) > 0; } static uint32 GetTime() { struct timeval tim; - gettimeofday(&tim, NULL); + gettimeofday(&tim, nullptr); return tim.tv_usec / 1000 + tim.tv_sec * 1000; } @@ -226,7 +226,7 @@ static void DedicatedHandleKeyInput() if (_exit_game) return; #if defined(UNIX) || defined(__OS2__) - if (fgets(input_line, lengthof(input_line), stdin) == NULL) return; + if (fgets(input_line, lengthof(input_line), stdin) == nullptr) return; #else /* Handle console input, and signal console thread, it can accept input again */ assert_compile(lengthof(_win_console_thread_buffer) <= lengthof(input_line)); diff --git a/src/video/null_v.cpp b/src/video/null_v.cpp --- a/src/video/null_v.cpp +++ b/src/video/null_v.cpp @@ -29,13 +29,13 @@ const char *VideoDriver_Null::Start(cons this->ticks = GetDriverParamInt(parm, "ticks", 1000); _screen.width = _screen.pitch = _cur_resolution.width; _screen.height = _cur_resolution.height; - _screen.dst_ptr = NULL; + _screen.dst_ptr = nullptr; ScreenSizeChanged(); /* Do not render, nor blit */ DEBUG(misc, 1, "Forcing blitter 'null'..."); BlitterFactory::SelectBlitter("null"); - return NULL; + return nullptr; } void VideoDriver_Null::Stop() { } diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -39,9 +39,9 @@ static bool _all_modes; /** Whether the drawing is/may be done in a separate thread. */ static bool _draw_threaded; /** Mutex to keep the access to the shared memory controlled. */ -static std::recursive_mutex *_draw_mutex = NULL; +static std::recursive_mutex *_draw_mutex = nullptr; /** Signal to draw the next frame. */ -static std::condition_variable_any *_draw_signal = NULL; +static std::condition_variable_any *_draw_signal = nullptr; /** Should we keep continue drawing? */ static volatile bool _draw_continue; static Palette _local_palette; @@ -111,7 +111,7 @@ static void UpdatePalette(bool init = fa * best mapping of shadow palette colors to real palette * colors from scratch. */ - SDL_BlitSurface(_sdl_screen, NULL, _sdl_realscreen, NULL); + SDL_BlitSurface(_sdl_screen, nullptr, _sdl_realscreen, nullptr); SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); } } @@ -158,7 +158,7 @@ static void DrawSurfaceToScreen() _num_dirty_rects = 0; if (n > MAX_DIRTY_RECTS) { if (_sdl_screen != _sdl_realscreen) { - SDL_BlitSurface(_sdl_screen, NULL, _sdl_realscreen, NULL); + SDL_BlitSurface(_sdl_screen, nullptr, _sdl_realscreen, nullptr); } SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); } else { @@ -204,10 +204,10 @@ static const Dimension _default_resoluti static void GetVideoModes() { - SDL_Rect **modes = SDL_ListModes(NULL, SDL_SWSURFACE | SDL_FULLSCREEN); - if (modes == NULL) usererror("sdl: no modes available"); + SDL_Rect **modes = SDL_ListModes(nullptr, SDL_SWSURFACE | SDL_FULLSCREEN); + if (modes == nullptr) usererror("sdl: no modes available"); - _all_modes = (SDL_ListModes(NULL, SDL_SWSURFACE | (_fullscreen ? SDL_FULLSCREEN : 0)) == (void*)-1); + _all_modes = (SDL_ListModes(nullptr, SDL_SWSURFACE | (_fullscreen ? SDL_FULLSCREEN : 0)) == (void*)-1); if (modes == (void*)-1) { int n = 0; for (uint i = 0; i < lengthof(_default_resolutions); i++) { @@ -278,15 +278,15 @@ bool VideoDriver_SDL::CreateMainSurface( if (bpp == 0) usererror("Can't use a blitter that blits 0 bpp for normal visuals"); char icon_path[MAX_PATH]; - if (FioFindFullPath(icon_path, lastof(icon_path), BASESET_DIR, "openttd.32.bmp") != NULL) { + if (FioFindFullPath(icon_path, lastof(icon_path), BASESET_DIR, "openttd.32.bmp") != nullptr) { /* Give the application an icon */ icon = SDL_LoadBMP(icon_path); - if (icon != NULL) { + if (icon != nullptr) { /* Get the colourkey, which will be magenta */ uint32 rgbmap = SDL_MapRGB(icon->format, 255, 0, 255); SDL_SetColorKey(icon, SDL_SRCCOLORKEY, rgbmap); - SDL_WM_SetIcon(icon, NULL); + SDL_WM_SetIcon(icon, nullptr); SDL_FreeSurface(icon); } } @@ -322,9 +322,9 @@ bool VideoDriver_SDL::CreateMainSurface( if (want_hwpalette) DEBUG(driver, 1, "SDL: requesting hardware palette"); /* Free any previously allocated shadow surface */ - if (_sdl_screen != NULL && _sdl_screen != _sdl_realscreen) SDL_FreeSurface(_sdl_screen); + if (_sdl_screen != nullptr && _sdl_screen != _sdl_realscreen) SDL_FreeSurface(_sdl_screen); - if (_sdl_realscreen != NULL) { + if (_sdl_realscreen != nullptr) { if (_requested_hwpalette != want_hwpalette) { /* SDL (at least the X11 driver), reuses the * same window and palette settings when the bpp @@ -349,7 +349,7 @@ bool VideoDriver_SDL::CreateMainSurface( /* DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK */ newscreen = SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE | (want_hwpalette ? SDL_HWPALETTE : 0) | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE)); - if (newscreen == NULL) { + if (newscreen == nullptr) { DEBUG(driver, 0, "SDL: Couldn't allocate a window to draw on"); return false; } @@ -376,7 +376,7 @@ bool VideoDriver_SDL::CreateMainSurface( */ DEBUG(driver, 1, "SDL: using shadow surface"); newscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, bpp, 0, 0, 0, 0); - if (newscreen == NULL) { + if (newscreen == nullptr) { DEBUG(driver, 0, "SDL: Couldn't allocate a shadow surface to draw on"); return false; } @@ -637,9 +637,9 @@ const char *VideoDriver_SDL::Start(const MarkWholeScreenDirty(); SetupKeyboard(); - _draw_threaded = GetDriverParam(parm, "no_threads") == NULL && GetDriverParam(parm, "no_thread") == NULL; + _draw_threaded = GetDriverParam(parm, "no_threads") == nullptr && GetDriverParam(parm, "no_thread") == nullptr; - return NULL; + return nullptr; } void VideoDriver_SDL::SetupKeyboard() @@ -673,7 +673,7 @@ void VideoDriver_SDL::MainLoop() /* Initialise the mutex first, because that's the thing we *need* * directly in the newly created thread. */ _draw_mutex = new std::recursive_mutex(); - if (_draw_mutex == NULL) { + if (_draw_mutex == nullptr) { _draw_threaded = false; } else { draw_lock = std::unique_lock(*_draw_mutex); @@ -688,8 +688,8 @@ void VideoDriver_SDL::MainLoop() draw_lock.release(); delete _draw_mutex; delete _draw_signal; - _draw_mutex = NULL; - _draw_signal = NULL; + _draw_mutex = nullptr; + _draw_signal = nullptr; } else { /* Wait till the draw mutex has started itself. */ _draw_signal->wait(*_draw_mutex); @@ -757,26 +757,26 @@ void VideoDriver_SDL::MainLoop() /* The gameloop is the part that can run asynchronously. The rest * except sleeping can't. */ - if (_draw_mutex != NULL) draw_lock.unlock(); + if (_draw_mutex != nullptr) draw_lock.unlock(); GameLoop(); - if (_draw_mutex != NULL) draw_lock.lock(); + if (_draw_mutex != nullptr) draw_lock.lock(); UpdateWindows(); _local_palette = _cur_palette; } else { /* Release the thread while sleeping */ - if (_draw_mutex != NULL) draw_lock.unlock(); + if (_draw_mutex != nullptr) draw_lock.unlock(); CSleep(1); - if (_draw_mutex != NULL) draw_lock.lock(); + if (_draw_mutex != nullptr) draw_lock.lock(); NetworkDrawChatMessage(); DrawMouseCursor(); } /* End of the critical part. */ - if (_draw_mutex != NULL && !HasModalProgress()) { + if (_draw_mutex != nullptr && !HasModalProgress()) { _draw_signal->notify_one(); } else { /* Oh, we didn't have threads, then just draw unthreaded */ @@ -785,7 +785,7 @@ void VideoDriver_SDL::MainLoop() } } - if (_draw_mutex != NULL) { + if (_draw_mutex != nullptr) { _draw_continue = false; /* Sending signal if there is no thread blocked * is very valid and results in noop */ @@ -797,15 +797,15 @@ void VideoDriver_SDL::MainLoop() delete _draw_mutex; delete _draw_signal; - _draw_mutex = NULL; - _draw_signal = NULL; + _draw_mutex = nullptr; + _draw_signal = nullptr; } } bool VideoDriver_SDL::ChangeResolution(int w, int h) { std::unique_lock lock; - if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + if (_draw_mutex != nullptr) lock = std::unique_lock(*_draw_mutex); return CreateMainSurface(w, h); } @@ -813,7 +813,7 @@ bool VideoDriver_SDL::ChangeResolution(i bool VideoDriver_SDL::ToggleFullscreen(bool fullscreen) { std::unique_lock lock; - if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + if (_draw_mutex != nullptr) lock = std::unique_lock(*_draw_mutex); _fullscreen = fullscreen; GetVideoModes(); // get the list of available video modes @@ -834,12 +834,12 @@ bool VideoDriver_SDL::AfterBlitterChange void VideoDriver_SDL::AcquireBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->lock(); + if (_draw_mutex != nullptr) _draw_mutex->lock(); } void VideoDriver_SDL::ReleaseBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->unlock(); + if (_draw_mutex != nullptr) _draw_mutex->unlock(); } #endif /* WITH_SDL */ diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -42,7 +42,7 @@ #endif typedef BOOL (WINAPI *PFNTRACKMOUSEEVENT)(LPTRACKMOUSEEVENT lpEventTrack); -static PFNTRACKMOUSEEVENT _pTrackMouseEvent = NULL; +static PFNTRACKMOUSEEVENT _pTrackMouseEvent = nullptr; static struct { HWND main_wnd; @@ -68,9 +68,9 @@ DWORD _imm_props; /** Whether the drawing is/may be done in a separate thread. */ static bool _draw_threaded; /** Mutex to keep the access to the shared memory controlled. */ -static std::recursive_mutex *_draw_mutex = NULL; +static std::recursive_mutex *_draw_mutex = nullptr; /** Signal to draw the next frame. */ -static std::condition_variable_any *_draw_signal = NULL; +static std::condition_variable_any *_draw_signal = nullptr; /** Should we keep continue drawing? */ static volatile bool _draw_continue; /** Local copy of the palette for use in the drawing thread. */ @@ -91,7 +91,7 @@ static void MakePalette() } _wnd.gdi_palette = CreatePalette(pal); - if (_wnd.gdi_palette == NULL) usererror("CreatePalette failed!\n"); + if (_wnd.gdi_palette == nullptr) usererror("CreatePalette failed!\n"); _cur_palette.first_dirty = 0; _cur_palette.count_dirty = 256; @@ -309,7 +309,7 @@ bool VideoDriver_Win32::MakeWindow(bool } } else if (_wnd.fullscreen) { /* restore display? */ - ChangeDisplaySettings(NULL, 0); + ChangeDisplaySettings(nullptr, 0); /* restore the resolution */ _wnd.width = _bck_resolution.width; _wnd.height = _bck_resolution.height; @@ -336,7 +336,7 @@ bool VideoDriver_Win32::MakeWindow(bool w = r.right - r.left; h = r.bottom - r.top; - if (_wnd.main_wnd != NULL) { + if (_wnd.main_wnd != nullptr) { if (!_window_maximize) SetWindowPos(_wnd.main_wnd, 0, 0, 0, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOMOVE); } else { int x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2; @@ -345,8 +345,8 @@ bool VideoDriver_Win32::MakeWindow(bool char window_title[64]; seprintf(window_title, lastof(window_title), "OpenTTD %s", _openttd_revision); - _wnd.main_wnd = CreateWindow(_T("OTTD"), MB_TO_WIDE(window_title), style, x, y, w, h, 0, 0, GetModuleHandle(NULL), 0); - if (_wnd.main_wnd == NULL) usererror("CreateWindow failed"); + _wnd.main_wnd = CreateWindow(_T("OTTD"), MB_TO_WIDE(window_title), style, x, y, w, h, 0, 0, GetModuleHandle(nullptr), 0); + if (_wnd.main_wnd == nullptr) usererror("CreateWindow failed"); ShowWindow(_wnd.main_wnd, showstyle); } } @@ -559,14 +559,14 @@ static LRESULT HandleIMEComposition(HWND if (hIMC != NULL) { if (lParam & GCS_RESULTSTR) { /* Read result string from the IME. */ - LONG len = ImmGetCompositionString(hIMC, GCS_RESULTSTR, NULL, 0); // Length is always in bytes, even in UNICODE build. + LONG len = ImmGetCompositionString(hIMC, GCS_RESULTSTR, nullptr, 0); // Length is always in bytes, even in UNICODE build. TCHAR *str = (TCHAR *)_alloca(len + sizeof(TCHAR)); len = ImmGetCompositionString(hIMC, GCS_RESULTSTR, str, len); str[len / sizeof(TCHAR)] = '\0'; /* Transmit text to windowing system. */ if (len > 0) { - HandleTextInput(NULL, true); // Clear marked string. + HandleTextInput(nullptr, true); // Clear marked string. HandleTextInput(FS2OTTD(str)); } SetCompositionPos(hwnd); @@ -577,7 +577,7 @@ static LRESULT HandleIMEComposition(HWND if ((lParam & GCS_COMPSTR) && DrawIMECompositionString()) { /* Read composition string from the IME. */ - LONG len = ImmGetCompositionString(hIMC, GCS_COMPSTR, NULL, 0); // Length is always in bytes, even in UNICODE build. + LONG len = ImmGetCompositionString(hIMC, GCS_COMPSTR, nullptr, 0); // Length is always in bytes, even in UNICODE build. TCHAR *str = (TCHAR *)_alloca(len + sizeof(TCHAR)); len = ImmGetCompositionString(hIMC, GCS_COMPSTR, str, len); str[len / sizeof(TCHAR)] = '\0'; @@ -587,7 +587,7 @@ static LRESULT HandleIMEComposition(HWND convert_from_fs(str, utf8_buf, lengthof(utf8_buf)); /* Convert caret position from bytes in the input string to a position in the UTF-8 encoded string. */ - LONG caret_bytes = ImmGetCompositionString(hIMC, GCS_CURSORPOS, NULL, 0); + LONG caret_bytes = ImmGetCompositionString(hIMC, GCS_CURSORPOS, nullptr, 0); const char *caret = utf8_buf; for (const TCHAR *c = str; *c != '\0' && *caret != '\0' && caret_bytes > 0; c++, caret_bytes--) { /* Skip DBCS lead bytes or leading surrogates. */ @@ -604,7 +604,7 @@ static LRESULT HandleIMEComposition(HWND HandleTextInput(utf8_buf, true, caret); } else { - HandleTextInput(NULL, true); + HandleTextInput(nullptr, true); } lParam &= ~(GCS_COMPSTR | GCS_COMPATTR | GCS_COMPCLAUSE | GCS_CURSORPOS | GCS_DELTASTART); @@ -622,7 +622,7 @@ static void CancelIMEComposition(HWND hw if (hIMC != NULL) ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0); ImmReleaseContext(hwnd, hIMC); /* Clear any marked string from the current edit box. */ - HandleTextInput(NULL, true); + HandleTextInput(nullptr, true); } static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -647,14 +647,14 @@ static LRESULT CALLBACK WndProcGdi(HWND break; case WM_PAINT: - if (!in_sizemove && _draw_mutex != NULL && !HasModalProgress()) { + if (!in_sizemove && _draw_mutex != nullptr && !HasModalProgress()) { /* Get the union of the old update rect and the new update rect. */ RECT r; GetUpdateRect(hwnd, &r, FALSE); UnionRect(&_wnd.update_rect, &_wnd.update_rect, &r); /* Mark the window as updated, otherwise Windows would send more WM_PAINT messages. */ - ValidateRect(hwnd, NULL); + ValidateRect(hwnd, nullptr); _draw_signal->notify_one(); } else { PAINTSTRUCT ps; @@ -676,7 +676,7 @@ static LRESULT CALLBACK WndProcGdi(HWND SelectPalette(hDC, hOldPalette, TRUE); ReleaseDC(hwnd, hDC); - if (nChanged != 0) InvalidateRect(hwnd, NULL, FALSE); + if (nChanged != 0) InvalidateRect(hwnd, nullptr, FALSE); return 0; } @@ -730,7 +730,7 @@ static LRESULT CALLBACK WndProcGdi(HWND * tracking the mouse for exiting the window */ if (!_cursor.in_window) { _cursor.in_window = true; - if (_pTrackMouseEvent != NULL) { + if (_pTrackMouseEvent != nullptr) { TRACKMOUSEEVENT tme; tme.cbSize = sizeof(tme); tme.dwFlags = TME_LEAVE; @@ -783,7 +783,7 @@ static LRESULT CALLBACK WndProcGdi(HWND case WM_IME_ENDCOMPOSITION: /* Clear any pending composition string. */ - HandleTextInput(NULL, true); + HandleTextInput(nullptr, true); if (DrawIMECompositionString()) return 0; break; @@ -831,7 +831,7 @@ static LRESULT CALLBACK WndProcGdi(HWND /* Silently drop all messages handled by WM_CHAR. */ MSG msg; - if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { + if (PeekMessage(&msg, nullptr, 0, 0, PM_NOREMOVE)) { if ((msg.message == WM_CHAR || msg.message == WM_DEADCHAR) && GB(lParam, 16, 8) == GB(msg.lParam, 16, 8)) { return 0; } @@ -993,7 +993,7 @@ static LRESULT CALLBACK WndProcGdi(HWND } else if (!active && !minimized) { /* Minimise the window and restore desktop */ ShowWindow(hwnd, SW_MINIMIZE); - ChangeDisplaySettings(NULL, 0); + ChangeDisplaySettings(nullptr, 0); } } break; @@ -1008,7 +1008,7 @@ static void RegisterWndClass() static bool registered = false; if (!registered) { - HINSTANCE hinst = GetModuleHandle(NULL); + HINSTANCE hinst = GetModuleHandle(nullptr); WNDCLASS wnd = { CS_OWNDC, WndProcGdi, @@ -1016,7 +1016,7 @@ static void RegisterWndClass() 0, hinst, LoadIcon(hinst, MAKEINTRESOURCE(100)), - LoadCursor(NULL, IDC_ARROW), + LoadCursor(nullptr, IDC_ARROW), 0, 0, _T("OTTD") @@ -1057,8 +1057,8 @@ static bool AllocateDibSection(int w, in if (_wnd.dib_sect) DeleteObject(_wnd.dib_sect); dc = GetDC(0); - _wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (VOID**)&_wnd.buffer_bits, NULL, 0); - if (_wnd.dib_sect == NULL) usererror("CreateDIBSection failed"); + _wnd.dib_sect = CreateDIBSection(dc, bi, DIB_RGB_COLORS, (VOID**)&_wnd.buffer_bits, nullptr, 0); + if (_wnd.dib_sect == nullptr) usererror("CreateDIBSection failed"); ReleaseDC(0, dc); _screen.width = w; @@ -1095,7 +1095,7 @@ static void FindResolutions() /* XXX - EnumDisplaySettingsW crashes with unicows.dll on Windows95 * Doesn't really matter since we don't pass a string anyways, but still * a letdown */ - for (i = 0; EnumDisplaySettingsA(NULL, i, &dm) != 0; i++) { + for (i = 0; EnumDisplaySettingsA(nullptr, i, &dm) != 0; i++) { if (dm.dmBitsPerPel == bpp && dm.dmPelsWidth >= 640 && dm.dmPelsHeight >= 480) { uint j; @@ -1149,9 +1149,9 @@ const char *VideoDriver_Win32::Start(con MarkWholeScreenDirty(); - _draw_threaded = GetDriverParam(parm, "no_threads") == NULL && GetDriverParam(parm, "no_thread") == NULL && std::thread::hardware_concurrency() > 1; + _draw_threaded = GetDriverParam(parm, "no_threads") == nullptr && GetDriverParam(parm, "no_thread") == nullptr && std::thread::hardware_concurrency() > 1; - return NULL; + return nullptr; } void VideoDriver_Win32::Stop() @@ -1160,7 +1160,7 @@ void VideoDriver_Win32::Stop() DeleteObject(_wnd.dib_sect); DestroyWindow(_wnd.main_wnd); - if (_wnd.fullscreen) ChangeDisplaySettings(NULL, 0); + if (_wnd.fullscreen) ChangeDisplaySettings(nullptr, 0); MyShowCursor(true); } @@ -1176,7 +1176,7 @@ static void CheckPaletteAnim() if (_cur_palette.count_dirty == 0) return; _local_palette = _cur_palette; - InvalidateRect(_wnd.main_wnd, NULL, FALSE); + InvalidateRect(_wnd.main_wnd, nullptr, FALSE); } void VideoDriver_Win32::MainLoop() @@ -1211,8 +1211,8 @@ void VideoDriver_Win32::MainLoop() draw_lock.release(); delete _draw_mutex; delete _draw_signal; - _draw_mutex = NULL; - _draw_signal = NULL; + _draw_mutex = nullptr; + _draw_signal = nullptr; } else { DEBUG(driver, 1, "Threaded drawing enabled"); /* Wait till the draw thread has started itself. */ @@ -1227,7 +1227,7 @@ void VideoDriver_Win32::MainLoop() for (;;) { uint32 prev_cur_ticks = cur_ticks; // to check for wrapping - while (PeekMessage(&mesg, NULL, 0, 0, PM_REMOVE)) { + while (PeekMessage(&mesg, nullptr, 0, 0, PM_REMOVE)) { InteractiveRandom(); // randomness /* Convert key messages to char messages if we want text input. */ if (EditBoxInGlobalFocus()) TranslateMessage(&mesg); @@ -1310,14 +1310,14 @@ void VideoDriver_Win32::MainLoop() delete _draw_mutex; delete _draw_signal; - _draw_mutex = NULL; + _draw_mutex = nullptr; } } bool VideoDriver_Win32::ChangeResolution(int w, int h) { std::unique_lock lock; - if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + if (_draw_mutex != nullptr) lock = std::unique_lock(*_draw_mutex); if (_window_maximize) ShowWindow(_wnd.main_wnd, SW_SHOWNORMAL); @@ -1330,7 +1330,7 @@ bool VideoDriver_Win32::ChangeResolution bool VideoDriver_Win32::ToggleFullscreen(bool full_screen) { std::unique_lock lock; - if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + if (_draw_mutex != nullptr) lock = std::unique_lock(*_draw_mutex); return this->MakeWindow(full_screen); } @@ -1342,18 +1342,18 @@ bool VideoDriver_Win32::AfterBlitterChan void VideoDriver_Win32::AcquireBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->lock(); + if (_draw_mutex != nullptr) _draw_mutex->lock(); } void VideoDriver_Win32::ReleaseBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->unlock(); + if (_draw_mutex != nullptr) _draw_mutex->unlock(); } void VideoDriver_Win32::EditBoxLostFocus() { std::unique_lock lock; - if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + if (_draw_mutex != nullptr) lock = std::unique_lock(*_draw_mutex); CancelIMEComposition(_wnd.main_wnd); SetCompositionPos(_wnd.main_wnd); diff --git a/src/viewport.cpp b/src/viewport.cpp --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -187,7 +187,7 @@ static TileInfo *_cur_ti; bool _draw_bounding_boxes = false; bool _draw_dirty_blocks = false; uint _dirty_block_colour = 0; -static VpSpriteSorter _vp_sprite_sorter = NULL; +static VpSpriteSorter _vp_sprite_sorter = nullptr; static Point MapXYZToViewport(const ViewPort *vp, int x, int y, int z) { @@ -199,11 +199,11 @@ static Point MapXYZToViewport(const View void DeleteWindowViewport(Window *w) { - if (w->viewport == NULL) return; + if (w->viewport == nullptr) return; delete w->viewport->overlay; free(w->viewport); - w->viewport = NULL; + w->viewport = nullptr; } /** @@ -221,7 +221,7 @@ void DeleteWindowViewport(Window *w) void InitializeWindowViewport(Window *w, int x, int y, int width, int height, uint32 follow_flags, ZoomLevel zoom) { - assert(w->viewport == NULL); + assert(w->viewport == nullptr); ViewportData *vp = CallocT(1); @@ -256,7 +256,7 @@ void InitializeWindowViewport(Window *w, vp->dest_scrollpos_x = pt.x; vp->dest_scrollpos_y = pt.y; - vp->overlay = NULL; + vp->overlay = nullptr; w->viewport = vp; vp->virtual_left = 0; // pt.x; @@ -389,18 +389,18 @@ static void SetViewportPosition(Window * * @param x X coordinate of the xy position * @param y Y coordinate of the xy position * @return Pointer to the viewport if the xy position is in the viewport of the window, - * otherwise \c NULL is returned. + * otherwise \c nullptr is returned. */ ViewPort *IsPtInWindowViewport(const Window *w, int x, int y) { ViewPort *vp = w->viewport; - if (vp != NULL && + if (vp != nullptr && IsInsideMM(x, vp->left, vp->left + vp->width) && IsInsideMM(y, vp->top, vp->top + vp->height)) return vp; - return NULL; + return nullptr; } /** @@ -436,8 +436,8 @@ static Point GetTileFromScreenXY(int x, ViewPort *vp; Point pt; - if ( (w = FindWindowFromPt(x, y)) != NULL && - (vp = IsPtInWindowViewport(w, x, y)) != NULL) + if ( (w = FindWindowFromPt(x, y)) != nullptr && + (vp = IsPtInWindowViewport(w, x, y)) != nullptr) return TranslateXYToTileCoord(vp, zoom_x, zoom_y); pt.y = pt.x = -1; @@ -495,7 +495,7 @@ void HandleZoomMessage(Window *w, const * @param extra_offs_x Pixel X offset for the sprite position. * @param extra_offs_y Pixel Y offset for the sprite position. */ -static void AddTileSpriteToDraw(SpriteID image, PaletteID pal, int32 x, int32 y, int z, const SubSprite *sub = NULL, int extra_offs_x = 0, int extra_offs_y = 0) +static void AddTileSpriteToDraw(SpriteID image, PaletteID pal, int32 x, int32 y, int z, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0) { assert((image & SPRITE_MASK) < MAX_SPRITES); @@ -598,8 +598,8 @@ void OffsetGroundSprite(int x, int y) default: NOT_REACHED(); } - /* _vd.last_child == NULL if foundation sprite was clipped by the viewport bounds */ - if (_vd.last_child != NULL) _vd.foundation[_vd.foundation_part] = (uint)_vd.parent_sprites_to_draw.size() - 1; + /* _vd.last_child == nullptr if foundation sprite was clipped by the viewport bounds */ + if (_vd.last_child != nullptr) _vd.foundation[_vd.foundation_part] = (uint)_vd.parent_sprites_to_draw.size() - 1; _vd.foundation_offset[_vd.foundation_part].x = x * ZOOM_LVL_BASE; _vd.foundation_offset[_vd.foundation_part].y = y * ZOOM_LVL_BASE; @@ -674,7 +674,7 @@ void AddSortableSpriteToDraw(SpriteID im return; } - _vd.last_child = NULL; + _vd.last_child = nullptr; Point pt = RemapCoords(x, y, z); int tmp_left, tmp_top, tmp_x = pt.x, tmp_y = pt.y; @@ -818,7 +818,7 @@ void AddChildSpriteScreen(SpriteID image assert((image & SPRITE_MASK) < MAX_SPRITES); /* If the ParentSprite was clipped by the viewport bounds, do not draw the ChildSprites either */ - if (_vd.last_child == NULL) return; + if (_vd.last_child == nullptr) return; /* make the sprites transparent with the right palette */ if (transparent) { @@ -879,7 +879,7 @@ static void DrawSelectionSprite(SpriteID AddTileSpriteToDraw(image, pal, ti->x, ti->y, ti->z + z_offset); } else { /* draw on top of foundation */ - AddChildSpriteToFoundation(image, pal, NULL, foundation_part, 0, -z_offset * ZOOM_LVL_BASE); + AddChildSpriteToFoundation(image, pal, nullptr, foundation_part, 0, -z_offset * ZOOM_LVL_BASE); } } @@ -1171,8 +1171,8 @@ static void ViewportAddLandscape() _vd.foundation_part = FOUNDATION_PART_NONE; _vd.foundation[0] = -1; _vd.foundation[1] = -1; - _vd.last_foundation_child[0] = NULL; - _vd.last_foundation_child[1] = NULL; + _vd.last_foundation_child[0] = nullptr; + _vd.last_foundation_child[1] = nullptr; _tile_type_procs[tile_type]->draw_tile_proc(&tile_info); if (tile_info.tile != INVALID_TILE) DrawTileSelection(&tile_info); @@ -1383,7 +1383,7 @@ void ViewportSign::MarkDirty(ZoomLevel m Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { ViewPort *vp = w->viewport; - if (vp != NULL && vp->zoom <= maxzoom) { + if (vp != nullptr && vp->zoom <= maxzoom) { assert(vp->width != 0); Rect &zl = zoomlevels[vp->zoom]; MarkViewportDirty(vp, zl.left, zl.top, zl.right, zl.bottom); @@ -1568,7 +1568,7 @@ void ViewportDoDraw(const ViewPort *vp, _vd.dpi.left = left & mask; _vd.dpi.top = top & mask; _vd.dpi.pitch = old_dpi->pitch; - _vd.last_child = NULL; + _vd.last_child = nullptr; int x = UnScaleByZoom(_vd.dpi.left - (vp->virtual_left & mask), vp->zoom) + vp->left; int y = UnScaleByZoom(_vd.dpi.top - (vp->virtual_top & mask), vp->zoom) + vp->top; @@ -1601,7 +1601,7 @@ void ViewportDoDraw(const ViewPort *vp, dp.height = UnScaleByZoom(dp.height, zoom); _cur_dpi = &dp; - if (vp->overlay != NULL && vp->overlay->GetCargoMask() != 0 && vp->overlay->GetCompanyMask() != 0) { + if (vp->overlay != nullptr && vp->overlay->GetCargoMask() != 0 && vp->overlay->GetCompanyMask() != 0) { /* translate to window coordinates */ dp.left = x; dp.top = y; @@ -1809,7 +1809,7 @@ void MarkAllViewportsDirty(int left, int Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { ViewPort *vp = w->viewport; - if (vp != NULL) { + if (vp != nullptr) { assert(vp->width != 0); MarkViewportDirty(vp, left, top, right, bottom); } @@ -1820,7 +1820,7 @@ void ConstrainAllViewportsZoom() { Window *w; FOR_ALL_WINDOWS_FROM_FRONT(w) { - if (w->viewport == NULL) continue; + if (w->viewport == nullptr) continue; ZoomLevel zoom = static_cast(Clamp(w->viewport->zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max)); if (zoom != w->viewport->zoom) { @@ -2012,9 +2012,9 @@ static bool CheckClickOnViewportSign(con bool show_competitors = HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS); /* Topmost of each type that was hit */ - BaseStation *st = NULL, *last_st = NULL; - Town *t = NULL, *last_t = NULL; - Sign *si = NULL, *last_si = NULL; + BaseStation *st = nullptr, *last_st = nullptr; + Town *t = nullptr, *last_t = nullptr; + Sign *si = nullptr, *last_si = nullptr; /* See ViewportAddKdtreeSigns() for details on the search logic */ _viewport_sign_kdtree.FindContained(search_rect.left, search_rect.top, search_rect.right, search_rect.bottom, [&](const ViewportSignKdtreeItem & item) { @@ -2052,17 +2052,17 @@ static bool CheckClickOnViewportSign(con }); /* Select which hit to handle based on priority */ - if (last_st != NULL) { + if (last_st != nullptr) { if (Station::IsExpected(last_st)) { ShowStationViewWindow(last_st->index); } else { ShowWaypointWindow(Waypoint::From(last_st)); } return true; - } else if (last_t != NULL) { + } else if (last_t != nullptr) { ShowTownViewWindow(last_t->index); return true; - } else if (last_si != NULL) { + } else if (last_si != nullptr) { HandleClickOnSign(last_si); return true; } else { @@ -2209,7 +2209,7 @@ static void PlaceObject() _tile_fract_coords.y = pt.y & TILE_UNIT_MASK; w = _thd.GetCallbackWnd(); - if (w != NULL) w->OnPlaceObject(pt, TileVirtXY(pt.x, pt.y)); + if (w != nullptr) w->OnPlaceObject(pt, TileVirtXY(pt.x, pt.y)); } @@ -2218,7 +2218,7 @@ bool HandleViewportClicked(const ViewPor const Vehicle *v = CheckClickOnVehicle(vp, x, y); if (_thd.place_mode & HT_VEHICLE) { - if (v != NULL && VehicleClicked(v)) return true; + if (v != nullptr && VehicleClicked(v)) return true; } /* Vehicle placement mode already handled above. */ @@ -2230,7 +2230,7 @@ bool HandleViewportClicked(const ViewPor if (CheckClickOnViewportSign(vp, x, y)) return true; bool result = CheckClickOnLandscape(vp, x, y); - if (v != NULL) { + if (v != nullptr) { DEBUG(misc, 2, "Vehicle %d (index %d) at %p", v->unitnumber, v->index, v); if (IsCompanyBuildableVehicleType(v)) { v = v->First(); @@ -2247,7 +2247,7 @@ bool HandleViewportClicked(const ViewPor void RebuildViewportOverlay(Window *w) { - if (w->viewport->overlay != NULL && + if (w->viewport->overlay != nullptr && w->viewport->overlay->GetCompanyMask() != 0 && w->viewport->overlay->GetCargoMask() != 0) { w->viewport->overlay->SetDirty(); @@ -2381,7 +2381,7 @@ bool TileHighlightData::IsDraggingDiagon /** * Get the window that started the current highlighting. - * @return The window that requested the current tile highlighting, or \c NULL if not available. + * @return The window that requested the current tile highlighting, or \c nullptr if not available. */ Window *TileHighlightData::GetCallbackWnd() { @@ -3163,7 +3163,7 @@ EventState VpHandlePlaceSizingDrag() /* stop drag mode if the window has been closed */ Window *w = _thd.GetCallbackWnd(); - if (w == NULL) { + if (w == nullptr) { ResetObjectToPlace(); return ES_HANDLED; } @@ -3228,7 +3228,7 @@ void SetObjectToPlace(CursorID icon, Pal * this function might in some cases reset the newly set object to * place or not properly reset the original selection. */ _thd.window_class = WC_INVALID; - if (w != NULL) { + if (w != nullptr) { w->OnPlaceObjectAbort(); HideMeasurementTooltips(); } @@ -3305,7 +3305,7 @@ void InitializeSpriteSorter() break; } } - assert(_vp_sprite_sorter != NULL); + assert(_vp_sprite_sorter != nullptr); } /** diff --git a/src/viewport_func.h b/src/viewport_func.h --- a/src/viewport_func.h +++ b/src/viewport_func.h @@ -49,10 +49,10 @@ static inline void MaxZoomInOut(ZoomStat void OffsetGroundSprite(int x, int y); -void DrawGroundSprite(SpriteID image, PaletteID pal, const SubSprite *sub = NULL, int extra_offs_x = 0, int extra_offs_y = 0); -void DrawGroundSpriteAt(SpriteID image, PaletteID pal, int32 x, int32 y, int z, const SubSprite *sub = NULL, int extra_offs_x = 0, int extra_offs_y = 0); -void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent = false, int bb_offset_x = 0, int bb_offset_y = 0, int bb_offset_z = 0, const SubSprite *sub = NULL); -void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool transparent = false, const SubSprite *sub = NULL, bool scale = true); +void DrawGroundSprite(SpriteID image, PaletteID pal, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0); +void DrawGroundSpriteAt(SpriteID image, PaletteID pal, int32 x, int32 y, int z, const SubSprite *sub = nullptr, int extra_offs_x = 0, int extra_offs_y = 0); +void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, int h, int dz, int z, bool transparent = false, int bb_offset_x = 0, int bb_offset_y = 0, int bb_offset_z = 0, const SubSprite *sub = nullptr); +void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool transparent = false, const SubSprite *sub = nullptr, bool scale = true); void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const ViewportSign *sign, StringID string_normal, StringID string_small, StringID string_small_shadow, uint64 params_1, uint64 params_2 = 0, Colours colour = INVALID_COLOUR); diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -122,7 +122,7 @@ public: void OnResize() override { - if (this->viewport != NULL) { + if (this->viewport != nullptr) { NWidgetViewport *nvp = this->GetWidget(WID_EV_VIEWPORT); nvp->UpdateViewportCoordinates(this); } @@ -172,7 +172,7 @@ void ShowExtraViewPortWindow(TileIndex t int i = 0; /* find next free window number for extra viewport */ - while (FindWindowById(WC_EXTRA_VIEW_PORT, i) != NULL) i++; + while (FindWindowById(WC_EXTRA_VIEW_PORT, i) != nullptr) i++; new ExtraViewportWindow(&_extra_view_port_desc, i, tile); } diff --git a/src/void_cmd.cpp b/src/void_cmd.cpp --- a/src/void_cmd.cpp +++ b/src/void_cmd.cpp @@ -77,15 +77,15 @@ extern const TileTypeProcs _tile_type_vo DrawTile_Void, // draw_tile_proc GetSlopePixelZ_Void, // get_slope_z_proc ClearTile_Void, // clear_tile_proc - NULL, // add_accepted_cargo_proc + nullptr, // add_accepted_cargo_proc GetTileDesc_Void, // get_tile_desc_proc GetTileTrackStatus_Void, // get_tile_track_status_proc - NULL, // click_tile_proc - NULL, // animate_tile_proc + nullptr, // click_tile_proc + nullptr, // animate_tile_proc TileLoop_Void, // tile_loop_proc ChangeTileOwner_Void, // 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_Void, // get_foundation_proc TerraformTile_Void, // terraform_tile_proc }; diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -168,7 +168,7 @@ void MakeWaterKeepingClass(TileIndex til if (wc == WATER_CLASS_CANAL) { /* If we clear the canal, we have to remove it from the infrastructure count as well. */ Company *c = Company::GetIfValid(o); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.water--; DirtyCompanyInfrastructureWindows(c->index); } @@ -185,7 +185,7 @@ void MakeWaterKeepingClass(TileIndex til if (wc == WATER_CLASS_SEA && z > 0) { /* Update company infrastructure count. */ Company *c = Company::GetIfValid(o); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.water++; DirtyCompanyInfrastructureWindows(c->index); } @@ -227,7 +227,7 @@ static CommandCost RemoveShipDepot(TileI delete Depot::GetByTile(tile); Company *c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.water -= 2 * LOCK_DEPOT_TILE_FACTOR; DirtyCompanyInfrastructureWindows(c->index); } @@ -293,7 +293,7 @@ static CommandCost DoBuildLock(TileIndex if (flags & DC_EXEC) { /* Update company infrastructure counts. */ Company *c = Company::GetIfValid(_current_company); - if (c != NULL) { + if (c != nullptr) { /* Counts for the water. */ if (!IsWaterTile(tile - delta)) c->infrastructure.water++; if (!IsWaterTile(tile + delta)) c->infrastructure.water++; @@ -338,7 +338,7 @@ static CommandCost RemoveLock(TileIndex if (flags & DC_EXEC) { /* Remove middle part from company infrastructure count. */ Company *c = Company::GetIfValid(GetTileOwner(tile)); - if (c != NULL) { + if (c != nullptr) { c->infrastructure.water -= 3 * LOCK_DEPOT_TILE_FACTOR; // three parts of the lock. DirtyCompanyInfrastructureWindows(c->index); } @@ -428,7 +428,7 @@ CommandCost CmdBuildCanal(TileIndex tile MakeRiver(tile, Random()); if (_game_mode == GM_EDITOR) { TileIndex tile2 = tile; - CircularTileSearch(&tile2, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); + CircularTileSearch(&tile2, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, nullptr); } break; @@ -931,11 +931,11 @@ static void FloodVehicle(Vehicle *v) * Flood a vehicle if we are allowed to flood it, i.e. when it is on the ground. * @param v The vehicle to test for flooding. * @param data The z of level to flood. - * @return NULL as we always want to remove everything. + * @return nullptr as we always want to remove everything. */ static Vehicle *FloodVehicleProc(Vehicle *v, void *data) { - if ((v->vehstatus & VS_CRASHED) != 0) return NULL; + if ((v->vehstatus & VS_CRASHED) != 0) return nullptr; switch (v->type) { default: break; @@ -963,7 +963,7 @@ static Vehicle *FloodVehicleProc(Vehicle } } - return NULL; + return nullptr; } /** @@ -1321,14 +1321,14 @@ extern const TileTypeProcs _tile_type_wa DrawTile_Water, // draw_tile_proc GetSlopePixelZ_Water, // get_slope_z_proc ClearTile_Water, // clear_tile_proc - NULL, // add_accepted_cargo_proc + nullptr, // add_accepted_cargo_proc GetTileDesc_Water, // get_tile_desc_proc GetTileTrackStatus_Water, // get_tile_track_status_proc ClickTile_Water, // click_tile_proc - NULL, // animate_tile_proc + nullptr, // animate_tile_proc TileLoop_Water, // tile_loop_proc ChangeTileOwner_Water, // change_tile_owner_proc - NULL, // add_produced_cargo_proc + nullptr, // add_produced_cargo_proc VehicleEnter_Water, // vehicle_enter_tile_proc GetFoundation_Water, // get_foundation_proc TerraformTile_Water, // terraform_tile_proc diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -56,7 +56,7 @@ void Waypoint::UpdateVirtCoord() */ static Waypoint *FindDeletedWaypointCloseTo(TileIndex tile, StringID str, CompanyID cid) { - Waypoint *wp, *best = NULL; + Waypoint *wp, *best = nullptr; uint thres = 8; FOR_ALL_WAYPOINTS(wp) { @@ -108,7 +108,7 @@ static CommandCost IsValidTileForWaypoin /* if waypoint is set, then we have special handling to allow building on top of already existing waypoints. * so waypoint points to INVALID_STATION if we can build on any waypoint. * Or it points to a waypoint if we're only allowed to build on exactly that waypoint. */ - if (waypoint != NULL && IsTileType(tile, MP_STATION)) { + if (waypoint != nullptr && IsTileType(tile, MP_STATION)) { if (!IsRailWaypoint(tile)) { return ClearTile_Station(tile, DC_AUTO); // get error message } else { @@ -199,16 +199,16 @@ CommandCost CmdBuildRailWaypoint(TileInd if (ret.Failed()) return ret; } - Waypoint *wp = NULL; + Waypoint *wp = nullptr; TileArea new_location(TileArea(start_tile, width, height)); CommandCost ret = FindJoiningWaypoint(est, station_to_join, adjacent, new_location, &wp); if (ret.Failed()) return ret; /* Check if there is an already existing, deleted, waypoint close to us that we can reuse. */ TileIndex center_tile = start_tile + (count / 2) * offset; - if (wp == NULL && reuse) wp = FindDeletedWaypointCloseTo(center_tile, STR_SV_STNAME_WAYPOINT, _current_company); + if (wp == nullptr && reuse) wp = FindDeletedWaypointCloseTo(center_tile, STR_SV_STNAME_WAYPOINT, _current_company); - if (wp != NULL) { + if (wp != nullptr) { /* Reuse an existing waypoint. */ if (wp->owner != _current_company) return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT); @@ -227,7 +227,7 @@ CommandCost CmdBuildRailWaypoint(TileInd if (flags & DC_EXEC) { bool need_sign_update = false; - if (wp == NULL) { + if (wp == nullptr) { wp = new Waypoint(start_tile); need_sign_update = true; } else if (!wp->IsInUse()) { @@ -246,14 +246,14 @@ CommandCost CmdBuildRailWaypoint(TileInd wp->string_id = STR_SV_STNAME_WAYPOINT; wp->train_station = new_location; - if (wp->town == NULL) MakeDefaultName(wp); + if (wp->town == nullptr) MakeDefaultName(wp); wp->UpdateVirtCoord(); if (need_sign_update) _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); const StationSpec *spec = StationClass::Get(spec_class)->GetSpec(spec_index); byte *layout_ptr = AllocaM(byte, count); - if (spec == NULL) { + if (spec == nullptr) { /* The layout must be 0 for the 'normal' waypoints by design. */ memset(layout_ptr, 0, count); } else { @@ -302,7 +302,7 @@ CommandCost CmdBuildBuoy(TileIndex tile, /* Check if there is an already existing, deleted, waypoint close to us that we can reuse. */ Waypoint *wp = FindDeletedWaypointCloseTo(tile, STR_SV_STNAME_BUOY, OWNER_NONE); - if (wp == NULL && !Waypoint::CanAllocateItem()) return_cmd_error(STR_ERROR_TOO_MANY_STATIONS_LOADING); + if (wp == nullptr && !Waypoint::CanAllocateItem()) return_cmd_error(STR_ERROR_TOO_MANY_STATIONS_LOADING); CommandCost cost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_WAYPOINT_BUOY]); if (!IsWaterTile(tile)) { @@ -312,7 +312,7 @@ CommandCost CmdBuildBuoy(TileIndex tile, } if (flags & DC_EXEC) { - if (wp == NULL) { + if (wp == nullptr) { wp = new Waypoint(tile); } else { /* Move existing (recently deleted) buoy to the new location */ @@ -329,7 +329,7 @@ CommandCost CmdBuildBuoy(TileIndex tile, wp->build_date = _date; - if (wp->town == NULL) MakeDefaultName(wp); + if (wp->town == nullptr) MakeDefaultName(wp); MakeBuoy(tile, wp->index, GetWaterClass(tile)); MarkTileDirtyByTile(tile); @@ -392,7 +392,7 @@ static bool IsUniqueWaypointName(const c const Waypoint *wp; FOR_ALL_WAYPOINTS(wp) { - if (wp->name != NULL && strcmp(wp->name, name) == 0) return false; + if (wp->name != nullptr && strcmp(wp->name, name) == 0) return false; } return true; @@ -410,7 +410,7 @@ static bool IsUniqueWaypointName(const c CommandCost CmdRenameWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { Waypoint *wp = Waypoint::GetIfValid(p1); - if (wp == NULL) return CMD_ERROR; + if (wp == nullptr) return CMD_ERROR; if (wp->owner != OWNER_NONE) { CommandCost ret = CheckOwnership(wp->owner); @@ -426,7 +426,7 @@ CommandCost CmdRenameWaypoint(TileIndex if (flags & DC_EXEC) { free(wp->name); - wp->name = reset ? NULL : stredup(text); + wp->name = reset ? nullptr : stredup(text); wp->UpdateVirtCoord(); } diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -126,7 +126,7 @@ public: void OnResize() override { - if (this->viewport != NULL) { + if (this->viewport != nullptr) { NWidgetViewport *nvp = this->GetWidget(WID_W_VIEWPORT); nvp->UpdateViewportCoordinates(this); this->wp->UpdateVirtCoord(); @@ -137,9 +137,9 @@ public: void OnQueryTextFinished(char *str) override { - if (str == NULL) return; + if (str == nullptr) return; - DoCommandP(0, this->window_number, 0, CMD_RENAME_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME), NULL, str); + DoCommandP(0, this->window_number, 0, CMD_RENAME_WAYPOINT | CMD_MSG(STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME), nullptr, str); } }; diff --git a/src/widget.cpp b/src/widget.cpp --- a/src/widget.cpp +++ b/src/widget.cpp @@ -147,7 +147,7 @@ void ScrollbarClickHandler(Window *w, NW ma = nw->pos_y + nw->current_y; } NWidgetScrollbar *scrollbar = dynamic_cast(nw); - assert(scrollbar != NULL); + assert(scrollbar != nullptr); ScrollbarClickPositioning(w, scrollbar, x, y, mi, ma); } @@ -162,7 +162,7 @@ void ScrollbarClickHandler(Window *w, NW int GetWidgetFromPos(const Window *w, int x, int y) { NWidgetCore *nw = w->nested_root->GetWidgetFromPos(x, y); - return (nw != NULL) ? nw->index : -1; + return (nw != nullptr) ? nw->index : -1; } /** @@ -613,7 +613,7 @@ void Window::DrawWidgets() const extern bool _window_highlight_colour; for (uint i = 0; i < this->nested_array_size; i++) { const NWidgetBase *widget = this->GetWidget(i); - if (widget == NULL || !widget->IsHighlighted()) continue; + if (widget == nullptr || !widget->IsHighlighted()) continue; int left = widget->pos_x; int top = widget->pos_y; @@ -639,7 +639,7 @@ void Window::DrawSortButtonState(int wid { if (state == SBS_OFF) return; - assert(this->nested_array != NULL); + assert(this->nested_array != nullptr); const NWidgetBase *nwid = this->GetWidget(widget); /* Sort button uses the same sprites as vertical scrollbar */ @@ -784,17 +784,17 @@ void NWidgetBase::SetDirty(const Window * Retrieve a widget by its position. * @param x Horizontal position relative to the left edge of the window. * @param y Vertical position relative to the top edge of the window. - * @return Returns the deepest nested widget that covers the given position, or \c NULL if no widget can be found. + * @return Returns the deepest nested widget that covers the given position, or \c nullptr if no widget can be found. */ /** * Retrieve a widget by its type. * @param tp Widget type to search for. - * @return Returns the first widget of the specified type, or \c NULL if no widget can be found. + * @return Returns the first widget of the specified type, or \c nullptr if no widget can be found. */ NWidgetBase *NWidgetBase::GetWidgetOfType(WidgetType tp) { - return (this->type == tp) ? this : NULL; + return (this->type == tp) ? this : nullptr; } /** @@ -904,7 +904,7 @@ void NWidgetCore::FillNestedArray(NWidge NWidgetCore *NWidgetCore::GetWidgetFromPos(int x, int y) { - return (IsInsideBS(x, this->pos_x, this->current_x) && IsInsideBS(y, this->pos_y, this->current_y)) ? this : NULL; + return (IsInsideBS(x, this->pos_x, this->current_x) && IsInsideBS(y, this->pos_y, this->current_y)) ? this : nullptr; } /** @@ -913,28 +913,28 @@ NWidgetCore *NWidgetCore::GetWidgetFromP */ NWidgetContainer::NWidgetContainer(WidgetType tp) : NWidgetBase(tp) { - this->head = NULL; - this->tail = NULL; + this->head = nullptr; + this->tail = nullptr; } NWidgetContainer::~NWidgetContainer() { - while (this->head != NULL) { + while (this->head != nullptr) { NWidgetBase *wid = this->head->next; delete this->head; this->head = wid; } - this->tail = NULL; + this->tail = nullptr; } NWidgetBase *NWidgetContainer::GetWidgetOfType(WidgetType tp) { if (this->type == tp) return this; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { NWidgetBase *nwid = child_wid->GetWidgetOfType(tp); - if (nwid != NULL) return nwid; + if (nwid != nullptr) return nwid; } - return NULL; + return nullptr; } /** @@ -943,14 +943,14 @@ NWidgetBase *NWidgetContainer::GetWidget */ void NWidgetContainer::Add(NWidgetBase *wid) { - assert(wid->next == NULL && wid->prev == NULL); - - if (this->head == NULL) { + assert(wid->next == nullptr && wid->prev == nullptr); + + if (this->head == nullptr) { this->head = wid; this->tail = wid; } else { - assert(this->tail != NULL); - assert(this->tail->next == NULL); + assert(this->tail != nullptr); + assert(this->tail->next == nullptr); this->tail->next = wid; wid->prev = this->tail; @@ -960,7 +960,7 @@ void NWidgetContainer::Add(NWidgetBase * void NWidgetContainer::FillNestedArray(NWidgetBase **array, uint length) { - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->FillNestedArray(array, length); } } @@ -1006,11 +1006,11 @@ void NWidgetStacked::SetupSmallestSize(W /* First sweep, recurse down and compute minimal size and filling. */ this->smallest_x = 0; this->smallest_y = 0; - this->fill_x = (this->head != NULL) ? 1 : 0; - this->fill_y = (this->head != NULL) ? 1 : 0; - this->resize_x = (this->head != NULL) ? 1 : 0; - this->resize_y = (this->head != NULL) ? 1 : 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + this->fill_x = (this->head != nullptr) ? 1 : 0; + this->fill_y = (this->head != nullptr) ? 1 : 0; + this->resize_x = (this->head != nullptr) ? 1 : 0; + this->resize_y = (this->head != nullptr) ? 1 : 0; + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->SetupSmallestSize(w, init_array); this->smallest_x = max(this->smallest_x, child_wid->smallest_x + child_wid->padding_left + child_wid->padding_right); @@ -1029,7 +1029,7 @@ void NWidgetStacked::AssignSizePosition( if (this->shown_plane >= SZSP_BEGIN) return; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint hor_step = (sizing == ST_SMALLEST) ? 1 : child_wid->GetHorizontalStepSize(sizing); uint child_width = ComputeMaxSize(child_wid->smallest_x, given_width - child_wid->padding_left - child_wid->padding_right, hor_step); uint child_pos_x = (rtl ? child_wid->padding_right : child_wid->padding_left); @@ -1053,7 +1053,7 @@ void NWidgetStacked::Draw(const Window * if (this->shown_plane >= SZSP_BEGIN) return; int plane = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; plane++, child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; plane++, child_wid = child_wid->next) { if (plane == this->shown_plane) { child_wid->Draw(w); return; @@ -1065,16 +1065,16 @@ void NWidgetStacked::Draw(const Window * NWidgetCore *NWidgetStacked::GetWidgetFromPos(int x, int y) { - if (this->shown_plane >= SZSP_BEGIN) return NULL; - - if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; + if (this->shown_plane >= SZSP_BEGIN) return nullptr; + + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; int plane = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; plane++, child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; plane++, child_wid = child_wid->next) { if (plane == this->shown_plane) { return child_wid->GetWidgetFromPos(x, y); } } - return NULL; + return nullptr; } /** @@ -1109,20 +1109,20 @@ void NWidgetPIPContainer::SetPIP(uint8 p void NWidgetPIPContainer::Draw(const Window *w) { - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->Draw(w); } } NWidgetCore *NWidgetPIPContainer::GetWidgetFromPos(int x, int y) { - if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; - - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; + + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { NWidgetCore *nwid = child_wid->GetWidgetFromPos(x, y); - if (nwid != NULL) return nwid; + if (nwid != nullptr) return nwid; } - return NULL; + return nullptr; } /** Horizontal container widget. */ @@ -1142,7 +1142,7 @@ void NWidgetHorizontal::SetupSmallestSiz /* 1a. Forward call, collect biggest nested array index, and longest/widest child length. */ uint longest = 0; // Longest child found. uint max_vert_fill = 0; // Biggest vertical fill step. - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->SetupSmallestSize(w, init_array); longest = max(longest, child_wid->smallest_x); max_vert_fill = max(max_vert_fill, child_wid->GetVerticalStepSize(ST_SMALLEST)); @@ -1152,7 +1152,7 @@ void NWidgetHorizontal::SetupSmallestSiz uint max_smallest = this->smallest_y + 3 * max_vert_fill; // Upper limit to computing smallest height. uint cur_height = this->smallest_y; for (;;) { - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint step_size = child_wid->GetVerticalStepSize(ST_SMALLEST); uint child_height = child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom; if (step_size > 1 && child_height < cur_height) { // Small step sizes or already fitting children are not interesting. @@ -1169,14 +1169,14 @@ void NWidgetHorizontal::SetupSmallestSiz } /* 2. For containers that must maintain equal width, extend child minimal size. */ if (this->flags & NC_EQUALSIZE) { - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { if (child_wid->fill_x == 1) child_wid->smallest_x = longest; } } /* 3. Move PIP space to the children, compute smallest, fill, and resize values of the container. */ - if (this->head != NULL) this->head->padding_left += this->pip_pre; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { - if (child_wid->next != NULL) { + if (this->head != nullptr) this->head->padding_left += this->pip_pre; + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { + if (child_wid->next != nullptr) { child_wid->padding_right += this->pip_inter; } else { child_wid->padding_right += this->pip_post; @@ -1205,7 +1205,7 @@ void NWidgetHorizontal::AssignSizePositi uint additional_length = given_width; if (sizing == ST_SMALLEST && (this->flags & NC_EQUALSIZE)) { /* For EQUALSIZE containers this does not sum to smallest_x during initialisation */ - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { additional_length -= child_wid->smallest_x + child_wid->padding_right + child_wid->padding_left; } } else { @@ -1230,7 +1230,7 @@ void NWidgetHorizontal::AssignSizePositi */ int num_changing_childs = 0; // Number of children that can change size. uint biggest_stepsize = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint hor_step = child_wid->GetHorizontalStepSize(sizing); if (hor_step > 0) { num_changing_childs++; @@ -1246,7 +1246,7 @@ void NWidgetHorizontal::AssignSizePositi /* Second loop: Allocate the additional horizontal space over the resizing children, starting with the biggest resize steps. */ while (biggest_stepsize > 0) { uint next_biggest_stepsize = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint hor_step = child_wid->GetHorizontalStepSize(sizing); if (hor_step > biggest_stepsize) continue; // Already done if (hor_step == biggest_stepsize) { @@ -1266,7 +1266,7 @@ void NWidgetHorizontal::AssignSizePositi /* Third loop: Compute position and call the child. */ uint position = rtl ? this->current_x : 0; // Place to put next child relative to origin of the container. NWidgetBase *child_wid = this->head; - while (child_wid != NULL) { + while (child_wid != nullptr) { uint child_width = child_wid->current_x; uint child_x = x + (rtl ? position - child_width - child_wid->padding_left : position + child_wid->padding_left); uint child_y = y + child_wid->padding_top; @@ -1307,7 +1307,7 @@ void NWidgetVertical::SetupSmallestSize( /* 1a. Forward call, collect biggest nested array index, and longest/widest child length. */ uint highest = 0; // Highest child found. uint max_hor_fill = 0; // Biggest horizontal fill step. - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { child_wid->SetupSmallestSize(w, init_array); highest = max(highest, child_wid->smallest_y); max_hor_fill = max(max_hor_fill, child_wid->GetHorizontalStepSize(ST_SMALLEST)); @@ -1317,7 +1317,7 @@ void NWidgetVertical::SetupSmallestSize( uint max_smallest = this->smallest_x + 3 * max_hor_fill; // Upper limit to computing smallest height. uint cur_width = this->smallest_x; for (;;) { - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint step_size = child_wid->GetHorizontalStepSize(ST_SMALLEST); uint child_width = child_wid->smallest_x + child_wid->padding_left + child_wid->padding_right; if (step_size > 1 && child_width < cur_width) { // Small step sizes or already fitting children are not interesting. @@ -1334,14 +1334,14 @@ void NWidgetVertical::SetupSmallestSize( } /* 2. For containers that must maintain equal width, extend children minimal size. */ if (this->flags & NC_EQUALSIZE) { - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { if (child_wid->fill_y == 1) child_wid->smallest_y = highest; } } /* 3. Move PIP space to the child, compute smallest, fill, and resize values of the container. */ - if (this->head != NULL) this->head->padding_top += this->pip_pre; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { - if (child_wid->next != NULL) { + if (this->head != nullptr) this->head->padding_top += this->pip_pre; + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { + if (child_wid->next != nullptr) { child_wid->padding_bottom += this->pip_inter; } else { child_wid->padding_bottom += this->pip_post; @@ -1370,7 +1370,7 @@ void NWidgetVertical::AssignSizePosition uint additional_length = given_height; if (sizing == ST_SMALLEST && (this->flags & NC_EQUALSIZE)) { /* For EQUALSIZE containers this does not sum to smallest_y during initialisation */ - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { additional_length -= child_wid->smallest_y + child_wid->padding_top + child_wid->padding_bottom; } } else { @@ -1386,7 +1386,7 @@ void NWidgetVertical::AssignSizePosition /* First loop: Find biggest stepsize, find number of children that want a piece of the pie, handle horizontal size for all children, handle vertical size for non-resizing child. */ int num_changing_childs = 0; // Number of children that can change size. uint biggest_stepsize = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint vert_step = child_wid->GetVerticalStepSize(sizing); if (vert_step > 0) { num_changing_childs++; @@ -1402,7 +1402,7 @@ void NWidgetVertical::AssignSizePosition /* Second loop: Allocate the additional vertical space over the resizing children, starting with the biggest resize steps. */ while (biggest_stepsize > 0) { uint next_biggest_stepsize = 0; - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint vert_step = child_wid->GetVerticalStepSize(sizing); if (vert_step > biggest_stepsize) continue; // Already done if (vert_step == biggest_stepsize) { @@ -1421,7 +1421,7 @@ void NWidgetVertical::AssignSizePosition /* Third loop: Compute position and call the child. */ uint position = 0; // Place to put next child relative to origin of the container. - for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { + for (NWidgetBase *child_wid = this->head; child_wid != nullptr; child_wid = child_wid->next) { uint child_x = x + (rtl ? child_wid->padding_right : child_wid->padding_left); uint child_height = child_wid->current_y; @@ -1463,7 +1463,7 @@ void NWidgetSpacer::SetDirty(const Windo NWidgetCore *NWidgetSpacer::GetWidgetFromPos(int x, int y) { - return NULL; + return nullptr; } NWidgetMatrix::NWidgetMatrix() : NWidgetPIPContainer(NWID_MATRIX, NC_EQUALSIZE), index(-1), clicked(-1), count(-1) @@ -1487,7 +1487,7 @@ void NWidgetMatrix::SetColour(Colours co void NWidgetMatrix::SetClicked(int clicked) { this->clicked = clicked; - if (this->clicked >= 0 && this->sb != NULL && this->widgets_x != 0) { + if (this->clicked >= 0 && this->sb != nullptr && this->widgets_x != 0) { int vpos = (this->clicked / this->widgets_x) * this->widget_h; // Vertical position of the top. /* Need to scroll down -> Scroll to the bottom. * However, last entry has no 'this->pip_inter' underneath, and we must stay below this->sb->GetCount() */ @@ -1505,7 +1505,7 @@ void NWidgetMatrix::SetCount(int count) { this->count = count; - if (this->sb == NULL || this->widgets_x == 0) return; + if (this->sb == nullptr || this->widgets_x == 0) return; /* We need to get the number of pixels the matrix is high/wide. * So, determine the number of rows/columns based on the number of @@ -1532,8 +1532,8 @@ void NWidgetMatrix::SetScrollbar(Scrollb void NWidgetMatrix::SetupSmallestSize(Window *w, bool init_array) { - assert(this->head != NULL); - assert(this->head->next == NULL); + assert(this->head != nullptr); + assert(this->head->next == nullptr); if (this->index >= 0 && init_array) { // Fill w->nested_array[] assert(w->nested_array_size > (uint)this->index); @@ -1542,7 +1542,7 @@ void NWidgetMatrix::SetupSmallestSize(Wi /* Reset the widget number. */ NWidgetCore *nw = dynamic_cast(this->head); - assert(nw != NULL); + assert(nw != nullptr); SB(nw->index, 16, 16, 0); this->head->SetupSmallestSize(w, init_array); @@ -1594,7 +1594,7 @@ void NWidgetMatrix::FillNestedArray(NWid NWidgetCore *NWidgetMatrix::GetWidgetFromPos(int x, int y) { /* Falls outside of the matrix widget. */ - if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; + if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return nullptr; int start_x, start_y, base_offs_x, base_offs_y; this->GetScrollOffsets(start_x, start_y, base_offs_x, base_offs_y); @@ -1609,10 +1609,10 @@ NWidgetCore *NWidgetMatrix::GetWidgetFro int widget_row = (y - base_offs_y - (int)this->pip_pre - (int)this->pos_y) / this->widget_h; int sub_wid = (widget_row + start_y) * this->widgets_x + start_x + widget_col; - if (sub_wid >= this->count) return NULL; + if (sub_wid >= this->count) return nullptr; NWidgetCore *child = dynamic_cast(this->head); - assert(child != NULL); + assert(child != nullptr); child->AssignSizePosition(ST_RESIZE, this->pos_x + (rtl ? this->pip_post - widget_col * this->widget_w : this->pip_pre + widget_col * this->widget_w) + base_offs_x, this->pos_y + this->pip_pre + widget_row * this->widget_h + base_offs_y, @@ -1637,7 +1637,7 @@ NWidgetCore *NWidgetMatrix::GetWidgetFro /* Get the appropriate offsets so we can draw the right widgets. */ NWidgetCore *child = dynamic_cast(this->head); - assert(child != NULL); + assert(child != nullptr); int start_x, start_y, base_offs_x, base_offs_y; this->GetScrollOffsets(start_x, start_y, base_offs_x, base_offs_y); @@ -1684,7 +1684,7 @@ void NWidgetMatrix::GetScrollOffsets(int base_offs_y = 0; start_x = 0; start_y = 0; - if (this->sb != NULL) { + if (this->sb != nullptr) { if (this->sb->IsVertical()) { start_y = this->sb->GetPosition() / this->widget_h; base_offs_y += -this->sb->GetPosition() + start_y * this->widget_h; @@ -1718,7 +1718,7 @@ NWidgetBackground::NWidgetBackground(Wid NWidgetBackground::~NWidgetBackground() { - if (this->child != NULL) delete this->child; + if (this->child != nullptr) delete this->child; } /** @@ -1730,7 +1730,7 @@ NWidgetBackground::~NWidgetBackground() */ void NWidgetBackground::Add(NWidgetBase *nwid) { - if (this->child == NULL) { + if (this->child == nullptr) { this->child = new NWidgetVertical(); } this->child->Add(nwid); @@ -1748,7 +1748,7 @@ void NWidgetBackground::Add(NWidgetBase */ void NWidgetBackground::SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post) { - if (this->child == NULL) { + if (this->child == nullptr) { this->child = new NWidgetVertical(); } this->child->SetPIP(pip_pre, pip_inter, pip_post); @@ -1760,7 +1760,7 @@ void NWidgetBackground::SetupSmallestSiz assert(w->nested_array_size > (uint)this->index); w->nested_array[this->index] = this; } - if (this->child != NULL) { + if (this->child != nullptr) { this->child->SetupSmallestSize(w, init_array); this->smallest_x = this->child->smallest_x; @@ -1771,7 +1771,7 @@ void NWidgetBackground::SetupSmallestSiz this->resize_y = this->child->resize_y; /* Account for the size of the frame's text if that exists */ - if (w != NULL && this->type == WWT_FRAME) { + if (w != nullptr && this->type == WWT_FRAME) { this->child->padding_left = WD_FRAMETEXT_LEFT; this->child->padding_right = WD_FRAMETEXT_RIGHT; this->child->padding_top = max((int)WD_FRAMETEXT_TOP, this->widget_data != STR_NULL ? FONT_HEIGHT_NORMAL + WD_FRAMETEXT_TOP / 2 : 0); @@ -1787,7 +1787,7 @@ void NWidgetBackground::SetupSmallestSiz Dimension d = {this->min_x, this->min_y}; Dimension fill = {this->fill_x, this->fill_y}; Dimension resize = {this->resize_x, this->resize_y}; - if (w != NULL) { // A non-NULL window pointer acts as switch to turn dynamic widget size on. + if (w != nullptr) { // A non-nullptr window pointer acts as switch to turn dynamic widget size on. if (this->type == WWT_FRAME || this->type == WWT_INSET) { if (this->index >= 0) w->SetStringParameters(this->index); Dimension background = GetStringBoundingBox(this->widget_data); @@ -1812,7 +1812,7 @@ void NWidgetBackground::AssignSizePositi { this->StoreSizePosition(sizing, x, y, given_width, given_height); - if (this->child != NULL) { + if (this->child != nullptr) { uint x_offset = (rtl ? this->child->padding_right : this->child->padding_left); uint width = given_width - this->child->padding_right - this->child->padding_left; uint height = given_height - this->child->padding_top - this->child->padding_bottom; @@ -1823,7 +1823,7 @@ void NWidgetBackground::AssignSizePositi void NWidgetBackground::FillNestedArray(NWidgetBase **array, uint length) { if (this->index >= 0 && (uint)(this->index) < length) array[this->index] = this; - if (this->child != NULL) this->child->FillNestedArray(array, length); + if (this->child != nullptr) this->child->FillNestedArray(array, length); } void NWidgetBackground::Draw(const Window *w) @@ -1860,7 +1860,7 @@ void NWidgetBackground::Draw(const Windo } if (this->index >= 0) w->DrawWidget(r, this->index); - if (this->child != NULL) this->child->Draw(w); + if (this->child != nullptr) this->child->Draw(w); if (this->IsDisabled()) { GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, _colour_gradient[this->colour & 0xF][2], FILLRECT_CHECKER); @@ -1869,19 +1869,19 @@ void NWidgetBackground::Draw(const Windo NWidgetCore *NWidgetBackground::GetWidgetFromPos(int x, int y) { - NWidgetCore *nwid = NULL; + NWidgetCore *nwid = nullptr; if (IsInsideBS(x, this->pos_x, this->current_x) && IsInsideBS(y, this->pos_y, this->current_y)) { - if (this->child != NULL) nwid = this->child->GetWidgetFromPos(x, y); - if (nwid == NULL) nwid = this; + if (this->child != nullptr) nwid = this->child->GetWidgetFromPos(x, y); + if (nwid == nullptr) nwid = this; } return nwid; } NWidgetBase *NWidgetBackground::GetWidgetOfType(WidgetType tp) { - NWidgetBase *nwid = NULL; - if (this->child != NULL) nwid = this->child->GetWidgetOfType(tp); - if (nwid == NULL && this->type == tp) nwid = this; + NWidgetBase *nwid = nullptr; + if (this->child != nullptr) nwid = this->child->GetWidgetOfType(tp); + if (nwid == nullptr && this->type == tp) nwid = this; return nwid; } @@ -1936,7 +1936,7 @@ void NWidgetViewport::InitializeViewport void NWidgetViewport::UpdateViewportCoordinates(Window *w) { ViewPort *vp = w->viewport; - if (vp != NULL) { + if (vp != nullptr) { vp->left = w->left + this->pos_x; vp->top = w->top + this->pos_y; vp->width = this->current_x; @@ -2207,7 +2207,7 @@ void NWidgetLeaf::SetupSmallestSize(Wind Dimension fill = {this->fill_x, this->fill_y}; Dimension resize = {this->resize_x, this->resize_y}; /* Get padding, and update size with the real content size if appropriate. */ - const Dimension *padding = NULL; + const Dimension *padding = nullptr; switch (this->type) { case WWT_EMPTY: { static const Dimension extra = {0, 0}; @@ -2464,7 +2464,7 @@ void NWidgetLeaf::Draw(const Window *w) case WWT_EDITBOX: { const QueryString *query = w->GetQueryString(this->index); - if (query != NULL) query->DrawEditBox(w, this->index); + if (query != nullptr) query->DrawEditBox(w, this->index); break; } @@ -2557,30 +2557,30 @@ bool NWidgetLeaf::ButtonHit(const Point * @param fill_dest Fill the composed widget with child widgets. * @param biggest_index Pointer to biggest nested widget index in the tree encountered so far. * @return Number of widget part elements used to compose the widget. - * @pre \c biggest_index != NULL. + * @pre \c biggest_index != nullptr. */ static int MakeNWidget(const NWidgetPart *parts, int count, NWidgetBase **dest, bool *fill_dest, int *biggest_index) { int num_used = 0; - *dest = NULL; + *dest = nullptr; *fill_dest = false; while (count > num_used) { switch (parts->type) { case NWID_SPACER: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; *dest = new NWidgetSpacer(0, 0); break; case NWID_HORIZONTAL: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; *dest = new NWidgetHorizontal(parts->u.cont_flags); *fill_dest = true; break; case NWID_HORIZONTAL_LTR: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; *dest = new NWidgetHorizontalLTR(parts->u.cont_flags); *fill_dest = true; break; @@ -2588,20 +2588,20 @@ static int MakeNWidget(const NWidgetPart case WWT_PANEL: case WWT_INSET: case WWT_FRAME: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; *dest = new NWidgetBackground(parts->type, parts->u.widget.colour, parts->u.widget.index); *biggest_index = max(*biggest_index, (int)parts->u.widget.index); *fill_dest = true; break; case NWID_VERTICAL: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; *dest = new NWidgetVertical(parts->u.cont_flags); *fill_dest = true; break; case NWID_MATRIX: { - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; NWidgetMatrix *nwm = new NWidgetMatrix(); *dest = nwm; *fill_dest = true; @@ -2612,7 +2612,7 @@ static int MakeNWidget(const NWidgetPart } case WPT_FUNCTION: { - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; /* Ensure proper functioning even when the called code simply writes its largest index. */ int biggest = -1; *dest = parts->u.func_ptr(&biggest); @@ -2623,7 +2623,7 @@ static int MakeNWidget(const NWidgetPart case WPT_RESIZE: { NWidgetResizeBase *nwrb = dynamic_cast(*dest); - if (nwrb != NULL) { + if (nwrb != nullptr) { assert(parts->u.xy.x >= 0 && parts->u.xy.y >= 0); nwrb->SetResize(parts->u.xy.x, parts->u.xy.y); } @@ -2632,7 +2632,7 @@ static int MakeNWidget(const NWidgetPart case WPT_MINSIZE: { NWidgetResizeBase *nwrb = dynamic_cast(*dest); - if (nwrb != NULL) { + if (nwrb != nullptr) { assert(parts->u.xy.x >= 0 && parts->u.xy.y >= 0); nwrb->SetMinimalSize(parts->u.xy.x, parts->u.xy.y); } @@ -2641,7 +2641,7 @@ static int MakeNWidget(const NWidgetPart case WPT_MINTEXTLINES: { NWidgetResizeBase *nwrb = dynamic_cast(*dest); - if (nwrb != NULL) { + if (nwrb != nullptr) { assert(parts->u.text_lines.size >= FS_BEGIN && parts->u.text_lines.size < FS_END); nwrb->SetMinimalTextLines(parts->u.text_lines.lines, parts->u.text_lines.spacing, parts->u.text_lines.size); } @@ -2650,13 +2650,13 @@ static int MakeNWidget(const NWidgetPart case WPT_FILL: { NWidgetResizeBase *nwrb = dynamic_cast(*dest); - if (nwrb != NULL) nwrb->SetFill(parts->u.xy.x, parts->u.xy.y); + if (nwrb != nullptr) nwrb->SetFill(parts->u.xy.x, parts->u.xy.y); break; } case WPT_DATATIP: { NWidgetCore *nwc = dynamic_cast(*dest); - if (nwc != NULL) { + if (nwc != nullptr) { nwc->widget_data = parts->u.data_tip.data; nwc->tool_tip = parts->u.data_tip.tooltip; } @@ -2664,21 +2664,21 @@ static int MakeNWidget(const NWidgetPart } case WPT_PADDING: - if (*dest != NULL) (*dest)->SetPadding(parts->u.padding.top, parts->u.padding.right, parts->u.padding.bottom, parts->u.padding.left); + if (*dest != nullptr) (*dest)->SetPadding(parts->u.padding.top, parts->u.padding.right, parts->u.padding.bottom, parts->u.padding.left); break; case WPT_PIPSPACE: { NWidgetPIPContainer *nwc = dynamic_cast(*dest); - if (nwc != NULL) nwc->SetPIP(parts->u.pip.pre, parts->u.pip.inter, parts->u.pip.post); + if (nwc != nullptr) nwc->SetPIP(parts->u.pip.pre, parts->u.pip.inter, parts->u.pip.post); NWidgetBackground *nwb = dynamic_cast(*dest); - if (nwb != NULL) nwb->SetPIP(parts->u.pip.pre, parts->u.pip.inter, parts->u.pip.post); + if (nwb != nullptr) nwb->SetPIP(parts->u.pip.pre, parts->u.pip.inter, parts->u.pip.post); break; } case WPT_SCROLLBAR: { NWidgetCore *nwc = dynamic_cast(*dest); - if (nwc != NULL) { + if (nwc != nullptr) { nwc->scrollbar_index = parts->u.widget.index; } break; @@ -2688,20 +2688,20 @@ static int MakeNWidget(const NWidgetPart return num_used; case NWID_VIEWPORT: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; *dest = new NWidgetViewport(parts->u.widget.index); *biggest_index = max(*biggest_index, (int)parts->u.widget.index); break; case NWID_HSCROLLBAR: case NWID_VSCROLLBAR: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; *dest = new NWidgetScrollbar(parts->type, parts->u.widget.colour, parts->u.widget.index); *biggest_index = max(*biggest_index, (int)parts->u.widget.index); break; case NWID_SELECTION: { - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; NWidgetStacked *nws = new NWidgetStacked(); *dest = nws; *fill_dest = true; @@ -2711,7 +2711,7 @@ static int MakeNWidget(const NWidgetPart } default: - if (*dest != NULL) return num_used; + if (*dest != nullptr) return num_used; assert((parts->type & WWT_MASK) < WWT_LAST || (parts->type & WWT_MASK) == NWID_BUTTON_DROPDOWN); *dest = new NWidgetLeaf(parts->type, parts->u.widget.colour, parts->u.widget.index, 0x0, STR_NULL); *biggest_index = max(*biggest_index, (int)parts->u.widget.index); @@ -2728,29 +2728,29 @@ static int MakeNWidget(const NWidgetPart * Build a nested widget tree by recursively filling containers with nested widgets read from their parts. * @param parts Array with parts of the nested widgets. * @param count Length of the \a parts array. - * @param parent Pointer or container to use for storing the child widgets (*parent == NULL or *parent == container or background widget). + * @param parent Pointer or container to use for storing the child widgets (*parent == nullptr or *parent == container or background widget). * @param biggest_index Pointer to biggest nested widget index in the tree. * @return Number of widget part elements used to fill the container. * @post \c *biggest_index contains the largest widget index of the tree and \c -1 if no index is used. */ static int MakeWidgetTree(const NWidgetPart *parts, int count, NWidgetBase **parent, int *biggest_index) { - /* If *parent == NULL, only the first widget is read and returned. Otherwise, *parent must point to either + /* If *parent == nullptr, only the first widget is read and returned. Otherwise, *parent must point to either * a #NWidgetContainer or a #NWidgetBackground object, and parts are added as much as possible. */ NWidgetContainer *nwid_cont = dynamic_cast(*parent); NWidgetBackground *nwid_parent = dynamic_cast(*parent); - assert(*parent == NULL || (nwid_cont != NULL && nwid_parent == NULL) || (nwid_cont == NULL && nwid_parent != NULL)); + assert(*parent == nullptr || (nwid_cont != nullptr && nwid_parent == nullptr) || (nwid_cont == nullptr && nwid_parent != nullptr)); int total_used = 0; for (;;) { - NWidgetBase *sub_widget = NULL; + NWidgetBase *sub_widget = nullptr; bool fill_sub = false; int num_used = MakeNWidget(parts, count - total_used, &sub_widget, &fill_sub, biggest_index); parts += num_used; total_used += num_used; /* Break out of loop when end reached */ - if (sub_widget == NULL) break; + if (sub_widget == nullptr) break; /* If sub-widget is a container, recursively fill that container. */ WidgetType tp = sub_widget->type; @@ -2763,9 +2763,9 @@ static int MakeWidgetTree(const NWidgetP } /* Add sub_widget to parent container if available, otherwise return the widget to the caller. */ - if (nwid_cont != NULL) nwid_cont->Add(sub_widget); - if (nwid_parent != NULL) nwid_parent->Add(sub_widget); - if (nwid_cont == NULL && nwid_parent == NULL) { + if (nwid_cont != nullptr) nwid_cont->Add(sub_widget); + if (nwid_parent != nullptr) nwid_parent->Add(sub_widget); + if (nwid_cont == nullptr && nwid_parent == nullptr) { *parent = sub_widget; return total_used; } @@ -2783,16 +2783,16 @@ static int MakeWidgetTree(const NWidgetP * @param parts Array with parts of the widgets. * @param count Length of the \a parts array. * @param biggest_index Pointer to biggest nested widget index collected in the tree. - * @param container Container to add the nested widgets to. In case it is NULL a vertical container is used. + * @param container Container to add the nested widgets to. In case it is nullptr a vertical container is used. * @return Root of the nested widget tree, a vertical container containing the entire GUI. * @ingroup NestedWidgetParts - * @pre \c biggest_index != NULL + * @pre \c biggest_index != nullptr * @post \c *biggest_index contains the largest widget index of the tree and \c -1 if no index is used. */ NWidgetContainer *MakeNWidgets(const NWidgetPart *parts, int count, int *biggest_index, NWidgetContainer *container) { *biggest_index = -1; - if (container == NULL) container = new NWidgetVertical(); + if (container == nullptr) container = new NWidgetVertical(); NWidgetBase *cont_ptr = container; MakeWidgetTree(parts, count, &cont_ptr, biggest_index); return container; @@ -2805,10 +2805,10 @@ NWidgetContainer *MakeNWidgets(const NWi * @param parts Array with parts of the widgets. * @param count Length of the \a parts array. * @param biggest_index Pointer to biggest nested widget index collected in the tree. - * @param[out] shade_select Pointer to the inserted shade selection widget (\c NULL if not unserted). + * @param[out] shade_select Pointer to the inserted shade selection widget (\c nullptr if not unserted). * @return Root of the nested widget tree, a vertical container containing the entire GUI. * @ingroup NestedWidgetParts - * @pre \c biggest_index != NULL + * @pre \c biggest_index != nullptr * @post \c *biggest_index contains the largest widget index of the tree and \c -1 if no index is used. */ NWidgetContainer *MakeWindowNWidgetTree(const NWidgetPart *parts, int count, int *biggest_index, NWidgetStacked **shade_select) @@ -2816,16 +2816,16 @@ NWidgetContainer *MakeWindowNWidgetTree( *biggest_index = -1; /* Read the first widget recursively from the array. */ - NWidgetBase *nwid = NULL; + NWidgetBase *nwid = nullptr; int num_used = MakeWidgetTree(parts, count, &nwid, biggest_index); - assert(nwid != NULL); + assert(nwid != nullptr); parts += num_used; count -= num_used; NWidgetContainer *root = new NWidgetVertical; root->Add(nwid); if (count == 0) { // There is no body at all. - *shade_select = NULL; + *shade_select = nullptr; return root; } @@ -2833,13 +2833,13 @@ NWidgetContainer *MakeWindowNWidgetTree( * If it has a shading box, silently add a shade selection widget in the tree. */ NWidgetHorizontal *hor_cont = dynamic_cast(nwid); NWidgetContainer *body; - if (hor_cont != NULL && hor_cont->GetWidgetOfType(WWT_CAPTION) != NULL && hor_cont->GetWidgetOfType(WWT_SHADEBOX) != NULL) { + if (hor_cont != nullptr && hor_cont->GetWidgetOfType(WWT_CAPTION) != nullptr && hor_cont->GetWidgetOfType(WWT_SHADEBOX) != nullptr) { *shade_select = new NWidgetStacked; root->Add(*shade_select); body = new NWidgetVertical; (*shade_select)->Add(body); } else { - *shade_select = NULL; + *shade_select = nullptr; body = root; } @@ -2864,8 +2864,8 @@ NWidgetContainer *MakeWindowNWidgetTree( NWidgetBase *MakeCompanyButtonRows(int *biggest_index, int widget_first, int widget_last, int max_length, StringID button_tooltip) { assert(max_length >= 1); - NWidgetVertical *vert = NULL; // Storage for all rows. - NWidgetHorizontal *hor = NULL; // Storage for buttons in one row. + NWidgetVertical *vert = nullptr; // Storage for all rows. + NWidgetHorizontal *hor = nullptr; // Storage for buttons in one row. int hor_length = 0; Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON); @@ -2875,12 +2875,12 @@ NWidgetBase *MakeCompanyButtonRows(int * for (int widnum = widget_first; widnum <= widget_last; widnum++) { /* Ensure there is room in 'hor' for another button. */ if (hor_length == max_length) { - if (vert == NULL) vert = new NWidgetVertical(); + if (vert == nullptr) vert = new NWidgetVertical(); vert->Add(hor); - hor = NULL; + hor = nullptr; hor_length = 0; } - if (hor == NULL) { + if (hor == nullptr) { hor = new NWidgetHorizontal(); hor_length = 0; } @@ -2894,7 +2894,7 @@ NWidgetBase *MakeCompanyButtonRows(int * hor_length++; } *biggest_index = widget_last; - if (vert == NULL) return hor; // All buttons fit in a single row. + if (vert == nullptr) return hor; // All buttons fit in a single row. if (hor_length > 0 && hor_length < max_length) { /* Last row is partial, add a spacer at the end to force all buttons to the left. */ @@ -2903,6 +2903,6 @@ NWidgetBase *MakeCompanyButtonRows(int * spc->SetResize(1, 0); hor->Add(spc); } - if (hor != NULL) vert->Add(hor); + if (hor != nullptr) vert->Add(hor); return vert; } diff --git a/src/widget_type.h b/src/widget_type.h --- a/src/widget_type.h +++ b/src/widget_type.h @@ -374,7 +374,7 @@ public: void FillNestedArray(NWidgetBase **array, uint length) override; /** Return whether the container is empty. */ - inline bool IsEmpty() { return head == NULL; } + inline bool IsEmpty() { return head == nullptr; } NWidgetBase *GetWidgetOfType(WidgetType tp) override; @@ -544,7 +544,7 @@ public: */ class NWidgetBackground : public NWidgetCore { public: - NWidgetBackground(WidgetType tp, Colours colour, int index, NWidgetPIPContainer *child = NULL); + NWidgetBackground(WidgetType tp, Colours colour, int index, NWidgetPIPContainer *child = nullptr); ~NWidgetBackground(); void Add(NWidgetBase *nwid); diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -115,7 +115,7 @@ static const NWidgetPart _nested_dropdow }; static WindowDesc _dropdown_desc( - WDP_MANUAL, NULL, 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_DROPDOWN_MENU, WC_NONE, WDF_NO_FOCUS, _nested_dropdown_menu_widgets, lengthof(_nested_dropdown_menu_widgets) @@ -200,7 +200,7 @@ struct DropdownWindow : Window { this->SetDirty(); Window *w2 = FindWindowById(this->parent_wnd_class, this->parent_wnd_num); - if (w2 != NULL) { + if (w2 != nullptr) { Point pt = _cursor.pos; pt.x -= w2->left; pt.y -= w2->top; @@ -304,7 +304,7 @@ struct DropdownWindow : Window { virtual void OnMouseLoop() { Window *w2 = FindWindowById(this->parent_wnd_class, this->parent_wnd_num); - if (w2 == NULL) { + if (w2 == nullptr) { delete this; return; } @@ -518,7 +518,7 @@ int HideDropDownMenu(Window *pw) if (w->window_class != WC_DROPDOWN_MENU) continue; DropdownWindow *dw = dynamic_cast(w); - assert(dw != NULL); + assert(dw != nullptr); if (pw->window_class == dw->parent_wnd_class && pw->window_number == dw->parent_wnd_num) { int parent_button = dw->parent_button; diff --git a/src/window.cpp b/src/window.cpp --- a/src/window.cpp +++ b/src/window.cpp @@ -52,13 +52,13 @@ enum ViewportAutoscrolling { }; static Point _drag_delta; ///< delta between mouse cursor and upper left corner of dragged window -static Window *_mouseover_last_w = NULL; ///< Window of the last OnMouseOver event. -static Window *_last_scroll_window = NULL; ///< Window of the last scroll event. +static Window *_mouseover_last_w = nullptr; ///< Window of the last OnMouseOver event. +static Window *_last_scroll_window = nullptr; ///< Window of the last scroll event. /** List of windows opened at the screen sorted from the front. */ -Window *_z_front_window = NULL; +Window *_z_front_window = nullptr; /** List of windows opened at the screen sorted from the back. */ -Window *_z_back_window = NULL; +Window *_z_back_window = nullptr; /** If false, highlight is white, otherwise the by the widget defined colour. */ bool _window_highlight_colour = false; @@ -85,7 +85,7 @@ SpecialMouseMode _special_mouse_mode; // * List of all WindowDescs. * This is a pointer to ensure initialisation order with the various static WindowDesc instances. */ -static std::vector *_window_descs = NULL; +static std::vector *_window_descs = nullptr; /** Config file to store WindowDesc */ char *_windows_file; @@ -108,7 +108,7 @@ WindowDesc::WindowDesc(WindowPosition de default_width_trad(def_width_trad), default_height_trad(def_height_trad) { - if (_window_descs == NULL) _window_descs = new std::vector(); + if (_window_descs == nullptr) _window_descs = new std::vector(); _window_descs->push_back(this); } @@ -145,7 +145,7 @@ void WindowDesc::LoadFromConfig() IniFile *ini = new IniFile(); ini->LoadFromDisk(_windows_file, NO_DIRECTORY); for (WindowDesc *wd : *_window_descs) { - if (wd->ini_key == NULL) continue; + if (wd->ini_key == nullptr) continue; IniLoadWindowSettings(ini, wd->ini_key, wd); } delete ini; @@ -156,8 +156,8 @@ void WindowDesc::LoadFromConfig() */ static int CDECL DescSorter(WindowDesc * const *a, WindowDesc * const *b) { - if ((*a)->ini_key != NULL && (*b)->ini_key != NULL) return strcmp((*a)->ini_key, (*b)->ini_key); - return ((*b)->ini_key != NULL ? 1 : 0) - ((*a)->ini_key != NULL ? 1 : 0); + if ((*a)->ini_key != nullptr && (*b)->ini_key != nullptr) return strcmp((*a)->ini_key, (*b)->ini_key); + return ((*b)->ini_key != nullptr ? 1 : 0) - ((*a)->ini_key != nullptr ? 1 : 0); } /** @@ -171,7 +171,7 @@ void WindowDesc::SaveToConfig() IniFile *ini = new IniFile(); ini->LoadFromDisk(_windows_file, NO_DIRECTORY); for (WindowDesc *wd : *_window_descs) { - if (wd->ini_key == NULL) continue; + if (wd->ini_key == nullptr) continue; IniSaveWindowSettings(ini, wd->ini_key, wd); } ini->SaveToDisk(_windows_file); @@ -183,7 +183,7 @@ void WindowDesc::SaveToConfig() */ void Window::ApplyDefaults() { - if (this->nested_root != NULL && this->nested_root->GetWidgetOfType(WWT_STICKYBOX) != NULL) { + if (this->nested_root != nullptr && this->nested_root->GetWidgetOfType(WWT_STICKYBOX) != nullptr) { if (this->window_desc->pref_sticky) this->flags |= WF_STICKY; } else { /* There is no stickybox; clear the preference in case someone tried to be funny */ @@ -215,7 +215,7 @@ void Window::DisableAllWidgetHighlight() { for (uint i = 0; i < this->nested_array_size; i++) { NWidgetBase *nwid = this->GetWidget(i); - if (nwid == NULL) continue; + if (nwid == nullptr) continue; if (nwid->IsHighlighted()) { nwid->SetHighlighted(TC_INVALID); @@ -236,7 +236,7 @@ void Window::SetWidgetHighlight(byte wid assert(widget_index < this->nested_array_size); NWidgetBase *nwid = this->GetWidget(widget_index); - if (nwid == NULL) return; + if (nwid == nullptr) return; nwid->SetHighlighted(highlighted_colour); this->SetWidgetDirty(widget_index); @@ -249,7 +249,7 @@ void Window::SetWidgetHighlight(byte wid bool valid = false; for (uint i = 0; i < this->nested_array_size; i++) { NWidgetBase *nwid = this->GetWidget(i); - if (nwid == NULL) continue; + if (nwid == nullptr) continue; if (!nwid->IsHighlighted()) continue; valid = true; @@ -269,7 +269,7 @@ bool Window::IsWidgetHighlighted(byte wi assert(widget_index < this->nested_array_size); const NWidgetBase *nwid = this->GetWidget(widget_index); - if (nwid == NULL) return false; + if (nwid == nullptr) return false; return nwid->IsHighlighted(); } @@ -326,63 +326,63 @@ Scrollbar *Window::GetScrollbar(uint wid /** * Return the querystring associated to a editbox. * @param widnum Editbox widget index - * @return QueryString or NULL. + * @return QueryString or nullptr. */ const QueryString *Window::GetQueryString(uint widnum) const { auto query = this->querystrings.Find(widnum); - return query != this->querystrings.end() ? query->second : NULL; + return query != this->querystrings.end() ? query->second : nullptr; } /** * Return the querystring associated to a editbox. * @param widnum Editbox widget index - * @return QueryString or NULL. + * @return QueryString or nullptr. */ QueryString *Window::GetQueryString(uint widnum) { SmallMap::Pair *query = this->querystrings.Find(widnum); - return query != this->querystrings.End() ? query->second : NULL; + return query != this->querystrings.End() ? query->second : nullptr; } /** * Get the current input text if an edit box has the focus. - * @return The currently focused input text or NULL if no input focused. + * @return The currently focused input text or nullptr if no input focused. */ /* virtual */ const char *Window::GetFocusedText() const { - if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) { + if (this->nested_focus != nullptr && this->nested_focus->type == WWT_EDITBOX) { return this->GetQueryString(this->nested_focus->index)->GetText(); } - return NULL; + return nullptr; } /** * Get the string at the caret if an edit box has the focus. - * @return The text at the caret or NULL if no edit box is focused. + * @return The text at the caret or nullptr if no edit box is focused. */ /* virtual */ const char *Window::GetCaret() const { - if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) { + if (this->nested_focus != nullptr && this->nested_focus->type == WWT_EDITBOX) { return this->GetQueryString(this->nested_focus->index)->GetCaret(); } - return NULL; + return nullptr; } /** * Get the range of the currently marked input text. * @param[out] length Length of the marked text. - * @return Pointer to the start of the marked text or NULL if no text is marked. + * @return Pointer to the start of the marked text or nullptr if no text is marked. */ /* virtual */ const char *Window::GetMarkedText(size_t *length) const { - if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) { + if (this->nested_focus != nullptr && this->nested_focus->type == WWT_EDITBOX) { return this->GetQueryString(this->nested_focus->index)->GetMarkedText(length); } - return NULL; + return nullptr; } /** @@ -391,7 +391,7 @@ QueryString *Window::GetQueryString(uint */ /* virtual */ Point Window::GetCaretPosition() const { - if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) { + if (this->nested_focus != nullptr && this->nested_focus->type == WWT_EDITBOX) { return this->GetQueryString(this->nested_focus->index)->GetCaretPosition(this, this->nested_focus->index); } @@ -407,7 +407,7 @@ QueryString *Window::GetQueryString(uint */ /* virtual */ Rect Window::GetTextBoundingRect(const char *from, const char *to) const { - if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) { + if (this->nested_focus != nullptr && this->nested_focus->type == WWT_EDITBOX) { return this->GetQueryString(this->nested_focus->index)->GetBoundingRect(this, this->nested_focus->index, from, to); } @@ -418,15 +418,15 @@ QueryString *Window::GetQueryString(uint /** * Get the character that is rendered at a position by the focused edit box. * @param pt The position to test. - * @return Pointer to the character at the position or NULL if no character is at the position. + * @return Pointer to the character at the position or nullptr if no character is at the position. */ /* virtual */ const char *Window::GetTextCharacterAtPosition(const Point &pt) const { - if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) { + if (this->nested_focus != nullptr && this->nested_focus->type == WWT_EDITBOX) { return this->GetQueryString(this->nested_focus->index)->GetCharAtPosition(this, this->nested_focus->index, pt); } - return NULL; + return nullptr; } /** @@ -438,8 +438,8 @@ void SetFocusedWindow(Window *w) if (_focused_window == w) return; /* Invalidate focused widget */ - if (_focused_window != NULL) { - if (_focused_window->nested_focus != NULL) _focused_window->nested_focus->SetDirty(_focused_window); + if (_focused_window != nullptr) { + if (_focused_window->nested_focus != nullptr) _focused_window->nested_focus->SetDirty(_focused_window); } /* Remember which window was previously focused */ @@ -447,8 +447,8 @@ void SetFocusedWindow(Window *w) _focused_window = w; /* So we can inform it that it lost focus */ - if (old_focused != NULL) old_focused->OnFocusLost(); - if (_focused_window != NULL) _focused_window->OnFocus(); + if (old_focused != nullptr) old_focused->OnFocusLost(); + if (_focused_window != nullptr) _focused_window->OnFocus(); } /** @@ -458,12 +458,12 @@ void SetFocusedWindow(Window *w) */ bool EditBoxInGlobalFocus() { - if (_focused_window == NULL) return false; + if (_focused_window == nullptr) return false; /* The console does not have an edit box so a special case is needed. */ if (_focused_window->window_class == WC_CONSOLE) return true; - return _focused_window->nested_focus != NULL && _focused_window->nested_focus->type == WWT_EDITBOX; + return _focused_window->nested_focus != nullptr && _focused_window->nested_focus->type == WWT_EDITBOX; } /** @@ -471,12 +471,12 @@ bool EditBoxInGlobalFocus() */ void Window::UnfocusFocusedWidget() { - if (this->nested_focus != NULL) { + if (this->nested_focus != nullptr) { if (this->nested_focus->type == WWT_EDITBOX) VideoDriver::GetInstance()->EditBoxLostFocus(); /* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */ this->nested_focus->SetDirty(this); - this->nested_focus = NULL; + this->nested_focus = nullptr; } } @@ -490,8 +490,8 @@ bool Window::SetFocusedWidget(int widget /* Do nothing if widget_index is already focused, or if it wasn't a valid widget. */ if ((uint)widget_index >= this->nested_array_size) return false; - assert(this->nested_array[widget_index] != NULL); // Setting focus to a non-existing widget is a bad idea. - if (this->nested_focus != NULL) { + assert(this->nested_array[widget_index] != nullptr); // Setting focus to a non-existing widget is a bad idea. + if (this->nested_focus != nullptr) { if (this->GetWidget(widget_index) == this->nested_focus) return false; /* Repaint the widget that lost focus. A focused edit box may else leave the caret on the screen. */ @@ -507,7 +507,7 @@ bool Window::SetFocusedWidget(int widget */ void Window::OnFocusLost() { - if (this->nested_focus != NULL && this->nested_focus->type == WWT_EDITBOX) VideoDriver::GetInstance()->EditBoxLostFocus(); + if (this->nested_focus != nullptr && this->nested_focus->type == WWT_EDITBOX) VideoDriver::GetInstance()->EditBoxLostFocus(); } /** @@ -557,7 +557,7 @@ void CDECL Window::SetWidgetsLoweredStat void Window::RaiseButtons(bool autoraise) { for (uint i = 0; i < this->nested_array_size; i++) { - if (this->nested_array[i] == NULL) continue; + if (this->nested_array[i] == nullptr) continue; WidgetType type = this->nested_array[i]->type; if (((type & ~WWB_PUSHBUTTON) < WWT_LAST || type == NWID_PUSHBUTTON_DROPDOWN) && (!autoraise || (type & WWB_PUSHBUTTON) || type == WWT_EDITBOX) && this->IsWidgetLowered(i)) { @@ -567,8 +567,8 @@ void Window::RaiseButtons(bool autoraise } /* Special widgets without widget index */ - NWidgetCore *wid = this->nested_root != NULL ? (NWidgetCore*)this->nested_root->GetWidgetOfType(WWT_DEFSIZEBOX) : NULL; - if (wid != NULL) { + NWidgetCore *wid = this->nested_root != nullptr ? (NWidgetCore*)this->nested_root->GetWidgetOfType(WWT_DEFSIZEBOX) : nullptr; + if (wid != nullptr) { wid->SetLowered(false); wid->SetDirty(this); } @@ -581,7 +581,7 @@ void Window::RaiseButtons(bool autoraise void Window::SetWidgetDirty(byte widget_index) const { /* Sometimes this function is called before the window is even fully initialized */ - if (this->nested_array == NULL) return; + if (this->nested_array == nullptr) return; this->nested_array[widget_index]->SetDirty(this); } @@ -596,7 +596,7 @@ EventState Window::OnHotkey(int hotkey) if (hotkey < 0) return ES_NOT_HANDLED; NWidgetCore *nw = this->GetWidget(hotkey); - if (nw == NULL || nw->IsDisabled()) return ES_NOT_HANDLED; + if (nw == nullptr || nw->IsDisabled()) return ES_NOT_HANDLED; if (nw->type == WWT_EDITBOX) { if (this->IsShaded()) return ES_NOT_HANDLED; @@ -636,7 +636,7 @@ static void StartWindowSizing(Window *w, static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count) { NWidgetCore *nw = w->nested_root->GetWidgetFromPos(x, y); - WidgetType widget_type = (nw != NULL) ? nw->type : WWT_EMPTY; + WidgetType widget_type = (nw != nullptr) ? nw->type : WWT_EMPTY; bool focused_widget_changed = false; /* If clicked on a window that previously did dot have focus */ @@ -647,7 +647,7 @@ static void DispatchLeftClickEvent(Windo SetFocusedWindow(w); } - if (nw == NULL) return; // exit if clicked outside of widgets + if (nw == nullptr) return; // exit if clicked outside of widgets /* don't allow any interaction if the button has been disabled */ if (nw->IsDisabled()) return; @@ -686,7 +686,7 @@ static void DispatchLeftClickEvent(Windo case WWT_EDITBOX: { QueryString *query = w->GetQueryString(widget_index); - if (query != NULL) query->ClickEditBox(w, pt, widget_index, click_count, focused_widget_changed); + if (query != nullptr) query->ClickEditBox(w, pt, widget_index, click_count, focused_widget_changed); break; } @@ -768,7 +768,7 @@ static void DispatchLeftClickEvent(Windo static void DispatchRightClickEvent(Window *w, int x, int y) { NWidgetCore *wid = w->nested_root->GetWidgetFromPos(x, y); - if (wid == NULL) return; + if (wid == nullptr) return; Point pt = { x, y }; @@ -781,7 +781,7 @@ static void DispatchRightClickEvent(Wind if (_settings_client.gui.right_mouse_wnd_close && w->nested_root->GetWidgetOfType(WWT_CLOSEBOX)) { delete w; } else if (_settings_client.gui.hover_delay_ms == 0 && !w->OnTooltip(pt, wid->index, TCC_RIGHT_CLICK) && wid->tool_tip != 0) { - GuiShowTooltips(w, wid->tool_tip, 0, NULL, TCC_RIGHT_CLICK); + GuiShowTooltips(w, wid->tool_tip, 0, nullptr, TCC_RIGHT_CLICK); } } @@ -796,7 +796,7 @@ static void DispatchHoverEvent(Window *w NWidgetCore *wid = w->nested_root->GetWidgetFromPos(x, y); /* No widget to handle */ - if (wid == NULL) return; + if (wid == nullptr) return; Point pt = { x, y }; @@ -821,7 +821,7 @@ static void DispatchHoverEvent(Window *w */ static void DispatchMouseWheelEvent(Window *w, NWidgetCore *nwid, int wheel) { - if (nwid == NULL) return; + if (nwid == nullptr) return; /* Using wheel on caption/shade-box shades or unshades the window. */ if (nwid->type == WWT_CAPTION || nwid->type == WWT_SHADEBOX) { @@ -840,8 +840,8 @@ static void DispatchMouseWheelEvent(Wind } /* Scroll the widget attached to the scrollbar. */ - Scrollbar *sb = (nwid->scrollbar_index >= 0 ? w->GetScrollbar(nwid->scrollbar_index) : NULL); - if (sb != NULL && sb->GetCount() > sb->GetCapacity()) { + Scrollbar *sb = (nwid->scrollbar_index >= 0 ? w->GetScrollbar(nwid->scrollbar_index) : nullptr); + if (sb != nullptr && sb->GetCount() > sb->GetCapacity()) { sb->UpdatePosition(wheel); w->SetDirty(); } @@ -1014,12 +1014,12 @@ void Window::ReInit(int rx, int ry) */ void Window::SetShaded(bool make_shaded) { - if (this->shade_select == NULL) return; + if (this->shade_select == nullptr) return; int desired = make_shaded ? SZSP_HORIZONTAL : 0; if (this->shade_select->shown_plane != desired) { if (make_shaded) { - if (this->nested_focus != NULL) this->UnfocusFocusedWidget(); + if (this->nested_focus != nullptr) this->UnfocusFocusedWidget(); this->unshaded_size.width = this->width; this->unshaded_size.height = this->height; this->shade_select->SetDisplayedPlane(desired); @@ -1037,7 +1037,7 @@ void Window::SetShaded(bool make_shaded) * Find the Window whose parent pointer points to this window * @param w parent Window to find child of * @param wc Window class of the window to remove; #WC_INVALID if class does not matter - * @return a Window pointer that is the child of \a w, or \c NULL otherwise + * @return a Window pointer that is the child of \a w, or \c nullptr otherwise */ static Window *FindChildWindow(const Window *w, WindowClass wc) { @@ -1046,7 +1046,7 @@ static Window *FindChildWindow(const Win if ((wc == WC_INVALID || wc == v->window_class) && v->parent == w) return v; } - return NULL; + return nullptr; } /** @@ -1056,7 +1056,7 @@ static Window *FindChildWindow(const Win void Window::DeleteChildWindows(WindowClass wc) const { Window *child = FindChildWindow(this, wc); - while (child != NULL) { + while (child != nullptr) { delete child; child = FindChildWindow(this, wc); } @@ -1073,20 +1073,20 @@ Window::~Window() } /* Prevent Mouseover() from resetting mouse-over coordinates on a non-existing window */ - if (_mouseover_last_w == this) _mouseover_last_w = NULL; + if (_mouseover_last_w == this) _mouseover_last_w = nullptr; /* We can't scroll the window when it's closed. */ - if (_last_scroll_window == this) _last_scroll_window = NULL; + if (_last_scroll_window == this) _last_scroll_window = nullptr; /* Make sure we don't try to access this window as the focused window when it doesn't exist anymore. */ if (_focused_window == this) { this->OnFocusLost(); - _focused_window = NULL; + _focused_window = nullptr; } this->DeleteChildWindows(); - if (this->viewport != NULL) DeleteWindowViewport(this); + if (this->viewport != nullptr) DeleteWindowViewport(this); this->SetDirty(); @@ -1109,7 +1109,7 @@ Window::~Window() * Find a window by its class and window number * @param cls Window class * @param number Number of the window within the window class - * @return Pointer to the found window, or \c NULL if not available + * @return Pointer to the found window, or \c nullptr if not available */ Window *FindWindowById(WindowClass cls, WindowNumber number) { @@ -1118,14 +1118,14 @@ Window *FindWindowById(WindowClass cls, if (w->window_class == cls && w->window_number == number) return w; } - return NULL; + return nullptr; } /** * Find any window by its class. Useful when searching for a window that uses * the window number as a #WindowClass, like #WC_SEND_NETWORK_MSG. * @param cls Window class - * @return Pointer to the found window, or \c NULL if not available + * @return Pointer to the found window, or \c nullptr if not available */ Window *FindWindowByClass(WindowClass cls) { @@ -1134,7 +1134,7 @@ Window *FindWindowByClass(WindowClass cl if (w->window_class == cls) return w; } - return NULL; + return nullptr; } /** @@ -1146,7 +1146,7 @@ Window *FindWindowByClass(WindowClass cl void DeleteWindowById(WindowClass cls, WindowNumber number, bool force) { Window *w = FindWindowById(cls, number); - if (force || w == NULL || + if (force || w == nullptr || (w->flags & WF_STICKY) == 0) { delete w; } @@ -1244,7 +1244,7 @@ Window *BringWindowToFrontById(WindowCla { Window *w = FindWindowById(cls, number); - if (w != NULL) { + if (w != nullptr) { if (w->IsShaded()) w->SetShaded(false); // Restore original window size if it was shaded. w->SetWhiteBorder(); @@ -1357,17 +1357,17 @@ static uint GetWindowZPriority(WindowCla */ static void AddWindowToZOrdering(Window *w) { - assert(w->z_front == NULL && w->z_back == NULL); - - if (_z_front_window == NULL) { + assert(w->z_front == nullptr && w->z_back == nullptr); + + if (_z_front_window == nullptr) { /* It's the only window. */ _z_front_window = _z_back_window = w; - w->z_front = w->z_back = NULL; + w->z_front = w->z_back = nullptr; } else { /* Search down the z-ordering for its location. */ Window *v = _z_front_window; uint last_z_priority = UINT_MAX; - while (v != NULL && (v->window_class == WC_INVALID || GetWindowZPriority(v->window_class) > GetWindowZPriority(w->window_class))) { + while (v != nullptr && (v->window_class == WC_INVALID || GetWindowZPriority(v->window_class) > GetWindowZPriority(w->window_class))) { if (v->window_class != WC_INVALID) { /* Sanity check z-ordering, while we're at it. */ assert(last_z_priority >= GetWindowZPriority(v->window_class)); @@ -1377,15 +1377,15 @@ static void AddWindowToZOrdering(Window v = v->z_back; } - if (v == NULL) { + if (v == nullptr) { /* It's the new back window. */ w->z_front = _z_back_window; - w->z_back = NULL; + w->z_back = nullptr; _z_back_window->z_back = w; _z_back_window = w; } else if (v == _z_front_window) { /* It's the new front window. */ - w->z_front = NULL; + w->z_front = nullptr; w->z_back = _z_front_window; _z_front_window->z_front = w; _z_front_window = w; @@ -1406,21 +1406,21 @@ static void AddWindowToZOrdering(Window */ static void RemoveWindowFromZOrdering(Window *w) { - if (w->z_front == NULL) { + if (w->z_front == nullptr) { assert(_z_front_window == w); _z_front_window = w->z_back; } else { w->z_front->z_back = w->z_back; } - if (w->z_back == NULL) { + if (w->z_back == nullptr) { assert(_z_back_window == w); _z_back_window = w->z_front; } else { w->z_back->z_front = w->z_front; } - w->z_front = w->z_back = NULL; + w->z_front = w->z_back = nullptr; } /** @@ -1440,8 +1440,8 @@ static void BringWindowToFront(Window *w * Initializes the data (except the position and initial size) of a new Window. * @param window_number Number being assigned to the new window * @return Window pointer of the newly created window - * @pre If nested widgets are used (\a widget is \c NULL), #nested_root and #nested_array_size must be initialized. - * In addition, #nested_array is either \c NULL, or already initialized. + * @pre If nested widgets are used (\a widget is \c nullptr), #nested_root and #nested_array_size must be initialized. + * In addition, #nested_array is either \c nullptr, or already initialized. */ void Window::InitializeData(WindowNumber window_number) { @@ -1450,12 +1450,12 @@ void Window::InitializeData(WindowNumber this->SetWhiteBorder(); if (this->window_desc->default_pos == WDP_CENTER) this->flags |= WF_CENTERED; this->owner = INVALID_OWNER; - this->nested_focus = NULL; + this->nested_focus = nullptr; this->window_number = window_number; this->OnInit(); /* Initialize nested widget tree. */ - if (this->nested_array == NULL) { + if (this->nested_array == nullptr) { this->nested_array = CallocT(this->nested_array_size); this->nested_root->SetupSmallestSize(this, true); } else { @@ -1472,7 +1472,7 @@ void Window::InitializeData(WindowNumber /* Give focus to the opened window unless a text box * of focused window has focus (so we don't interrupt typing). But if the new * window has a text box, then take focus anyway. */ - if (!EditBoxInGlobalFocus() || this->nested_root->GetWidgetOfType(WWT_EDITBOX) != NULL) SetFocusedWindow(this); + if (!EditBoxInGlobalFocus() || this->nested_root->GetWidgetOfType(WWT_EDITBOX) != nullptr) SetFocusedWindow(this); /* Insert the window into the correct location in the z-ordering. */ AddWindowToZOrdering(this); @@ -1516,9 +1516,9 @@ void Window::FindWindowPlacementAndResiz /* Think about the overlapping toolbars when determining the minimum window size */ int free_height = _screen.height; const Window *wt = FindWindowById(WC_STATUS_BAR, 0); - if (wt != NULL) free_height -= wt->height; + if (wt != nullptr) free_height -= wt->height; wt = FindWindowById(WC_MAIN_TOOLBAR, 0); - if (wt != NULL) free_height -= wt->height; + if (wt != nullptr) free_height -= wt->height; int enlarge_x = max(min(def_width - this->width, _screen.width - this->width), 0); int enlarge_y = max(min(def_height - this->height, free_height - this->height), 0); @@ -1542,10 +1542,10 @@ void Window::FindWindowPlacementAndResiz if (nx + this->width > _screen.width) nx -= (nx + this->width - _screen.width); const Window *wt = FindWindowById(WC_MAIN_TOOLBAR, 0); - ny = max(ny, (wt == NULL || this == wt || this->top == 0) ? 0 : wt->height); + ny = max(ny, (wt == nullptr || this == wt || this->top == 0) ? 0 : wt->height); nx = max(nx, 0); - if (this->viewport != NULL) { + if (this->viewport != nullptr) { this->viewport->left += nx - this->left; this->viewport->top += ny - this->top; } @@ -1652,7 +1652,7 @@ static Point GetAutoPlacePosition(int wi /* First attempt, try top-left of the screen */ const Window *main_toolbar = FindWindowByClass(WC_MAIN_TOOLBAR); - const int toolbar_y = main_toolbar != NULL ? main_toolbar->height : 0; + const int toolbar_y = main_toolbar != nullptr ? main_toolbar->height : 0; if (IsGoodAutoPlace1(rtl ? _screen.width - width : 0, toolbar_y, width, height, toolbar_y, pt)) return pt; /* Second attempt, try around all existing windows. @@ -1716,7 +1716,7 @@ restart: Point GetToolbarAlignedWindowPosition(int window_width) { const Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0); - assert(w != NULL); + assert(w != nullptr); Point pt = { _current_text_dir == TD_RTL ? w->left : (w->left + w->width) - window_width, w->top + w->height }; return pt; } @@ -1746,7 +1746,7 @@ static Point LocalGetWindowPlacement(con int16 default_width = max(desc->GetDefaultWidth(), sm_width); int16 default_height = max(desc->GetDefaultHeight(), sm_height); - if (desc->parent_cls != WC_NONE && (w = FindWindowById(desc->parent_cls, window_number)) != NULL) { + if (desc->parent_cls != WC_NONE && (w = FindWindowById(desc->parent_cls, window_number)) != nullptr) { bool rtl = _current_text_dir == TD_RTL; if (desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) { pt.x = w->left + (rtl ? w->width - default_width : 0); @@ -1857,7 +1857,7 @@ Window::Window(WindowDesc *desc) : windo * at the topmost window, obviously and work our way down to the bottom * @param x position x to query * @param y position y to query - * @return a pointer to the found window if any, NULL otherwise + * @return a pointer to the found window if any, nullptr otherwise */ Window *FindWindowFromPt(int x, int y) { @@ -1868,7 +1868,7 @@ Window *FindWindowFromPt(int x, int y) } } - return NULL; + return nullptr; } /** @@ -1878,11 +1878,11 @@ void InitWindowSystem() { IConsoleClose(); - _z_back_window = NULL; - _z_front_window = NULL; - _focused_window = NULL; - _mouseover_last_w = NULL; - _last_scroll_window = NULL; + _z_back_window = nullptr; + _z_front_window = nullptr; + _focused_window = nullptr; + _mouseover_last_w = nullptr; + _last_scroll_window = nullptr; _scrolling_viewport = false; _mouse_hovering = false; @@ -1902,14 +1902,14 @@ void UnInitWindowSystem() Window *w; FOR_ALL_WINDOWS_FROM_FRONT(w) delete w; - for (w = _z_front_window; w != NULL; /* nothing */) { + for (w = _z_front_window; w != nullptr; /* nothing */) { Window *to_del = w; w = w->z_back; free(to_del); } - _z_front_window = NULL; - _z_back_window = NULL; + _z_front_window = nullptr; + _z_back_window = nullptr; } /** @@ -1932,7 +1932,7 @@ static void DecreaseWindowCounters() /* Unclick scrollbar buttons if they are pressed. */ for (uint i = 0; i < w->nested_array_size; i++) { NWidgetBase *nwid = w->nested_array[i]; - if (nwid != NULL && (nwid->type == NWID_HSCROLLBAR || nwid->type == NWID_VSCROLLBAR)) { + if (nwid != nullptr && (nwid->type == NWID_HSCROLLBAR || nwid->type == NWID_VSCROLLBAR)) { NWidgetScrollbar *sb = static_cast(nwid); if (sb->disp_flags & (ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN)) { sb->disp_flags &= ~(ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN); @@ -1966,7 +1966,7 @@ static void HandlePlacePresize() if (_special_mouse_mode != WSM_PRESIZE) return; Window *w = _thd.GetCallbackWnd(); - if (w == NULL) return; + if (w == nullptr) return; Point pt = GetTileBelowCursor(); if (pt.x == -1) { @@ -1988,7 +1988,7 @@ static EventState HandleMouseDragDrop() if (_left_button_down && _cursor.delta.x == 0 && _cursor.delta.y == 0) return ES_HANDLED; // Dragging, but the mouse did not move. Window *w = _thd.GetCallbackWnd(); - if (w != NULL) { + if (w != nullptr) { /* Send an event in client coordinates. */ Point pt; pt.x = _cursor.pos.x - w->left; @@ -2010,7 +2010,7 @@ static void HandleMouseOver() Window *w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y); /* We changed window, put an OnMouseOver event to the last window */ - if (_mouseover_last_w != NULL && _mouseover_last_w != w) { + if (_mouseover_last_w != nullptr && _mouseover_last_w != w) { /* Reset mouse-over coordinates of previous window */ Point pt = { -1, -1 }; _mouseover_last_w->OnMouseOver(pt, 0); @@ -2019,11 +2019,11 @@ static void HandleMouseOver() /* _mouseover_last_w will get reset when the window is deleted, see DeleteWindow() */ _mouseover_last_w = w; - if (w != NULL) { + if (w != nullptr) { /* send an event in client coordinates. */ Point pt = { _cursor.pos.x - w->left, _cursor.pos.y - w->top }; const NWidgetCore *widget = w->nested_root->GetWidgetFromPos(pt.x, pt.y); - if (widget != NULL) w->OnMouseOver(pt, widget->index); + if (widget != nullptr) w->OnMouseOver(pt, widget->index); } } @@ -2048,7 +2048,7 @@ enum PreventHideDirection { */ static void PreventHiding(int *nx, int *ny, const Rect &rect, const Window *v, int px, PreventHideDirection dir) { - if (v == NULL) return; + if (v == nullptr) return; int v_bottom = v->top + v->height; int v_right = v->left + v->width; @@ -2089,7 +2089,7 @@ static void EnsureVisibleCaption(Window /* Search for the title bar rectangle. */ Rect caption_rect; const NWidgetBase *caption = w->nested_root->GetWidgetOfType(WWT_CAPTION); - if (caption != NULL) { + if (caption != nullptr) { caption_rect.left = caption->pos_x; caption_rect.right = caption->pos_x + caption->current_x; caption_rect.top = caption->pos_y; @@ -2104,7 +2104,7 @@ static void EnsureVisibleCaption(Window PreventHiding(&nx, &ny, caption_rect, FindWindowById(WC_STATUS_BAR, 0), w->left, PHD_UP); } - if (w->viewport != NULL) { + if (w->viewport != nullptr) { w->viewport->left += nx - w->left; w->viewport->top += ny - w->top; } @@ -2162,7 +2162,7 @@ void ResizeWindow(Window *w, int delta_x int GetMainViewTop() { Window *w = FindWindowById(WC_MAIN_TOOLBAR, 0); - return (w == NULL) ? 0 : w->top + w->height; + return (w == nullptr) ? 0 : w->top + w->height; } /** @@ -2173,7 +2173,7 @@ int GetMainViewTop() int GetMainViewBottom() { Window *w = FindWindowById(WC_STATUS_BAR, 0); - return (w == NULL) ? _screen.height : w->top; + return (w == nullptr) ? _screen.height : w->top; } static bool _dragging_window; ///< A window is being dragged or resized. @@ -2469,12 +2469,12 @@ static EventState HandleViewportScroll() /* When we don't have a last scroll window we are starting to scroll. * When the last scroll window and this are not the same we went * outside of the window and should not left-mouse scroll anymore. */ - if (_last_scroll_window == NULL) _last_scroll_window = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y); - - if (_last_scroll_window == NULL || !((_settings_client.gui.scroll_mode != VSM_MAP_LMB && _right_button_down) || scrollwheel_scrolling || (_settings_client.gui.scroll_mode == VSM_MAP_LMB && _left_button_down))) { + if (_last_scroll_window == nullptr) _last_scroll_window = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y); + + if (_last_scroll_window == nullptr || !((_settings_client.gui.scroll_mode != VSM_MAP_LMB && _right_button_down) || scrollwheel_scrolling || (_settings_client.gui.scroll_mode == VSM_MAP_LMB && _left_button_down))) { _cursor.fix_at = false; _scrolling_viewport = false; - _last_scroll_window = NULL; + _last_scroll_window = nullptr; return ES_NOT_HANDLED; } @@ -2581,7 +2581,7 @@ static bool MaybeBringWindowToFront(Wind EventState Window::HandleEditBoxKey(int wid, WChar key, uint16 keycode) { QueryString *query = this->GetQueryString(wid); - if (query == NULL) return ES_NOT_HANDLED; + if (query == nullptr) return ES_NOT_HANDLED; int action = QueryString::ACTION_NOTHING; @@ -2685,7 +2685,7 @@ void HandleKeypress(uint keycode, WChar Window *w; FOR_ALL_WINDOWS_FROM_FRONT(w) { if (w->window_class == WC_MAIN_TOOLBAR) continue; - if (w->window_desc->hotkeys != NULL) { + if (w->window_desc->hotkeys != nullptr) { int hotkey = w->window_desc->hotkeys->CheckMatch(keycode); if (hotkey >= 0 && w->OnHotkey(hotkey) == ES_HANDLED) return; } @@ -2694,8 +2694,8 @@ void HandleKeypress(uint keycode, WChar w = FindWindowById(WC_MAIN_TOOLBAR, 0); /* When there is no toolbar w is null, check for that */ - if (w != NULL) { - if (w->window_desc->hotkeys != NULL) { + if (w != nullptr) { + if (w->window_desc->hotkeys != nullptr) { int hotkey = w->window_desc->hotkeys->CheckMatch(keycode); if (hotkey >= 0 && w->OnHotkey(hotkey) == ES_HANDLED) return; } @@ -2725,7 +2725,7 @@ void HandleCtrlChanged() /* virtual */ void Window::InsertTextString(int wid, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) { QueryString *query = this->GetQueryString(wid); - if (query == NULL) return; + if (query == nullptr) return; if (query->text.InsertString(str, marked, caret, insert_location, replacement_end) || marked) { this->SetWidgetDirty(wid); @@ -2767,11 +2767,11 @@ static void HandleAutoscroll() int x = _cursor.pos.x; int y = _cursor.pos.y; Window *w = FindWindowFromPt(x, y); - if (w == NULL || w->flags & WF_DISABLE_VP_SCROLL) return; + if (w == nullptr || w->flags & WF_DISABLE_VP_SCROLL) return; if (_settings_client.gui.auto_scrolling != VA_EVERY_VIEWPORT && w->window_class != WC_MAIN_WINDOW) return; ViewPort *vp = IsPtInWindowViewport(w, x, y); - if (vp == NULL) return; + if (vp == nullptr) return; x -= vp->left; y -= vp->top; @@ -2877,23 +2877,23 @@ static void MouseLoop(MouseClick click, int x = _cursor.pos.x; int y = _cursor.pos.y; Window *w = FindWindowFromPt(x, y); - if (w == NULL) return; + if (w == nullptr) return; if (click != MC_HOVER && !MaybeBringWindowToFront(w)) return; ViewPort *vp = IsPtInWindowViewport(w, x, y); /* Don't allow any action in a viewport if either in menu or when having a modal progress window */ - if (vp != NULL && (_game_mode == GM_MENU || HasModalProgress())) return; + if (vp != nullptr && (_game_mode == GM_MENU || HasModalProgress())) return; if (mousewheel != 0) { /* Send mousewheel event to window, unless we're scrolling a viewport or the map */ - if (!scrollwheel_scrolling || (vp == NULL && w->window_class != WC_SMALLMAP)) w->OnMouseWheel(mousewheel); + if (!scrollwheel_scrolling || (vp == nullptr && w->window_class != WC_SMALLMAP)) w->OnMouseWheel(mousewheel); /* Dispatch a MouseWheelEvent for widgets if it is not a viewport */ - if (vp == NULL) DispatchMouseWheelEvent(w, w->nested_root->GetWidgetFromPos(x - w->left, y - w->top), mousewheel); + if (vp == nullptr) DispatchMouseWheelEvent(w, w->nested_root->GetWidgetFromPos(x - w->left, y - w->top), mousewheel); } - if (vp != NULL) { + if (vp != nullptr) { if (scrollwheel_scrolling && !(w->flags & WF_DISABLE_VP_SCROLL)) { _scrolling_viewport = true; _cursor.fix_at = true; @@ -2927,7 +2927,7 @@ static void MouseLoop(MouseClick click, } } - if (vp == NULL || (w->flags & WF_DISABLE_VP_SCROLL)) { + if (vp == nullptr || (w->flags & WF_DISABLE_VP_SCROLL)) { switch (click) { case MC_LEFT: case MC_DOUBLE_LEFT: @@ -2935,7 +2935,7 @@ static void MouseLoop(MouseClick click, return; default: - if (!scrollwheel_scrolling || w == NULL || w->window_class != WC_SMALLMAP) break; + if (!scrollwheel_scrolling || w == nullptr || w->window_class != WC_SMALLMAP) break; /* We try to use the scrollwheel to scroll since we didn't touch any of the buttons. * Simulate a right button click so we can get started. */ FALLTHROUGH; @@ -3046,7 +3046,7 @@ static void CheckSoftLimit() for (;;) { uint deletable_count = 0; - Window *w, *last_deletable = NULL; + Window *w, *last_deletable = nullptr; FOR_ALL_WINDOWS_FROM_FRONT(w) { if (w->window_class == WC_MAIN_WINDOW || IsVitalWindow(w) || (w->flags & WF_STICKY)) continue; @@ -3057,7 +3057,7 @@ static void CheckSoftLimit() /* We've not reached the soft limit yet. */ if (deletable_count <= _settings_client.gui.window_soft_limit) break; - assert(last_deletable != NULL); + assert(last_deletable != nullptr); delete last_deletable; } } @@ -3074,7 +3074,7 @@ void InputLoop() CheckSoftLimit(); /* Do the actual free of the deleted windows. */ - for (Window *v = _z_front_window; v != NULL; /* nothing */) { + for (Window *v = _z_front_window; v != nullptr; /* nothing */) { Window *w = v; v = v->z_back; @@ -3184,7 +3184,7 @@ void UpdateWindows() FOR_ALL_WINDOWS_FROM_BACK(w) { /* Update viewport only if window is not shaded. */ - if (w->viewport != NULL && !w->IsShaded()) UpdateViewportPosition(w); + if (w->viewport != nullptr && !w->IsShaded()) UpdateViewportPosition(w); } NetworkDrawChatMessage(); /* Redraw mouse cursor in case it was hidden */ @@ -3455,17 +3455,17 @@ void ReInitAllWindows() /** * (Re)position a window at the screen. - * @param w Window structure of the window, may also be \c NULL. + * @param w Window structure of the window, may also be \c nullptr. * @param clss The class of the window to position. * @param setting The actual setting used for the window's position. * @return X coordinate of left edge of the repositioned window. */ static int PositionWindow(Window *w, WindowClass clss, int setting) { - if (w == NULL || w->window_class != clss) { + if (w == nullptr || w->window_class != clss) { w = FindWindowById(clss, 0); } - if (w == NULL) return 0; + if (w == nullptr) return 0; int old_left = w->left; switch (setting) { @@ -3473,14 +3473,14 @@ static int PositionWindow(Window *w, Win case 2: w->left = _screen.width - w->width; break; default: w->left = 0; break; } - if (w->viewport != NULL) w->viewport->left += w->left - old_left; + if (w->viewport != nullptr) w->viewport->left += w->left - old_left; SetDirtyBlocks(0, w->top, _screen.width, w->top + w->height); // invalidate the whole row return w->left; } /** * (Re)position main toolbar window at the screen. - * @param w Window structure of the main toolbar window, may also be \c NULL. + * @param w Window structure of the main toolbar window, may also be \c nullptr. * @return X coordinate of left edge of the repositioned toolbar window. */ int PositionMainToolbar(Window *w) @@ -3491,7 +3491,7 @@ int PositionMainToolbar(Window *w) /** * (Re)position statusbar window at the screen. - * @param w Window structure of the statusbar window, may also be \c NULL. + * @param w Window structure of the statusbar window, may also be \c nullptr. * @return X coordinate of left edge of the repositioned statusbar. */ int PositionStatusbar(Window *w) @@ -3502,7 +3502,7 @@ int PositionStatusbar(Window *w) /** * (Re)position news message window at the screen. - * @param w Window structure of the news message window, may also be \c NULL. + * @param w Window structure of the news message window, may also be \c nullptr. * @return X coordinate of left edge of the repositioned news message. */ int PositionNewsMessage(Window *w) @@ -3513,7 +3513,7 @@ int PositionNewsMessage(Window *w) /** * (Re)position network chat window at the screen. - * @param w Window structure of the network chat window, may also be \c NULL. + * @param w Window structure of the network chat window, may also be \c nullptr. * @return X coordinate of left edge of the repositioned network chat window. */ int PositionNetworkChatWindow(Window *w) @@ -3532,7 +3532,7 @@ void ChangeVehicleViewports(VehicleID fr { Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { - if (w->viewport != NULL && w->viewport->follow_vehicle == from_index) { + if (w->viewport != nullptr && w->viewport->follow_vehicle == from_index) { w->viewport->follow_vehicle = to_index; w->SetDirty(); } diff --git a/src/window_gui.h b/src/window_gui.h --- a/src/window_gui.h +++ b/src/window_gui.h @@ -169,14 +169,14 @@ struct WindowDesc : ZeroedMemoryAllocato WindowDesc(WindowPosition default_pos, const char *ini_key, int16 def_width_trad, int16 def_height_trad, WindowClass window_class, WindowClass parent_class, uint32 flags, - const NWidgetPart *nwid_parts, int16 nwid_length, HotkeyList *hotkeys = NULL); + const NWidgetPart *nwid_parts, int16 nwid_length, HotkeyList *hotkeys = nullptr); ~WindowDesc(); WindowPosition default_pos; ///< Preferred position of the window. @see WindowPosition() WindowClass cls; ///< Class of the window, @see WindowClass. WindowClass parent_cls; ///< Class of the parent window. @see WindowClass - const char *ini_key; ///< Key to store window defaults in openttd.cfg. \c NULL if nothing shall be stored. + const char *ini_key; ///< Key to store window defaults in openttd.cfg. \c nullptr if nothing shall be stored. uint32 flags; ///< Flags. @see WindowDefaultFlag const NWidgetPart *nwid_parts; ///< Nested widget parts describing the window. int16 nwid_length; ///< Length of the #nwid_parts array. @@ -326,12 +326,12 @@ public: Owner owner; ///< The owner of the content shown in this window. Company colour is acquired from this variable. ViewportData *viewport; ///< Pointer to viewport data, if present. - const NWidgetCore *nested_focus; ///< Currently focused nested widget, or \c NULL if no nested widget has focus. + const NWidgetCore *nested_focus; ///< Currently focused nested widget, or \c nullptr if no nested widget has focus. SmallMap querystrings; ///< QueryString associated to WWT_EDITBOX widgets. NWidgetBase *nested_root; ///< Root of the nested tree. NWidgetBase **nested_array; ///< Array of pointers into the tree. Do not access directly, use #Window::GetWidget() instead. uint nested_array_size; ///< Size of the nested array. - NWidgetStacked *shade_select; ///< Selection widget (#NWID_SELECTION) to use for shading the window. If \c NULL, window cannot shade. + NWidgetStacked *shade_select; ///< Selection widget (#NWID_SELECTION) to use for shading the window. If \c nullptr, window cannot shade. Dimension unshaded_size; ///< Last known unshaded size (only valid while shaded). int mouse_capture_widget; ///< Widgetindex of current mouse capture widget (e.g. dragged scrollbar). -1 if no widget has mouse capture. @@ -394,7 +394,7 @@ public: inline void SetWidgetDisabledState(byte widget_index, bool disab_stat) { assert(widget_index < this->nested_array_size); - if (this->nested_array[widget_index] != NULL) this->GetWidget(widget_index)->SetDisabled(disab_stat); + if (this->nested_array[widget_index] != nullptr) this->GetWidget(widget_index)->SetDisabled(disab_stat); } /** @@ -433,7 +433,7 @@ public: */ inline bool IsWidgetFocused(byte widget_index) const { - return this->nested_focus != NULL && this->nested_focus->index == widget_index; + return this->nested_focus != nullptr && this->nested_focus->index == widget_index; } /** @@ -525,7 +525,7 @@ public: /** Is window shaded currently? */ inline bool IsShaded() const { - return this->shade_select != NULL && this->shade_select->shown_plane == SZSP_HORIZONTAL; + return this->shade_select != nullptr && this->shade_select->shown_plane == SZSP_HORIZONTAL; } void SetShaded(bool make_shaded); @@ -734,7 +734,7 @@ public: /** * The query window opened from this window has closed. - * @param str the new value of the string, NULL if the window + * @param str the new value of the string, nullptr if the window * was cancelled or an empty string when the default * button was pressed, i.e. StrEmpty(str). */ @@ -818,14 +818,14 @@ public: * Get the nested widget with number \a widnum from the nested widget tree. * @tparam NWID Type of the nested widget. * @param widnum Widget number of the widget to retrieve. - * @return The requested widget if it is instantiated, \c NULL otherwise. + * @return The requested widget if it is instantiated, \c nullptr otherwise. */ template inline NWID *Window::GetWidget(uint widnum) { - if (widnum >= this->nested_array_size || this->nested_array[widnum] == NULL) return NULL; + if (widnum >= this->nested_array_size || this->nested_array[widnum] == nullptr) return nullptr; NWID *nwid = dynamic_cast(this->nested_array[widnum]); - assert(nwid != NULL); + assert(nwid != nullptr); return nwid; } @@ -833,7 +833,7 @@ inline NWID *Window::GetWidget(uint widn template <> inline const NWidgetBase *Window::GetWidget(uint widnum) const { - if (widnum >= this->nested_array_size) return NULL; + if (widnum >= this->nested_array_size) return nullptr; return this->nested_array[widnum]; } @@ -841,7 +841,7 @@ inline const NWidgetBase *Window::GetWid * Get the nested widget with number \a widnum from the nested widget tree. * @tparam NWID Type of the nested widget. * @param widnum Widget number of the widget to retrieve. - * @return The requested widget if it is instantiated, \c NULL otherwise. + * @return The requested widget if it is instantiated, \c nullptr otherwise. */ template inline const NWID *Window::GetWidget(uint widnum) const @@ -873,26 +873,26 @@ Window *FindWindowFromPt(int x, int y); * @param desc The pointer to the WindowDesc to be created * @param window_number the window number of the new window * @param return_existing If set, also return the window if it already existed. - * @return %Window pointer of the newly created window, or the existing one if \a return_existing is set, or \c NULL. + * @return %Window pointer of the newly created window, or the existing one if \a return_existing is set, or \c nullptr. */ template Wcls *AllocateWindowDescFront(WindowDesc *desc, int window_number, bool return_existing = false) { Wcls *w = static_cast(BringWindowToFrontById(desc->cls, window_number)); - if (w != NULL) return return_existing ? w : NULL; + if (w != nullptr) return return_existing ? w : nullptr; return new Wcls(desc, window_number); } void RelocateAllWindows(int neww, int newh); -void GuiShowTooltips(Window *parent, StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER); +void GuiShowTooltips(Window *parent, StringID str, uint paramcount = 0, const uint64 params[] = nullptr, TooltipCloseCondition close_tooltip = TCC_HOVER); /* widget.cpp */ int GetWidgetFromPos(const Window *w, int x, int y); /** Iterate over all windows */ -#define FOR_ALL_WINDOWS_FROM_BACK_FROM(w, start) for (w = start; w != NULL; w = w->z_front) if (w->window_class != WC_INVALID) -#define FOR_ALL_WINDOWS_FROM_FRONT_FROM(w, start) for (w = start; w != NULL; w = w->z_back) if (w->window_class != WC_INVALID) +#define FOR_ALL_WINDOWS_FROM_BACK_FROM(w, start) for (w = start; w != nullptr; w = w->z_front) if (w->window_class != WC_INVALID) +#define FOR_ALL_WINDOWS_FROM_FRONT_FROM(w, start) for (w = start; w != nullptr; w = w->z_back) if (w->window_class != WC_INVALID) #define FOR_ALL_WINDOWS_FROM_BACK(w) FOR_ALL_WINDOWS_FROM_BACK_FROM(w, _z_back_window) #define FOR_ALL_WINDOWS_FROM_FRONT(w) FOR_ALL_WINDOWS_FROM_FRONT_FROM(w, _z_front_window)