2014年8月12日火曜日

アトミック操作

オープンソースであるandroidのフレームワークのソースコードにはたくさんの便利なライブラリがあります。実装もコンパクトかつ高速かつエレガントで実力の違いを見せ付けてくれます。

でも、漫画のおぼっちゃま君の家には五円玉がないように、GoogleにはWindowsマシンがないため、この便利なライブラリが一部Windowsでは動かないのです。

僕、普段macを使っていますが、開発はwindowsで行うのが大好きなので、androidのatomic操作関数をwindowsのVisualStudioやFreeBSDで動くようにしてみました。

なぜ、atomic操作関数が必要かというと、同じくandroidのフレームワークにあるc++のスマートポインタをいろいろなOSで使いたいからです。

オープンソースでいろいろなスマートポインタが公開されていますが、androidフレームワークのスマートポインタは強参照と弱参照両方使え、コンパクトで直感的な操作ができてとても便利。

さらにスマートポインタのスレッドクラスなんかもあり、これを使えば、C++でObjective-Cとほぼ同じように自動的にオブジェクトを開放してくれるマルチスレッドプログラミングが可能になります。

atomic操作関数さえ修正すればwindows,Linux,Cygwin,mac,iphone,androidなどいろいろなOSで動くアプリを作ることも可能になります。とくにiphone,androidで同じコードで動くのがうれしいです。


スマートポインタは以下のような感じで使用します。


class A:public android::RefBase
{
public:
A(){}
virtual ~A(){}
};

int main()
{
android::sp<A> a=new A();
return 0;
}


スレッドは以下のような感じで使用します。



class MyThread :public android::Thread
{
public:
MyThread(){}
virtual ~MyThread(){}

virtual bool threadLoop();
};


bool MyThread::threadLoop()
{
printf("test start\n");
return false;
}

int main()
{
android::sp<MyThread> t;
t=new MyThread();
t->run();
t->join();

return 0;
}


ソースはこちら
https://drive.google.com/file/d/0B5M9qMMg3tfQRDBpRGZJR0Utak0/edit?usp=sharing