ゆとりーなの日記

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

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>