Difference between revisions of "User:Strife Onizuka"

From Second Life Wiki
Jump to navigation Jump to search
(→‎My Code: update tightlist functions)
Line 50: Line 50:


==My Code==
==My Code==
<pre>string TightListDump(list a, string b) {
<pre>list TightListParse(string input)
     string c = (string)a;
{
    if(llStringLength(b)==1)
     string seperator = llGetSubString(input,(0),(0));//save memory
        if(llSubStringIndex(c,b) == -1)
     return llParseStringKeepNulls(llDeleteSubString(input,(0),(0)), [input=seperator],[]);
            jump end;
     integer d = 1 - llStringLength(b += "|\\/?!@#$%^&*()_=:;~{}[],\n\" qQxXzZ");
    while(1+llSubStringIndex(c,llGetSubString(b,d,d)) && d)
        ++d;
    b = llGetSubString(b,d,d);
    @end;
    c = "";//save memory
    return b + llDumpList2String(a, b);
}
}


list TightListParse(string a) {
string TightListDump(list input, string possibles)
     string b = llGetSubString(a,0,0);//save memory
{//TLD( complex) makes a string from a list using a seperator that is supposed to be unique to the string
     return llParseStringKeepNulls(llDeleteSubString(a,0,0), [a=b],[]);
     string buffer = (string)(input);//dump the list without a seperator
}
integer counter = -39 - llStringLength(possibles);
     if(counter == -40)
        if(!~llSubStringIndex(buffer,possibles))
            jump end;//woot, we were given a unique seperator
possibles += "|/?!@#$%^&*()_=:;~`'<>{}[],.\n\" qQxXzZ\\";//Good character set of rarely used letters.
do; while(~llSubStringIndex(buffer,llGetSubString(possibles,counter,counter)) && (counter=-~counter));//search for unique seperator
 
possibles = llGetSubString(possibles,counter,counter);


list quickread(string a)
    @end;
{
     buffer = "";//save memory
     string c = llGetSubString(a,0,6);
     return possibles + llDumpList2String((input = []) + input, possibles);
     return llDeleteSubList([a]+//a = llGetSubString(c,0,0) by this point
                        llParseStringKeepNulls(llDeleteSubString(a,0,5), [],[a=llGetSubString(c,0,0),
                        llGetSubString(c,1,1),llGetSubString(c,2,2),llGetSubString(c,3,3),
                        llGetSubString(c,4,4),llGetSubString(c,5,5)]),
                        (llSubStringIndex(c,llGetSubString(c,6,6))==-1),1);
}
}


integer TightListTypeLength(string a)
integer TightListTypeLength(string input)
{
{
     return llGetListLength(quickread(a))/2;
    string seperators = llGetSubString(input,(0),6);
     return ((llParseStringKeepNulls(llDeleteSubString(input,(0),5), [],[input=llGetSubString(seperators,(0),(0)),
  llGetSubString(seperators,1,1),llGetSubString(seperators,2,2),llGetSubString(c,3,3),
  llGetSubString(seperators,4,4),llGetSubString(seperators,5,5)]) != []) + (llSubStringIndex(seperators,llGetSubString(seperators,6,6)) < 6)) >> 1;
}
}


integer TightListTypeEntryType(string a, integer b)
integer TightListTypeEntryType(string input, integer index)
{
{
     string c = llGetSubString(a,0,6);
     string seperators = llGetSubString(input,(0),6);
    a = llList2String(quickread(a), b * 2);
return llSubStringIndex(seperators, input) + ((input = llList2String(llList2List(input + llParseStringKeepNulls(llDeleteSubString(input,(0),5), [],[input=llGetSubString(seperators,(0),(0)), llGetSubString(seperators,1,1),llGetSubString(seperators,2,2),llGetSubString(seperators,3,3), llGetSubString(seperators,4,4),llGetSubString(seperators,5,5)]), (llSubStringIndex(seperators,llGetSubString(seperators,6,6)) < 6) << 1, -1),  index << 1)) != "");
    return 1 + llSubStringIndex(c, a) - !llStringLength(a);
}
}


list TightListTypeParse(string a) {
list TightListTypeParse(string input) {
     if(llStringLength(a) < 7) return [];
     list partial;
    string m = llGetSubString(a,0,6);
if(llStringLength(input) > 6)
    list b = quickread((a = "") + a);
{
    integer c = -llGetListLength(b);
string seperators = llGetSubString(input,(0),6);
    list f;
integer pos = ([] != (partial = llList2List(input + llParseStringKeepNulls(llDeleteSubString(input,(0),5), [],[input=llGetSubString(seperators,(0),(0)), llGetSubString(seperators,1,1),llGetSubString(seperators,2,2),llGetSubString(seperators,3,3), llGetSubString(seperators,4,4),llGetSubString(seperators,5,5)]), (llSubStringIndex(seperators,llGetSubString(seperators,6,6)) < 6) << 1, -1)));
    integer d;
integer type = (0);
    do
integer sub_pos = (0);
    {
do
        f = [a = llList2String(b,c + 1)]; //TYPE_STRING || TYPE_INVALID (though we don't care about invalid)
{
        if((d = (1 + llSubStringIndex(m, llList2String(b,c)))) == TYPE_FLOAT)
list current = (list)(input = llList2String(partial, sub_pos= -~pos));//TYPE_STRING || TYPE_INVALID (though we don't care about invalid)
            f = [(float)a];
if(!(type = llSubStringIndex(seperators, llList2String(partial,pos))))//TYPE_INTEGER
        else if(d == TYPE_VECTOR)
current = (list)((integer)input);
            f = [(vector)a];
else if(type == 1)//TYPE_FLOAT
        else if(d == TYPE_ROTATION)
current = (list)((float)input);
            f = [(rotation)a];
else if(type == 3)//TYPE_KEY
        else if(d == TYPE_KEY)
current = (list)((key)input);
            f = [(key)a];
else if(type == 4)//TYPE_VECTOR
        else if(d == TYPE_INTEGER)
current = (list)((vector)input);
            f = [(integer)a];
else if(type == 5)//TYPE_ROTATION
        b = llListReplaceList(b, f, c, c+1);
current = (list)((rotation)input);
    }while(0 > (c+=2));
partial = llListReplaceList(partial, current, pos, sub_pos);
     return b;
}while((pos= -~sub_pos) & 0x80000000);
}
     return partial;
}
}


string TightListTypeDump(list a, string b) {
string TightListTypeDump(list input, string seperators) {//This function is dangerous
     b += "|\\/?!@#$%^&*()_=:;~{}[],\n\" qQxXzZ";
     seperators += "|/?!@#$%^&*()_=:;~`'<>{}[],.\n\" qQxXzZ\\";
     string c = (string)a;
     string cumulator = (string)(input);
     integer d = 0;
     integer counter = (0);
     do
     do
         if(1+llSubStringIndex(c,llGetSubString(b,d,d)))
         if(~llSubStringIndex(cumulator,llGetSubString(seperators,counter,counter)))
             b = llDeleteSubString(b,d,d);
             seperators = llDeleteSubString(seperators,counter,counter);
         else
         else
             ++d;
             counter = -~counter;
     while(d<6);
     while(counter<6);
     b = " " + c = llGetSubString(b,0,5);
     seperators = llGetSubString(seperators,(0),5);
    integer e;
 
    string f;
cumulator =  "";
     if((d = -llGetListLength(a)))
 
     if((counter = (input != [])))
     {
     {
         do
         do
         {
         {
             e = llGetListEntryType(a,d);
             integer type = ~-llGetListEntryType(input, counter = ~-counter);
            if(e == TYPE_VECTOR)
 
                f = vec(llList2Vector(a,d));
cumulator = (cumulator = llGetSubString(seperators,type,type)) + llList2String(input,counter) + cumulator;
            else if(e == TYPE_ROTATION)
         }while(counter);
                f = rot(llList2Rot(a,d));
            else if(e == TYPE_FLOAT)
                f = flo(llList2Float(a,d));
            else
                f = llList2String(a,d);
            c+= llGetSubString(b,e,e) + f;
         }while(++d);
     }
     }
     return c;
     return seperators + cumulator;
}</pre>
}
</pre>





Revision as of 05:56, 8 March 2007

About Me

I'm an immigrant from URU. Was in all 3 of it's beta's.

Wiki Gnome (causing drama isn't why I'm here).

I have a webpage but haven't updated it in a few months...

Wiki's are the way of the future when it comes to making documentation Ad-hoc but eventually become static as graffiti grows with popularity as a way of controlling it.

also contribute to some other wiki's History Wiki AviSynth:BlindWanderer

When it comes to writing I tend to go towards concise. A short accurate description is better then a long equally accurate description; less to get confused with, easier to find the important information (because it is all important).

Downloads

Updates: Preview Download
[DMZ] [Preview]
[Agni] [Preview]
[Colo] [Preview]
[Siva] [Preview]
[Durga] [Preview]
[Aditi] [Preview]
[Soma] [Preview]
[Ganga] [Preview]
[Uma] [Preview]

My Code

list TightListParse(string input)
{
    string seperator = llGetSubString(input,(0),(0));//save memory
    return llParseStringKeepNulls(llDeleteSubString(input,(0),(0)), [input=seperator],[]);
}

string TightListDump(list input, string possibles)
{//TLD( complex) makes a string from a list using a seperator that is supposed to be unique to the string
    string buffer = (string)(input);//dump the list without a seperator
	integer counter = -39 - llStringLength(possibles);
    if(counter == -40)
        if(!~llSubStringIndex(buffer,possibles))
            jump end;//woot, we were given a unique seperator
	possibles += "|/?!@#$%^&*()_=:;~`'<>{}[],.\n\" qQxXzZ\\";//Good character set of rarely used letters.
	do; while(~llSubStringIndex(buffer,llGetSubString(possibles,counter,counter)) && (counter=-~counter));//search for unique seperator

	possibles = llGetSubString(possibles,counter,counter);

    @end;
    buffer = "";//save memory
    return possibles + llDumpList2String((input = []) + input, possibles);
}

integer TightListTypeLength(string input)
{
    string seperators = llGetSubString(input,(0),6);
    return ((llParseStringKeepNulls(llDeleteSubString(input,(0),5), [],[input=llGetSubString(seperators,(0),(0)),
		   llGetSubString(seperators,1,1),llGetSubString(seperators,2,2),llGetSubString(c,3,3),
		   llGetSubString(seperators,4,4),llGetSubString(seperators,5,5)]) != []) + (llSubStringIndex(seperators,llGetSubString(seperators,6,6)) < 6)) >> 1;
}

integer TightListTypeEntryType(string input, integer index)
{
    string seperators = llGetSubString(input,(0),6);
	return llSubStringIndex(seperators, input) + ((input = llList2String(llList2List(input + llParseStringKeepNulls(llDeleteSubString(input,(0),5), [],[input=llGetSubString(seperators,(0),(0)), llGetSubString(seperators,1,1),llGetSubString(seperators,2,2),llGetSubString(seperators,3,3), llGetSubString(seperators,4,4),llGetSubString(seperators,5,5)]), (llSubStringIndex(seperators,llGetSubString(seperators,6,6)) < 6) << 1, -1),  index << 1)) != "");
}

list TightListTypeParse(string input) {
    list partial;
	if(llStringLength(input) > 6)
	{
		string seperators = llGetSubString(input,(0),6);
		integer pos = ([] != (partial = llList2List(input + llParseStringKeepNulls(llDeleteSubString(input,(0),5), [],[input=llGetSubString(seperators,(0),(0)), llGetSubString(seperators,1,1),llGetSubString(seperators,2,2),llGetSubString(seperators,3,3), llGetSubString(seperators,4,4),llGetSubString(seperators,5,5)]), (llSubStringIndex(seperators,llGetSubString(seperators,6,6)) < 6) << 1, -1)));
		integer type = (0);
		integer sub_pos = (0);
		do
		{
			list current = (list)(input = llList2String(partial, sub_pos= -~pos));//TYPE_STRING || TYPE_INVALID (though we don't care about invalid)
			if(!(type = llSubStringIndex(seperators, llList2String(partial,pos))))//TYPE_INTEGER
				current = (list)((integer)input);
			else if(type == 1)//TYPE_FLOAT
				current = (list)((float)input);
			else if(type == 3)//TYPE_KEY
				current = (list)((key)input);
			else if(type == 4)//TYPE_VECTOR
				current = (list)((vector)input);
			else if(type == 5)//TYPE_ROTATION
				current = (list)((rotation)input);
			partial = llListReplaceList(partial, current, pos, sub_pos);
		}while((pos= -~sub_pos) & 0x80000000);
	}
    return partial;
}

string TightListTypeDump(list input, string seperators) {//This function is dangerous
    seperators += "|/?!@#$%^&*()_=:;~`'<>{}[],.\n\" qQxXzZ\\";
    string cumulator = (string)(input);
    integer counter = (0);
    do
        if(~llSubStringIndex(cumulator,llGetSubString(seperators,counter,counter)))
            seperators = llDeleteSubString(seperators,counter,counter);
        else
            counter = -~counter;
    while(counter<6);
    seperators = llGetSubString(seperators,(0),5);

		cumulator =  "";

    if((counter = (input != [])))
    {
        do
        {
            integer type = ~-llGetListEntryType(input, counter = ~-counter);

			cumulator = (cumulator = llGetSubString(seperators,type,type)) + llList2String(input,counter) + cumulator;
        }while(counter);
    }
    return seperators + cumulator;
}


integer fui(float a)
{//union float to integer
    integer b = (a<0) << 31;
    if(a)
    {
        if((a = llFabs(a)) < 1.1754943508222875079687365372222e-38)
            return b | (integer)(a / 1.4012984643248170709237295832896e-45);
        integer c = llFloor(llLog(a) / 0.69314718055994530941723212145818);
        if(c > 127){c = 127;}
        if((a /= (float)("0x1p"+(string)c)) < 1){a*=2; --c;}
        return ((c + 127) << 23 ) | (integer)((a - 1) * 8388608.0) | b;
    }
    return ((string)a == (string)(-0.0)) << 31;
}

float iuf(integer a)
{//union integer to float
    integer c= (a >> 23) & 0xff;
    float b = (a & 0x7fffff) * 1.1920928955078125e-7;
    if(c == 0xff)
        b = 1 / 0; //NaN or Infinity (since getting them crashes the script, thats we do).
    else if(c)
        b = (b + 1) * (float)("0x1p"+(string)(c - 127));
    else
        b = b * 1.1754943508222875079687365372222e-38;
    return b * ((a >> 31) | 1);
}

string hexc="0123456789ABCDEF";

string int6hex(integer x) 
{
    integer x0 = 0;
    string res = "";
    integer c = 26;
    do res += llGetSubString(hexc,x0 = (x >> c-=4) & 0xf , x0); while(c > 0); 
    return res;
}

float iuf_alt(integer a)
{//union integer to float
    integer c = (a >> 23) & 0xff;
    float b;
    if(c == 0xff)
        b = 1 / 0; //NaN or Infinity (since getting them crashes the script, thats we do).
    else if(c)
        b = (float)("0x1."+int6hex(a << 1)+"p"+(string)(c - 127));
    else
        b = (a & 0x7fffff) * 1.4012984643248170709237295832896e-45;
    return b * ((a >> 31) | 1);
}
integer FloatCompare(float a, float b, integer c)
{//compare floats and allow for a margin of error, requires fui().
    if(a - b)//(c) Strife Onizuka 2006 
    {//they are not equal
        //First we convert the floats to integer form, as they would be in memory;
        integer a_i = fui(a);
        integer b_i = fui(b);
        integer a_e = (a_i >> 23) & 0xff;
        integer b_e = (b_i >> 23) & 0xff;
        if(!(a_e || b_e) || //to disable the +/- roll under support put a // just before the !
            ((a_i & 0x80000000) == (b_i & 0x80000000)))//sign match check
        {//start by getting and testing the difference, this is what limits c
            integer diff = a_e - b_e;//ugly is fast, basicly, it gets the mantissa, sets the sign on the mantisa,
            if(diff >= -1 || diff <= 1)//shifts it depending on exponent, finaly executes the test.
                if(llAbs(((((a_i & 0x7FFFFF) | (!!a_e << 23)) * ((a_i >> 31) | 1)) >> !~-diff) - 
                         ((((b_i & 0x7FFFFF) | (!!b_e << 23)) * ((b_i >> 31) | 1)) >> !~diff)) <= c)
                    jump out;
        }
        return (a > b) - (a < b);
    }
    @out;
    return 0;
}
integer bitcount(integer n)
{//MIT Hackmem 169, modified to work in LSL
    integer tmp = n - ((n >> 1) & 0x5B6DB6DB)//modified mask
                    - ((n >> 2) & 0x49249249);
    return (((tmp + (tmp >> 3)) & 0xC71C71C7) % 63) + (n < 0);
}