LuaJIT-tcc 学習:コールバック処理?(その2)

2017-05-31 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
先日(2017-05-22)の記事「LuaJIT-tcc 学習:これって、コールバック処理?」では、
  ・・・・・
  ・・・・・
  これって、所謂コールバック処理でしょうか?
  まあ、それは置いておいて、
  今回、データの共有が出来るのか?
  確認してみた。
  ・・・・・
  ・・・・・
と書いている。

今回は、
この方式で更に確認して見た。

それは、
GSL(GNU Scientific Library) による乱数生成の処理で、・・・

メインの GSL Shell で初期化を行っておき、
乱数を用いた処理を tcc で行うが、
順次乱数を発生させる処理は、
Cコードから呼び出す、GSL Shell で行う。

序でに、goto に依る、見た目の前方参照も。

作ったのは:
---------- L_C_L_rnd.gsl -----
-- 先ずは、tcc 利用準備2行:
tcc=require'tcc'('libtcc')
TCL=tcc.new(); TCL:set_output_type('output_memory')

-- 以下にCから呼ぶ GSL Shellコード
r_get = || rr:get() -- rr は、global

TCL:add_symbol( 'r_get', r_get, 'double(*)(void)' )
goto CsubComp -- Cコードコンパイル
::MAIN::
C_SUB=TCL:get_symbol( 'C_SUB', 'void(*)(int,int*)' )

-- 以下がメイン処理:
rr=rng.new('mt19937'); rr:set(os.time()) -- rr は、global
T = ffi.new( 'int32_t[10]' )
C_SUB( 10^6, T ) ----- Lua → C → Lua
for i=0,9 do print( T[i] ) end

TCL:delete(); os.exit(0)
----- 以下、Cコード&コンパイル
::CsubComp::
TCL:compile_string[[
double r_get();
void C_SUB( int n, int* T ){
for( int i=0; i double v = r_get(); // これが コールバック?
int k = (int)(v*10);
T[k]++;
}
}
]]; TCL:relocate( 'relocate_auto' )
goto MAIN
これで?

行けた!


本日はここまで。


luajit-tcc 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170423
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク