UDPATED:2009 June 21 (happy Fathers Day to the dads out there)
CODE
/*//-- Get Last Index of String Test in String Source --//*/
integer uGetStrIdxRev( string vStrSrc, string vStrTst ){
integer vIdxFnd =
llStringLength( vStrSrc ) -
llStringLength( vStrTst ) -
llStringLength(
llList2String(
llParseStringKeepNulls( vStrSrc, (list)vStrTst, [] ),
-1)
);
return (vIdxFnd | (vIdxFnd >> 31));
}
CODE
/*//-- Get Last Index of List Test in List Source --//*/
integer uGetLstIdxRev( list vLstSrc, list vLstTst ){
integer vIdxFnd =
(vLstSrc != []) +
([] != vLstTst) +
([] != llParseString2List(
llList2String(
llParseStringKeepNulls(
llDumpList2String( vLstSrc, ";" ),
(list)llDumpList2String( vLstTst, ";" ),
[] ),
-1 ),
(list)";",
[] ));
return (vIdxFnd | (vIdxFnd >> 31));
}
NOTE: uGetLstIdxRev only works for string data types, and you may want to modify the separator to suit your needs (it should be something that WON'T be in any of the data)
CODE
/*//-- Reverse List Order (fast version) --//*/
list uListRevF( list vLstSrc ){
integer vIntCnt = (vLstSrc != []);
@Loop; if (vIntCnt--){
vLstSrc += llList2List( vLstSrc, vIntCnt, vIntCnt );
jump Loop;
}
return llList2List( vLstSrc, (vLstSrc != []) >> 1, -1 );
}
CODE
/*//-- Reverse List Order (small version) --//*/
list uListRevS( list vLstSrc ){
integer vIntCnt = (vLstSrc != []);
@Loop; if (vIntCnt--){
vLstSrc += llList2List( vLstSrc, vIntCnt, vIntCnt );
vLstSrc = llDeleteSubList( vLstSrc, vIntCnt, vIntCnt );
jump Loop;
}
return vLstSrc;
}
CODE
/*//-- Reverse String Order (fast version) --//*/
string uStringRevF( string vStrSrc ){
integer vIntCnt = llStringLength( vStrSrc );
@Loop; if (vIntCnt--){
vStrSrc += llGetSubString( vStrSrc, vIntCnt, vIntCnt );
jump Loop;
}
return llGetSubString( vStrSrc, llStringLength( vStrSrc ) >> 1, -1 );
}
CODE
/*//-- Reverse String Order (small version) --//*/
string uStringRevS( string vStrSrc ){
integer vIntCnt = llStringLength( vStrSrc );
@Loop; if (vIntCnt--){
vStrSrc += llGetSubString( vStrSrc, vIntCnt, vIntCnt );
vStrSrc = llDeleteSubString( vStrSrc, vIntCnt, vIntCnt );
jump Loop;
}
return vStrSrc;
}
the fast versions run at ~double the size, and aren't so much faster (they compile smaller actually), the small versions run a hair slower, but use less memory while running (and compile slightly larger)
all optimized with help from Strife Onizuka (thanks)

