LocalSearch.cc
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2022 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/* DEBUG: section 47 Store Search */
10
11#include "squid.h"
12#include "debug/Stream.h"
13#include "globals.h"
14#include "store/LocalSearch.h"
15#include "StoreSearch.h"
16
17namespace Store {
18
21{
23
24public:
25 /* StoreSearch API */
26 virtual void next(void (callback)(void *cbdata), void *cbdata) override;
27 virtual bool next() override;
28 virtual bool error() const override;
29 virtual bool isDone() const override;
30 virtual StoreEntry *currentItem() override;
31
32private:
33 void copyBucket();
34 bool _done = false;
35 int bucket = 0;
36 std::vector<StoreEntry *> entries;
37};
38
39} // namespace Store
40
42
45{
46 return new LocalSearch;
47}
48
49void
50Store::LocalSearch::next(void (aCallback)(void *), void *aCallbackData)
51{
52 next();
53 aCallback (aCallbackData);
54}
55
56bool
58{
59 if (!entries.empty())
60 entries.pop_back();
61
62 while (!isDone() && !entries.size())
63 copyBucket();
64
65 return currentItem() != nullptr;
66}
67
68bool
70{
71 return false;
72}
73
74bool
76{
77 return bucket >= store_hash_buckets || _done;
78}
79
82{
83 if (!entries.size())
84 return nullptr;
85
86 return entries.back();
87}
88
89void
91{
92 /* probably need to lock the store entries...
93 * we copy them all to prevent races on the links. */
94 assert (!entries.size());
95 hash_link *link_ptr = nullptr;
96 hash_link *link_next = nullptr;
97 link_next = hash_get_bucket(store_table, bucket);
98
99 while (nullptr != (link_ptr = link_next)) {
100 link_next = link_ptr->next;
101 StoreEntry *e = (StoreEntry *) link_ptr;
102
103 entries.push_back(e);
104 }
105
106 // minimize debugging: we may be called more than a million times on startup
107 if (const auto count = entries.size())
108 debugs(47, 8, "bucket #" << bucket << " entries: " << count);
109
110 ++bucket;
111}
112
CBDATA_NAMESPACED_CLASS_INIT(Store, LocalSearch)
#define assert(EX)
Definition: assert.h:19
iterates local store_table
Definition: LocalSearch.cc:21
virtual bool next() override
Definition: LocalSearch.cc:57
virtual bool error() const override
Definition: LocalSearch.cc:69
virtual void next(void(callback)(void *cbdata), void *cbdata) override
virtual bool isDone() const override
Definition: LocalSearch.cc:75
virtual StoreEntry * currentItem() override
Definition: LocalSearch.cc:81
CBDATA_CLASS(LocalSearch)
std::vector< StoreEntry * > entries
Definition: LocalSearch.cc:36
Definition: cbdata.cc:60
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:196
hash_table * store_table
int store_hash_buckets
SQUIDCEXTERN hash_link * hash_get_bucket(hash_table *, unsigned int)
Definition: hash.cc:244
StoreSearch * NewLocalSearch()
Definition: LocalSearch.cc:44

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors