Author: crab
Date: Sat May  2 03:04:19 2009
New Revision: 35406

URL: http://svn.gna.org/viewcvs/wesnoth?rev=35406&view=rev
Log:
Swapped places of ai_interface and ai_readwrite_context in ai superclass 
hierarchy. This will allow to make the ai module interface more independent 
from the ai module implementation and reduce compile times. For now, only 
ai/ai_manager.hpp (class managing the ai lifecycle), ai/ai_interface.hpp 
(individual ai contract)  ai/game_info.hpp (information about the game state 
passed to the ai), ai/testing.hpp (ai/testing log domain) are exposed to the 
rest of the game, taking transitive includes into account )

Modified:
    trunk/src/ai/ai.cpp
    trunk/src/ai/ai.hpp
    trunk/src/ai/ai2.hpp
    trunk/src/ai/ai_actions.hpp
    trunk/src/ai/ai_dfool.hpp
    trunk/src/ai/ai_interface.cpp
    trunk/src/ai/ai_interface.hpp
    trunk/src/ai/ai_manager.hpp
    trunk/src/ai/contexts.cpp
    trunk/src/ai/contexts.hpp
    trunk/src/ai/formula_ai.cpp
    trunk/src/ai/formula_ai.hpp
    trunk/src/ai/game_info.cpp
    trunk/src/ai/testing.cpp
    trunk/src/game_events.cpp

Modified: trunk/src/ai/ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai.cpp (original)
+++ trunk/src/ai/ai.cpp Sat May  2 03:04:19 2009
@@ -46,7 +46,7 @@
 typedef util::array<map_location,6> adjacent_tiles_array;
 
 
-idle_ai::idle_ai(int side, bool master) : ai_interface(side,master)
+idle_ai::idle_ai(int side, bool master) : ai_readwrite_context(side,master)
 {
 }
 
@@ -61,9 +61,9 @@
 
 
 /** Sample ai, with simple strategy. */
-class sample_ai : public ai_interface {
+class sample_ai : public ai_readwrite_context {
 public:
-       sample_ai(int side, bool master) : ai_interface(side,master) {}
+       sample_ai(int side, bool master) : ai_readwrite_context(side,master) {}
 
        void play_turn() {
                game_events::fire("ai turn");
@@ -193,7 +193,7 @@
 };
 
 ai::ai(int side, bool master) :
-       ai_interface(side,master),
+       ai_readwrite_context(side,master),
        defensive_position_cache_(),
        threats_found_(false),
        attacks_(),
@@ -1906,19 +1906,6 @@
        return attack_depth_;
 }
 
-variant ai_interface::get_value(const std::string& key) const
-{
-       if(key == "map") {
-               return variant(new gamemap_callable(get_info().map));
-       }
-       return variant();
-}
-
-void ai_interface::get_inputs(std::vector<game_logic::formula_input>* inputs) 
const
-{
-       using game_logic::FORMULA_READ_ONLY;
-       inputs->push_back(game_logic::formula_input("map", FORMULA_READ_ONLY));
-}
 
 variant ai::attack_analysis::get_value(const std::string& key) const
 {

Modified: trunk/src/ai/ai.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai.hpp (original)
+++ trunk/src/ai/ai.hpp Sat May  2 03:04:19 2009
@@ -20,20 +20,20 @@
 #include "../global.hpp"
 
 #include "../actions.hpp"
-#include "ai_interface.hpp"
+#include "contexts.hpp"
 #include "../formula_callable.hpp"
 
 class formula_ai;
 
 /** A trivial ai that sits around doing absolutely nothing. */
-class idle_ai : public ai_interface {
+class idle_ai : public ai_readwrite_context {
 public:
        idle_ai(int side, bool master);
        void play_turn();
        virtual std::string describe_self();
 };
 
-class ai : public ai_interface {
+class ai : public ai_readwrite_context {
 public:
 
        ai(int side, bool master);

Modified: trunk/src/ai/ai2.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai2.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai2.hpp (original)
+++ trunk/src/ai/ai2.hpp Sat May  2 03:04:19 2009
@@ -20,12 +20,12 @@
 #ifndef AI_AI2_HPP_INCLUDED
 #define AI_AI2_HPP_INCLUDED
 
-#include "ai_interface.hpp"
+#include "contexts.hpp"
 
-class ai2 : public ai_interface
+class ai2 : public ai_readwrite_context
 {
 public:
-       ai2(int side, bool master) : ai_interface(side, master)
+       ai2(int side, bool master) : ai_readwrite_context(side, master)
        {}
        virtual ~ai2() {}
        virtual void play_turn() {}

Modified: trunk/src/ai/ai_actions.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_actions.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_actions.hpp (original)
+++ trunk/src/ai/ai_actions.hpp Sat May  2 03:04:19 2009
@@ -25,7 +25,7 @@
 #include "game_info.hpp"
 #include "../map.hpp"
 #include "../map_location.hpp"
-#include "pathfind.hpp"
+#include "../pathfind.hpp"
 #include "../team.hpp"
 
 #include <memory>

Modified: trunk/src/ai/ai_dfool.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_dfool.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_dfool.hpp (original)
+++ trunk/src/ai/ai_dfool.hpp Sat May  2 03:04:19 2009
@@ -22,7 +22,7 @@
 
 #include "../global.hpp"
 
-#include "ai_interface.hpp"
+#include "contexts.hpp"
 #include "../map_location.hpp"
 #include "../unit_map.hpp"
 #include "../unit.hpp"
@@ -98,9 +98,9 @@
    * does not target units that it has not "seen",
    * and does not make decisions based on unseen units.
    */
-  class dfool_ai : public ai_interface {
+  class dfool_ai : public ai_readwrite_context {
   public:
-    dfool_ai(int side, bool master) : ai_interface(side, master), 
unit_memory_(current_team().ai_memory()){}
+    dfool_ai(int side, bool master) : ai_readwrite_context(side, master), 
unit_memory_(current_team().ai_memory()){}
     void play_turn();
     virtual std::string describe_self();
   private:

Modified: trunk/src/ai/ai_interface.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_interface.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_interface.cpp (original)
+++ trunk/src/ai/ai_interface.cpp Sat May  2 03:04:19 2009
@@ -17,11 +17,13 @@
  * @file ai/ai_interface.cpp
  */
 
-#include "ai_actions.hpp"
 #include "ai_interface.hpp"
-#include "ai_manager.hpp"
 
 // =======================================================================
 //
 // =======================================================================
+std::string ai_interface::describe_self() const
+{
+       return "? [ai]";
+}
 

Modified: trunk/src/ai/ai_interface.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_interface.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_interface.hpp (original)
+++ trunk/src/ai/ai_interface.hpp Sat May  2 03:04:19 2009
@@ -20,16 +20,33 @@
 #ifndef AI_AI_INTERFACE_HPP_INCLUDED
 #define AI_AI_INTERFACE_HPP_INCLUDED
 
-#include "contexts.hpp"
 #include "../formula_callable.hpp"
 
-class ai_interface : public game_logic::formula_callable, public 
ai_readwrite_context {
+class side_context {
+public:
+
+       side_context(unsigned int side) : side_(side) {}
+
+       virtual ~side_context() {}
+
+       /** get the 1-based side number which is controlled by this AI */
+       unsigned int get_side() const { return side_;}
+
+        /** Set the side */
+        virtual void set_side(unsigned int side) { side_ = side; }
+
+private:
+       unsigned int side_;
+
+};
+
+
+class ai_interface : public side_context {
 public:
        /**
         * The constructor.
         */
-       ai_interface(int side, bool master) : ai_readwrite_context(side,master) 
{
-               add_ref(); //this class shouldn't be reference counted.
+       ai_interface(unsigned int side, bool master) : side_context(side), 
master_(master) {
        }
        virtual ~ai_interface() {}
 
@@ -46,9 +63,18 @@
        virtual void new_turn() {
        }
 
-protected:
-       virtual void get_inputs(std::vector<game_logic::formula_input>* inputs) 
const;
-       virtual variant get_value(const std::string& key) const;
+       /** get the 'master' flag of the AI. 'master' AI is the top-level-AI. */
+       bool get_master() const { return master_;}
+
+        /** Evaluate */
+        virtual std::string evaluate(const std::string& /*str*/)
+                       { return "evaluate command not implemented by this AI"; 
}
+
+       /** Describe self*/
+       virtual std::string describe_self() const;
+
+private:
+       bool master_;
 };
 
 #endif

Modified: trunk/src/ai/ai_manager.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/ai_manager.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/ai_manager.hpp (original)
+++ trunk/src/ai/ai_manager.hpp Sat May  2 03:04:19 2009
@@ -26,6 +26,7 @@
 #include "../global.hpp"
 
 #include "ai_interface.hpp"
+#include "game_info.hpp"
 #include <map>
 #include <stack>
 #include <vector>

Modified: trunk/src/ai/contexts.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/contexts.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/contexts.cpp (original)
+++ trunk/src/ai/contexts.cpp Sat May  2 03:04:19 2009
@@ -21,7 +21,12 @@
 #include "contexts.hpp"
 #include "ai_actions.hpp"
 #include "ai_manager.hpp"
+#include "../callable_objects.hpp"
 #include "../dialogs.hpp"
+#include "../formula.hpp"
+#include "../formula_callable.hpp"
+#include "../formula_function.hpp"
+#include "../formula_fwd.hpp"
 #include "../game_end_exceptions.hpp"
 #include "../game_events.hpp"
 #include "../game_preferences.hpp"
@@ -40,10 +45,6 @@
 // =======================================================================
 //
 // =======================================================================
-std::string ai_readonly_context::describe_self() const
-{
-       return "? [ai]";
-}
 
 
 void ai_readonly_context::raise_user_interact() const
@@ -539,3 +540,17 @@
        check_victory(get_info().state,get_info().units,get_info().teams, 
get_info().disp);
        raise_enemy_attacked();
 }
+
+variant ai_readonly_context::get_value(const std::string& key) const
+{
+       if(key == "map") {
+               return variant(new gamemap_callable(get_info().map));
+       }
+       return variant();
+}
+
+void ai_readonly_context::get_inputs(std::vector<game_logic::formula_input>* 
inputs) const
+{
+       using game_logic::FORMULA_READ_ONLY;
+       inputs->push_back(game_logic::formula_input("map", FORMULA_READ_ONLY));
+}

Modified: trunk/src/ai/contexts.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/contexts.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/contexts.hpp (original)
+++ trunk/src/ai/contexts.hpp Sat May  2 03:04:19 2009
@@ -24,10 +24,11 @@
 class game_display;
 class gamemap;
 
-#include "game_display.hpp"
+#include "ai_interface.hpp"
 #include "game_info.hpp"
+#include "../game_display.hpp"
+#include "../gamestatus.hpp"
 #include "../pathfind.hpp"
-#include "../gamestatus.hpp"
 #include "../playturn.hpp"
 
 class ai_attack_result;
@@ -35,7 +36,7 @@
 class ai_recruit_result;
 class ai_stopunit_result;
 
-class ai_readonly_context {
+class ai_readonly_context: public game_logic::formula_callable, public 
ai_interface {
 public:
        /** A convenient typedef for the often used 'location' object. */
        typedef map_location location;
@@ -46,19 +47,11 @@
        /** The standard way in which a map of possible movement routes to 
location is recorded*/
        typedef std::map<location,paths> moves_map;
 
-       /** get the 'master' flag of the AI. 'master' AI is the top-level-AI. */
-       bool get_master() const { return master_;}
-
-       /** get the 1-based side number which is controlled by this AI */
-       unsigned int get_side() const { return side_;}
-
-        /** Set the side */
-        virtual void set_side(unsigned int side) { side_ = side; }
-
        /**
         * The constructor.
         */
-       ai_readonly_context(unsigned int side, bool master) : side_(side), 
master_(master){
+       ai_readonly_context(unsigned int side, bool master) : 
ai_interface(side,master) {
+               add_ref(); //this class shouldn't be reference counted.
        }
        virtual ~ai_readonly_context() {}
 
@@ -71,8 +64,6 @@
        /** Display a debug message as a chat message. */
        void log_message(const std::string& msg);
 
-       /** Describe self*/
-       virtual std::string describe_self() const;
 
        /**
         * Check if it is possible to attack enemy defender using our unit 
attacker from attackers current location,
@@ -176,9 +167,10 @@
         */
        void raise_user_interact() const;
 
-private:
-       unsigned int side_;
-       bool master_;
+       virtual void get_inputs(std::vector<game_logic::formula_input>* inputs) 
const;
+
+       virtual variant get_value(const std::string& key) const;
+
 };
 
 class ai_readwrite_context : public ai_readonly_context {
@@ -277,9 +269,6 @@
         */
        map_location move_unit_partial(map_location from, map_location to, 
std::map<map_location,paths>& possible_moves);
 
-        /** Evaluate */
-        virtual std::string evaluate(const std::string& /*str*/)
-                       { return "evaluate command not implemented by this AI"; 
}
 
        /**
         * Recruit a unit. It will recruit the unit with the given name,

Modified: trunk/src/ai/formula_ai.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/formula_ai.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/formula_ai.cpp (original)
+++ trunk/src/ai/formula_ai.cpp Sat May  2 03:04:19 2009
@@ -2492,7 +2492,7 @@
                return villages_from_set(get_info().map.villages(), 
&current_team().villages());
        }
 
-       return ai_interface::get_value(key);
+       return ai_readonly_context::get_value(key);
 }
 
 void formula_ai::get_inputs(std::vector<formula_input>* inputs) const
@@ -2522,7 +2522,7 @@
        inputs->push_back(game_logic::formula_input("villages_of_side", 
FORMULA_READ_ONLY));
        
inputs->push_back(game_logic::formula_input("enemy_and_unowned_villages", 
FORMULA_READ_ONLY));
 
-       ai_interface::get_inputs(inputs);
+       ai_readonly_context::get_inputs(inputs);
 }
 
 variant formula_ai::get_keeps() const

Modified: trunk/src/ai/formula_ai.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/formula_ai.hpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/formula_ai.hpp (original)
+++ trunk/src/ai/formula_ai.hpp Sat May  2 03:04:19 2009
@@ -22,7 +22,6 @@
 #define AI_FORMULA_AI_HPP_INCLUDED
 
 #include "ai.hpp"
-#include "ai_interface.hpp"
 #include "../callable_objects.hpp"
 #include "../formula.hpp"
 #include "../formula_fwd.hpp"

Modified: trunk/src/ai/game_info.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/game_info.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/game_info.cpp (original)
+++ trunk/src/ai/game_info.cpp Sat May  2 03:04:19 2009
@@ -22,4 +22,3 @@
 // =======================================================================
 //
 // =======================================================================
-

Modified: trunk/src/ai/testing.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/ai/testing.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/ai/testing.cpp (original)
+++ trunk/src/ai/testing.cpp Sat May  2 03:04:19 2009
@@ -16,7 +16,6 @@
  * Gather statistics important for AI testing and output them
  * @file ai/testing.cpp
  */
-#include "ai_interface.hpp"
 #include "ai_manager.hpp"
 #include "testing.hpp"
 #include "../log.hpp"

Modified: trunk/src/game_events.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_events.cpp?rev=35406&r1=35405&r2=35406&view=diff
==============================================================================
--- trunk/src/game_events.cpp (original)
+++ trunk/src/game_events.cpp Sat May  2 03:04:19 2009
@@ -24,6 +24,7 @@
 #include "dialogs.hpp"
 #include "foreach.hpp"
 #include "game_end_exceptions.hpp"
+#include "game_display.hpp"
 #include "game_events.hpp"
 #include "game_preferences.hpp"
 #include "gettext.hpp"


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

Reply via email to