[Avida-SVN] r1461 - in development/source: actions main tools

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Wed Apr 4 19:32:12 PDT 2007


Author: brysonda
Date: 2007-04-04 22:32:12 -0400 (Wed, 04 Apr 2007)
New Revision: 1461

Modified:
   development/source/actions/EnvironmentActions.cc
   development/source/main/cTaskEntry.h
   development/source/tools/cArgContainer.h
Log:
Add Actions that should allow task arguments to be changed (both as an event and in analyze mode).

Modified: development/source/actions/EnvironmentActions.cc
===================================================================
--- development/source/actions/EnvironmentActions.cc	2007-04-05 01:55:55 UTC (rev 1460)
+++ development/source/actions/EnvironmentActions.cc	2007-04-05 02:32:12 UTC (rev 1461)
@@ -266,7 +266,99 @@
 };
 
 
+class cActionSetTaskArgInt : public cAction
+{
+private:
+  int m_task;
+  int m_arg;
+  int m_value;
+  
+public:
+  cActionSetTaskArgInt(cWorld* world, const cString& args) : cAction(world, args), m_task(0), m_arg(0), m_value(0)
+  {
+    cString largs(args);
+    if (largs.GetSize()) m_task = largs.PopWord().AsInt();
+    if (largs.GetSize()) m_arg = largs.PopWord().AsInt();
+    if (largs.GetSize()) m_value = largs.PopWord().AsInt();
+  }
+  
+  static const cString GetDescription() { return "Arguments: <int task> <int arg> <int value>"; }
+  
+  void Process(cAvidaContext& ctx)
+  {
+    cEnvironment& env = m_world->GetEnvironment();
+    if (m_task >= 0 && m_task < env.GetNumTasks()) {
+      env.GetTask(m_task).GetArguments().SetInt(m_arg, m_value);
+    } else {
+      m_world->GetDriver().RaiseFatalException(-2,"Task specified in SetTaskArgInt action does not exist");
+    }
+  }
+};
 
+
+class cActionSetTaskArgDouble : public cAction
+{
+private:
+  int m_task;
+  int m_arg;
+  double m_value;
+  
+public:
+  cActionSetTaskArgDouble(cWorld* world, const cString& args) : cAction(world, args), m_task(0), m_arg(0), m_value(0.0)
+  {
+    cString largs(args);
+    if (largs.GetSize()) m_task = largs.PopWord().AsInt();
+    if (largs.GetSize()) m_arg = largs.PopWord().AsInt();
+    if (largs.GetSize()) m_value = largs.PopWord().AsDouble();
+  }
+  
+  static const cString GetDescription() { return "Arguments: <int task> <int arg> <double value>"; }
+  
+  void Process(cAvidaContext& ctx)
+  {
+    cEnvironment& env = m_world->GetEnvironment();
+    if (m_task >= 0 && m_task < env.GetNumTasks()) {
+      env.GetTask(m_task).GetArguments().SetDouble(m_arg, m_value);
+    } else {
+      m_world->GetDriver().RaiseFatalException(-2,"Task specified in SetTaskArgDouble action does not exist");
+    }
+  }
+};
+
+
+class cActionSetTaskArgString : public cAction
+{
+private:
+  int m_task;
+  int m_arg;
+  cString m_value;
+  
+public:
+  cActionSetTaskArgString(cWorld* world, const cString& args) : cAction(world, args), m_task(0), m_arg(0), m_value("")
+  {
+    cString largs(args);
+    if (largs.GetSize()) m_task = largs.PopWord().AsInt();
+    if (largs.GetSize()) m_arg = largs.PopWord().AsInt();
+    if (largs.GetSize()) m_value = largs;
+  }
+  
+  static const cString GetDescription() { return "Arguments: <int task> <int arg> <string value>"; }
+  
+  void Process(cAvidaContext& ctx)
+  {
+    cEnvironment& env = m_world->GetEnvironment();
+    if (m_task >= 0 && m_task < env.GetNumTasks()) {
+      env.GetTask(m_task).GetArguments().SetString(m_arg, m_value);
+    } else {
+      m_world->GetDriver().RaiseFatalException(-2,"Task specified in SetTaskArgString action does not exist");
+    }
+  }
+};
+
+
+
+
+
 void RegisterEnvironmentActions(cActionLibrary* action_lib)
 {
   action_lib->Register<cActionInjectResource>("InjectResource");
@@ -279,6 +371,10 @@
   action_lib->Register<cActionSetReactionValueMult>("SetReactionValueMult");
   action_lib->Register<cActionSetReactionInst>("SetReactionInst");
 
+  action_lib->Register<cActionSetTaskArgInt>("SetTaskArgInt");
+  action_lib->Register<cActionSetTaskArgDouble>("SetTaskArgDouble");
+  action_lib->Register<cActionSetTaskArgString>("SetTaskArgString");
+
   // @DMB - The following actions are DEPRECATED aliases - These will be removed in 2.7.
   action_lib->Register<cActionInjectResource>("inject_resource");
   action_lib->Register<cActionInjectScaledResource>("inject_scaled_resource");

Modified: development/source/main/cTaskEntry.h
===================================================================
--- development/source/main/cTaskEntry.h	2007-04-05 01:55:55 UTC (rev 1460)
+++ development/source/main/cTaskEntry.h	2007-04-05 02:32:12 UTC (rev 1461)
@@ -64,7 +64,7 @@
   const tTaskTest GetTestFun() const { return m_test_fun; }
   
   bool HasArguments() const { return (m_args != NULL); }
-  const cArgContainer& GetArguments() const { return *m_args; }
+  cArgContainer& GetArguments() const { return *m_args; }
 };
 
 

Modified: development/source/tools/cArgContainer.h
===================================================================
--- development/source/tools/cArgContainer.h	2007-04-05 01:55:55 UTC (rev 1460)
+++ development/source/tools/cArgContainer.h	2007-04-05 02:32:12 UTC (rev 1461)
@@ -43,12 +43,7 @@
   tArray<int> m_ints;
   tArray<double> m_doubles;
   tArray<cString> m_strings;
-  
 
-  inline void SetInt(int i, int v);
-  inline void SetDouble(int i, double v);
-  inline void SetString(int i, const cString& v);
-
   
   cArgContainer() { ; }
   cArgContainer(const cArgContainer&); // @not_implemented
@@ -60,6 +55,10 @@
   inline int GetInt(int i) const { return m_ints[i]; }
   inline double GetDouble(int i) const { return m_doubles[i]; }
   inline const cString& GetString(int i) const { return m_strings[i]; }
+
+  inline void SetInt(int i, int v);
+  inline void SetDouble(int i, double v);
+  inline void SetString(int i, const cString& v);  
 };
 
 




More information about the Avida-cvs mailing list