From: Pavel Pisa Date: Tue, 12 Nov 2013 01:49:17 +0000 (+0100) Subject: uLUt: add methods to use data queue FIFO for random data in kept history range access. X-Git-Url: https://rtime.felk.cvut.cz/gitweb/ulut.git/commitdiff_plain/022a46a1c27ceb321a50e0f69015038665f3579e uLUt: add methods to use data queue FIFO for random data in kept history range access. Signed-off-by: Pavel Pisa --- diff --git a/ulut/ul_dqfifo.h b/ulut/ul_dqfifo.h index 0dd8f4d..98ac068 100644 --- a/ulut/ul_dqfifo.h +++ b/ulut/ul_dqfifo.h @@ -40,20 +40,20 @@ typedef struct ul_dqfifo_base_t { static inline unsigned int -ul_dqfifo_base_loc2idx(ul_dqfifo_base_t *dqf, ul_dqfifo_loc_t loc) +ul_dqfifo_base_loc2idx(const ul_dqfifo_base_t *dqf, ul_dqfifo_loc_t loc) { return loc & dqf->locmask; } static inline unsigned int -ul_dqfifo_base_is_full(ul_dqfifo_base_t *dqf) +ul_dqfifo_base_is_full(const ul_dqfifo_base_t *dqf) { ul_dqfifo_loc_t locx = dqf->locin ^ dqf->locout; return (locx && !(locx & dqf->locmask)); } static inline unsigned int -ul_dqfifo_base_is_empty(ul_dqfifo_base_t *dqf) +ul_dqfifo_base_is_empty(const ul_dqfifo_base_t *dqf) { return (dqf->locin == dqf->locout); } @@ -66,19 +66,19 @@ typedef struct cust_prefix##_t { \ } cust_prefix##_t; \ \ cust_static_inline unsigned int \ -cust_prefix##_loc2idx(cust_prefix##_t *cdqf, ul_dqfifo_loc_t loc) \ +cust_prefix##_loc2idx(const cust_prefix##_t *cdqf, ul_dqfifo_loc_t loc) \ { \ return ul_dqfifo_base_loc2idx(&cdqf->dqf, loc); \ } \ \ cust_static_inline unsigned int \ -cust_prefix##_is_full(cust_prefix##_t *cdqf) \ +cust_prefix##_is_full(const cust_prefix##_t *cdqf) \ { \ return ul_dqfifo_base_is_full(&cdqf->dqf); \ } \ \ cust_static_inline unsigned int \ -cust_prefix##_is_empty(cust_prefix##_t *cdqf) \ +cust_prefix##_is_empty(const cust_prefix##_t *cdqf) \ { \ return ul_dqfifo_base_is_empty(&cdqf->dqf); \ } \ @@ -149,7 +149,7 @@ cust_prefix##_flush(cust_prefix##_t *cdqf) \ } \ \ cust_static_inline ul_dqfifo_loc_t \ -cust_prefix##_count(cust_prefix##_t *cdqf) \ +cust_prefix##_count(const cust_prefix##_t *cdqf) \ { ul_dqfifo_loc_t loccount; \ cust_barrier; \ loccount = cdqf->dqf.locin - cdqf->dqf.locout; \ @@ -158,7 +158,7 @@ cust_prefix##_count(cust_prefix##_t *cdqf) \ } \ \ cust_static_inline ul_dqfifo_loc_t \ -cust_prefix##_get_locin(cust_prefix##_t *cdqf) \ +cust_prefix##_get_locin(const cust_prefix##_t *cdqf) \ { \ ul_dqfifo_loc_t loc; \ cust_barrier; \ @@ -168,7 +168,7 @@ cust_prefix##_get_locin(cust_prefix##_t *cdqf) \ } \ \ cust_static_inline ul_dqfifo_loc_t \ -cust_prefix##_get_locout(cust_prefix##_t *cdqf) \ +cust_prefix##_get_locout(const cust_prefix##_t *cdqf) \ { \ ul_dqfifo_loc_t loc; \ cust_barrier; \ @@ -178,6 +178,31 @@ cust_prefix##_get_locout(cust_prefix##_t *cdqf) \ } \ \ cust_static_inline void \ +cust_prefix##_at_loc_no_check(const cust_prefix##_t *cdqf, cust_data_t *data, \ + ul_dqfifo_loc_t loc) \ +{ \ + *data = cdqf->buff[cust_prefix##_loc2idx(cdqf, loc)]; \ +} \ +\ +cust_static_inline int \ +cust_prefix##_at_loc(const cust_prefix##_t *cdqf, cust_data_t *data, \ + ul_dqfifo_loc_t loc) \ +{ \ + ul_dqfifo_loc_t locin = cdqf->dqf.locin; \ + ul_dqfifo_loc_t locdiff; \ + cust_barrier; \ + cust_prefix##_at_loc_no_check(cdqf, data, loc); \ + cust_barrier; \ + locdiff = locin - loc; \ + if (locdiff > cdqf->dqf.locmask + 1) \ + return 0; \ + locdiff = cdqf->dqf.locin - loc; \ + if (locdiff > cdqf->dqf.locmask + 1) \ + return 0; \ + return 1; \ +} \ +\ +cust_static_inline void \ cust_prefix##_init(cust_prefix##_t *cdqf, cust_data_t *databuff, \ ul_dqfifo_loc_t locmask) \ { \