# クラス fk_TreeData

木構造用ノードデータクラス [詳細]

fk_TreeDataのコラボレーション図
[凡例]

すべてのメンバ一覧

## Public メソッド
| fk_TreeData (fk_Tree *tree, const std::string name, fk_TreeData *parent)
| コンストラクタ
| ~fk_TreeData ()
| デストラクタ
int | getDepth (void)
| 深さ参照関数
int | getMaxDepth (void)
| 枝深さ参照関数
fk_TreeData * | getChild (fk_TreeData *node)
| 子ノード逐次参照関数
fk_TreeData * | getParent (void)
| 親ノード参照関数
fk_TreeData * | getNext (void)
| 後ノード参照関数
fk_TreeData * | getPrev (void)
| 前ノード参照関数
int | getOrder (void)
| 順位参照関数
int | getChildrenSize (void)
| 子ノード個数参照関数
std::string | getName (void)
| 名称参照関数
void | setObject (fk_TreeBaseObject *object, bool deleteFlg=true)
| ユーザデータ設定関数
fk_TreeBaseObject * | getObject (void)
| ユーザデータ参照関数

## 説明

木構造用ノードデータクラス

このクラスは、木構造を用いたデータベースにおける、 ノードデータに必要な機能を提供します。

本クラスは、FK の機能を利用するためのものではなく、 ユーザが木構造を利用する際に便利なユーティリティクラスです。 本クラスおよび fk_Tree, fk_TreeBaseObject の各クラスを用いて利用します。 本クラスの解説に使用される用語については、 fk_Tree クラスの概要を参照して下さい。

各クラスの役割ですが、 fk_Tree クラスは木構造全体のデータベースとなります。 fk_TreeData は各ノードのデータを意味します。 fk_TreeBaseObject は、 fk_TreeData に対してユーザ定義のデータを付加するための基底クラスとなります。 基本的には、ノードの生成、移動、消去といった操作は fk_Tree で、 ノード自体の設定は fk_TreeData のメンバ関数で行うことになります。

本クラスのインスタンスは、基本的にはユーザが自前で生成するものではなく、 fk_Tree の各種ノード生成関数によって自動的に生成されるものです。 唯一の例外は fk_Tree クラスの派生クラスを作成し、 そこで fk_Tree::makeNewData() を再定義する場合となります。

参照:
  fk_Tree, fk_TreeBaseObject

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

fk_TreeData::fk_TreeData | ( | fk_Tree * | tree,
|  | const std::string | name,
|  | fk_TreeData * | parent |
| ) |  |  |

コンストラクタ

fk_Tree::makeNewData() を再定義する際に、 インスタンスを自前で生成する際に利用します。

引数:

  `[in]` | tree | 新ノードが属する fk_Tree インスタンス
  `[in]` | name | 新ノードに指定されている名称
  `[in]` | parent | 新ノードの親となるノードのインスタンス

参照:
  fk_Tree:makeNewData()

fk_TreeData::~fk_TreeData | ( |  | ) |

デストラクタ

## 関数

int fk_TreeData::getDepth | ( | void |  | ) |

深さ参照関数

このノードの深さを取得します。

戻り値:
  深さ値

参照:
  getMaxDepth()

int fk_TreeData::getMaxDepth | ( | void |  | ) |

枝深さ参照関数

このノードを頂点とする枝の中で、最大の深さを取得します。 根ノードでこの関数を呼んだ場合は、全体の深さの最大値を返すことになります。

戻り値:
  枝中の最大深さ値

参照:
  getDepth()

fk_TreeData* fk_TreeData::getChild | ( | fk_TreeData * | node | ) |

子ノード逐次参照関数

このノードの子ノードを逐次的に参照します。 引数に代入したノードインスタンスによる、以下のような動作を行います。

- 引数に NULL を入力した場合、最も前にある子ノードを返します。 (子ノードが存在しなかった場合は、NULL を返します。)
- その後、子ノードのインスタンスを入力すると、 その1つ後の子ノードを返します。
- 最下位のノードを入力した場合は、NULL を返します。
- 子ノードでないインスタンスを入力した場合は、NULL を返します。

以下のコードは、子ノードを順番に参照するものです。

        fk_TreeData     *parent, *child;

        for(child = parent->getChild(NULL);
            child != NULL;
            child = parent->getChild(child)) {
            // child に子ノードが順番に入ります。
        }

引数:

  `[in]` | node | 逐次参照対象ノードインスタンス

戻り値:
  引数の次の順位の子ノードインスタンスを返します。 該当するノードが存在しない場合は NULL を返します。

参照:
  getParent(), getPrev(), getNext(), getChildrenSize()

fk_TreeData* fk_TreeData::getParent | ( | void |  | ) |

親ノード参照関数

このノードの親ノードインスタンスを返します。 もし根ノードにおいてこの関数を呼んだ場合は、NULL を返します。

戻り値:
  親ノードインスタンス

参照:
  getChild(), getChildrenSize()

fk_TreeData* fk_TreeData::getNext | ( | void |  | ) |

後ノード参照関数

このノードを構成する兄弟ノードのうち、 順位が1つ後のノードインスタンスを返します。 そのようなノードが存在しない場合は NULL を返します。

戻り値:
  後ノードインスタンス。存在しない場合は NULL を返します。

参照:
  getChild(), getParent(), getPrev(), getOrder(), getChildrenSize()

fk_TreeData* fk_TreeData::getPrev | ( | void |  | ) |

前ノード参照関数

このノードを構成する兄弟ノードのうち、 順位が1つ前のノードインスタンスを返します。 そのようなノードが存在しない場合は NULL を返します。

戻り値:
  前ノードインスタンス。存在しない場合は NULL を返します。

参照:
  getChild(), getParent(), getNext(), getOrder(), getChildrenSize()

int fk_TreeData::getOrder | ( | void |  | ) |

順位参照関数

このノードの順位を参照します。 兄弟ノードが存在しない場合は、常に 1 となります。

戻り値:
  順位

参照:
  getNext(), getPrev(), getChildrenSize()

int fk_TreeData::getChildrenSize | ( | void |  | ) |

子ノード個数参照関数

このノードの子ノードの個数を返します。

戻り値:
  子ノード個数

参照:
  getParent(), getChild(), getOrder()

std::string fk_TreeData::getName | ( | void |  | ) |

名称参照関数

このノードの名称を取得します。

戻り値:
  名称

参照:
  setObject(), getObject()

void fk_TreeData::setObject | ( | fk_TreeBaseObject * | object,
|  | bool | deleteFlg = `true` |
| ) |  |  |

ユーザデータ設定関数

ユーザ定義によるデータをノードに設定します。 ユーザ定義のデータは、 fk_TreeBaseObject クラスを派生したものを作成しておきます。 fk_TreeBaseObject クラスは、 メンバもメンバ関数も定義されていない空のクラスです。

覚え書き:
  ノードに対する操作によってノードの複製が行われた場合、 ポインタのコピーが行われます。 そのような操作が行われる可能性がある場合、 第2引数は false にしておき、 インスタンスの消去は自前で行うべきです。

引数:

  `[in]` | object | ユーザ定義インスタンス
  `[in]` | deleteFlg | true の場合、 ノードの消去とともにユーザ定義インスタンスも消去 (delete) します。 false の場合は、 ノードの消去時にユーザ定義インスタンスの消去 (delete) を行いません。

参照:
  fk_TreeBaseObject, getName(), getObject()

fk_TreeBaseObject* fk_TreeData::getObject | ( | void |  | ) |

ユーザデータ参照関数

setObject() によって設定されていたユーザデータを取得します。 ユーザデータが設定されていなかった場合は NULL を返します。

戻り値:
  ユーザ定義インスタンス

参照:
  fk_TreeBaseObject, setObject(), getName()