mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-09 05:58:17 +00:00
Merge pull request #9751 from ewlumpkin/comment_spelling_fixes
lib: fix spelling nits in more lib files' comments
This commit is contained in:
commit
d555177021
@ -121,7 +121,7 @@ static void atomlist_del_core(struct atomlist_head *h,
|
|||||||
memory_order_consume);
|
memory_order_consume);
|
||||||
|
|
||||||
/* track the beginning of a chain of deleted items
|
/* track the beginning of a chain of deleted items
|
||||||
* this is neccessary to make this lock-free; we can
|
* this is necessary to make this lock-free; we can
|
||||||
* complete deletions started by other threads.
|
* complete deletions started by other threads.
|
||||||
*/
|
*/
|
||||||
if (!atomptr_l(prevval)) {
|
if (!atomptr_l(prevval)) {
|
||||||
|
@ -100,7 +100,7 @@ static inline bool atomptr_u(atomptr_t val)
|
|||||||
/* single-linked list, unsorted/arbitrary.
|
/* single-linked list, unsorted/arbitrary.
|
||||||
* can be used as queue with add_tail / pop
|
* can be used as queue with add_tail / pop
|
||||||
*
|
*
|
||||||
* all operations are lock-free, but not neccessarily wait-free. this means
|
* all operations are lock-free, but not necessarily wait-free. this means
|
||||||
* that there is no state where the system as a whole stops making process,
|
* that there is no state where the system as a whole stops making process,
|
||||||
* but it *is* possible that a *particular* thread is delayed by some time.
|
* but it *is* possible that a *particular* thread is delayed by some time.
|
||||||
*
|
*
|
||||||
|
@ -203,7 +203,7 @@ static void bfd_last_update(time_t last_update, char *buf, size_t len)
|
|||||||
struct tm tm;
|
struct tm tm;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
/* If no BFD satatus update has ever been received, print `never'. */
|
/* If no BFD status update has ever been received, print `never'. */
|
||||||
if (last_update == 0) {
|
if (last_update == 0) {
|
||||||
snprintf(buf, len, "never");
|
snprintf(buf, len, "never");
|
||||||
return;
|
return;
|
||||||
|
@ -59,7 +59,7 @@ struct buffer_data {
|
|||||||
/* It should always be true that: 0 <= sp <= cp <= size */
|
/* It should always be true that: 0 <= sp <= cp <= size */
|
||||||
|
|
||||||
/* Default buffer size (used if none specified). It is rounded up to the
|
/* Default buffer size (used if none specified). It is rounded up to the
|
||||||
next page boundery. */
|
next page boundary. */
|
||||||
#define BUFFER_SIZE_DEFAULT 4096
|
#define BUFFER_SIZE_DEFAULT 4096
|
||||||
|
|
||||||
#define BUFFER_DATA_FREE(D) XFREE(MTYPE_BUFFER_DATA, (D))
|
#define BUFFER_DATA_FREE(D) XFREE(MTYPE_BUFFER_DATA, (D))
|
||||||
|
@ -234,7 +234,7 @@ struct cmd_node {
|
|||||||
/* Argc max counts. */
|
/* Argc max counts. */
|
||||||
#define CMD_ARGC_MAX 256
|
#define CMD_ARGC_MAX 256
|
||||||
|
|
||||||
/* Turn off these macros when uisng cpp with extract.pl */
|
/* Turn off these macros when using cpp with extract.pl */
|
||||||
#ifndef VTYSH_EXTRACT_PL
|
#ifndef VTYSH_EXTRACT_PL
|
||||||
|
|
||||||
/* helper defines for end-user DEFUN* macros */
|
/* helper defines for end-user DEFUN* macros */
|
||||||
|
@ -68,7 +68,7 @@ enum match_type {
|
|||||||
* @param[in] vline vectorized input string
|
* @param[in] vline vectorized input string
|
||||||
* @param[out] argv pointer to argument list if successful match, NULL
|
* @param[out] argv pointer to argument list if successful match, NULL
|
||||||
* otherwise. The elements of this list are pointers to struct cmd_token
|
* otherwise. The elements of this list are pointers to struct cmd_token
|
||||||
* and represent the sequence of tokens matched by the inpu. The ->arg
|
* and represent the sequence of tokens matched by the input. The ->arg
|
||||||
* field of each token points to a copy of the input matched on it. These
|
* field of each token points to a copy of the input matched on it. These
|
||||||
* may be safely deleted or modified.
|
* may be safely deleted or modified.
|
||||||
* @param[out] element pointer to matched cmd_element if successful match,
|
* @param[out] element pointer to matched cmd_element if successful match,
|
||||||
|
@ -338,7 +338,7 @@ selector: '{' selector_seq_seq '}' varname_token
|
|||||||
* 1) this allows "at least 1 of" semantics, which are otherwise impossible
|
* 1) this allows "at least 1 of" semantics, which are otherwise impossible
|
||||||
* 2) this would add a start->end->start loop in the graph that the current
|
* 2) this would add a start->end->start loop in the graph that the current
|
||||||
* loop-avoidal fails to handle
|
* loop-avoidal fails to handle
|
||||||
* just use [{a|b}] if neccessary, that will work perfectly fine, and reason
|
* just use [{a|b}] if necessary, that will work perfectly fine, and reason
|
||||||
* #1 is good enough to keep it this way. */
|
* #1 is good enough to keep it this way. */
|
||||||
|
|
||||||
loopcheck(ctx, &$$);
|
loopcheck(ctx, &$$);
|
||||||
|
2
lib/db.c
2
lib/db.c
@ -60,7 +60,7 @@ int db_init(const char *path_fmt, ...)
|
|||||||
(SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE), NULL)
|
(SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE), NULL)
|
||||||
!= SQLITE_OK) {
|
!= SQLITE_OK) {
|
||||||
if (dbp == NULL) {
|
if (dbp == NULL) {
|
||||||
zlog_warn("%s: failed to open dabatase '%s'", __func__,
|
zlog_warn("%s: failed to open database '%s'", __func__,
|
||||||
path);
|
path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Disctirubte list types. */
|
/* Distribute list types. */
|
||||||
enum distribute_type {
|
enum distribute_type {
|
||||||
DISTRIBUTE_V4_IN,
|
DISTRIBUTE_V4_IN,
|
||||||
DISTRIBUTE_V6_IN,
|
DISTRIBUTE_V6_IN,
|
||||||
|
@ -34,7 +34,7 @@ extern "C" {
|
|||||||
/* return type when this error indication stuff is used.
|
/* return type when this error indication stuff is used.
|
||||||
*
|
*
|
||||||
* guaranteed to have boolean evaluation to "false" when OK, "true" when error
|
* guaranteed to have boolean evaluation to "false" when OK, "true" when error
|
||||||
* (i.e. can be changed to pointer in the future if neccessary)
|
* (i.e. can be changed to pointer in the future if necessary)
|
||||||
*
|
*
|
||||||
* For checking, always use "if (value)", nothing else.
|
* For checking, always use "if (value)", nothing else.
|
||||||
* Do _NOT_ use any integer constant (!= 0), or sign check (< 0).
|
* Do _NOT_ use any integer constant (!= 0), or sign check (< 0).
|
||||||
|
@ -192,7 +192,7 @@ void access_list_delete(struct access_list *access)
|
|||||||
access_list_free(access);
|
access_list_free(access);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Insert new access list to list of access_list. Each acceess_list
|
/* Insert new access list to list of access_list. Each access_list
|
||||||
is sorted by the name. */
|
is sorted by the name. */
|
||||||
static struct access_list *access_list_insert(afi_t afi, const char *name)
|
static struct access_list *access_list_insert(afi_t afi, const char *name)
|
||||||
{
|
{
|
||||||
@ -387,7 +387,7 @@ void access_list_filter_add(struct access_list *access,
|
|||||||
struct filter *replace;
|
struct filter *replace;
|
||||||
struct filter *point;
|
struct filter *point;
|
||||||
|
|
||||||
/* Automatic asignment of seq no. */
|
/* Automatic assignment of seq no. */
|
||||||
if (filter->seq == -1)
|
if (filter->seq == -1)
|
||||||
filter->seq = filter_new_seq_get(access);
|
filter->seq = filter_new_seq_get(access);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* IF YOU MODIFY THIS FILE PLEASE RUN `make check` and ensure that
|
* IF YOU MODIFY THIS FILE PLEASE RUN `make check` and ensure that
|
||||||
* the test_zmq.c unit test is still working. There are dependancies
|
* the test_zmq.c unit test is still working. There are dependencies
|
||||||
* between the two that are extremely fragile. My understanding
|
* between the two that are extremely fragile. My understanding
|
||||||
* is that there is specialized ownership of the cb pointer based
|
* is that there is specialized ownership of the cb pointer based
|
||||||
* upon what is happening. Those assumptions are supposed to be
|
* upon what is happening. Those assumptions are supposed to be
|
||||||
|
@ -226,7 +226,7 @@ void *frrscript_get_result(struct frrscript *fs, const char *function_name,
|
|||||||
p = lua_to(lfs->L, 2);
|
p = lua_to(lfs->L, 2);
|
||||||
|
|
||||||
/* At the end, the Lua state should be same as it was at the start
|
/* At the end, the Lua state should be same as it was at the start
|
||||||
* i.e. containing soley the returned table.
|
* i.e. containing solely the returned table.
|
||||||
*/
|
*/
|
||||||
assert(lua_gettop(lfs->L) == 1);
|
assert(lua_gettop(lfs->L) == 1);
|
||||||
assert(lua_istable(lfs->L, -1) == 1);
|
assert(lua_istable(lfs->L, -1) == 1);
|
||||||
|
@ -69,7 +69,7 @@ static void graph_vector_remove(vector v, unsigned int ix)
|
|||||||
* and v->active is > ix. */
|
* and v->active is > ix. */
|
||||||
v->active--;
|
v->active--;
|
||||||
/* if ix == v->active--, we set the item to itself, then to NULL...
|
/* if ix == v->active--, we set the item to itself, then to NULL...
|
||||||
* still correct, no check neccessary. */
|
* still correct, no check necessary. */
|
||||||
v->index[ix] = v->index[v->active];
|
v->index[ix] = v->index[v->active];
|
||||||
v->index[v->active] = NULL;
|
v->index[v->active] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ hash_create_size(unsigned int size, unsigned int (*hash_key)(const void *),
|
|||||||
* an element from its key, you must provide the data item itself, with the
|
* an element from its key, you must provide the data item itself, with the
|
||||||
* portions used in the hash function set to the same values as the data item
|
* portions used in the hash function set to the same values as the data item
|
||||||
* to retrieve. To insert a data element, either provide the key as just
|
* to retrieve. To insert a data element, either provide the key as just
|
||||||
* described and provide alloc_func as descrbied below to allocate the full
|
* described and provide alloc_func as described below to allocate the full
|
||||||
* data element, or provide the full data element and pass 'hash_alloc_intern'
|
* data element, or provide the full data element and pass 'hash_alloc_intern'
|
||||||
* to alloc_func.
|
* to alloc_func.
|
||||||
*
|
*
|
||||||
|
@ -193,7 +193,7 @@ extern void _hook_unregister(struct hook *hook, void *funcptr, void *arg,
|
|||||||
* usage: DECLARE_HOOK(my_hook, (int arg1, struct foo *arg2), (arg1, arg2));
|
* usage: DECLARE_HOOK(my_hook, (int arg1, struct foo *arg2), (arg1, arg2));
|
||||||
* as above, "passlist" must use the same order and same names as "arglist"
|
* as above, "passlist" must use the same order and same names as "arglist"
|
||||||
*
|
*
|
||||||
* theoretically passlist is not neccessary, but let's keep things simple and
|
* theoretically passlist is not necessary, but let's keep things simple and
|
||||||
* use exact same args on DECLARE and DEFINE.
|
* use exact same args on DECLARE and DEFINE.
|
||||||
*/
|
*/
|
||||||
#define DECLARE_HOOK(hookname, arglist, passlist) \
|
#define DECLARE_HOOK(hookname, arglist, passlist) \
|
||||||
|
6
lib/if.c
6
lib/if.c
@ -341,7 +341,7 @@ static struct interface *if_lookup_by_ifindex(ifindex_t ifindex,
|
|||||||
return RB_FIND(if_index_head, &vrf->ifaces_by_index, &if_tmp);
|
return RB_FIND(if_index_head, &vrf->ifaces_by_index, &if_tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Interface existance check by index. */
|
/* Interface existence check by index. */
|
||||||
struct interface *if_lookup_by_index(ifindex_t ifindex, vrf_id_t vrf_id)
|
struct interface *if_lookup_by_index(ifindex_t ifindex, vrf_id_t vrf_id)
|
||||||
{
|
{
|
||||||
switch (vrf_get_backend()) {
|
switch (vrf_get_backend()) {
|
||||||
@ -354,7 +354,7 @@ struct interface *if_lookup_by_index(ifindex_t ifindex, vrf_id_t vrf_id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Interface existance check by index. */
|
/* Interface existence check by index. */
|
||||||
struct interface *if_vrf_lookup_by_index_next(ifindex_t ifindex,
|
struct interface *if_vrf_lookup_by_index_next(ifindex_t ifindex,
|
||||||
vrf_id_t vrf_id)
|
vrf_id_t vrf_id)
|
||||||
{
|
{
|
||||||
@ -406,7 +406,7 @@ ifindex_t ifname2ifindex(const char *name, vrf_id_t vrf_id)
|
|||||||
: IFINDEX_INTERNAL;
|
: IFINDEX_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Interface existance check by interface name. */
|
/* Interface existence check by interface name. */
|
||||||
struct interface *if_lookup_by_name(const char *name, vrf_id_t vrf_id)
|
struct interface *if_lookup_by_name(const char *name, vrf_id_t vrf_id)
|
||||||
{
|
{
|
||||||
struct vrf *vrf = vrf_lookup_by_id(vrf_id);
|
struct vrf *vrf = vrf_lookup_by_id(vrf_id);
|
||||||
|
4
lib/if.h
4
lib/if.h
@ -251,8 +251,8 @@ struct interface {
|
|||||||
/* Interface MTU. */
|
/* Interface MTU. */
|
||||||
unsigned int mtu; /* IPv4 MTU */
|
unsigned int mtu; /* IPv4 MTU */
|
||||||
unsigned int
|
unsigned int
|
||||||
mtu6; /* IPv6 MTU - probably, but not neccessarily same as mtu
|
mtu6; /* IPv6 MTU - probably, but not necessarily same as mtu
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Link-layer information and hardware address */
|
/* Link-layer information and hardware address */
|
||||||
enum zebra_link_type ll_type;
|
enum zebra_link_type ll_type;
|
||||||
|
@ -41,19 +41,19 @@ static struct log_ref ferr_lib_warn[] = {
|
|||||||
{
|
{
|
||||||
.code = EC_LIB_LINUX_NS,
|
.code = EC_LIB_LINUX_NS,
|
||||||
.title = "The Linux namespace subsystem has encountered a parsing error",
|
.title = "The Linux namespace subsystem has encountered a parsing error",
|
||||||
.description = "During system startup an invalid parameter for the namesapce was give to FRR",
|
.description = "During system startup an invalid parameter for the namespace was give to FRR",
|
||||||
.suggestion = "Gather log data and open an Issue. restart FRR",
|
.suggestion = "Gather log data and open an Issue. restart FRR",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.code = EC_LIB_SLOW_THREAD_CPU,
|
.code = EC_LIB_SLOW_THREAD_CPU,
|
||||||
.title = "The Event subsystem has detected a slow cpu time process",
|
.title = "The Event subsystem has detected a slow cpu time process",
|
||||||
.description = "The Event subsystem has detected a slow process, this typically indicates that FRR is having trouble completing work in a timely manner. This can be either a misconfiguration, bug, or some combination therof. In this case total CPU time was over 5 seconds. Which indicates that FRR is very busy doing some work and should be addressed",
|
.description = "The Event subsystem has detected a slow process, this typically indicates that FRR is having trouble completing work in a timely manner. This can be either a misconfiguration, bug, or some combination thereof. In this case total CPU time was over 5 seconds. Which indicates that FRR is very busy doing some work and should be addressed",
|
||||||
.suggestion = "Gather log data and open an Issue",
|
.suggestion = "Gather log data and open an Issue",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.code = EC_LIB_SLOW_THREAD_WALL,
|
.code = EC_LIB_SLOW_THREAD_WALL,
|
||||||
.title = "The Event subsystem has detected a slow wall time process",
|
.title = "The Event subsystem has detected a slow wall time process",
|
||||||
.description = "The Event subsystem has detected a slow process, this typically indicates that FRR is having trouble completing work in a timely manner. This can be either a misconfiguration, bug or some combination therof. In this case total WALL time was over 5 seconds. Which indicates that FRR might be having trouble being scheduled or some system call is delaying",
|
.description = "The Event subsystem has detected a slow process, this typically indicates that FRR is having trouble completing work in a timely manner. This can be either a misconfiguration, bug or some combination thereof. In this case total WALL time was over 5 seconds. Which indicates that FRR might be having trouble being scheduled or some system call is delaying",
|
||||||
.suggestion = "Gather log data and open an Issue",
|
.suggestion = "Gather log data and open an Issue",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -286,7 +286,7 @@ static struct log_ref ferr_lib_err[] = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.code = EC_LIB_NB_CB_INVALID_PRIO,
|
.code = EC_LIB_NB_CB_INVALID_PRIO,
|
||||||
.title = "Norhtbound callback has an invalid priority",
|
.title = "Northbound callback has an invalid priority",
|
||||||
.description = "The northbound subsystem, during initialization, has detected a callback whose priority is invalid",
|
.description = "The northbound subsystem, during initialization, has detected a callback whose priority is invalid",
|
||||||
.suggestion = "This is a bug; please report it"
|
.suggestion = "This is a bug; please report it"
|
||||||
},
|
},
|
||||||
|
@ -36,7 +36,7 @@ extern "C" {
|
|||||||
#define IPPROTO_OSPFIGP 89
|
#define IPPROTO_OSPFIGP 89
|
||||||
#endif /* IPPROTO_OSPFIGP */
|
#endif /* IPPROTO_OSPFIGP */
|
||||||
|
|
||||||
/* Architectual Constants */
|
/* Architectural Constants */
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define OSPF_LS_REFRESH_TIME 120
|
#define OSPF_LS_REFRESH_TIME 120
|
||||||
#else
|
#else
|
||||||
|
@ -279,7 +279,7 @@ static void ns_disable_internal(struct ns *ns)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* VRF list existance check by name. */
|
/* VRF list existence check by name. */
|
||||||
static struct ns_map_nsid *ns_map_nsid_lookup_by_nsid(ns_id_t ns_id)
|
static struct ns_map_nsid *ns_map_nsid_lookup_by_nsid(ns_id_t ns_id)
|
||||||
{
|
{
|
||||||
struct ns_map_nsid ns_map;
|
struct ns_map_nsid ns_map;
|
||||||
|
@ -113,7 +113,7 @@ const char *family2str(int family)
|
|||||||
return "?";
|
return "?";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Address Famiy Identifier to Address Family converter. */
|
/* Address Family Identifier to Address Family converter. */
|
||||||
int afi2family(afi_t afi)
|
int afi2family(afi_t afi)
|
||||||
{
|
{
|
||||||
if (afi == AFI_IP)
|
if (afi == AFI_IP)
|
||||||
|
@ -2480,7 +2480,7 @@ void route_map_notify_pentry_dependencies(const char *affected_name,
|
|||||||
do whatever the exit policy (EXIT, NEXT or GOTO) tells.
|
do whatever the exit policy (EXIT, NEXT or GOTO) tells.
|
||||||
on-match next - If this clause is matched, then the set statements
|
on-match next - If this clause is matched, then the set statements
|
||||||
are executed and then we drop through to the next clause
|
are executed and then we drop through to the next clause
|
||||||
on-match goto n - If this clause is matched, then the set statments
|
on-match goto n - If this clause is matched, then the set statements
|
||||||
are executed and then we goto the nth clause, or the
|
are executed and then we goto the nth clause, or the
|
||||||
first clause greater than this. In order to ensure
|
first clause greater than this. In order to ensure
|
||||||
route-maps *always* exit, you cannot jump backwards.
|
route-maps *always* exit, you cannot jump backwards.
|
||||||
|
@ -35,7 +35,7 @@ extern "C" {
|
|||||||
* without any information about the previous parsing steps, is usually not very
|
* without any information about the previous parsing steps, is usually not very
|
||||||
* helpful.
|
* helpful.
|
||||||
* Using sbuf, the parser can log the whole parsing process into a buffer using
|
* Using sbuf, the parser can log the whole parsing process into a buffer using
|
||||||
* a printf like API. When an error ocurrs, all the information about previous
|
* a printf like API. When an error occurs, all the information about previous
|
||||||
* parsing steps is there in the log, without any need for backtracking, and can
|
* parsing steps is there in the log, without any need for backtracking, and can
|
||||||
* be used to give a detailed and useful error description.
|
* be used to give a detailed and useful error description.
|
||||||
* When parsing completes successfully without any error, the log can just be
|
* When parsing completes successfully without any error, the log can just be
|
||||||
|
@ -96,7 +96,7 @@ int quagga_sigevent_process(void)
|
|||||||
struct quagga_signal_t *sig;
|
struct quagga_signal_t *sig;
|
||||||
int i;
|
int i;
|
||||||
#ifdef SIGEVENT_BLOCK_SIGNALS
|
#ifdef SIGEVENT_BLOCK_SIGNALS
|
||||||
/* shouldnt need to block signals, but potentially may be needed */
|
/* shouldn't need to block signals, but potentially may be needed */
|
||||||
sigset_t newmask, oldmask;
|
sigset_t newmask, oldmask;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -142,7 +142,7 @@ int quagga_sigevent_process(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SIGEVENT_SCHEDULE_THREAD
|
#ifdef SIGEVENT_SCHEDULE_THREAD
|
||||||
/* timer thread to check signals. Shouldnt be needed */
|
/* timer thread to check signals. shouldn't be needed */
|
||||||
int quagga_signal_timer(struct thread *t)
|
int quagga_signal_timer(struct thread *t)
|
||||||
{
|
{
|
||||||
struct quagga_sigevent_master_t *sigm;
|
struct quagga_sigevent_master_t *sigm;
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skip List impementation based on code from William Pugh.
|
* Skip List implementation based on code from William Pugh.
|
||||||
* ftp://ftp.cs.umd.edu/pub/skipLists/
|
* ftp://ftp.cs.umd.edu/pub/skipLists/
|
||||||
*
|
*
|
||||||
* Skip Lists are a probabilistic alternative to balanced trees, as
|
* Skip Lists are a probabilistic alternative to balanced trees, as
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skip List impementation based on code from William Pugh.
|
* Skip List implementation based on code from William Pugh.
|
||||||
* ftp://ftp.cs.umd.edu/pub/skipLists/
|
* ftp://ftp.cs.umd.edu/pub/skipLists/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user