FEMU  原版 master 7e238cc
FEMU: Accurate, Scalable and Extensible NVMe SSD Emulator (FAST'18)
pqueue.c 文件参考
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "../inc/pqueue.h"
pqueue.c 的引用(Include)关系图:

宏定义

#define left(i)   ((i) << 1)
 
#define right(i)   (((i) << 1) + 1)
 
#define parent(i)   ((i) >> 1)
 

函数

pqueue_tpqueue_init (size_t n, pqueue_cmp_pri_f cmppri, pqueue_get_pri_f getpri, pqueue_set_pri_f setpri, pqueue_get_pos_f getpos, pqueue_set_pos_f setpos)
 
void pqueue_free (pqueue_t *q)
 
size_t pqueue_size (pqueue_t *q)
 
static void bubble_up (pqueue_t *q, size_t i)
 
static size_t maxchild (pqueue_t *q, size_t i)
 
static void percolate_down (pqueue_t *q, size_t i)
 
int pqueue_insert (pqueue_t *q, void *d)
 
void pqueue_change_priority (pqueue_t *q, pqueue_pri_t new_pri, void *d)
 
int pqueue_remove (pqueue_t *q, void *d)
 
void * pqueue_pop (pqueue_t *q)
 
void * pqueue_peek (pqueue_t *q)
 
void pqueue_dump (pqueue_t *q, FILE *out, pqueue_print_entry_f print)
 
static void set_pos (void *d, size_t val)
 
static void set_pri (void *d, pqueue_pri_t pri)
 
void pqueue_print (pqueue_t *q, FILE *out, pqueue_print_entry_f print)
 
static int subtree_is_valid (pqueue_t *q, int pos)
 
int pqueue_is_valid (pqueue_t *q)
 

宏定义说明

◆ left

#define left (   i)    ((i) << 1)

◆ parent

#define parent (   i)    ((i) >> 1)

◆ right

#define right (   i)    (((i) << 1) + 1)

函数说明

◆ bubble_up()

static void bubble_up ( pqueue_t q,
size_t  i 
)
static
这是这个函数的调用关系图:

◆ maxchild()

static size_t maxchild ( pqueue_t q,
size_t  i 
)
static
这是这个函数的调用关系图:

◆ percolate_down()

static void percolate_down ( pqueue_t q,
size_t  i 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ pqueue_change_priority()

void pqueue_change_priority ( pqueue_t q,
pqueue_pri_t  new_pri,
void *  d 
)

move an existing entry to a different priority

参数
qthe queue
new_prithe new priority
dthe entry
函数调用图:
这是这个函数的调用关系图:

◆ pqueue_dump()

void pqueue_dump ( pqueue_t q,
FILE *  out,
pqueue_print_entry_f  print 
)

dump the queue and it's internal structure

函数调用图:

◆ pqueue_free()

void pqueue_free ( pqueue_t q)

free all memory used by the queue

参数
qthe queue
这是这个函数的调用关系图:

◆ pqueue_init()

pqueue_t* pqueue_init ( size_t  n,
pqueue_cmp_pri_f  cmppri,
pqueue_get_pri_f  getpri,
pqueue_set_pri_f  setpri,
pqueue_get_pos_f  getpos,
pqueue_set_pos_f  setpos 
)

initialize the queue

参数
nthe initial estimate of the number of queue items for which memory should be preallocated
cmppriThe callback function to run to compare two elements This callback should return 0 for 'lower' and non-zero for 'higher', or vice versa if reverse priority is desired
setprithe callback function to run to assign a score to an element
getprithe callback function to run to set a score to an element
getposthe callback function to get the current element's position
setposthe callback function to set the current element's position
返回
the handle or NULL for insufficent memory
这是这个函数的调用关系图:

◆ pqueue_insert()

int pqueue_insert ( pqueue_t q,
void *  d 
)

insert an item into the queue.

参数
qthe queue
dthe item
返回
0 on success
函数调用图:
这是这个函数的调用关系图:

◆ pqueue_is_valid()

int pqueue_is_valid ( pqueue_t q)

checks that the pq is in the right order, etc

函数调用图:

◆ pqueue_peek()

void* pqueue_peek ( pqueue_t q)

access highest-ranking item without removing it.

参数
qthe queue
返回
NULL on error, otherwise the entry
这是这个函数的调用关系图:

◆ pqueue_pop()

void* pqueue_pop ( pqueue_t q)

pop the highest-ranking item from the queue.

参数
qthe queue
返回
NULL on error, otherwise the entry
函数调用图:
这是这个函数的调用关系图:

◆ pqueue_print()

void pqueue_print ( pqueue_t q,
FILE *  out,
pqueue_print_entry_f  print 
)

print the queue

函数调用图:

◆ pqueue_remove()

int pqueue_remove ( pqueue_t q,
void *  d 
)

remove an item from the queue.

参数
qthe queue
dthe entry
返回
0 on success
函数调用图:

◆ pqueue_size()

size_t pqueue_size ( pqueue_t q)

return the size of the queue.

参数
qthe queue
这是这个函数的调用关系图:

◆ set_pos()

static void set_pos ( void *  d,
size_t  val 
)
static
这是这个函数的调用关系图:

◆ set_pri()

static void set_pri ( void *  d,
pqueue_pri_t  pri 
)
static
这是这个函数的调用关系图:

◆ subtree_is_valid()

static int subtree_is_valid ( pqueue_t q,
int  pos 
)
static
这是这个函数的调用关系图: