Coda Distributed File System
rec_dlist.h
Go to the documentation of this file.
1/* BLURB gpl
2
3 Coda File System
4 Release 8
5
6 Copyright (c) 1987-2025 Carnegie Mellon University
7 Additional copyrights listed below
8
9This code is distributed "AS IS" without warranty of any kind under
10the terms of the GNU General Public Licence Version 2, as shown in the
11file LICENSE. The technical and financial contributors to Coda are
12listed in the file CREDITS.
13
14 Additional copyrights
15 none currently
16
17#*/
18
19/*
20 *
21 * rec_dlist.h -- Specification of doubly-linked list type where list elements
22 * can be on only one list at a time and are kept in sorted order.
23 *
24 */
25
26#ifndef _UTIL_REC_DLIST_H_
27#define _UTIL_REC_DLIST_H_ 1
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#include <stdio.h>
34
35#ifdef __cplusplus
36}
37#endif
38
39#include "dlist.h"
40#include "rvmlib.h"
41
42class rec_dlink;
43class rec_dlist;
44class rec_dhashtab;
45typedef int (*RCFN)(rec_dlink *, rec_dlink *);
46
47/*enum DlGetType { DlGetMin, DlGetMax };*/
48
49class rec_dlist {
50 friend class rec_dhashtab;
51 rec_dlink *head; /* head of list */
52 int cnt;
53 RCFN CmpFn; /* function to order the elements */
54
55public:
56 void *operator new(size_t) REQUIRES_TRANSACTION;
57 void operator delete(void *) REQUIRES_TRANSACTION;
58
59 rec_dlist(RCFN = 0);
60 ~rec_dlist();
61
63 void SetCmpFn(RCFN);
64 void DeInit();
65
66 void insert(rec_dlink *) REQUIRES_TRANSACTION; /* insert in sorted order */
67 void
68 prepend(rec_dlink *) REQUIRES_TRANSACTION; /* add at beginning of list */
69 void append(rec_dlink *) REQUIRES_TRANSACTION; /* add at end of list */
70 rec_dlink *
71 remove(rec_dlink *) REQUIRES_TRANSACTION; /* remove specified entry */
72 rec_dlink *first(); /* return head of list */
73 rec_dlink *last(); /* return tail of list */
75 REQUIRES_TRANSACTION; /* return and remove head or tail of list */
76 int count();
77 int IsMember(rec_dlink *);
78 /*virtual*/ void print();
79 /*virtual*/ void print(FILE *);
80 /*virtual*/ void print(int);
81};
82
83/*enum DlIterOrder { DlAscending, DlDescending };*/
84
86 rec_dlist *cdlist; // current dlist
87 rec_dlink *cdlink; // current dlink
88 DlIterOrder order; // iteration order
89public:
91 rec_dlink *operator()(); // return next object or 0
92 // Does *not* support safe deletion
93 // of currently returned entry. See the
94 // comment in dlist.h for more explanation.
95};
96
97class rec_dlink { /* objects are derived from this class */
98 friend class rec_dlist;
99 friend class rec_dlist_iterator;
100 rec_dlink *next;
101 rec_dlink *prev;
102
103public:
104 rec_dlink();
106 /* ~rec_dlink(); */
107 /*virtual*/ void print();
108 /*virtual*/ void print(FILE *);
109 /*virtual*/ void print(int);
110};
111
112#endif /* _UTIL_REC_DLIST_H_ */
Definition: rec_dhash.h:48
Definition: rec_dlist.h:85
rec_dlink * operator()()
Definition: rec_dlist.cc:297
rec_dlist_iterator(rec_dlist &, DlIterOrder=DlAscending)
Definition: rec_dlist.cc:290
Definition: rec_dlist.h:49
void prepend(rec_dlink *) REQUIRES_TRANSACTION
Definition: rec_dlist.cc:146
void SetCmpFn(RCFN)
Definition: rec_dlist.cc:87
int count()
Definition: rec_dlist.cc:245
int IsMember(rec_dlink *)
Definition: rec_dlist.cc:250
~rec_dlist()
Definition: rec_dlist.cc:67
void Init(RCFN) REQUIRES_TRANSACTION
Definition: rec_dlist.cc:72
rec_dlist(RCFN=0)
Definition: rec_dlist.cc:62
rec_dlink * last()
Definition: rec_dlist.cc:233
rec_dlink * first()
Definition: rec_dlist.cc:228
void DeInit()
Definition: rec_dlist.cc:80
void print()
Definition: rec_dlist.cc:265
rec_dlink * remove(rec_dlink *) REQUIRES_TRANSACTION
Definition: rec_dlist.cc:198
void append(rec_dlink *) REQUIRES_TRANSACTION
Definition: rec_dlist.cc:173
void insert(rec_dlink *) REQUIRES_TRANSACTION
Definition: rec_dlist.cc:95
rec_dlink * get(DlGetType=DlGetMin) REQUIRES_TRANSACTION
Definition: rec_dlist.cc:238
#define REQUIRES_TRANSACTION
Definition: coda_tsa.h:107
DlIterOrder
Definition: dlist.h:75
@ DlAscending
Definition: dlist.h:76
DlGetType
Definition: dlist.h:45
@ DlGetMin
Definition: dlist.h:46
PROC * head
Definition: util.c:73
int(* RCFN)(rec_dlink *, rec_dlink *)
Definition: rec_dlist.h:45