Coda Distributed File System
rec_olist.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_olist.h -- Specification of a recoverable singly-linked list type
22 * where list elements can be on only one list at a time.
23 *
24 */
25
26#ifndef _UTIL_REC_OLIST_H_
27#define _UTIL_REC_OLIST_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 "olist.h"
40#include "rvmlib.h"
41
42class rec_olist;
44class rec_olink;
45
46class rec_olist {
47 friend class rec_olist_iterator;
48 rec_olink *tail; /* tail->next is head of list */
49 int cnt;
50
51public:
52 void *operator new(size_t) REQUIRES_TRANSACTION;
53 void operator delete(void *) REQUIRES_TRANSACTION;
54
55 rec_olist();
56 rec_olist(rec_olist &); /* not supported! */
58 int operator=(rec_olist &); /* not supported! */
59 ~rec_olist();
60 void DeInit();
61
62 void insert(rec_olink *) REQUIRES_TRANSACTION; /* add at head of list */
63 void append(rec_olink *) REQUIRES_TRANSACTION; /* add at tail of list */
64 rec_olink *
65 remove(rec_olink *) REQUIRES_TRANSACTION; /* remove specified entry */
66 rec_olink *first(); /* return head of list */
67 rec_olink *last(); /* return tail of list */
68 rec_olink *get() REQUIRES_TRANSACTION; /* return and remove head of list */
69
70 int count();
71 int IsMember(rec_olink *);
72 /*virtual*/ void print();
73 /*virtual*/ void print(FILE *);
74 /*virtual*/ void print(int);
75};
76
78 rec_olist *clist; /* current rec_olist */
79
80public:
81 rec_olink *clink; /* current rec_olink */
83 rec_olink *operator()(); /* return next object or 0 */
84 /* Support safe deletion of currently returned entry. See dlist.h also */
85};
86
87class rec_olink { /* objects are derived from this class */
88 friend class rec_olist;
89 friend class rec_olist_iterator;
90 rec_olink *next;
91
92public:
93 rec_olink();
95 rec_olink(rec_olink &); /* not supported! */
96 int operator=(rec_olink &); /* not supported! */
97 /*
98 ~rec_olink();
99 void DeInit();
100*/
101
102 /*virtual*/ void print();
103 /*virtual*/ void print(FILE *);
104 /*virtual*/ void print(int);
105};
106
107#endif /* _UTIL_REC_OLIST_H_ */
Definition: rec_olist.h:77
rec_olink * operator()()
Definition: rec_olist.cc:218
rec_olink * clink
Definition: rec_olist.h:81
Definition: rec_olist.h:46
rec_olink * first()
Definition: rec_olist.cc:151
friend class rec_olist_iterator
Definition: rec_olist.h:47
void append(rec_olink *) REQUIRES_TRANSACTION
Definition: rec_olist.cc:107
int count()
Definition: rec_olist.cc:172
rec_olink * get() REQUIRES_TRANSACTION
Definition: rec_olist.cc:164
int IsMember(rec_olink *)
Definition: rec_olist.cc:177
rec_olist()
Definition: rec_olist.cc:53
rec_olink * remove(rec_olink *) REQUIRES_TRANSACTION
Definition: rec_olist.cc:128
void insert(rec_olink *) REQUIRES_TRANSACTION
Definition: rec_olist.cc:87
void print()
Definition: rec_olist.cc:187
void Init() REQUIRES_TRANSACTION
Definition: rec_olist.cc:63
void DeInit()
Definition: rec_olist.cc:70
rec_olink * last()
Definition: rec_olist.cc:159
#define REQUIRES_TRANSACTION
Definition: coda_tsa.h:107
PROC * tail
Definition: util.c:74