[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