widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #03213
Re: [Merge] lp:~widelands-dev/widelands/delete_deprecated into lp:widelands
Review: Approve
Couple of nits. I suggest to prefer dynamic_cast<> wherever possible (i.e. when you know the type of the object you have) instead of upcast() which is made for if(upcast()) { situations. dynamic_cast<> can also cast references which will make for easier to read code.
Diff comments:
> === modified file 'src/ai/defaultai.cc'
> --- src/ai/defaultai.cc 2014-11-03 06:45:32 +0000
> +++ src/ai/defaultai.cc 2014-11-29 08:14:12 +0000
> @@ -330,13 +330,12 @@
>
> // Read all interesting data from ware producing buildings
> if (typeid(bld) == typeid(ProductionSiteDescr)) {
> - const ProductionSiteDescr& prod =
> - ref_cast<ProductionSiteDescr const, BuildingDescr const>(bld);
> + upcast(ProductionSiteDescr const, prod, &bld);
instead of checking the typeid, you can use if (upcast(...)) {
} which reads a tad bit nicer. That also applies to many other places in the change. I did not point it out all the time.
of course having dynamic type checking in the first place is already code smell.
> bo.type = bld.get_ismine() ? BuildingObserver::MINE : BuildingObserver::PRODUCTIONSITE;
> - for (const WareAmount& temp_input : prod.inputs()) {
> + for (const WareAmount& temp_input : prod->inputs()) {
> bo.inputs_.push_back(temp_input.first);
> }
> - for (const WareIndex& temp_output : prod.output_ware_types()) {
> + for (const WareIndex& temp_output : prod->output_ware_types()) {
> bo.outputs_.push_back(temp_output);
> }
>
> @@ -370,9 +369,8 @@
> // non critical are excluded (see below)
> if (typeid(bld) == typeid(MilitarySiteDescr)) {
> bo.type = BuildingObserver::MILITARYSITE;
> - const MilitarySiteDescr& milit =
> - ref_cast<MilitarySiteDescr const, BuildingDescr const>(bld);
> - for (const std::pair<unsigned char, unsigned char>& temp_buildcosts : milit.buildcost()) {
> + upcast(MilitarySiteDescr const, milit, &bld);
> + for (const std::pair<unsigned char, unsigned char>& temp_buildcosts : milit->buildcost()) {
> // bellow are non-critical wares
> if (tribe_->ware_index("log") == temp_buildcosts.first ||
> tribe_->ware_index("blackwood") == temp_buildcosts.first ||
> @@ -3007,8 +3005,9 @@
> BuildingObserver& bo = get_building_observer(b.descr().name().c_str());
>
> if (bo.type == BuildingObserver::CONSTRUCTIONSITE) {
> + upcast(ConstructionSite const, constructionsite, &b);
> BuildingObserver& target_bo =
> - get_building_observer(ref_cast<ConstructionSite, Building>(b).building().name().c_str());
> + get_building_observer(constructionsite->building().name().c_str());
> ++target_bo.cnt_under_construction_;
> ++num_constructionsites_;
> if (target_bo.type == BuildingObserver::PRODUCTIONSITE) {
> @@ -3024,8 +3023,9 @@
> ++bo.cnt_built_;
>
> if (bo.type == BuildingObserver::PRODUCTIONSITE) {
> + upcast(ProductionSite, productionsite, &b);
> productionsites.push_back(ProductionSiteObserver());
> - productionsites.back().site = &ref_cast<ProductionSite, Building>(b);
> + productionsites.back().site = productionsite;
> productionsites.back().bo = &bo;
> productionsites.back().built_time_ = game().get_gametime();
> productionsites.back().unoccupied_till_ = game().get_gametime();
> @@ -3038,8 +3038,9 @@
> for (uint32_t i = 0; i < bo.inputs_.size(); ++i)
> ++wares.at(bo.inputs_.at(i)).consumers_;
> } else if (bo.type == BuildingObserver::MINE) {
> + upcast(ProductionSite, productionsite, &b);
> mines_.push_back(ProductionSiteObserver());
> - mines_.back().site = &ref_cast<ProductionSite, Building>(b);
> + mines_.back().site = productionsite;
> mines_.back().bo = &bo;
> mines_.back().built_time_ = game().get_gametime();
>
> @@ -3049,8 +3050,9 @@
> for (uint32_t i = 0; i < bo.inputs_.size(); ++i)
> ++wares.at(bo.inputs_.at(i)).consumers_;
> } else if (bo.type == BuildingObserver::MILITARYSITE) {
> + upcast(MilitarySite, militarysite, &b);
> militarysites.push_back(MilitarySiteObserver());
> - militarysites.back().site = &ref_cast<MilitarySite, Building>(b);
> + militarysites.back().site = militarysite;
> militarysites.back().bo = &bo;
> militarysites.back().checks = bo.desc->get_size();
> militarysites.back().enemies_nearby_ = true;
> @@ -3066,8 +3068,9 @@
> BuildingObserver& bo = get_building_observer(b.descr().name().c_str());
>
> if (bo.type == BuildingObserver::CONSTRUCTIONSITE) {
> - BuildingObserver& target_bo = get_building_observer(
> - ref_cast<ConstructionSite const, Building const>(b).building().name().c_str());
> + upcast(ConstructionSite const, constructionsite, &b);
> + BuildingObserver& target_bo =
> + get_building_observer(constructionsite->building().name().c_str());
> --target_bo.cnt_under_construction_;
> --num_constructionsites_;
> if (target_bo.type == BuildingObserver::PRODUCTIONSITE) {
>
> === modified file 'src/base/CMakeLists.txt'
> --- src/base/CMakeLists.txt 2014-11-26 09:36:46 +0000
> +++ src/base/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -45,13 +45,6 @@
> base_macros
> )
>
> -# TODO(sirver): this library should be deleted.
> -wl_library(base_deprecated
> - SRCS
> - deprecated.h
> - deprecated.cc
> - DEPENDS
> -)
>
> wl_library(base_scoped_timer
> SRCS
>
> === removed file 'src/base/deprecated.cc'
> --- src/base/deprecated.cc 2014-07-05 12:17:03 +0000
> +++ src/base/deprecated.cc 1970-01-01 00:00:00 +0000
> @@ -1,20 +0,0 @@
> -/*
> - * Copyright (C) 2006-2014 by the Widelands Development Team
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> - *
> - */
> -
> -// Dummy file as cmake cannot handle header only libraries :(.
>
> === removed file 'src/base/deprecated.h'
> --- src/base/deprecated.h 2014-07-25 19:15:23 +0000
> +++ src/base/deprecated.h 1970-01-01 00:00:00 +0000
> @@ -1,35 +0,0 @@
> -/*
> - * Copyright (C) 2006-2014 by the Widelands Development Team
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> - *
> - */
> -
> -#ifndef WL_BASE_DEPRECATED_H
> -#define WL_BASE_DEPRECATED_H
> -
> -// Code that is still used all over the place, but should not be used anymore.
> -
> -#include <cassert>
> -
> -// DEPRECATED: leads to unsafe code. Instead use upcast() or is_a() to check at
> -// runtime for the type you are expecting.
> -template<typename Derived, typename Base> Derived & ref_cast(Base & base) {
> - assert(dynamic_cast<Derived *>(&base) == static_cast<Derived *>(&base));
> - return static_cast<Derived &>(base);
> -}
> -
> -
> -#endif // end of include guard: WL_BASE_DEPRECATED_H
>
> === modified file 'src/economy/CMakeLists.txt'
> --- src/economy/CMakeLists.txt 2014-07-05 12:17:03 +0000
> +++ src/economy/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -41,7 +41,6 @@
> wares_queue.cc
> wares_queue.h
> DEPENDS
> - base_deprecated
> base_exceptions
> base_log
> base_macros
>
> === modified file 'src/economy/economy.cc'
> --- src/economy/economy.cc 2014-09-20 09:37:47 +0000
> +++ src/economy/economy.cc 2014-11-29 08:14:12 +0000
> @@ -1034,19 +1034,17 @@
> */
> void Economy::balance(uint32_t const timerid)
> {
> - if (m_request_timerid != timerid)
> + if (m_request_timerid != timerid) {
> return;
> + }
> ++m_request_timerid;
>
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> + upcast(Game, game, &owner().egbase());
When you are already sure about yuor object as in this case, just use a dynamic_cast<Game&>(egbase) directly.
>
> _check_splits();
> -
> - _create_requested_workers (game);
> -
> - _balance_requestsupply(game);
> -
> - _handle_active_supplies(game);
> + _create_requested_workers(*game);
> + _balance_requestsupply(*game);
> + _handle_active_supplies(*game);
> }
>
> }
>
> === modified file 'src/economy/flag.cc'
> --- src/economy/flag.cc 2014-09-10 10:18:46 +0000
> +++ src/economy/flag.cc 2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>
> #include "economy/flag.h"
>
> -#include "base/deprecated.h"
> #include "base/macros.h"
> #include "base/wexception.h"
> #include "economy/economy.h"
> @@ -640,15 +639,16 @@
> }
>
> // Deal with the normal (flag) case
> - ref_cast<Flag const, PlayerImmovable const>(*nextstep);
> + upcast(Flag const, nextflag, nextstep);
>
> for (int32_t dir = 1; dir <= 6; ++dir) {
> Road * const road = get_road(dir);
> Flag * other;
> Road::FlagId flagid;
>
> - if (!road)
> + if (!road) {
> continue;
> + }
>
> if (&road->get_flag(Road::FlagStart) == this) {
> flagid = Road::FlagStart;
> @@ -658,12 +658,14 @@
> other = &road->get_flag(Road::FlagStart);
> }
>
> - if (other != nextstep)
> + if (other != nextflag) {
> continue;
> + }
>
> // Yes, this is the road we want; inform it
> - if (road->notify_ware(game, flagid))
> + if (road->notify_ware(game, flagid)) {
> return;
> + }
>
> // If the road doesn't react to the ware immediately, we try other roads:
> // They might lead to the same flag!
> @@ -791,24 +793,24 @@
> Worker * const w,
> PlayerImmovable & target)
> {
> - Flag & flag = ref_cast<Flag, PlayerImmovable>(target);
> + upcast(Flag, flag, &target);
>
> assert(w);
>
> - for (FlagJobs::iterator flag_iter = flag.m_flag_jobs.begin();
> - flag_iter != flag.m_flag_jobs.end();
> + for (FlagJobs::iterator flag_iter = flag->m_flag_jobs.begin();
> + flag_iter != flag->m_flag_jobs.end();
> ++flag_iter) {
> if (flag_iter->request == &rq) {
> delete &rq;
>
> w->start_task_program(game, flag_iter->program);
>
> - flag.m_flag_jobs.erase(flag_iter);
> + flag->m_flag_jobs.erase(flag_iter);
> return;
> }
> }
>
> - flag.molog("BUG: flag_job_request_callback: worker not found in list\n");
> + flag->molog("BUG: flag_job_request_callback: worker not found in list\n");
> }
>
> void Flag::log_general_info(const Widelands::EditorGameBase & egbase)
>
> === modified file 'src/economy/fleet.cc'
> --- src/economy/fleet.cc 2014-09-20 09:37:47 +0000
> +++ src/economy/fleet.cc 2014-11-29 08:14:12 +0000
> @@ -21,7 +21,6 @@
>
> #include <memory>
>
> -#include "base/deprecated.h"
> #include "base/macros.h"
> #include "economy/economy.h"
> #include "economy/flag.h"
>
> === modified file 'src/economy/portdock.cc'
> --- src/economy/portdock.cc 2014-09-20 09:37:47 +0000
> +++ src/economy/portdock.cc 2014-11-29 08:14:12 +0000
> @@ -21,8 +21,8 @@
>
> #include <memory>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> +#include "base/macros.h"
> #include "economy/fleet.h"
> #include "economy/ware_instance.h"
> #include "economy/wares_queue.h"
>
> === modified file 'src/economy/road.cc'
> --- src/economy/road.cc 2014-09-19 12:54:54 +0000
> +++ src/economy/road.cc 2014-11-29 08:14:12 +0000
> @@ -382,15 +382,14 @@
> {
> assert(w);
>
> - Road & road = ref_cast<Road, PlayerImmovable>(target);
> + upcast(Road, road, &target);
> + upcast(Carrier, carrier, w);
>
> - for (CarrierSlot& slot : road.m_carrier_slots) {
> + for (CarrierSlot& slot : road->m_carrier_slots) {
> if (slot.carrier_request == &rq) {
> - Carrier & carrier = ref_cast<Carrier, Worker> (*w);
> slot.carrier_request = nullptr;
> - slot.carrier = &carrier;
> -
> - carrier.start_task_road(game);
> + slot.carrier = carrier;
> + carrier->start_task_road(game);
> delete &rq;
> return;
> }
> @@ -402,7 +401,7 @@
> */
> log
> ("Road(%u): got a request_callback but do not have the request\n",
> - road.serial());
> + road->serial());
> delete &rq;
> w->start_task_gowarehouse(game);
> }
>
> === modified file 'src/economy/routeastar.h'
> --- src/economy/routeastar.h 2014-09-14 11:31:58 +0000
> +++ src/economy/routeastar.h 2014-11-29 08:14:12 +0000
> @@ -20,7 +20,6 @@
> #ifndef WL_ECONOMY_ROUTEASTAR_H
> #define WL_ECONOMY_ROUTEASTAR_H
>
> -#include "base/deprecated.h"
> #include "economy/itransport_cost_calculator.h"
> #include "economy/routing_node.h"
>
>
> === modified file 'src/economy/supply_list.cc'
> --- src/economy/supply_list.cc 2014-07-25 16:37:06 +0000
> +++ src/economy/supply_list.cc 2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>
> #include "economy/supply_list.h"
>
> -#include "base/deprecated.h"
> #include "base/wexception.h"
> #include "economy/request.h"
> #include "economy/supply.h"
>
> === modified file 'src/economy/test/CMakeLists.txt'
> --- src/economy/test/CMakeLists.txt 2014-10-28 21:14:24 +0000
> +++ src/economy/test/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -4,7 +4,6 @@
> test_road.cc
> test_routing.cc
> DEPENDS
> - base_deprecated
> economy
> io_filesystem
> logic
>
> === modified file 'src/economy/test/test_routing.cc'
> --- src/economy/test/test_routing.cc 2014-10-28 21:14:24 +0000
> +++ src/economy/test/test_routing.cc 2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
> #include <boost/bind.hpp>
> #include <boost/test/unit_test.hpp>
>
> -#include "base/deprecated.h"
> #include "economy/flag.h"
> #include "economy/iroute.h"
> #include "economy/itransport_cost_calculator.h"
>
> === modified file 'src/economy/ware_instance.cc'
> --- src/economy/ware_instance.cc 2014-09-20 09:37:47 +0000
> +++ src/economy/ware_instance.cc 2014-11-29 08:14:12 +0000
> @@ -560,8 +560,8 @@
> m_location = fr.unsigned_32();
> m_transfer_nextstep = fr.unsigned_32();
> if (fr.unsigned_8()) {
> - ware.m_transfer =
> - new Transfer(ref_cast<Game, EditorGameBase>(egbase()), ware);
> + upcast(Game, game, &egbase());
> + ware.m_transfer = new Transfer(*game, ware);
> ware.m_transfer->read(fr, m_transfer);
> }
> }
>
> === modified file 'src/economy/wares_queue.cc'
> --- src/economy/wares_queue.cc 2014-09-20 09:37:47 +0000
> +++ src/economy/wares_queue.cc 2014-11-29 08:14:12 +0000
> @@ -130,8 +130,8 @@
> #endif
> PlayerImmovable & target)
> {
> - WaresQueue & wq =
> - ref_cast<Building, PlayerImmovable>(target).waresqueue(ware);
> + upcast(Building, building, &target);
> + WaresQueue & wq = building->waresqueue(ware);
>
> assert(!w); // WaresQueue can't hold workers
> assert(wq.m_filled < wq.m_max_size);
>
> === modified file 'src/editor/editorinteractive.cc'
> --- src/editor/editorinteractive.cc 2014-11-23 14:34:38 +0000
> +++ src/editor/editorinteractive.cc 2014-11-29 08:14:12 +0000
> @@ -336,12 +336,15 @@
> }
>
> void EditorInteractive::set_sel_radius_and_update_menu(uint32_t const val) {
> - if (tools.current().has_size_one())
> + if (tools.current().has_size_one()) {
> return;
> - if (UI::UniqueWindow * const w = m_toolsizemenu.window)
> - ref_cast<EditorToolsizeMenu, UI::UniqueWindow>(*w).update(val);
> - else
> + }
> + if (UI::UniqueWindow * const w = m_toolsizemenu.window) {
> + upcast(EditorToolsizeMenu, tool_size_menu, w);
> + tool_size_menu->update(val);
> + } else {
> set_sel_radius(val);
> + }
> }
>
>
>
> === modified file 'src/editor/ui_menus/editor_main_menu.cc'
> --- src/editor/ui_menus/editor_main_menu.cc 2014-09-10 14:08:25 +0000
> +++ src/editor/ui_menus/editor_main_menu.cc 2014-11-29 08:14:12 +0000
> @@ -37,7 +37,8 @@
> #define vspacing 15
>
> inline EditorInteractive & EditorMainMenu::eia() {
> - return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> + upcast(EditorInteractive, result, get_parent());
> + return *result;
> }
>
> /**
>
> === modified file 'src/editor/ui_menus/editor_main_menu_load_map.cc'
> --- src/editor/ui_menus/editor_main_menu_load_map.cc 2014-10-28 14:57:52 +0000
> +++ src/editor/ui_menus/editor_main_menu_load_map.cc 2014-11-29 08:14:12 +0000
> @@ -146,7 +146,8 @@
> m_mapfiles.clear();
> fill_list();
> } else {
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent()).load(filename);
> + upcast(EditorInteractive, eia, get_parent());
> + eia->load(filename);
> die();
> }
> }
>
> === modified file 'src/editor/ui_menus/editor_main_menu_map_options.cc'
> --- src/editor/ui_menus/editor_main_menu_map_options.cc 2014-10-28 08:16:53 +0000
> +++ src/editor/ui_menus/editor_main_menu_map_options.cc 2014-11-29 08:14:12 +0000
> @@ -36,7 +36,8 @@
>
>
> inline EditorInteractive & MainMenuMapOptions::eia() {
> - return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> + upcast(EditorInteractive, result, get_parent());
> + return *result;
> }
>
>
>
> === modified file 'src/editor/ui_menus/editor_main_menu_new_map.cc'
> --- src/editor/ui_menus/editor_main_menu_new_map.cc 2014-11-13 08:25:45 +0000
> +++ src/editor/ui_menus/editor_main_menu_new_map.cc 2014-11-29 08:14:12 +0000
> @@ -133,9 +133,8 @@
> }
>
> void MainMenuNewMap::clicked_create_map() {
> - EditorInteractive & eia =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> - Widelands::EditorGameBase & egbase = eia.egbase();
> + upcast(EditorInteractive, eia, get_parent());
> + Widelands::EditorGameBase & egbase = eia->egbase();
> Widelands::Map & map = egbase.map();
> UI::ProgressWindow loader;
>
> @@ -152,7 +151,7 @@
>
> map.recalc_whole_map(egbase.world());
>
> - eia.set_need_save(true);
> + eia->set_need_save(true);
>
> die();
> }
>
> === modified file 'src/editor/ui_menus/editor_main_menu_random_map.cc'
> --- src/editor/ui_menus/editor_main_menu_random_map.cc 2014-11-13 08:25:45 +0000
> +++ src/editor/ui_menus/editor_main_menu_random_map.cc 2014-11-29 08:14:12 +0000
> @@ -483,9 +483,8 @@
> }
>
> void MainMenuNewRandomMap::clicked_create_map() {
> - EditorInteractive & eia =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> - Widelands::EditorGameBase & egbase = eia.egbase();
> + upcast(EditorInteractive, eia, get_parent());
> + Widelands::EditorGameBase & egbase = eia->egbase();
> Widelands::Map & map = egbase.map();
> UI::ProgressWindow loader;
>
> @@ -518,8 +517,8 @@
>
> map.recalc_whole_map(egbase.world());
>
> - eia.set_need_save(true);
> - eia.register_overlays();
> + eia->set_need_save(true);
> + eia->register_overlays();
>
> die();
> }
>
> === modified file 'src/editor/ui_menus/editor_main_menu_save_map.cc'
> --- src/editor/ui_menus/editor_main_menu_save_map.cc 2014-10-28 14:57:52 +0000
> +++ src/editor/ui_menus/editor_main_menu_save_map.cc 2014-11-29 08:14:12 +0000
> @@ -46,7 +46,8 @@
> #include "ui_basic/textarea.h"
>
> inline EditorInteractive & MainMenuSaveMap::eia() {
> - return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> + upcast(EditorInteractive, result, get_parent());
> + return *result;
> }
>
>
>
> === modified file 'src/editor/ui_menus/editor_player_menu.cc'
> --- src/editor/ui_menus/editor_player_menu.cc 2014-11-22 10:18:20 +0000
> +++ src/editor/ui_menus/editor_player_menu.cc 2014-11-29 08:14:12 +0000
> @@ -38,6 +38,11 @@
>
> #define UNDEFINED_TRIBE_NAME "<undefined>"
>
> +inline EditorInteractive & EditorPlayerMenu::eia() {
> + upcast(EditorInteractive, result, get_parent());
> + return *result;
> +}
> +
> EditorPlayerMenu::EditorPlayerMenu
> (EditorInteractive & parent, UI::UniqueWindow::Registry & registry)
> :
> @@ -108,9 +113,7 @@
> if (is_minimal())
> return;
>
> - Widelands::Map & map =
> - ref_cast<EditorInteractive const, UI::Panel const>(*get_parent())
> - .egbase().map();
> + Widelands::Map & map = eia().egbase().map();
> Widelands::PlayerNumber const nr_players = map.get_nrplayers();
> {
> assert(nr_players <= 99); // 2 decimal digits
> @@ -194,9 +197,7 @@
> }
>
> void EditorPlayerMenu::clicked_add_player() {
> - EditorInteractive & menu =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> - Widelands::Map & map = menu.egbase().map();
> + Widelands::Map & map = eia().egbase().map();
> Widelands::PlayerNumber const nr_players = map.get_nrplayers() + 1;
> assert(nr_players <= MAX_PLAYERS);
> map.set_nrplayers(nr_players);
> @@ -211,7 +212,7 @@
> map.set_scenario_player_name(nr_players, name);
> }
> map.set_scenario_player_tribe(nr_players, m_tribes[0]);
> - menu.set_need_save(true);
> + eia().set_need_save(true);
> m_add_player .set_enabled(nr_players < MAX_PLAYERS);
> m_remove_last_player.set_enabled(true);
> update();
> @@ -219,14 +220,12 @@
>
>
> void EditorPlayerMenu::clicked_remove_last_player() {
> - EditorInteractive & menu =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> - Widelands::Map & map = menu.egbase().map();
> + Widelands::Map & map = eia().egbase().map();
> Widelands::PlayerNumber const old_nr_players = map.get_nrplayers();
> Widelands::PlayerNumber const nr_players = old_nr_players - 1;
> assert(1 <= nr_players);
>
> - if (!menu.is_player_tribe_referenced(old_nr_players)) {
> + if (!eia().is_player_tribe_referenced(old_nr_players)) {
> if (const Widelands::Coords sp = map.get_starting_pos(old_nr_players)) {
> // Remove starting position marker.
> char picsname[] = "pics/editor_player_00_starting_pos.png";
> @@ -306,9 +305,8 @@
> * Player Tribe Button clicked
> */
> void EditorPlayerMenu::player_tribe_clicked(uint8_t n) {
> - EditorInteractive & menu =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> - if (!menu.is_player_tribe_referenced(n + 1)) {
> + EditorInteractive& menu = eia();
> + if (!menu.is_player_tribe_referenced(n + 1)) {
> std::string t = m_plr_set_tribes_buts[n]->get_title();
> if (!Widelands::TribeDescr::exists_tribe(t))
> throw wexception
> @@ -338,8 +336,7 @@
> * Set Current Start Position button selected
> */
> void EditorPlayerMenu::set_starting_pos_clicked(uint8_t n) {
> - EditorInteractive & menu =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> + EditorInteractive& menu = eia();
> // jump to the current node
> Widelands::Map & map = menu.egbase().map();
> if (Widelands::Coords const sp = map.get_starting_pos(n))
> @@ -366,8 +363,7 @@
> void EditorPlayerMenu::name_changed(int32_t m) {
> // Player name has been changed.
> std::string text = m_plr_names[m]->text();
> - EditorInteractive & menu =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> + EditorInteractive& menu = eia();
> Widelands::Map & map = menu.egbase().map();
> if (text == "") {
> text = map.get_scenario_player_name(m + 1);
>
> === modified file 'src/editor/ui_menus/editor_player_menu.h'
> --- src/editor/ui_menus/editor_player_menu.h 2014-09-10 14:08:25 +0000
> +++ src/editor/ui_menus/editor_player_menu.h 2014-11-29 08:14:12 +0000
> @@ -44,6 +44,7 @@
> virtual ~EditorPlayerMenu() {}
>
> private:
> + EditorInteractive & eia();
> UI::UniqueWindow::Registry m_allow_buildings_menu;
> UI::Textarea * m_nr_of_players_ta;
> UI::EditBox * m_plr_names[MAX_PLAYERS];
>
> === modified file 'src/editor/ui_menus/editor_tool_change_resources_options_menu.cc'
> --- src/editor/ui_menus/editor_tool_change_resources_options_menu.cc 2014-09-30 05:41:55 +0000
> +++ src/editor/ui_menus/editor_tool_change_resources_options_menu.cc 2014-11-29 08:14:12 +0000
> @@ -37,6 +37,12 @@
> const static int BUTTON_WIDTH = 20;
> const static int BUTTON_HEIGHT = 20;
>
> +inline EditorInteractive & EditorToolChangeResourcesOptionsMenu::eia() {
> + upcast(EditorInteractive, result, get_parent());
> + return *result;
> +}
> +
> +
> EditorToolChangeResourcesOptionsMenu::
> EditorToolChangeResourcesOptionsMenu
> (EditorInteractive & parent,
> @@ -213,7 +219,7 @@
> m_increase_tool.set_cur_res(n);
> m_increase_tool.decrease_tool().set_cur_res(n);
>
> - Widelands::EditorGameBase& egbase = ref_cast<EditorInteractive, UI::Panel>(*get_parent()).egbase();
> + Widelands::EditorGameBase& egbase = eia().egbase();
> Widelands::Map & map = egbase.map();
> map.overlay_manager().register_overlay_callback_function(
> boost::bind(&editor_change_resource_tool_callback, _1, boost::ref(map), boost::ref(egbase.world()), n));
> @@ -234,8 +240,7 @@
> static_cast<unsigned int>(m_increase_tool.set_tool().get_set_to())));
>
> m_cur_selection.set_text
> - (ref_cast<EditorInteractive, UI::Panel>(*get_parent()).egbase()
> - .world().get_resource(m_increase_tool.set_tool().get_cur_res())->descname());
> + (eia().egbase().world().get_resource(m_increase_tool.set_tool().get_cur_res())->descname());
> m_cur_selection.set_pos
> (Point
> ((get_inner_w() - m_cur_selection.get_w()) / 2, get_inner_h() - 20));
>
> === modified file 'src/editor/ui_menus/editor_tool_change_resources_options_menu.h'
> --- src/editor/ui_menus/editor_tool_change_resources_options_menu.h 2014-09-10 14:08:25 +0000
> +++ src/editor/ui_menus/editor_tool_change_resources_options_menu.h 2014-11-29 08:14:12 +0000
> @@ -37,6 +37,7 @@
> UI::UniqueWindow::Registry &);
>
> private:
> + EditorInteractive & eia();
> void selected();
> enum Button {
> Change_By_Increase, Change_By_Decrease,
>
> === modified file 'src/editor/ui_menus/editor_tool_menu.cc'
> --- src/editor/ui_menus/editor_tool_menu.cc 2014-09-20 09:37:47 +0000
> +++ src/editor/ui_menus/editor_tool_menu.cc 2014-11-29 08:14:12 +0000
> @@ -98,38 +98,37 @@
> void EditorToolMenu::changed_to() {
> const int32_t n = m_radioselect.get_state();
>
> - EditorInteractive & parent =
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> + upcast(EditorInteractive, eia, get_parent());
>
> EditorTool * current_tool_pointer = nullptr;
> UI::UniqueWindow::Registry * current_registry_pointer = nullptr;
> switch (n) {
> case 0:
> - current_tool_pointer = &parent.tools.increase_height;
> - current_registry_pointer = &parent.m_heightmenu;
> + current_tool_pointer = &eia->tools.increase_height;
> + current_registry_pointer = &eia->m_heightmenu;
> break;
> case 1:
> - current_tool_pointer = &parent.tools.noise_height;
> - current_registry_pointer = &parent.m_noise_heightmenu;
> + current_tool_pointer = &eia->tools.noise_height;
> + current_registry_pointer = &eia->m_noise_heightmenu;
> break;
> case 2:
> - current_tool_pointer = &parent.tools.set_terrain;
> - current_registry_pointer = &parent.m_terrainmenu;
> + current_tool_pointer = &eia->tools.set_terrain;
> + current_registry_pointer = &eia->m_terrainmenu;
> break;
> case 3:
> - current_tool_pointer = &parent.tools.place_immovable;
> - current_registry_pointer = &parent.m_immovablemenu;
> + current_tool_pointer = &eia->tools.place_immovable;
> + current_registry_pointer = &eia->m_immovablemenu;
> break;
> case 4:
> - current_tool_pointer = &parent.tools.place_bob;
> - current_registry_pointer = &parent.m_bobmenu;
> + current_tool_pointer = &eia->tools.place_bob;
> + current_registry_pointer = &eia->m_bobmenu;
> break;
> case 5:
> - current_tool_pointer = &parent.tools.increase_resources;
> - current_registry_pointer = &parent.m_resourcesmenu;
> + current_tool_pointer = &eia->tools.increase_resources;
> + current_registry_pointer = &eia->m_resourcesmenu;
> break;
> case 6:
> - current_tool_pointer = &parent.tools.set_port_space;
> + current_tool_pointer = &eia->tools.set_port_space;
> current_registry_pointer = nullptr; // no need for a window
> break;
> default:
> @@ -137,13 +136,13 @@
> break;
> }
>
> - parent.select_tool(*current_tool_pointer, EditorTool::First);
> - if (current_tool_pointer == &parent.tools.set_port_space) {
> + eia->select_tool(*current_tool_pointer, EditorTool::First);
> + if (current_tool_pointer == &eia->tools.set_port_space) {
> // Set correct overlay
> - Widelands::Map & map = parent.egbase().map();
> + Widelands::Map & map = eia->egbase().map();
> map.overlay_manager().register_overlay_callback_function(
> boost::bind(&editor_Tool_set_port_space_callback, _1, boost::ref(map)));
> - map.recalc_whole_map(parent.egbase().world());
> + map.recalc_whole_map(eia->egbase().world());
> update();
> }
>
> @@ -158,38 +157,38 @@
> switch (n) { // create window
> case 0:
> new EditorToolChangeHeightOptionsMenu
> - (parent,
> - parent.tools.increase_height,
> + (*eia,
> + eia->tools.increase_height,
> *current_registry_pointer);
> break;
> case 1:
> new EditorToolNoiseHeightOptionsMenu
> - (parent,
> - parent.tools.noise_height,
> + (*eia,
> + eia->tools.noise_height,
> *current_registry_pointer);
> break;
> case 2:
> new EditorToolSetTerrainOptionsMenu
> - (parent,
> - parent.tools.set_terrain,
> + (*eia,
> + eia->tools.set_terrain,
> *current_registry_pointer);
> break;
> case 3:
> new EditorToolPlaceImmovableOptionsMenu
> - (parent,
> - parent.tools.place_immovable,
> + (*eia,
> + eia->tools.place_immovable,
> *current_registry_pointer);
> break;
> case 4:
> new EditorToolPlaceBobOptionsMenu
> - (parent,
> - parent.tools.place_bob,
> + (*eia,
> + eia->tools.place_bob,
> *current_registry_pointer);
> break;
> case 5:
> new EditorToolChangeResourcesOptionsMenu
> - (parent,
> - parent.tools.increase_resources,
> + (*eia,
> + eia->tools.increase_resources,
> *current_registry_pointer);
> break;
> default:
>
> === modified file 'src/editor/ui_menus/editor_tool_options_menu.cc'
> --- src/editor/ui_menus/editor_tool_options_menu.cc 2014-09-10 14:08:25 +0000
> +++ src/editor/ui_menus/editor_tool_options_menu.cc 2014-11-29 08:14:12 +0000
> @@ -35,6 +35,6 @@
>
>
> void EditorToolOptionsMenu::select_correct_tool() {
> - ref_cast<EditorInteractive, UI::Panel>(*get_parent())
> - .select_tool(*m_current_pointer, EditorTool::First);
> + upcast(EditorInteractive, eia, get_parent());
> + eia->select_tool(*m_current_pointer, EditorTool::First);
> }
>
> === modified file 'src/editor/ui_menus/editor_toolsize_menu.cc'
> --- src/editor/ui_menus/editor_toolsize_menu.cc 2014-09-18 18:52:34 +0000
> +++ src/editor/ui_menus/editor_toolsize_menu.cc 2014-11-29 08:14:12 +0000
> @@ -29,10 +29,10 @@
> #include "graphic/graphic.h"
>
> inline EditorInteractive & EditorToolsizeMenu::eia() {
> - return ref_cast<EditorInteractive, UI::Panel>(*get_parent());
> + upcast(EditorInteractive, result, get_parent());
> + return *result;
> }
>
> -
> /**
> * Create all the buttons etc...
> */
>
> === modified file 'src/graphic/CMakeLists.txt'
> --- src/graphic/CMakeLists.txt 2014-11-24 07:25:21 +0000
> +++ src/graphic/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -128,7 +128,6 @@
> USES_SDL2_IMAGE
> USES_SDL2_TTF
> DEPENDS
> - base_deprecated
> base_exceptions
> base_geometry
> base_i18n
>
> === modified file 'src/graphic/animation.cc'
> --- src/graphic/animation.cc 2014-11-24 07:10:03 +0000
> +++ src/graphic/animation.cc 2014-11-29 08:14:12 +0000
> @@ -30,7 +30,6 @@
> #include <boost/format.hpp>
> #include <boost/lexical_cast.hpp>
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "base/log.h"
> #include "base/macros.h"
>
> === modified file 'src/graphic/graphic.cc'
> --- src/graphic/graphic.cc 2014-11-24 07:10:03 +0000
> +++ src/graphic/graphic.cc 2014-11-29 08:14:12 +0000
> @@ -25,7 +25,6 @@
>
> #include <SDL_image.h>
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "base/log.h"
> #include "base/macros.h"
>
> === modified file 'src/graphic/terrain_texture.cc'
> --- src/graphic/terrain_texture.cc 2014-11-24 07:10:03 +0000
> +++ src/graphic/terrain_texture.cc 2014-11-29 08:14:12 +0000
> @@ -21,7 +21,6 @@
>
> #include <SDL_image.h>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "base/wexception.h"
> #include "graphic/image_io.h"
>
> === modified file 'src/graphic/text_parser.cc'
> --- src/graphic/text_parser.cc 2014-09-10 14:48:40 +0000
> +++ src/graphic/text_parser.cc 2014-11-29 08:14:12 +0000
> @@ -24,7 +24,6 @@
> #include <string>
> #include <vector>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "helper.h"
>
>
> === modified file 'src/io/CMakeLists.txt'
> --- src/io/CMakeLists.txt 2014-10-13 15:04:50 +0000
> +++ src/io/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -37,7 +37,6 @@
> filesystem/zip_filesystem.cc
> filesystem/zip_filesystem.h
> DEPENDS
> - base_deprecated
> base_exceptions
> base_log
> base_macros
>
> === modified file 'src/io/filesystem/layered_filesystem.cc'
> --- src/io/filesystem/layered_filesystem.cc 2014-09-29 13:30:46 +0000
> +++ src/io/filesystem/layered_filesystem.cc 2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
> #include <cstdio>
> #include <memory>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "base/wexception.h"
> #include "io/fileread.h"
>
> === modified file 'src/logic/CMakeLists.txt'
> --- src/logic/CMakeLists.txt 2014-10-13 15:04:50 +0000
> +++ src/logic/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -215,7 +215,6 @@
> USES_SDL2
> DEPENDS
> ai
> - base_deprecated
> base_exceptions
> base_geometry
> base_i18n
>
> === modified file 'src/logic/battle.cc'
> --- src/logic/battle.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/battle.cc 2014-11-29 08:14:12 +0000
> @@ -83,23 +83,29 @@
>
> m_creationtime = egbase.get_gametime();
>
> - if (Battle* battle = m_first ->get_battle())
> - battle->cancel(ref_cast<Game, EditorGameBase>(egbase), *m_first);
> - m_first->set_battle(ref_cast<Game, EditorGameBase>(egbase), this);
> - if (Battle* battle = m_second->get_battle())
> - battle->cancel(ref_cast<Game, EditorGameBase>(egbase), *m_second);
> - m_second->set_battle(ref_cast<Game, EditorGameBase>(egbase), this);
> + upcast(Game, game, &egbase);
> +
> + if (Battle* battle = m_first ->get_battle()) {
> + battle->cancel(*game, *m_first);
> + }
> + m_first->set_battle(*game, this);
> + if (Battle* battle = m_second->get_battle()) {
> + battle->cancel(*game, *m_second);
> + }
> + m_second->set_battle(*game, this);
> }
>
>
> void Battle::cleanup (EditorGameBase & egbase)
> {
> if (m_first) {
> - m_first ->set_battle(ref_cast<Game, EditorGameBase>(egbase), nullptr);
> + upcast(Game, game, &egbase);
> + m_first ->set_battle(*game, nullptr);
> m_first = nullptr;
> }
> if (m_second) {
> - m_second->set_battle(ref_cast<Game, EditorGameBase>(egbase), nullptr);
> + upcast(Game, game, &egbase);
> + m_second->set_battle(*game, nullptr);
> m_second = nullptr;
> }
>
>
> === modified file 'src/logic/bob.cc'
> --- src/logic/bob.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/bob.cc 2014-11-29 08:14:12 +0000
> @@ -149,8 +149,10 @@
> */
> void Bob::cleanup(EditorGameBase & egbase)
> {
> - while (!m_stack.empty()) // bobs in the editor do not have tasks
> - do_pop_task(ref_cast<Game, EditorGameBase>(egbase));
> + while (!m_stack.empty()) { // bobs in the editor do not have tasks
> + upcast(Game, game, &egbase);
> + do_pop_task(*game);
> + }
>
> set_owner(nullptr); // implicitly remove ourselves from owner's map
>
>
> === modified file 'src/logic/building.cc'
> --- src/logic/building.cc 2014-11-24 07:25:21 +0000
> +++ src/logic/building.cc 2014-11-29 08:14:12 +0000
> @@ -244,11 +244,11 @@
> BuildingDescr const * const descr =
> m_tribe.get_building_descr
> (m_tribe.safe_building_index("constructionsite"));
> - ConstructionSite & csite =
> - ref_cast<ConstructionSite, MapObject>(descr->create_object());
> - csite.set_building(*this);
> -
> - return csite;
> +
> + upcast(ConstructionSite, csite, &descr->create_object());
> + csite->set_building(*this);
> +
> + return *csite;
> }
>
>
> @@ -724,25 +724,24 @@
> void Building::draw_help
> (const EditorGameBase& game, RenderTarget& dst, const FCoords&, const Point& pos)
> {
> - const InteractiveGameBase & igbase =
> - ref_cast<InteractiveGameBase const, InteractiveBase const>
> - (*game.get_ibase());
> - uint32_t const dpyflags = igbase.get_display_flags();
> + upcast(InteractiveGameBase const, igbase, game.get_ibase());
> +
> + uint32_t const dpyflags = igbase->get_display_flags();
>
> if (dpyflags & InteractiveBase::dfShowCensus) {
> - const std::string info = info_string(igbase.building_census_format());
> + const std::string info = info_string(igbase->building_census_format());
> if (!info.empty()) {
> dst.blit(pos - Point(0, 48), UI::g_fh1->render(info), BlendMode::UseAlpha, UI::Align_Center);
> }
> }
>
> if (dpyflags & InteractiveBase::dfShowStatistics) {
> - if (upcast(InteractivePlayer const, iplayer, &igbase))
> + if (upcast(InteractivePlayer const, iplayer, igbase))
> if
> (!iplayer->player().see_all() &&
> iplayer->player().is_hostile(*get_owner()))
> return;
> - const std::string info = info_string(igbase.building_statistics_format());
> + const std::string info = info_string(igbase->building_statistics_format());
> if (!info.empty()) {
> dst.blit(pos - Point(0, 35), UI::g_fh1->render(info), BlendMode::UseAlpha, UI::Align_Center);
> }
>
> === modified file 'src/logic/carrier.cc'
> --- src/logic/carrier.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/carrier.cc 2014-11-29 08:14:12 +0000
> @@ -84,8 +84,6 @@
> return pop_task(game);
> }
>
> - Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> -
> // Check for pending wares
> if (m_promised_pickup_to == NOONE)
> find_pending_ware(game);
> @@ -103,12 +101,13 @@
> }
> }
>
> + upcast(Road, road, get_location(game));
> +
> // Move into idle position if necessary
> - if
> - (start_task_movepath
> + if (start_task_movepath
> (game,
> - road.get_path(),
> - road.get_idle_index(),
> + road->get_path(),
> + road->get_idle_index(),
> descr().get_right_walk_anims(does_carry_ware())))
> return;
>
> @@ -127,9 +126,9 @@
> void Carrier::road_pop(Game & game, State & /* state */)
> {
> if (m_promised_pickup_to != NOONE && get_location(game)) {
> - Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> - Flag & flag = road.get_flag(static_cast<Road::FlagId>(m_promised_pickup_to));
> - Flag & otherflag = road.get_flag(static_cast<Road::FlagId>(m_promised_pickup_to ^ 1));
> + upcast(Road, road, get_location(game));
> + Flag & flag = road->get_flag(static_cast<Road::FlagId>(m_promised_pickup_to));
> + Flag & otherflag = road->get_flag(static_cast<Road::FlagId>(m_promised_pickup_to ^ 1));
>
> flag.cancel_pickup(game, otherflag);
> }
> @@ -176,8 +175,6 @@
> return pop_task(game);
> }
>
> - Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> -
> if (state.ivar1 == -1)
> // If we're "in" the target building, special code applies
> deliver_to_building(game, state);
> @@ -187,9 +184,10 @@
> pickup_from_flag(game, state);
>
> else {
> + upcast(Road, road, get_location(game));
> // If the ware should go to the building attached to our flag, walk
> // directly into said building
> - Flag & flag = road.get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
> + Flag & flag = road->get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
>
> WareInstance & ware = *get_carried_ware(game);
> assert(ware.get_location(game) == this);
> @@ -240,10 +238,11 @@
> molog
> ("[Carrier]: Building switch from under us, return to road.\n");
>
> + upcast(Road, road, get_location(game));
> state.ivar1 =
> &building->base_flag()
> ==
> - &ref_cast<Road, PlayerImmovable>(*get_location(game)).get_flag
> + &road->get_flag
> (static_cast<Road::FlagId>(0));
> break;
> }
> @@ -277,9 +276,9 @@
>
> m_promised_pickup_to = NOONE;
>
> - Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> - Flag & flag = road.get_flag(static_cast<Road::FlagId>(ivar1));
> - Flag & otherflag = road.get_flag(static_cast<Road::FlagId>(ivar1 ^ 1));
> + upcast(Road, road, get_location(game));
> + Flag & flag = road->get_flag(static_cast<Road::FlagId>(ivar1));
> + Flag & otherflag = road->get_flag(static_cast<Road::FlagId>(ivar1 ^ 1));
>
> // Are there wares to move between our flags?
> if (WareInstance * const ware = flag.fetch_pending_ware(game, otherflag))
> @@ -305,15 +304,15 @@
> void Carrier::drop_ware(Game & game, State & state)
> {
> WareInstance * other = nullptr;
> - Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> - Flag & flag = road.get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
> + upcast(Road, road, get_location(game));
> + Flag & flag = road->get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
>
> if (m_promised_pickup_to == (state.ivar1 ^ 1)) {
> // If there's an ware we acked, we can drop ours even if the flag is
> // flooded
> other =
> flag.fetch_pending_ware
> - (game, road.get_flag(static_cast<Road::FlagId>(state.ivar1)));
> + (game, road->get_flag(static_cast<Road::FlagId>(state.ivar1)));
>
> if (!other && !flag.has_capacity()) {
> molog
> @@ -376,11 +375,11 @@
> bool Carrier::swap_or_wait(Game & game, State & state)
> {
> // Road that employs us
> - Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> + upcast(Road, road, get_location(game));
> // Flag we are delivering to
> - Flag & flag = road.get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
> + Flag & flag = road->get_flag(static_cast<Road::FlagId>(state.ivar1 ^ 1));
> // The other flag of our road
> - Flag & otherflag = road.get_flag(static_cast<Road::FlagId>(state.ivar1));
> + Flag & otherflag = road->get_flag(static_cast<Road::FlagId>(state.ivar1));
>
>
> if (m_promised_pickup_to == (state.ivar1 ^ 1)) {
> @@ -456,32 +455,33 @@
> */
> void Carrier::find_pending_ware(Game & game)
> {
> - Road & road = ref_cast<Road, PlayerImmovable>(*get_location(game));
> + upcast(Road, road, get_location(game));
> uint32_t havewarebits = 0;
>
> assert(m_promised_pickup_to == NOONE);
>
> - if
> - (road.get_flag(Road::FlagStart).has_pending_ware
> - (game, road.get_flag(Road::FlagEnd)))
> + if (road->get_flag(Road::FlagStart).has_pending_ware
> + (game, road->get_flag(Road::FlagEnd))) {
> havewarebits |= 1;
> + }
>
> - if
> - (road.get_flag(Road::FlagEnd).has_pending_ware
> - (game, road.get_flag(Road::FlagStart)))
> + if (road->get_flag(Road::FlagEnd).has_pending_ware
> + (game, road->get_flag(Road::FlagStart))) {
> havewarebits |= 2;
> + }
>
> // If both flags have an ware, we pick the one closer to us.
> - if (havewarebits == 3)
> + if (havewarebits == 3) {
> havewarebits = 1 << find_closest_flag(game);
> + }
>
> // Ack our decision
> if (havewarebits == 1) {
> m_promised_pickup_to = START_FLAG;
> if
> (!
> - road.get_flag(Road::FlagStart).ack_pickup
> - (game, road.get_flag(Road::FlagEnd)))
> + road->get_flag(Road::FlagStart).ack_pickup
> + (game, road->get_flag(Road::FlagEnd)))
> throw wexception
> ("Carrier::find_pending_ware: start flag is messed up");
>
> @@ -489,8 +489,8 @@
> m_promised_pickup_to = END_FLAG;
> if
> (!
> - road.get_flag(Road::FlagEnd).ack_pickup
> - (game, road.get_flag(Road::FlagStart)))
> + road->get_flag(Road::FlagEnd).ack_pickup
> + (game, road->get_flag(Road::FlagStart)))
> throw wexception("Carrier::find_pending_ware: end flag is messed up");
> }
> }
> @@ -502,8 +502,8 @@
> int32_t Carrier::find_closest_flag(Game & game)
> {
> Map & map = game.map();
> - CoordPath startpath
> - (map, ref_cast<Road, PlayerImmovable>(*get_location(game)).get_path());
> + upcast(Road, road, get_location(game));
> + CoordPath startpath(map, road->get_path());
>
> CoordPath endpath;
> int32_t startcost, endcost;
> @@ -550,8 +550,8 @@
> bool Carrier::start_task_walktoflag
> (Game & game, int32_t const flag, bool const offset)
> {
> - const Path & path =
> - ref_cast<Road, PlayerImmovable>(*get_location(game)).get_path();
> + upcast(Road, road, get_location(game));
> + const Path & path = road->get_path();
> int32_t idx;
>
> if (!flag) {
>
> === modified file 'src/logic/constructionsite.cc'
> --- src/logic/constructionsite.cc 2014-09-10 17:52:49 +0000
> +++ src/logic/constructionsite.cc 2014-11-29 08:14:12 +0000
> @@ -172,16 +172,16 @@
> Building & b =
> m_building->create(egbase, owner(), m_position, false, false, m_old_buildings);
> if (Worker * const builder = m_builder.get(egbase)) {
> - builder->reset_tasks(ref_cast<Game, EditorGameBase>(egbase));
> + upcast(Game, game, &egbase);
> + builder->reset_tasks(*game);
> builder->set_location(&b);
> }
> // Open the new building window if needed
> if (m_optionswindow) {
> Point window_position = m_optionswindow->get_pos();
> hide_options();
> - InteractiveGameBase & igbase =
> - ref_cast<InteractiveGameBase, InteractiveBase>(*egbase.get_ibase());
> - b.show_options(igbase, false, window_position);
> + upcast(InteractiveGameBase, igbase, egbase.get_ibase());
> + b.show_options(*igbase, false, window_position);
> }
> }
> }
>
> === modified file 'src/logic/critter.cc'
> --- src/logic/critter.cc 2014-10-27 10:14:10 +0000
> +++ src/logic/critter.cc 2014-11-29 08:14:12 +0000
> @@ -301,14 +301,12 @@
> }
>
> for (;;) {
> - const CritterProgram & program =
> - ref_cast<CritterProgram const, BobProgramBase const>
> - (*state.program);
> + upcast(CritterProgram const, program, state.program);
>
> - if (state.ivar1 >= program.get_size())
> + if (state.ivar1 >= program->get_size())
> return pop_task(game);
>
> - const CritterAction & action = program[state.ivar1];
> + const CritterAction & action = (*program)[state.ivar1];
>
> if ((this->*(action.function))(game, state, action))
> return;
>
> === modified file 'src/logic/findnode.cc'
> --- src/logic/findnode.cc 2014-07-24 16:26:55 +0000
> +++ src/logic/findnode.cc 2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>
> #include "logic/findnode.h"
>
> -#include "base/deprecated.h"
> #include "base/wexception.h"
> #include "logic/field.h"
> #include "logic/immovable.h"
>
> === modified file 'src/logic/immovable.cc'
> --- src/logic/immovable.cc 2014-11-24 07:25:21 +0000
> +++ src/logic/immovable.cc 2014-11-29 08:14:12 +0000
> @@ -25,7 +25,6 @@
> #include <boost/algorithm/string.hpp>
> #include <boost/format.hpp>
>
> -#include "base/deprecated.h"
> #include "base/macros.h"
> #include "base/wexception.h"
> #include "config.h"
> @@ -619,7 +618,7 @@
> {
> BaseImmovable::Loader::load(fr);
>
> - Immovable & imm = ref_cast<Immovable, MapObject>(*get_object());
> + upcast(Immovable, imm, get_object());
>
> if (version >= 5) {
> PlayerNumber pn = fr.unsigned_8();
> @@ -627,29 +626,29 @@
> Player * plr = egbase().get_player(pn);
> if (!plr)
> throw GameDataError("Immovable::load: player %u does not exist", pn);
> - imm.set_owner(plr);
> + imm->set_owner(plr);
> }
> }
>
> // Position
> - imm.m_position = read_coords_32(&fr, egbase().map().extent());
> - imm.set_position(egbase(), imm.m_position);
> + imm->m_position = read_coords_32(&fr, egbase().map().extent());
> + imm->set_position(egbase(), imm->m_position);
>
> // Animation
> char const * const animname = fr.c_string();
> try {
> - imm.m_anim = imm.descr().get_animation(animname);
> + imm->m_anim = imm->descr().get_animation(animname);
> } catch (const MapObjectDescr::AnimationNonexistent &) {
> - imm.m_anim = imm.descr().main_animation();
> + imm->m_anim = imm->descr().main_animation();
> log
> ("Warning: (%s) Animation \"%s\" not found, using animation %s).\n",
> - imm.descr().name().c_str(), animname, imm.descr().get_animation_name(imm.m_anim).c_str());
> + imm->descr().name().c_str(), animname, imm->descr().get_animation_name(imm->m_anim).c_str());
> }
> - imm.m_animstart = fr.signed_32();
> + imm->m_animstart = fr.signed_32();
> if (version >= 4) {
> - imm.m_anim_construction_total = fr.unsigned_32();
> - if (imm.m_anim_construction_total)
> - imm.m_anim_construction_done = fr.unsigned_32();
> + imm->m_anim_construction_total = fr.unsigned_32();
> + if (imm->m_anim_construction_total)
> + imm->m_anim_construction_done = fr.unsigned_32();
> }
>
> { // program
> @@ -664,14 +663,14 @@
> if (program_name.empty())
> program_name = "program";
> }
> - imm.m_program = imm.descr().get_program(program_name);
> + imm->m_program = imm->descr().get_program(program_name);
> }
> - imm.m_program_ptr = fr.unsigned_32();
> + imm->m_program_ptr = fr.unsigned_32();
>
> - if (!imm.m_program) {
> - imm.m_program_ptr = 0;
> + if (!imm->m_program) {
> + imm->m_program_ptr = 0;
> } else {
> - if (imm.m_program_ptr >= imm.m_program->size()) {
> + if (imm->m_program_ptr >= imm->m_program->size()) {
> // Try to not fail if the program of some immovable has changed
> // significantly.
> // Note that in some cases, the immovable may end up broken despite
> @@ -679,20 +678,20 @@
> log
> ("Warning: Immovable '%s', size of program '%s' seems to have "
> "changed.\n",
> - imm.descr().name().c_str(), imm.m_program->name().c_str());
> - imm.m_program_ptr = 0;
> + imm->descr().name().c_str(), imm->m_program->name().c_str());
> + imm->m_program_ptr = 0;
> }
> }
>
> - imm.m_program_step = fr.signed_32();
> + imm->m_program_step = fr.signed_32();
>
> if (version >= 3)
> - imm.m_reserved_by_worker = fr.unsigned_8();
> + imm->m_reserved_by_worker = fr.unsigned_8();
>
> if (version >= 4) {
> std::string dataname = fr.c_string();
> if (!dataname.empty()) {
> - imm.set_action_data(ImmovableActionData::load(fr, imm, dataname));
> + imm->set_action_data(ImmovableActionData::load(fr, *imm, dataname));
> }
> }
> }
>
> === modified file 'src/logic/instances.cc'
> --- src/logic/instances.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/instances.cc 2014-11-29 08:14:12 +0000
> @@ -24,7 +24,6 @@
> #include <cstring>
> #include <string>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "base/wexception.h"
> #include "io/fileread.h"
>
> === modified file 'src/logic/instances.h'
> --- src/logic/instances.h 2014-09-19 12:54:54 +0000
> +++ src/logic/instances.h 2014-11-29 08:14:12 +0000
> @@ -30,7 +30,6 @@
> #include <boost/unordered_map.hpp>
> #include <boost/signals2.hpp>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "base/macros.h"
> #include "logic/cmd_queue.h"
> @@ -181,9 +180,10 @@
>
> /// If you find a better way to do this that doesn't cost a virtual function
> /// or additional member variable, go ahead
> -#define MO_DESCR(type) \
> -public: const type & descr() const { \
> - return ref_cast<type const, MapObjectDescr const>(*m_descr); \
> +#define MO_DESCR(type) \
> +public: const type & descr() const { \
> + upcast(type const, result, m_descr); \
> + return *result; \
> } \
>
> class MapObject {
> @@ -311,7 +311,8 @@
> MapObjectLoader & mol () {return *m_mol;}
> MapObject * get_object() {return m_object;}
> template<typename T> T & get() {
> - return ref_cast<T, MapObject>(*m_object);
> + upcast(T, result, m_object);
> + return *result;
> }
>
> protected:
>
> === modified file 'src/logic/militarysite.cc'
> --- src/logic/militarysite.cc 2014-09-30 05:41:55 +0000
> +++ src/logic/militarysite.cc 2014-11-29 08:14:12 +0000
> @@ -335,9 +335,9 @@
> // Now I know that the new guy is worthy.
> if (nullptr != kickoutCandidate)
> {
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> - kickoutCandidate->reset_tasks(game);
> - kickoutCandidate->start_task_leavebuilding(game, true);
> + upcast(Game, game, &owner().egbase());
> + kickoutCandidate->reset_tasks(*game);
> + kickoutCandidate->start_task_leavebuilding(*game, true);
> return true;
> }
> }
> @@ -355,10 +355,10 @@
> // Call to drop_least routine has side effects: it tries to drop a soldier. Order is important!
> if (stationed_soldiers().size() < m_capacity || drop_least_suited_soldier(true, &s))
> {
> - Game & game = ref_cast<Game, EditorGameBase>(egbase);
> + upcast(Game, game, &egbase);
> s.set_location(this);
> - s.reset_tasks(game);
> - s.start_task_buildingwork(game);
> + s.reset_tasks(*game);
> + s.start_task_buildingwork(*game);
> return true;
> }
> return false;
> @@ -376,10 +376,9 @@
> Worker * const w,
> PlayerImmovable & target)
> {
> - MilitarySite & msite = ref_cast<MilitarySite, PlayerImmovable>(target);
> - Soldier & s = ref_cast<Soldier, Worker> (*w);
> -
> - msite.incorporate_soldier(game, s);
> + upcast(MilitarySite, msite, &target);
> + upcast(Soldier, s, w);
> + msite->incorporate_soldier(game, *s);
> }
>
>
> @@ -409,11 +408,11 @@
> }
>
> if (m_capacity < present.size()) {
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> + upcast(Game, game, &owner().egbase());
> for (uint32_t i = 0; i < present.size() - m_capacity; ++i) {
> Soldier & soldier = *present[i];
> - soldier.reset_tasks(game);
> - soldier.start_task_leavebuilding(game, true);
> + soldier.reset_tasks(*game);
> + soldier.start_task_leavebuilding(*game, true);
> }
> }
> }
> @@ -716,7 +715,7 @@
>
> void MilitarySite::drop_soldier(Soldier & soldier)
> {
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> + upcast(Game, game, &owner().egbase());
>
> if (!is_present(soldier)) {
> // This can happen when the "drop soldier" player command is delayed
> @@ -729,8 +728,8 @@
> return;
> }
>
> - soldier.reset_tasks(game);
> - soldier.start_task_leavebuilding(game, true);
> + soldier.reset_tasks(*game);
> + soldier.start_task_leavebuilding(*game, true);
>
> update_soldier_request();
> }
> @@ -754,8 +753,8 @@
>
> void MilitarySite::aggressor(Soldier & enemy)
> {
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> - Map & map = game.map();
> + upcast(Game, game, &owner().egbase());
> + Map & map = game->map();
> if
> (enemy.get_owner() == &owner() ||
> enemy.get_battle() ||
> @@ -784,7 +783,7 @@
> sj.enemy = &enemy;
> sj.stayhome = false;
> m_soldierjobs.push_back(sj);
> - temp_soldier->update_task_buildingwork(game);
> + temp_soldier->update_task_buildingwork(*game);
> return;
> }
> }
> @@ -792,12 +791,12 @@
>
> // Inform the player, that we are under attack by adding a new entry to the
> // message queue - a sound will automatically be played.
> - notify_player(game, true);
> + notify_player(*game, true);
> }
>
> bool MilitarySite::attack(Soldier & enemy)
> {
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> + upcast(Game, game, &owner().egbase());
>
> std::vector<Soldier *> present = present_soldiers();
> Soldier * defender = nullptr;
> @@ -832,11 +831,11 @@
> sj.stayhome = true;
> m_soldierjobs.push_back(sj);
>
> - defender->update_task_buildingwork(game);
> + defender->update_task_buildingwork(*game);
>
> // Inform the player, that we are under attack by adding a new entry to
> // the message queue - a sound will automatically be played.
> - notify_player(game);
> + notify_player(*game);
>
> return true;
> } else {
> @@ -844,7 +843,7 @@
> const Coords coords = get_position();
> {
> send_message
> - (game,
> + (*game,
> "site_lost",
> _("Militarysite lost!"),
> descr().m_defeated_enemy_str,
> @@ -855,11 +854,11 @@
> // we still hold the bigger military presence in that area (e.g. if there
> // is a fortress one or two points away from our sentry, the fortress has
> // a higher presence and thus the enemy can just burn down the sentry.
> - if (military_presence_kept(game)) {
> + if (military_presence_kept(*game)) {
> // Okay we still got the higher military presence, so the attacked
> // militarysite will be destroyed.
> set_defeating_player(enemy.owner().player_number());
> - schedule_destroy(game);
> + schedule_destroy(*game);
> return false;
> }
>
> @@ -889,16 +888,16 @@
>
> // Now we destroy the old building before we place the new one.
> set_defeating_player(enemy.owner().player_number());
> - schedule_destroy(game);
> + schedule_destroy(*game);
>
> enemyplayer->force_building(coords, former_buildings);
> - BaseImmovable * const newimm = game.map()[coords].get_immovable();
> + BaseImmovable * const newimm = game->map()[coords].get_immovable();
> upcast(MilitarySite, newsite, newimm);
> - newsite->reinit_after_conqueration(game);
> + newsite->reinit_after_conqueration(*game);
>
> // Of course we should inform the victorious player as well
> newsite->send_message
> - (game,
> + (*game,
> "site_defeated",
> _("Enemy at site defeated!"),
> newsite->descr().m_defeated_you_str,
> @@ -991,8 +990,8 @@
> sj.stayhome = false;
> m_soldierjobs.push_back(sj);
>
> - soldier.update_task_buildingwork
> - (ref_cast<Game, EditorGameBase>(owner().egbase()));
> + upcast(Game, game, &owner().egbase());
> + soldier.update_task_buildingwork(*game);
> }
>
>
>
> === modified file 'src/logic/partially_finished_building.cc'
> --- src/logic/partially_finished_building.cc 2014-09-10 10:18:46 +0000
> +++ src/logic/partially_finished_building.cc 2014-11-29 08:14:12 +0000
> @@ -201,15 +201,15 @@
> {
> assert(w);
>
> - PartiallyFinishedBuilding & b = ref_cast<PartiallyFinishedBuilding, PlayerImmovable>(target);
> + upcast(PartiallyFinishedBuilding, b, &target);
>
> - b.m_builder = w;
> + b->m_builder = w;
>
> delete &rq;
> - b.m_builder_request = nullptr;
> + b->m_builder_request = nullptr;
>
> w->start_task_buildingwork(game);
> - b.set_seeing(true);
> + b->set_seeing(true);
> }
>
>
>
> === modified file 'src/logic/pathfield.cc'
> --- src/logic/pathfield.cc 2014-09-19 12:54:54 +0000
> +++ src/logic/pathfield.cc 2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>
> #include "logic/pathfield.h"
>
> -#include "base/deprecated.h"
> #include "base/wexception.h"
>
> namespace Widelands {
>
> === modified file 'src/logic/player.cc'
> --- src/logic/player.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/player.cc 2014-11-29 08:14:12 +0000
> @@ -201,14 +201,14 @@
> const TribeDescr::Initialization & initialization =
> tribe().initialization(m_initialization_index);
>
> - Game & game = ref_cast<Game, EditorGameBase>(egbase());
> + upcast(Game, game, &egbase());
>
> // Run the corresponding script
> - std::unique_ptr<LuaTable> table(game.lua().run_script(initialization.script));
> + std::unique_ptr<LuaTable> table(game->lua().run_script(initialization.script));
> table->do_not_warn_about_unaccessed_keys();
> std::unique_ptr<LuaCoroutine> cr = table->get_coroutine("func");
> cr->push_arg(this);
> - game.enqueue_command(new CmdLuaCoroutine(game.get_gametime(), cr.release()));
> + game->enqueue_command(new CmdLuaCoroutine(game->get_gametime(), cr.release()));
>
> // Check if other starting positions are shared in and initialize them as well
> for (uint8_t n = 0; n < m_further_shared_in_player.size(); ++n) {
> @@ -216,12 +216,12 @@
>
> // Run the corresponding script
> std::unique_ptr<LuaCoroutine> ncr =
> - game.lua()
> + game->lua()
> .run_script(tribe().initialization(m_further_initializations.at(n)).script)
> ->get_coroutine("func");
> ncr->push_arg(this);
> ncr->push_arg(further_pos);
> - game.enqueue_command(new CmdLuaCoroutine(game.get_gametime(), ncr.release()));
> + game->enqueue_command(new CmdLuaCoroutine(game->get_gametime(), ncr.release()));
> }
> } else
> throw WLWarning
> @@ -485,7 +485,8 @@
> log("Clearing for road at (%i, %i)\n", c.x, c.y);
>
> // Make sure that the player owns the area around.
> - ref_cast<Game, EditorGameBase>(egbase()).conquer_area_no_building
> + upcast(Game, game, &egbase());
> + game->conquer_area_no_building
> (PlayerArea<Area<FCoords> >(player_number(), Area<FCoords>(c, 1)));
>
> if (BaseImmovable * const immovable = c.field->get_immovable()) {
> @@ -774,11 +775,13 @@
> */
> void Player::flagaction(Flag & flag)
> {
> - if (&flag.owner() == this) // Additional security check.
> + if (&flag.owner() == this) { // Additional security check.
> + upcast(Game, game, &egbase());
> flag.add_flag_job
> - (ref_cast<Game, EditorGameBase>(egbase()),
> + (*game,
> tribe().worker_index("geologist"),
> "expedition");
> + }
> }
>
>
>
> === modified file 'src/logic/production_program.h'
> --- src/logic/production_program.h 2014-09-14 11:31:58 +0000
> +++ src/logic/production_program.h 2014-11-29 08:14:12 +0000
> @@ -28,7 +28,6 @@
>
> #include <stdint.h>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "base/macros.h"
> #include "logic/bill_of_materials.h"
>
> === modified file 'src/logic/productionsite.cc'
> --- src/logic/productionsite.cc 2014-10-27 10:14:10 +0000
> +++ src/logic/productionsite.cc 2014-11-29 08:14:12 +0000
> @@ -517,10 +517,10 @@
> Worker * const w,
> PlayerImmovable & target)
> {
> - ProductionSite & psite = ref_cast<ProductionSite, PlayerImmovable>(target);
> + upcast(ProductionSite, psite, &target);
>
> assert(w);
> - assert(w->get_location(game) == &psite);
> + assert(w->get_location(game) == psite);
>
> // If there is more than one working position, it's possible, that different level workers are
> // requested and therefor possible, that a higher qualified worker answers a request for a lower
> @@ -531,7 +531,7 @@
> // placed on the slot that originally requested the arrived worker.
> bool worker_placed = false;
> WareIndex idx = w->descr().worker_index();
> - for (WorkingPosition * wp = psite.m_working_positions;; ++wp) {
> + for (WorkingPosition * wp = psite->m_working_positions;; ++wp) {
> if (wp->worker_request == &rq) {
> if (wp->worker_request->get_index() == idx) {
> // Place worker
> @@ -542,16 +542,16 @@
> // Set new request for this slot
> WareIndex workerid = wp->worker_request->get_index();
> delete wp->worker_request;
> - wp->worker_request = &psite.request_worker(workerid);
> + wp->worker_request = &psite->request_worker(workerid);
> }
> break;
> }
> }
> while (!worker_placed) {
> {
> - uint8_t nwp = psite.descr().nr_working_positions();
> + uint8_t nwp = psite->descr().nr_working_positions();
> uint8_t pos = 0;
> - WorkingPosition * wp = psite.m_working_positions;
> + WorkingPosition * wp = psite->m_working_positions;
> for (; pos < nwp; ++wp, ++pos) {
> // Find a fitting slot
> if (!wp->worker && !worker_placed)
> @@ -565,10 +565,10 @@
> }
> if (!worker_placed) {
> // Find the next smaller version of this worker
> - WareIndex nuwo = psite.descr().tribe().get_nrworkers();
> + WareIndex nuwo = psite->descr().tribe().get_nrworkers();
> WareIndex current = WareIndex(static_cast<size_t>(0));
> for (; current < nuwo; ++current) {
> - WorkerDescr const * worker = psite.descr().tribe().get_worker_descr(current);
> + WorkerDescr const * worker = psite->descr().tribe().get_worker_descr(current);
> if (worker->becomes() == idx) {
> idx = current;
> break;
> @@ -578,8 +578,8 @@
> throw
> wexception
> ("Something went wrong! No fitting place for worker %s in %s at (%u, %u) found!",
> - w->descr().descname().c_str(), psite.descr().descname().c_str(),
> - psite.get_position().x, psite.get_position().y);
> + w->descr().descname().c_str(), psite->descr().descname().c_str(),
> + psite->get_position().x, psite->get_position().y);
> }
> }
>
> @@ -588,8 +588,8 @@
> // primary worker if the worker that has just arrived is
> // the last one we need to start working.
> w->start_task_idle(game, 0, -1);
> - psite.try_start_working(game);
> - psite.workers_changed();
> + psite->try_start_working(game);
> + psite->workers_changed();
> }
>
>
> @@ -765,14 +765,13 @@
> const WorkerDescr & worker_descr =
> *descr().tribe().get_worker_descr(worker_type_with_count.first);
> {
> - Worker & recruit =
> - ref_cast<Worker, Bob>(worker_descr.create_object());
> - recruit.set_owner(&worker.owner());
> - recruit.set_position(game, worker.get_position());
> - recruit.init(game);
> - recruit.set_location(this);
> - recruit.start_task_leavebuilding(game, true);
> - worker.start_task_releaserecruit(game, recruit);
> + upcast(Worker, recruit, &worker_descr.create_object());
> + recruit->set_owner(&worker.owner());
> + recruit->set_position(game, worker.get_position());
> + recruit->init(game);
> + recruit->set_location(this);
> + recruit->start_task_leavebuilding(game, true);
> + worker.start_task_releaserecruit(game, *recruit);
> }
> }
> assert(worker_type_with_count.second);
>
> === modified file 'src/logic/requirements.cc'
> --- src/logic/requirements.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/requirements.cc 2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>
> #include "logic/requirements.h"
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "io/fileread.h"
> #include "io/filewrite.h"
>
> === modified file 'src/logic/ship.cc'
> --- src/logic/ship.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/ship.cc 2014-11-29 08:14:12 +0000
> @@ -21,7 +21,7 @@
>
> #include <memory>
>
> -#include "base/deprecated.h"
> +#include "base/macros.h"
> #include "economy/economy.h"
> #include "economy/flag.h"
> #include "economy/fleet.h"
> @@ -1031,7 +1031,8 @@
> // economy of all workers we're transporting so that they are in the correct
> // economy. Also, we might are on an expedition which means that we just now
> // created the economy of this ship and must inform all wares.
> - ship.set_economy(ref_cast<Game>(egbase()), ship.m_economy);
> + upcast(Game, game, &egbase());
> + ship.set_economy(*game, ship.m_economy);
> }
>
>
>
> === modified file 'src/logic/soldier.cc'
> --- src/logic/soldier.cc 2014-10-27 10:14:10 +0000
> +++ src/logic/soldier.cc 2014-11-29 08:14:12 +0000
> @@ -700,12 +700,8 @@
> uint32_t const time)
> {
> molog("[soldier] starting animation %s", animname);
> - return
> - start_task_idle
> - (ref_cast<Game, EditorGameBase>(egbase),
> - descr().get_rand_anim
> - (ref_cast<Game, EditorGameBase>(egbase), animname),
> - time);
> + upcast(Game, game, &egbase);
> + return start_task_idle(*game, descr().get_rand_anim(*game, animname), time);
> }
>
>
> @@ -748,14 +744,17 @@
> */
> bool Soldier::can_be_challenged()
> {
> - if (m_hp_current < 1) //< Soldier is dead!
> - return false;
> - if (!is_on_battlefield())
> - return false;
> - if (!m_battle)
> + if (m_hp_current < 1) { //< Soldier is dead!
> + return false;
> + }
> + if (!is_on_battlefield()) {
> + return false;
> + }
> + if (!m_battle) {
> return true;
> - return
> - !m_battle->locked(ref_cast<Game, EditorGameBase>(owner().egbase()));
> + }
> + upcast(Game, game, &owner().egbase());
> + return !m_battle->locked(*game);
> }
>
> /**
> @@ -1805,11 +1804,8 @@
> FindImmovableAttackable());
>
> for (BaseImmovable * temp_attackable : attackables) {
> - if
> - (ref_cast<PlayerImmovable const, BaseImmovable const>(*temp_attackable)
> - .get_owner()->player_number()
> - ==
> - land_owner) {
> + upcast(PlayerImmovable const, imm, temp_attackable);
> + if (imm->get_owner()->player_number() == land_owner) {
> dynamic_cast<Attackable &>(*temp_attackable).aggressor(*this);
> }
> }
>
> === modified file 'src/logic/trainingsite.cc'
> --- src/logic/trainingsite.cc 2014-10-27 10:14:10 +0000
> +++ src/logic/trainingsite.cc 2014-11-29 08:14:12 +0000
> @@ -341,13 +341,13 @@
> Worker * const w,
> PlayerImmovable & target)
> {
> - TrainingSite & tsite = ref_cast<TrainingSite, PlayerImmovable>(target);
> - Soldier & s = ref_cast<Soldier, Worker> (*w);
> -
> - assert(s.get_location(game) == &tsite);
> - assert(tsite.m_soldier_request == &rq);
> -
> - tsite.incorporate_soldier(game, s);
> + upcast(TrainingSite, tsite, &target);
> + upcast(Soldier, s, w);
> +
> + assert(s->get_location(game) == tsite);
> + assert(tsite->m_soldier_request == &rq);
> +
> + tsite->incorporate_soldier(game, *s);
> }
>
> /*
> @@ -416,7 +416,7 @@
> */
> void TrainingSite::drop_soldier(Soldier & soldier)
> {
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> + upcast(Game, game, &owner().egbase());
>
> std::vector<Soldier *>::iterator it =
> std::find(m_soldiers.begin(), m_soldiers.end(), &soldier);
> @@ -427,11 +427,11 @@
>
> m_soldiers.erase(it);
>
> - soldier.reset_tasks(game);
> - soldier.start_task_leavebuilding(game, true);
> + soldier.reset_tasks(*game);
> + soldier.start_task_leavebuilding(*game, true);
>
> // Schedule, so that we can call new soldiers on next act()
> - schedule_act(game, 100);
> + schedule_act(*game, 100);
> }
>
>
>
> === modified file 'src/logic/warehouse.cc'
> --- src/logic/warehouse.cc 2014-09-30 05:41:55 +0000
> +++ src/logic/warehouse.cc 2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>
> #include <boost/format.hpp>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "base/macros.h"
> #include "base/wexception.h"
> @@ -377,11 +376,10 @@
> (owner().is_worker_type_allowed(worker_index) &&
> m_next_worker_without_cost_spawn[i] == static_cast<uint32_t>(never()))
> {
> - if (next_spawn == static_cast<uint32_t>(never()))
> - next_spawn =
> - schedule_act
> - (ref_cast<Game, EditorGameBase>(egbase),
> - WORKER_WITHOUT_COST_SPAWN_INTERVAL);
> + upcast(Game, game, &egbase);
> + if (next_spawn == static_cast<uint32_t>(never())) {
> + next_spawn = schedule_act(*game, WORKER_WITHOUT_COST_SPAWN_INTERVAL);
> + }
> m_next_worker_without_cost_spawn[i] = next_spawn;
> log
> ("WARNING: player %u is allowed to create worker type %s but his "
> @@ -444,17 +442,13 @@
> // m_next_military_act is not touched in the loading code. Is only needed
> // if there warehous is created in the game? I assume it's for the
> // conquer_radius thing
> - m_next_military_act =
> - schedule_act
> - (ref_cast<Game, EditorGameBase>(egbase), 1000);
> + m_next_military_act = schedule_act(*game, 1000);
>
> - m_next_stock_remove_act =
> - schedule_act
> - (ref_cast<Game, EditorGameBase>(egbase), 4000);
> + m_next_stock_remove_act = schedule_act(*game, 4000);
>
> log("Message: adding (wh) (%s) %i \n", to_string(descr().type()).c_str(), player.player_number());
> send_message
> - (ref_cast<Game, EditorGameBase>(egbase),
> + (*game,
> "warehouse",
> descr().descname(),
> (boost::format(_("A new %s was added to your economy."))
> @@ -911,17 +905,17 @@
> Worker * const w,
> PlayerImmovable & target)
> {
> - Warehouse & wh = ref_cast<Warehouse, PlayerImmovable>(target);
> + upcast(Warehouse, wh, &target);
>
> if (w) {
> w->schedule_incorporate(game);
> } else {
> - wh.m_supply->add_wares(ware, 1);
> + wh->m_supply->add_wares(ware, 1);
>
> // This ware may be used to build planned workers,
> // so it seems like a good idea to update the associated requests
> // and use the ware before it is sent away again.
> - wh._update_all_planned_workers(game);
> + wh->_update_all_planned_workers(game);
> }
> }
>
> @@ -1198,8 +1192,8 @@
> if (!descr().get_conquers())
> return;
>
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> - Map & map = game.map();
> + upcast(Game, game, &owner().egbase());
> + Map & map = game->map();
> if
> (enemy.get_owner() == &owner() ||
> enemy.get_battle() ||
> @@ -1209,7 +1203,7 @@
> return;
>
> if
> - (game.map().find_bobs
> + (game->map().find_bobs
> (Area<FCoords>(map.get_fcoords(base_flag().get_position()), 2),
> nullptr,
> FindBobEnemySoldier(&owner())))
> @@ -1218,30 +1212,28 @@
> WareIndex const soldier_index = descr().tribe().worker_index("soldier");
> Requirements noreq;
>
> - if (!count_workers(game, soldier_index, noreq))
> + if (!count_workers(*game, soldier_index, noreq))
> return;
>
> - Soldier & defender =
> - ref_cast<Soldier, Worker>(launch_worker(game, soldier_index, noreq));
> - defender.start_task_defense(game, false);
> + upcast(Soldier, defender, &launch_worker(*game, soldier_index, noreq));
> + defender->start_task_defense(*game, false);
> }
>
> bool Warehouse::attack(Soldier & enemy)
> {
> - Game & game = ref_cast<Game, EditorGameBase>(owner().egbase());
> + upcast(Game, game, &owner().egbase());
> WareIndex const soldier_index = descr().tribe().worker_index("soldier");
> Requirements noreq;
>
> - if (count_workers(game, soldier_index, noreq)) {
> - Soldier & defender =
> - ref_cast<Soldier, Worker>(launch_worker(game, soldier_index, noreq));
> - defender.start_task_defense(game, true);
> - enemy.send_signal(game, "sleep");
> + if (count_workers(*game, soldier_index, noreq)) {
> + upcast(Soldier, defender, &launch_worker(*game, soldier_index, noreq));
> + defender->start_task_defense(*game, true);
> + enemy.send_signal(*game, "sleep");
> return true;
> }
>
> set_defeating_player(enemy.owner().player_number());
> - schedule_destroy(game);
> + schedule_destroy(*game);
> return false;
> }
>
>
> === modified file 'src/logic/worker.cc'
> --- src/logic/worker.cc 2014-10-27 10:14:10 +0000
> +++ src/logic/worker.cc 2014-11-29 08:14:12 +0000
> @@ -618,7 +618,8 @@
> int32_t max_steps = -1;
>
> // First of all, make sure we're outside
> - if (imm == &ref_cast<Building, PlayerImmovable>(*get_location(game))) {
> + upcast(Building, building, get_location(game));
> + if (imm == building) {
> start_task_leavebuilding(game, false);
> return true;
> }
> @@ -902,7 +903,8 @@
> bool Worker::run_geologist(Game & game, State & state, const Action & action)
> {
> // assert that location is of the right type.
> - ref_cast<Flag const, PlayerImmovable const>(*get_location(game));
> + // NOCOM(#gunchleoc): What's this supposed to do? There's nothing being asserted here.
Dunno. Maybe the author thought that it would throw something like a bad cast exception, but I do not think it does in c++. Just delete it.
> + //upcast(Flag const, flag, get_location(game));
>
> molog
> (" Start Geologist (%i attempts, %i radius -> %s)\n",
> @@ -1902,13 +1904,12 @@
> }
>
> for (;;) {
> - const WorkerProgram & program =
> - ref_cast<WorkerProgram const, BobProgramBase const>(*state.program);
> + upcast(WorkerProgram const, program, state.program);
>
> - if (static_cast<uint32_t>(state.ivar1) >= program.get_size())
> + if (static_cast<uint32_t>(state.ivar1) >= program->get_size())
> return pop_task(game);
>
> - const Action & action = *program.get_action(state.ivar1);
> + const Action & action = *program->get_action(state.ivar1);
>
> if ((this->*(action.function))(game, state, action))
> return;
> @@ -2082,9 +2083,12 @@
>
> WareInstance * ware = get_carried_ware(game);
> BaseImmovable * const location = game.map()[get_position()].get_immovable();
> +
> #ifndef NDEBUG
> - Building & ploc = ref_cast<Building, PlayerImmovable>(*get_location(game));
> - assert(&ploc == location || &ploc.base_flag() == location);
> + upcast(BaseImmovable, ploc, get_location(game));
> + upcast(Building, plbuild, get_location(game));
> + upcast(BaseImmovable, plflagloc, &plbuild->base_flag());
> + assert(ploc == location || plflagloc == location);
> #endif
>
> // Deliver the ware
> @@ -2205,11 +2209,10 @@
>
> // The ware has decided that it doesn't want to go to us after all
> // In order to return to the warehouse, we're switching to State_DropOff
> - if
> - (WareInstance * const ware =
> - ref_cast<Flag, PlayerImmovable>(*location).fetch_pending_ware
> - (game, employer))
> + upcast(Flag, flag, location);
> + if (WareInstance * const ware = flag->fetch_pending_ware(game, employer)) {
> set_carried_ware(game, ware);
> + }
>
> set_animation(game, descr().get_animation("idle"));
> return schedule_act(game, 20);
> @@ -2367,14 +2370,13 @@
> */
> void Worker::start_task_leavebuilding(Game & game, bool const changelocation)
> {
> - Building & building =
> - ref_cast<Building, PlayerImmovable>(*get_location(game));
> + upcast(Building, building, get_location(game));
>
> // Set the wait task
> push_task(game, taskLeavebuilding);
> State & state = top_state();
> state.ivar1 = changelocation;
> - state.objvar1 = &building;
> + state.objvar1 = building;
> }
>
>
> @@ -2437,8 +2439,10 @@
> // The if-statement is needed because this is (unfortunately) also called
> // when the Worker is deallocated when shutting down the simulation. Then
> // the building might not exist any more.
> - if (MapObject * const building = state.objvar1.get(game))
> - ref_cast<Building, MapObject>(*building).leave_skip(game, *this);
> + if (MapObject * const building = state.objvar1.get(game)) {
> + upcast(Building, tmp_building, building);
> + tmp_building->leave_skip(game, *this);
> + }
> }
>
>
> @@ -2544,7 +2548,7 @@
> molog("[fugitive]: found a flag connected to warehouse(s)\n");
> for (const ImmovableFound& tmp_flag : flags) {
>
> - Flag & flag = ref_cast<Flag, BaseImmovable>(*tmp_flag.object);
> + upcast(Flag, flag, tmp_flag.object);
>
> if (game.logic_rand() % 2 == 0)
> continue;
> @@ -2553,7 +2557,7 @@
> map.calc_distance(get_position(), tmp_flag.coords);
>
> if (!best || bestdist > dist) {
> - best = &flag;
> + best = flag;
> bestdist = dist;
> }
> }
> @@ -2649,10 +2653,8 @@
> //
> Map & map = game.map();
> const World & world = game.world();
> - Area<FCoords> owner_area
> - (map.get_fcoords
> - (ref_cast<Flag, PlayerImmovable>(*get_location(game)).get_position()),
> - state.ivar2);
> + upcast(Flag, flag, get_location(game));
> + Area<FCoords> owner_area(map.get_fcoords(flag->get_position()), state.ivar2);
>
> // Check if it's not time to go home
> if (state.ivar1 > 0) {
> @@ -2798,12 +2800,11 @@
> state.ivar2 = game.get_gametime() + time;
>
> // first get out
> - Building & building =
> - ref_cast<Building, PlayerImmovable>(*get_location(game));
> + upcast(Building, building, get_location(game));
> push_task(game, taskLeavebuilding);
> State & stateLeave = top_state();
> stateLeave.ivar1 = false;
> - stateLeave.objvar1 = &building;
> + stateLeave.objvar1 = building;
> }
>
>
> @@ -2958,8 +2959,8 @@
>
> if (version >= 2) {
> if (fr.unsigned_8()) {
> - worker.m_transfer =
> - new Transfer(ref_cast<Game, EditorGameBase>(egbase()), worker);
> + upcast(Game, game, &egbase());
> + worker.m_transfer = new Transfer(*game, worker);
> worker.m_transfer->read(fr, m_transfer);
> }
> }
>
> === modified file 'src/logic/worker_descr.cc'
> --- src/logic/worker_descr.cc 2014-09-20 09:37:47 +0000
> +++ src/logic/worker_descr.cc 2014-11-29 08:14:12 +0000
> @@ -19,8 +19,8 @@
>
> #include "logic/worker_descr.h"
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> +#include "base/macros.h"
> #include "base/wexception.h"
> #include "graphic/graphic.h"
> #include "logic/carrier.h"
> @@ -177,12 +177,12 @@
> Coords const coords)
> const
> {
> - Worker & worker = ref_cast<Worker, MapObject>(create_object());
> - worker.set_owner(&owner);
> - worker.set_location(location);
> - worker.set_position(egbase, coords);
> - worker.init(egbase);
> - return worker;
> + upcast(Worker, worker, &create_object());
> + worker->set_owner(&owner);
> + worker->set_location(location);
> + worker->set_position(egbase, coords);
> + worker->init(egbase);
> + return *worker;
> }
>
>
>
> === modified file 'src/map_io/CMakeLists.txt'
> --- src/map_io/CMakeLists.txt 2014-11-22 15:27:45 +0000
> +++ src/map_io/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -86,7 +86,6 @@
> map_version_packet.h
> USES_SDL2_IMAGE
> DEPENDS
> - base_deprecated
> base_exceptions
> base_log
> base_macros
>
> === modified file 'src/map_io/map_buildingdata_packet.cc'
> --- src/map_io/map_buildingdata_packet.cc 2014-09-20 09:37:47 +0000
> +++ src/map_io/map_buildingdata_packet.cc 2014-11-29 08:14:12 +0000
> @@ -194,43 +194,21 @@
> // Set economy now, some stuff below will count on this.
> building.set_economy(building.m_flag->get_economy());
>
> + upcast(Game, game, &egbase);
> +
> if (upcast(ConstructionSite, constructionsite, &building)) {
> - read_constructionsite
> - (*constructionsite,
> - fr,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mol);
> + read_constructionsite (*constructionsite, fr, *game, mol);
> } else if (upcast(DismantleSite, dms, &building)) {
> - read_dismantlesite
> - (*dms,
> - fr,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mol);
> + read_dismantlesite(*dms, fr, *game, mol);
> } else if (upcast(Warehouse, warehouse, &building)) {
> - read_warehouse
> - (*warehouse,
> - fr,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mol);
> + read_warehouse(*warehouse, fr, *game, mol);
> } else if (upcast(ProductionSite, productionsite, &building)) {
> if (upcast(MilitarySite, militarysite, productionsite)) {
> - read_militarysite
> - (*militarysite,
> - fr,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mol);
> + read_militarysite(*militarysite, fr, *game, mol);
> } else if (upcast(TrainingSite, trainingsite, productionsite)) {
> - read_trainingsite
> - (*trainingsite,
> - fr,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mol);
> + read_trainingsite(*trainingsite, fr, *game, mol);
> } else {
> - read_productionsite
> - (*productionsite,
> - fr,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mol);
> + read_productionsite(*productionsite, fr, *game, mol);
> }
> } else {
> // type of building is not one of (or derived from)
> @@ -238,8 +216,7 @@
> assert(false);
> }
> if (packet_version < 3) {
> - read_formerbuildings_v2
> - (building, fr, ref_cast<Game, EditorGameBase>(egbase), mol);
> + read_formerbuildings_v2(building, fr, *game, mol);
> }
>
> mol.mark_object_as_loaded(building);
> @@ -1137,7 +1114,7 @@
> Map & map = egbase.map();
> const uint32_t mapwidth = map.get_width();
> MapIndex const max_index = map.max_index();
> - for (MapIndex i = 0; i < max_index; ++i)
> + for (MapIndex i = 0; i < max_index; ++i) {
> if (upcast(Building const, building, map[i].get_immovable())) {
> assert(mos.is_object_known(*building));
>
> @@ -1190,52 +1167,32 @@
> fw.unsigned_8(is_stopped);
> }
>
> - if (upcast(ConstructionSite const, constructionsite, building))
> - write_constructionsite
> - (*constructionsite,
> - fw,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mos);
> - else if (upcast(DismantleSite const, dms, building))
> - write_dismantlesite
> - (*dms,
> - fw,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mos);
> - else if (upcast(Warehouse const, warehouse, building))
> - write_warehouse
> - (*warehouse,
> - fw,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mos);
> - else if (upcast(ProductionSite const, productionsite, building)) {
> - if (upcast(MilitarySite const, militarysite, productionsite))
> - write_militarysite
> - (*militarysite,
> - fw,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mos);
> - else if (upcast(TrainingSite const, trainingsite, productionsite))
> - write_trainingsite
> - (*trainingsite,
> - fw,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mos);
> - else
> - write_productionsite
> - (*productionsite,
> - fw,
> - ref_cast<Game, EditorGameBase>(egbase),
> - mos);
> + upcast(Game, game, &egbase);
> +
> + if (upcast(ConstructionSite const, constructionsite, building)) {
> + write_constructionsite(*constructionsite, fw, *game, mos);
> + } else if (upcast(DismantleSite const, dms, building)) {
> + write_dismantlesite(*dms, fw, *game, mos);
> + } else if (upcast(Warehouse const, warehouse, building)) {
> + write_warehouse (*warehouse, fw, *game, mos);
> + } else if (upcast(ProductionSite const, productionsite, building)) {
> + if (upcast(MilitarySite const, militarysite, productionsite)) {
> + write_militarysite(*militarysite, fw, *game, mos);
> + }
> + else if (upcast(TrainingSite const, trainingsite, productionsite)) {
> + write_trainingsite(*trainingsite, fw, *game, mos);
> + }
> + else {
> + write_productionsite(*productionsite, fw, *game, mos);
> + }
> } else {
> assert(false);
> // type of building is not one of (or derived from)
> // {ConstructionSite, Warehouse, ProductionSite}
> }
> -
> mos.mark_object_as_saved(*building);
> }
> -
> + }
> fw.write(fs, "binary/building_data");
> }
>
>
> === modified file 'src/map_io/map_elemental_packet.cc'
> --- src/map_io/map_elemental_packet.cc 2014-10-29 06:41:10 +0000
> +++ src/map_io/map_elemental_packet.cc 2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
> #include <boost/algorithm/string.hpp>
> #include <boost/format.hpp>
>
> -#include "base/deprecated.h"
> #include "logic/editor_game_base.h"
> #include "logic/game_data_error.h"
> #include "logic/map.h"
>
> === modified file 'src/map_io/map_flag_packet.cc'
> --- src/map_io/map_flag_packet.cc 2014-09-20 09:37:47 +0000
> +++ src/map_io/map_flag_packet.cc 2014-11-29 08:14:12 +0000
> @@ -106,12 +106,10 @@
> // packet. We always create this, no matter what skip is
> // since we have to read the data packets. We delete this
> // object later again, if it is not wanted.
> + upcast(Game, game, &egbase);
> mol.register_object<Flag>
> (serial,
> - *new Flag
> - (ref_cast<Game, EditorGameBase>(egbase),
> - egbase.player(owner),
> - fc));
> + *new Flag(*game, egbase.player(owner), fc));
> } catch (const WException & e) {
> throw GameDataError
> ("%u (at (%i, %i), owned by player %u): %s",
>
> === modified file 'src/map_io/map_flagdata_packet.cc'
> --- src/map_io/map_flagdata_packet.cc 2014-09-20 09:37:47 +0000
> +++ src/map_io/map_flagdata_packet.cc 2014-11-29 08:14:12 +0000
> @@ -201,8 +201,8 @@
> 0,
> Flag::flag_job_request_callback,
> wwWORKER);
> - f.request->read
> - (fr, ref_cast<Game, EditorGameBase>(egbase), mol);
> + upcast(Game, game, &egbase);
> + f.request->read(fr, *game, mol);
> } else {
> f.request = nullptr;
> }
> @@ -301,8 +301,8 @@
> for (const Flag::FlagJob& temp_job : flag_jobs) {
> if (temp_job.request) {
> fw.unsigned_8(1);
> - temp_job.request->write
> - (fw, ref_cast<Game, EditorGameBase>(egbase), mos);
> + upcast(Game, game, &egbase);
> + temp_job.request->write(fw, *game, mos);
> } else
> fw.unsigned_8(0);
>
>
> === modified file 'src/map_io/map_object_saver.cc'
> --- src/map_io/map_object_saver.cc 2014-09-14 11:31:58 +0000
> +++ src/map_io/map_object_saver.cc 2014-11-29 08:14:12 +0000
> @@ -19,7 +19,6 @@
>
> #include "map_io/map_object_saver.h"
>
> -#include "base/deprecated.h"
> #include "base/wexception.h"
> #include "economy/flag.h"
> #include "economy/fleet.h"
>
> === modified file 'src/map_io/map_port_spaces_packet.cc'
> --- src/map_io/map_port_spaces_packet.cc 2014-09-30 05:41:55 +0000
> +++ src/map_io/map_port_spaces_packet.cc 2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>
> #include <boost/algorithm/string.hpp>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "logic/editor_game_base.h"
> #include "logic/game_data_error.h"
>
> === modified file 'src/map_io/map_roaddata_packet.cc'
> --- src/map_io/map_roaddata_packet.cc 2014-09-20 09:37:47 +0000
> +++ src/map_io/map_roaddata_packet.cc 2014-11-29 08:14:12 +0000
> @@ -69,6 +69,7 @@
> break;
> }
> try {
> + upcast(Game, game, &egbase);
> Road & road = mol.get<Road>(serial);
> if (mol.is_object_loaded(road))
> throw GameDataError("already loaded");
> @@ -124,7 +125,7 @@
>
> // Now that all rudimentary data is set, init this road. Then
> // overwrite the initialization values.
> - road._link_into_flags(ref_cast<Game, EditorGameBase>(egbase));
> + road._link_into_flags(*game);
>
> road.m_idle_index = fr.unsigned_32();
>
> @@ -166,8 +167,8 @@
> (road,
> 0,
> Road::_request_carrier_callback,
> - wwWORKER))
> - ->read(fr, ref_cast<Game, EditorGameBase>(egbase), mol);
> + wwWORKER))
> + ->read(fr, *game, mol);
> } else {
> carrier_request = nullptr;
> //log("No request in this slot");
> @@ -190,13 +191,8 @@
> } else {
> delete carrier_request;
> if (carrier) {
> - //carrier->set_location (0);
> - carrier->reset_tasks
> - (ref_cast<Game,
> - EditorGameBase>(egbase));
> - //carrier->send_signal
> - //(ref_cast<Game,
> - //EditorGameBase>(egbase), "location");
> + upcast(Game, game, &egbase);
> + carrier->reset_tasks(*game);
> }
> }
> }
> @@ -275,8 +271,8 @@
>
> if (temp_slot.carrier_request) {
> fw.unsigned_8(1);
> - temp_slot.carrier_request->write
> - (fw, ref_cast<Game, EditorGameBase>(egbase), mos);
> + upcast(Game, game, &egbase);
> + temp_slot.carrier_request->write(fw, *game, mos);
> } else {
> fw.unsigned_8(0);
> }
>
> === modified file 'src/network/CMakeLists.txt'
> --- src/network/CMakeLists.txt 2014-10-13 15:04:50 +0000
> +++ src/network/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
> USES_SDL2_NET
> DEPENDS
> ai
> - base_deprecated
> base_exceptions
> base_i18n
> base_log
>
> === modified file 'src/network/network_lan_promotion.cc'
> --- src/network/network_lan_promotion.cc 2014-09-20 09:37:47 +0000
> +++ src/network/network_lan_promotion.cc 2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
> #include <cstdio>
> #include <cstring>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "base/macros.h"
> #include "build_info.h"
>
> === modified file 'src/scripting/CMakeLists.txt'
> --- src/scripting/CMakeLists.txt 2014-07-25 20:16:31 +0000
> +++ src/scripting/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -38,7 +38,6 @@
> scripting.h
> USES_BOOST_REGEX
> DEPENDS
> - base_deprecated
> base_exceptions
> base_i18n
> base_log
>
> === modified file 'src/scripting/lua_map.cc'
> --- src/scripting/lua_map.cc 2014-10-27 10:14:10 +0000
> +++ src/scripting/lua_map.cc 2014-11-29 08:14:12 +0000
> @@ -21,8 +21,8 @@
>
> #include <boost/format.hpp>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> +#include "base/macros.h"
> #include "economy/wares_queue.h"
> #include "graphic/graphic.h"
> #include "logic/carrier.h"
> @@ -444,11 +444,10 @@
> lua_rawset(L, -3);
> }
> } else {
> - const SoldierDescr& soldier_descr = ref_cast<SoldierDescr const, WorkerDescr const>
> - (*tribe.get_worker_descr(tribe.worker_index("soldier")));
> + upcast(SoldierDescr const, soldier_descr, tribe.get_worker_descr(tribe.worker_index("soldier")));
>
> // Only return the number of those requested
> - const SoldierMapDescr wanted = unbox_lua_soldier_description(L, 2, soldier_descr);
> + const SoldierMapDescr wanted = unbox_lua_soldier_description(L, 2, *soldier_descr);
> uint32_t rv = 0;
> for (const Soldier* s : soldiers) {
> SoldierMapDescr sd
> @@ -469,10 +468,8 @@
> assert(owner != nullptr);
>
> const TribeDescr& tribe = owner->tribe();
> - const SoldierDescr& soldier_descr = // soldiers
> - ref_cast<SoldierDescr const, WorkerDescr const>
> - (*tribe.get_worker_descr(tribe.worker_index("soldier")));
> - SoldiersMap setpoints = m_parse_set_soldiers_arguments(L, soldier_descr);
> + upcast(SoldierDescr const, soldier_descr, tribe.get_worker_descr(tribe.worker_index("soldier")));
> + SoldiersMap setpoints = m_parse_set_soldiers_arguments(L, *soldier_descr);
>
> // Get information about current soldiers
> const std::vector<Soldier*> curs = sc->stationed_soldiers();
> @@ -517,12 +514,11 @@
> }
> } else if (d > 0) {
> for (; d; --d) {
> - Soldier& soldier = ref_cast<Soldier, Worker>
> - (soldier_descr.create(egbase, *owner, nullptr, building_position));
> - soldier.set_level
> + upcast(Soldier, soldier, &soldier_descr->create(egbase, *owner, nullptr, building_position));
> + soldier->set_level
> (sp.first.hp, sp.first.at, sp.first.de, sp.first.ev);
> - if (sc->incorporate_soldier(egbase, soldier)) {
> - soldier.remove(egbase);
> + if (sc->incorporate_soldier(egbase, *soldier)) {
> + soldier->remove(egbase);
> report_error(L, "No space left for soldier!");
> }
> }
> @@ -2586,13 +2582,13 @@
> for (Path::StepVector::size_type i = 0; i < idle_index; ++i)
> egbase.map().get_neighbour(idle_position, path[i], &idle_position);
>
> - Carrier & carrier = ref_cast<Carrier, Worker>
> - (wdes->create (egbase, r.owner(), &r, idle_position));
> -
> - if (upcast(Game, game, &egbase))
> - carrier.start_task_road(*game);
> -
> - r.assign_carrier(carrier, 0);
> + upcast(Carrier, carrier, &wdes->create(egbase, r.owner(), &r, idle_position));
> +
> + if (upcast(Game, game, &egbase)) {
> + carrier->start_task_road(*game);
> + }
> +
> + r.assign_carrier(*carrier, 0);
> return 0;
> }
>
>
> === modified file 'src/sound/CMakeLists.txt'
> --- src/sound/CMakeLists.txt 2014-10-13 15:04:50 +0000
> +++ src/sound/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -10,7 +10,6 @@
> USES_SDL2
> USES_SDL2_MIXER
> DEPENDS
> - base_deprecated
> base_i18n
> base_log
> graphic
>
> === modified file 'src/sound/sound_handler.cc'
> --- src/sound/sound_handler.cc 2014-10-16 16:06:37 +0000
> +++ src/sound/sound_handler.cc 2014-11-29 08:14:12 +0000
> @@ -28,7 +28,6 @@
> #include <windows.h>
> #endif
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "base/log.h"
> #include "graphic/graphic.h"
>
> === modified file 'src/ui_basic/CMakeLists.txt'
> --- src/ui_basic/CMakeLists.txt 2014-11-22 11:00:04 +0000
> +++ src/ui_basic/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -51,7 +51,6 @@
> USES_BOOST_REGEX
> USES_SDL2
> DEPENDS
> - base_deprecated
> base_exceptions
> base_geometry
> base_i18n
>
> === modified file 'src/ui_basic/listselect.cc'
> --- src/ui_basic/listselect.cc 2014-11-22 10:18:20 +0000
> +++ src/ui_basic/listselect.cc 2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>
> #include <boost/bind.hpp>
>
> -#include "base/deprecated.h"
> #include "base/log.h"
> #include "graphic/font.h"
> #include "graphic/font_handler.h"
>
> === modified file 'src/ui_basic/progresswindow.cc'
> --- src/ui_basic/progresswindow.cc 2014-10-14 06:30:20 +0000
> +++ src/ui_basic/progresswindow.cc 2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
> #include <sys/time.h>
> #endif
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "graphic/font.h"
> #include "graphic/font_handler.h"
>
> === modified file 'src/ui_basic/spinbox.cc'
> --- src/ui_basic/spinbox.cc 2014-09-30 05:41:55 +0000
> +++ src/ui_basic/spinbox.cc 2014-11-29 08:14:12 +0000
> @@ -23,7 +23,6 @@
>
> #include <boost/format.hpp>
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "base/wexception.h"
> #include "ui_basic/button.h"
>
> === modified file 'src/ui_basic/table.cc'
> --- src/ui_basic/table.cc 2014-11-22 10:18:20 +0000
> +++ src/ui_basic/table.cc 2014-11-29 08:14:12 +0000
> @@ -21,7 +21,6 @@
>
> #include <boost/bind.hpp>
>
> -#include "base/deprecated.h"
> #include "graphic/font.h"
> #include "graphic/font_handler.h"
> #include "graphic/font_handler1.h"
>
> === modified file 'src/wui/CMakeLists.txt'
> --- src/wui/CMakeLists.txt 2014-10-13 15:04:50 +0000
> +++ src/wui/CMakeLists.txt 2014-11-29 08:14:12 +0000
> @@ -129,7 +129,6 @@
> watchwindow.h
> USES_SDL2
> DEPENDS
> - base_deprecated
> base_exceptions
> base_geometry
> base_i18n
>
> === modified file 'src/wui/actionconfirm.cc'
> --- src/wui/actionconfirm.cc 2014-11-13 08:25:45 +0000
> +++ src/wui/actionconfirm.cc 2014-11-29 08:14:12 +0000
> @@ -46,7 +46,8 @@
> Widelands::Ship & ship);
>
> InteractivePlayer & iaplayer() const {
> - return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> + upcast(InteractivePlayer, result, get_parent());
> + return *result;
> }
>
> virtual void think() = 0;
>
> === modified file 'src/wui/building_statistics_menu.cc'
> --- src/wui/building_statistics_menu.cc 2014-10-28 14:57:52 +0000
> +++ src/wui/building_statistics_menu.cc 2014-11-29 08:14:12 +0000
> @@ -65,7 +65,8 @@
> namespace Columns {enum {Name, Size, Prod, Owned, Build};}
>
> inline InteractivePlayer & BuildingStatisticsMenu::iplayer() const {
> - return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> + upcast(InteractivePlayer, result, get_parent());
> + return *result;
> }
>
> BuildingStatisticsMenu::BuildingStatisticsMenu
> @@ -418,11 +419,10 @@
> ++nr_build;
> else {
> ++nr_owned;
> - if (productionsite)
> - total_prod +=
> - ref_cast<Widelands::ProductionSite, Widelands::BaseImmovable>
> - (*map[vec[l].pos].get_immovable())
> - .get_statistics_percent();
> + if (productionsite) {
> + upcast(Widelands::ProductionSite, psite, map[vec[l].pos].get_immovable());
> + total_prod += psite->get_statistics_percent();
> + }
> }
> }
>
>
> === modified file 'src/wui/buildingwindow.cc'
> --- src/wui/buildingwindow.cc 2014-11-24 07:25:21 +0000
> +++ src/wui/buildingwindow.cc 2014-11-29 08:14:12 +0000
> @@ -378,7 +378,8 @@
> igbase().game().send_player_bulldoze(m_building);
> }
> else {
> - show_bulldoze_confirm(ref_cast<InteractivePlayer, InteractiveGameBase>(igbase()), m_building);
> + upcast(InteractivePlayer, iaplayer, &igbase());
> + show_bulldoze_confirm(*iaplayer, m_building);
> }
> }
>
> @@ -394,7 +395,8 @@
> igbase().game().send_player_dismantle(m_building);
> }
> else {
> - show_dismantle_confirm(ref_cast<InteractivePlayer, InteractiveGameBase>(igbase()), m_building);
> + upcast(InteractivePlayer, iaplayer, &igbase());
> + show_dismantle_confirm(*iaplayer, m_building);
> }
> }
>
> @@ -437,10 +439,8 @@
> igbase().game().send_player_enhance_building(m_building, id);
> }
> else {
> - show_enhance_confirm
> - (ref_cast<InteractivePlayer, InteractiveGameBase>(igbase()),
> - m_building,
> - id);
> + upcast(InteractivePlayer, iaplayer, &igbase());
> + show_enhance_confirm(*iaplayer, m_building, id);
> }
> }
>
>
> === modified file 'src/wui/buildingwindow.h'
> --- src/wui/buildingwindow.h 2014-09-10 14:48:40 +0000
> +++ src/wui/buildingwindow.h 2014-11-29 08:14:12 +0000
> @@ -47,7 +47,8 @@
> Widelands::Building & building() {return m_building;}
>
> InteractiveGameBase & igbase() const {
> - return ref_cast<InteractiveGameBase, UI::Panel>(*get_parent());
> + upcast(InteractiveGameBase, result, get_parent());
> + return *result;
> }
>
> void draw(RenderTarget &) override;
>
> === modified file 'src/wui/constructionsitewindow.cc'
> --- src/wui/constructionsitewindow.cc 2014-09-10 14:48:40 +0000
> +++ src/wui/constructionsitewindow.cc 2014-11-29 08:14:12 +0000
> @@ -84,11 +84,8 @@
> void ConstructionSiteWindow::think()
> {
> BuildingWindow::think();
> -
> - const Widelands::ConstructionSite & cs =
> - ref_cast<Widelands::ConstructionSite, Widelands::Building>(building());
> -
> - m_progress->set_state(cs.get_built_per64k());
> + upcast(Widelands::ConstructionSite, cs, &building());
> + m_progress->set_state(cs->get_built_per64k());
> }
>
>
>
> === modified file 'src/wui/dismantlesitewindow.cc'
> --- src/wui/dismantlesitewindow.cc 2014-09-10 14:48:40 +0000
> +++ src/wui/dismantlesitewindow.cc 2014-11-29 08:14:12 +0000
> @@ -78,11 +78,8 @@
> void DismantleSiteWindow::think()
> {
> BuildingWindow::think();
> -
> - const Widelands::DismantleSite & ds =
> - ref_cast<Widelands::DismantleSite, Widelands::Building>(building());
> -
> - m_progress->set_state(ds.get_built_per64k());
> + upcast(Widelands::DismantleSite, ds, &building());
> + m_progress->set_state(ds->get_built_per64k());
> }
>
>
>
> === modified file 'src/wui/encyclopedia_window.cc'
> --- src/wui/encyclopedia_window.cc 2014-10-28 14:57:52 +0000
> +++ src/wui/encyclopedia_window.cc 2014-11-29 08:14:12 +0000
> @@ -51,7 +51,8 @@
> using namespace Widelands;
>
> inline InteractivePlayer & EncyclopediaWindow::iaplayer() const {
> - return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> + upcast(InteractivePlayer, result, get_parent());
> + return *result;
> }
>
>
> @@ -141,10 +142,8 @@
> condTable.clear();
> const TribeDescr & tribe = iaplayer().player().tribe();
>
> - const ProductionSiteDescr::Programs & programs =
> - ref_cast<ProductionSiteDescr const, BuildingDescr const>
> - (*tribe.get_building_descr(prodSites.get_selected()))
> - .programs();
> + upcast(ProductionSiteDescr const, descr, tribe.get_building_descr(prodSites.get_selected()));
> + const ProductionSiteDescr::Programs & programs = descr->programs();
>
> // TODO(unknown): This needs reworking. A program can indeed produce iron even if
> // the program name is not any of produce_iron, smelt_iron, prog_iron
>
> === modified file 'src/wui/fieldaction.cc'
> --- src/wui/fieldaction.cc 2014-11-13 08:25:45 +0000
> +++ src/wui/fieldaction.cc 2014-11-29 08:14:12 +0000
> @@ -177,7 +177,8 @@
> ~FieldActionWindow();
>
> InteractiveBase & ibase() {
> - return ref_cast<InteractiveBase, UI::Panel>(*get_parent());
> + upcast(InteractiveBase, result, get_parent());
> + return *result;
> }
>
> void think() override;
> @@ -656,8 +657,8 @@
> */
> void FieldActionWindow::act_watch()
> {
> - show_watch_window
> - (ref_cast<InteractiveGameBase, InteractiveBase>(ibase()), m_node);
> + upcast(InteractiveGameBase, igbase, &ibase());
> + show_watch_window(*igbase, m_node);
> okdialog();
> }
>
> @@ -710,9 +711,10 @@
>
> if (ibase().is_building_road())
> ibase().finish_build_road();
> - else if (game)
> - ref_cast<InteractivePlayer, InteractiveBase>(ibase())
> - .set_flag_to_connect(m_node);
> + else if (game) {
> + upcast(InteractivePlayer, iaplayer, &ibase());
> + iaplayer->set_flag_to_connect(m_node);
> + }
>
> okdialog();
> }
> @@ -734,22 +736,22 @@
> {
> okdialog();
> Widelands::EditorGameBase & egbase = ibase().egbase();
> + upcast(Game, game, &egbase);
> + upcast(InteractivePlayer, iaplayer, &ibase());
> +
> if (upcast(Widelands::Flag, flag, m_node.field->get_immovable())) {
> if (Building * const building = flag->get_building()) {
> if (building->get_playercaps() & Building::PCap_Bulldoze) {
> if (get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL)) {
> - ref_cast<Game, EditorGameBase>(egbase).send_player_bulldoze
> + game->send_player_bulldoze
> (*flag, get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL));
> }
> else {
> - show_bulldoze_confirm
> - (ref_cast<InteractivePlayer, InteractiveBase>(ibase()),
> - *building,
> - flag);
> + show_bulldoze_confirm(*iaplayer, *building, flag);
> }
> }
> } else {
> - ref_cast<Game, EditorGameBase>(egbase).send_player_bulldoze
> + game->send_player_bulldoze
> (*flag, get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL));
> }
> }
> @@ -792,9 +794,11 @@
> void FieldActionWindow::act_removeroad()
> {
> Widelands::EditorGameBase & egbase = ibase().egbase();
> - if (upcast(Widelands::Road, road, egbase.map().get_immovable(m_node)))
> - ref_cast<Game, EditorGameBase>(egbase).send_player_bulldoze
> + if (upcast(Widelands::Road, road, egbase.map().get_immovable(m_node))) {
> + upcast(Game, game, &ibase().egbase());
> + game->send_player_bulldoze
> (*road, get_key_state(SDL_SCANCODE_LCTRL) || get_key_state(SDL_SCANCODE_RCTRL));
> + }
> okdialog();
> }
>
> @@ -806,15 +810,12 @@
> */
> void FieldActionWindow::act_build(Widelands::BuildingIndex idx)
> {
> - Widelands::Game & game = ref_cast<Game, EditorGameBase>(ibase().egbase());
> - game.send_player_build
> - (ref_cast<InteractivePlayer, InteractiveBase>(ibase()).player_number(),
> - m_node,
> - Widelands::BuildingIndex(idx));
> - ibase().reference_player_tribe
> - (m_plr->player_number(), &m_plr->tribe());
> - ref_cast<InteractivePlayer, InteractiveBase>(ibase()).set_flag_to_connect
> - (game.map().br_n(m_node));
> + upcast(Game, game, &ibase().egbase());
> + upcast(InteractivePlayer, iaplayer, &ibase());
> +
> + game->send_player_build(iaplayer->player_number(), m_node, Widelands::BuildingIndex(idx));
> + ibase().reference_player_tribe(m_plr->player_number(), &m_plr->tribe());
> + iaplayer->set_flag_to_connect(game->map().br_n(m_node));
> okdialog();
> }
>
> @@ -848,10 +849,10 @@
> */
> void FieldActionWindow::act_geologist()
> {
> - Game & game = ref_cast<Game, EditorGameBase>(ibase().egbase());
> - if (upcast(Widelands::Flag, flag, game.map().get_immovable(m_node)))
> - game.send_player_flagaction (*flag);
> -
> + upcast(Game, game, &ibase().egbase());
> + if (upcast(Widelands::Flag, flag, game->map().get_immovable(m_node))) {
> + game->send_player_flagaction (*flag);
> + }
> okdialog();
> }
>
> @@ -863,15 +864,16 @@
> */
> void FieldActionWindow::act_attack ()
> {
> - Game & game = ref_cast<Game, EditorGameBase>(ibase().egbase());
> -
> assert(m_attack_box);
> - if (upcast(Building, building, game.map().get_immovable(m_node)))
> - if (m_attack_box->soldiers() > 0)
> - game.send_player_enemyflagaction(
> + upcast(Game, game, &ibase().egbase());
> + if (upcast(Building, building, game->map().get_immovable(m_node)))
> + if (m_attack_box->soldiers() > 0) {
> + upcast(InteractivePlayer const, iaplayer, &ibase());
> + game->send_player_enemyflagaction(
> building->base_flag(),
> - ref_cast<const InteractivePlayer, const InteractiveBase>(ibase()).player_number(),
> + iaplayer->player_number(),
> m_attack_box->soldiers() /* number of soldiers */);
> + }
> okdialog();
> }
>
> @@ -933,8 +935,8 @@
> finish = true;
> else if (dynamic_cast<const Widelands::Road *>(i))
> if (player->get_buildcaps(target) & Widelands::BUILDCAPS_FLAG) {
> - ref_cast<Game, EditorGameBase>(player->egbase())
> - .send_player_build_flag(player->player_number(), target);
> + upcast(Game, game, &player->egbase());
> + game->send_player_build_flag(player->player_number(), target);
> finish = true;
> }
> if (finish)
>
> === modified file 'src/wui/game_debug_ui.cc'
> --- src/wui/game_debug_ui.cc 2014-10-27 10:14:10 +0000
> +++ src/wui/game_debug_ui.cc 2014-11-29 08:14:12 +0000
> @@ -133,7 +133,8 @@
> MapObjectDebugWindow(InteractiveBase & parent, Widelands::MapObject &);
>
> InteractiveBase & ibase() {
> - return ref_cast<InteractiveBase, UI::Panel>(*get_parent());
> + upcast(InteractiveBase, result, get_parent());
> + return *result;
> }
>
> void think() override;
> @@ -212,7 +213,8 @@
> FieldDebugWindow(InteractiveBase & parent, Widelands::Coords);
>
> InteractiveBase & ibase() {
> - return ref_cast<InteractiveBase, UI::Panel>(*get_parent());
> + upcast(InteractiveBase, result, get_parent());
> + return *result;
> }
>
> void think() override;
> @@ -273,9 +275,7 @@
> UI::Window::think();
>
> // Select information about the field itself
> - const Widelands::EditorGameBase & egbase =
> - ref_cast<InteractiveBase const, UI::Panel const>(*get_parent())
> - .egbase();
> + const Widelands::EditorGameBase & egbase = ibase().egbase();
> {
> Widelands::PlayerNumber const owner = m_coords.field->get_owned_by();
> str += (boost::format("(%i, %i)\nheight: %u\nowner: %u\n")
>
> === modified file 'src/wui/game_main_menu_save_game.cc'
> --- src/wui/game_main_menu_save_game.cc 2014-10-27 10:31:04 +0000
> +++ src/wui/game_main_menu_save_game.cc 2014-11-29 08:14:12 +0000
> @@ -35,7 +35,8 @@
> #include "wui/interactive_gamebase.h"
>
> InteractiveGameBase & GameMainMenuSaveGame::igbase() {
> - return ref_cast<InteractiveGameBase, UI::Panel>(*get_parent());
> + upcast(InteractiveGameBase, result, get_parent());
> + return *result;
> }
>
> #define WINDOW_WIDTH 440
> @@ -262,7 +263,8 @@
> {}
>
> GameMainMenuSaveGame & menu_save_game() {
> - return ref_cast<GameMainMenuSaveGame, UI::Panel>(*get_parent());
> + upcast(GameMainMenuSaveGame, result, get_parent());
> + return *result;
> }
>
>
> @@ -328,7 +330,8 @@
> void pressed_yes() override
> {
> g_fs->fs_unlink(m_filename);
> - ref_cast<GameMainMenuSaveGame, UI::Panel>(*get_parent()).fill_list();
> + upcast(GameMainMenuSaveGame, panel, get_parent());
> + panel->fill_list();
> die();
> }
>
>
> === modified file 'src/wui/game_main_menu_save_game.h'
> --- src/wui/game_main_menu_save_game.h 2014-09-10 13:03:40 +0000
> +++ src/wui/game_main_menu_save_game.h 2014-11-29 08:14:12 +0000
> @@ -20,7 +20,6 @@
> #ifndef WL_WUI_GAME_MAIN_MENU_SAVE_GAME_H
> #define WL_WUI_GAME_MAIN_MENU_SAVE_GAME_H
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "ui_basic/button.h"
> #include "ui_basic/editbox.h"
>
> === modified file 'src/wui/game_message_menu.cc'
> --- src/wui/game_message_menu.cc 2014-11-22 10:18:20 +0000
> +++ src/wui/game_message_menu.cc 2014-11-29 08:14:12 +0000
> @@ -21,7 +21,7 @@
>
> #include <boost/bind.hpp>
>
> -#include "base/deprecated.h"
> +#include "base/macros.h"
> #include "base/time_string.h"
> #include "graphic/graphic.h"
> #include "logic/instances.h"
> @@ -35,7 +35,8 @@
> using Widelands::MessageQueue;
>
> inline InteractivePlayer & GameMessageMenu::iplayer() const {
> - return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> + upcast(InteractivePlayer, result, get_parent());
> + return *result;
> }
>
>
>
> === modified file 'src/wui/game_message_menu.h'
> --- src/wui/game_message_menu.h 2014-10-14 06:30:20 +0000
> +++ src/wui/game_message_menu.h 2014-11-29 08:14:12 +0000
> @@ -20,7 +20,6 @@
> #ifndef WL_WUI_GAME_MESSAGE_MENU_H
> #define WL_WUI_GAME_MESSAGE_MENU_H
>
> -#include "base/deprecated.h"
> #include "base/i18n.h"
> #include "logic/message_queue.h"
> #include "ui_basic/button.h"
>
> === modified file 'src/wui/game_objectives_menu.cc'
> --- src/wui/game_objectives_menu.cc 2014-10-27 10:31:04 +0000
> +++ src/wui/game_objectives_menu.cc 2014-11-29 08:14:12 +0000
> @@ -31,7 +31,8 @@
>
>
> inline InteractivePlayer & GameObjectivesMenu::iplayer() const {
> - return ref_cast<InteractivePlayer, UI::Panel>(*get_parent());
> + upcast(InteractivePlayer, result, get_parent());
> + return *result;
> }
>
>
>
> === modified file 'src/wui/general_statistics_menu.cc'
> --- src/wui/general_statistics_menu.cc 2014-11-22 11:32:06 +0000
> +++ src/wui/general_statistics_menu.cc 2014-11-29 08:14:12 +0000
> @@ -284,7 +284,8 @@
> }
>
> GeneralStatisticsMenu::~GeneralStatisticsMenu() {
> - Game & game = ref_cast<InteractiveGameBase, UI::Panel>(*get_parent()).game();
> + upcast(InteractiveGameBase, igbase, get_parent());
> + Game & game = igbase->game();
> if (game.is_loaded()) {
> // Save informations for recreation, if window is reopened
> m_my_registry->selected_information = m_selected_information;
> @@ -320,9 +321,8 @@
> * The radiogroup has changed
> */
> void GeneralStatisticsMenu::radiogroup_changed(int32_t const id) {
> - size_t const statistics_size =
> - ref_cast<InteractiveGameBase, UI::Panel>(*get_parent()).game()
> - .get_general_statistics().size();
> + upcast(InteractiveGameBase, igbase, get_parent());
> + size_t const statistics_size = igbase->game().get_general_statistics().size();
> for (uint32_t i = 0; i < statistics_size; ++i)
> if (m_cbs[i]) {
> m_plot.show_plot
>
> === modified file 'src/wui/interactive_base.cc'
> --- src/wui/interactive_base.cc 2014-11-27 11:15:34 +0000
> +++ src/wui/interactive_base.cc 2014-11-29 08:14:12 +0000
> @@ -446,7 +446,8 @@
> ((fps_format %
> (1000.0 / m_frametime) % (1000.0 / (m_avg_usframetime / 1000)))
> .str(), UI_FONT_SIZE_SMALL);
> - dst.blit(Point(5, (is_game) ? 25 : 5), UI::g_fh1->render(fps_text), BlendMode::UseAlpha, UI::Align_Left);
> + dst.blit(Point(5, (is_game) ? 25 : 5),
> + UI::g_fh1->render(fps_text), BlendMode::UseAlpha, UI::Align_Left);
> }
> }
>
>
> === modified file 'src/wui/interactive_gamebase.cc'
> --- src/wui/interactive_gamebase.cc 2014-09-20 09:37:47 +0000
> +++ src/wui/interactive_gamebase.cc 2014-11-29 08:14:12 +0000
> @@ -53,7 +53,8 @@
>
> Widelands::Game & InteractiveGameBase:: game() const
> {
> - return ref_cast<Widelands::Game, Widelands::EditorGameBase>(egbase());
> + upcast(Widelands::Game, result, &egbase());
> + return *result;
> }
>
> void InteractiveGameBase::set_chat_provider(ChatProvider & chat)
>
> === modified file 'src/wui/interactive_player.cc'
> --- src/wui/interactive_player.cc 2014-11-23 14:34:38 +0000
> +++ src/wui/interactive_player.cc 2014-11-29 08:14:12 +0000
> @@ -304,8 +304,8 @@
> (Widelands::MessageId const id, const Widelands::Message & message)
> {
> m_message_menu.create();
> - ref_cast<GameMessageMenu, UI::UniqueWindow>(*m_message_menu.window)
> - .show_new_message(id, message);
> + upcast(GameMessageMenu, menu, m_message_menu.window);
> + menu->show_new_message(id, message);
> }
>
>
> @@ -470,10 +470,9 @@
> for (uint16_t x = 0; x < extent.w; ++x)
> overlay_manager.recalc_field_overlays
> (map.get_fcoords(Widelands::Coords(x, y)));
> - if
> - (UI::UniqueWindow * const building_statistics_window =
> - m_mainm_windows.building_stats.window)
> - ref_cast<BuildingStatisticsMenu, UI::UniqueWindow>
> - (*building_statistics_window)
> - .update();
> + if (UI::UniqueWindow * const building_statistics_window =
> + m_mainm_windows.building_stats.window) {
> + upcast(BuildingStatisticsMenu, menu, building_statistics_window);
> + menu->update();
> + }
> }
>
> === modified file 'src/wui/interactive_spectator.cc'
> --- src/wui/interactive_spectator.cc 2014-11-23 14:34:38 +0000
> +++ src/wui/interactive_spectator.cc 2014-11-29 08:14:12 +0000
> @@ -275,8 +275,8 @@
> if (!m_chat.window)
> GameChatMenu::create_chat_console(this, m_chat, *m_chatProvider);
>
> - ref_cast<GameChatMenu, UI::UniqueWindow>(*m_chat.window)
> - .enter_chat_message();
> + // NOCOM(#gunchleoc): Compiler did not like upcast. Is dynamic_cast OK?
Yes, I think it is preferable in all places where you are sure about what you are casting into. dynamic_cast is a code smell in the same sense that typeid is - it shows that your design is not quite right if you have to switch on types at runtime. But this is only about getting rid of our own invented stuff.
> + dynamic_cast<GameChatMenu*>(m_chat.window)->enter_chat_message();
> return true;
>
> default:
>
> === modified file 'src/wui/militarysitewindow.cc'
> --- src/wui/militarysitewindow.cc 2014-09-10 13:03:40 +0000
> +++ src/wui/militarysitewindow.cc 2014-11-29 08:14:12 +0000
> @@ -38,7 +38,8 @@
> UI::Window * & registry);
>
> MilitarySite & militarysite() {
> - return ref_cast<MilitarySite, Widelands::Building>(building());
> + upcast(MilitarySite, result, &building());
> + return *result;
> }
>
> protected:
>
> === modified file 'src/wui/minimap.cc'
> --- src/wui/minimap.cc 2014-11-24 07:10:03 +0000
> +++ src/wui/minimap.cc 2014-11-29 08:14:12 +0000
> @@ -98,7 +98,8 @@
>
> m_ibase.egbase().map().normalize_coords(c);
>
> - ref_cast<MiniMap, UI::Panel>(*get_parent()).warpview(c.x * TRIANGLE_WIDTH, c.y * TRIANGLE_HEIGHT);
> + upcast(MiniMap, minimap, get_parent());
> + minimap->warpview(c.x * TRIANGLE_WIDTH, c.y * TRIANGLE_HEIGHT);
>
> return true;
> }
>
> === modified file 'src/wui/productionsitewindow.h'
> --- src/wui/productionsitewindow.h 2014-09-10 13:03:40 +0000
> +++ src/wui/productionsitewindow.h 2014-11-29 08:14:12 +0000
> @@ -31,7 +31,8 @@
> UI::Window * & registry);
>
> Widelands::ProductionSite & productionsite() {
> - return ref_cast<Widelands::ProductionSite, Widelands::Building>(building());
> + upcast(Widelands::ProductionSite, result, &building());
> + return *result;
> }
> void update_worker_table();
> protected:
>
> === modified file 'src/wui/shipwindow.cc'
> --- src/wui/shipwindow.cc 2014-11-22 10:18:20 +0000
> +++ src/wui/shipwindow.cc 2014-11-29 08:14:12 +0000
> @@ -295,7 +295,8 @@
> m_igbase.game().send_player_sink_ship(m_ship);
> }
> else {
> - show_ship_sink_confirm(ref_cast<InteractivePlayer, InteractiveGameBase>(m_igbase), m_ship);
> + upcast(InteractivePlayer, iaplayer, &m_igbase);
> + show_ship_sink_confirm(*iaplayer, m_ship);
> }
> }
>
> @@ -306,8 +307,8 @@
> m_igbase.game().send_player_cancel_expedition_ship(m_ship);
> }
> else {
> - show_ship_cancel_expedition_confirm
> - (ref_cast<InteractivePlayer, InteractiveGameBase>(m_igbase), m_ship);
> + upcast(InteractivePlayer, iaplayer, &m_igbase);
> + show_ship_cancel_expedition_confirm(*iaplayer, m_ship);
> }
> }
>
>
> === modified file 'src/wui/soldierlist.cc'
> --- src/wui/soldierlist.cc 2014-11-22 10:18:20 +0000
> +++ src/wui/soldierlist.cc 2014-11-29 08:14:12 +0000
> @@ -22,7 +22,6 @@
> #include <boost/bind.hpp>
> #include <boost/format.hpp>
>
> -#include "base/deprecated.h"
> #include "base/macros.h"
> #include "graphic/font.h"
> #include "graphic/graphic.h"
>
> === modified file 'src/wui/trainingsitewindow.cc'
> --- src/wui/trainingsitewindow.cc 2014-09-10 13:03:40 +0000
> +++ src/wui/trainingsitewindow.cc 2014-11-29 08:14:12 +0000
> @@ -37,7 +37,8 @@
> (InteractiveGameBase & parent, TrainingSite &, UI::Window * & registry);
>
> TrainingSite & trainingsite() {
> - return ref_cast<TrainingSite, Widelands::Building>(building());
> + upcast(TrainingSite, result, &building());
> + return *result;
> }
>
> protected:
>
> === modified file 'src/wui/transport_ui.cc'
> --- src/wui/transport_ui.cc 2014-11-22 11:32:06 +0000
> +++ src/wui/transport_ui.cc 2014-11-29 08:14:12 +0000
> @@ -159,10 +159,10 @@
> m_economy.ware_target_quantity(id);
> if (1 < tq.permanent) {
> Widelands::Player & player = m_economy.owner();
> - Game & game = ref_cast<Game, EditorGameBase>(player.egbase());
> - game.send_player_command
> + upcast(Game, game, &player.egbase());
> + game->send_player_command
> (*new Widelands::CmdSetWareTargetQuantity
> - (game.get_gametime(), player.player_number(),
> + (game->get_gametime(), player.player_number(),
> player.get_economy_number(&m_economy), id,
> tq.permanent - 1));
> }
> @@ -181,10 +181,10 @@
> const Economy::TargetQuantity & tq =
> m_economy.ware_target_quantity(id);
> Widelands::Player & player = m_economy.owner();
> - Game & game = ref_cast<Game, EditorGameBase>(player.egbase());
> - game.send_player_command
> + upcast(Game, game, &player.egbase());
> + game->send_player_command
> (*new Widelands::CmdSetWareTargetQuantity
> - (game.get_gametime(), player.player_number(),
> + (game->get_gametime(), player.player_number(),
> player.get_economy_number(&m_economy), id,
> tq.permanent + 1));
> }
> @@ -200,10 +200,10 @@
> {
> if (m_display.ware_selected(id)) {
> Widelands::Player & player = m_economy.owner();
> - Game & game = ref_cast<Game, EditorGameBase>(player.egbase());
> - game.send_player_command
> + upcast(Game, game, &player.egbase());
> + game->send_player_command
> (*new Widelands::CmdResetWareTargetQuantity
> - (game.get_gametime(), player.player_number(),
> + (game->get_gametime(), player.player_number(),
> player.get_economy_number(&m_economy), id));
> }
> }
> @@ -256,10 +256,10 @@
> m_economy.worker_target_quantity(id);
> if (1 < tq.permanent) {
> Widelands::Player & player = m_economy.owner();
> - Game & game = ref_cast<Game, EditorGameBase>(player.egbase());
> - game.send_player_command
> + upcast(Game, game, &player.egbase());
> + game->send_player_command
> (*new Widelands::CmdSetWorkerTargetQuantity
> - (game.get_gametime(), player.player_number(),
> + (game->get_gametime(), player.player_number(),
> player.get_economy_number(&m_economy), id,
> tq.permanent - 1));
> }
> @@ -278,10 +278,10 @@
> const Economy::TargetQuantity & tq =
> m_economy.worker_target_quantity(id);
> Widelands::Player & player = m_economy.owner();
> - Game & game = ref_cast<Game, EditorGameBase>(player.egbase());
> - game.send_player_command
> + upcast(Game, game, &player.egbase());
> + game->send_player_command
> (*new Widelands::CmdSetWorkerTargetQuantity
> - (game.get_gametime(), player.player_number(),
> + (game->get_gametime(), player.player_number(),
> player.get_economy_number(&m_economy), id,
> tq.permanent + 1));
> }
> @@ -296,10 +296,10 @@
> {
> if (m_display.ware_selected(id)) {
> Widelands::Player & player = m_economy.owner();
> - Game & game = ref_cast<Game, EditorGameBase>(player.egbase());
> - game.send_player_command
> + upcast(Game, game, &player.egbase());
> + game->send_player_command
> (*new Widelands::CmdResetWorkerTargetQuantity
> - (game.get_gametime(), player.player_number(),
> + (game->get_gametime(), player.player_number(),
> player.get_economy_number(&m_economy), id));
> }
> }
> @@ -313,11 +313,10 @@
> // users can register for change updates. The registry should be
> // moved to InteractivePlayer or some other UI component.
> void Economy::show_options_window() {
> - if (m_optionswindow_registry.window)
> + if (m_optionswindow_registry.window) {
> m_optionswindow_registry.window->move_to_top();
> - else
> - new EconomyOptionsWindow
> - (ref_cast<InteractiveGameBase, InteractiveBase>
> - (*owner().egbase().get_ibase()),
> - *this);
> + } else {
> + upcast(InteractiveGameBase, igbase, owner().egbase().get_ibase());
> + new EconomyOptionsWindow(*igbase, *this);
> + }
> }
>
> === modified file 'src/wui/warehousewindow.cc'
> --- src/wui/warehousewindow.cc 2014-09-10 13:03:40 +0000
> +++ src/wui/warehousewindow.cc 2014-11-29 08:14:12 +0000
> @@ -176,7 +176,8 @@
> (InteractiveGameBase & parent, Warehouse &, UI::Window * & registry);
>
> Warehouse & warehouse() {
> - return ref_cast<Warehouse, Widelands::Building>(building());
> + upcast(Warehouse, result, &building());
> + return *result;
> }
> };
>
>
> === modified file 'src/wui/watchwindow.cc'
> --- src/wui/watchwindow.cc 2014-11-22 11:32:06 +0000
> +++ src/wui/watchwindow.cc 2014-11-29 08:14:12 +0000
> @@ -56,7 +56,8 @@
> ~WatchWindow();
>
> Widelands::Game & game() const {
> - return ref_cast<InteractiveGameBase, UI::Panel>(*get_parent()).game();
> + upcast(InteractiveGameBase, igbase, get_parent());
> + return igbase->game();
> }
>
> boost::signals2::signal<void (Point)> warp_mainview;
>
--
https://code.launchpad.net/~widelands-dev/widelands/delete_deprecated/+merge/243174
Your team Widelands Developers is subscribed to branch lp:~widelands-dev/widelands/delete_deprecated.
References