Difference between revisions of "ListCast"

From Second Life Wiki
Jump to navigation Jump to search
m (usage of rare string formats for floats.)
(Mixed both solutions as (float)llList2String() will reduce accuracy if the value was already a float)
Line 19: Line 19:
             result = [(integer)llList2String(mixedList, x)] + result;
             result = [(integer)llList2String(mixedList, x)] + result;
     else if (type == TYPE_FLOAT)  
     else if (type == TYPE_FLOAT)  
         while ((--x) >= 0)  
         while ((--x) >= 0) {
             result = [(float)llList2String(mixedList, x)] + result;
             if (llGetListEntryType(mixedList, x)) result = [llList2Float(mixedList, x)] + result;
            else result = [(float)llList2String(mixedList, x)] + result;
        }
     else if (type == TYPE_VECTOR)  
     else if (type == TYPE_VECTOR)  
         while ((--x) >= 0)  
         while ((--x) >= 0)  

Revision as of 15:03, 21 January 2009

Summary

Function: list listCast( list mixedList, integer type );

Iterates through the contents of a list, producing a resulting list whose contents are cast to a single type. Please refer to llGetListEntryType() for valid types. This function is useful for converting a list to a type which is more memory efficient, or to a type that you know you are going to access a lot (in order to remove extra casting later-on).
Returns a list whose contents are all one type.

• list mixedList The list to cast, its contents may be anything.
• integer type The type of variable to cast all entries to.

Examples

Implementation

<lsl>list listCast(list mixedList, integer type) {

   list result = []; integer x = mixedList != [];
   if (type == TYPE_INTEGER) 
       while ((--x) >= 0) 
           result = [(integer)llList2String(mixedList, x)] + result;
   else if (type == TYPE_FLOAT) 
       while ((--x) >= 0) {
           if (llGetListEntryType(mixedList, x)) result = [llList2Float(mixedList, x)] + result;
           else result = [(float)llList2String(mixedList, x)] + result;
       }
   else if (type == TYPE_VECTOR) 
       while ((--x) >= 0) 
           result = [(vector)llList2String(mixedList, x)] + result;
   else if (type == TYPE_ROTATION) 
       while ((--x) >= 0) 
           result = [(rotation)llList2String(mixedList, x)] + result;
   else if (type == TYPE_STRING) 
       while ((--x) >= 0) 
           result = [llList2String(mixedList, x)] + result;
   else if (type == TYPE_KEY) 
       while ((--x) >= 0) 
           result = [llList2Key(mixedList, x)] + result;
   else result = mixedList;
   return result;

}</lsl>