template <class KEY, class VALUE, class CMAP_TYPE, class ITERATOR_IMPL, class REVERSE_ITERATOR_IMPL, class CACHING_STRATEGY, class ATTRIBUTES> int ACE_Cache_Map_Manager<KEY, VALUE, CMAP_TYPE, ITERATOR_IMPL, REVERSE_ITERATOR_IMPL, CACHING_STRATEGY, ATTRIBUTES>::rebind (const KEY &key, const VALUE &value, KEY &old_key, VALUE &old_value) { CACHE_VALUE cache_value (value, this->caching_strategy_.attributes ()); CACHE_VALUE old_cache_value (old_value, this->caching_strategy_.attributes ()); int rebind_result = this->map_.rebind (key, cache_value, old_key, old_cache_value); if (rebind_result != -1) { int result = this->caching_strategy_.notify_rebind (rebind_result, cache_value.second ()); if (result == -1) { // Make sure the unbind operation is done only when the // notification fails after a bind which is denoted by // rebind_result = 0 if (rebind_result == 0) this->map_.unbind (key); // Unless the notification goes thru the rebind operation is // not complete. rebind_result = -1; } else { old_value = old_cache_value.first (); } } return rebind_result; }
template <ACE_T1> int ACE_Cache_Map_Manager<ACE_T2>::rebind (const KEY &key, const VALUE &value, KEY &old_key, VALUE &old_value) { CACHE_VALUE cache_value (value, this->caching_strategy_.attributes ()); CACHE_VALUE old_cache_value (old_value, this->caching_strategy_.attributes ()); int rebind_result = this->map_.rebind (key, cache_value, old_key, old_cache_value); if (rebind_result != -1) { int result = this->caching_strategy_.notify_rebind (rebind_result, cache_value.second ()); if (result == -1) { // Make sure the unbind operation is done only when the // notification fails after a bind which is denoted by // rebind_result = 0 if (rebind_result == 0) this->map_.unbind (key); // Unless the notification goes thru the rebind operation is // not complete. rebind_result = -1; } else { old_value = old_cache_value.first (); } } return rebind_result; }