C++

boost::progress_display++

Boost.懇親会 #5 名古屋 http://partake.in/events/e9131e9c-0662-4179-bbd4-b0648909f921 でboost::progress_displayの発表をしてきました。 発表資料 http://www12.ocn.ne.jp/~dante98/progress_display.pptx ソースコード http://www12.ocn.ne.jp/~dante9…

The AATT Programming Language

C++

先日、kinabaさんと朗読劇を観に行ったときに話していたネタ言語を実装してみました。 元ネタ:「kinaba さんが Cryolite を洗脳してパターンマッチ厨に仕立て上げるリスト」 http://togetter.com/li/6990確かにパターンマッチがあれば木の操作を簡潔に書け…

xor_listの実装

http://d.hatena.ne.jp/y-hamigaki/20100118 の解説です。 やたら長くなったので続きを読む記法。

xor_list

暇つぶしにSTL風にXOR連結リストを書いてみました。 <hamigaki/xor_list.hpp> ドキュメント wikipedia:XOR連結リスト 要するに、某巨大掲示板で昔話題になった「マジックリスト」のことです。 そのときアップされていた某氏のコードを参考にしました。 自分も途中まで書いていたので</hamigaki/xor_list.hpp>…

wave.state

まだBoost.Waveで引っ張ります。 Boost.Waveのインタラクティブモードには状態の保存/復帰機能があります。 この機能はcpp.cppのBOOST_WAVE_SERIALIZATIONの値を1に変えてビルドすることで利用できるようになります。 ただし、コンパイルエラーとロード処理…

wave.cfg

今日もwaveをいじってました。 waveをそのまま起動すると、インクルードディレクトリや事前定義マクロが設定されていないので、 コマンドライン引数で指定する必要があります。 ただ毎回設定すると面倒なので、設定ファイルを使った方がよいです。 既定では…

floatのストリーム

C++

「floatのストリームってありなの?」というCryoliteさんからの宿題が残っていたので調べてみました。 コードを確信したところ、Hamigaki.Audioでは紆余曲折あって、Sink/Sourceレベルでしか使用できないようになっていました。 なので、Boost.Iostreamsとは…

Boost.Waveシェル

颯爽と去っていくだけではアレなので、デバッガ上でwaveを動かしてみようと思ったのですが、 何気にwaveにインタラクティブモードがあったので、これで十分な気がしてきました。 C:\Boost>wave.exe -t - Wave: A Standard conformant C++ preprocessor based…

numpunctの補足

C++

numpunctは規格の英文読み違えてました。 debug_numpunct::do_grouping()で64ビット整数用に20グループ分一桁の指定をしていましたが、 最後のグループより後ろは最後の指定に従うため、 std::string do_grouping() const // virtual { return "\1\1\1\1\1\1…

lexical_castと大域ロケール

lexical_castが流行っているみたいなので、飛行機の中でコードを読んでました。 素朴な実装だとstringstreamに挿入(<<)して抽出(>>)するだけですが、 既定でstringstreamに大域ロケールが吹き込まれるため大域ロケールの影響を受けて出力が変わってしまいま…

続・Boost.Coroutineについての補足

http://d.hatena.ne.jp/melpon/20091212/1260584012 発表者が既に書いてたので、未回答の箇所を補足。 pthreadでマルチスレッドな環境で使えるの? pthreadが特定の実装を指す言葉でもないので、すべての実装で動くかは保障できないです。 Hamigaki.Coroutin…

Boost.Coroutineについての補足

昨日のBoost.勉強会でBoost.Coroutineについていくつか質問があったので、補足しておきます。 Hamigaki.Coroutineのコードはすっかり忘れていたので、すぐに答えられなかったのでした。 self.exit()は必要なの? これはコルーチンの最後の結果を返せるときは…

文字型三種

C++

「charでなく、signed char/unsigned charをストリームに出力した場合何がでるんだっけ?」 Boost.懇親会でCryoliteさんと話していて、宿題にしていた疑問です。 何か罠があっていつもキャストしてから出力していたのですが、思い出せず。 帰ってすぐ確認し…

続・ナゾ042

例のナゾですが、いつの間にか分かりにくい場所にお詫びが載っていました。 http://www.layton.jp/majin/nazo042.html この修正に合わせるには、前のコードの360.0fを足している箇所を消せばよいです。 ただ、修正後のナゾだとヒントと数が合わなくなるので…

ナゾ042

「レイトン教授と魔神の笛」のナゾ042が徹夜明けの頭には辛かったのでプログラムで解いてみました。 でも、なんか答えが違う、、、。 以下、激しくネタバレ。

cdecl_thunk on x64

__cdecl呼び出し規約用メソッドサンクcdecl_thunkをx64に対応させました。 <hamigaki/detail/x64/cdecl_thunk.hpp> x64呼び出し規約に関してはMSDNに記載されています。 http://msdn.microsoft.com/ja-jp/library/7kcdt6fy(VS.80).aspx 概要だけ書くと、 引数は可能な限りレジスタ渡し、乗らない場</hamigaki/detail/x64/cdecl_thunk.hpp>…

_SECURE_SCL

VC++用のまともなプロファイラが手元にないので、結果に影響ない範囲で同じ関数を二度呼ぶ手法で所要時間の概算を調査しています。 例えばnew/deleteの時間を測るには、 #include <new> #include <cstdlib> void* operator new(std::size_t size) throw(std::bad_alloc) { </cstdlib></new>…

Re: for each バグ

C++

http://d.hatena.ne.jp/faith_and_brave/20080514/1210755507 これ、mapとかキーとかは関係ないと思います。 #include <iostream> struct hoge { hoge() { std::cout << static_cast<void*>(this) << "\thoge()" << std::endl; } hoge(int n) { std::cout << static_cast<void*>(this</void*></void*></iostream>…

static_widen

wpath対応作業でテンプレート中から文字型に応じた文字リテラルが必要になることが多く、static_widenというメタ関数っぽい構造体を作りました。 <hamigaki/static_widen.hpp> こんな感じで使えます。 #include <hamigaki/static_widen.hpp> #include <string> template<class CharT> bool has_root(const std::basic_string<CharT>& s) { // val</chart></class></string></hamigaki/static_widen.hpp></hamigaki/static_widen.hpp>…

国際文字名とサロゲートペア

C++

Hamigaki.Charsetのcode_page_test.cppで「L"\U00029E3D"」という国際文字名(Universal Character Name)を使っているんですが、これがsizeof(wchar_t)==2のVC++8/9やg++では「67 D8 3D DE 00 00」(リトルエンディアン)というバイト列になります。 (VC++7.1で…

VC++のウォッチ式

C++

他所に書きましたが、こっちにもメモしておきます。 VisualStudioのウォッチ式に「@err,hr」を入れておくと、Windowsのエラーコードがエラーメッセージ付きで見れるので便利です。 Visual Studio: [スレッド] ウィンドウの使用方法 http://msdn.microsoft.co…

reference_closureの継承

C++

http://d.hatena.ne.jp/Cryolite/20080328#p1 のk.inabaさんのコメントにあるようにN2529に書いてありました。 オーバーロードの解決のためだったんですね。 懸念された最適化の問題も、 class F : public std::reference_closure<int (int)> { private: typedef std::r</int>…

reference_closureが必要なわけ

C++

http://d.hatena.ne.jp/faith_and_brave/20080326/1206522694#c http://d.hatena.ne.jp/faith_and_brave/20080328/1206694733 なんで参照渡しの場合だけreference_closureを使えるのかが伝わっていなかったようなので、値渡しの場合の例も書いて説明します。…

reference_closure

C++

http://d.hatena.ne.jp/faith_and_brave/20080326/1206522694 http://d.hatena.ne.jp/Cryolite/20080325#p1 faith_and_braveさんの例を少し変えて、 #include <functional> #include <iostream> int main() { int count = 3; std::reference_closure<int(int)> f = [&](int x){ return x + (+</int(int)></iostream></functional>…

Re: C++0x コンストラクタの引数をとる push_back

C++

http://d.hatena.ne.jp/faith_and_brave/20080310/1205149207 なんでメモリリークするのかは考えてもらう(笑)として、検証用にアロケータを作成したので貼っておきます。

続 gcc4.3.0のコード調査

C++

例のバグですが、Fedora8は再インストールしてしまったので、Cygwinでビルド(寝る前に終わらなかったので一晩放置)して検証しました。 static_castとか関係なくて、 unsigned foo(int n) { return ~((unsigned)~n); } で再現しました。 ちなみに unsigned fo…

gcc4.3.0のコード調査

C++

gcc4.3.0が変なコードを吐く前後を調べてみました。 式 実際のコード 正否 ~static_cast<unsigned>(-(n + 0)) n-1 ○ ~static_cast<unsigned>(-(n + 1)) ~n × ~static_cast<unsigned>(-(n + 2)) ~(-2-n) ○ static_cast<unsigned>(-(n + 1)) ~n ○ やっぱり昨日のパターンだけバグってます。</unsigned></unsigned></unsigned></unsigned>

gcc4.3.0も変?

C++

unsigned foo(int n) { return ~static_cast<unsigned>(-(n + 1)); } に対して、 .file "foo.cpp" .text .globl _Z3fooi .type _Z3fooi, @function _Z3fooi: .LFB2: pushl %ebp .LCFI0: movl %esp, %ebp .LCFI1: movl 8(%ebp), %eax notl %eax popl %ebp ret .LFE2: .s</unsigned>…

Boost.Exception

ぎゃー、既にBoost.ExceptionにN2179が取り込んでありました、、、。 http://tinyurl.com/2bkojl エラー情報が大きくなりすぎた辺りから、rejectっぽいなぁと思って読んでませんでした。 boost::throw_exception()で投げるときにclone機能を追加するみたいで…

N2179 ひとまず終了

コピー失敗時のstd::bad_allocに対応しました。 差分 テストコードもg++とVC++でコピーコンストラクタの呼ばれるタイミングが違うので修正しています。 これ書いていて気が付いたんですけど、copy_exception()の定義、 template<class E> inline exception_ptr copy_e</class>…