[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