package com_maroontress_libcgi_db

class Tree

#define com_maroontress_libcgi_db_Tree_IMPORT
#include <com/maroontress/libcgi/db/Tree.h>
バイナリツリーのデータベースです。

ツリーはキーとなる文字列とそのキーに対応するボックスから構成されます。ボックスはキーを指定して取得、消去することができます。また、キーはその文字列の辞書順で順序付けられ、ツリーのボックスはそれぞれのキーの順序でソートされています。そのため、キーの順番でボックスをスキャンすることができます。

ボックスを追加、変更するには、ツリーからボックスキットを生成します。ボックスキットを編集し、クローズすることで、ツリーを変更することができます。

ツリーはエラーが発生するとオンになるエラーインディケータをもちます。エラーインディケータの状態はTree_hasError()で取得できます。一度オンになったエラーインディケータはTree_clearError()を呼ぶまでオフになりません。


Struct Summary

struct Tree
          ツリーの実体となる構造体です。

struct Tree_Mode
          ツリーを生成する際に指定するモードを表す構造体です。

Method Summary

 struct Tree * Tree_create(const char * path, const struct Tree_Modemode)
          ツリーを生成します。
 void Tree_free(struct Treetree)
          ツリーを解放します。
 struct BoxKit * Tree_getBoxKit(struct Treetree, const char * key)
          ツリーを変更するためのボックスキットを生成します。
 int Tree_delete(struct Treetree, const char * key)
          ツリーからボックスを消去します。
 struct Box * Tree_scanFirstBox(struct Treetree)
          ツリーの最初のボックスをスキャンします。
 struct Box * Tree_scanNextBox(struct Treetree)
          ツリーの次のボックスをスキャンします。
 struct Box * Tree_scanLastBox(struct Treetree)
          ツリーの最後のボックスをスキャンします。
 struct Box * Tree_scanPreviousBox(struct Treetree)
          ツリーの前のボックスをスキャンします。
 struct Box * Tree_scanBox(struct Treetree, const char * key)
          キーを指定してボックスをスキャンします。
 struct Box * Tree_getBox(struct Treetree, const char * key)
          キーを指定してボックスを取得します。
 int Tree_put(struct Treetree, const char * key, const void * data, size_t size)
          シリアライズされたデータをコミットします。
 int Tree_hasError(struct Treetree)
          ツリーのエラーインディケータの状態を取得します。
 void Tree_clearError(struct Treetree)
          ツリーのエラーインディケータの状態をクリアします。

Global Variable Summary

 const struct Tree_Mode *const Tree_MODE_READONLY
          共有ロック(リーダロック)のモードです。
 const struct Tree_Mode *const Tree_MODE_SHARED
          共有ロック(リーダロック)のモードです。
 const struct Tree_Mode *const Tree_MODE_EXCLUSIVE
          排他ロック(ライタロック)のモードです。

Struct Detail

struct Tree

ツリーの実体となる構造体です。

型の詳細は隠蔽されています。


struct Tree_Mode

ツリーを生成する際に指定するモードを表す構造体です。

型の詳細は隠蔽されています。


Method Detail

Tree_create

struct Tree * Tree_create( const char * path,
const struct Tree_Modemode)
ツリーを生成します。

pathのデータベースファイルからツリーを生成します。データベースファイルは生成したインスタンスを解放するまで、modeに応じた方式でロックされます。

modeTree_MODE_READONLYまたはTree_MODE_SHAREDのときは読み出し専用のツリーを生成します。このモードではデータベースファイルに共有ロックを適用するので、ツリーを解放するまでデータベースファイルの内容は不変です。Tree_delete()と、Tree_getBoxKit()で取得したBoxKitインスタンスのBoxKit_close()は必ず失敗します。

modeTree_MODE_EXCLUSIVEのときは読み書き可能なツリーを生成します。このモードではデータベースファイルに排他ロックを適用するので、ツリーを解放するまでデータベースファイルを排他的に使用できます。

pathが存在しない場合、modeTree_MODE_READONLYならばNULLを返します。modeTree_MODE_SHAREDまたはTree_MODE_EXCLUSIVEならばファイルを生成します。

戻り値が参照するオブジェクトはTree_free()で解放しなければなりません。

ツリーを生成できなかった場合はNULLを返します。

Parameters:
path - データベースファイルのパス
mode - Tree_MODE_READONLYTree_MODE_SHAREDTree_MODE_EXCLUSIVEのいずれか
Returns:
ツリー、またはNULL

Tree_free

void Tree_free( struct Treetree)
ツリーを解放します。

データベースファイルのロックを解除します。

treeNULLのときはなにもしません。呼び出し後はtreeが参照するオブジェクトを参照してはなりません。

Parameters:
tree - ツリー

Tree_getBoxKit

struct BoxKit * Tree_getBoxKit( struct Treetree,
const char * key)
ツリーを変更するためのボックスキットを生成します。

指定されたキーに対応するボックスキットを生成します。既に同じキーのボックスがツリーに含まれる場合は、そのボックスの内容をボックスキットにコピーします。

戻り値が参照するオブジェクトはBoxKit_purge()またはBoxKit_close()で解放しなければなりません。また、生成したボックスキットを解放するまで、treeを操作してはなりません。

ボックスキットを生成できなかった場合はNULLを返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
key - キーとなる文字列
Returns:
ボックスキット、またはNULL

Tree_delete

int Tree_delete( struct Treetree,
const char * key)
ツリーからボックスを消去します。

指定されたキーに対応するボックスを消去します。

Tree_MODE_READONLYまたはTree_MODE_SHAREDで生成したツリーの場合は常に−1を返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
key - キーとなる文字列
Returns:
成功した場合は0、キーに対応するボックスが存在しない場合は1、エラーの場合は−1

Tree_scanFirstBox

struct Box * Tree_scanFirstBox( struct Treetree)
ツリーの最初のボックスをスキャンします。

戻り値が参照するオブジェクトは、ツリーを解放するか、再度ツリーからボックスを取得またはスキャンするまで有効です。戻り値が参照するオブジェクトを解放してはなりません。

ボックスが存在しないか、エラーの場合はNULLを返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
Returns:
ボックス、またはNULL

Tree_scanNextBox

struct Box * Tree_scanNextBox( struct Treetree)
ツリーの次のボックスをスキャンします。

前回スキャンしたボックスの次のボックスをスキャンします。以前にツリーをスキャンしていない場合は、Tree_scanFirstBox()と同じ結果を返します。

戻り値が参照するオブジェクトは、ツリーを解放するか、再度ツリーからボックスを取得またはスキャンするまで有効です。戻り値が参照するオブジェクトを解放してはなりません。

前回スキャンしたボックスがツリーの最後のボックスだった場合、またはエラーの場合はNULLを返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
Returns:
ボックス、またはNULL

Tree_scanLastBox

struct Box * Tree_scanLastBox( struct Treetree)
ツリーの最後のボックスをスキャンします。

戻り値が参照するオブジェクトは、ツリーを解放するか、再度ツリーからボックスを取得またはスキャンするまで有効です。戻り値が参照するオブジェクトを解放してはなりません。

ボックスが存在しないか、エラーの場合はNULLを返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
Returns:
ボックス、またはNULL

Tree_scanPreviousBox

struct Box * Tree_scanPreviousBox( struct Treetree)
ツリーの前のボックスをスキャンします。

前回スキャンしたボックスの前のボックスをスキャンします。以前にツリーをスキャンしていない場合は、Tree_scanLastBox()と同じ結果を返します。

戻り値が参照するオブジェクトは、ツリーを解放するか、再度ツリーからボックスを取得またはスキャンするまで有効です。戻り値が参照するオブジェクトを解放してはなりません。

前回スキャンしたボックスがツリーの最初のボックスだった場合、またはエラーの場合はNULLを返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
Returns:
ボックス、またはNULL

Tree_scanBox

struct Box * Tree_scanBox( struct Treetree,
const char * key)
キーを指定してボックスをスキャンします。

keyに対応するボックスが存在する場合、そのボックスを返します。そうでなければ、辞書順にkeyよりも大きく、最も小さいキーのボックスを返します。

戻り値が参照するオブジェクトは、ツリーを解放するか、再度ツリーからボックスを取得またはスキャンするまで有効です。戻り値が参照するオブジェクトを解放してはなりません。

keyよりも大きいキーのボックスが存在しないか、エラーの場合はNULLを返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
key - キーとなる文字列
Returns:
ボックス、またはNULL

Tree_getBox

struct Box * Tree_getBox( struct Treetree,
const char * key)
キーを指定してボックスを取得します。

keyに対応するボックスを返します。

戻り値が参照するオブジェクトは、ツリーを解放するか、再度ツリーからボックスを取得またはスキャンするまで有効です。戻り値が参照するオブジェクトを解放してはなりません。

keyに対応するボックスが存在しないか、エラーの場合はNULLを返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
key - キーとなる文字列
Returns:
ボックス、またはNULL

Tree_put

int Tree_put( struct Treetree,
const char * key,
const void * data,
size_t size)
シリアライズされたデータをコミットします。

このメソッドは実装上の都合で公開されているので、アプリケーションは呼び出さないでください。

keyをキーとして、シリアライズされたデータをツリーにコミットします。

Tree_MODE_READONLYまたはTree_MODE_SHAREDで生成したツリーの場合は常に−1を返します。

エラーの場合はエラーインディケータを設定します。

Parameters:
tree - ツリー
key - キーとなる文字列
data - シリアライズされたデータ
size - dataのサイズ
Returns:
成功した場合は0、そうでなければ−1

Tree_hasError

int Tree_hasError( struct Treetree)
ツリーのエラーインディケータの状態を取得します。

エラーが発生していた場合は非0を、そうでなければ0を返します。

Parameters:
tree - ツリー
Returns:
エラーが発生していた場合は非0、そうでなければ0

Tree_clearError

void Tree_clearError( struct Treetree)
ツリーのエラーインディケータの状態をクリアします。
Parameters:
tree - ツリー

Global Variable Detail

Tree_MODE_READONLY

const struct Tree_Mode *const Tree_MODE_READONLY
共有ロック(リーダロック)のモードです。

Tree_create()の際にファイルが存在しない場合は失敗します。


Tree_MODE_SHARED

const struct Tree_Mode *const Tree_MODE_SHARED
共有ロック(リーダロック)のモードです。

Tree_create()の際にファイルが存在しない場合はファイルを生成します。


Tree_MODE_EXCLUSIVE

const struct Tree_Mode *const Tree_MODE_EXCLUSIVE
排他ロック(ライタロック)のモードです。

Tree_create()の際にファイルが存在しない場合はファイルを生成します。