coiledcoilの日記スマートフォン用の表示で見るcoiledcoilの日記この広告は、90日以上更新していないブログに表示しています。組み合わせTipsどうも、ひさしぶりです。Boost.Asioでデータを受信して、Boost.Spiritでデータを取り出すためのTipsをちょこちょこ書きます。Libraryの中の非同期な通信や入出力を担当するライブラリーです。Boost.Spiritはテキストを解析するライブラリーです。このあたりは初見の方はぐぐって調べてみてください。以下は、どういうものかは知っている前提になっております。扱いやすいまとまりで受信するネットワークから何かを受信する場合、内部的にはパケットという単位でデータが来ます。パケットの切れ目は、データを取り出すときの意味のある切れ目とは一致しておらず使いにくいです。そこで、まずはBoost.Asioで意味のある単位までまとまったデータを受信するというのをやります。少なくとも区切り文字を含むように受信する場合です。handler);あるいは、少なくともあるサイズ以上を受信する場合です。handler);この二種類を使い分ければ、どんなプロトコルでも意味のあるまとまりごとに受信できるようになります。データを解析して取り出す次に、受信したデータの取り出し方です。ライブラリー付属のサンプルに載っているstd::istreamを介する方法です。...}これでいいときもあるのでしょうが、いちいちストリームを作らないといけないところと、ストリームに対する操作があんまり便利ではないということで、もっと直接的な方法を紹介します。*>(response.data());利用できるサイズは、response.size()で取れますが、これはasync_readに指定したcontent_sizeよりも大きくなるので、async_readに指定した値を覚えておいて、それを使うことが多いでしょう。*型がとれたら、これを直接Boost.Spiritを使ってほしい値を取り出すことができます。chunk_size);データの解析が終わったら、次の読み取りのまえにデータの読みとり位置を進めておくのが必要です。response.consume(consume_size);こんな感じのノリでどんなデータでも解析できると思います。おわりにいかがでしたでしょうか。Boost.AsioとBoost.Spiritの組み合わせは便利ですね。上記の例では、次のようなヘッダーがインクルードされているものとして話を進めました。組み合わせTipsTweet広告を非表示にするもっと読むコメントを書く2013-03-24Flexでreentrantなlexerを作ってみた作ってみた。======参考にしたもの。23:40Flexでreentrantなlexerを作ってみたTweet広告を非表示にするもっと読むコメントを書く2013-03-16Boost.Build(bjam)で独自拡張子を対応する方法Bost.Buildの使い方メモです。読めば、公式に書いてあることを簡単に触れているだけですので、すでにご存知の方はスルーしてください。コードジェネレーターのような特殊なツールを使いたいときどうすればいいのか。例として、「*.l」をflexでコンパイルして、「*.c」を生成することを考えてみます。「*.l」の扱い方を定義したjamファイルを作ります。$(>)}actionsの中に実際のコマンドを書きます。他のとこは大体こぴぺと一部修正でいけることがおおいでしょう。;ここで、拡張子「*.l」に対して、タイプの名前Lを付けています。;この行に出てくる「C」というのは、bjam本体の方で定義されています。上で定義した、LというタイプからCというタイプが生成されるというルールを記述しています。この書き方は、1:1の場合の書き方です。;と書けば使えるようになります。00:26Boost.Build(bjam)で独自拡張子を対応する方法Tweet広告を非表示にするもっと読むコメントを書く2013-03-13ApacheのRewriteRuleとCustomLogを組み合わせる方法お久しぶりです。