Author: dhains
Date: Wed Jun 18 03:59:16 2008
New Revision: 27274

URL: http://svn.gna.org/viewcvs/wesnoth?rev=27274&view=rev
Log:
Changed ai objects to use intrusive pointers as opposed to shared pointers

Modified:
    trunk/src/ai.cpp
    trunk/src/ai.hpp
    trunk/src/formula_ai.cpp
    trunk/src/playsingle_controller.cpp

Modified: trunk/src/ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai.cpp?rev=27274&r1=27273&r2=27274&view=diff
==============================================================================
--- trunk/src/ai.cpp (original)
+++ trunk/src/ai.cpp Wed Jun 18 03:59:16 2008
@@ -2367,12 +2367,12 @@
        inputs->push_back(formula_input("is_surrounded", FORMULA_READ_ONLY));
 }
 
-std::map<std::string, boost::shared_ptr<ai_interface> > ai_manager::ais = 
std::map<std::string, boost::shared_ptr<ai_interface> >();
-
-boost::shared_ptr<ai_interface> ai_manager::get_ai(ai_interface::info& 
ai_info, std::string ai_key, std::string ai_algo) {
+ai_manager::ai_map ai_manager::ais = ai_manager::ai_map();
+
+boost::intrusive_ptr<ai_interface> ai_manager::get_ai(ai_interface::info& 
ai_info, std::string ai_key, std::string ai_algo) {
        ai_map::const_iterator itor = ais.find(ai_key);
        if(itor == ais.end()) {
-               boost::shared_ptr<ai_interface> new_ai(create_ai(ai_algo, 
ai_info));
+               boost::intrusive_ptr<ai_interface> new_ai(create_ai(ai_algo, 
ai_info));
                ai_map::value_type new_ai_pair(ai_key, new_ai);
                itor = ais.insert(new_ai_pair).first;
        } else {

Modified: trunk/src/ai.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai.hpp?rev=27274&r1=27273&r2=27274&view=diff
==============================================================================
--- trunk/src/ai.hpp (original)
+++ trunk/src/ai.hpp Wed Jun 18 03:59:16 2008
@@ -328,10 +328,10 @@
 
 class ai_manager {
 
-       typedef std::map<std::string, boost::shared_ptr<ai_interface> > ai_map;
+       typedef std::map<std::string, boost::intrusive_ptr<ai_interface> > 
ai_map;
 
        public: 
-               static boost::shared_ptr<ai_interface> 
get_ai(ai_interface::info&, std::string, std::string);
+               static boost::intrusive_ptr<ai_interface> 
get_ai(ai_interface::info&, std::string, std::string);
 
        private:
                static ai_map ais;

Modified: trunk/src/formula_ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.cpp?rev=27274&r1=27273&r2=27274&view=diff
==============================================================================
--- trunk/src/formula_ai.cpp (original)
+++ trunk/src/formula_ai.cpp Wed Jun 18 03:59:16 2008
@@ -932,16 +932,15 @@
 formula_ai::formula_ai(info& i) : ai(i), move_maps_valid_(false), 
function_table(*this)
 {
        //make sure we don't run out of refcount
-       add_ref();
        vars_.add_ref();
 }
 
 void formula_ai::new_turn() 
 {
        move_maps_valid_ = false;
-
        ai::new_turn();
 }
+
 void formula_ai::play_turn()
 {
        const config& ai_param = current_team().ai_parameters();

Modified: trunk/src/playsingle_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/playsingle_controller.cpp?rev=27274&r1=27273&r2=27274&view=diff
==============================================================================
--- trunk/src/playsingle_controller.cpp (original)
+++ trunk/src/playsingle_controller.cpp Wed Jun 18 03:59:16 2008
@@ -18,6 +18,7 @@
  *  Logic for single-player game.
  */
 
+#include <boost/intrusive_ptr.hpp>
 #include "playsingle_controller.hpp"
 
 #include "construct_dialog.hpp"
@@ -707,9 +708,13 @@
        ai_interface::info 
ai_info(*gui_,map_,units_,teams_,player_number_,status_, turn_data, gamestate_);
        std::string ai_algorithm = current_team().ai_algorithm();
 
-       boost::shared_ptr<ai_interface> ai_obj(ai_algorithm == "formula_ai" ? 
-                       
ai_manager::get_ai(ai_info,current_team().name(),ai_algorithm) : 
-                       boost::shared_ptr<ai_interface> 
(create_ai(ai_algorithm,ai_info)));
+       boost::intrusive_ptr<ai_interface> ai_obj;
+
+       if(ai_algorithm == "formula_ai") {
+               ai_obj = ai_manager::get_ai(ai_info,current_team().name(), 
ai_algorithm);
+       } else {
+               ai_obj = create_ai(ai_algorithm, ai_info);
+       }
 
        ai_obj->user_interact().attach_handler(this);
        ai_obj->unit_recruited().attach_handler(this);


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to