[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