[Avida-SVN] r1797 - in branches/uml: Avida.xcodeproj source/actions source/cpu source/main

hjg at myxo.css.msu.edu hjg at myxo.css.msu.edu
Fri Jul 13 05:27:22 PDT 2007


Author: hjg
Date: 2007-07-13 08:27:21 -0400 (Fri, 13 Jul 2007)
New Revision: 1797

Modified:
   branches/uml/Avida.xcodeproj/project.pbxproj
   branches/uml/source/actions/PrintActions.cc
   branches/uml/source/cpu/cHardwareCPU.cc
   branches/uml/source/cpu/cHardwareCPU.h
   branches/uml/source/main/cBirthChamber.cc
   branches/uml/source/main/cOrganism.cc
   branches/uml/source/main/cOrganism.h
   branches/uml/source/main/cTaskLib.cc
   branches/uml/source/main/cTaskLib.h
Log:
Merge - still with some errors...


Modified: branches/uml/Avida.xcodeproj/project.pbxproj
===================================================================
--- branches/uml/Avida.xcodeproj/project.pbxproj	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/Avida.xcodeproj/project.pbxproj	2007-07-13 12:27:21 UTC (rev 1797)
@@ -350,6 +350,10 @@
 /* Begin PBXFileReference section */
 		1097463D0AE9606E00929ED6 /* cDeme.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cDeme.cc; sourceTree = "<group>"; };
 		1097463E0AE9606E00929ED6 /* cDeme.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cDeme.h; sourceTree = "<group>"; };
+		3EDCA0150C46C9B70078778D /* cUMLModel.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cUMLModel.cc; sourceTree = "<group>"; };
+		3EDCA0160C46C9B70078778D /* cUMLModel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cUMLModel.h; sourceTree = "<group>"; };
+		3EDCA0170C46C9B70078778D /* cUMLStateDiagram.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cUMLStateDiagram.cc; sourceTree = "<group>"; };
+		3EDCA0180C46C9B70078778D /* cUMLStateDiagram.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cUMLStateDiagram.h; sourceTree = "<group>"; };
 		4201F39A0BE187F6006279B9 /* cTopology.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cTopology.h; sourceTree = "<group>"; };
 		423335880BC067E3000DF681 /* cHardwareGX.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = cHardwareGX.cc; sourceTree = "<group>"; };
 		423335890BC067E3000DF681 /* cHardwareGX.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = cHardwareGX.h; sourceTree = "<group>"; };
@@ -830,7 +834,7 @@
 		DCC315CE076253A5008F7A48 /* environment.rotate */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = environment.rotate; sourceTree = "<group>"; };
 		DCC315D0076253A5008F7A48 /* task_event_gen.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.cc; sourceTree = "<group>"; };
 		DCC315D1076253A5008F7A48 /* task_event_gen.old.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.old.cc; sourceTree = "<group>"; };
-		DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
+		DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -1357,6 +1361,10 @@
 		DCC310040762539D008F7A48 /* main */ = {
 			isa = PBXGroup;
 			children = (
+				3EDCA0150C46C9B70078778D /* cUMLModel.cc */,
+				3EDCA0160C46C9B70078778D /* cUMLModel.h */,
+				3EDCA0170C46C9B70078778D /* cUMLStateDiagram.cc */,
+				3EDCA0180C46C9B70078778D /* cUMLStateDiagram.h */,
 				42490EFE0BE2472800318058 /* cGermline.h */,
 				706C6F480B83E69D003174C1 /* cSaleItem.h */,
 				708BF3010AB65DD300A923BF /* cEventList.h */,
@@ -2143,6 +2151,7 @@
 		7023EC350C0A42BC00362B9C /* Development */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				HEADER_SEARCH_PATHS = "$(inherited)";
 				PRODUCT_NAME = "avida-core";
 			};
 			name = Development;
@@ -2150,6 +2159,7 @@
 		7023EC360C0A42BC00362B9C /* Deployment */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				HEADER_SEARCH_PATHS = "$(inherited)";
 				PRODUCT_NAME = "avida-core";
 			};
 			name = Deployment;
@@ -2157,6 +2167,7 @@
 		7023EC370C0A42BC00362B9C /* Deployment-G5 */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				HEADER_SEARCH_PATHS = "$(inherited)";
 				PRODUCT_NAME = "avida-core";
 			};
 			name = "Deployment-G5";
@@ -2164,6 +2175,7 @@
 		7023EC380C0A42BC00362B9C /* Deployment-Universal */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				HEADER_SEARCH_PATHS = "$(inherited)";
 				PRODUCT_NAME = "avida-core";
 			};
 			name = "Deployment-Universal";
@@ -2171,6 +2183,7 @@
 		7023EC390C0A42BC00362B9C /* Profile */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				HEADER_SEARCH_PATHS = "$(inherited)";
 				PRODUCT_NAME = "avida-core";
 			};
 			name = Profile;
@@ -2222,7 +2235,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_MODEL_CPU = G4;
-				HEADER_SEARCH_PATHS = /usr/local/boost;
+				HEADER_SEARCH_PATHS = /opt/local/include;
 				OTHER_LDFLAGS = (
 					"-multiply_defined",
 					suppress,
@@ -2235,6 +2248,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_MODEL_CPU = G4;
+				HEADER_SEARCH_PATHS = /opt/local/include;
 				OTHER_LDFLAGS = (
 					"-multiply_defined",
 					suppress,
@@ -2333,6 +2347,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_MODEL_CPU = G4;
+				HEADER_SEARCH_PATHS = /opt/local/include;
 				OTHER_LDFLAGS = (
 					"-multiply_defined",
 					suppress,
@@ -2345,6 +2360,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_MODEL_CPU = G4;
+				HEADER_SEARCH_PATHS = /opt/local/include;
 				OTHER_LDFLAGS = (
 					"-multiply_defined",
 					suppress,
@@ -2586,6 +2602,7 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				GCC_MODEL_CPU = G4;
+				HEADER_SEARCH_PATHS = /opt/local/include;
 				OTHER_LDFLAGS = (
 					"-multiply_defined",
 					suppress,

Modified: branches/uml/source/actions/PrintActions.cc
===================================================================
--- branches/uml/source/actions/PrintActions.cc	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/actions/PrintActions.cc	2007-07-13 12:27:21 UTC (rev 1797)
@@ -87,8 +87,10 @@
 STATS_OUT_FILE(PrintMarketData,             market.dat          );
 STATS_OUT_FILE(PrintSenseData,              sense.dat           );
 STATS_OUT_FILE(PrintSenseExeData,           sense_exe.dat       );
+STATS_OUT_FILE(PrintUMLData,				uml.dat			    );
 
 
+
 #define POP_OUT_FILE(METHOD, DEFAULT)                                                     /*  1 */ \
 class cAction ## METHOD : public cAction {                                                /*  2 */ \
 private:                                                                                  /*  3 */ \
@@ -2447,6 +2449,10 @@
   action_lib->Register<cActionDumpTaskGrid>("dump_task_grid");
   action_lib->Register<cActionDumpDonorGrid>("dump_donor_grid");
   action_lib->Register<cActionDumpReceiverGrid>("dump_receiver_grid");
+  
+  // UML 
+  action_lib->Register<cActionPrintUMLData>("PrintUMLData");
 
+
   action_lib->Register<cActionSetVerbose>("VERBOSE");
 }

Modified: branches/uml/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.cc	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/cpu/cHardwareCPU.cc	2007-07-13 12:27:21 UTC (rev 1797)
@@ -357,6 +357,130 @@
     tInstLibEntry<tMethod>("promoter", &cHardwareCPU::Inst_Promoter),
     tInstLibEntry<tMethod>("decay-reg", &cHardwareCPU::Inst_DecayRegulation),
     
+			    // UML Element Creation			
+/*	tInstLibEntry<tMethod>("addState", &cHardwareCPU::Inst_AddState, false, 
+					"Add a new state"),
+*/	
+/*				
+	tInstLibEntry<tMethod>("next", &cHardwareCPU::Inst_Next, false, 
+					"Increment to the next position in the list"),
+	tInstLibEntry<tMethod>("prev", &cHardwareCPU::Inst_Prev, false, 
+					"Decrement to the previous position in the list"),
+	tInstLibEntry<tMethod>("addTransLab", &cHardwareCPU::Inst_AddTransitionLabel, false, 
+					"Add a transition label"),
+*/					
+/*
+	tInstLibEntry<tMethod>("addTrans", &cHardwareCPU::Inst_AddTransition, false, 
+					"Add a transition"),		
+*/								
+	tInstLibEntry<tMethod>("addTransT", &cHardwareCPU::Inst_AddTransitionTotal, false, 
+					"Add a transition without adding a label."),				
+/*	tInstLibEntry<tMethod>("jump", &cHardwareCPU::Inst_JumpIndex, false, 
+					"Jump to a position in the list"),																	
+	tInstLibEntry<tMethod>("first", &cHardwareCPU::Inst_First, false, 
+					"Go to the first position in the list"),		
+	tInstLibEntry<tMethod>("last", &cHardwareCPU::Inst_Last, false, 
+					"Go to the last position in the list"),						
+	tInstLibEntry<tMethod>("jump-d", &cHardwareCPU::Inst_JumpDist, false, 
+					"Jump to a position in the list using labels."),
+*/					
+	tInstLibEntry<tMethod>("sd-0", &cHardwareCPU::Inst_StateDiag0, false, 
+					"Change to state diagram 0"),				
+	tInstLibEntry<tMethod>("sd-1", &cHardwareCPU::Inst_StateDiag1, false, 
+					"Change to state diagram 1"),				
+	tInstLibEntry<tMethod>("s-orig-0", &cHardwareCPU::Inst_OrigState0, false, 
+					"Change the origin to state 0"),
+	tInstLibEntry<tMethod>("s-orig-1", &cHardwareCPU::Inst_OrigState1, false, 
+					"Change the origin to state 1"),
+	tInstLibEntry<tMethod>("s-orig-2", &cHardwareCPU::Inst_OrigState2, false, 
+					"Change the origin to state 2"),
+	tInstLibEntry<tMethod>("s-orig-3", &cHardwareCPU::Inst_OrigState3, false, 
+					"Change the origin to state 3"),
+	tInstLibEntry<tMethod>("s-orig-4", &cHardwareCPU::Inst_OrigState4, false, 
+					"Change the origin to state 4"),
+	tInstLibEntry<tMethod>("s-orig-5", &cHardwareCPU::Inst_OrigState5, false, 
+					"Change the origin to state 5"),
+	tInstLibEntry<tMethod>("s-orig-6", &cHardwareCPU::Inst_OrigState6, false, 
+					"Change the origin to state 6"),
+	tInstLibEntry<tMethod>("s-orig-7", &cHardwareCPU::Inst_OrigState7, false, 
+					"Change the origin to state 7"),				
+	tInstLibEntry<tMethod>("s-orig-8", &cHardwareCPU::Inst_OrigState8, false, 
+					"Change the origin to state 8"),
+	tInstLibEntry<tMethod>("s-orig-9", &cHardwareCPU::Inst_OrigState9, false, 
+					"Change the origin to state 9"),
+	tInstLibEntry<tMethod>("s-dest-0", &cHardwareCPU::Inst_DestState0, false, 
+					"Change the destination to state 0"),																																									
+	tInstLibEntry<tMethod>("s-dest-1", &cHardwareCPU::Inst_DestState1, false, 
+					"Change the destination to state 1"),		
+	tInstLibEntry<tMethod>("s-dest-2", &cHardwareCPU::Inst_DestState2, false, 
+					"Change the destination to state 2"),		
+	tInstLibEntry<tMethod>("s-dest-3", &cHardwareCPU::Inst_DestState3, false, 
+					"Change the destination to state 3"),		
+	tInstLibEntry<tMethod>("s-dest-4", &cHardwareCPU::Inst_DestState4, false, 
+					"Change the destination to state 4"),		
+	tInstLibEntry<tMethod>("s-dest-5", &cHardwareCPU::Inst_DestState5, false, 
+					"Change the destination to state 5"),		
+	tInstLibEntry<tMethod>("s-dest-6", &cHardwareCPU::Inst_DestState6, false, 
+					"Change the destination to state 6"),		
+	tInstLibEntry<tMethod>("s-dest-7", &cHardwareCPU::Inst_DestState7, false, 
+					"Change the destination to state 7"),		
+	tInstLibEntry<tMethod>("s-dest-8", &cHardwareCPU::Inst_DestState8, false, 
+					"Change the destination to state 8"),		
+	tInstLibEntry<tMethod>("s-dest-9", &cHardwareCPU::Inst_DestState9, false, 
+					"Change the destination to state 9"),		
+	tInstLibEntry<tMethod>("trans-0", &cHardwareCPU::Inst_TransLab0, false, 
+					"Change to transition label 0"),		
+	tInstLibEntry<tMethod>("trans-1", &cHardwareCPU::Inst_TransLab1, false, 
+					"Change to transition label 1"),		
+	tInstLibEntry<tMethod>("trans-2", &cHardwareCPU::Inst_TransLab2, false, 
+					"Change to transition label 2"),		
+	tInstLibEntry<tMethod>("trans-3", &cHardwareCPU::Inst_TransLab3, false, 
+					"Change to transition label 3"),		
+	tInstLibEntry<tMethod>("trans-4", &cHardwareCPU::Inst_TransLab4, false, 
+					"Change to transition label 4"),		
+	tInstLibEntry<tMethod>("trans-5", &cHardwareCPU::Inst_TransLab5, false, 
+					"Change to transition label 5"),		
+	tInstLibEntry<tMethod>("trans-6", &cHardwareCPU::Inst_TransLab6, false, 
+					"Change to transition label 6"),		
+	tInstLibEntry<tMethod>("trans-7", &cHardwareCPU::Inst_TransLab7, false, 
+					"Change to transition label 7"),		
+	tInstLibEntry<tMethod>("trans-8", &cHardwareCPU::Inst_TransLab8, false, 
+					"Change to transition label 8"),		
+	tInstLibEntry<tMethod>("trans-9", &cHardwareCPU::Inst_TransLab9, false, 
+					"Change to transition label 9"),		
+	tInstLibEntry<tMethod>("trans-10", &cHardwareCPU::Inst_TransLab10, false, 
+					"Change to transition label 10"),		
+	tInstLibEntry<tMethod>("trans-11", &cHardwareCPU::Inst_TransLab11, false, 
+					"Change to transition label 11"),	
+					
+	tInstLibEntry<tMethod>("trig-0", &cHardwareCPU::Inst_Trigger0, false, 
+					"Change to trigger 0"),	
+	tInstLibEntry<tMethod>("trig-1", &cHardwareCPU::Inst_Trigger1, false, 
+					"Change to trigger 1"),	
+	tInstLibEntry<tMethod>("trig-2", &cHardwareCPU::Inst_Trigger2, false, 
+					"Change to trigger 2"),	
+	tInstLibEntry<tMethod>("trig-3", &cHardwareCPU::Inst_Trigger3, false, 
+					"Change to trigger 3"),						
+
+	tInstLibEntry<tMethod>("guard-0", &cHardwareCPU::Inst_Guard0, false, 
+					"Change to guard 0"),						
+	tInstLibEntry<tMethod>("guard-1", &cHardwareCPU::Inst_Guard1, false, 
+					"Change to guard 1"),						
+	tInstLibEntry<tMethod>("guard-2", &cHardwareCPU::Inst_Guard2, false, 
+					"Change to guard 2"),						
+	tInstLibEntry<tMethod>("guard-3", &cHardwareCPU::Inst_Guard3, false, 
+					"Change to guard 3"),	
+					
+	tInstLibEntry<tMethod>("action-0", &cHardwareCPU::Inst_Action0, false, 
+					"Change to action 0"),						
+	tInstLibEntry<tMethod>("action-1", &cHardwareCPU::Inst_Action1, false, 
+					"Change to action 1"),						
+	tInstLibEntry<tMethod>("action-2", &cHardwareCPU::Inst_Action2, false, 
+					"Change to action 2"),						
+	tInstLibEntry<tMethod>("action-3", &cHardwareCPU::Inst_Action3, false, 
+					"Change to action 3"),						
+
+	
     // Placebo instructions
     tInstLibEntry<tMethod>("skip", &cHardwareCPU::Inst_Skip),
 
@@ -4345,3 +4469,443 @@
   return true;
 }
 
+//// UML Element Construction ////
+/*
+bool cHardwareCPU::Inst_Next(cAvidaContext& ctx) 
+{
+	if(organism->GetCellID()==-1) return false;
+
+	// by default, this instruction increments the triggers vector index
+	
+	int reg_used = FindModifiedRegister(REG_AX);
+	
+	int jump_amount = 1;
+	
+	switch (reg_used){
+	case 0:
+		// decrement the triggers vector index
+		organism->relativeJumpTrigger(jump_amount);
+		break;
+	case 1:
+		// decrement the guards vector index
+		organism->relativeJumpGuard(jump_amount);
+		break;
+	case 2:
+		// decrement the actions vector index
+		organism->relativeJumpAction(jump_amount);
+		break;
+	case 3:
+		// decrement the transition labels index
+		organism->relativeJumpTransitionLabel(jump_amount);
+		break;	
+	case 4:
+		// decrement the original state index
+		organism->relativeJumpOriginState(jump_amount);
+		break;
+	case 5:
+		// decement the destination state index
+		organism->relativeJumpDestinationState(jump_amount);
+		break;
+	case 6: 
+		// jump the state diagram index
+		organism->relativeJumpStateDiagram(jump_amount);
+		break;		
+	}
+	return true;
+}
+ 
+bool cHardwareCPU::Inst_Prev(cAvidaContext& ctx)
+{
+	if(organism->GetCellID()==-1) return false;
+
+	int reg_used = FindModifiedRegister(REG_AX);
+	
+	int jump_amount = -1;
+		
+	switch (reg_used){
+	case 0:
+		// decrement the triggers vector index
+		organism->relativeJumpTrigger(jump_amount);
+		break;
+	case 1:
+		// decrement the guards vector index
+		organism->relativeJumpGuard(jump_amount);
+		break;
+	case 2:
+		// decrement the actions vector index
+		organism->relativeJumpAction(jump_amount);
+		break;
+	case 3:
+		// decrement the transition labels index
+		organism->relativeJumpTransitionLabel(jump_amount);
+		break;	
+	case 4:
+		// decrement the original state index
+		organism->relativeJumpOriginState(jump_amount);
+		break;
+	case 5:
+		// decement the destination state index
+		organism->relativeJumpDestinationState(jump_amount);
+		break;
+	case 6: 
+		// jump the state diagram index
+		organism->relativeJumpStateDiagram(jump_amount);
+		break;	
+	}
+	return true;
+}
+
+bool cHardwareCPU::Inst_JumpIndex(cAvidaContext& ctx)
+{
+	if(organism->GetCellID()==-1) return false;
+
+	const int reg_used = FindModifiedRegister(REG_AX);
+	const int reg_jump = FindModifiedRegister(REG_BX);
+	int jump_amount = GetRegister(reg_jump);
+
+	
+	switch (reg_used){
+	case 0:
+		// decrement the triggers vector index
+		organism->absoluteJumpTrigger(jump_amount);
+		break;
+	case 1:
+		// decrement the guards vector index
+		organism->absoluteJumpGuard(jump_amount);
+		break;
+	case 2:
+		// decrement the actions vector index
+		organism->absoluteJumpAction(jump_amount);
+		break;
+	case 3:
+		// decrement the transition labels index
+		organism->absoluteJumpTransitionLabel(jump_amount);
+		break;	
+	case 4:
+		// decrement the original state index
+		organism->absoluteJumpOriginState(jump_amount);
+		break;
+	case 5:
+		// decement the destination state index
+		organism->absoluteJumpDestinationState(jump_amount);
+		break;
+	case 6: 
+		// jump the state diagram index
+		organism->absoluteJumpStateDiagram(jump_amount);
+		break;	
+	}
+	return true;
+}
+
+bool cHardwareCPU::Inst_JumpDist(cAvidaContext& ctx)
+{
+	if(organism->GetCellID()==-1) return false;
+	
+	const int reg_used = FindModifiedRegister(REG_AX);
+	ReadLabel();
+	int jump_amount = GetLabel().AsInt(NUM_NOPS);
+	//const int reg_jump = FindModifiedRegister(REG_BX);
+	//int jump_amount = GetRegister(reg_jump);
+
+	
+	switch (reg_used){
+	case 0:
+		// jump the triggers vector index
+		organism->absoluteJumpTrigger(jump_amount);
+		break;
+	case 1:
+		// jump the guards vector index
+		organism->absoluteJumpGuard(jump_amount);
+		break;
+	case 2:
+		// jump the actions vector index
+		organism->absoluteJumpAction(jump_amount);
+		break;
+	case 3:
+		// jump the transition labels index
+		organism->absoluteJumpTransitionLabel(jump_amount);
+		break;	
+	case 4:
+		// jump the original state index
+		organism->absoluteJumpOriginState(jump_amount);
+		break;
+	case 5:
+		// jump the destination state index
+		organism->absoluteJumpDestinationState(jump_amount);
+		break;
+	case 6: 
+		// jump the state diagram index
+		organism->absoluteJumpStateDiagram(jump_amount);
+		break;	
+	}
+	return true;
+}
+*/
+
+/*
+
+bool cHardwareCPU::Inst_First(cAvidaContext& ctx) 
+{
+	if(organism->GetCellID()==-1) return false;
+	
+	// by default, this instruction increments the triggers vector index
+	
+	int reg_used = FindModifiedRegister(REG_AX);
+	
+//	int jump_amount = 1;
+	
+	switch (reg_used){
+	case 0:
+		// decrement the triggers vector index
+		organism->getStateDiagram()->firstTrigger();
+		break;
+	case 1:
+		// decrement the guards vector index
+		organism->getStateDiagram()->firstGuard();
+		break;
+	case 2:
+		// decrement the actions vector index
+		organism->getStateDiagram()->firstAction();
+		break;
+	case 3:
+		// decrement the transition labels index
+		organism->getStateDiagram()->firstTransitionLabel();
+		break;	
+	case 4:
+		// decrement the original state index
+		organism->getStateDiagram()->firstOriginState();
+		break;
+	case 5:
+		// decement the destination state index
+		organism->getStateDiagram()->firstDestinationState();
+		break;
+	case 6: 
+		// decrement the state diagram index
+		organism->firstStateDiagram();
+		
+	}
+	return true;
+}
+
+bool cHardwareCPU::Inst_Last(cAvidaContext& ctx) 
+{
+	if(organism->GetCellID()==-1) return false;
+	
+	// by default, this instruction increments the triggers vector index
+	
+	int reg_used = FindModifiedRegister(REG_AX);
+	
+//	int jump_amount = 1;
+	
+	switch (reg_used){
+	case 0:
+		// decrement the triggers vector index
+		organism->getStateDiagram()->lastTrigger();
+		break;
+	case 1:
+		// decrement the guards vector index
+		organism->getStateDiagram()->lastGuard();
+		break;
+	case 2:
+		// decrement the actions vector index
+		organism->getStateDiagram()->lastAction();
+		break;
+	case 3:
+		// decrement the transition labels index
+		organism->getStateDiagram()->lastTransitionLabel();
+		break;	
+	case 4:
+		// decrement the original state index
+		organism->getStateDiagram()->lastOriginState();
+		break;
+	case 5:
+		// decement the destination state index
+		organism->getStateDiagram()->lastDestinationState();
+		break;
+	case 6: 
+		// decrement the state diagram index`
+		organism->lastStateDiagram(); 
+	}
+	return true;
+}
+
+
+bool cHardwareCPU::Inst_AddTransitionLabel(cAvidaContext& ctx)
+{
+	if(organism->GetCellID()==-1) return false;
+
+	return organism->getStateDiagram()->addTransitionLabel();
+//	return true;
+}
+*/
+
+/*
+bool cHardwareCPU::Inst_AddState(cAvidaContext& ctx)
+{
+	if(organism->GetCellID()==-1) return false;
+
+	return organism->getStateDiagram()->addState();
+}
+
+
+
+bool cHardwareCPU::Inst_AddTransition(cAvidaContext& ctx)
+{
+	if(organism->GetCellID()==-1) return false;
+
+	return organism->getStateDiagram()->addTransition();
+}
+*/
+
+
+bool cHardwareCPU::Inst_AddTransitionTotal(cAvidaContext& ctx)
+{
+	if(organism->GetCellID()==-1) return false;
+	
+	//organism->modelCheck(ctx);
+
+	return organism->addTransitionTotal();
+}
+
+
+bool cHardwareCPU::Inst_StateDiag0(cAvidaContext& ctx)
+{ return (organism->absoluteJumpStateDiagram(0)); }
+
+bool cHardwareCPU::Inst_StateDiag1(cAvidaContext& ctx)
+{ return (organism->absoluteJumpStateDiagram(1)); }
+  
+bool cHardwareCPU::Inst_OrigState0(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(0)); }
+
+bool cHardwareCPU::Inst_OrigState1(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(1)); }
+
+bool cHardwareCPU::Inst_OrigState2(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(2)); }
+
+bool cHardwareCPU::Inst_OrigState3(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(3)); }
+
+bool cHardwareCPU::Inst_OrigState4(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(4)); }
+
+bool cHardwareCPU::Inst_OrigState5(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(5)); }
+
+bool cHardwareCPU::Inst_OrigState6(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(6)); }
+
+bool cHardwareCPU::Inst_OrigState7(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(7)); }
+
+bool cHardwareCPU::Inst_OrigState8(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(8)); }
+
+bool cHardwareCPU::Inst_OrigState9(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpOriginState(9)); }
+
+bool cHardwareCPU::Inst_DestState0(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(0)); }
+
+bool cHardwareCPU::Inst_DestState1(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(1)); }
+
+bool cHardwareCPU::Inst_DestState2(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(2)); }
+
+bool cHardwareCPU::Inst_DestState3(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(3)); }
+
+bool cHardwareCPU::Inst_DestState4(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(4)); }
+
+bool cHardwareCPU::Inst_DestState5(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(5)); }
+
+bool cHardwareCPU::Inst_DestState6(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(6)); }
+
+bool cHardwareCPU::Inst_DestState7(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(7)); }
+
+bool cHardwareCPU::Inst_DestState8(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(8)); }
+
+bool cHardwareCPU::Inst_DestState9(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpDestinationState(9)); }
+
+bool cHardwareCPU::Inst_TransLab0(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(0)); }
+
+bool cHardwareCPU::Inst_TransLab1(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(1)); }
+
+bool cHardwareCPU::Inst_TransLab2(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(2)); }
+
+bool cHardwareCPU::Inst_TransLab3(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(3)); }
+
+bool cHardwareCPU::Inst_TransLab4(cAvidaContext& ctx)
+{ 
+return (organism->getStateDiagram()->absoluteJumpTransitionLabel(4)); }
+
+bool cHardwareCPU::Inst_TransLab5(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(5)); }
+
+bool cHardwareCPU::Inst_TransLab6(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(6)); }
+
+bool cHardwareCPU::Inst_TransLab7(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(7)); }
+
+bool cHardwareCPU::Inst_TransLab8(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(8)); }
+
+bool cHardwareCPU::Inst_TransLab9(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(9)); }
+
+bool cHardwareCPU::Inst_TransLab10(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(10)); }
+
+bool cHardwareCPU::Inst_TransLab11(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTransitionLabel(11)); }
+
+bool cHardwareCPU::Inst_Trigger0(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTrigger(0)); }
+
+bool cHardwareCPU::Inst_Trigger1(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTrigger(1)); }
+
+bool cHardwareCPU::Inst_Trigger2(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTrigger(2)); }
+
+bool cHardwareCPU::Inst_Trigger3(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpTrigger(3)); }
+
+bool cHardwareCPU::Inst_Guard0(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpGuard(0)); }
+
+bool cHardwareCPU::Inst_Guard1(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpGuard(1)); }
+																									
+bool cHardwareCPU::Inst_Guard2(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpGuard(2)); }
+					
+bool cHardwareCPU::Inst_Guard3(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpGuard(3)); }
+
+bool cHardwareCPU::Inst_Action0(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(0)); }
+
+bool cHardwareCPU::Inst_Action1(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(1)); }
+
+bool cHardwareCPU::Inst_Action2(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(2)); }
+
+bool cHardwareCPU::Inst_Action3(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(3)); }
+
+
+

Modified: branches/uml/source/cpu/cHardwareCPU.h
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.h	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/cpu/cHardwareCPU.h	2007-07-13 12:27:21 UTC (rev 1797)
@@ -546,6 +546,72 @@
   
   //// Placebo ////
   bool Inst_Skip(cAvidaContext& ctx);
+  
+  //// UML Element Construction ////
+//  bool Inst_AddState(cAvidaContext& ctx);
+//  bool Inst_Next(cAvidaContext& ctx);
+//  bool Inst_Prev(cAvidaContext& ctx);
+//  bool Inst_JumpIndex(cAvidaContext& ctx);
+//  bool Inst_JumpDist(cAvidaContext& ctx);
+//  bool Inst_AddTransitionLabel(cAvidaContext& ctx);
+//  bool Inst_AddTransition(cAvidaContext& ctx);
+  bool Inst_AddTransitionTotal(cAvidaContext& ctx);
+//  bool Inst_Last(cAvidaContext& ctx);
+//  bool Inst_First(cAvidaContext& ctx);
+  
+  bool Inst_StateDiag0(cAvidaContext& ctx);
+  bool Inst_StateDiag1(cAvidaContext& ctx);
+  
+  bool Inst_OrigState0(cAvidaContext& ctx);
+  bool Inst_OrigState1(cAvidaContext& ctx);
+  bool Inst_OrigState2(cAvidaContext& ctx);
+  bool Inst_OrigState3(cAvidaContext& ctx);
+  bool Inst_OrigState4(cAvidaContext& ctx);
+  bool Inst_OrigState5(cAvidaContext& ctx);
+  bool Inst_OrigState6(cAvidaContext& ctx);
+  bool Inst_OrigState7(cAvidaContext& ctx);
+  bool Inst_OrigState8(cAvidaContext& ctx);
+  bool Inst_OrigState9(cAvidaContext& ctx);
+
+  bool Inst_DestState0(cAvidaContext& ctx);
+  bool Inst_DestState1(cAvidaContext& ctx);
+  bool Inst_DestState2(cAvidaContext& ctx);
+  bool Inst_DestState3(cAvidaContext& ctx);
+  bool Inst_DestState4(cAvidaContext& ctx);
+  bool Inst_DestState5(cAvidaContext& ctx);
+  bool Inst_DestState6(cAvidaContext& ctx);
+  bool Inst_DestState7(cAvidaContext& ctx);
+  bool Inst_DestState8(cAvidaContext& ctx);
+  bool Inst_DestState9(cAvidaContext& ctx);
+  
+  bool Inst_TransLab0(cAvidaContext& ctx);
+  bool Inst_TransLab1(cAvidaContext& ctx);
+  bool Inst_TransLab2(cAvidaContext& ctx);
+  bool Inst_TransLab3(cAvidaContext& ctx);
+  bool Inst_TransLab4(cAvidaContext& ctx);
+  bool Inst_TransLab5(cAvidaContext& ctx);
+  bool Inst_TransLab6(cAvidaContext& ctx);
+  bool Inst_TransLab7(cAvidaContext& ctx);
+  bool Inst_TransLab8(cAvidaContext& ctx);
+  bool Inst_TransLab9(cAvidaContext& ctx);
+  bool Inst_TransLab10(cAvidaContext& ctx);
+  bool Inst_TransLab11(cAvidaContext& ctx);
+
+  bool Inst_Trigger0(cAvidaContext& ctx);
+  bool Inst_Trigger1(cAvidaContext& ctx);
+  bool Inst_Trigger2(cAvidaContext& ctx);
+  bool Inst_Trigger3(cAvidaContext& ctx);
+  
+  bool Inst_Guard0(cAvidaContext& ctx);
+  bool Inst_Guard1(cAvidaContext& ctx);
+  bool Inst_Guard2(cAvidaContext& ctx);
+  bool Inst_Guard3(cAvidaContext& ctx);
+  
+  bool Inst_Action0(cAvidaContext& ctx);
+  bool Inst_Action1(cAvidaContext& ctx);
+  bool Inst_Action2(cAvidaContext& ctx);
+  bool Inst_Action3(cAvidaContext& ctx);
+    
 };
 
 

Modified: branches/uml/source/main/cBirthChamber.cc
===================================================================
--- branches/uml/source/main/cBirthChamber.cc	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/main/cBirthChamber.cc	2007-07-13 12:27:21 UTC (rev 1797)
@@ -210,6 +210,10 @@
     
   child_genotype->IncDeferAdjust();
 
+  // FOR UML branch - hjg
+  child_array[0]->setParentXMI(parent.getUMLModel()->getXMI());
+  child_array[0]->setParentBonus(parent.getParentBonus());  
+
   return true;
 }
 

Modified: branches/uml/source/main/cOrganism.cc
===================================================================
--- branches/uml/source/main/cOrganism.cc	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/main/cOrganism.cc	2007-07-13 12:27:21 UTC (rev 1797)
@@ -88,6 +88,16 @@
   
   if (m_world->GetConfig().NET_ENABLED.Get()) m_net = new cNetSupport();
   m_id = m_world->GetStats().GetTotCreatures();
+  
+  /*  m_state_diag = 1;
+*/
+  m_orig_state_index = 0;
+  m_dest_state_index = 0;
+/*  m_trigger_index = 0;
+  m_guard_index = 0;
+  m_action_index = 0;*/
+  m_model.seedDiagrams();	
+  m_parent_xmi = "";
 }
 
 
@@ -582,3 +592,234 @@
 
   m_phenotype.IncErrors();
 }
+/// UML Functions /// 
+/// This function is a copy of DoOutput /// 
+void cOrganism::modelCheck(cAvidaContext& ctx)
+{
+	if(GetCellID()==-1) return;
+	m_model.printXMI();	
+
+ assert(m_interface);
+  const tArray<double> & resource_count = m_interface->GetResources();
+
+  tList<tBuffer<int> > other_input_list;
+  tList<tBuffer<int> > other_output_list;
+
+  // If tasks require us to consider neighbor inputs, collect them...
+  if (m_world->GetEnvironment().UseNeighborInput()) {
+    const int num_neighbors = m_interface->GetNumNeighbors();
+    for (int i = 0; i < num_neighbors; i++) {
+      m_interface->Rotate();
+      cOrganism * cur_neighbor = m_interface->GetNeighbor();
+      if (cur_neighbor == NULL) continue;
+
+      other_input_list.Push( &(cur_neighbor->m_input_buf) );
+    }
+  }
+
+  // If tasks require us to consider neighbor outputs, collect them...
+  if (m_world->GetEnvironment().UseNeighborOutput()) {
+    const int num_neighbors = m_interface->GetNumNeighbors();
+    for (int i = 0; i < num_neighbors; i++) {
+      m_interface->Rotate();
+      cOrganism * cur_neighbor = m_interface->GetNeighbor();
+      if (cur_neighbor == NULL) continue;
+
+      other_output_list.Push( &(cur_neighbor->m_output_buf) );
+    }
+  }
+  
+ // bool net_valid = false;
+ // if (m_net) net_valid = NetValidate(ctx, value);
+
+  // Do the testing of tasks performed...
+
+  // if on IO add value to m_output_buf, if on divide don't need to
+  //if (!on_divide) m_output_buf.Add(value);
+  
+  tArray<double> res_change(resource_count.GetSize());
+  tArray<int> insts_triggered;
+  bool clear_input = false;
+
+  tBuffer<int>* received_messages_point = &m_received_messages;
+  if (!m_world->GetConfig().SAVE_RECEIVED.Get()) received_messages_point = NULL;
+  
+  cTaskContext taskctx(m_interface, m_input_buf, m_output_buf, other_input_list, other_output_list, 0, 0, 0, received_messages_point, this);
+  m_phenotype.TestOutput(ctx, taskctx, resource_count, res_change, insts_triggered);
+  m_interface->UpdateResources(res_change);
+
+  for (int i = 0; i < insts_triggered.GetSize(); i++) {
+    const int cur_inst = insts_triggered[i];
+    m_hardware->ProcessBonusInst(ctx, cInstruction(cur_inst));
+  }
+  
+  if (clear_input) m_input_buf.Clear();
+ 
+	m_world->GetStats().addState(m_model.numStates());
+	m_world->GetStats().addTrans(m_model.numTrans());
+	m_world->GetStats().addTriggers(m_model.numTriggers());
+	m_world->GetStats().addGuards(m_model.numGuards());
+	m_world->GetStats().addActions(m_model.numActions());
+	m_world->GetStats().addStateDiagrams(m_model.numSDs());
+	
+//	m_world->GetStats().addTransLabel(transition_labels.size());
+
+  
+  
+}
+
+cUMLModel* cOrganism::getUMLModel()
+{
+	cUMLModel* temp_mod;
+	
+	temp_mod = &m_model;
+	return temp_mod;
+}
+
+bool cOrganism::absoluteJumpStateDiagram (int amount )
+{
+	m_state_diag = 0;
+	return relativeJumpStateDiagram(amount);
+}
+
+bool cOrganism::relativeJumpStateDiagram (int amount )
+{
+	int size = getUMLModel()->getStateDiagramSize();
+	
+	if (size == 0) {
+		return false;
+	}
+	
+	if (size > 0) { 
+		m_state_diag += (amount % size);
+
+		// index is greater than vector
+		if (m_state_diag >= size) { 
+			m_state_diag -= size;
+		} else if(m_state_diag < 0) { 
+			m_state_diag += size;
+		}
+	}	
+		
+	return true;
+}
+
+cUMLStateDiagram* cOrganism::getStateDiagram() 
+{ 
+	int m = m_state_diag;
+	return getUMLModel()->getStateDiagram(m); 
+
+}
+
+// Determines if this is the transition the organism is about to add
+/*bool cOrganism::currTrans (int sd, int orig, int dest, int tr, int gu, int act)
+{
+	// check if it is manipulating this diagram 
+	if (sd != m_state_diag) return false;
+	
+	cUMLStateDiagram* s = getUMLModel()->getStateDiagram(m_state_diag); 
+	s->absoluteJumpOriginState(m_orig_state_index);
+	s->absoluteJumpDestinationState(m_dest_state_index);
+	s->absoluteJumpTrigger(m_trigger_index);
+	s->absoluteJumpGuard(m_guard_index);
+	s->absoluteJumpAction(m_action_index);
+	
+	return (s->currTrans(orig, dest, tr, gu, act));
+
+}
+*/
+/*
+bool cOrganism::absoluteJumpGuard(int amount) 
+{
+	m_guard_index = 0;
+	return (relativeJumpGuard(amount));
+}
+
+bool cOrganism::absoluteJumpAction(int amount)
+{
+	m_action_index = 0;
+	return (relativeJumpAction(amount));
+
+}
+
+bool cOrganism::absoluteJumpTrigger(int amount)
+{
+	m_trigger_index = 0;
+	return (relativeJumpTrigger(amount));
+}
+
+bool cOrganism::absoluteJumpTransitionLabel(int amount)
+{
+	m_trans_label_index =0;
+	return (relativeJumpTransitionLabel(amount));
+}
+*/
+
+bool cOrganism::absoluteJumpOriginState(int amount)
+{
+	m_orig_state_index = 0;
+	return (relativeJumpOriginState(amount));
+}
+
+bool cOrganism::absoluteJumpDestinationState(int amount)
+{
+	m_dest_state_index = 0;
+	return (relativeJumpDestinationState(amount));
+}
+
+
+bool cOrganism::addTransitionTotal() 
+{
+	bool val;
+//	val = getStateDiagram()->addTransitionTotal(m_orig_state_index, m_dest_state_index, m_trigger_index, m_guard_index, m_action_index);
+	val = getStateDiagram()->addTransitionTotal();
+
+	
+/*	if (val) {
+		m_orig_state_index = 0;
+		m_dest_state_index = 0;
+		m_trigger_index = 0;
+		m_action_index = 0;
+		m_guard_index = 0;
+	}	*/
+	
+	return val;
+}
+/*
+
+bool cOrganism::relativeJumpGuard(int amount)
+{ 
+	m_guard_index += amount; 
+	return true;
+}
+
+bool cOrganism::relativeJumpAction(int amount) 
+{ 
+	m_action_index += amount; 
+	return true;
+}
+
+bool cOrganism::relativeJumpTrigger(int amount) 
+{ 
+	m_trigger_index += amount; 
+	return true;
+}
+  
+bool cOrganism::relativeJumpTransitionLabel(int amount) 
+{ 
+	m_trans_label_index += amount; 
+	return true;
+}
+*/
+bool cOrganism::relativeJumpOriginState(int amount) 
+{ 
+	m_orig_state_index += amount; 
+	return true;
+}
+
+bool cOrganism::relativeJumpDestinationState(int amount) 
+{ 
+	m_dest_state_index += amount; 
+	return true;
+}
+

Modified: branches/uml/source/main/cOrganism.h
===================================================================
--- branches/uml/source/main/cOrganism.h	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/main/cOrganism.h	2007-07-13 12:27:21 UTC (rev 1797)
@@ -67,6 +67,12 @@
 #ifndef tSmartArray_h
 #include "tSmartArray.h"
 #endif
+#ifndef _C_UMLMODEL_H_
+#include "cUMLModel.h"
+#endif
+#ifndef _C_UMLSTATEDIAGRAM_H_
+#include "cUMLStateDiagram.h"
+#endif
 
 
 class cAvidaContext;
@@ -117,6 +123,19 @@
   bool m_is_running;       // Does this organism have the CPU?
   bool m_is_sleeping;      // Is this organisms sleeping?
   
+  // UML
+  int m_state_diag;			// Index of the state diagram that the organism is currently
+							// manipulating
+  int m_orig_state_index;
+  int m_dest_state_index;
+/*  int m_trans_label_index;
+  int m_trigger_index;
+  int m_guard_index;
+  int m_action_index;*/	
+  cUMLModel m_model;		
+  std::string m_parent_xmi; 
+  std::map<std::string, float> m_parent_bonus;  
+  
   class cNetSupport
   {
   public:
@@ -288,6 +307,49 @@
   bool GetSterilizePos() const;
   double GetNeutralMin() const;
   double GetNeutralMax() const;
+  
+ // UML
+  void modelCheck(cAvidaContext& ctx);
+  cUMLModel* getUMLModel();
+//  cUMLModel* getParentUMLModel() { return m_parent_model; } 
+  std::string getParentXMI() { return m_parent_xmi; }
+  int getStateDiagramIndex() { return m_state_diag; } 
+//  bool lastStateDiagram () { m_state_diag = getUMLModel()->getStateDiagramSize(); }
+//  bool firstStateDiagram() { m_state_diag = 0; }  
+  bool currTrans (int, int, int, int, int, int); 
+  cUMLStateDiagram* getStateDiagram();
+//  void printStats();
+//  void setParentModel(cUMLModel* m) { m_parent_model = m; } 
+  void setParentXMI(std::string s) { m_parent_xmi = s; } 
+  void setParentBonus (std::map<std::string, float> v) { m_parent_bonus = v; }
+  float getParentBonus (std::string s) { return m_parent_bonus[s]; }
+  std::map<std::string, float> getParentBonus() { return m_parent_bonus; }
+  
+
+ 
+// The jump functions jump the index of the various vectors either forward (+ int) or backwards (- int)
+/*
+  bool absoluteJumpGuard(int);
+  bool absoluteJumpAction(int);
+  bool absoluteJumpTrigger(int);
+  bool absoluteJumpTransitionLabel(int);
+*/
+  bool absoluteJumpOriginState(int);
+
+  bool absoluteJumpDestinationState(int);
+  bool absoluteJumpStateDiagram (int);
+/*
+  bool relativeJumpGuard(int amount);
+  bool relativeJumpAction(int amount);
+  bool relativeJumpTrigger(int amount);
+  bool relativeJumpTransitionLabel(int amount);
+*/
+  bool relativeJumpOriginState(int amount);
+  bool relativeJumpDestinationState(int amount);
+  bool relativeJumpStateDiagram (int); 
+ 
+  bool addTransitionTotal();
+ 
 };
 
 

Modified: branches/uml/source/main/cTaskLib.cc
===================================================================
--- branches/uml/source/main/cTaskLib.cc	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/main/cTaskLib.cc	2007-07-13 12:27:21 UTC (rev 1797)
@@ -382,7 +382,46 @@
     NewTask(name, "Successfully Received Network Message", &cTaskLib::Task_NetReceive);
   
   
-  
+      // UML tasks
+  else if (name == "trans1") // 
+	  NewTask(name, "Successfully created trans 1", &cTaskLib::Task_Trans1);
+  else if (name == "trans2") // 
+	  NewTask(name, "Successfully created trans 2", &cTaskLib::Task_Trans2);	  
+  else if (name == "trans3") // 
+	  NewTask(name, "Successfully created trans 3", &cTaskLib::Task_Trans3);
+  else if (name == "trans4") // 
+	  NewTask(name, "Successfully created trans 4", &cTaskLib::Task_Trans4);
+  else if (name == "trans5") // 
+	  NewTask(name, "Successfully created trans 5", &cTaskLib::Task_Trans5);
+  else if (name == "trans6") // 
+	  NewTask(name, "Successfully created trans 6", &cTaskLib::Task_Trans6);
+  else if (name == "trans7") // 
+	  NewTask(name, "Successfully created trans 7", &cTaskLib::Task_Trans7);	  
+  else if (name == "trans8") // 
+	  NewTask(name, "Successfully created trans 8", &cTaskLib::Task_Trans8);
+  else if (name == "trans9") // 
+	  NewTask(name, "Successfully created trans 9", &cTaskLib::Task_Trans9);
+  else if (name == "trans10") // 
+	  NewTask(name, "Successfully created trans 10", &cTaskLib::Task_Trans10);	  
+  else if (name == "scene-1") // 
+	  NewTask(name, "Successfully created scenario 1", &cTaskLib::Task_Scenario1);
+  else if (name == "numStates") // 
+	  NewTask(name, "Successfully created 5 states", &cTaskLib::Task_NumStates);  	  
+  else if (name == "numTrans") // 
+	  NewTask(name, "Successfully created 5 transitions", &cTaskLib::Task_NumTrans);
+  else if (name == "prop-tr") // 
+	  NewTask(name, "Diagram included trigger", &cTaskLib::Task_PropTrigger);	
+  else if (name == "hydra") // 
+	  NewTask(name, "Successfully ran hydra", &cTaskLib::Task_Hydra);	  	
+  else if (name == "spin1") // 
+	  NewTask(name, "Successfully ran Spin", &cTaskLib::Task_SpinN1);	  
+  else if (name == "spin-w1") // 
+	  NewTask(name, "Successfully ran Spin witness trace", &cTaskLib::Task_SpinW1);
+  else if (name == "mult_trans") // 
+	  NewTask(name, "Successfully completed multiple transitions", &cTaskLib::Task_MultTrans);
+	  
+	 
+
   // Make sure we have actually found a task  
   if (task_array.GetSize() == start_size) {
     if (errors != NULL && errors->GetSize() == 0) {
@@ -2702,3 +2741,476 @@
   if (ctx.NetIsValid()) return 1.0;
   return 0.0;
 }
+
+
+
+double cTaskLib::Task_Trans1(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+	
+	//Init 	
+	ctx.task_success_complete = true;	
+
+//	if (ctx.organism->currTrans(1, -1, -1, -1, -1, "^TempSensor.getOpState()")) {		
+//	if (ctx.organism->currTrans(1, -1, -1, -1, -1, 1)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(-1, -1, -1, -1, 1))
+// tagaaa
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(0, 1, 1, 2, 3))
+// temp sensor
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(0, 1, 0, 0, 0))
+	{
+	//	ctx.task_success_complete += 1;	
+		bonus = 1.0;
+	}
+	
+	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	return bonus;
+}
+
+double cTaskLib::Task_Trans2(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, "setTempOpState", -1, -1)) {		
+//	if (ctx.organism->currTrans(1, -1, -1, 1, -1, -1)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(-1, -1, 1, -1, -1))
+// tagaaa
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(1, 2, 0, 0, 0))
+// temp sensor
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(1, 2, 0, 0, 2))
+	{
+			bonus = 1.0;
+	}
+
+	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	return bonus;
+
+}
+
+double cTaskLib::Task_Trans3(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, "getOpState", -1, -1)) {		
+//	if (ctx.organism->currTrans(0, -1, -1, 1, -1, -1)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, 1, -1, -1))
+// tagaaa
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(2, 3, 0, 3, 1))
+// temp sensor
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(2, 3, 2, 0, 0))
+	{
+			bonus = 1.0;
+	}
+	
+	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	return bonus;
+
+}
+
+double cTaskLib::Task_Trans4(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, -1, -1, "op_state:=1")) {		
+//	if (ctx.organism->currTrans(0, -1, -1, -1, -1, 3)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, -1, -1, 3))
+// tagaaa
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(3, 4, 2, 1, 2))
+// temp sensor
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(3, 1, 0, 0, 0))
+	{
+			bonus = 1.0;
+	}
+
+	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	return bonus;
+
+}
+  
+double cTaskLib::Task_Trans5(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, -1, -1, "^SoftwareSensor.setTempOpState(op_state)")) {		
+	//if (ctx.organism->currTrans(0, -1, -1, -1, -1, 1)) 
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, -1, -1, 1))
+	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(4, 0, 3, 0, 0))
+	{		
+			bonus = 1.0;
+	}
+
+	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	return bonus;
+
+}
+
+
+double cTaskLib::Task_Trans6(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(1, -1, -1, -1, -1, "^TempSensor.getOpState()")) {		
+//	if (ctx.organism->currTrans(1, -1, -1, -1, -1, 1)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(-1, -1, -1, -1, 1))
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(0, 4, 2, 1, 0))
+	{
+		bonus = 1.0;
+	}
+
+	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	return bonus;
+}
+
+double cTaskLib::Task_Trans7(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, "setTempOpState", -1, -1)) {		
+//	if (ctx.organism->currTrans(1, -1, -1, 1, -1, -1)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(-1, -1, 1, -1, -1))
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(4, 1, 0, 1, 0))
+	{
+			bonus = 1.0;
+	}
+
+	ctx.task_success_complete = ctx.task_success_complete && bonus;		
+	return bonus;
+
+}
+
+double cTaskLib::Task_Trans8(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, "getOpState", -1, -1)) {		
+//	if (ctx.organism->currTrans(0, -1, -1, 1, -1, -1)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, 1, -1, -1))
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(1, 3, 1, 1, 1))
+	{
+			bonus = 1.0;
+	}
+	
+	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	return bonus;
+
+}
+
+double cTaskLib::Task_Trans9(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, -1, -1, "op_state:=1")) {		
+//	if (ctx.organism->currTrans(0, -1, -1, -1, -1, 3)) {		
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, -1, -1, 3))
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(3, 2, 2, 0, 3))
+	{
+		bonus = 1.0;
+	}
+	
+	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	return bonus;
+
+}
+  
+double cTaskLib::Task_Trans10(cTaskContext& ctx) const
+{
+	double bonus = 0.0;
+//	if (ctx.organism->currTrans(0, -1, -1, -1, -1, "^SoftwareSensor.setTempOpState(op_state)")) {		
+	//if (ctx.organism->currTrans(0, -1, -1, -1, -1, 1)) 
+//	if (ctx.organism->getUMLModel()->getStateDiagram(0)->findTrans(-1, -1, -1, -1, 1))
+	if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(2, 4, 3, 2, 1))
+	{		
+		bonus = 1.0;
+	}
+	
+	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	return bonus;
+}
+
+double cTaskLib::Task_Scenario1(cTaskContext& ctx) const
+{
+	double bonus = 0.0; 
+	std::deque<std::string> path1;
+	
+	// Check if the tasks are complete so far... 
+	// This provides a basic ordering mechanism for the tasks.
+	if (!ctx.task_success_complete) {
+		return 0;
+	}	
+	
+	// Check if this model is different than the organism's parent's model
+	if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
+		
+		// create the scenario
+		path1.push_back("^TempSensor.getOpState()");
+		path1.push_back("setTempOpState");
+	
+		// check for scneario
+		bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1)) / path1.size());
+	} else { 
+		bonus = ctx.organism->getParentBonus("scenario1"); 
+	}
+	
+	// Set bonus info for current model
+	ctx.organism->getUMLModel()->setBonusInfo("scenario1", bonus);		
+		
+	if (bonus == 1) { 
+		ctx.task_success_complete = true;
+	} else { 
+		ctx.task_success_complete = false;	
+	}
+	
+	return bonus;
+}
+
+
+double cTaskLib::Task_NumStates(cTaskContext& ctx) const
+{
+	double ns = (double) ctx.organism->getStateDiagram()->numStates();
+	
+	if (ns <= 5 ) {
+		return (ns/5); 
+	} else{
+		return 0.0;
+	}
+	
+}
+
+double cTaskLib::Task_NumTrans(cTaskContext& ctx) const
+{
+	double nt = (double) ctx.organism->getStateDiagram()->numTrans();
+	
+	if (nt <= 5 ) {
+		return (nt/5); 
+	} else{
+		return 1;
+	}
+}
+
+
+double cTaskLib::Task_Hydra(cTaskContext& ctx) const
+{
+	cOrganism* organism = ctx.organism;
+	std::string temp;
+	double bonus = 0.0;
+
+
+	temp = organism->getUMLModel()->getXMI();
+	
+	if (!ctx.task_success_complete) {
+		return 0;
+	}
+	
+	
+	m_world->GetStats().HydraAttempt();
+
+	if (ctx.organism->getParentXMI() == temp) {
+	
+		bonus = ctx.organism->getParentBonus("hydra"); 
+		if (bonus) ctx.task_success_complete = true;
+		ctx.organism->getUMLModel()->setBonusInfo("hydra", bonus);	
+		return bonus;
+	}		
+
+
+	unsigned int status_total = 0;
+	int status=0;
+
+	int to_subavida[2]={0};
+	int from_subavida[2]={0};
+	
+	pipe(to_subavida); //write to 1, read from 0
+	pipe(from_subavida);
+	
+	pid_t subavida = fork();
+	if(subavida == 0) {
+		//child
+		close(to_subavida[1]);
+		close(from_subavida[0]);
+		dup2(to_subavida[0], STDIN_FILENO); //oldd, newd
+		dup2(from_subavida[1], STDOUT_FILENO);
+		execl("/usr/bin/java", "-cp .", "-jar", "./hydraulic.jar", NULL);
+		// We don't ever get here.
+	} 
+	//parent
+	close(to_subavida[0]);
+	close(from_subavida[1]);
+
+	// At this point, forget about subavida - It's running.
+	// Write the model to to_subavida[1].  Close to_subavida[1] (which wakes up subavida).
+	// Then, read from from_subavida[0] as long as is possible, after which point subavida will die.
+
+	// Write the model to STDIN of subavida (be careful; write may not write all that you ask!)
+	do {
+		status = write(to_subavida[1], temp.c_str()+status_total, temp.size());	
+		if (status < 0) {
+			break;
+		} else {
+			 status_total += status;
+		}
+	} while (status_total < temp.size());
+	close(to_subavida[1]); // Wakes up subavida.
+
+	// Time passes...
+
+	// Read the output from subavida.  Keep reading until subavida closes the pipe.
+	const int read_size=128; // The number of bytes that we're going to try to read from subavida.
+	std::string subavida_output;
+	char line[read_size]={0};
+	do {
+		status = read(from_subavida[0], line, read_size-1);
+		if(status > 0) {
+			subavida_output += line;
+			memset(line, 0, read_size);
+		}
+	} while(((status==-1) && (errno == EINTR)) || (status>0));
+
+	// Done with subavida.
+	close(from_subavida[0]);
+	// Make sure that subavida dies.
+	pid_t done=0;
+	while((done=waitpid(subavida, &status, 0))==-1 && (errno == EINTR)); 
+	assert(done==subavida);
+	
+	// if there are no errors, return 0 from hydraulic.  otherwise, return non-zero.
+	if(status != 0) {
+//		organism->setBonusInfo("hydra", 0.0); 
+		ctx.task_success_complete = false;	
+		bonus =  0.0;
+	} else {
+		m_world->GetStats().HydraPassed();
+//		organism->setBonusInfo("hydra", 1.0); 
+		ctx.task_success_complete = true;	
+		bonus = 1.0;
+	}
+	
+	ctx.organism->getUMLModel()->setBonusInfo("hydra", bonus);	
+	return bonus;
+	
+}
+
+
+double cTaskLib::SpinCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const {
+	cOrganism* organism = ctx.organism;
+	m_world->GetStats().SpinAttempt();
+	int status=0;
+	
+	// break inserted on 6/24
+	organism->absoluteJumpStateDiagram(1);
+	if (organism->getStateDiagram()->findTrans(-1,-1,-1,-1,1)){
+		status += 1;
+	}
+
+	
+	std::string cmd = "cat " + neverclaimFile + " >> tmp.pr && ./spin -a tmp.pr &> /dev/null";
+	if(system(cmd.c_str())!=0) return 0.0;
+	m_world->GetStats().SpinPassed();
+	m_world->GetStats().PanAttempt();
+	
+	if(system("/usr/bin/gcc -DMEMLIM=512 pan.c -o pan &> /dev/null")!=0) return 0.0;
+	if(system("./pan -a &> ./pan.out")!=0) return 0.0;
+	if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/errors:\\s(\\d+)/) {exit($1);}}'")!=0) return 0.0;
+//	if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/unreached/) {exit(1);}}'")!=0) return 0.2;
+	
+	std::cout << "I AM HERE" << std::endl;
+	std::ostringstream strstrm;
+	strstrm << "cp tmp.xmi " << m_world->GetStats().GetUpdate() << "." << organism->GetID();
+	strstrm << ".xml";	
+	if(system(strstrm.str().c_str())!=0) return 0.0;
+			
+	m_world->GetStats().PanPassed();
+	return 1.0;
+}
+ 
+double cTaskLib::SpinWitnessCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const {
+	cOrganism* organism = ctx.organism;
+//	m_world->GetStats().SpinAttempt();
+	int status=0;
+	int num_witness = 0;
+	
+	ctx.task_success_complete = false;
+	std::string cmd = "cp tmp.pr tmp-witness.pr" ;
+	if(system(cmd.c_str())!=0) return 0.0;
+	
+	cmd = "cat " + neverclaimFile + " >> tmp-witness.pr && ./spin -a tmp-witness.pr &> /dev/null";
+	if(system(cmd.c_str())!=0) return 0.0;
+//	m_world->GetStats().SpinPassed();
+//	m_world->GetStats().PanAttempt();
+	
+	if(system("/usr/bin/gcc -DMEMLIM=512 pan.c -o pan &> /dev/null")!=0) return 0.0;
+	if(system("./pan -e -n -a -w19  -m100000 -c5 &> ./pan.out")!=0) return 0.0;
+	num_witness = (system("cat pan.out | perl -e 'while(<STDIN>) { if(/errors:\\s(\\d+)/) {exit($1);}}'"));
+//	if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/unreached/) {exit(1);}}'")!=0) return 0.0;
+	
+	
+//	std::ostringstream strstrm;
+//	strstrm << "cp tmp.xmi " << m_world->GetStats().GetUpdate() << "." << organism->GetID();
+//	strstrm << ".xml";	
+//	if(system(strstrm.str().c_str())!=0) return 0.0;
+			
+//	m_world->GetStats().PanPassed();
+
+	ctx.task_success_complete = num_witness;
+	return num_witness;
+}
+
+double cTaskLib::Task_SpinN1(cTaskContext& ctx) const {
+	//cOrganism* organism = ctx.organism;
+	double bonus = 0.0;
+	
+	if (!ctx.task_success_complete) return bonus;
+	
+	if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {
+	
+		bonus = ctx.organism->getParentBonus("spinn1"); 
+//		return bonus;
+	}	else {
+	
+		bonus = SpinCoprocess(ctx, "N1");
+	}
+	
+	if (bonus) {
+		ctx.task_success_complete = true;
+	} else { 
+		ctx.task_success_complete = false;
+	}
+	ctx.organism->getUMLModel()->setBonusInfo("spinn1", bonus);	
+
+	return bonus;
+}
+
+
+
+double cTaskLib::Task_SpinW1(cTaskContext& ctx) const { 
+//	cOrganism* organism = ctx.organism;
+//	double temp1 = 0.0;
+	double bonus = 0.0;
+	if (!ctx.task_success_complete) return bonus;
+	
+	if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {	
+		bonus = ctx.organism->getParentBonus("spinw1"); 
+//		return bonus;
+	}	else {
+	
+		bonus = SpinWitnessCoprocess(ctx, "W1");
+	}
+	
+	if (bonus) {
+		ctx.task_success_complete = true;
+	} else { 
+		ctx.task_success_complete = false;
+	}
+	ctx.organism->getUMLModel()->setBonusInfo("spinw1", bonus);	
+
+	return bonus;
+}
+
+double cTaskLib::Task_MultTrans(cTaskContext& ctx) const {
+	return (2^ctx.task_success_complete);
+}
+
+
+double cTaskLib::Task_PropTrigger(cTaskContext& ctx) const {
+	// This task checks for the trigger of the property.
+	cOrganism* organism = ctx.organism;
+	double bonus = 0.0;
+	
+	if (organism->getStateDiagram()->findTrans(-1,-1,-1,-1,1)){
+		bonus = 1.0;
+	}
+	
+	ctx.task_success_complete = ctx.task_success_complete && bonus;	
+	return bonus;
+}

Modified: branches/uml/source/main/cTaskLib.h
===================================================================
--- branches/uml/source/main/cTaskLib.h	2007-07-12 18:55:52 UTC (rev 1796)
+++ branches/uml/source/main/cTaskLib.h	2007-07-13 12:27:21 UTC (rev 1797)
@@ -275,6 +275,28 @@
   // Network Tasks
   double Task_NetSend(cTaskContext& ctx) const;
   double Task_NetReceive(cTaskContext& ctx) const;
+  
+    // UML Tasks
+  double Task_Trans1(cTaskContext& ctx) const;
+  double Task_Trans2(cTaskContext& ctx) const;
+  double Task_Trans3(cTaskContext& ctx) const;
+  double Task_Trans4(cTaskContext& ctx) const;   
+  double Task_Trans5(cTaskContext& ctx) const;
+  double Task_Trans6(cTaskContext& ctx) const;
+  double Task_Trans7(cTaskContext& ctx) const;
+  double Task_Trans8(cTaskContext& ctx) const;
+  double Task_Trans9(cTaskContext& ctx) const;   
+  double Task_Trans10(cTaskContext& ctx) const;
+  double Task_Scenario1(cTaskContext& ctx) const;
+  double Task_NumStates(cTaskContext& ctx) const;
+  double Task_NumTrans(cTaskContext& ctx) const;
+  double Task_PropTrigger(cTaskContext& ctx) const;
+  double Task_Hydra(cTaskContext& ctx) const;
+  double SpinCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
+  double SpinWitnessCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
+  double Task_SpinN1(cTaskContext& ctx) const;
+  double Task_SpinW1(cTaskContext& ctx) const;
+  double Task_MultTrans(cTaskContext& ctx) const;  
 };
 
 




More information about the Avida-cvs mailing list