mbul

Untitled

Apr 20th, 2016
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.72 KB | None | 0 0
  1.  
  2. function fmsg(fmt_str, ...)
  3.     message(fmt_str:format(...))
  4. end
  5.  
  6. TableFilter ={}
  7. TableFilter.__index = TableFilter
  8. function TableFilter.new(t_name)
  9.    
  10.     filter = {}
  11.     filter.table_name = t_name
  12.     filter.selected_items = {}
  13.     filter.pattern = {}
  14.     filter.start_index=0
  15.     filter.end_index = 0
  16.     setmetatable(filter, TableFilter)
  17.     return filter
  18. end
  19.  
  20. function TableFilter:SetFilter(t)
  21.     self.pattern = t
  22. end
  23.  
  24. function TableFilter:SetRange(s, e)
  25.         self.start_index = s or 0
  26.         self.end_index = e or (getNumberOf(self.table_name)-1)
  27. end
  28.  
  29. function TableFilter:Left()
  30.     return self.start_index
  31. end
  32.  
  33. function TableFilter:Right()
  34.     return self.end_index
  35. end
  36.  
  37. function TableFilter:Update()
  38.     local fields = ""
  39.     local t={}
  40.     for k,v in pairs(self.pattern) do
  41.         fields = fields .. ',' .. tostring(k)
  42.         t[#t+1] = v
  43.     end
  44.     local function fn(...)
  45.         local arg = {...}
  46.         local res=true
  47.         for k,v in ipairs(arg) do
  48.             if t[k] ~= v then
  49.                 res = false
  50.                 break
  51.             end
  52.         end
  53.         return res
  54.     end
  55.     self.selected_items = SearchItems(self.table_name, self.start_index, self.end_index, fn, fields)
  56. end
  57.  
  58. function TableFilter:Result()
  59.     local index = 1
  60.     return function()
  61.         if (self.selected_items[index]) then
  62.            
  63.             local t = getItem(self.table_name, self.selected_items[index])
  64.             index = index+1
  65.             return t
  66.         end
  67.         return nil
  68.     end
  69. end
  70. function TableFilter:GetResultSize()
  71.     return #(self.selected_items)
  72. end
  73. function main()
  74.     filter = TableFilter.new("all_trades")
  75.     filter:SetRange()
  76.     filter:SetFilter {sec_code = 'RIM6', class_code = 'SPBFUT', qty = 1}
  77.    
  78.     _start = os.clock()
  79.     for i = 1, 100 do
  80.         filter:Update()
  81.     end
  82.     _end = os.clock()
  83.    
  84.     fmsg("found %d, took %.3f sec" , filter:GetResultSize(), _end-_start)
  85. end
Add Comment
Please, Sign In to add comment