MTemplate

バイナリテンプレート読み込み

バイナリテンプレートを読み込むプログラムを書いてみた。 できるのはプレーンテキストの読み込みと変数の置き換えのみ。 perlから読み出せるようにもなっていないし、 ハッシュでテンプレートの変数を渡すようにもなっていない。 #include <stdio.h> #include <stdlib.h> #incl</stdlib.h></stdio.h>…

バイナリ化

パースされたものは次にバイナリ化するのだが、その前にも少し操作がある。 オフセットの計算 パースされたものは各々下記のようにオフセット計算される。 # $raPartsにパースされた結果の配列の参照が格納されている my $ofs = 0; for my $raPart (@{$raPar…

コンパイル、パース部分3

if文のところをもう少し詳しく見るために、下記のテンプレートをパースさせてみる。 $ if (message1 && message2) { $ uhouho1 $} elsif (message1 || message2) { $ uhouho2 $} else { $ uhouho3 $ } $ パース結果がこんな感じ。 $VAR1 = { 'cond' => 'mess…

コンパイル、パース部分

MTemplate.xsのバイナリテンプレート読み込み部分を読んでいく前に、コンパイラの方を調べてみる。 MobaSiFでは、HTMLテンプレートをコンパイルしてバイナリ形式にする。このバイナリ形式のテンプレートを、プロセス間でmmapを用いてメモリを共有しながら参…

template_insert()

perlからは「template_insert()」が呼び出される。MTemplate.xsでは、 SV* template_insert(char* file, SV* rHash, SV* rHash2, SV* rHash3);と定義されている。第一引数はテンプレートファイルのパス。第二〜第四引数がテンプレートの引数。この関数では、…

MTemplateのこと

「$MOBA_HOME/src/xs/MTemplate」にあるMTemplate.xsを読んでみた。ソースの頭は、XSとmmapと標準ヘッダファイルのインクルード。 #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include <sys/mman.h> #include <stdlib.h> 次に定数を定義。 #def</stdlib.h></sys/mman.h>…