2009-01-01から1年間の記事一覧

Boost.勉強会の資料

アップしておきました。 Boost.Coroutine View more presentations from melpon メモメモ http://blog.think-async.com/2009/08/composed-operations-coroutines-and-code.html http://www.okws.org/doku.php?id=okws:tame http://d.hatena.ne.jp/shinichiro…

Boost.勉強会

12/12 の Boost.勉強会で 30 分ほど Boost.Coroutine について話す予定です。 Boost.勉強会 : ATND 入るかどうか分からないライブラリなのでインターフェース部分の話じゃなくて実装の話をメインにやりたいと思います。 まだ資料作ってる途中ですががが

move semantics に関するメモ(2)

混乱の原因は std::forward()。 std::forward() の実装はいまのところこんな感じになっているらしい。 template <class T, class U, class = typename enable_if< (is_lvalue_reference<T>::value ? is_lvalue_reference<U>::value : true) && is_convertible<typename remove_reference<U>::type*, typename remove_reference<T>::type*>::value >::type> i…</t></typename></u></class>

move semantics に関するメモ

多分間違いもあるので鵜呑み厳禁。 →大量に間違いがあるのでこのエントリは無かったことにしましょう。 左辺値 struct X { }; X x; // x は左辺値 左辺値参照型の左辺値 struct X { } x; X& rx = x; // rx は左辺値参照型の左辺値 左辺値参照型の右辺値 stru…

整数の除算とシフト演算子の仕様

C++

C++ の除算はどうなってるんだろう…後で調べてみよう RT @rane_hs: "割り算の結果はすべて 0 方向に切り捨てる"あとでソースを探した方がいいかも知れない : プログラミング言語 C の新機能 http://seclan.dll.jp/c99d/c99d05.htm http://twitter.com/melpon…

docomo 用の 2 次元描画クラス

docomo でアフィン変換を掛けて描画するためのクラスを作ってみた。 com.nttdocomo.opt.ui.Graphics2 に対応してることが前提で作ってる。 対応してない場合はアルファとか加算合成とか使うのは無理だけど、DoJa-3.5 以降ならアフィン変換掛けて描画するのは…

ダウンロードしながらメモリースティックに書き込む処理を非同期でやってみた

環境は DoJa-5.0。リソースのダウンロードと書き込みを別々でやってたら無駄じゃね?とか思ってやってみた。 ちょっといじればいろいろなことに使えるはず。もう少し汎用化できるなら再利用できるクラスにしてもいいような気はする。 各スレッドでのデータの…

非同期でデータをやりとりする用の有限キューを作ってみた

public final class FiniteBufferQueue { int first; int size; final byte[][] bufs; public FiniteBufferQueue(int size) { bufs = new byte[size][]; } public synchronized void push(byte[] buf) throws InterruptedException { push(buf, 0, buf.lengt…

非同期でやりとりを行うための Future クラスを作ってみた

インターフェースは C++0x で追加されるものを参考にして、実装は Future パターンまんまです。 public final class FutureException extends Exception { private Exception inner; FutureException(Exception inner) { this.inner = inner; } FutureExcept…

Java で Boost.Coroutine 的なクラスを作ってみた

以前に BREW で Boost.Coroutine を使えるようにした関係で、それを Java に移植するのが難しくなってしまったので、Java で Coroutine っぽく使えるようなクラスを作ってみました。 当然スタック切り替えなんてできるわけが無いので、内部的にはスレッドを…

Coroutine を FSM コードへ変換したい

C++

この辺ひどいよね! id:melponがコンパイルタイムCoroutineを作ったので近々公開予定だとか! id:DigitalGhostさんがあらわれた - Faith and Brave - C++で遊ぼう melponさんは、「俺、コンパイル時Coroutine書いたあるぜ」と豪語した 本の虫: 旅日記 めるぽ…

Boost 1.40.0 の function

Boost 1.40.0 で Boost.Function が更新されました。 更新内容を見てみると、 Optimize the use of small target objects. Make Boost.Function compile under BOOST_NO_EXCEPTIONS (#2499, #2494, #2469, #2466, #2900) Various minor fixes (#2642, #2847,…

Boost.Variant の assign の処理

かなり面白かったので書いてみます。 代入する型が一致する場合 まずは小手調べ。簡単に代入できる場合までの処理。 Boost 1.40.0 では以下の実装になっています。 void variant_assign(const variant& rhs) { if (which_ == rhs.which_) { detail::variant:…

アルファ付きピクセルからアルファ付きピクセルへの転送

ってどうなるんだろうと思って計算してみました。 オレオレ記法 と書いた場合、 の左は転送元、右は転送先です。 括弧内の各要素はアルファ値、赤の要素、緑の要素、青の要素という順番で並んでいて、それらは [0...1] の実数です。 また、今回の計算におい…

名前付きの値

C++

例えば何かの種類を表すときの表現として、int だと何を意味しているのか分からないので typedef int hoge_t; とか書いたりすることはあると思うんだけど、これだと void foo(int v); hoge_t h; foo(h); // OK とかできてしまうのがなんか微妙なので、こんな…

ミリ秒単位で現在時刻を取得する関数

BREW にはいくつかの時間を取得するための関数があります。 GETTIMESECONDS() は 1980年1月6日00:00:00 からの秒数を返します。 GETTIMEMS() は 00:00:00 からの時間を取得します。 この2つの関数を組み合わせれば、1980年1月6日00:00:00からの経過時間をミ…

固定小数点数クラスのデバッグ

以前作った固定小数点数クラスですが、これを使ったプログラムを VisualStudio のデバッグ実行で値を見ようとすると、以下のように表示されます。 この数字は内部の変数が保持している数字なのですが、これは 65536 倍された値なので表現している値は 65536 …

2次元アフィン変換の高速転送(3)

2次元アフィン変換の高速転送(1) 2次元アフィン変換の高速転送(2) 穴あきの問題は解決したので、次は速度が遅いという問題について考えてみます。 前回のプログラム 前回のコードは // 逆行列を求める matrix inv(mat); inv.invert(); for (int y = lt.y; y …

2次元アフィン変換の高速転送(2)

2次元アフィン変換の高速転送(1) 前回でアフィン変換を行うための行列クラスを作ったので、今回は実際に転送を行ってみようと思います。 オレオレ用語 転送元と転送先と書くと、パッと見分かりづらいので、それぞれ src, dst と書くことにします。 とりあえ…

2次元アフィン変換の高速転送(1)

最近、BREW でアフィン変換を掛けながら転送する処理を書きました。 2,3回ぐらいに分けてそれを書いていきたいと思います。 固定小数点数 基本的に計算は全部固定小数で行っています。固定小数点数クラス fixed は以前書きました。 固定小数点数クラス - mel…

Boost.Coroutine を組み込み環境向けに移植してみた

ある程度動いてる感じがするので公開してみます。 BREW で人柱になってくれる方を募集中です。 ソースとか いつもの場所に置いときました。 http://melpon.tank.jp/pukiwiki147/index.php?cmd=read&page=Memo%2F%CA%AA%C3%D6%2Fmoost 移植にあたって Boost.C…

N2844 - Fixing a Safety Problem with Rvalue References の翻訳

翻訳してみました。 http://melpon.tank.jp/pukiwiki147/index.php?Memo%2F%CB%DD%CC%F5%2FN2844%20-%20Fixing%20a%20Safety%20Problem%20with%20Rvalue%20References 要約っぽいの 右辺値参照は「型安全オーバーロードの原則」に反しているという話。 templ…

Boost.Optional を組み込み環境向けに移植してみた

アライメント系があまり理解できず、Boost.PP のマクロを展開して貼り付けるだけになってしまいました。 ただまあ、optional クラスはできる限り無駄な処理が出ないように実装したつもりです。 以下のページに置いておきました。 http://melpon.tank.jp/puki…

Boost.Coroutine 移植中

とりあえず boost::coroutines::coroutine は一通り移植できて、こんな感じに使えるようになってきました。 int fib(coroutine<int ()>::self& self) { // 初項 int n = 0; self.yield(n); // 2項 int m = 1; self.yield(m); // 3項以降 while (true) { int v = m + </int>…

自然変換の例

『関数プログラミング』の 8.4 に抽象型についての説明があったんだけど、抽象化関数 abstr がそのまま自然変換になってる。こっちには全射(surjective)の条件が必要だけど・・・。 ユーザ定義の (list α) 型と組み込みのリストとの対応関係とか。 抽象化関数…

RAII なクラス

C#

あると便利なこともあるので作ってみた。 public class Raii : IDisposable { Action action; public Raii(Action action) { this.action = action; } public void Dispose() { action(); } } Form form; form.SuspendLayout(); using (Raii r = new Raii(()…

"青"と"白"と"ε"だけの圏

とか考えたんだけど、なぜかうまく作れない。 対象: "青"か"白"かε 射: "青"と"白"と"ε"で作られるしましま。 域: 最初が"青"の場合は"青" 最初が"白"の場合は"白" 最初が"ε"の場合は"ε" 余域: 最後が"青"の場合は"白" 最後が"白"の場合は"青" 最後が"ε"の場…

足し算の圏

対象が N の足し算てどうするんだろうと電車に揺られながら考えた結果、 対象: N 射: (n,m) dom((n,m)) = n cod((n,m)) = n+m id(n) = (n,0) ; : (n1,m1);(n2,m2) = (n1,m1+m2)Multiplicative Transition の例と似たような感じになたー。 しかし恒等射がなん…

モニャモニャモナド行ってきた

off

圏について全く知識が無い状態で行ってきましたが、今回は圏の具体的な例をいっぱい出す回だったので、その具体的な圏については何となく分かった気分になれました。 composable とか 聞いてて重要そうなのが composable のような感じ。 この条件があるから…

モニャモニャモナド

off

告知:「技術者/プログラマのためのモナドと圏論」セミナー(モニャドセミナー) 第2回 - 檜山正幸のキマイラ飼育記 (はてなBlog) に参加登録をしてみました。 第2回のセミナーで、しかも自分は Haskell とか圏論とかについて全然知らない C++ な人なのでほ…