<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>SWIG / Drkcore</title><link>http://blog.kzfmix.com/SWIG</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Wed, 08 Nov 2006 21:31:26 +0919</lastBuildDate><item><title>SWIGのシャドークラス</title><link>http://blog.kzfmix.com/entry/1162989086</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1149817586"&gt;SWIG使ってフラクタル図形&lt;/a&gt;を書いた際にshadowってオプションをつけたのだけどよくわかってなかったのでちゃんと調べた(というか実用Perlプログラミングに書いてあったんだけど)。&lt;/p&gt;
&lt;p&gt;C/C++のオブジェクトのメンバ属性、メンバ関数に対し、perlのハッシュ記法でアクセスできるようにするメカニズムだそうだ。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Shape&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="n"&gt;public:&lt;/span&gt;
    &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;drwaw&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Poligon&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Shape&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="n"&gt;public:&lt;/span&gt;
    &lt;span class="n"&gt;polygon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;とやると&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;Graphics&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$poly&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Polygon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$poly&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nv"&gt;$poly&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;みたいにアクセスできるようにするオプションだそうだ。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4900900826/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51V51T5Z27L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;実用Perlプログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    スリラム スリニバサン&lt;br /&gt;
    オライリー・ジャパン / ?円 ( 1998-11 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Wed, 08 Nov 2006 21:31:26 +0919</pubDate><category>perl</category><category>SWIG</category></item><item><title>初めてのSWIG</title><link>http://blog.kzfmix.com/entry/1149817586</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1149690771"&gt;openbabelのperlラッパー&lt;/a&gt;に触発されたので、&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4900900826/ref=nosim/kaerutyuuihou-22"&gt;実用Perlプログラミングの初版&lt;/a&gt;を片手に。SWIGを使って、マンデルブロ集合を描いてみた。&lt;/p&gt;
&lt;p&gt;&lt;img alt="mandelbrot" src="http://www.kzfmix.com/images/blosxom/mandel.png" /&gt;&lt;/p&gt;
&lt;p&gt;思ってたよりも、楽だ。まず、本の18章の
&lt;a href="/tools/mandel.c"&gt;mandel.c&lt;/a&gt;と&lt;a href="/tools/mandel.h"&gt;mandel.h&lt;/a&gt;を用意する。本だとgifに出力してあったが、FC1のgd-2.0.15.1ではできなかったのでpngで出力するようになってる。&lt;/p&gt;
&lt;p&gt;続いて、SWIGインターフェースのFractal.i&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;
%module Fractal
%{
#include "mandel.h"
%}
%include mandel.h
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;を用意したら、swigコマンドを実行。本だとperl5を引数にとってたけど、ネット調べたらperlでいけそうだし、-shadowオプション付けてるのが多いので、よくわからんけど付けてみた(これは後でちゃんと調べる)。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;$ swig -shadow -perl Fractal.i
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;あとはMakeFile.PL書いて、普通にmakeでOK&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;use ExtUtils::MakeMaker;
WriteMakefile(
              'NAME' =&gt; 'Fractal',
              'LIBS' =&gt; ['-L/home/kzfm/perltest/swigtest -lgd'],
              'INC'  =&gt; '-I/home/kzfm/perltest/swigtest',
              'OBJECT' =&gt; 'mandel.o Fractal_wrap.o'
              );
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Perlで呼び出す&lt;/h2&gt;
&lt;p&gt;普通にモジュールを呼び出すだけですな。&lt;/p&gt;
&lt;blockquote class="terminal"&gt;
&lt;code&gt;&lt;pre&gt;use Fractal;
Fractal::draw_mandel('mandel.png', 300, 300,
                     -1.5, 1.0,
                     2.0, 20);
&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;で、絵の出来上がり!&lt;/p&gt;
&lt;p&gt;実用Perlプログラミングは初版、第二版ともにもっているけど、型グロブとかクロージャとかXS,SWIGなんかは初版の方が詳しく書いてあるので、僕は今でも重宝するヨ。というか最近わかってきたっぽくて読むのが楽しい。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4900900826/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51V51T5Z27L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;実用Perlプログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    スリラム スリニバサン&lt;br /&gt;
    オライリー・ジャパン / ?円 ( 1998-11 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Fri, 09 Jun 2006 10:46:26 +0919</pubDate><category>SWIG</category></item></channel></rss>