posix::user_context_impl

coroutineのコードを整理しつつ、POSIXのucontextを使った実装も追加しました。
<hamigaki/coroutine/detail/posix_user_context.hpp>
スタック用のメモリはHamigaki.Detailのvirtual_memoryを使っています。
Hamigaki.Detailはヘッダファイルからインクルードしないはずでしたが、早くも破綻です。


ucontextはfiberと違って、ucontext_t::uc_linkでそのコンテキストが終了したあとにスイッチすべきコンテキストを指定できます。
これがNULLだとスレッドが終了します。(つまりfiberの動作と同じ)
この機能を使うとスタックが足りなくなったときに、別のコンテキストを用意し、uc_linkで繋ぐことで、擬似的にスタックを伸ばすことができます。(たぶん)
これはこれで面白いのですが、コンテキストを超えて例外を伝播するのは無理でしょうね。
uc_linkは常にNULLにしています。


Regression Testsも更新です。Linuxのcoroutineはucontextを使っています。
http://hamigaki.sourceforge.jp/status/
今回からBorland 5.82のサポートはやめました。