Springhead
An open source physics engine for virtual reality, haptics and motion generation.
|
オブジェクトツリーの状態をメモリ上に保存するためのクラス. SaveState(scene) のように呼び出すと,sceneの子孫全体の状態をメモリに保存する. セーブした後,LoadState(scene) を呼び出すと,sceneの状態を保存時の状態に戻す. セーブ後,シーンのオブジェクトの数や構造が変わってしまうと整合性がとれず, メモリを破壊してしまうので注意が必要. [詳細]
#include <SprObject.h>
Public メソッド | |
SPR_IFDEF (ObjectStates) | |
void | AllocateState (ObjectIf *o) |
oとその子孫をセーブするために必要なメモリを確保する. | |
void | ReleaseState (ObjectIf *o) |
状態のメモリを解放する | |
size_t | CalcStateSize (ObjectIf *o) |
状態のサイズを求める | |
void | SaveState (ObjectIf *o) |
状態をセーブする. | |
void | LoadState (ObjectIf *o) |
状態をロードする. | |
void | SingleSave (ObjectIf *o) |
シングルセーブ | |
void | SingleLoad (ObjectIf *o) |
シングルロード | |
bool | IsAllocated () |
アロケート済みかどうか | |
Public メソッド inherited from ObjectIf | |
SPR_IFDEF (Object) | |
ObjectIf * | GetObjectIf () |
const ObjectIf * | GetObjectIf () const |
int | DelRef () const |
void | Print (std::ostream &os) const |
デバッグ用の表示。子オブジェクトを含む。 | |
void | PrintShort (std::ostream &os) const |
デバッグ用の表示。子オブジェクトを含まない。 | |
void | DumpObjectR (std::ostream &os, int level=0) const |
オブジェクトツリーのメモリイメージをダンプ | |
int | AddRef () |
int | RefCount () |
size_t | NChildObject () const |
子オブジェクトの数 | |
ObjectIf * | GetChildObject (size_t pos) |
子オブジェクトの取得 | |
const ObjectIf * | GetChildObject (size_t pos) const |
bool | AddChildObject (ObjectIf *o) |
子オブジェクトの追加.複数のオブジェクトの子オブジェクトとして追加してよい. 例えば,GRFrameはツリーを作るが,全ノードがGRSceneの子でもある. | |
bool | DelChildObject (ObjectIf *o) |
子オブジェクトの削除 | |
void | Clear () |
すべての子オブジェクトの削除と、プロパティのクリア | |
ObjectIf * | CreateObject (const IfInfo *info, const void *desc) |
オブジェクトを作成し,AddChildObject()を呼ぶ. | |
template<class T > | |
ObjectIf * | CreateObject (const T &desc) |
CreateObjectを呼び出すユーティリティ関数 | |
const void * | GetDescAddress () const |
デスクリプタの読み出し(参照版 NULLを返すこともある). これが実装されていなくても,ObjectIf::GetDesc()は実装されていることが多い. | |
bool | GetDesc (void *desc) const |
デスクリプタの読み出し(コピー版 失敗する(falseを返す)こともある). ObjectIf::GetDescAddress() が実装されていなくても,こちらは実装されていることがある. | |
void | SetDesc (const void *desc) |
デスクリプタの設定 | |
size_t | GetDescSize () const |
デスクリプタのサイズ | |
const void * | GetStateAddress () const |
状態の読み出し(参照版 NULLを返すこともある). これが実装されていなくても,ObjectIf::GetState()は実装されていることがある. | |
bool | GetState (void *state) const |
状態の読み出し(コピー版 失敗する(falseを返す)こともある). ObjectIf::GetStateAddress() が実装されていなくても,こちらは実装されていることがある. | |
void | SetState (const void *state) |
状態の設定 | |
bool | WriteStateR (std::ostream &fout) |
状態の書き出し | |
bool | WriteState (std::string fileName) |
bool | ReadStateR (std::istream &fin) |
状態の読み込み | |
bool | ReadState (std::string fileName) |
size_t | GetStateSize () const |
状態のサイズ | |
void | ConstructState (void *m) const |
メモリブロックを状態型に初期化 | |
void | DestructState (void *m) const |
状態型をメモリブロックに戻す | |
Static Public メソッド | |
static ObjectStatesIf *SPR_CDECL | Create () |
ObjectStateオブジェクトを作成する. | |
初めて SaveState(scene) を呼び出すと,まず内部で AllocateState(scene)を呼び出して メモリを確保する.次に確保したメモリにオブジェクトの状態を保存する.
セーブ・ロードに使い終わったときは,ReleaseState(scene)を呼び出してメモリを開放する 必要がある.ReleaseState(scene)は,AllocateState(scene)時とシーンの構造が同じでないと 整合性がとれず,メモリを破壊してしまう.
シーンの構造を変更するときは,一度ReleaseState()を呼び出して,再度セーブしなおす必要がある.