]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Summary: Merge final stage1 ACL refactoring.
authorrobertc <>
Tue, 25 Feb 2003 19:07:41 +0000 (19:07 +0000)
committerrobertc <>
Tue, 25 Feb 2003 19:07:41 +0000 (19:07 +0000)
Keywords:

Patches applied:

  * robertc@squid-cache.org--squid/squid--acl--3.0--patch-25
     Merge from HEAD.

  * robertc@squid-cache.org--squid/squid--acl--3.0--patch-24
     Merge from HEAD.

  * robertc@squid-cache.org--squid/squid--acl--3.0--patch-23
     ACL tidyups within new framework.

include/List.h [new file with mode: 0644]
include/Range.h

diff --git a/include/List.h b/include/List.h
new file mode 100644 (file)
index 0000000..87eef2d
--- /dev/null
@@ -0,0 +1,130 @@
+
+/*
+ * $Id: List.h,v 1.1 2003/02/25 12:07:41 robertc Exp $
+ *
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  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.
+ *
+ */
+
+#ifndef SQUID_LIST_H
+#define SQUID_LIST_H
+
+template <class C>
+class List
+{
+
+public:
+  void *operator new (size_t);
+  void operator delete (void *);
+  void deleteSelf() const;
+  List (C const &);
+  ~List();
+
+  bool find(C const &)const;
+  bool findAndTune(C const &);
+  List *next;
+  C element;
+private:
+  static MemPool *Pool;
+};
+
+/* implementation follows */
+
+template <class C>
+MemPool *List<C>::Pool(NULL);
+
+template <class C>
+void *
+List<C>::operator new (size_t byteCount)
+{
+    /* derived classes with different sizes must implement their own new */
+    assert (byteCount == sizeof (List<C>));
+    if (!Pool)
+       Pool = memPoolCreate("List", sizeof (List<C>));
+    return memPoolAlloc(Pool);
+}
+
+template <class C>
+void
+List<C>::operator delete (void *address)
+{
+    memPoolFree (Pool, address);
+}
+
+template <class C>
+void
+List<C>::deleteSelf() const
+{
+    delete this;
+}
+
+template <class C>
+List<C>::List(C const &value) : next(NULL), element (value)
+{
+}
+
+template <class C>
+List<C>::~List()
+{
+    if (next)
+       next->deleteSelf();
+}
+
+template <class C>
+bool
+List<C>::find (C const &toFind) const
+{
+    List<C> const *node = NULL;
+    for (node = this; node; node = node->next)
+       if (node->element == toFind)
+           return true;
+    return false;
+}
+
+template <class C>
+bool
+List<C>::findAndTune(C const & toFind)
+{
+    List<C> *prev = NULL;
+    for (List<C> *node = this; node; node = node->next) {
+       if (node->element == toFind) {
+           if (prev != NULL) {
+               /* shift the element just found to the second position
+                * in the list */
+               prev->next = node->next;
+               node->next = this->next;
+               this->next = node;
+           }
+           return true;
+       }
+       prev = node;
+    }
+    return false;
+}
+
+#endif /* SQUID_LIST_H */
index 84779415c8252332e0cc565a48f078840786074f..c5141641845cf0f2e443aaecd53d4b41aadc0a1e 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: Range.h,v 1.2 2003/01/23 00:36:47 robertc Exp $
+ * $Id: Range.h,v 1.3 2003/02/25 12:07:41 robertc Exp $
  *
  *
  * SQUID Web Proxy Cache          http://www.squid-cache.org/
@@ -42,6 +42,7 @@ class Range
 {
 
 public:
+    Range ();
     Range (C start_, C end_);
     C start;
     C end;
@@ -49,6 +50,9 @@ public:
     size_t size() const;
 };
 
+template<class C>
+Range<C>::Range () : start(), end() {}
+
 template<class C>
 Range<C>::Range (C start_, C end_) : start(start_), end(end_){}