AsyncCallList.cc
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 #include "squid.h"
10 #include "base/Assure.h"
11 #include "base/AsyncCall.h"
12 #include "base/AsyncCallList.h"
13 
14 void
16 {
17  Assure(call);
18  Assure(!call->Next());
19  if (tail) { // append to the existing list
20  Assure(head);
21  Assure(!tail->Next());
22  tail->setNext(call);
23  tail = call;
24  } else { // create a list from scratch
25  Assure(!head);
26  head = tail = call;
27  }
28  ++length;
29  Assure(length); // no overflows
30 }
31 
34 {
35  if (!head)
36  return AsyncCallPointer();
37 
38  Assure(tail);
39  Assure(length);
40  const auto call = head;
41  head = call->Next();
42  call->setNext(nullptr);
43  if (tail == call)
44  tail = nullptr;
45  --length;
46  return call;
47 }
48 
void setNext(AsyncCall::Pointer aNext)
Definition: AsyncCall.h:62
RefCount< AsyncCall > AsyncCallPointer
Definition: forward.h:31
AsyncCallPointer head
the earliest still-stored call (or nil)
Definition: AsyncCallList.h:37
AsyncCallPointer tail
the latest still-stored call (or nil)
Definition: AsyncCallList.h:38
size_t length
the number of currently stored calls
Definition: AsyncCallList.h:39
#define Assure(condition)
Definition: Assure.h:35
void add(const AsyncCallPointer &)
stores the given async call
AsyncCall::Pointer & Next()
Definition: AsyncCall.h:66
AsyncCallPointer extract()

 

Introduction

Documentation

Support

Miscellaneous