|
Soen Eber
Registered User
Join date: 3 Aug 2006
Posts: 428
|
03-22-2008 07:31
Limitations: 1 - currently operates on strings only. 2 - limited to one stack or queue at a time. 3 - must assign stack/queue to global list variable gStack before use. list gStack;
string lPop() { string s = llList2String(gStack,0); if (llGetListLength(gStack) > 1) gStack = llList2List(gStack,1,-1); else if (llGetListLength(gStack) == 1) gStack = []; return s; } string rPop() { string s = llList2String(gStack,-1); if (llGetListLength(gStack) > 1) gStack = llList2List(gStack,0,-2); else if (llGetListLength(gStack) == 1) gStack = []; return s; } string lGet() { string s = llList2String(gStack,0); return s; } string rGet() { string s = llList2String(gStack,-1); return s; } lPush(string item) { gStack = [item]+gStack; } rPush(string item) { gStack = gStack+[item]; } default { state_entry() { } touch_start(integer total_number) { string s; list lTest = ["c","d","e"]; gStack = lTest; llSay(0,"________start________"); llSay(0,"stack="+llList2CSV(gStack));
// Test lPush, lGet, lPop lPush("b"); llSay(0,"after lPush(b) s="+s+", stack="+llList2CSV(gStack)); s = lGet(); llSay(0,"after lGet() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); // Test rPush, rGet, rPop rPush("f"); llSay(0,"after rPush(f) s="+s+", stack="+llList2CSV(gStack)); s = rGet(); llSay(0,"after rGet() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack));
// Drain the queue leftside and repopulate s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); lPush("c"); llSay(0,"after lPush(c) s="+s+", stack="+llList2CSV(gStack)); lPush("b"); llSay(0,"after lPush(b) s="+s+", stack="+llList2CSV(gStack)); lPush("a"); llSay(0,"after lPush(a) s="+s+", stack="+llList2CSV(gStack));
// Drain the queue rightside and repopulate s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); rPush("a"); llSay(0,"after rPush(a) s="+s+", stack="+llList2CSV(gStack)); rPush("b"); llSay(0,"after rPush(b) s="+s+", stack="+llList2CSV(gStack)); rPush("c"); llSay(0,"after rPush(c) s="+s+", stack="+llList2CSV(gStack)); llSay(0,"________end__________"); } }
|
|
Strife Onizuka
Moonchild
Join date: 3 Mar 2004
Posts: 5,887
|
03-23-2008 00:07
Optimized Version: list gStack;
string lPop() { string s = llList2String(gStack,0); gStack = llDeleteSubList(gStack,0,0); return s; } string rPop() { string s = llList2String(gStack,-1); gStack = llDeleteSubList(gStack,-1,-1); return s; } string lPeek()//should inline this { return llList2String(gStack,0); } string rPeek()//should inline this { return llList2String(gStack,-1); } lPush(string item)//should inline this { gStack = item+gStack; } rPush(string item)//should inline this { gStack = gStack+item; } default { touch_start(integer total_number) { string s; list lTest = ["c","d","e"]; gStack = lTest; llSay(0,"________start________"); llSay(0,"stack="+llList2CSV(gStack));
// Test lPush, lGet, lPop lPush("b"); llSay(0,"after lPush(b) s="+s+", stack="+llList2CSV(gStack)); s = lPeek(); llSay(0,"after lPeek() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); // Test rPush, rPeek, rPop rPush("f"); llSay(0,"after rPush(f) s="+s+", stack="+llList2CSV(gStack)); s = rPeek(); llSay(0,"after rPeek() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack));
// Drain the queue leftside and repopulate s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); s = lPop(); llSay(0,"after lPop() s="+s+", stack="+llList2CSV(gStack)); lPush("c"); llSay(0,"after lPush(c) s="+s+", stack="+llList2CSV(gStack)); lPush("b"); llSay(0,"after lPush(b) s="+s+", stack="+llList2CSV(gStack)); lPush("a"); llSay(0,"after lPush(a) s="+s+", stack="+llList2CSV(gStack));
// Drain the queue rightside and repopulate s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); s = rPop(); llSay(0,"after rPop() s="+s+", stack="+llList2CSV(gStack)); rPush("a"); llSay(0,"after rPush(a) s="+s+", stack="+llList2CSV(gStack)); rPush("b"); llSay(0,"after rPush(b) s="+s+", stack="+llList2CSV(gStack)); rPush("c"); llSay(0,"after rPush(c) s="+s+", stack="+llList2CSV(gStack)); llSay(0,"________end__________"); } }
_____________________
Truth is a river that is always splitting up into arms that reunite. Islanded between the arms, the inhabitants argue for a lifetime as to which is the main river. - Cyril Connolly
Without the political will to find common ground, the continual friction of tactic and counter tactic, only creates suspicion and hatred and vengeance, and perpetuates the cycle of violence. - James Nachtwey
|