CMakeLists.txt の後半 Perl 部分を以下のように書き換えます
FIND_PACKAGE (Ruby)
FIND_PACKAGE (SWIG REQUIRED)
INCLUDE (${SWIG_USE_FILE})
SET (CMAKE_SWIG_FLAGS "")
SET_SOURCE_FILES_PROPERTIES (random.i PROPERTIES CPLUSPLUS ON)
SWIG_ADD_MODULE(boost_random ruby random.i random.cpp)
INCLUDE_DIRECTORIES (${RUBY_INCLUDE_PATH} ${INCLUDE_DIRECTORIES})
IF (WIN32)
IF (NOT RUBY_LIBRARY)
SET (RUBY_LIBRARY "c:/program files/ruby-1.8/lib/msvcrt-ruby18.lib")
ENDIF (NOT RUBY_LIBRARY)
ENDIF (WIN32)
IF (RUBY_LIBRARY)
SWIG_LINK_LIBRARIES(boost_random "${RUBY_LIBRARY}")
ENDIF (RUBY_LIBRARY)
続いて runme.rb です。
require 'boost_random'
print "Uniform_mt19937\n";
mt19937 = Boost_random::Uniform_mt19937.new( 32 );
100.times do
print mt19937.get().to_s + ",";
end;
print "\Exp_necuyer1988\n";
ecuyer = Boost_random::Exp_ecuyer1988.new( 3, 4, 2.0 );
100.times do
print ecuyer.get().to_s + ",";
end;
print "\nNormal_lagged_fibonacci2281\n";
fibo = Boost_random::Norm_lagged_fibonacci2281.new( 50.0, 10.0 );
100.times do
print fibo.get().to_s + ",";
end;
print "\nLognormal kreutzer1986\n";
kreu = Boost_random::Log_kreutzer1986.new( 5, 0.5, 2.0 );
100.times do
print kreu.get().to_s + ",";
end;
クラス命名規則が煩いな…と思いました。swig だと、いろんな言語を対象にする訳ですが、中には大文字小文字を区別しない言語やアンダーバーを使えない言語もあるかもしれません。
尚、テストは windows 上の ActiveScriptRuby で行いました。msvc6.0 が必要です。どうしても…という場合は、config.h
#if _MSC_VER != 1200
//#error MSC version unmatch: _MSC_VER: 1200 is expected.
#endif
をすれば動作しますが、ランタイムのアロケータが異なっているために、メモリリークを引き起こしかねないので、やめましょう(ruby の内部構造を知らないので、可能性の話です)。
0 件のコメント:
コメントを投稿