]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/acl/Strategised.h
2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_ACLSTRATEGISED_H
10 #define SQUID_ACLSTRATEGISED_H
14 #include "acl/FilledChecklist.h"
15 #include "acl/Strategy.h"
18 class ACLStrategised
: public ACL
20 MEMPROXY_CLASS(ACLStrategised
);
26 ACLStrategised(ACLData
<MatchType
> *, ACLStrategy
<MatchType
> *, char const *, const ACLFlag flags
[] = ACLFlags::NoFlags
);
27 ACLStrategised (ACLStrategised
const &);
28 ACLStrategised
&operator= (ACLStrategised
const &);
30 virtual char const *typeString() const;
31 virtual bool requiresRequest() const {return matcher
->requiresRequest();}
33 virtual bool requiresReply() const {return matcher
->requiresReply();}
35 virtual void prepareForUse() { data
->prepareForUse();}
38 virtual int match(ACLChecklist
*checklist
);
39 virtual int match (M
const &);
40 virtual SBufList
dump() const;
41 virtual bool empty () const;
42 virtual bool valid () const;
43 virtual ACL
*clone()const;
46 ACLData
<MatchType
> *data
;
48 ACLStrategy
<MatchType
> *matcher
;
51 /* implementation follows */
53 template <class MatchType
>
54 ACLStrategised
<MatchType
>::~ACLStrategised()
59 template <class MatchType
>
60 ACLStrategised
<MatchType
>::ACLStrategised(ACLData
<MatchType
> *newData
, ACLStrategy
<MatchType
> *theStrategy
, char const *theType
, const ACLFlag flgs
[]) : ACL(flgs
), data (newData
), type_(theType
), matcher(theStrategy
) {}
62 template <class MatchType
>
63 ACLStrategised
<MatchType
>::ACLStrategised (ACLStrategised
const &old
) : data (old
.data
->clone()), type_(old
.type_
), matcher (old
.matcher
)
66 template <class MatchType
>
67 ACLStrategised
<MatchType
> &
68 ACLStrategised
<MatchType
>::operator= (ACLStrategised
const &rhs
)
70 data
= rhs
.data
->clone();
72 matcher
= rhs
.matcher
;
76 template <class MatchType
>
78 ACLStrategised
<MatchType
>::typeString() const
83 template <class MatchType
>
85 ACLStrategised
<MatchType
>::parse()
90 template <class MatchType
>
92 ACLStrategised
<MatchType
>::empty() const
97 template <class MatchType
>
99 ACLStrategised
<MatchType
>::match(ACLChecklist
*cl
)
101 ACLFilledChecklist
*checklist
= dynamic_cast<ACLFilledChecklist
*>(cl
);
103 return matcher
->match(data
, checklist
, flags
);
106 template <class MatchType
>
108 ACLStrategised
<MatchType
>::match(MatchType
const &toFind
)
110 return data
->match(toFind
);
113 template <class MatchType
>
115 ACLStrategised
<MatchType
>::dump() const
120 template <class MatchType
>
122 ACLStrategised
<MatchType
>::valid () const
124 return matcher
->valid();
127 template <class MatchType
>
129 ACLStrategised
<MatchType
>::clone() const
131 return new ACLStrategised(*this);
134 #endif /* SQUID_ACLSTRATEGISED_H */