/*
- * $Id: ACLStrategised.h,v 1.1 2003/02/17 07:01:34 robertc Exp $
+ * $Id$
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
#define SQUID_ACLSTRATEGISED_H
#include "ACL.h"
#include "ACLData.h"
-#include "ACLMatchStrategy.h"
+#include "ACLStrategy.h"
template <class M>
-class ACLStrategised : public ACL {
- public:
+
+class ACLStrategised : public ACL
+{
+
+public:
typedef M MatchType;
void *operator new(size_t);
void operator delete(void *);
- virtual void deleteSelf() const;
~ACLStrategised();
- ACLStrategised(ACLData<MatchType> *, ACLMatchStrategy<MatchType> *, char const *);
+ ACLStrategised(ACLData<MatchType> *, ACLStrategy<MatchType> *, char const *);
ACLStrategised (ACLStrategised const &);
ACLStrategised &operator= (ACLStrategised const &);
-
+
virtual char const *typeString() const;
- virtual squid_acl aclType() const { return ACL_DERIVED;}
virtual bool requiresRequest() const {return matcher->requiresRequest();}
+
+ virtual bool requiresReply() const {return matcher->requiresReply();}
+
+ virtual void prepareForUse() { data->prepareForUse();}
+
virtual void parse();
virtual int match(ACLChecklist *checklist);
+ virtual int match (M const &);
virtual wordlist *dump() const;
+ virtual bool empty () const;
virtual bool valid () const;
virtual ACL *clone()const;
- private:
- static MemPool *Pool;
+
+private:
+ static MemAllocator *Pool;
ACLData<MatchType> *data;
char const *type_;
- ACLMatchStrategy<MatchType> *matcher;
+ ACLStrategy<MatchType> *matcher;
};
/* implementation follows */
template <class MatchType>
-MemPool *ACLStrategised<MatchType>::Pool(NULL);
+MemAllocator *ACLStrategised<MatchType>::Pool = NULL;
template <class MatchType>
void *
{
/* derived classes with different sizes must implement their own new */
assert (byteCount == sizeof (ACLStrategised<MatchType>));
+
if (!Pool)
- Pool = memPoolCreate("ACLStrategised", sizeof (ACLStrategised<MatchType>));
- return memPoolAlloc(Pool);
-}
+ Pool = memPoolCreate("ACLStrategised", sizeof (ACLStrategised<MatchType>));
-template <class MatchType>
-void
-ACLStrategised<MatchType>::operator delete (void *address)
-{
- memPoolFree (Pool, address);
+ return Pool->alloc();
}
template <class MatchType>
void
-ACLStrategised<MatchType>::deleteSelf() const
+ACLStrategised<MatchType>::operator delete (void *address)
{
- delete this;
+ Pool->free(address);
}
template <class MatchType>
ACLStrategised<MatchType>::~ACLStrategised()
{
- data->deleteSelf();
+ delete data;
}
template <class MatchType>
-ACLStrategised<MatchType>::ACLStrategised(ACLData<MatchType> *newData, ACLMatchStrategy<MatchType> *theStrategy, char const *theType) : data (newData), type_(theType), matcher(theStrategy) {}
+ACLStrategised<MatchType>::ACLStrategised(ACLData<MatchType> *newData, ACLStrategy<MatchType> *theStrategy, char const *theType) : data (newData), type_(theType), matcher(theStrategy) {}
+
template <class MatchType>
ACLStrategised<MatchType>::ACLStrategised (ACLStrategised const &old) : data (old.data->clone()), type_(old.type_), matcher (old.matcher)
-{
-}
+{}
+
template <class MatchType>
ACLStrategised<MatchType> &
ACLStrategised<MatchType>::operator= (ACLStrategised const &rhs)
data->parse();
}
+template <class MatchType>
+bool
+ACLStrategised<MatchType>::empty() const
+{
+ return data->empty();
+}
+
template <class MatchType>
int
ACLStrategised<MatchType>::match(ACLChecklist *checklist)
return matcher->match(data, checklist);
}
+template <class MatchType>
+int
+ACLStrategised<MatchType>::match(MatchType const &toFind)
+{
+ return data->match(toFind);
+}
+
template <class MatchType>
wordlist *
ACLStrategised<MatchType>::dump() const
bool
ACLStrategised<MatchType>::valid () const
{
- return data != NULL;
+ return matcher->valid();
}
template <class MatchType>