wordlist.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_WORDLIST_H
10 #define SQUID_SRC_WORDLIST_H
11 
12 #include "globals.h"
13 #include "sbuf/List.h"
14 
15 #include <iterator>
16 
17 class wordlist;
18 
21 {
22 public:
23  using value_type = const char *;
24 
25  explicit WordlistIterator(const wordlist * const wl): w(wl) {}
26 
27  auto operator ==(const WordlistIterator &rhs) const { return this->w == rhs.w; }
28  auto operator !=(const WordlistIterator &rhs) const { return this->w != rhs.w; }
29 
30  inline value_type operator *() const;
31  inline WordlistIterator &operator++();
32 
33 private:
34  const wordlist *w;
35 };
36 
41 class wordlist
42 {
44  friend char *wordlistChopHead(wordlist **);
45 
46 public:
48 
49  wordlist() : key(nullptr), next(nullptr) {}
50  // create a new wordlist node, with a copy of k as key
51  explicit wordlist(const char *k) : key(xstrdup(k)), next(nullptr) {}
52 
53  wordlist(const wordlist &) = delete;
54  wordlist &operator=(const wordlist &) = delete;
55 
56  auto begin() const { return const_iterator(this); }
57  auto end() const { return const_iterator(nullptr); }
58 
59  char *key;
61 
62 private:
63  // does not free data members.
64  ~wordlist() = default;
65 };
66 
67 class MemBuf;
68 
73 const char *wordlistAdd(wordlist **, const char *);
74 
79 void wordlistCat(const wordlist *, MemBuf *);
80 
82 void wordlistDestroy(wordlist **);
83 
90 char *wordlistChopHead(wordlist **);
91 
92 inline WordlistIterator &
94 {
95  w = w->next;
96  return *this;
97 }
98 
101 {
102  return w->key;
103 }
104 
105 #endif /* SQUID_SRC_WORDLIST_H */
106 
const wordlist * w
Definition: wordlist.h:34
WordlistIterator & operator++()
Definition: wordlist.h:93
friend char * wordlistChopHead(wordlist **)
Definition: wordlist.cc:42
#define xstrdup
void wordlistCat(const wordlist *, MemBuf *)
Definition: wordlist.cc:35
auto begin() const
Definition: wordlist.h:56
auto end() const
Definition: wordlist.h:57
const char * value_type
Definition: wordlist.h:23
wordlist()
Definition: wordlist.h:49
wordlist & operator=(const wordlist &)=delete
value_type operator*() const
Definition: wordlist.h:100
auto operator==(const WordlistIterator &rhs) const
Definition: wordlist.h:27
Definition: MemBuf.h:23
void wordlistDestroy(wordlist **)
destroy a wordlist
Definition: wordlist.cc:16
auto operator!=(const WordlistIterator &rhs) const
Definition: wordlist.h:28
~wordlist()=default
wordlist(const char *k)
Definition: wordlist.h:51
wordlist * next
Definition: wordlist.h:60
char * key
Definition: wordlist.h:59
char * wordlistChopHead(wordlist **)
Definition: wordlist.cc:42
MEMPROXY_CLASS(wordlist)
WordlistIterator const_iterator
Definition: wordlist.h:47
const char * wordlistAdd(wordlist **, const char *)
Definition: wordlist.cc:25
minimal iterator for read-only traversal of wordlist objects
Definition: wordlist.h:20
WordlistIterator(const wordlist *const wl)
Definition: wordlist.h:25

 

Introduction

Documentation

Support

Miscellaneous