Defines a helper class for the Caching Strategies. More...
#include <Caching_Utility_T.h>
Public Types | |
typedef ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy < KEY, VALUE, CONTAINER > | CLEANUP_STRATEGY |
typedef ACE_Cleanup_Strategy < KEY, VALUE, CONTAINER > | CLEANUP_STRATEGY_BASE |
Public Member Functions | |
ACE_Refcounted_Recyclable_Handler_Caching_Utility (ACE_Cleanup_Strategy< KEY, VALUE, CONTAINER > *cleanup_strategy=0, int delete_cleanup_strategy=0) | |
Constructor. | |
~ACE_Refcounted_Recyclable_Handler_Caching_Utility (void) | |
Destructor. | |
int | clear_cache (CONTAINER &container, double purge_percent) |
Protected Member Functions | |
void | minimum (CONTAINER &container, KEY *&key_to_remove, VALUE *&value_to_remove) |
Find the entry with minimum caching attributes. | |
Protected Attributes | |
CLEANUP_STRATEGY_BASE * | cleanup_strategy_ |
This is the default Cleanup Strategy for this utility. | |
int | delete_cleanup_strategy_ |
Whether the cleanup_strategy should be destroyed or not. | |
size_t | marked_as_closed_entries_ |
Private Member Functions | |
void | operator= (const ARRHUTIL< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES > &) |
ARRHUTIL (const ARRHUTIL< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES > &) |
Defines a helper class for the Caching Strategies.
This class defines the methods commonly used by the different caching strategies. For instance: clear_cache () method which decides and purges the entry from the container.
Definition at line 163 of file Caching_Utility_T.h.
typedef ACE_Refcounted_Recyclable_Handler_Cleanup_Strategy<KEY, VALUE, CONTAINER> ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::CLEANUP_STRATEGY |
Definition at line 168 of file Caching_Utility_T.h.
typedef ACE_Cleanup_Strategy<KEY, VALUE, CONTAINER> ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::CLEANUP_STRATEGY_BASE |
Definition at line 169 of file Caching_Utility_T.h.
ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::ACE_Refcounted_Recyclable_Handler_Caching_Utility | ( | ACE_Cleanup_Strategy< KEY, VALUE, CONTAINER > * | cleanup_strategy = 0 , |
|
int | delete_cleanup_strategy = 0 | |||
) |
Constructor.
Definition at line 239 of file Caching_Utility_T.cpp.
: cleanup_strategy_ (cleanup_strategy), delete_cleanup_strategy_ (delete_cleanup_strategy), marked_as_closed_entries_ (0) { if (cleanup_strategy == 0) { ACE_NEW (this->cleanup_strategy_, CLEANUP_STRATEGY); this->delete_cleanup_strategy_ = 1; } }
ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::~ACE_Refcounted_Recyclable_Handler_Caching_Utility | ( | void | ) |
Destructor.
Definition at line 254 of file Caching_Utility_T.cpp.
{ if (this->delete_cleanup_strategy_) delete this->cleanup_strategy_; }
ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::ARRHUTIL | ( | const ARRHUTIL< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES > & | ) | [private] |
int ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::clear_cache | ( | CONTAINER & | container, | |
double | purge_percent | |||
) |
Purge entries from the <container>. The Cleanup_Strategy will do the actual job of cleanup once the entries to be cleaned up are decided.
Definition at line 261 of file Caching_Utility_T.cpp.
{ // Check that the purge_percent is non-zero. if (purge_percent == 0) return 0; // Get the number of entries in the container which can be considered for purging. size_t const available_entries = container.current_size () - this->marked_as_closed_entries_; // Also whether the number of entries in the cache zero. // Oops! then there is no way out but exiting. if (available_entries <= 0) return 0; // Calculate the no of entries to remove from the cache depending // upon the <purge_percent>. size_t entries_to_remove = ACE_MAX (static_cast<size_t> (1), static_cast<size_t> (static_cast<double> (purge_percent) / 100 * available_entries)); if (entries_to_remove >= available_entries || entries_to_remove == 0) entries_to_remove = available_entries - 1; KEY *key_to_remove = 0; VALUE *value_to_remove = 0; for (size_t i = 0; i < entries_to_remove ; ++i) { this->minimum (container, key_to_remove, value_to_remove); // Simply verifying that the key is non-zero. // This is important for strategies where the minimum // entry cant be found due to constraints on the type of entry // to remove. if (key_to_remove == 0) return 0; if (this->cleanup_strategy_->cleanup (container, key_to_remove, value_to_remove) == -1) return -1; ++this->marked_as_closed_entries_; } return 0; }
void ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::minimum | ( | CONTAINER & | container, | |
KEY *& | key_to_remove, | |||
VALUE *& | value_to_remove | |||
) | [protected] |
Find the entry with minimum caching attributes.
Definition at line 315 of file Caching_Utility_T.cpp.
{ // Starting values. ITERATOR end = container.end (); ITERATOR iter = container.begin (); ATTRIBUTES min = (*iter).int_id_.second (); key_to_remove = 0; value_to_remove = 0; // Found the minimum entry to be purged? int found = 0; // The iterator moves thru the container searching for the entry // with the lowest ATTRIBUTES. for (; iter != end; ++iter) { // If the <min> entry isnt IDLE_AND_PURGABLE continue until you reach // the first entry which can be purged. This is the minimum with // which you will compare the rest of the purgable entries. if ((*iter).ext_id_.recycle_state () == ACE_RECYCLABLE_IDLE_AND_PURGABLE || (*iter).ext_id_.recycle_state () == ACE_RECYCLABLE_PURGABLE_BUT_NOT_IDLE) { if (found == 0) { min = (*iter).int_id_.second (); key_to_remove = &(*iter).ext_id_; value_to_remove = &(*iter).int_id_; found = 1; } else { // Ah! an entry with lower ATTTRIBUTES... if (min > (*iter).int_id_.second ()) { min = (*iter).int_id_.second (); key_to_remove = &(*iter).ext_id_; value_to_remove = &(*iter).int_id_; } } } } }
void ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::operator= | ( | const ARRHUTIL< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES > & | ) | [private] |
CLEANUP_STRATEGY_BASE* ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::cleanup_strategy_ [protected] |
This is the default Cleanup Strategy for this utility.
Definition at line 194 of file Caching_Utility_T.h.
int ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::delete_cleanup_strategy_ [protected] |
Whether the cleanup_strategy should be destroyed or not.
Definition at line 197 of file Caching_Utility_T.h.
size_t ACE_Refcounted_Recyclable_Handler_Caching_Utility< KEY, VALUE, CONTAINER, ITERATOR, ATTRIBUTES >::marked_as_closed_entries_ [protected] |
This figure denotes the number of entries are there in the container which have been marked as closed already but might not have been unbound from the container.
Definition at line 204 of file Caching_Utility_T.h.