Difference between revisions of "User:Void Singer/Functions"

From Second Life Wiki
Jump to navigation Jump to search
m (added update notice)
m (updated)
Line 2: Line 2:
{{void-box
{{void-box
|title=[[User:Void_Singer|Return to Void Singers user page]]
|title=[[User:Void_Singer|Return to Void Singers user page]]
}}
{{void-box
|title=String: Get Reverse Order
|content=
=== Reverse String Order (faster version) ===
<lsl>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 );
}
/*//--                      Anti-License Text                        --//*/
/*//    Contributed Freely to the Public Domain without limitation.    //*/
/*//  2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]  //*/
/*//  Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]  //*/
/*//--                                                                --//*/</lsl>
=== Reverse String Order (smaller memory version) ===
<lsl>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;
}
/*//--                      Anti-License Text                        --//*/
/*//    Contributed Freely to the Public Domain without limitation.    //*/
/*//  2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]  //*/
/*//  Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]  //*/
/*//--                                                                --//*/</lsl>
:[[User:Void_Singer/Functions#Return_to_Void_Singers_user_page|Return to top]]
}}
{{void-box
|title=String: Find Last Index
|content=
* This function is a companion to [[llSubStringIndex]].
=== Get Last Index of String Test in String Source ===
<lsl>integer uGetStrIdxRev1( string vStrSrc, string vStrTst ){
    integer vIdxFnd =
      llStringLength( vStrSrc ) -
      llStringLength( vStrTst ) -
      llStringLength(
        llList2String(
          llParseStringKeepNulls( vStrSrc, (list)vStrTst, [] ),
          -1)
        );
    return (vIdxFnd | (vIdxFnd >> 31));
}
/*//--                      Anti-License Text                        --//*/
/*//    Contributed Freely to the Public Domain without limitation.    //*/
/*//  2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]  //*/
/*//  Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]  //*/
/*//--                                                                --//*/</lsl>
:[[User:Void_Singer/Functions#Return_to_Void_Singers_user_page|Return to top]]
}}
{{void-box
|title=List: Get Reverse Order
|content=
* These functions are companions to [[llListSort]].
=== Reverse List Order (faster version) ===
<lsl>list uListRevF( list vLstSrc ){
    integer vIntCnt = (vLstSrc != []);
    @Loop; if (vIntCnt--){
        vLstSrc += llList2List( vLstSrc, vIntCnt, vIntCnt );
        jump Loop;
    }
    return llList2List( vLstSrc, (vLstSrc != []) >> 1, -1 );
}
/*//--                      Anti-License Text                        --//*/
/*//    Contributed Freely to the Public Domain without limitation.    //*/
/*//  2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]  //*/
/*//  Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]  //*/
/*//--                                                                --//*/</lsl>
=== Reverse List Order (smaller memory version) ===
<lsl>list uListRevS( list vLstSrc ){
    integer vIntCnt = (vLstSrc != []);
    @Loop; if (vIntCnt--){
        vLstSrc += llList2List( vLstSrc, vIntCnt, vIntCnt );
        vLstSrc = llDeleteSubList( vLstSrc, vIntCnt, vIntCnt );
        jump Loop;
    }
    return vLstSrc;
}
/*//--                      Anti-License Text                        --//*/
/*//    Contributed Freely to the Public Domain without limitation.    //*/
/*//  2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ]  //*/
/*//  Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]  //*/
/*//--                                                                --//*/</lsl>
:[[User:Void_Singer/Functions#Return_to_Void_Singers_user_page|Return to top]]
}}
}}


Line 304: Line 207:
* These Functions are related to [[llGetUnixTime]] and [[llGetTimestamp]].
* These Functions are related to [[llGetUnixTime]] and [[llGetTimestamp]].
=== Weekday from Unix timestamp ===
=== Weekday from Unix timestamp ===
* Updated 29 May, 2010
<lsl>/*//-- Note:
<lsl>/*//-- Note:
  Accurate from 1901 to 2099 (no limiting code)
  Accurate from 1901 to 2099 (no limiting code)
Line 310: Line 214:
string uUnix2WeekdayStr( integer vIntDat ){
string uUnix2WeekdayStr( integer vIntDat ){
     return llList2String( ["Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"],
     return llList2String( ["Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"],
                           vIntDate % 604800 / 86400  - (vIntDate < 0) );
                           vIntDate % 604800 / 86400  + (vIntDate >> 31) );
}
}
/*//--                      Anti-License Text                        --//*/
/*//--                      Anti-License Text                        --//*/

Revision as of 04:54, 29 May 2010

List: Find Last Index

  • This function is a companion to llListFindList.
    • SPECIAL NOTE: this is only designed to work on string data that will NOT contain the "•" character(alt+7)... please use a different character to suit your needs.

Get Last Index of List Test in List Source

<lsl>integer uGetLstIdxRev( list vLstSrc, list vLstTst ){

   integer vIdxFnd =
     (vLstSrc != []) +
     ([] != vLstTst) +
     ([] != llParseString2List(
              llList2String(
                llParseStringKeepNulls(
                  llDumpList2String( vLstSrc, "•" ),
                  (list)llDumpList2String( vLstTst, "•" ),
                  [] ),
                -1 ),
              (list)"•",
              [] ));
return (vIdxFnd

List: Multi-Find Index (First or Last)

Get First Index in List Source of any element in List Test

<lsl>integer uMatchLstIdxFwd( list vLstSrc, list vLstTst ){

 return ((llParseString2List( 
            llList2String(
              llParseStringKeepNulls(
                llDumpList2String( vLstSrc, ";" ),
                vLstTst, [] ),
              0 ),
            (list)";", [] ) != []) + 1) %
        ((vLstSrc != []) + 1) - 1;

} /*//-- Anti-License Text --//*/ /*// Contributed Freely to the Public Domain without limitation. //*/ /*// 2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ] //*/ /*// Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ] //*/ /*//-- --//*/</lsl>

Get Last Index in List Source of any element in List Test

<lsl>integer uMatchLstIdxRev( list vLstSrc, list vLstTst ){

 return (vLstSrc != []) -
   (llParseString2List(
      llList2String(
        llParseString2List( 
          llDumpList2String( vLstSrc, ";" ),
          vLstTst, [] ),
        -1 ),
      (list)";",
      [] ) != []) - 1;

} /*//-- Anti-License Text --//*/ /*// Contributed Freely to the Public Domain without limitation. //*/ /*// 2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ] //*/ /*// Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ] //*/ /*//-- --//*/</lsl>

Return to top

Timestamp: Converters

Unix time code to list format.

UPDATED: Jan. 27, 2010. <lsl> /*//-- Notes:

Time codes before the year 1902 or past the end of 2037
 are capped to the first second of 1902 and 2038 respectively

Output is [Y, M, D, h, m, s] list format.

This version could be improved.

//*/

list uUnix2StampLst( integer vIntDat ){ if (vIntDat / 2145916800){

vIntDat = 2145916800 * (1

Timestamp: Get Weekday from timestamp

Weekday from Unix timestamp

  • Updated 29 May, 2010

<lsl>/*//-- Note:

Accurate from 1901 to 2099 (no limiting code)

//*/

string uUnix2WeekdayStr( integer vIntDat ){

   return llList2String( ["Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"],
                          vIntDate % 604800 / 86400  + (vIntDate >> 31) );

} /*//-- Anti-License Text --//*/ /*// Contributed Freely to the Public Domain without limitation. //*/ /*// 2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ] //*/ /*// Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ] //*/ /*//-- --//*/</lsl>

Weekday from ( Y, M, D ) format

<lsl>/*//-- Note:

Accurate from 1901 to 2099 (no limiting code)
This version could be improved.

//*/

string uStamp2WeekdayStr( integer vIntYear, integer vIntMonth, integer vIntDay ){ return llList2String ( ["Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"],

                      (vIntYear + (vIntYear >> 2) - ((vIntMonth < 3) & !(vIntYear & 3)) + vIntDay
                      + (integer)llGetSubString( "_033614625035", vIntMonth, vIntMonth )) % 7 );

} /*//-- Anti-License Text --//*/ /*// Contributed Freely to the Public Domain without limitation. //*/ /*// 2009 (CC0) [ http://creativecommons.org/publicdomain/zero/1.0 ] //*/ /*// Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ] //*/ /*//-- --//*/</lsl>

Return to top

Questions or Comments?

Feel free to leave me a note on my User Talk page.