You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2011/03/22 00:59:45 UTC

svn commit: r1084032 - in /trafficserver/traffic/trunk/proxy/http/remap: Trie.h UrlMappingPathIndex.cc UrlMappingPathIndex.h

Author: zwoop
Date: Mon Mar 21 23:59:45 2011
New Revision: 1084032

URL: http://svn.apache.org/viewvc?rev=1084032&view=rev
Log:
TS-550 Use our standard List container for the Trie class

Modified:
    trafficserver/traffic/trunk/proxy/http/remap/Trie.h
    trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.cc
    trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.h

Modified: trafficserver/traffic/trunk/proxy/http/remap/Trie.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http/remap/Trie.h?rev=1084032&r1=1084031&r2=1084032&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http/remap/Trie.h (original)
+++ trafficserver/traffic/trunk/proxy/http/remap/Trie.h Mon Mar 21 23:59:45 2011
@@ -23,27 +23,32 @@
 #ifndef _TRIE_H
 #define _TRIE_H
 
-#include <list>
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
+#include "List.h"
+
+// Note that you should provide the class to use here, but we'll store
+// pointers to such objects internally.
 template<typename T>
 class Trie
 {
 public:
-  Trie() { m_root.Clear(); }
+  Trie()
+    {
+      m_root.Clear();
+    }
 
   // will return false for duplicates; key should be NULL-terminated
   // if key_len is defaulted to -1
-  bool Insert(const char *key, const T &value, int rank, int key_len = -1);
+  bool Insert(const char *key, T *value, int rank, int key_len = -1);
 
   // will return false if not found; else value_ptr will point to found value
-  bool Search(const char *key, T *&value_ptr, int key_len = -1);
+  T* Search(const char *key, int key_len = -1);
   void Clear();
 
-  typedef std::list<T*> ValuePointerList;
+  typedef Queue<T> ValuePointerList;
   const ValuePointerList &GetValues() const { return m_value_list; }
 
   virtual ~Trie() { Clear(); }
@@ -54,7 +59,7 @@ private:
   class Node
   {
   public:
-    T value;
+    T* value;
     bool occupied;
     int rank;
 
@@ -98,7 +103,7 @@ Trie<T>::_CheckArgs(const char *key, int
 
 template<typename T>
 bool
-Trie<T>::Insert(const char *key, const T &value, int rank, int key_len /* = -1 */)
+Trie<T>::Insert(const char *key, T* value, int rank, int key_len /* = -1 */)
 {
   _CheckArgs(key, key_len);
 
@@ -132,12 +137,11 @@ Trie<T>::Insert(const char *key, const T
 
   if (curr_node->occupied) {
     Error("Cannot insert duplicate!");
-  }
-  else {
+  } else {
     curr_node->occupied = true;
     curr_node->value = value;
     curr_node->rank = rank;
-    m_value_list.push_back(&(curr_node->value));
+    m_value_list.enqueue(curr_node->value);
     retval = true;
     Debug("Trie::Insert", "inserted new element!");
   }
@@ -145,8 +149,8 @@ Trie<T>::Insert(const char *key, const T
 }
 
 template<typename T>
-bool
-Trie<T>::Search(const char *key, T *&value_ptr, int key_len /* = -1 */)
+T*
+Trie<T>::Search(const char *key, int key_len /* = -1 */)
 {
   _CheckArgs(key, key_len);
 
@@ -178,11 +182,10 @@ Trie<T>::Search(const char *key, T *&val
 
   if (found_node) {
     Debug("Trie::Search", "Returning element with rank %d", found_node->rank);
-    value_ptr = &(found_node->value);
-    return true;
+    return found_node->value;
   }
 
-  return false;
+  return NULL;
 }
 
 

Modified: trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.cc?rev=1084032&r1=1084031&r2=1084032&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.cc (original)
+++ trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.cc Mon Mar 21 23:59:45 2011
@@ -53,7 +53,7 @@ UrlMappingPathIndex::Insert(url_mapping 
 url_mapping *
 UrlMappingPathIndex::Search(URL *request_url, int request_port, bool normal_search /* = true */) const
 {
-  url_mapping **retval = 0;
+  url_mapping *retval = 0;
   int scheme_idx;
   UrlMappingTrie *trie;
   int path_len;
@@ -68,11 +68,11 @@ UrlMappingPathIndex::Search(URL *request
   }
 
   path = request_url->path_get(&path_len);
-  if (!trie->Search(path, retval, path_len)) {
+  if (!(retval = trie->Search(path, path_len))) {
     Debug("UrlMappingPathIndex::Search", "Couldn't find entry for url with path [%.*s]", path_len, path);
     goto lFail;
   }
-  return *retval;
+  return retval;
 
 lFail:
   return 0;
@@ -82,13 +82,9 @@ void
 UrlMappingPathIndex::GetMappings(MappingList &mapping_list) const
 {
   UrlMappingGroup::const_iterator group_iter;
-  UrlMappingTrie::ValuePointerList::const_iterator list_iter;
 
   for (group_iter = m_tries.begin(); group_iter != m_tries.end(); ++group_iter) {
-    const UrlMappingTrie::ValuePointerList &value_pointers = group_iter->second->GetValues();
-    for (list_iter = value_pointers.begin(); list_iter != value_pointers.end(); ++list_iter) {
-      mapping_list.enqueue(*(*list_iter));
-    }
+    mapping_list.append(group_iter->second->GetValues());
   }
 }
 

Modified: trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.h?rev=1084032&r1=1084031&r2=1084032&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.h (original)
+++ trafficserver/traffic/trunk/proxy/http/remap/UrlMappingPathIndex.h Mon Mar 21 23:59:45 2011
@@ -36,26 +36,31 @@ public:
   UrlMappingPathIndex()
   { }
 
-  bool Insert(url_mapping *mapping);
+  virtual ~UrlMappingPathIndex()
+  {
+    Clear();
+  }
 
+  bool Insert(url_mapping *mapping);
   url_mapping *Search(URL *request_url, int request_port, bool normal_search = true) const;
 
   typedef Queue<url_mapping> MappingList;
 
   void GetMappings(MappingList &mapping_list) const;
-
   void Clear();
 
-  virtual ~UrlMappingPathIndex() { Clear(); }
-
 
 private:
-  typedef Trie<url_mapping *> UrlMappingTrie;
+  typedef Trie<url_mapping> UrlMappingTrie;
+
   struct UrlMappingTrieKey {
     int scheme_wks_idx;
     int port;
 
-    UrlMappingTrieKey(int idx, int p) : scheme_wks_idx(idx), port(p) { };
+    UrlMappingTrieKey(int idx, int p)
+      : scheme_wks_idx(idx), port(p)
+    { };
+    
     bool operator <(const UrlMappingTrieKey &rhs) const {
       if (scheme_wks_idx == rhs.scheme_wks_idx) {
         return (port < rhs.port);
@@ -72,7 +77,8 @@ private:
   UrlMappingPathIndex(const UrlMappingPathIndex &rhs) { NOWARN_UNUSED(rhs); };
   UrlMappingPathIndex &operator =(const UrlMappingPathIndex &rhs) { NOWARN_UNUSED(rhs); return *this; }
 
-  inline UrlMappingTrie *_GetTrie(URL *url, int &idx, int port, bool search = true) const {
+  inline UrlMappingTrie *
+  _GetTrie(URL *url, int &idx, int port, bool search = true) const {
     idx = url->scheme_get_wksidx();
     UrlMappingGroup::const_iterator group_iter;
     if (search) { // normal search