Hi all,
include/List.h is in my very humble opinion misleadingly named, as it's
tied to CBDATA semantics and isn't really suited to be used as a generic
container class.
This patch renames the include file to CbDataList.h, and all datatypes
defined there are altered in the same manner.
Kinkie
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [EMAIL PROTECTED]
# target_branch: ../repo/squid-trunk
# testament_sha1: 764e1d67e2dca277e880dc6c6f972f3dea4e43da
# timestamp: 2008-07-08 10:47:34 +0200
# source_branch: ../repo/squid-trunk
# base_revision_id: [EMAIL PROTECTED]
# hemjfx73b0f3xznj
#
# Begin patch
=== renamed file 'include/List.h' => 'include/CbDataList.h'
--- include/List.h 2008-03-20 23:20:58 +0000
+++ include/CbDataList.h 2008-07-08 08:39:26 +0000
@@ -1,6 +1,4 @@
/*
- * $Id: List.h,v 1.8 2008/02/26 21:49:33 amosjeffries Exp $
- *
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
* ----------------------------------------------------------
@@ -38,48 +36,48 @@
/// \ingroup POD
template <class C>
-class List
+class CbDataList
{
public:
void *operator new (size_t);
void operator delete (void *);
- List (C const &);
- ~List();
+ CbDataList (C const &);
+ ~CbDataList();
bool find(C const &)const;
bool findAndTune(C const &);
- List *next;
+ CbDataList *next;
C element;
bool empty() const { return this == NULL; }
private:
- CBDATA_CLASS(List);
+ CBDATA_CLASS(CbDataList);
};
/// \ingroup POD
template<class C>
-class ListContainer
+class CbDataListContainer
{
public:
- ListContainer();
- ~ListContainer();
- List<C> *push_back (C const &);
+ CbDataListContainer();
+ ~CbDataListContainer();
+ CbDataList<C> *push_back (C const &);
C pop_front();
bool empty() const;
- List<C> *head;
+ CbDataList<C> *head;
};
/// \ingroup POD
template<class C>
-class ListIterator
+class CbDataListIterator
{
public:
- ListIterator(ListContainer<C> const &list) : next_entry(list.head) {}
+ CbDataListIterator(CbDataListContainer<C> const &list) : next_entry(list.head) {}
const C & next() {
- List<C> *entry = next_entry;
+ CbDataList<C> *entry = next_entry;
if (entry)
next_entry = entry->next;
return entry->element;
@@ -89,40 +87,40 @@
}
private:
- List<C> *next_entry;
+ CbDataList<C> *next_entry;
};
/* implementation follows */
/** \cond AUTODOCS-IGNORE */
template <class C>
-cbdata_type List<C>::CBDATA_List = CBDATA_UNKNOWN;
+cbdata_type CbDataList<C>::CBDATA_CbDataList = CBDATA_UNKNOWN;
/** \endcond */
template <class C>
void *
-List<C>::operator new (size_t byteCount)
+CbDataList<C>::operator new (size_t byteCount)
{
- CBDATA_INIT_TYPE(List);
+ CBDATA_INIT_TYPE(CbDataList);
- List<C> *result = cbdataAlloc(List);
+ CbDataList<C> *result = cbdataAlloc(CbDataList);
return result;
}
template <class C>
void
-List<C>::operator delete (void *address)
+CbDataList<C>::operator delete (void *address)
{
cbdataFree(address);
}
template <class C>
-List<C>::List(C const &value) : next(NULL), element (value)
+CbDataList<C>::CbDataList(C const &value) : next(NULL), element (value)
{}
template <class C>
-List<C>::~List()
+CbDataList<C>::~CbDataList()
{
if (next)
delete next;
@@ -130,9 +128,9 @@
template <class C>
bool
-List<C>::find (C const &toFind) const
+CbDataList<C>::find (C const &toFind) const
{
- List<C> const *node = NULL;
+ CbDataList<C> const *node = NULL;
for (node = this; node; node = node->next)
if (node->element == toFind)
@@ -143,11 +141,11 @@
template <class C>
bool
-List<C>::findAndTune(C const & toFind)
+CbDataList<C>::findAndTune(C const & toFind)
{
- List<C> *prev = NULL;
+ CbDataList<C> *prev = NULL;
- for (List<C> *node = this; node; node = node->
+ for (CbDataList<C> *node = this; node; node = node->
next) {
if (node->element == toFind) {
if (prev != NULL) {
@@ -168,24 +166,24 @@
}
template <class C>
-ListContainer<C>::ListContainer() : head (NULL)
+CbDataListContainer<C>::CbDataListContainer() : head (NULL)
{}
template <class C>
-ListContainer<C>::~ListContainer()
+CbDataListContainer<C>::~CbDataListContainer()
{
if (head)
delete head;
}
template <class C>
-List<C> *
-ListContainer<C>::push_back (C const &element)
+CbDataList<C> *
+CbDataListContainer<C>::push_back (C const &element)
{
- List<C> *node = new List<C> (element);
+ CbDataList<C> *node = new CbDataList<C> (element);
if (head) {
- List<C> *tempNode = NULL;
+ CbDataList<C> *tempNode = NULL;
for (tempNode = head; tempNode->next; tempNode = tempNode->next);
tempNode->next = node;
@@ -197,11 +195,11 @@
template <class C>
C
-ListContainer<C>::pop_front()
+CbDataListContainer<C>::pop_front()
{
if (head) {
C result = head->element;
- List<C> *node = head;
+ CbDataList<C> *node = head;
head = head->next;
node->next = NULL;
delete node;
@@ -213,7 +211,7 @@
template <class C>
bool
-ListContainer<C>::empty() const
+CbDataListContainer<C>::empty() const
{
return head == NULL;
}
=== modified file 'src/ACLASN.h'
--- src/ACLASN.h 2008-02-27 04:49:32 +0000
+++ src/ACLASN.h 2008-07-08 08:39:26 +0000
@@ -36,7 +36,7 @@
#define SQUID_ACLASN_H
#include "ACLData.h"
-#include "List.h"
+#include "CbDataList.h"
#include "ACLStrategised.h"
#include "ACLChecklist.h"
#include "IPAddress.h"
@@ -45,7 +45,7 @@
class CacheManager;
-SQUIDCEXTERN int asnMatchIp(List<int> *, IPAddress &);
+SQUIDCEXTERN int asnMatchIp(CbDataList<int> *, IPAddress &);
/// \ingroup ACLAPI
SQUIDCEXTERN void asnInit(void);
@@ -77,7 +77,7 @@
static ACLStrategised<IPAddress> SourceRegistryEntry_;
static ACL::Prototype DestinationRegistryProtoype;
static ACLStrategised<IPAddress> DestinationRegistryEntry_;
- List<int> *data;
+ CbDataList<int> *data;
};
MEMPROXY_CLASS_INLINE(ACLASN) /**DOCS_NOSEMI*/
=== modified file 'src/ACLIntRange.cc'
--- src/ACLIntRange.cc 2008-02-27 04:49:32 +0000
+++ src/ACLIntRange.cc 2008-07-08 08:39:26 +0000
@@ -40,7 +40,7 @@
#include "Parsing.h"
/* explicit instantiation required for some systems */
-template cbdata_type List< Range<int> >::CBDATA_List;
+template cbdata_type CbDataList< Range<int> >::CBDATA_CbDataList;
void
ACLIntRange::parse()
@@ -83,7 +83,7 @@
ACLIntRange::match(int i)
{
RangeType const toFind (i, i+1);
- ListIterator<RangeType> iter(ranges);
+ CbDataListIterator<RangeType> iter(ranges);
while (!iter.end()) {
const RangeType & element = iter.next();
@@ -113,7 +113,7 @@
{
wordlist *W = NULL;
char buf[32];
- ListIterator<RangeType> iter(ranges);
+ CbDataListIterator<RangeType> iter(ranges);
while (!iter.end()) {
const RangeType & element = iter.next();
=== modified file 'src/ACLIntRange.h'
--- src/ACLIntRange.h 2008-02-27 04:49:32 +0000
+++ src/ACLIntRange.h 2008-07-08 08:39:26 +0000
@@ -36,7 +36,7 @@
#define SQUID_ACLINTRANGE_H
#include "ACLData.h"
-#include "List.h"
+#include "CbDataList.h"
#include "Range.h"
/// \ingroup ACLAPI
@@ -55,7 +55,7 @@
private:
typedef Range<int> RangeType;
- ListContainer <RangeType> ranges;
+ CbDataListContainer <RangeType> ranges;
};
#endif /* SQUID_ACLINTRANGE_H */
=== modified file 'src/ACLMethodData.cc'
--- src/ACLMethodData.cc 2008-03-16 21:48:45 +0000
+++ src/ACLMethodData.cc 2008-07-08 08:39:26 +0000
@@ -64,15 +64,14 @@
/* explicit instantiation required for some systems */
/// \cond AUTODOCS-IGNORE
-template cbdata_type List<HttpRequestMethod>
-::CBDATA_List;
+template cbdata_type CbDataList<HttpRequestMethod>::CBDATA_CbDataList;
/// \endcond
wordlist *
ACLMethodData::dump()
{
wordlist *W = NULL;
- List<HttpRequestMethod> *data = values;
+ CbDataList<HttpRequestMethod> *data = values;
while (data != NULL) {
wordlistAdd(&W, RequestMethodStr(data->element));
@@ -85,12 +84,12 @@
void
ACLMethodData::parse()
{
- List<HttpRequestMethod> **Tail;
+ CbDataList<HttpRequestMethod> **Tail;
char *t = NULL;
for (Tail = &values; *Tail; Tail = &((*Tail)->next));
while ((t = strtokFile())) {
- List<HttpRequestMethod> *q = new List<HttpRequestMethod> (HttpRequestMethod(t, NULL));
+ CbDataList<HttpRequestMethod> *q = new CbDataList<HttpRequestMethod> (HttpRequestMethod(t, NULL));
*(Tail) = q;
Tail = &q->next;
}
=== modified file 'src/ACLMethodData.h'
--- src/ACLMethodData.h 2008-02-27 04:49:32 +0000
+++ src/ACLMethodData.h 2008-07-08 08:39:26 +0000
@@ -37,7 +37,7 @@
#include "ACL.h"
#include "ACLData.h"
-#include "List.h"
+#include "CbDataList.h"
/// \ingroup ACLAPI
class ACLMethodData : public ACLData<HttpRequestMethod>
@@ -56,7 +56,7 @@
bool empty() const;
virtual ACLData<HttpRequestMethod> *clone() const;
- List<HttpRequestMethod> *values;
+ CbDataList<HttpRequestMethod> *values;
};
MEMPROXY_CLASS_INLINE(ACLMethodData);
=== modified file 'src/ACLProtocolData.cc'
--- src/ACLProtocolData.cc 2008-03-16 21:48:45 +0000
+++ src/ACLProtocolData.cc 2008-07-08 08:39:26 +0000
@@ -63,14 +63,14 @@
/* explicit instantiation required for some systems */
/// \cond AUTODOCS-IGNORE
-template cbdata_type List<protocol_t>::CBDATA_List;
+template cbdata_type CbDataList<protocol_t>::CBDATA_CbDataList;
/// \endcond
wordlist *
ACLProtocolData::dump()
{
wordlist *W = NULL;
- List<protocol_t> *data = values;
+ CbDataList<protocol_t> *data = values;
while (data != NULL) {
wordlistAdd(&W, ProtocolStr[data->element]);
@@ -83,12 +83,12 @@
void
ACLProtocolData::parse()
{
- List<protocol_t> **Tail;
+ CbDataList<protocol_t> **Tail;
char *t = NULL;
for (Tail = &values; *Tail; Tail = &((*Tail)->next));
while ((t = strtokFile())) {
- List<protocol_t> *q = new List<protocol_t> (urlParseProtocol(t));
+ CbDataList<protocol_t> *q = new CbDataList<protocol_t> (urlParseProtocol(t));
*(Tail) = q;
Tail = &q->next;
}
=== modified file 'src/ACLProtocolData.h'
--- src/ACLProtocolData.h 2005-05-08 12:36:45 +0000
+++ src/ACLProtocolData.h 2008-07-08 08:39:26 +0000
@@ -37,7 +37,7 @@
#define SQUID_ACLPROTOCOLDATA_H
#include "ACL.h"
#include "ACLData.h"
-#include "List.h"
+#include "CbDataList.h"
class ACLProtocolData : public ACLData<protocol_t>
{
@@ -55,7 +55,7 @@
bool empty() const;
virtual ACLData<protocol_t> *clone() const;
- List<protocol_t> *values;
+ CbDataList<protocol_t> *values;
};
MEMPROXY_CLASS_INLINE(ACLProtocolData);
=== modified file 'src/ACLSslErrorData.cc'
--- src/ACLSslErrorData.cc 2008-03-16 21:48:45 +0000
+++ src/ACLSslErrorData.cc 2008-07-08 08:39:26 +0000
@@ -29,13 +29,13 @@
/* explicit instantiation required for some systems */
-template cbdata_type List<ssl_error_t>::CBDATA_List;
+template cbdata_type CbDataList<ssl_error_t>::CBDATA_CbDataList;
wordlist *
ACLSslErrorData::dump()
{
wordlist *W = NULL;
- List<ssl_error_t> *data = values;
+ CbDataList<ssl_error_t> *data = values;
while (data != NULL) {
wordlistAdd(&W, sslFindErrorString(data->element));
@@ -48,12 +48,12 @@
void
ACLSslErrorData::parse()
{
- List<ssl_error_t> **Tail;
+ CbDataList<ssl_error_t> **Tail;
char *t = NULL;
for (Tail = &values; *Tail; Tail = &((*Tail)->next));
while ((t = strtokFile())) {
- List<ssl_error_t> *q = new List<ssl_error_t>(sslParseErrorString(t));
+ CbDataList<ssl_error_t> *q = new CbDataList<ssl_error_t>(sslParseErrorString(t));
*(Tail) = q;
Tail = &q->next;
}
=== modified file 'src/ACLSslErrorData.h'
--- src/ACLSslErrorData.h 2008-02-12 05:24:38 +0000
+++ src/ACLSslErrorData.h 2008-07-08 08:39:26 +0000
@@ -7,7 +7,7 @@
#define SQUID_ACLSSL_ERRORDATA_H
#include "ACL.h"
#include "ACLData.h"
-#include "List.h"
+#include "CbDataList.h"
#include "ssl_support.h"
class ACLSslErrorData : public ACLData<ssl_error_t>
@@ -26,7 +26,7 @@
bool empty() const;
virtual ACLData<ssl_error_t> *clone() const;
- List<ssl_error_t> *values;
+ CbDataList<ssl_error_t> *values;
};
MEMPROXY_CLASS_INLINE(ACLSslErrorData);
=== modified file 'src/CommRead.h'
--- src/CommRead.h 2008-02-13 06:51:37 +0000
+++ src/CommRead.h 2008-07-08 08:39:26 +0000
@@ -43,7 +43,7 @@
#include "squid.h"
#include "comm.h"
#include "CommCalls.h"
-#include "List.h"
+#include "CbDataList.h"
class CommRead
{
@@ -92,10 +92,10 @@
private:
static PF CloseHandler;
- static DeferredRead popHead(ListContainer<DeferredRead> &deferredReads);
+ static DeferredRead popHead(CbDataListContainer<DeferredRead> &deferredReads);
void kickARead(DeferredRead const &);
void flushReads();
- ListContainer<DeferredRead> deferredReads;
+ CbDataListContainer<DeferredRead> deferredReads;
};
=== modified file 'src/StoreSearch.h'
--- src/StoreSearch.h 2005-01-03 23:08:24 +0000
+++ src/StoreSearch.h 2008-07-08 08:39:26 +0000
@@ -47,7 +47,7 @@
virtual ~StoreSearch() {}
/* not ready yet
- void asList(void (*) (List<StoreEntryPointer), void *cbdata);
+ void asList(void (*) (CbDataList<StoreEntryPointer), void *cbdata);
*/
/* callback the client when a new StoreEntry is available
* or an error occurs
=== modified file 'src/asn.cc'
--- src/asn.cc 2008-03-16 21:48:45 +0000
+++ src/asn.cc 2008-07-08 08:39:26 +0000
@@ -72,7 +72,7 @@
/* explicit instantiation required for some systems */
/// \cond AUTODOCS-IGNORE
-template cbdata_type List<int>::CBDATA_List;
+template cbdata_type CbDataList<int>::CBDATA_CbDataList;
/// \endcond
/**
@@ -82,7 +82,7 @@
*/
struct as_info
{
- List<int> *as_number;
+ CbDataList<int> *as_number;
time_t expires; /* NOTUSED */
};
@@ -128,13 +128,13 @@
/* PUBLIC */
int
-asnMatchIp(List<int> *data, IPAddress &addr)
+asnMatchIp(CbDataList<int> *data, IPAddress &addr)
{
struct squid_radix_node *rn;
as_info *e;
m_ADDR m_addr;
- List<int> *a = NULL;
- List<int> *b = NULL;
+ CbDataList<int> *a = NULL;
+ CbDataList<int> *b = NULL;
debugs(53, 3, "asnMatchIp: Called for " << addr );
@@ -174,7 +174,7 @@
void
ACLASN::prepareForUse()
{
- for (List<int> *i = data; i; i = i->
+ for (CbDataList<int> *i = data; i; i = i->
next)
asnCacheStart(i->element);
}
@@ -388,8 +388,8 @@
rtentry_t *e;
struct squid_radix_node *rn;
- List<int> **Tail = NULL;
- List<int> *q = NULL;
+ CbDataList<int> **Tail = NULL;
+ CbDataList<int> *q = NULL;
as_info *asinfo = NULL;
IPAddress mask;
@@ -439,14 +439,14 @@
debugs(53, 3, "asnAddNet: Warning: Found a network with multiple AS numbers!");
for (Tail = &asinfo->as_number; *Tail; Tail = &(*Tail)->next);
- q = new List<int> (as_number);
+ q = new CbDataList<int> (as_number);
*(Tail) = q;
e->e_info = asinfo;
}
} else {
- q = new List<int> (as_number);
+ q = new CbDataList<int> (as_number);
asinfo = (as_info *)xmalloc(sizeof(as_info));
asinfo->as_number = q;
rn = squid_rn_addroute(&e->e_addr, &e->e_mask, AS_tree_head, e->e_nodes);
@@ -492,8 +492,8 @@
static void
destroyRadixNodeInfo(as_info * e_info)
{
- List<int> *prev = NULL;
- List<int> *data = e_info->as_number;
+ CbDataList<int> *prev = NULL;
+ CbDataList<int> *data = e_info->as_number;
while (data) {
prev = data;
@@ -509,7 +509,7 @@
{
StoreEntry *sentry = (StoreEntry *)_sentry;
rtentry_t *e = (rtentry_t *) rn;
- List<int> *q;
+ CbDataList<int> *q;
as_info *asinfo;
char buf[MAX_IPSTRLEN];
IPAddress addr;
@@ -551,7 +551,7 @@
{
wordlist *W = NULL;
char buf[32];
- List<int> *ldata = data;
+ CbDataList<int> *ldata = data;
while (ldata != NULL) {
snprintf(buf, sizeof(buf), "%d", ldata->element);
@@ -571,14 +571,14 @@
void
ACLASN::parse()
{
- List<int> **curlist = &data;
- List<int> **Tail;
- List<int> *q = NULL;
+ CbDataList<int> **curlist = &data;
+ CbDataList<int> **Tail;
+ CbDataList<int> *q = NULL;
char *t = NULL;
for (Tail = curlist; *Tail; Tail = &((*Tail)->next));
while ((t = strtokFile())) {
- q = new List<int> (atoi(t));
+ q = new CbDataList<int> (atoi(t));
*(Tail) = q;
Tail = &q->next;
}
=== modified file 'src/comm.cc'
--- src/comm.cc 2008-06-24 11:13:03 +0000
+++ src/comm.cc 2008-07-08 08:39:26 +0000
@@ -2509,13 +2509,13 @@
/* explicit instantiation required for some systems */
/// \cond AUTODOCS-IGNORE
-template cbdata_type List<DeferredRead>::CBDATA_List;
+template cbdata_type CbDataList<DeferredRead>::CBDATA_CbDataList;
/// \endcond
void
DeferredReadManager::delayRead(DeferredRead const &aRead) {
debugs(5, 3, "Adding deferred read on FD " << aRead.theRead.fd);
- List<DeferredRead> *temp = deferredReads.push_back(aRead);
+ CbDataList<DeferredRead> *temp = deferredReads.push_back(aRead);
comm_add_close_handler (aRead.theRead.fd, CloseHandler, temp);
}
@@ -2524,13 +2524,13 @@
if (!cbdataReferenceValid (thecbdata))
return;
- List<DeferredRead> *temp = (List<DeferredRead> *)thecbdata;
+ CbDataList<DeferredRead> *temp = (CbDataList<DeferredRead> *)thecbdata;
temp->element.markCancelled();
}
DeferredRead
-DeferredReadManager::popHead(ListContainer<DeferredRead> &deferredReads) {
+DeferredReadManager::popHead(CbDataListContainer<DeferredRead> &deferredReads) {
assert (!deferredReads.empty());
if (!deferredReads.head->element.cancelled)
@@ -2543,7 +2543,7 @@
void
DeferredReadManager::kickReads(int const count) {
- /* if we had List::size() we could consolidate this and flushReads */
+ /* if we had CbDataList::size() we could consolidate this and flushReads */
if (count < 1) {
flushReads();
@@ -2563,9 +2563,9 @@
void
DeferredReadManager::flushReads() {
- ListContainer<DeferredRead> reads;
+ CbDataListContainer<DeferredRead> reads;
reads = deferredReads;
- deferredReads = ListContainer<DeferredRead>();
+ deferredReads = CbDataListContainer<DeferredRead>();
while (!reads.empty()) {
DeferredRead aRead = popHead(reads);
# Begin bundle
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