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_SRC_DESCRIPTORSET_H
10 #define SQUID_SRC_DESCRIPTORSET_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 {
20 public:
21  // for STL compatibility, should we decide to switch to std::set or similar
22  typedef const int *const_iterator;
23 
24  DescriptorSet();
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 
47 private:
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 
52  int *descriptors_;
53  int *index_;
54  int capacity_;
55  int size_;
56 };
57 
59 inline std::ostream &
60 operator <<(std::ostream &os, const DescriptorSet &ds)
61 {
62  ds.print(os);
63  return os;
64 }
65 
66 #endif /* SQUID_SRC_DESCRIPTORSET_H */
67 
int pop()
deletes and returns one descriptor, in unspecified order
void print(std::ostream &os) const
outputs debugging info about the set
std::ostream & operator<<(std::ostream &os, const DescriptorSet &ds)
convenience wrapper to be used in debugs() context
Definition: DescriptorSet.h:60
int * index_
descriptor:position index into descriptors_
Definition: DescriptorSet.h:53
An unordered collection of unique descriptors with O(1) add/del/has ops.
Definition: DescriptorSet.h:18
bool add(int fd)
adds if unique; returns true if added
bool has(const int fd) const
checks whether fd is in the set
Definition: DescriptorSet.h:28
DescriptorSet & operator=(const DescriptorSet &s)
const_iterator begin() const
begin iterator a la STL; may become invalid if the object is modified
Definition: DescriptorSet.h:40
int size_
number of descriptors in the set
Definition: DescriptorSet.h:55
const typedef int * const_iterator
Definition: DescriptorSet.h:22
int capacity_
total number of descriptor slots
Definition: DescriptorSet.h:54
bool del(int fd)
deletes if there; returns true if deleted
int * descriptors_
descriptor values in random order
Definition: DescriptorSet.h:52
const_iterator end() const
end iterator a la STL; may become invalid if the object is modified
Definition: DescriptorSet.h:42

 

Introduction

Documentation

Support

Miscellaneous