[Avida-SVN] r1453 - in branches/uml/source: cpu main
hjg at myxo.css.msu.edu
hjg at myxo.css.msu.edu
Tue Apr 3 10:28:54 PDT 2007
Author: hjg
Date: 2007-04-03 13:28:54 -0400 (Tue, 03 Apr 2007)
New Revision: 1453
Modified:
branches/uml/source/cpu/cHardwareCPU.cc
branches/uml/source/main/cOrganism.cc
branches/uml/source/main/cOrganism.h
Log:
Changed the jump instruction to be absolute, rather than relative. Hence, jump(0) goes to the first element of a vector.
Modified: branches/uml/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.cc 2007-04-03 03:20:35 UTC (rev 1452)
+++ branches/uml/source/cpu/cHardwareCPU.cc 2007-04-03 17:28:54 UTC (rev 1453)
@@ -3396,27 +3396,27 @@
switch (reg_used){
case 0:
// decrement the triggers vector index
- organism->jumpTrigger(jump_amount);
+ organism->relativeJumpTrigger(jump_amount);
break;
case 1:
// decrement the guards vector index
- organism->jumpGuard(jump_amount);
+ organism->relativeJumpGuard(jump_amount);
break;
case 2:
// decrement the actions vector index
- organism->jumpAction(jump_amount);
+ organism->relativeJumpAction(jump_amount);
break;
case 3:
// decrement the transition labels index
- organism->jumpTransitionLabel(jump_amount);
+ organism->relativeJumpTransitionLabel(jump_amount);
break;
case 4:
// decrement the original state index
- organism->jumpOriginState(jump_amount);
+ organism->relativeJumpOriginState(jump_amount);
break;
case 5:
// decement the destination state index
- organism->jumpDestinationState(jump_amount);
+ organism->relativeJumpDestinationState(jump_amount);
break;
}
return true;
@@ -3431,27 +3431,27 @@
switch (reg_used){
case 0:
// decrement the triggers vector index
- organism->jumpTrigger(jump_amount);
+ organism->relativeJumpTrigger(jump_amount);
break;
case 1:
// decrement the guards vector index
- organism->jumpGuard(jump_amount);
+ organism->relativeJumpGuard(jump_amount);
break;
case 2:
// decrement the actions vector index
- organism->jumpAction(jump_amount);
+ organism->relativeJumpAction(jump_amount);
break;
case 3:
// decrement the transition labels index
- organism->jumpTransitionLabel(jump_amount);
+ organism->relativeJumpTransitionLabel(jump_amount);
break;
case 4:
// decrement the original state index
- organism->jumpOriginState(jump_amount);
+ organism->relativeJumpOriginState(jump_amount);
break;
case 5:
// decement the destination state index
- organism->jumpDestinationState(jump_amount);
+ organism->relativeJumpDestinationState(jump_amount);
break;
}
return true;
@@ -3467,27 +3467,27 @@
switch (reg_used){
case 0:
// decrement the triggers vector index
- organism->jumpTrigger(jump_amount);
+ organism->absoluteJumpTrigger(jump_amount);
break;
case 1:
// decrement the guards vector index
- organism->jumpGuard(jump_amount);
+ organism->absoluteJumpGuard(jump_amount);
break;
case 2:
// decrement the actions vector index
- organism->jumpAction(jump_amount);
+ organism->absoluteJumpAction(jump_amount);
break;
case 3:
// decrement the transition labels index
- organism->jumpTransitionLabel(jump_amount);
+ organism->absoluteJumpTransitionLabel(jump_amount);
break;
case 4:
// decrement the original state index
- organism->jumpOriginState(jump_amount);
+ organism->absoluteJumpOriginState(jump_amount);
break;
case 5:
// decement the destination state index
- organism->jumpDestinationState(jump_amount);
+ organism->absoluteJumpDestinationState(jump_amount);
break;
}
return true;
Modified: branches/uml/source/main/cOrganism.cc
===================================================================
--- branches/uml/source/main/cOrganism.cc 2007-04-03 03:20:35 UTC (rev 1452)
+++ branches/uml/source/main/cOrganism.cc 2007-04-03 17:28:54 UTC (rev 1453)
@@ -590,14 +590,39 @@
template <typename T>
-bool cOrganism::moveIndex (T x, int &index, int amount )
+bool cOrganism::absoluteMoveIndex (T x, int &index, int amount )
{
+/* if (x.size() == 0) {
+ return false;
+ }
+
+ if (amount > 0) {
+// index += (amount % x.size()); // this provides relative jumping
+ index = (amount % x.size());
+
+ // index is greater than vector
+ if (index >= x.size()) {
+ index -= x.size();
+ } else if(index < 0) {
+ index += x.size();
+ }
+ }
+ */
+ index = 0;
+ return relativeMoveIndex(x, index, amount);
+}
+
+template <typename T>
+bool cOrganism::relativeMoveIndex (T x, int &index, int amount )
+{
if (x.size() == 0) {
return false;
}
if (amount > 0) {
+// index += (amount % x.size()); // this provides relative jumping
index += (amount % x.size());
+
// index is greater than vector
if (index >= x.size()) {
index -= x.size();
@@ -610,36 +635,66 @@
}
-bool cOrganism::jumpTrigger(int jump_amount)
+bool cOrganism::absoluteJumpTrigger(int jump_amount)
{
- return moveIndex(triggers, trigger_index, jump_amount);
+ return absoluteMoveIndex(triggers, trigger_index, jump_amount);
}
-bool cOrganism::jumpGuard(int jump_amount)
+bool cOrganism::absoluteJumpGuard(int jump_amount)
{
- return moveIndex(guards, guard_index, jump_amount);
+ return absoluteMoveIndex(guards, guard_index, jump_amount);
}
-bool cOrganism::jumpAction(int jump_amount)
+bool cOrganism::absoluteJumpAction(int jump_amount)
{
- return moveIndex(actions, action_index, jump_amount);
+ return absoluteMoveIndex(actions, action_index, jump_amount);
}
-bool cOrganism::jumpTransitionLabel(int jump_amount)
+bool cOrganism::absoluteJumpTransitionLabel(int jump_amount)
{
- return moveIndex(transition_labels, trans_label_index, jump_amount);
+ return absoluteMoveIndex(transition_labels, trans_label_index, jump_amount);
}
-bool cOrganism::jumpOriginState(int jump_amount)
+bool cOrganism::absoluteJumpOriginState(int jump_amount)
{
- return moveIndex(states, orig_state_index, jump_amount);
+ return absoluteMoveIndex(states, orig_state_index, jump_amount);
}
-bool cOrganism::jumpDestinationState(int jump_amount)
+bool cOrganism::absoluteJumpDestinationState(int jump_amount)
{
- return moveIndex(states, dest_state_index, jump_amount);
+ return absoluteMoveIndex(states, dest_state_index, jump_amount);
}
+bool cOrganism::relativeJumpTrigger(int jump_amount)
+{
+ return relativeMoveIndex(triggers, trigger_index, jump_amount);
+}
+
+bool cOrganism::relativeJumpGuard(int jump_amount)
+{
+ return relativeMoveIndex(guards, guard_index, jump_amount);
+}
+
+bool cOrganism::relativeJumpAction(int jump_amount)
+{
+ return relativeMoveIndex(actions, action_index, jump_amount);
+}
+
+bool cOrganism::relativeJumpTransitionLabel(int jump_amount)
+{
+ return relativeMoveIndex(transition_labels, trans_label_index, jump_amount);
+}
+
+bool cOrganism::relativeJumpOriginState(int jump_amount)
+{
+ return relativeMoveIndex(states, orig_state_index, jump_amount);
+}
+
+bool cOrganism::relativeJumpDestinationState(int jump_amount)
+{
+ return relativeMoveIndex(states, dest_state_index, jump_amount);
+}
+
std::string cOrganism::getTrigger()
{
if (triggers.size() == 0) {
Modified: branches/uml/source/main/cOrganism.h
===================================================================
--- branches/uml/source/main/cOrganism.h 2007-04-03 03:20:35 UTC (rev 1452)
+++ branches/uml/source/main/cOrganism.h 2007-04-03 17:28:54 UTC (rev 1453)
@@ -236,17 +236,24 @@
bool findTransLabel(transition_label); // find a specific transition label
template <typename T>
- bool moveIndex (T x, int &y, int z);
+ bool absoluteMoveIndex (T x, int &y, int z);
-
+ template <typename T>
+ bool relativeMoveIndex (T x, int &y, int z);
// The jump functions jump the index of the various vectors either forward (+ int) or backwards (- int)
- bool jumpGuard(int);
- bool jumpAction(int);
- bool jumpTrigger(int);
- bool jumpTransitionLabel(int);
- bool jumpOriginState(int);
- bool jumpDestinationState(int);
+ bool absoluteJumpGuard(int);
+ bool absoluteJumpAction(int);
+ bool absoluteJumpTrigger(int);
+ bool absoluteJumpTransitionLabel(int);
+ bool absoluteJumpOriginState(int);
+ bool absoluteJumpDestinationState(int);
+ bool relativeJumpGuard(int);
+ bool relativeJumpAction(int);
+ bool relativeJumpTrigger(int);
+ bool relativeJumpTransitionLabel(int);
+ bool relativeJumpOriginState(int);
+ bool relativeJumpDestinationState(int);
// The first functions jump the index to the beginning of various vectors
More information about the Avida-cvs
mailing list