メインページ | ネームスペース一覧 | クラス階層 | 構成 | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

# クラス テンプレートgslib::static_container::abstruct_list_node_pool< Value >

サブクラスはコンストラクタで init() を呼ばなければならない。 [詳細]

`#include <list_node_pool.h>`

gslib::static_container::abstruct_list_node_pool< Value >に対する継承グラフ

[凡例]
gslib::static_container::abstruct_list_node_pool< Value >のコラボレーション図

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

## Public 型
typedef list_link | link
typedef list_node< Value > | node
## Public メソッド
virtual size_type | size () const=0
node * | allocate ()
| メモリ領域の貸与のみ。value のコンストラクタ呼び出しは、ユーザーの責任。
void | deallocate (link *first, link *last)
| デストラクタ呼び出しは行わない
void | deallocate (link *n)
| デストラクタ呼び出しは行わない
bool | full () const
size_type | rest () const
| 空きノード数取得
## Protected メソッド
| abstruct_list_node_pool ()
virtual node * | getTop ()=0
void | init ()
## Private 変数
link | free_

## 説明

### template<typename Value>
class gslib::static_container::abstruct_list_node_pool< Value >

サブクラスはコンストラクタで init() を呼ばなければならない。

list_node_pool.h の 69 行で定義されています。

## 型定義

template<typename Value>
typedef list_link gslib::static_container::abstruct_list_node_pool< Value >::link

| list_node_pool.h の 71 行で定義されています。 参照元 gslib::static_container::abstruct_list_node_pool< Value >::deallocate(), と gslib::static_container::abstruct_list_node_pool< Value >::rest().

template<typename Value>
typedef list_node< Value > gslib::static_container::abstruct_list_node_pool< Value >::node

| list_node_pool.h の 72 行で定義されています。 参照元 gslib::static_container::abstruct_list_node_pool< Value >::allocate(), と gslib::static_container::abstruct_list_node_pool< Value >::init().

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

template<typename Value>
gslib::static_container::abstruct_list_node_pool< Value >::abstruct_list_node_pool | ( |  | ) | `[inline, protected]`

| list_node_pool.h の 78 行で定義されています。
    00078                                       {
    00079             }

## 関数

template<typename Value>
node* gslib::static_container::abstruct_list_node_pool< Value >::allocate | ( |  | ) | `[inline]`

| メモリ領域の貸与のみ。value のコンストラクタ呼び出しは、ユーザーの責任。 list_node_pool.h の 98 行で定義されています。 参照先 gslib::static_container::abstruct_list_node_pool< Value >::free_, gslib::static_container::list_link::isolate(), gslib::static_container::list_link::next, と gslib::static_container::abstruct_list_node_pool< Value >::node.
    00098                              {
    00099                 if ( free_.next != &free_ ) {
    00100                     node* result = static_cast< node* >( free_.next );
    00101                     result->isolate();
    00102                     return result;
    00103                 } else {
    00104                     return 0;
    00105                 }
    00106             }

関数の呼び出しグラフ:

template<typename Value>
void gslib::static_container::abstruct_list_node_pool< Value >::deallocate | ( | link * | n | ) | `[inline]`

| デストラクタ呼び出しは行わない list_node_pool.h の 133 行で定義されています。 参照先 gslib::static_container::abstruct_list_node_pool< Value >::deallocate(), gslib::static_container::abstruct_list_node_pool< Value >::link, と gslib::static_container::list_link::next.
    00133                                           {
    00134                 deallocate( n, n->next );
    00135             }

関数の呼び出しグラフ:

template<typename Value>
void gslib::static_container::abstruct_list_node_pool< Value >::deallocate | ( | link * | first,
|  | link * | last
| ) | `[inline]`

| デストラクタ呼び出しは行わない list_node_pool.h の 112 行で定義されています。 参照先 gslib::static_container::abstruct_list_node_pool< Value >::free_, gslib::static_container::abstruct_list_node_pool< Value >::link, gslib::static_container::list_link::next, と gslib::static_container::list_link::prev. 参照元 gslib::static_container::abstruct_list_node_pool< Value >::deallocate().
    00112                                                           {
    00113                 if ( first == last ) {
    00114                     return;
    00115                 }
    00116
    00117                 //  「first の直前」と「last」を接続
    00118                 first->prev->next = last;
    00119                 link* lastPrev = last->prev;
    00120                 last->prev = first->prev;
    00121
    00122                 //  [ first, lastPrev ] を free_ の終端に接続
    00123                 first->prev = free_.prev;
    00124                 free_.prev->next = first;
    00125                 free_.prev = lastPrev;
    00126                 lastPrev->next = &free_;
    00127             }

template<typename Value>
bool gslib::static_container::abstruct_list_node_pool< Value >::full | ( |  | ) | const`[inline]`

  | 戻り値:
  true | これ以上挿入不能
  false | 挿入可能
list_node_pool.h の 142 行で定義されています。 参照先 gslib::static_container::abstruct_list_node_pool< Value >::free_, と gslib::static_container::list_link::next.
    00142                               {
    00143                 return free_.next == &free_;
    00144             }

template<typename Value>
virtual node* gslib::static_container::abstruct_list_node_pool< Value >::getTop | ( |  | ) | `[protected, pure virtual]`

| gslib::static_container::list_node_pool< Value, Size >を実装しています. 参照元 gslib::static_container::abstruct_list_node_pool< Value >::init().

template<typename Value>
void gslib::static_container::abstruct_list_node_pool< Value >::init | ( |  | ) | `[inline, protected]`

| list_node_pool.h の 82 行で定義されています。 参照先 gslib::static_container::abstruct_list_node_pool< Value >::free_, gslib::static_container::abstruct_list_node_pool< Value >::getTop(), gslib::static_container::list_link::next, gslib::static_container::abstruct_list_node_pool< Value >::node, gslib::static_container::list_link::prev, と gslib::static_container::abstruct_list_node_pool< Value >::size(). 参照元 gslib::static_container::list_node_pool< Value, Size >::list_node_pool().
    00082                            {
    00083                 //  すべての要素を free_ に追加
    00084                 node* top = getTop();
    00085                 free_.next = top;
    00086                 free_.prev = top + size() - 1;
    00087                 top->prev = &free_;
    00088                 free_.prev->next = &free_;
    00089                 for ( size_type i = 1; i < size(); ++i ) {
    00090                     top[ i - 1 ].next = &top[ i ];
    00091                     top[ i ].prev = &top[ i - 1 ];
    00092                 }
    00093             }

関数の呼び出しグラフ:

template<typename Value>
size_type gslib::static_container::abstruct_list_node_pool< Value >::rest | ( |  | ) | const`[inline]`

| 空きノード数取得 list_node_pool.h の 147 行で定義されています。 参照先 gslib::static_container::abstruct_list_node_pool< Value >::free_, gslib::static_container::abstruct_list_node_pool< Value >::link, と gslib::static_container::list_link::next.
    00147                                    {
    00148                 link* n = free_.next;
    00149                 size_type result = 0;
    00150                 while ( &free_ != n ) {
    00151                     n = n->next;
    00152                     ++result;
    00153                 }
    00154                 return result;
    00155             }

template<typename Value>
virtual size_type gslib::static_container::abstruct_list_node_pool< Value >::size | ( |  | ) | const`[pure virtual]`

| gslib::static_container::list_node_pool< Value, Size >を実装しています. 参照元 gslib::static_container::abstruct_list_node_pool< Value >::init().

## 変数

template<typename Value>
link gslib::static_container::abstruct_list_node_pool< Value >::free_`[private]`

| list_node_pool.h の 75 行で定義されています。 参照元 gslib::static_container::abstruct_list_node_pool< Value >::allocate(), gslib::static_container::abstruct_list_node_pool< Value >::deallocate(), gslib::static_container::abstruct_list_node_pool< Value >::full(), gslib::static_container::abstruct_list_node_pool< Value >::init(), と gslib::static_container::abstruct_list_node_pool< Value >::rest().

このクラスの説明は次のファイルから生成されました:

- list_node_pool.h