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