Difference between revisions of "User:Cory Fimicoloud"
m (→LSL Functions) |
|||
Line 1: | Line 1: | ||
{{User:Cory Fimicoloud/hcard}} | {{User:Cory Fimicoloud/hcard}} | ||
== | ==My Functions== | ||
===Text=== | |||
====String==== | |||
=====UTF8Len===== | |||
===UTF8Len=== | |||
Returns the UTF-8 byte count of the string passed to it. | Returns the UTF-8 byte count of the string passed to it. | ||
<lsl> | <lsl> | ||
Line 36: | Line 34: | ||
}</lsl> | }</lsl> | ||
===UTF8Split=== | =====UTF8Split===== | ||
Returns a list containing the string passed to it, split every fiSplit bytes. | Returns a list containing the string passed to it, split every fiSplit bytes. | ||
<lsl> | <lsl> |
Revision as of 03:02, 25 January 2009
My Functions
Text
String
UTF8Len
Returns the UTF-8 byte count of the string passed to it. <lsl> integer UTF8Len(string fsString) { // Author: Cory Fimicoloud // License: http://creativecommons.org/licenses/by-sa/3.0/us/ integer liLen = ~llStringLength(fsString); string lsChar = ""; string lsEnc = ""; integer liByteLen = 0; while (++liLen < 0) { lsEnc = llEscapeURL((lsChar = llGetSubString(fsString, liLen, liLen))); if (lsChar != lsEnc) liByteLen += llStringLength(lsEnc) / 3; else ++liByteLen; } return liByteLen; } default { state_entry() { // 63 characters. Each of the characters uses 1 byte except for ¢ (2 bytes) and € (3 bytes). Which results in 66 bytes. string lsString = "Can I have $10 and 7¢, please? I would prefer it in €'s though."; llOwnerSay("'" + lsString + "' is " + (string)UTF8Len(lsString) + " bytes."); } }</lsl>
UTF8Split
Returns a list containing the string passed to it, split every fiSplit bytes. <lsl> list UTF8Split(string fsString, integer fiSplit) { // Author: Cory Fimicoloud // License: http://creativecommons.org/licenses/by-sa/3.0/us/ string lsSplit = ""; list laSplit = []; integer liLen = ~llStringLength(fsString); string lsChar = ""; string lsEnc = ""; integer liByteLen = 0; while (++liLen < 0) { lsChar = llGetSubString(fsString, liLen, liLen); lsEnc = llEscapeURL(lsChar); if (lsChar != lsEnc) liByteLen += llStringLength(lsEnc) / 3; else ++liByteLen; if (liByteLen <= fiSplit) lsSplit += lsChar; else { laSplit += [lsSplit]; lsSplit = lsChar; liByteLen = 1; } } return laSplit + [lsSplit]; } default { state_entry() { list laSplit = UTF8Split("Can I have $10 and 7¢, please? I would prefer it in €'s though.", 33); llOwnerSay("\nUTF8Split\n==========\n\t0: " + llList2String(laSplit, 0) + "\n\t1: " + llList2String(laSplit, 1)); } }</lsl>
Miscellaneous
LSL/Mono Differences
Results are from 1000 iterations and are in seconds.
VM | Average | Total |
---|---|---|
Mono | 0.010054 | 10.053950 |
LSL | 0.000038 | 00.037993 |