クラス テンプレート shttl::lru_list< key_type, pointer_type >

#include <lru.h>

shttl::lru_list< key_type, pointer_type >に対する継承グラフ

Inheritance graph
[凡例]
shttl::lru_list< key_type, pointer_type >のコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

Public 型

typedef std::vector< element_typearray_type
typedef array_type::iterator iterator
typedef replacer< key_type
>::size_type 
size_type

Public メソッド

void construct (const size_type set_num, const size_type way_num)
 lru_list ()
size_type size ()
size_type target (const size_type index)
void touch (const size_type index, const size_type way, const key_type key)

Protected メソッド

void erase (iterator set, iterator cur)
iterator get_footer (const size_type index)
iterator get_set (const size_type index)
void insert (iterator set, iterator pos, iterator cur)
void reset_set (size_type index)

Protected 変数

array_type m_array
size_t m_pitch
size_t m_set_num
size_t m_way_num

構成

struct  element_type

説明

template<typename key_type, typename pointer_type = u8>
class shttl::lru_list< key_type, pointer_type >

lru.h316 行で定義されています。


型定義

template<typename key_type, typename pointer_type = u8>
typedef std::vector<element_type> shttl::lru_list< key_type, pointer_type >::array_type

lru.h327 行で定義されています。

template<typename key_type, typename pointer_type = u8>
typedef array_type::iterator shttl::lru_list< key_type, pointer_type >::iterator

lru.h328 行で定義されています。

template<typename key_type, typename pointer_type = u8>
typedef replacer< key_type >::size_type shttl::lru_list< key_type, pointer_type >::size_type

shttl::replacer< key_type >を再定義しています。

lru.h319 行で定義されています。


コンストラクタとデストラクタ

template<typename key_type, typename pointer_type = u8>
shttl::lru_list< key_type, pointer_type >::lru_list (  )  [inline]

lru.h330 行で定義されています。

00331         {
00332             m_way_num = 0;
00333             m_set_num = 0;
00334             m_pitch   = 0;
00335         }


関数

template<typename key_type, typename pointer_type = u8>
void shttl::lru_list< key_type, pointer_type >::construct ( const size_type  set_num,
const size_type  way_num 
) [inline]

lru.h337 行で定義されています。

00338         {
00339             m_way_num = way_num;
00340             m_set_num = set_num;
00341             m_pitch   = way_num + 1;
00342             size_t size = set_num * m_pitch;
00343 
00344             if( std::numeric_limits<pointer_type>().max() <= m_pitch ){
00345                 throw std::invalid_argument( 
00346                     "shttl::lru_list() \n The specified way number is too large." 
00347                 );
00348             }
00349 
00350             m_array.resize( size );
00351 
00352             for( size_t i = 0; i < set_num; i++ ){
00353                 reset_set( i );
00354             }
00355 
00356         }

template<typename key_type, typename pointer_type = u8>
void shttl::lru_list< key_type, pointer_type >::erase ( iterator  set,
iterator  cur 
) [inline, protected]

lru.h443 行で定義されています。

参照元 shttl::lru_list< key_type >::touch().

00444         {
00445             iterator prev = set + cur->prev;
00446             iterator next = set + cur->next;
00447             prev->next = cur->next;
00448             next->prev = cur->prev;
00449         }

Here is the caller graph for this function:

template<typename key_type, typename pointer_type = u8>
iterator shttl::lru_list< key_type, pointer_type >::get_footer ( const size_type  index  )  [inline, protected]

lru.h417 行で定義されています。

参照元 shttl::lru_list< key_type >::target().

00418         {
00419             return get_set( index ) + m_way_num;
00420         }

Here is the caller graph for this function:

template<typename key_type, typename pointer_type = u8>
iterator shttl::lru_list< key_type, pointer_type >::get_set ( const size_type  index  )  [inline, protected]

lru.h400 行で定義されています。

参照元 shttl::lru_list< key_type >::get_footer()shttl::lru_list< key_type >::reset_set()shttl::lru_list< key_type >::touch().

00401         {
00402             size_t offset = index * m_pitch;
00403 
00404             // LRU information of each cache set consists of a list with 'm_way_num + 1' ways.
00405             // (m_pitch = m_way_num + 1
00406             // The last entry in each list is a footer pointing an LRU entry.
00407             //
00408             // An example of 4-way array:
00409             // set-0: | way-0 | way-1 | way-2 | way-3 | footer |
00410             // set-1: | way-0 | way-1 | way-2 | way-3 | footer |
00411             // set-2: ...
00412             
00413             return m_array.begin() + offset;
00414         }

Here is the caller graph for this function:

template<typename key_type, typename pointer_type = u8>
void shttl::lru_list< key_type, pointer_type >::insert ( iterator  set,
iterator  pos,
iterator  cur 
) [inline, protected]

lru.h452 行で定義されています。

参照元 shttl::lru_list< key_type >::touch().

00453         {
00454             iterator prev = set + pos->prev;
00455             cur->prev  = pos->prev;
00456             cur->next  = (pointer_type)(pos - set);
00457             prev->next = (pointer_type)(cur - set);
00458             pos->prev  = (pointer_type)(cur - set);
00459         }

Here is the caller graph for this function:

template<typename key_type, typename pointer_type = u8>
void shttl::lru_list< key_type, pointer_type >::reset_set ( size_type  index  )  [inline, protected]

lru.h423 行で定義されています。

参照元 shttl::lru_list< key_type >::construct().

00424         {
00425             //      LRU <--------------------> MRU
00426             //       0        1        2        3    m_way_num
00427             // |-> way-0 -> way-1 -> way-2 -> way-3 -> footer ->|
00428             // ^                                                |
00429             // ^------------------------------------------------|
00430 
00431             iterator set = get_set( index );
00432 
00433             for( size_t i = 0; i < m_way_num + 1; i++ ){
00434                 ( set + i )->prev = (pointer_type)(i - 1);
00435                 ( set + i )->next = (pointer_type)(i + 1);
00436             }
00437 
00438             (set + 0)->prev = (pointer_type)m_way_num;
00439             (set + m_way_num)->next = (pointer_type)0;
00440         }

Here is the caller graph for this function:

template<typename key_type, typename pointer_type = u8>
size_type shttl::lru_list< key_type, pointer_type >::size (  )  [inline]

lru.h358 行で定義されています。

参照元 shttl::lru_list< key_type >::construct().

00359         {
00360             return m_set_num;
00361         }

Here is the caller graph for this function:

template<typename key_type, typename pointer_type = u8>
size_type shttl::lru_list< key_type, pointer_type >::target ( const size_type  index  )  [inline]

lru.h363 行で定義されています。

00364         {
00365             return get_footer( index )->next;
00366         }

template<typename key_type, typename pointer_type = u8>
void shttl::lru_list< key_type, pointer_type >::touch ( const size_type  index,
const size_type  way,
const key_type  key 
) [inline]

lru.h368 行で定義されています。

00369         {
00370             iterator set = get_set( index );
00371             iterator cur = set + way;
00372             
00373             // Erase 'cur' from list.
00374             erase( set, cur );    
00375 
00376             // Insert 'cur' before a footer.
00377             insert( 
00378                 set, 
00379                 set + m_way_num,  // This is a footer
00380                 cur
00381             );
00382 
00383             //           Array&Pointer Image             List Image
00384             //           way-0 way-1 way-2 way-3 footer
00385             // initial : [4,1] [0,2] [1,3] [2,4] [3,0] / w0 -> w1 -> w2 -> w3 -> footer -> w0(LRU)
00386             // touch 0 : [3,4] [4,2] [1,3] [2,0] [0,1] / w1 -> w2 -> w3 -> w0 -> footer -> w1(LRU)
00387             // touch 3 : [2,3] [4,2] [1,0] [0,4] [3,1] / w1 -> w2 -> w0 -> w3 -> footer -> w1(LRU)
00388             //                                      ^
00389             //                                     LRU
00390 
00391         }


変数

template<typename key_type, typename pointer_type = u8>
array_type shttl::lru_list< key_type, pointer_type >::m_array [protected]

lru.h398 行で定義されています。

参照元 shttl::lru_list< key_type >::construct()shttl::lru_list< key_type >::get_set().

template<typename key_type, typename pointer_type = u8>
size_t shttl::lru_list< key_type, pointer_type >::m_pitch [protected]

lru.h396 行で定義されています。

参照元 shttl::lru_list< key_type >::construct()shttl::lru_list< key_type >::get_set()shttl::lru_list< key_type >::lru_list().

template<typename key_type, typename pointer_type = u8>
size_t shttl::lru_list< key_type, pointer_type >::m_set_num [protected]

lru.h397 行で定義されています。

参照元 shttl::lru_list< key_type >::construct()shttl::lru_list< key_type >::lru_list()shttl::lru_list< key_type >::size().

template<typename key_type, typename pointer_type = u8>
size_t shttl::lru_list< key_type, pointer_type >::m_way_num [protected]

lru.h395 行で定義されています。

参照元 shttl::lru_list< key_type >::construct()shttl::lru_list< key_type >::get_footer()shttl::lru_list< key_type >::lru_list()shttl::lru_list< key_type >::reset_set()shttl::lru_list< key_type >::touch().


このクラスの説明は次のファイルから生成されました:
Onikiri2に対してTue Jun 18 15:35:07 2013に生成されました。  doxygen 1.4.7