aboutsummaryrefslogtreecommitdiffhomepage
path: root/autoload.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-02-05 20:54:41 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-02-05 20:54:41 -0800
commit9ab54030b94fab715e8f62f09cd207f5f411d366 (patch)
treeed846df43c72913fd805d5a829eaa6cc83f6fc27 /autoload.cpp
parent5ad6849d4e6aa76a72b671b50b143ef80d381a75 (diff)
Moved LRU to its own file
Diffstat (limited to 'autoload.cpp')
-rw-r--r--autoload.cpp119
1 files changed, 0 insertions, 119 deletions
diff --git a/autoload.cpp b/autoload.cpp
index 69461c09..f7968ac3 100644
--- a/autoload.cpp
+++ b/autoload.cpp
@@ -37,125 +37,6 @@ file_access_attempt_t access_file(const wcstring &path, int mode) {
return result;
}
-lru_cache_impl_t::lru_cache_impl_t(size_t size) : max_node_count(size), node_count(0), mouth(L"") {
- /* Hook up the mouth to itself: a one node circularly linked list */
- mouth.prev = mouth.next = &mouth;
-}
-
-void lru_cache_impl_t::node_was_evicted(lru_node_t *node) { }
-
-void lru_cache_impl_t::evict_node(lru_node_t *condemned_node) {
- /* We should never evict the mouth */
- assert(condemned_node != NULL && condemned_node != &mouth);
-
- /* Remove it from the linked list */
- condemned_node->prev->next = condemned_node->next;
- condemned_node->next->prev = condemned_node->prev;
-
- /* Remove us from the set */
- node_set.erase(condemned_node);
- node_count--;
-
- /* Tell ourselves */
- this->node_was_evicted(condemned_node);
-}
-
-void lru_cache_impl_t::evict_last_node(void) {
- /* Simple */
- evict_node(mouth.prev);
-}
-
-bool lru_cache_impl_t::evict_node(const wcstring &key) {
- /* Construct a fake node as our key */
- lru_node_t node_key(key);
-
- /* Look for it in the set */
- node_set_t::iterator iter = node_set.find(&node_key);
- if (iter == node_set.end())
- return false;
-
- /* Evict the given node */
- evict_node(*iter);
- return true;
-}
-
-void lru_cache_impl_t::promote_node(lru_node_t *node) {
- /* We should never promote the mouth */
- assert(node != &mouth);
-
- /* First unhook us */
- node->prev->next = node->next;
- node->next->prev = node->prev;
-
- /* Put us after the mouth */
- node->next = mouth.next;
- node->next->prev = node;
- node->prev = &mouth;
- mouth.next = node;
-}
-
-bool lru_cache_impl_t::add_node(lru_node_t *node) {
- /* Add our node without eviction */
- if (! this->add_node_without_eviction(node))
- return false;
-
- /* Evict */
- while (node_count > max_node_count)
- evict_last_node();
-
- /* Success */
- return true;
-}
-
-bool lru_cache_impl_t::add_node_without_eviction(lru_node_t *node) {
- assert(node != NULL && node != &mouth);
-
- /* Try inserting; return false if it was already in the set */
- if (! node_set.insert(node).second)
- return false;
-
- /* Add the node after the mouth */
- node->next = mouth.next;
- node->next->prev = node;
- node->prev = &mouth;
- mouth.next = node;
-
- /* Update the count */
- node_count++;
-
- /* Evict */
- while (node_count > max_node_count)
- evict_last_node();
-
- /* Success */
- return true;
-}
-
-lru_node_t *lru_cache_impl_t::get_node(const wcstring &key) {
- lru_node_t *result = NULL;
-
- /* Construct a fake node as our key */
- lru_node_t node_key(key);
-
- /* Look for it in the set */
- node_set_t::iterator iter = node_set.find(&node_key);
-
- /* If we found a node, promote and return it */
- if (iter != node_set.end()) {
- result = *iter;
- promote_node(result);
- }
- return result;
-}
-
-void lru_cache_impl_t::evict_all_nodes() {
- while (node_count > 0) {
- evict_last_node();
- }
-}
-
-
-
autoload_t::autoload_t(const wcstring &env_var_name_var, const builtin_script_t * const scripts, size_t script_count) :
env_var_name(env_var_name_var),
builtin_scripts(scripts),