Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function fmsg(fmt_str, ...)
- message(fmt_str:format(...))
- end
- TableFilter ={}
- TableFilter.__index = TableFilter
- function TableFilter.new(t_name)
- filter = {}
- filter.table_name = t_name
- filter.selected_items = {}
- filter.pattern = {}
- filter.start_index=0
- filter.end_index = 0
- setmetatable(filter, TableFilter)
- return filter
- end
- function TableFilter:SetFilter(t)
- self.pattern = t
- end
- function TableFilter:SetRange(s, e)
- self.start_index = s or 0
- self.end_index = e or (getNumberOf(self.table_name)-1)
- end
- function TableFilter:Left()
- return self.start_index
- end
- function TableFilter:Right()
- return self.end_index
- end
- function TableFilter:Update()
- local fields = ""
- local t={}
- for k,v in pairs(self.pattern) do
- fields = fields .. ',' .. tostring(k)
- t[#t+1] = v
- end
- local function fn(...)
- local arg = {...}
- local res=true
- for k,v in ipairs(arg) do
- if t[k] ~= v then
- res = false
- break
- end
- end
- return res
- end
- self.selected_items = SearchItems(self.table_name, self.start_index, self.end_index, fn, fields)
- end
- function TableFilter:Result()
- local index = 1
- return function()
- if (self.selected_items[index]) then
- local t = getItem(self.table_name, self.selected_items[index])
- index = index+1
- return t
- end
- return nil
- end
- end
- function TableFilter:GetResultSize()
- return #(self.selected_items)
- end
- function main()
- filter = TableFilter.new("all_trades")
- filter:SetRange()
- filter:SetFilter {sec_code = 'RIM6', class_code = 'SPBFUT', qty = 1}
- _start = os.clock()
- for i = 1, 100 do
- filter:Update()
- end
- _end = os.clock()
- fmsg("found %d, took %.3f sec" , filter:GetResultSize(), _end-_start)
- end
Add Comment
Please, Sign In to add comment