My suggestions, since it's easy for you to measure
if there's any
effect:
- local data_i= data[i]
to cache the value, and avoid a number of table
accesses (locals are
fast)
- local data_i1= data[i][1]
same thing
- is 'data[i]' a table of two values that do not
change? If so, just
use it, not making a copy?
> local data = dataGenerator()
>
> local subTable = {}
> local subTableBlock = {}
> local subTableType
>
> for i, element in ipairs(data) do
local data_i= data[i]
local data_i1= data_i[1]
> if data_i1 == "<type>" then
> subTableType = data_i[2]
> elseif data_i1 == "</type>" then
> elseif data_i1 == "<block>" then
> subTableBlock =
> {Number=data_i[2],Dup=data_i[3]}
> elseif data_i1 == "</block>" then
> subTable[#subTable+1] = subTableBlock
> else
> if trim(data_i[2]) ~= "" then
> subTableBlock[#subTableBlock+1] =
data_i -- in case it only has [1] and [2]
> end
> end
> end
>
> return subTable, subTableType
>
> end
>
On 21.11.2006, at 17.40, Steve Heller wrote:
> Unfortunately, my timing runs show that your
> suggestion makes no measurable difference. Any
other
> suggestions would be welcomed.
>
> --- Romulo Bahiense <romulo@icontroller.com.br>
wrote:
>
>> I believe the problem is not table allocation,
but
>> index access and
>> length calculation ('#' operator).
>>
>> Try this one:
>>
>> function
createFieldDataEntriesForOneDataGenerator(
>> dataGenerator )
>>
>> local data = dataGenerator()
>>
>> local iSubTable = 0
>> local iSubTableBlock = 0
>>
>> local subTable = {}
>> local subTableBlock = {}
>>
>> local subTableType
>>
>> for i, element in ipairs(data) do
>> local a, b, c = element[ 1 ], element[ 2
],
>> element[ 3 ]
>> if a == "<type>" then
>> subTableType = b
>> elseif a == "</type>" then
>> -- do nothing
>> elseif a == "<block>" then
>> subTableBlock = {Number=b,Dup=c}
>> elseif a == "</block>" then
>> iSubTable = iSubTable + 1
>> subTable[iSubTable] = subTableBlock
>> else
>> if trim(b) ~= "" then
>> iSubTableBlock = iSubTableBlock
+ 1
>> subTableBlock[ iSubTableBlock ]
=
>> {a,b}
>> end
>> end
>> end
>>
>> return subTable, subTableType
>> end
>>
>> Note that, in this code, 'data[i]' is the same as
>> 'element', because
>> ipairs return key and value.
>>
>> --rb
>>
>