ゆとりーなの日記

日記的な事を書いて行くと思はれる

Boost

csvファイルをコンパイル時にゴニョゴニョする

次󠄁のやうなcsvファイル、"test.csv"があつたとする。 8,4,35,23,12,6,18,24,56これの要󠄁素の合計と昇順ソートをコンパイル時にやつてしまはうと云ふ話。 #include <iostream> #include <boost/mpl/vector_c.hpp> #include <boost/mpl/sort.hpp> #include <boost/mpl/for_each.hpp> #include <boost/mpl/fold.hpp> #include <boost/mpl/int.hpp> #include <boost/mpl/plus.hpp> u…</boost/mpl/plus.hpp></boost/mpl/int.hpp></boost/mpl/fold.hpp></boost/mpl/for_each.hpp></boost/mpl/sort.hpp></boost/mpl/vector_c.hpp></iostream>

Boost.InterprocessのobufferstreamとBoost.IOStreamsのfiltering_ostreamに嵌められた

丁度これ Boost.ipcの有効利用(?) - krustf の雑記 をやりたい事案があつたので、boost1.56.0でやつてみたのだが、オーバーロードが解決しないと言はれた。 filtering_istreamのpushにはstd::basic_istreamとstd::basic_stringbufを取るオーバーロードが…

MSVCでのデバッグ小ネタ

メモリリークを調󠄁べる _CrtSetDbgFlagを使󠄁とメモリリークが檢出できる。アプリ終󠄁了時にメモリの解放忘れがあると、デバッガにその情󠄁報を出力してくれる。 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); デバッグビルドでしか有效にな…

DXライブラリとrandom_shuffleが微妙に噛合はない

C++11環境ではshuffle函數があつて、正直此方の方が良い感はあるのですが、DXライブラリを使つてゐる場合はC++11の亂數ではなくてDXライブラリの亂數を使つた方がグローバルでゲーム向きなところもあるのでDXライブラリの方の亂數を使ふと云ふ事もあるかと思…

-O3すると警告が出る

七対子の聴牌判定を取り敢えず適当にこう書いてみたわけです。 // 戻り値の32bitの中立っているビットの牌が待ち // 1bit目1m,2bit目9m,3bit目1p... // 引数は各牌の所持枚数 // kind[0]=1mの枚数,kind[1]=9mの枚数,kind[2]=1pの枚数... std::uint32_t GetTi…

Win32APIとBoostだったらBoostの方が好き...だけど

個人的にはthreadやらfilesystemやらはWin32APIを直接叩くよりは遥に使いやすい様な気がします。C++のライブラリなのでRAIIとかで管理されていたり函数オブジェクトが渡せたりとC++との親和性も高いです。ついでに標準ライブラリに近い名前付けで目にやさし…

C++でSQLっぽいの

って感じの煽りがあったので取り敢えず適当に作ってみました。 #include <iostream> #include <string> #include <boost/range/algorithm.hpp> #include "sql.hpp" struct id {}; struct name {}; int main() { auto table1 = aq::sql::create_table<aq::sql::field<id, int>, aq::sql::field<name, std::string>>(); aq::sql::insert_into(table1, aq:</name,></aq::sql::field<id,></boost/range/algorithm.hpp></string></iostream>…

optional絡み

boost.optionalにはmake_optionalってのがあるんですが、値から暗黙にoptional突っ込めるのにどこで使うんだろうとか思ったんですが、条件演算子を絡めて返す時はこれを使うと幸せになれるってことを思ったなどです。 boost::optional<int> hoge(const bool b) { </int>…

あいぽんでtype_traits使ったよ

Objective-Cにはオブジェクトが指定したクラスか派生クラスかを調べるメソッドがあったりしますが、これをC++っぽいキャストとして作ってしまおうという話です。使いかたとしてはこんな感じです。丁度dynamic_castのObjective-C版みたいな雰囲気です。 void …

Twitterのタイムライン表示

取り合えずこんな感じで表示はできました。Web系は(註:どちらかというと"も")正直まだよく分かってないです。 #include <fstream> #include <iostream> #include <string> #include <vector> #define _WIN32_WINNT 0x0501 #include <boost/asio.hpp> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/xml_parser.hpp> #include </boost/property_tree/xml_parser.hpp></boost/property_tree/ptree.hpp></boost/asio.hpp></vector></string></iostream></fstream>

Boost.Signals2のtrackableが案外危ないかも

Boost先生のシグナルを使うときによくお世話になっているtrackableなのですが、moveと組み合わせると危ないのではないかという気がしてきたので試したら案の定クラッシュしました。 #include <iostream> #include <memory> #include <boost/signals2/signal.hpp> #include <boost/signals2/trackable.hpp> struct hoge : boost::signals2:</boost/signals2/trackable.hpp></boost/signals2/signal.hpp></memory></iostream>…

自作ライブラリのBoost.Geometry対応

取り敢えず折角1.47.0で入ったので暫定対応してみました。取り敢えず描画オブジェクトが継承するdrawable_facedeの最後にBoost.Geometry用のtagを入れるテンプレート引数を追加しました。 template <typename Drawable, // 描画オブジェクトの型 std::size_t Size, // 頂点構造体の要素数 std::uint32_t Count, // 描画カウント typename FVFTag, // FVFタグ typename PrimitiveTag, // プリミティブタグ typename GeometryTag> // Bo…</typename>

D3DVECTORn系の話

Boost.Geometryには浮動小数点数での比較で悲劇が起きないように浮動小数点数かどうかで処理を分岐させるequalsという便利函数が用意されているみたいです。これは便利だなと思ってたんですが、よく考えるとDirectX御用達のベクトルクラスであるD3EDXCECTORn…

とんちんかんなこと言ってたらどうしよう

巷で話題のBoost.Geometry、Boost.Fusionと組み合わせられると聞いて試してみたのですが一つ気になることがあったので。 とりあえずサンプルのコードを見て試してみたわけです。 #include <iostream> #include <boost/fusion/include/adapt_struct_named.hpp> #include <boost/geometry.hpp> #include <boost/geometry/geometries/adapted/boost_fusion.hpp> struct sample_point3d { double x;</boost/geometry/geometries/adapted/boost_fusion.hpp></boost/geometry.hpp></boost/fusion/include/adapt_struct_named.hpp></iostream>…

Boost.Opetatorsがconstexpr対応してくれるとうれしいなとか

こういうこと出来たらうれしいんですがどうなのでしょう。雰囲気自動生成されるoperator !=にはconstexprが付いてなさそうなので残当しそうです。 #include <boost/operatoes.hpp> struct hoge : private boost::operators<hoge> { constexpr explicit h1(int a) : a_(a) {} int a_; }; </hoge></boost/operatoes.hpp>…

自動生成の時間

Boost.operatorsを使うと+=とか==を定義しておくだけで、+やら!=が使えるようになるという便利な代物があるわけです。 で、例えばこんなクラスがあるとします。 class vector2 : boost::operators<vector2> { public: explicit vector2(const float x, const float y)</vector2>…

PE勉強会(4)に参加してきた

前から行こうと思って行けてなかったPE勉強会に遂に参加してきました。初参加でセッションなし且つみんなで開発や質問をする形式に耐えるのかという疑念はありましたがそれなりになんとかなったようです。 VB.NETとか知らないので冷静に勝手にC++0xで遊んで…

sorry, unimplemented: unexpected ast of kind field_decl

いつも高圧的にコンパイルエラーを指摘してくるコンパイラさんg++ですが、4.6.0に於いてBoostのGIL関係のヘッダをインクルードするとそれだけでコンパイラさんが謝罪してくれるようです。はい。 どうも0xモードにすると、テンプレートが絡んだstaticなメンバ…

世紀末プログラミングに於けるカプセル化

オブジェクト指向っていうとカプセル化って概念があるわけです。カプセル化の利点としては、下手に情報を公開して勝手にいじられて変なことが起きると困るので隠蔽しましょうって雰囲気が根底にあると思うのですが、これは型演算なクラスにも当てはまるのか…

なんだかんだで進行中

買いました。Programming in Lua プログラミング言語Lua公式解説書Roberto Ierusalimschy 新丈 径 アスキー・メディアワークス 2009-08-28売り上げランキング : 303247Amazonで詳しく見る by G-Tools最近本買いすぎですね。明らかに部活辞めた反動ですね。 …

Boostがまさか・・・

時代はRangeです。入力ストリームからのコピーもRangeにやりたいものです。Boost.Rangeにはistream_rangeというものがあります。名前的にstd::istream_iteratorな雰囲気が漂っています。一方でstd::istreambuf_iteratorというものもあります。こちらのイテレ…

頂点バッファの構造体にBoost.Fusionを使う

頂点バッファとかに使う頂点の構造体の記述をBoost.Fusionを使って楽しようという企画です。 べた書きすればよくないかという話もありますが、 // 頂点と基本色だけ struct diffuse_vertex { float x, y, z; std::uint32_t color; }; // 頂点とライティング…

Boostのfusionとspiritやばい

CSVの中身を構造体に読み込むならもうこのコンビ一択でいいですね。 data.csv ハリード,21,12,20,17,15,19,20 カイ,10,18,20,13,24,16,21 コーデリア,20,12,18,20,11,19,20 ゲラ=ハ,18,21,16,22,16,18,15 キャット,16,22,25,10,15,14,21 レッド,20,14,18,17…

Boost.Property_treeで暗号化したiniファイルを読んでみる

iniファイルでゲームのデータを管理してみようかしらと無謀な考えが頭をめぐった矢先にiniファイルだと暗号化したものとか読めないからキャラクタのデータとかには使えないねとか言われてました。そこでは独自にiniファイル的サムシングと解析するものを作っ…

ライブラリ版nullptrの悲劇

MSVC10用に書いていたコードをふとしたきっかけでgcc-4.5.1でコンパイルすることになって、nullptrどうしよう、とりあえず-Dnullptr=NULLでいいかーとか思っていたら、kikairoya先生からnullptrイディオムのリンクが飛んできたのであーやっぱりこれ使ったほ…

みんなBoostを使おう!

2010年を締めくくるゲームに使えそうなBoost集、ネタが切れたのでここで各エントリへのリンクと取り上げたライブラリを羅列しておきます。 その1 http://d.hatena.ne.jp/nagoya313/20101228/1293554574 扱ったライブラリ intrusive_ptr interval serializat…

今年もあと二日だけどBoostでいくよ!

同人ゲーム制作に使えそうなBoostまとめ的な物はまだまだ続くんです。 その9:range_ex 色々とお世話になることの多い標準のアルゴリズムですが、イテレータの組渡すのだるいよ、というか組間違えたらどないすんねんと思ったあなたにはrange-baseのアルゴリ…

攻撃の手を緩めない!

同人ゲーム制作に使えそうなBoostまとめ的な物その2ですよ。そのなんたらは前回から通し番号になってるので気になる人は前回の記事もよろしく的な宣伝も入れておきます。 その5:lexical_cast ステータスを描画しようと思った時、数値を描画することになる…

サークルから反Boost派を一掃するぞ!

って論争が起きるほどほどガチ勢がいるサークルなのかどうかはおいといて。同人ゲーム制作に使えそうなBoostまとめ的な物を作ってみましたよ。 その1:intrusive_ptr 大抵の場合はstd::unique_ptrで事足りるのですが、時たま共有したいCOMオブジェクトがあ…

csvファイルをコンパイル時にごにょごにょする

次の様なcsvファイル、"test.csv"があったとします。 8,4,35,23,12,6,18,24,56これの要素の合計と昇順ソートをコンパイル時にやってしまおうというわけです。 #include <iostream> #include <boost/mpl/vector_c.hpp> #include <boost/mpl/sort.hpp> #include <boost/mpl/for_each.hpp> #include <boost/mpl/fold.hpp> #include <boost/mpl/int.hpp> #include <boost/mpl/plus.hpp> …</boost/mpl/plus.hpp></boost/mpl/int.hpp></boost/mpl/fold.hpp></boost/mpl/for_each.hpp></boost/mpl/sort.hpp></boost/mpl/vector_c.hpp></iostream>

いらんかった

昨日の話ですが、どう考えてもマップにする必要がなかったみたいなので全部ベクトルで書き換えました。ベクトルにしたのでremove_ifが使える様になった関係上空のベクトルを作る必要もなくなっていい感じです。 #include <cstdint> #include <type_traits> #include <boost/mpl/vector.hpp> #include <boost/mpl/at.hpp> #in</boost/mpl/at.hpp></boost/mpl/vector.hpp></type_traits></cstdint>…

FVFを型で自動計算

DirectXで使うFVFを型で計算してしまおうという無謀な計画が実ったのでメモしておきます。 まず、tagとして次のような空の構造体を定義しておきます。雰囲気イテレータとかで使うあれを真似してみました。 struct dimension2_drawable_tag {}; // D3DFVF_XYZ…

構造体自動生成

Direct3Dで使う頂点構造体を自動生成しようとBoost.PPを使ってみました。 template <std::uint32_t FVF> struct vertex { BOOST_PP_SEQ_FOR_EACH(ごにょごにょ) }; BOOST_PP_SEQ_FOR_EACHでメンバ展開、テンプレート引数の値を使ってシーケンスを走査とか思ったんですが、よく考</std::uint32_t>…

pstade::oven::string_splitの使い方

が今迄よく分かってなかったのですが、今宵判明したのでメモメモです。 先ず、似たようなものにBoost.String Algorithmsというのがあります。文字列を特定の文字で分割するときは次のように書けます。 #include <iostream> #include <string> #include <vector> #include <boost/algorithm/string.hpp> #include <pstade/oven/algorithm.hpp> in</pstade/oven/algorithm.hpp></boost/algorithm/string.hpp></vector></string></iostream>…

課題に答えてみるシリーズ

C/C++スレで 入力された数値を逆順に表示せよ。 なお、この動作は0未満の値が入力されるまで 繰り返すものとする。 という問題を見つけたので解いてみたなど。 #include <iostream> #include <string> #include <boost/lexical_cast.hpp> #include <pstade/oven/algorithm.hpp> #include <pstade/oven/stream_read.hpp> #include <pstade/oven/taken_while.hpp> #include </pstade/oven/taken_while.hpp></pstade/oven/stream_read.hpp></pstade/oven/algorithm.hpp></boost/lexical_cast.hpp></string></iostream>

おとついのつづき

http://d.hatena.ne.jp/nagoya313/20100924/1285341022の続きです。やっぱりstd::vector &が飛んでくるのはオーバースペックだろうと言うことで、コマンドライン引数を扱うクラスを書いてみました。既にあるかもしれないですが気にしないで行きます。 #inclu…

普通じゃないプログラミング発表会2010に行くんだ!

昨日のPolygonの話、DirectXとかのデータの方をPolygonのコンセプトに合わせると言われたのですが、イマイチまだよく分かりません。取り敢えずDirectXの方、for文使用は脱出出来たのでメモしておきます。 const std::array<vertex2d, 4> t = {{ {0.f, 0.f, 0.f, 1.f, 0xFF</vertex2d,>…

Boost.Polygonの謎

Boost.Polygonをなんとかしてゲームに使ってみようと言うことでいじっているのですが、謎が多いです。 謎1 boost::polygon::move VC++2010のコード補完とかで引数を見ると、 boost::polygon::move(vertex_, x, y); // x,yは各方向の移動量 と出来そうなもの…

メイン関数概論?

http://d.hatena.ne.jp/nagoya313/20100604/1275655953でゲームにおけるメイン関数についてグダグダ語ってますが、また新たなひらめきがあったのでメモしておきます。 http://d.hatena.ne.jp/nagoya313/20100914/1284459662で、for_eachを使ったメッセージル…

に行ってきました

あれば絶対行くと心に誓っていたのできちんとフラグが回収できました。 Boostライブラリ一周の旅 1.41.0〜1.44.0までの差分 個人的にはポリゴンと状態遷移のやつが気になるところです。レンジは当面ovenでいいや的に思っていたら、予想通りアキラ先生からove…

もう初心者には生のfor文も、begin()/end()も書かせたくないらしいので

アキラさん発です。これからのC++入門はfor文の記述がごっそり消えて、こんなふうに書かれるようになるのでしょうか・・・。 ? 制御文 ?.? pstade::oven::for_each pstade::oven::for_eachは同じ処理を繰り返し行う時に使用することで効率よくプログラムを記…

これだからVCは

ベクトルとか行列をどうしようかと考えてたのですが、TwiterでBoost.uBlasでも固定長的なの出きるよ的なサムシングが聞こえてきたのでそれを採用しました。 class vector3 : public boost::numeric::ublas::vector<float, boost::numeric::ublas::bounded_array<float, 3>> { typedef boost::numeric::ublas::vector<float, boost::numeric::ublas::bounded_array<float, 3></float,></float,>…

どんどん短くなる?

http://d.hatena.ne.jp/nagoya313/20100613/1276443497で大分遊んだわけですが、ファイルを BOOST_FOREACH で行ごとに処理したい - 野良C++erの雑記帳を参考にしたところ更に面白くなったんです。 #include <fstream> #include <string> #include <regex> #include <vector> #include <boost/range/algorithm/for_each.hpp> #inclu</boost/range/algorithm/for_each.hpp></vector></regex></string></fstream>…

Javaだと耐えなそうでもC++/Boostなら耐える

来年のJava普通に耐えなそうだったのでC++/Boostで書いてみました。取り敢えず簡単そうだったyappyの日記に挑戦。日本国憲法の前文を読み、行ごとに単語単位でひっくり返せとか書いてありますが、 This is a pen. That is a pencil. .pen a is This .pensil …

ちょっとした確認に日記を使う人って

class hoge { public: boost::intrusive_ptr<IDirect3DDevice9> device() const {return device_;} private: boost::intrusive_ptr<IDirect3DDevice9> device_; }; というのがあったとき、 void hoge1() { const hoge h; h.device()->メソッド呼び出し; h.device()->メソッド呼び出し; h.device()</idirect3ddevice9></idirect3ddevice9>…

なにかまちがえた?

win32APIにはOutputDebugStringという名の関数が用意されています。この子はデバッガのストリームに出力してくれる関数です。 #include <windows.h> int main() { const char * const str("Hello World!\n"); OutputDebugString(str); return 0; } これでデバッガ出力に</windows.h>…

template小ネタ

boost::signals2が便利すぎることは有名ですが、クラスメンバとして持つ場合、接続とかは外部に公開したいけど、呼び出し自体は公開したくないという場合が多かったりすると思います。そこでこんなテンプレートを考えてみました。 template <typename Func, typename Parent> class PrivateCa</typename>…

第12回〜タイトル画面のシーン遷移〜

前回はボタンでシーン遷移を行いましたが、今回は普通のゲームっぽく、タイトル画面に表示された項目を選んで指定したシーンに遷移するようにしてみましょう。今回のミソはboost.signal2を使って、複雑な条件分岐を全部省くとこですかね。 先ずはタイトル画…

第8回〜oggファイルの読み込みとストリーミング再生〜

前回WAVEファイルを鳴らせるようになりましたが、WAVEファイルをBGMとして使う場合サイズが大きくて残念なことになります。そこで圧縮された音声形式で且つライセンス的にも同人ゲームで使いやすそうなoggをBGMとして使いたいと思うのは自然な流れです。そこ…

第7回〜WAVEファイルの読み込みと再生〜

折角XAudio2を初期化しても音声をならせなきゃ意味がありません。さっそくWAVEファイルを読み込んで再生する作業に入ります。 XAudio2で音声を再生する場合、波形データを保存した配列が必要になります。そこでまずはstd::vectorにWAVEデータから波形データ…