eoml0002
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* Essen Object Management Library #0002
-(by [[K]], 2017.02.20)
** レイヤ構造
-Essen:言語レイヤ
--EOMLの範囲外
-ObjSys(OS) : オブジェクトの管理をするレイヤ
--階層構造など
-ValSys(VS) : 値の管理をするレイヤ
--可変長なデータを扱いやすくする&メモリ管理&重複管理
** 基本型
-通常データ:
--intとかdoubleとか文字列型とか、まあなんでも。
--サイズが規定できればよい。型のタイプも記述する。
--可変長でもあってもいい。
-メタデータ:
--通常データと似た扱いを受けるが、多少の追加サポートがあ...
--(dir) (memberTable) (namelessDir)
** ValSys
typedef struct Val_ {
unsigned int linkCount; // プライベートの時は常に1
unsigned int hash;
unsigned int flags;
unsigned int siz, siz1; // siz1まではとりあえずメモ...
unsigned int mini[4];
struct Val_ *typ;
struct Val_ *link[2]; // 内部管理用であって、ObjSys...
void *p;
} Val;
-flags:
--VS_F_PUB : パブリック
--VS_F_MAL : pはmallocで確保した領域を指している(=解放...
--VS_F_VHS : hashの値はvalidである
--VS_F_EXT : pは外部のメモリ域を指している(ValSysは寿命...
--VS_F_RDO : リードオンリー属性
-データの状態にはpriとpubがある。プライベートとパブリック。
--プライベートの時は、データを共有しないので値を直接書き...
--パブリックの時は書き換えてはいけない。書き換えたければ...
--プライベートだったデータをパブリックに切り替えるとき、V...
** ObjSys
typedef struct Obj_ {
Val *val;
Val *parent;
unsigned int flags;
unsigned int sign; // シグネチャ これがあるから消さ...
unsigned int linkCount; // 自分の子がこのObjを指して...
unsigend int psign; // parentのsign
} Obj;
-flags:
--OS_F_DTY : データは改変された(これは必要だろうか?)
-Valはプライべートにするかパブリックにするかでアドレスが...
--変数名を変更しても、変数のパスを変更しても(変数を別の...
-ルート以外のObjは一つの親を必ず持つ。
-リンクカウントが0になってもObjを消さないほうが高速だろう...
--Objのメモリを節約する観点では、こまめに消したほうがいい...
** dir
(dir) {
[p(Val:typ)]
[n]
[p(Obj), sign]
[p(Obj), sign]
[p(Obj), sign]
...
}
-それぞれのsignが0のときは、ObjではなくValへのポインタに...
-nはsignが0ではない個数。
--nが0になったら、パブリックにできる
--パブリックにしたら、親に対して「signを0にできますよ」と...
-フラグがtyp側にあるといいかもしれない。
--メンバ名ソート済みフラグ、メンバ名ソート推奨フラグ、メ...
** メモ
-[1] 高速にdirをコピーしたい
--dirのポインタをすべてVal化してコピーすればよさそう(再...
--プライベートが含まれている部分についてはObjのままにして...
-[2] できるだけ高速にdirを比較したい
--Val化しているものに関しては、それより下が完全に同じなの...
終了行:
* Essen Object Management Library #0002
-(by [[K]], 2017.02.20)
** レイヤ構造
-Essen:言語レイヤ
--EOMLの範囲外
-ObjSys(OS) : オブジェクトの管理をするレイヤ
--階層構造など
-ValSys(VS) : 値の管理をするレイヤ
--可変長なデータを扱いやすくする&メモリ管理&重複管理
** 基本型
-通常データ:
--intとかdoubleとか文字列型とか、まあなんでも。
--サイズが規定できればよい。型のタイプも記述する。
--可変長でもあってもいい。
-メタデータ:
--通常データと似た扱いを受けるが、多少の追加サポートがあ...
--(dir) (memberTable) (namelessDir)
** ValSys
typedef struct Val_ {
unsigned int linkCount; // プライベートの時は常に1
unsigned int hash;
unsigned int flags;
unsigned int siz, siz1; // siz1まではとりあえずメモ...
unsigned int mini[4];
struct Val_ *typ;
struct Val_ *link[2]; // 内部管理用であって、ObjSys...
void *p;
} Val;
-flags:
--VS_F_PUB : パブリック
--VS_F_MAL : pはmallocで確保した領域を指している(=解放...
--VS_F_VHS : hashの値はvalidである
--VS_F_EXT : pは外部のメモリ域を指している(ValSysは寿命...
--VS_F_RDO : リードオンリー属性
-データの状態にはpriとpubがある。プライベートとパブリック。
--プライベートの時は、データを共有しないので値を直接書き...
--パブリックの時は書き換えてはいけない。書き換えたければ...
--プライベートだったデータをパブリックに切り替えるとき、V...
** ObjSys
typedef struct Obj_ {
Val *val;
Val *parent;
unsigned int flags;
unsigned int sign; // シグネチャ これがあるから消さ...
unsigned int linkCount; // 自分の子がこのObjを指して...
unsigend int psign; // parentのsign
} Obj;
-flags:
--OS_F_DTY : データは改変された(これは必要だろうか?)
-Valはプライべートにするかパブリックにするかでアドレスが...
--変数名を変更しても、変数のパスを変更しても(変数を別の...
-ルート以外のObjは一つの親を必ず持つ。
-リンクカウントが0になってもObjを消さないほうが高速だろう...
--Objのメモリを節約する観点では、こまめに消したほうがいい...
** dir
(dir) {
[p(Val:typ)]
[n]
[p(Obj), sign]
[p(Obj), sign]
[p(Obj), sign]
...
}
-それぞれのsignが0のときは、ObjではなくValへのポインタに...
-nはsignが0ではない個数。
--nが0になったら、パブリックにできる
--パブリックにしたら、親に対して「signを0にできますよ」と...
-フラグがtyp側にあるといいかもしれない。
--メンバ名ソート済みフラグ、メンバ名ソート推奨フラグ、メ...
** メモ
-[1] 高速にdirをコピーしたい
--dirのポインタをすべてVal化してコピーすればよさそう(再...
--プライベートが含まれている部分についてはObjのままにして...
-[2] できるだけ高速にdirを比較したい
--Val化しているものに関しては、それより下が完全に同じなの...
ページ名: