11from dxfeed.core.utils.helpers cimport *
22from dxfeed.core.utils.handler cimport EventHandler
33from collections import namedtuple
4+ cimport cython
45
56cdef class FuncWrapper:
67 def __cinit__ (self ):
@@ -18,31 +19,35 @@ TRADE_COLUMNS = ['Symbol', 'Sequence', 'Price', 'ExchangeCode', 'Size', 'Tick',
1819TradeTuple = namedtuple(' Trade' , [' symbol' , ' sequence' , ' price' , ' exchange_code' , ' size' , ' tick' , ' change' ,
1920 ' day_volume' , ' day_turnover' , ' direction' , ' time' , ' time_nanos' , ' raw_flags' ,
2021 ' is_eth' , ' scope' ])
22+ @ cython.boundscheck (False )
23+ @ cython.wraparound (False )
2124cdef void trade_default_listener(int event_type,
2225 dxf_const_string_t symbol_name,
2326 const dxf_event_data_t* data,
2427 int data_count, void * user_data) nogil:
2528 cdef dxf_trade_t* trades = < dxf_trade_t* > data
29+
2630 with gil:
2731 py_data = < EventHandler> user_data
28-
32+ events = [ None ] * data_count
2933 for i in range (data_count):
30- trade_event = TradeTuple(symbol = unicode_from_dxf_const_string_t(symbol_name),
31- sequence = trades[i].sequence,
32- price = trades[i].price,
33- exchange_code = unicode_from_dxf_const_string_t(& trades[i].exchange_code),
34- size = trades[i].size,
35- tick = trades[i].tick,
36- change = trades[i].change,
37- day_volume = trades[i].day_volume,
38- day_turnover = trades[i].day_turnover,
39- direction = trades[i].direction,
40- time = trades[i].time,
41- time_nanos = trades[i].time_nanos,
42- raw_flags = trades[i].raw_flags,
43- is_eth = trades[i].is_eth,
44- scope = trades[i].scope)
45- py_data.cython_internal_update_method(trade_event)
34+ events[i] = TradeTuple(symbol = unicode_from_dxf_const_string_t(symbol_name),
35+ sequence = trades[i].sequence,
36+ price = trades[i].price,
37+ exchange_code = unicode_from_dxf_const_string_t(& trades[i].exchange_code),
38+ size = trades[i].size,
39+ tick = trades[i].tick,
40+ change = trades[i].change,
41+ day_volume = trades[i].day_volume,
42+ day_turnover = trades[i].day_turnover,
43+ direction = trades[i].direction,
44+ time = trades[i].time,
45+ time_nanos = trades[i].time_nanos,
46+ raw_flags = trades[i].raw_flags,
47+ is_eth = trades[i].is_eth,
48+ scope = trades[i].scope)
49+
50+ py_data.cython_internal_update_method(events)
4651
4752QUOTE_COLUMNS = [' Symbol' , ' Sequence' , ' Time' , ' Nanos' , ' BidTime' , ' BidExchangeCode' , ' BidPrice' , ' BidSize' , ' AskTime' ,
4853 ' AskExchangeCode' , ' AskPrice' , ' AskSize' , ' Scope' ]
0 commit comments