DescriptorSet.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9#ifndef SQUID_DESCRIPTOR_SET_H
10#define SQUID_DESCRIPTOR_SET_H
11
12#include <iosfwd>
13
14/* TODO: Should we use std::set<int> with its flexibility? Our implementation
15 has constant overhead, which is smaller than log(n) of std::set.
16*/
19{
20public:
21 // for STL compatibility, should we decide to switch to std::set or similar
22 typedef const int *const_iterator;
23
26
28 bool has(const int fd) const {
29 return 0 <= fd && fd < capacity_ &&
30 index_[fd] >= 0;
31 }
32
33 bool add(int fd);
34 bool del(int fd);
35 int pop();
36
37 bool empty() const { return !size_; }
38
40 const_iterator begin() const { return descriptors_; }
42 const_iterator end() const { return begin() + size_; }
43
45 void print(std::ostream &os) const;
46
47private:
48 // these would be easy to support when needed; prohibit for now
49 DescriptorSet(const DescriptorSet &s); // declared but undefined
50 DescriptorSet &operator =(const DescriptorSet &s); // declared, undefined
51
53 int *index_;
55 int size_;
56};
57
59inline std::ostream &
60operator <<(std::ostream &os, const DescriptorSet &ds)
61{
62 ds.print(os);
63 return os;
64}
65
66#endif /* SQUID_DESCRIPTOR_SET_H */
67
std::ostream & operator<<(std::ostream &os, const DescriptorSet &ds)
convenience wrapper to be used in debugs() context
Definition: DescriptorSet.h:60
An unordered collection of unique descriptors with O(1) add/del/has ops.
Definition: DescriptorSet.h:19
const_iterator begin() const
begin iterator a la STL; may become invalid if the object is modified
Definition: DescriptorSet.h:40
int pop()
deletes and returns one descriptor, in unspecified order
const_iterator end() const
end iterator a la STL; may become invalid if the object is modified
Definition: DescriptorSet.h:42
bool del(int fd)
deletes if there; returns true if deleted
DescriptorSet(const DescriptorSet &s)
int * index_
descriptor:position index into descriptors_
Definition: DescriptorSet.h:53
bool empty() const
number of descriptors in the set
Definition: DescriptorSet.h:37
int * descriptors_
descriptor values in random order
Definition: DescriptorSet.h:52
int size_
number of descriptors in the set
Definition: DescriptorSet.h:55
DescriptorSet & operator=(const DescriptorSet &s)
const int * const_iterator
Definition: DescriptorSet.h:22
bool has(const int fd) const
checks whether fd is in the set
Definition: DescriptorSet.h:28
void print(std::ostream &os) const
outputs debugging info about the set
int capacity_
total number of descriptor slots
Definition: DescriptorSet.h:54
bool add(int fd)
adds if unique; returns true if added

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors