]> git.ipfire.org Git - thirdparty/squid.git/blame - src/ACLStrategised.h
Document the 'carp' cache_peer option
[thirdparty/squid.git] / src / ACLStrategised.h
CommitLineData
5dee515e 1
2/*
3 * $Id: ACLStrategised.h,v 1.1 2003/02/17 07:01:34 robertc Exp $
4 *
5 *
6 * SQUID Web Proxy Cache http://www.squid-cache.org/
7 * ----------------------------------------------------------
8 *
9 * Squid is the result of efforts by numerous individuals from
10 * the Internet community; see the CONTRIBUTORS file for full
11 * details. Many organizations have provided support for Squid's
12 * development; see the SPONSORS file for full details. Squid is
13 * Copyrighted (C) 2001 by the Regents of the University of
14 * California; see the COPYRIGHT file for full details. Squid
15 * incorporates software developed and/or copyrighted by other
16 * sources; see the CREDITS file for full details.
17 *
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
22 *
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
27 *
28 * You should have received a copy of the GNU General Public License
29 * along with this program; if not, write to the Free Software
30 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
31 *
32 *
33 * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
34 */
35
36#ifndef SQUID_ACLSTRATEGISED_H
37#define SQUID_ACLSTRATEGISED_H
38#include "ACL.h"
39#include "ACLData.h"
40#include "ACLMatchStrategy.h"
41
42template <class M>
43class ACLStrategised : public ACL {
44 public:
45 typedef M MatchType;
46 void *operator new(size_t);
47 void operator delete(void *);
48 virtual void deleteSelf() const;
49
50 ~ACLStrategised();
51 ACLStrategised(ACLData<MatchType> *, ACLMatchStrategy<MatchType> *, char const *);
52 ACLStrategised (ACLStrategised const &);
53 ACLStrategised &operator= (ACLStrategised const &);
54
55 virtual char const *typeString() const;
56 virtual squid_acl aclType() const { return ACL_DERIVED;}
57 virtual bool requiresRequest() const {return matcher->requiresRequest();}
58 virtual void parse();
59 virtual int match(ACLChecklist *checklist);
60 virtual wordlist *dump() const;
61 virtual bool valid () const;
62 virtual ACL *clone()const;
63 private:
64 static MemPool *Pool;
65 ACLData<MatchType> *data;
66 char const *type_;
67 ACLMatchStrategy<MatchType> *matcher;
68};
69
70/* implementation follows */
71
72template <class MatchType>
73MemPool *ACLStrategised<MatchType>::Pool(NULL);
74
75template <class MatchType>
76void *
77ACLStrategised<MatchType>::operator new (size_t byteCount)
78{
79 /* derived classes with different sizes must implement their own new */
80 assert (byteCount == sizeof (ACLStrategised<MatchType>));
81 if (!Pool)
82 Pool = memPoolCreate("ACLStrategised", sizeof (ACLStrategised<MatchType>));
83 return memPoolAlloc(Pool);
84}
85
86template <class MatchType>
87void
88ACLStrategised<MatchType>::operator delete (void *address)
89{
90 memPoolFree (Pool, address);
91}
92
93template <class MatchType>
94void
95ACLStrategised<MatchType>::deleteSelf() const
96{
97 delete this;
98}
99
100template <class MatchType>
101ACLStrategised<MatchType>::~ACLStrategised()
102{
103 data->deleteSelf();
104}
105
106template <class MatchType>
107ACLStrategised<MatchType>::ACLStrategised(ACLData<MatchType> *newData, ACLMatchStrategy<MatchType> *theStrategy, char const *theType) : data (newData), type_(theType), matcher(theStrategy) {}
108template <class MatchType>
109ACLStrategised<MatchType>::ACLStrategised (ACLStrategised const &old) : data (old.data->clone()), type_(old.type_), matcher (old.matcher)
110{
111}
112template <class MatchType>
113ACLStrategised<MatchType> &
114ACLStrategised<MatchType>::operator= (ACLStrategised const &rhs)
115{
116 data = rhs.data->clone();
117 type_ = rhs.type_;
118 matcher = rhs.matcher;
119 return *this;
120}
121
122template <class MatchType>
123char const *
124ACLStrategised<MatchType>::typeString() const
125{
126 return type_;
127}
128
129template <class MatchType>
130void
131ACLStrategised<MatchType>::parse()
132{
133 data->parse();
134}
135
136template <class MatchType>
137int
138ACLStrategised<MatchType>::match(ACLChecklist *checklist)
139{
140 return matcher->match(data, checklist);
141}
142
143template <class MatchType>
144wordlist *
145ACLStrategised<MatchType>::dump() const
146{
147 return data->dump();
148}
149
150template <class MatchType>
151bool
152ACLStrategised<MatchType>::valid () const
153{
154 return data != NULL;
155}
156
157template <class MatchType>
158ACL *
159ACLStrategised<MatchType>::clone() const
160{
161 return new ACLStrategised(*this);
162}
163
164#endif /* SQUID_ACLSTRATEGISED_H */