LCOV - code coverage report
Current view: top level - tango/lru - fd_list.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 67 67 100.0 %
Date: 2024-11-13 11:58:15 Functions: 14 14 100.0 %

          Line data    Source code
       1             : #include "fd_list.h"
       2             : 
       3             : ulong
       4           3 : fd_list_align( void ) {
       5           3 :   return FD_LIST_ALIGN;
       6           3 : }
       7             : 
       8             : ulong
       9           3 : fd_list_footprint( ulong max ) {
      10           3 :   return ( max + 1 ) * sizeof( fd_list_t );
      11           3 : }
      12             : 
      13             : void *
      14           6 : fd_list_new( void * mem, ulong max ) {
      15           6 :   fd_list_t * sentinel = (fd_list_t *)mem;
      16           6 :   sentinel->tag        = 0;
      17           6 :   sentinel->curr       = 0;
      18           6 :   sentinel->prev       = 0;
      19           6 :   sentinel->next       = 0;
      20           6 :   fd_list_t * curr = sentinel;
      21      196626 :   for ( ulong i = 1; i <= max; i++ ) {
      22      196620 :     fd_list_t * new = sentinel + i;
      23      196620 :     new->curr = i;
      24      196620 :     fd_list_insert( curr, new );
      25      196620 :     curr = new;
      26      196620 :   }
      27           6 :   return mem;
      28           6 : }
      29             : 
      30             : fd_list_t *
      31           3 : fd_list_join( void * mem ) {
      32           3 :   return (fd_list_t *)mem;
      33           3 : }
      34             : 
      35             : fd_list_t *
      36     1966119 : fd_list_prev( fd_list_t * curr ) {
      37     1966119 :   return curr - curr->curr + curr->prev;
      38     1966119 : }
      39             : 
      40             : fd_list_t *
      41     2556000 : fd_list_next( fd_list_t * curr ) {
      42     2556000 :   return curr - curr->curr + curr->next;
      43     2556000 : }
      44             : 
      45             : fd_list_t *
      46     1573005 : fd_list_sentinel( fd_list_t * list ) {
      47     1573005 :   return list - list->curr;
      48     1573005 : }
      49             : 
      50             : fd_list_t *
      51      786513 : fd_list_head( fd_list_t * list ) {
      52      786513 :   fd_list_t * sentinel = fd_list_sentinel( list );
      53      786513 :   return sentinel + sentinel->next;
      54      786513 : }
      55             : 
      56             : fd_list_t *
      57          12 : fd_list_tail( fd_list_t * list ) {
      58          12 :   fd_list_t * sentinel = fd_list_sentinel( list );
      59          12 :   return sentinel + sentinel->prev;
      60          12 : }
      61             : 
      62             : int
      63      786477 : fd_list_is_empty( fd_list_t * list ) {
      64      786477 :   return fd_list_head(list) == fd_list_sentinel( list );
      65      786477 : }
      66             : 
      67             : fd_list_t *
      68      983067 : fd_list_insert( fd_list_t * curr, fd_list_t * new ) {
      69      983067 :   new->prev                  = curr->curr;
      70      983067 :   new->next                  = curr->next;
      71      983067 :   fd_list_next( curr )->prev = new->curr;
      72      983067 :   curr->next                 = new->curr;
      73      983067 :   return new;
      74      983067 : }
      75             : 
      76             : fd_list_t *
      77      786459 : fd_list_remove( fd_list_t * curr ) {
      78      786459 :   if ( FD_UNLIKELY( fd_list_is_empty( curr ) ) ) return NULL;
      79      786459 :   fd_list_prev( curr )->next = curr->next;
      80      786459 :   fd_list_next( curr )->prev = curr->prev;
      81      786459 :   curr->prev                 = 0;
      82      786459 :   curr->next                 = 0;
      83      786459 :   return curr;
      84      786459 : }
      85             : 
      86             : fd_list_t *
      87           3 : fd_list_push_back( fd_list_t * list, fd_list_t * new ) {
      88           3 :   return fd_list_insert( fd_list_tail( list ), new );
      89           3 : }
      90             : 
      91             : fd_list_t *
      92          18 : fd_list_pop_front( fd_list_t * list ) {
      93          18 :   fd_list_t * head = fd_list_head( list );
      94          18 :   if ( FD_UNLIKELY( fd_list_is_empty( list ) ) ) { return NULL; }
      95          15 :   return fd_list_remove( head );
      96          18 : }

Generated by: LCOV version 1.14