タグ

Boostとc++に関するy_uukiのブックマーク (22)

  • スマートポインタの使い方 その1:unique_ptr - C++Builder好きの秘密基地

    スマートポインタって何? C++において、operator newでメモリ領域(ヒープ領域)を動的に確保した場合、その領域はoperator deleteでプログラマが責任を持って解放してやらなければならない。しかし、deleteを書き忘れたり、例外が発生したときの処理を怠った場合など、それが正しく行われないことはよくある。正しく解放されなかった領域はOSやプロセスが使用可能なメモリ領域を「不正占拠」し、それが積もり積もると、OSやプロセスが停止する場合がある。 #include <memory> class Mess {}; void f(Point p1, Point p2) { Rectangle* r(new Rectangle(p1, p2)); r->rotate(45); // 矩形を45度回転 // ... if (in_a_mess) throw Mess(); // 例

    スマートポインタの使い方 その1:unique_ptr - C++Builder好きの秘密基地
  • C++1y SIMDライブラリの提案 - Faith and Brave - C++で遊ぼう

    N3571 A Proposal to add Single Instruction Multiple Data Computation to the Standard Library ひとつのCPU命令で複数のデータを操作する、SIMD(Single Instruction Multiple Data)を抽象化したライブラリの提案。これは、スレッドを使用するタスク並列性に対して、データ並列性と呼ばれている分野の技術です。 この提案は、Boost.SIMDとしてBoostに提案される予定のライブラリが元になっています。Boost.SIMDについては、私が翻訳したスライド資料もあるので、合わせて参照してください(Boost.SIMDによる実用的なSIMDアクセラレーション)。 このライブラリは、SIMDを抽象化したpack型と、それに対して操作を行うaccumulate()やtransfor

    C++1y SIMDライブラリの提案 - Faith and Brave - C++で遊ぼう
  • Boost.Lockfree ロックフリーキュー - Faith and Brave - C++で遊ぼう

    Boost 1.53.0には、Boost.Lockfreeという並行コンテナのライブラリが入りました。 このライブラリにはスタックとキューが用意されていますが、よく使うのはキューの方でしょう。 使い方は以下のようになります。 #include <iostream> #include <thread> #include <boost/lockfree/queue.hpp> boost::lockfree::queue<int> que(128); void producer() { for (int i = 0;; ++i) { while (!que.push(i)) {} } } void consumer() { for (;;) { int x = 0; if (que.pop(x)) { std::cout << x << std::endl; } } } int main() {

    Boost.Lockfree ロックフリーキュー - Faith and Brave - C++で遊ぼう
  • Boost.Logが採択されました - Faith and Brave - C++で遊ぼう

    Boost.Log formal review result ロギングライブラリ、Boost.Logが採択されました。 レビュー時に見つかった問題点を修正した後、正式にBoost入りすることになります。 ドキュメント ダウンロード(BoostLog.zip) Boost.Logは以下のような特徴があります: シンプルなロギング処理 ログレベルの設定 フォーマットの設定(自作フォーマット、CSV、XML等) 非同期出力 イベントログ サンプル: #include <iostream> #include <boost/shared_ptr.hpp> #include <boost/make_shared.hpp> #include <boost/log/common.hpp> #include <boost/log/formatters.hpp> #include <boost/log/fil

    Boost.Logが採択されました - Faith and Brave - C++で遊ぼう
  • Boost.Asioばかり触っていた人がcpp-netlibを調べてみた - とりあえず適当な名前にした

    この記事はC++ Advent Calendar 2012 24日目の記事です.こんな記事ですけど((( 今日はイブらしいですけど,当然予定なんてありません.悔しくなんて無いしっ さて,cpp-netlibというライブラリについて紹介するのですが,似たようなライブラリ(BoostConnectとかtwit-libraryとか…)を作ってたりしたので実装に興味があったのと,簡単な日語エントリーが少ないよなぁってことで,これについて調べてみようと思ったのがこのエントリーを書くきっかけです. cpp-netlibとは まずはあまり知らない人のために軽く概要を. cpp-netlibはクロスプラットフォームなネットワーク関連のライブラリとして開発され,Boost.Asioを中心に様々なBoostのライブラリを使用することで実現しています.簡単に言うとBoost.Asioのラッパーなライブラリです

    Boost.Asioばかり触っていた人がcpp-netlibを調べてみた - とりあえず適当な名前にした
  • Yohei Yoshihara's Home Page

    MySimplePlan More Detail Magquash More Detail Previous Next

  • C++ AdventCalendar 2012 9日目 「Boost.AsioでGraceful Restart」 - にゃははー

    C++ Advent Calendar 2012 - PARTAKE の9日目です。 今回は Boost.Asio で Graceful Restart してみたいと思います。 ※Unix依存コードなのでWindows環境はわからないです。あしからず。まぁWinで鯖とか... Graceful Restart とは Graceful(ぐれーすふる, 優雅な) Restart とはサーバーアプリケーションなどで稀に実装されることがあるdaemonの再起動方法です。有名所だと Apache httpd なんかは実装しています。停止と再起動 - Apache HTTP サーバ 手順 通常の Restart の場合、 旧プロセスがシグナル等を受け取る 直ちに全てのセッションをぶった切る 旧プロセスが停止 新プロセスが1から立ち上がる という手順を踏みます。その瞬間にどれだけのクライアントが接続しよ

    C++ AdventCalendar 2012 9日目 「Boost.AsioでGraceful Restart」 - にゃははー
  • Boost.Asio streambufからstd::stringに変換する - Faith and Brave - C++で遊ぼう

    streambuf::data()で、mutable_bufferまたはconst_bufferがとれるので、それに対してbuffer_castを使用する。 void receive(boost::asio::streambuf& buffer) { const std::string result = boost::asio::buffer_cast<const char*>(buffer.data()); } よくある、streambufをstd::istreamを通じてstd::stringに変換するようなサンプルは、ストリームによって必要なスペースが削られたりと、ストリーム固有の問題で嵌ることがあるので、この方法が素直で簡単です。 サンプル #include <iostream> #include <string> #include <boost/asio.hpp> #includ

    Boost.Asio streambufからstd::stringに変換する - Faith and Brave - C++で遊ぼう
  • Boost.Asio 送受信バッファをメンバ変数に持たないためのイディオム - Faith and Brave - C++で遊ぼう

    Boost.Asioで非同期通信を書いていると、送受信のためのバッファをメンバ変数に持つ必要が出てきて、局所化が難しい場合があります。 この解決策として、以下のようなイディオムを使うことで送受信バッファをローカル変数化することができます: 送受信バッファをshared_ptrで包む async_read, async_writeにshared_ptrを間接参照したバッファを渡す このままでは送受信関数のスコープを抜けた時点でshared_ptrが消えてしまう 送受信のハンドラにshared_ptrのバッファをbindする io_serviceは内部でハンドラ関数のキューをメンバ変数として管理してるので、bindされたshared_ptrのバッファはハンドラの呼び出しが終了するまで寿命が尽きない つまり、メンバ変数の管理を、部分適用されたハンドラとio_serviceで隠してしまうのです。

    Boost.Asio 送受信バッファをメンバ変数に持たないためのイディオム - Faith and Brave - C++で遊ぼう
  • Boost.Asioまとめ(1)::io_service - yutopp's blog

    Boost Advent Calndar 2011に恐縮ですが参加させて頂きました。15日目です。 最初はBoost.Asioについてまとめるぞーと意気込んでいたものの変に長くなってしまったのでBoost.Asioの中のio_serviceに絞ったためこんなタイトルに成り申した。 Boost.Asioとは 主にネットワークのI/Oのような時間のかかってしまう処理を非同期的かつ簡潔に扱えるようにした便利なライブラリです。 ネットワークを中心に、シリアルポート、タイマー、シグナルのハンドリングなども扱えます。 と、いうわけでio_serviceです。 Windows環境にてVC++10、Boost1.48.0を用いています。 io_service 全てはこのクラスに始まり、このクラスに終わります。 各OSの提供するI/O制御への橋渡しをしてくれるもので、Asioの提供するIOサービス(dead

    Boost.Asioまとめ(1)::io_service - yutopp's blog
  • それでも Boost.Optional を使う、大きく分けて2つくらいの理由 - 野良C++erの雑記帳

    Boost.Optional Must Go - 野良C++erの雑記帳 Boost.Optional Must Go (2) - 野良C++erの雑記帳 最近、何回かに分けて、 Boost.Optional について、(細かい)不満を日記に書いてきました。 これは別に Boost.Optional が嫌いだから不満を書いた訳ではなく、むしろ その逆、 Boost.Optional が便利な分、逆に不満点が目立つので書いていたわけですが、 よく考えたら、 Boost.Optional の便利さを、纏まった記事で書いていないなー、 と、そう思い至ったので、この辺で Boost.Optional を徹底的に推奨する記事でも書いてみようかな、 というわけで、さんざん既出なネタばかりですが、折角なので書いてみることにしましたよ。 冒頭に挙げた以外で参考になるような記事は、この辺でしょうか: C++

    それでも Boost.Optional を使う、大きく分けて2つくらいの理由 - 野良C++erの雑記帳
  • boost::optional<ErrorCode>を戻り値にする設計はダメかもしれない - Faith and Brave - C++で遊ぼう

    以前、「正当性チェック関数でのエラーの返し方」というエントリでboost::optionalのような書き方を推奨したのですが、これはやらない方がいいかもしれません。 以下のようなファイルを開く関数があった場合、 struct ErrorCode { enum enum_t { FileNotFound }; }; boost::optional<ErrorCode::enum_t> FileOpen(const std::string& path); これを使うユーザーコードで、以下のように書いてしまうことがよくありました: if (FileOpen("a.txt")) { // ファイルが開けた!・・・えっ? } 「ファイルが開けたかどうか」をチェックして正常だったらthen節に流れることを意図していますが、これは間違いです。FileOpen()関数の戻り値は、boolに変換されてtru

    boost::optional<ErrorCode>を戻り値にする設計はダメかもしれない - Faith and Brave - C++で遊ぼう
  • Boostコマンドライン引数

    [ C++で開発 ] [ Boostを使うメモ ] コマンドライン引数の解析 コマンドラインから実行するプログラムでは、コマンドライン引数に指定した内容を取り込む処理を記述することが多いです。引数の数が数個と少ない場合は、大抵その場限りのコーディングでお茶を濁しますが、ちょっと複雑なコマンドラインとなると、やはりライブラリの出番となります。 昔はCの非標準ライブラリ getopt の出番だったのですが、最近ではBoostに含まれる program_options を使用します。 boost::program_options 簡単なサンプルを示します。 コマンドラインで、以下3つのオプションを指定可能なプログラム mcast_send があったとします。 アドレスを表す文字列。プログラム中で取り込む型はstd::string。指定は必須。 ポート番号を表す文字列。プログラム中で取り込む型はi

  • How to extend Boost.Asio - ブログのタイトル

    この記事はC++ Advent Calendar 2012 12日目の記事です。 Boost.Asio、みなさんもお使いのことと存じますが、あれこのソケットなかったっけ? とかこれもAsioで使いたいなぁと思ったことはありませんか? そんな時のためにこの記事ではBoost.AsioのProtocol, socket option, serviceの拡張を扱います。 基礎知識: I/O service: ご存知boost::asio::io_service I/O object: 実際にAsioを使う人が触るobject。socketやtimerなど。(例: boost::asio::tcp::socket, boost::asio::deadline_timer等) Service: boost::asio::io_service::serviceを継承しI/O serviceに登録される

    How to extend Boost.Asio - ブログのタイトル
  • TCP Header class - ブログのタイトル

    とりあえず前の投稿の内容 + 下記のtcp_header.hpp とで一応SYN flood らしきものが作れました。 ただシステムコールレベルで socket(AF_INET, SOCK_RAW, IPPROTO_TCP) を使用していて、IP_HDRINCL を有効にしていないためか、 カーネルが勝手にRST を送信してSYN floodで重要なsyn -> ack -> 放置、のはずがRSTで終了されるので攻撃になってない状態です。 以下が tcp_header.hpp ですが将来的にはTCP Header optionにも対応したいので冗長な部分が多々有りますが、 気にしない方向で... ー 追記 ー io_service.reset() よばないといけないよね... tcp_header.hpp は途中でLinuxかそれ以外で分岐してますがLinuxでないとコンパイルが通らないと

    TCP Header class - ブログのタイトル
  • boost Asio 概要

    Boost.Asio概要 翻訳は自分の勉強のために行います.とりあえず意味がわかればいいやという感じで進めます.訳せないところは飛ばします. そういった意味で不正確な訳なことをご了承下さい. http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview.html 1. Boost.Asioの原理原則 大部分のプログラムは、外の世界と何らかの方法でやりとりをします。それは、ファイルを通じて、ネットワークを通じて、シリアルケーブルを通じて、もしくは、コンソールを通じて、です。しばしば、ネットワークの場合、I/O命令の完了までに長い時間がかかる場合があります。これは、アプリケーションの開発者にとって、とりわけ挑戦となります。 Boost.Asioはこれらの長い実行時間のかかる操作を扱います。スレッドや明示的なロックなしにです

  • *[プログラミング]boost asio raw socket programming 2 - ブログのタイトル

    ようやく自分の頭の中でboost.asioのローレイヤーネットワークプログラミングが明らかになってきました。 まず基。 asioではraw socket生成にbasic_raw_socketを使います。 これはLinuxの生のシステムコールを使用した場合の raw_socket = socket(AF_INET, SOCK_RAW, int protocol); にあたります。 ここでbasic_raw_socketのテンプレート引数として1つ前の記事のようなクラスを与えてやります。 これでユーザーが定義した独自のローソケット用socket, resolver, endpointが作れます。 boost::asio::io_service io_service; // ソケット作成 boost::asio::ip::rawtcp::socket(io_service, boost::as

    *[プログラミング]boost asio raw socket programming 2 - ブログのタイトル
  • https://nt2.sourceforge.net/

  • The Boost C++ Metaprogramming Library

    概要 この文書は,アルゴリズム,シーケンス,メタ関数クラスの拡張可能なコンパイル時フレームワークである, Boost C++ テンプレートメタプログラミングライブラリ(MPL) について述べている. ライブラリは実環境での実際の実際の仕様に十分な,強力で使いやすいツールセットを構築するために, ジェネリックプログラミング,及び関数プログラミングの世界から,重要な抽象化を導入している. MPL は,C++標準ライブラリ[STL94], [ISO98]の一部である,標準テンプレートライブラリ (STL) の影響を強く受けている. STLの様に,MPLはこの領域に将来貢献するための土台となるような,公開された概念と実装の枠組みを定義している. ライブラリの基的な概念とイディオムにより,ユーザが与えられたメタプログラミングの問題に対して, アドホックなアプローチの世界に引きづり込まれることなく,

  • Introduction to boost test

    How to implement a fast double presicion exponential function for x64 see http://github.com/herumi/fmath

    Introduction to boost test