summaryrefslogtreecommitdiffstats
path: root/docs/about.rst
AgeCommit message (Expand)AuthorFilesLines
2021-03-16docs: ikev2 usecasesFilip Tehlar1-2/+2
2021-01-14docs: Update FIB documentationNeale Ranns1-2/+2
2020-07-28docs: Update the VPP tutorialJohn DeNisco1-2/+2
2019-12-11docs: Rework the startup configuration sectionJohn DeNisco1-2/+2
2019-11-06docs: Rewrite the what is VPP (first) section, also fix the buildJohn DeNisco1-2/+2
2019-09-11docs: run-sphinx-docs-mergedjdenisco1-2/+2
2019-07-19docs: Fix conf.py for read the docsjdenisco1-2/+2
2019-06-27docs: Update the vhost sectionjdenisco1-2/+2
2019-05-30FIB: correctly report IPv6 FIB Unicast and Multicast memory usage (VPP-1578)"Neale Ranns1-2/+2
2019-05-28docs: Add some packages for building the docsjdenisco1-2/+2
2019-05-17docs: Fix Versions and Titlesjdenisco1-2/+2
2019-05-10docs: Add 1904jdenisco1-2/+2
2019-04-25docs: Add VPP inside the CloudFrancesco Spinelli1-2/+2
2019-02-27Fix centos build and build documentationjdenisco1-2/+2
2019-02-23Add support for 19.01jdenisco1-2/+2
2019-01-31docs: Instructions for using vmxnet3 on macjdenisco1-2/+2
2018-12-17docs: Add vmxmet3 driverjdenisco1-2/+2
2018-12-13docs: Update the requirementsjdenisco1-2/+2
2018-12-06DOC-ONLY: MFIB documentationNeale Ranns1-2/+2
2018-11-27docs: Add more on trexjdenisco1-2/+2
2018-11-13docs and Config utility, package cloud supportjdenisco1-2/+2
2018-11-12docs: add 1810, including package cloudjdenisco1-2/+2
2018-11-06docs: Add version and build datejdenisco1-0/+9
>struct { /* Node index of parent. */ u32 parent; /* Node index of first child. */ u32 first_child; /* Next and previous nodes in doubly linked list of siblings. */ u32 next_sibling, prev_sibling; /* Key (distance) for this node. Parent always has key <= than keys of children. */ u32 key; /* Number of children (as opposed to descendents). */ u32 rank; u32 is_marked; /* Set to one when node is inserted; zero when deleted. */ u32 is_valid; } fheap_node_t; #define foreach_fheap_node_sibling(f,ni,first_ni,body) \ do { \ u32 __fheap_foreach_first_ni = (first_ni); \ u32 __fheap_foreach_ni = __fheap_foreach_first_ni; \ u32 __fheap_foreach_next_ni; \ fheap_node_t * __fheap_foreach_n; \ if (__fheap_foreach_ni != ~0) \ while (1) \ { \ __fheap_foreach_n = fheap_get_node ((f), __fheap_foreach_ni); \ __fheap_foreach_next_ni = __fheap_foreach_n -> next_sibling; \ (ni) = __fheap_foreach_ni; \ \ body; \ \ /* End of circular list? */ \ if (__fheap_foreach_next_ni == __fheap_foreach_first_ni) \ break; \ \ __fheap_foreach_ni = __fheap_foreach_next_ni; \ \ } \ } while (0) typedef struct { u32 min_root; /* Vector of nodes. */ fheap_node_t *nodes; u32 *root_list_by_rank; u32 enable_validate; u32 validate_serial; } fheap_t; /* Initialize empty heap. */ always_inline void fheap_init (fheap_t * f, u32 n_nodes) { fheap_node_t *save_nodes = f->nodes; u32 *save_root_list = f->root_list_by_rank; memset (f, 0, sizeof (f[0])); f->nodes = save_nodes; f->root_list_by_rank = save_root_list; vec_validate (f->nodes, n_nodes - 1); vec_reset_length (f->root_list_by_rank); f->min_root = ~0; } always_inline void fheap_free (fheap_t * f) { vec_free (f->nodes); vec_free (f->root_list_by_rank); } always_inline u32 fheap_find_min (fheap_t * f) { return f->min_root; } always_inline u32 fheap_is_empty (fheap_t * f) { return f->min_root == ~0; } /* Add/delete nodes. */ void fheap_add (fheap_t * f, u32 ni, u32 key); void fheap_del (fheap_t * f, u32 ni); /* Delete and return minimum. */ u32 fheap_del_min (fheap_t * f, u32 * min_key); /* Change key value. */ void fheap_decrease_key (fheap_t * f, u32 ni, u32 new_key); #endif /* included_clib_fheap_h */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */