Deployed unique_ptrs in a bunch more places
The changes from stack::push to stack::emplace in ai::handler are since the unique_ptrs make the copy ctor malformed.
This commit is contained in:
parent
e52d532cae
commit
19bbfedb32
8 changed files with 28 additions and 55 deletions
|
@ -65,7 +65,7 @@ void addons_client::connect()
|
|||
utils::string_map i18n_symbols;
|
||||
i18n_symbols["server_address"] = addr_;
|
||||
|
||||
conn_ = new network_asio::connection(host_, port_);
|
||||
conn_.reset(new network_asio::connection(host_, port_));
|
||||
|
||||
this->wait_for_transfer_done(
|
||||
vgettext("Connecting to $server_address|...", i18n_symbols));
|
||||
|
@ -499,7 +499,7 @@ void addons_client::wait_for_transfer_done(const std::string& status_message, bo
|
|||
else
|
||||
cd.reset(new read_addon_connection_data{ *conn_ });
|
||||
if(!stat_) {
|
||||
stat_ = new network_transmission(*cd, _("Add-ons Manager"), status_message);
|
||||
stat_.reset(new network_transmission(*cd, _("Add-ons Manager"), status_message));
|
||||
} else {
|
||||
stat_->set_subtitle(status_message);
|
||||
stat_->set_connection_data(*cd);
|
||||
|
@ -510,9 +510,3 @@ void addons_client::wait_for_transfer_done(const std::string& status_message, bo
|
|||
throw user_exit();
|
||||
}
|
||||
}
|
||||
|
||||
addons_client::~addons_client()
|
||||
{
|
||||
delete stat_; // stat_ depends on conn_, so it must be destroyed first!
|
||||
delete conn_;
|
||||
}
|
||||
|
|
|
@ -52,8 +52,6 @@ public:
|
|||
*/
|
||||
addons_client(CVideo& v, const std::string& address);
|
||||
|
||||
~addons_client();
|
||||
|
||||
/**
|
||||
* Try to establish a connection to the add-ons server.
|
||||
*/
|
||||
|
@ -122,8 +120,8 @@ private:
|
|||
std::string addr_;
|
||||
std::string host_;
|
||||
std::string port_;
|
||||
network_asio::connection* conn_;
|
||||
gui2::dialogs::network_transmission* stat_;
|
||||
std::unique_ptr<network_asio::connection> conn_;
|
||||
std::unique_ptr<gui2::dialogs::network_transmission> stat_;
|
||||
std::string last_error_;
|
||||
|
||||
/**
|
||||
|
|
|
@ -116,7 +116,7 @@ void attack_analysis::analyze(const gamemap& map, unit_map& units,
|
|||
}
|
||||
|
||||
bool from_cache = false;
|
||||
battle_context *bc;
|
||||
std::unique_ptr<battle_context> bc;
|
||||
|
||||
// This cache is only about 99% correct, but speeds up evaluation by about 1000 times.
|
||||
// We recalculate when we actually attack.
|
||||
|
@ -128,15 +128,13 @@ void attack_analysis::analyze(const gamemap& map, unit_map& units,
|
|||
static_cast<int>(up->attacks().size())) {
|
||||
|
||||
from_cache = true;
|
||||
bc = new battle_context(usc->second.first, usc->second.second);
|
||||
bc.reset(new battle_context(usc->second.first, usc->second.second));
|
||||
} else {
|
||||
bc = new battle_context(units, m->second, target, -1, -1, m_aggression, prev_def);
|
||||
bc.reset(new battle_context(units, m->second, target, -1, -1, m_aggression, prev_def));
|
||||
}
|
||||
const combatant &att = bc->get_attacker_combatant(prev_def);
|
||||
const combatant &def = bc->get_defender_combatant(prev_def);
|
||||
|
||||
delete prev_bc;
|
||||
prev_bc = bc;
|
||||
prev_def = &bc->get_defender_combatant(prev_def);
|
||||
|
||||
if ( !from_cache ) {
|
||||
|
@ -245,7 +243,6 @@ void attack_analysis::analyze(const gamemap& map, unit_map& units,
|
|||
avg_damage_inflicted += defend_it->hitpoints() - prev_def->average_hp(map.gives_healing(defend_it->get_location()));
|
||||
}
|
||||
|
||||
delete prev_bc;
|
||||
terrain_quality /= resources_used;
|
||||
|
||||
// Restore the units to their original positions.
|
||||
|
|
|
@ -82,19 +82,19 @@ holder::holder( side_number side, const config &cfg )
|
|||
void holder::init( side_number side )
|
||||
{
|
||||
if (side_context_ == nullptr) {
|
||||
side_context_ = new side_context_impl(side,cfg_);
|
||||
side_context_.reset(new side_context_impl(side,cfg_));
|
||||
} else {
|
||||
side_context_->set_side(side);
|
||||
}
|
||||
if (readonly_context_ == nullptr){
|
||||
readonly_context_ = new readonly_context_impl(*side_context_,cfg_);
|
||||
readonly_context_.reset(new readonly_context_impl(*side_context_,cfg_));
|
||||
readonly_context_->on_readonly_context_create();
|
||||
}
|
||||
if (readwrite_context_ == nullptr){
|
||||
readwrite_context_ = new readwrite_context_impl(*readonly_context_,cfg_);
|
||||
readwrite_context_.reset(new readwrite_context_impl(*readonly_context_,cfg_));
|
||||
}
|
||||
if (default_ai_context_ == nullptr){
|
||||
default_ai_context_ = new default_ai_context_impl(*readwrite_context_,cfg_);
|
||||
default_ai_context_.reset(new default_ai_context_impl(*readwrite_context_,cfg_));
|
||||
}
|
||||
if (!this->ai_){
|
||||
ai_ = std::shared_ptr<ai_composite>(new ai_composite(*default_ai_context_,cfg_));
|
||||
|
@ -129,10 +129,6 @@ holder::~holder()
|
|||
LOG_AI_MANAGER << describe_ai() << "Managed AI will be deleted" << std::endl;
|
||||
}
|
||||
} catch (...) {}
|
||||
delete this->default_ai_context_;
|
||||
delete this->readwrite_context_;
|
||||
delete this->readonly_context_;
|
||||
delete this->side_context_;
|
||||
}
|
||||
|
||||
|
||||
|
@ -308,7 +304,7 @@ component* holder::get_component(component *root, const std::string &path) {
|
|||
|
||||
|
||||
manager::AI_map_of_stacks manager::ai_map_;
|
||||
game_info *manager::ai_info_;
|
||||
std::unique_ptr<game_info> manager::ai_info_;
|
||||
events::generic_event manager::user_interact_("ai_user_interact");
|
||||
events::generic_event manager::sync_network_("ai_sync_network");
|
||||
events::generic_event manager::tod_changed_("ai_tod_changed");
|
||||
|
@ -325,14 +321,13 @@ void manager::set_ai_info(const game_info& i)
|
|||
if (ai_info_!=nullptr){
|
||||
clear_ai_info();
|
||||
}
|
||||
ai_info_ = new game_info(i);
|
||||
ai_info_.reset(new game_info(i));
|
||||
registry::init();
|
||||
}
|
||||
|
||||
|
||||
void manager::clear_ai_info(){
|
||||
delete ai_info_;
|
||||
ai_info_ = nullptr;
|
||||
ai_info_.reset(nullptr);
|
||||
}
|
||||
|
||||
|
||||
|
@ -640,9 +635,8 @@ bool manager::add_ai_for_side_from_config( side_number side, const config& cfg,
|
|||
remove_ai_for_side(side);
|
||||
}
|
||||
|
||||
holder new_holder(side,parsed_cfg);
|
||||
std::stack<holder>& ai_stack_for_specific_side = get_or_create_ai_stack_for_side(side);
|
||||
ai_stack_for_specific_side.push(new_holder);
|
||||
ai_stack_for_specific_side.emplace(side, parsed_cfg);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -655,9 +649,8 @@ bool manager::add_ai_for_side( side_number side, const std::string& ai_algorithm
|
|||
}
|
||||
config cfg;
|
||||
cfg["ai_algorithm"] = ai_algorithm_type;
|
||||
holder new_holder(side,cfg);
|
||||
std::stack<holder>& ai_stack_for_specific_side = get_or_create_ai_stack_for_side(side);
|
||||
ai_stack_for_specific_side.push(new_holder);
|
||||
ai_stack_for_specific_side.emplace(side, cfg);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -806,8 +799,7 @@ holder& manager::get_active_ai_holder_for_side( side_number side )
|
|||
return ai_stack_for_specific_side.top();
|
||||
} else {
|
||||
config cfg = configuration::get_default_ai_parameters();
|
||||
holder new_holder(side, cfg);
|
||||
ai_stack_for_specific_side.push(new_holder);
|
||||
ai_stack_for_specific_side.emplace(side, cfg);
|
||||
return ai_stack_for_specific_side.top();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,10 +82,10 @@ private:
|
|||
|
||||
|
||||
composite_ai_ptr ai_;
|
||||
side_context *side_context_;
|
||||
readonly_context *readonly_context_;
|
||||
readwrite_context *readwrite_context_;
|
||||
default_ai_context *default_ai_context_;
|
||||
std::unique_ptr<side_context> side_context_;
|
||||
std::unique_ptr<readonly_context> readonly_context_;
|
||||
std::unique_ptr<readwrite_context> readwrite_context_;
|
||||
std::unique_ptr<default_ai_context> default_ai_context_;
|
||||
side_number side_;
|
||||
config cfg_;
|
||||
};
|
||||
|
@ -464,7 +464,7 @@ private:
|
|||
static AI_map_of_stacks ai_map_;
|
||||
static std::deque< command_history_item > history_;
|
||||
static long history_item_counter_;
|
||||
static game_info *ai_info_;
|
||||
static std::unique_ptr<game_info> ai_info_;
|
||||
|
||||
static events::generic_event map_changed_;
|
||||
static events::generic_event recruit_list_changed_;
|
||||
|
|
|
@ -81,7 +81,7 @@ namespace {
|
|||
lua_State* L;
|
||||
scoped_dialog* prev;
|
||||
static scoped_dialog* current;
|
||||
gui2::window* window;
|
||||
std::unique_ptr<gui2::window> window;
|
||||
typedef std::map<gui2::widget*, int> callback_map;
|
||||
callback_map callbacks;
|
||||
|
||||
|
@ -107,7 +107,6 @@ namespace {
|
|||
|
||||
scoped_dialog::~scoped_dialog()
|
||||
{
|
||||
delete window;
|
||||
current = prev;
|
||||
lua_pushstring(L, dlgclbkKey);
|
||||
lua_pushvalue(L, -1);
|
||||
|
@ -131,7 +130,7 @@ static gui2::widget* find_widget(lua_State* L, int i, bool readonly)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
gui2::widget* w = scoped_dialog::current->window;
|
||||
gui2::widget* w = scoped_dialog::current->window.get();
|
||||
for(; !lua_isnoneornil(L, i); ++i)
|
||||
{
|
||||
#ifdef GUI2_EXPERIMENTAL_LISTBOX
|
||||
|
|
|
@ -117,7 +117,7 @@ bool terrain_filter::match_internal(const map_location& loc, const unit* ref_uni
|
|||
|
||||
if(cfg_.has_attribute("terrain")) {
|
||||
if(cache_.parsed_terrain == nullptr) {
|
||||
cache_.parsed_terrain = new t_translation::ter_match(cfg_["terrain"]);
|
||||
cache_.parsed_terrain.reset(new t_translation::ter_match(cfg_["terrain"]));
|
||||
}
|
||||
if(!cache_.parsed_terrain->is_empty) {
|
||||
const t_translation::terrain_code letter = fc_->get_disp_context().map().get_terrain_info(loc).number();
|
||||
|
@ -563,7 +563,7 @@ void terrain_filter::get_locs_impl(std::set<map_location>& locs, const unit* ref
|
|||
//handle location filter
|
||||
if(cfg_.has_child("filter_adjacent_location")) {
|
||||
if(cache_.adjacent_matches == nullptr) {
|
||||
cache_.adjacent_matches = new std::vector<std::set<map_location> >();
|
||||
cache_.adjacent_matches.reset(new std::vector<std::set<map_location>>());
|
||||
}
|
||||
const vconfig::child_list& adj_cfgs = cfg_.get_children("filter_adjacent_location");
|
||||
for (unsigned i = 0; i < adj_cfgs.size(); ++i) {
|
||||
|
@ -664,8 +664,3 @@ config terrain_filter::to_config() const
|
|||
{
|
||||
return cfg_.get_config();
|
||||
}
|
||||
|
||||
terrain_filter::terrain_filter_cache::~terrain_filter_cache() {
|
||||
delete parsed_terrain;
|
||||
delete adjacent_matches;
|
||||
}
|
||||
|
|
|
@ -84,13 +84,11 @@ private:
|
|||
struct terrain_filter_cache {
|
||||
terrain_filter_cache();
|
||||
|
||||
~terrain_filter_cache();
|
||||
|
||||
//parsed_terrain: optimizes handling of terrain="..."
|
||||
t_translation::ter_match *parsed_terrain;
|
||||
std::unique_ptr<t_translation::ter_match> parsed_terrain;
|
||||
|
||||
//adjacent_matches: optimize handling of [filter_adjacent_location] for get_locations()
|
||||
std::vector< std::set<map_location> > *adjacent_matches;
|
||||
std::unique_ptr<std::vector<std::set<map_location>>> adjacent_matches;
|
||||
|
||||
//adjacent_match_cache: optimize handling of [filter_adjacent_location] for match()
|
||||
std::vector< std::pair<terrain_filter, std::map<map_location,bool> > > adjacent_match_cache;
|
||||
|
|
Loading…
Add table
Reference in a new issue