@@ -81,7 +81,8 @@ static pc_qset_t *qset_new( int expo )
8181}
8282
8383static void upd_ema (
84- pc_ema_t * ptr , pd_t * val , pd_t * conf , int64_t nslot , pc_qset_t * qs )
84+ pc_ema_t * ptr , pd_t * val , pd_t * conf , int64_t nslot , pc_qset_t * qs
85+ , pc_price_t * prc_ptr )
8586{
8687 pd_t numer [1 ], denom [1 ], cwgt [1 ], wval [1 ], decay [1 ], diff [1 ], one [1 ];
8788 pd_new ( one , 100000000L , -8 );
@@ -102,8 +103,15 @@ static void upd_ema(
102103 pd_add ( decay , decay , one , qs -> fact_ );
103104
104105 // compute numer/denom and new value from decay factor
105- pd_load ( numer , ptr -> numer_ );
106- pd_load ( denom , ptr -> denom_ );
106+ if ( prc_ptr -> drv1_ ) {
107+ pd_load ( numer , ptr -> numer_ );
108+ pd_load ( denom , ptr -> denom_ );
109+ }
110+ else {
111+ /* temporary upgrade code */
112+ pd_new_scale ( numer , ptr -> numer_ , PD_EMA_EXPO );
113+ pd_new_scale ( denom , ptr -> denom_ , PD_EMA_EXPO );
114+ }
107115 pd_mul ( numer , numer , decay );
108116 pd_mul ( wval , val , cwgt );
109117 pd_add ( numer , numer , wval , qs -> fact_ );
@@ -117,6 +125,7 @@ static void upd_ema(
117125 ptr -> val_ = val -> v_ ;
118126 pd_store ( & ptr -> numer_ , numer );
119127 pd_store ( & ptr -> denom_ , denom );
128+ prc_ptr -> drv1_ = 1 ;
120129}
121130
122131static inline void upd_twap (
@@ -125,8 +134,8 @@ static inline void upd_twap(
125134 pd_t px [1 ], conf [1 ];
126135 pd_new_scale ( px , ptr -> agg_ .price_ , ptr -> expo_ );
127136 pd_new_scale ( conf , ( int64_t )( ptr -> agg_ .conf_ ), ptr -> expo_ );
128- upd_ema ( & ptr -> twap_ , px , conf , nslots , qs );
129- upd_ema ( & ptr -> twac_ , conf , conf , nslots , qs );
137+ upd_ema ( & ptr -> twap_ , px , conf , nslots , qs , ptr );
138+ upd_ema ( & ptr -> twac_ , conf , conf , nslots , qs , ptr );
130139}
131140
132141// compute weighted percentile
0 commit comments