Diff for /libelwix/inc/elwix/aring.h between versions 1.2.2.1 and 1.6.2.1

version 1.2.2.1, 2025/09/26 15:51:31 version 1.6.2.1, 2026/02/13 17:09:32
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2025Copyright 2004 - 2026
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 55  typedef struct { Line 55  typedef struct {
                         struct iovec    *rb_buffer;                          struct iovec    *rb_buffer;
 } ringbuf_t;  } ringbuf_t;
   
   typedef struct {
           E_ATOMIC_ALIGN  unsigned int    lrb_head;
           E_ATOMIC_ALIGN  unsigned int    lrb_tail;
           E_ATOMIC_ALIGN  unsigned int    lrb_full;
                           int             lrb_size;
                           unsigned char   *lrb_data;
   } lrbuf_t;
   #define lrb_head(x)             atomic_load_explicit((atomic_int*) &(x)->lrb_head, memory_order_relaxed)
   #define lrb_tail(x)             atomic_load_explicit((atomic_int*) &(x)->lrb_tail, memory_order_relaxed)
   #define lrb_size(x)             ((x)->lrb_size)
   #define lrb_getb(x)             ((x)->lrb_data)
   #define lrb_hptr(x)             ((x)->lrb_data + lrb_head((x)))
   #define lrb_tptr(x)             ((x)->lrb_data + lrb_tail((x)))
   #define lrb_isrewind(x)         (lrb_head((x)) < lrb_tail((x)))
   #define lrb_queued(x, r)        do { \
                                           u_int _h, _t; \
                                           _t = atomic_load_explicit((atomic_int*) &(x)->lrb_tail, memory_order_acquire); \
                                           _h = atomic_load_explicit((atomic_int*) &(x)->lrb_head, memory_order_relaxed); \
                                           if (_h == _t) \
                                                   (r) = atomic_load_explicit((atomic_int*) &(x)->lrb_full, memory_order_acquire) ? \
                                                           (x)->lrb_size : 0; \
                                           else \
                                                   (r) = (_h + (x)->lrb_size - _t) % (x)->lrb_size; \
                                   } while (0)
   #define lrb_unused(x, r)        do { \
                                           u_int _r; \
                                           lrb_queued((x), _r); \
                                           (r) = (x)->lrb_size - _r; \
                                   } while (0)
   
   
 /*  /*
  * rbuf_init() - Init ring buffer   * rbuf_init() - Init ring buffer
  *   *
Line 109  int rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t l Line 139  int rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t l
  * @out = Data, if =NULL, just dequeue data   * @out = Data, if =NULL, just dequeue data
  * return: -1 error, 1 buffer is empty or 0 ok   * return: -1 error, 1 buffer is empty or 0 ok
  */   */
int rbuf_dequeue(ringbuf_t *rbuf, struct iovec *out);int rbuf_dequeue(ringbuf_t *rbuf, struct iovec **out);
 
 
 /*
  * lrb_init() - Init linear ring buffer
  *
  * @lrb = Linear ring buffer
  * @size = Size of ring buffer
  * return: -1 error or 0 ok
  */
 int lrb_init(lrbuf_t *lrb, u_int size);
 /*
  * lrb_free() - Free linear ring buffer
  *
  * @lrb = Linear ring buffer
  * return: none
  */
 void lrb_free(lrbuf_t *lrb);
 /*
  * lrb_purge() - Purge all buffer
  *
  * @lrb = Linear ring buffer
  * return: none
  */
 void lrb_purge(lrbuf_t *lrb);
 /*
  * lrb_isempty() - Check buffer is empty
  *
  * @lrb = Linear ring buffer
  * return: -1 error, 0 it isn't empty
  */
 int lrb_isempty(lrbuf_t *lrb);
 /*
  * lrb_isfull() - Check buffer is full
  *
  * @lrb = Linear ring buffer
  * return: -1 error or 0 it isn't full
  */
 int lrb_isfull(lrbuf_t *lrb);
 /*
  * lrb_enqueue() - Enqueue data to buffer
  *
  * @lrb = Linear ring buffer
  * @data = Data
  * @len = Length
  * @lost = Permit to lost data
  * return: -1 error, 1 buffer is full or 0 ok
  */
 int lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int lost);
 /*
  * lrb_dequeue() - Dequeue data from buffer
  *
  * @lrb = Linear ring buffer
  * @data = Data, if =NULL, just dequeue data
  * @len = Length of data
  * return: -1 error, 0 buffer is empty or >0 stored data bytes
  */
 int lrb_dequeue(lrbuf_t *lrb, void *data, size_t len);
 /*
  * lrb_getw() - Get address for write
  *
  * @lrb = Linear ring buffer
  * @len = Return available buffer length for write
  * return: NULL error or !=NULL pointer for write
  * remark: After use of lrb_getw() and write to pointer.
  *              You should update ring buffer with lrb_enqueue(,NULL,wrote_len,)
  */
 void *lrb_getw(lrbuf_t *lrb, size_t *len);
 /*
  * lrb_getr() - Get address for read
  *
  * @lrb = Linear ring buffer
  * @len = Return available data length for read
  * return: NULL error or !=NULL pointer for read
  * remark: After use of lrb_getr() and read from pointer.
  *              You could update ring buffer with lrb_dequeue(,NULL,read_len)
  */
 void *lrb_getr(lrbuf_t *lrb, size_t *len);
   
   
 #endif  #endif

Removed from v.1.2.2.1  
changed lines
  Added in v.1.6.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>