2012-06-01から1ヶ月間の記事一覧

Vim の動画をキャプチャして youtube にあげてみた

特に意味はありませんが、youtube に Vim の動作をキャプチャした動画を上げてみました。 わたしは割りと他の人の Vim 環境が気になるんですけど、他人には需要があるかしら。 キャプチャした動画をアップロードするだけなのでそんなに難しくなかったですね…

Boost 1.50.0 がリリース

Boost 1.50.0 がリリースされました。 Version 1.50.0 Boost 1.50.0 リリースノート(日本語版) [Clang で Boost.Proto を使用した場合の不具合] わたしも先ほど教えて頂いたのですが、clang 3.1(-std=gnu++11) で Boost.Proto を使用するとコンパイルエラー…

quickrun-hook でインクルードオプションを追加する

今までは g:quickrun_config に無理やり追加していたんですが、quickrun-hook で処理したほうがすっきりしそうなのでやってみました。 [ソース] let s:hook = { \ "name" : "add_include_option", \ "kind" : "hook", \ "config" : { \ "enable" : 0, \ }, \…

TypeErasure で元の型にキャストする

Boost.TypeErasure で処理を呼び出す際に元の型にキャストして渡しています。 template<class C, class T> struct push_back { static void apply(C& cont, const T& arg) { cont.push_back(arg); } }; std::vector<int> vec; any<push_back<_self, int>, _self&> c(vec); int i = 10; call(push_back<_self, int>(), c</_self,></push_back<_self,></int></class>…

template に float 値を渡す

こんな感じでどうか。 [ソース] #include <boost/preprocessor/repetition/enum.hpp> #include <sprout/string.hpp> #include <sprout/cstdlib.hpp> #include <sprout/operation.hpp> template<std::size_t Index, typename String> constexpr char at_c(String const& str){ return Index >= str.length() ? char('\0') : str[Index]; }…</std::size_t></sprout/operation.hpp></sprout/cstdlib.hpp></sprout/string.hpp></boost/preprocessor/repetition/enum.hpp>

quickrun-hook-eval と quickrun-outputter-message

vim

以前、:QuickHaskell というコマンドを作成したんですが、その時に教えてもらいました。 この2つの module を使用すると比較的簡単に :QuickHaskell を定義することが出来ます。 [ソース] let g:quickrun_config["haskell/interpreter"] = { \ "outputter" :…

quickrun の hook-point を後から設定する

vim

前回の続きです。 前回は予め各 point を作成して後から有効にしていましたが、今回は init 内で必要な point を作成しています。 [ソース] let s:hook = { \ "name" : "test2", \ "kind" : "hook", \ "config" : { \ "enable" : 1, \ "points" : "" \ }, \}…

quickrun の hook-point を後から有効にする

vim

quickrun-hook は point と機能を対にして作成しているので success_close_buffer failure_close_buffer exit_close_quickfix のような感じになっています。 しかし、これでは point ごとに hook を作成しなければなりません。 流石に point ごとに hook を…

Vim の :command で再帰

まさに誰得。 [ソース] command! -nargs=+ Factorial \ execute [<f-args>][1] == 0 \ ? 'echo [ <f-args> ][0]' \ : 'Factorial '.([<f-args>][0]*[<f-args>][1]).' '.([<f-args>][1]-1) [コマンド] :Factorial 1 4 [出力] 24 command だと値が返せない(返す方法が思いつかなかった)ので引数が2つ</f-args></f-args></f-args></f-args></f-args>…

constexpr の間違った使い方。

C++

例えば下記の様な書き方。 [コード] template<typename T> struct X{ //error: constexpr static data member 'value' must have an initializer static constexpr T value; }; template<typename T> constexpr T X<T>::value = {}; constexpr が使えるとうっかり上記のような書き方をし</t></typename></typename>…

quickrun.vim で Haskell の簡易対話式インタプリタコマンドを定義する

Haskell で対話式インタプリタを使用する場合 ghci を使うのが便利なのですが、起動するのが手間なので quickrun.vim を使用して簡易的なコマンドを定義してみました。 [コード] " 実行結果をバッファで開く command! -nargs=1 QuickHaskell :execute ":Quic…

quickrun.vim 0.6.0 リリース

vim

されてました。 quickrun.vim 0.6.0 リリース - 永遠に未完成 hook-module 便利なので Vim script が書ける人はどんどん使えばいいと思います。

Vim script で変数を不変で定義するコマンド

前回の続き。 id:tyru さんに色々とコメントを頂いてこんな感じになりました。 [ソース] command! -nargs=1 Val let <args> | :execute 'lockvar '.matchstr(<f-args>, '\zs.*\ze=') Val value = 10 echo value " 代入できないよ let value = 10 " 再代入する場合は unlet </f-args></args>…

引数の組み合わせを Boost.MPL で簡単にする

元ネタ:型に厳格 - きっちん こういう時こそ Boost.MPL の出番ですね。 って事で簡単にやってみました。 [条件] 3つの引数に X が1つでも含まれている関数 plus を定義する [ソース] #include <boost/mpl/count.hpp> #include <boost/mpl/less_equal.hpp> #include <boost/mpl/vector.hpp> #include <boost/utility/enable_if.hpp> struct X{ X(int value) : valu</boost/utility/enable_if.hpp></boost/mpl/vector.hpp></boost/mpl/less_equal.hpp></boost/mpl/count.hpp>…

Vim script で変数を不変にする

:lockvar コマンドを使用します。 [ソース] let value = 42 lockvar value let value = 10 " error 変数名を渡す事で、その変数が書き換えできないようにします。 便利な機能なのでいろんなところで使いたいんですけど :lockvar に変数を渡さないとダメなの…

neocomplcache で JSX のコード補完を行う neocomplcache-jsx をつくった

jsx 側でコード補完を行う機能が実装されたので、それを使用して neocomplcache の source を書きました。 先に行っておくと非同期ではないのでレスポンスが悪いです。 また、コード補完機能が実装されている JSX の git は master の branch ではないので注…

algorithm としての std::move

C++

Twitter で教えてもらったので覚書。 std::move というと rvalue reference にキャストする関数の方が有名だと思うんですが、sequence の要素を move する algorithm があります。 std::copy の move 版ですね。 使い方も std::copy を同じです。 [ソース] #…

Sprout に example を突っ込んでいる

ちょっと前からですが、id:boleros さんの constexpr ライブラリ Sprout を fork して example を pull request とかしています。 GitHubへpull requestする際のベストプラクティス - hnwの日記 まぁ単純にわたしが『Sprout の example 欲しい』っていうのも…

JSX の neocomplcache-snippets-complete を書いた

ちょっとつついて見たのでついでに書いてみました。 neocomplcache-snippets-complete-jsx - github :NeoBundle "git://github.com/osyo-manga/neocomplcache-snippets-complete-jsx.git" JSX 歴5時間の輩が書いたので、気になった部分があれば fork するな…

quickrun-hook で成功時と失敗時に顔文字とか出力する

vim

こんな感じ。 [ソース] let s:hook = { \ "name" : "kao", \ "kind" : "hook", \ "is_success" : 0, \ "config" : { \ "enable" : 1 \} \} function! s:hook.on_success(...) let self.is_success = 1 endfunction function! s:hook.on_failure(...) let sel…

Boost.TypeErasure でメンバ関数の呼び出しと定義

メンバ関数を呼び出すクラス定義と特殊化を行うことで拡張する事が出来ます。 push_back メンバ関数を呼び出す場合はこんな感じになります。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/any_cast.hpp> #include <boost/type_erasure/builtin.hpp> #include <iostream> #include <vector> #include <list> template<typename C, typename T> struct push_…</typename></list></vector></iostream></boost/type_erasure/builtin.hpp></boost/type_erasure/any_cast.hpp></boost/type_erasure/any.hpp>

Boost.TypeErasure を使ってみた

と、言うことで以前から気になっていた Boost.TypeErasure をちょっとつついてみました。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/any_cast.hpp> #include <boost/type_erasure/builtin.hpp> #include <boost/type_erasure/operators.hpp> #include <boost/mpl/vector.hpp> #include <iostream> struct X{ X() : value(0…</iostream></boost/mpl/vector.hpp></boost/type_erasure/operators.hpp></boost/type_erasure/builtin.hpp></boost/type_erasure/any_cast.hpp></boost/type_erasure/any.hpp>

久々に OGLplus を触ってみた

TL にちょろっと話が出てきたので久々に試してみました。 今は ver 0.14.0 ですかね。 かなり構造が変わったみたいで、以前から問題になっていた関数ポインタ回りが改善されていました。 これでやっと OGLplus 側のコードを変更しないでも Windows で使用で…

Boost.TypeErasure のコード

Review Request も出ているみたいなので、そろそろつついてみようかなーと思いソースコード探していました。 svn Formal Review Request: TypeErasure ちょっと遊んでみるかなー。

PStade のコード置き場

C++

いつも最新版の PStade のコードを探している気がするので覚書。 svn-trunk github github は svn のミラーなので反映されるまでに若干タイムラグがあるみたい。 svn が使えるならそっちを参照したほうがいいですね。

複数のファイルを1つの Range として扱いたい 続き

C++

昨日の続き。 コメントで oven::memoized を使用すればうまくいくと教えてもらいました。 と、いう事でこんな感じになりました。 [ソース] #define BOOST_RESULT_OF_USE_DECLTYPE #include <iostream> #include <string> #include <vector> #include <fstream> #include <boost/range/adaptor/transformed.hpp> #include <pstade/oven/concatenated.hpp> #include </pstade/oven/concatenated.hpp></boost/range/adaptor/transformed.hpp></fstream></vector></string></iostream>

複数のファイルを1つの Range として扱いたい

C++

PStade.Oven とかを使って下記のようなコードになりました。 [ソース] #define BOOST_RESULT_OF_USE_DECLTYPE #include <iostream> #include <string> #include <vector> #include <fstream> #include <iterator> #include <boost/range/adaptor/transformed.hpp> #include <pstade/oven/concatenated.hpp> #include <pstade/oven/copied.hpp> int ma…</pstade/oven/copied.hpp></pstade/oven/concatenated.hpp></boost/range/adaptor/transformed.hpp></iterator></fstream></vector></string></iostream>

Boost.Fusion の invoke を利用してみる

そういえば、こんな使い方が出来るのよね。 関数テンプレートを直接渡せないのが悲しいけど面白い。 [ソース] #include <sprout/math/sqrt.hpp> template<typename T> constexpr T length(T x, T y, T z){ return sprout::sqrt(x * x + y * y + z * z); } #define BOOST_RESULT_OF_USE_DECLTYPE</typename></sprout/math/sqrt.hpp>…

自前で LLVM 3.1 をビルドした

関連:Experimental Clang Binaries for Mingw32/x86 でコンパイラが死んだ\(^o^)/ 上記の問題と LLVM 3.1 をソースコードからビルドした場合でもクラッシュすると聞いたので自前でビルドして試してみました。 ひとまず、上記の問題に関しては自力でビルド…

C++03 から C++11 へ移行する人が見るべき資料

どこかにまとまっていれば便利かなーと思いとりあえず、手元にあったのを簡単にまとめてみた。 [注意点] ネットで C++11 に関して調べる時の注意点ですが、古い言語仕様(C++0x)のまま書かれているコードが載っている事があります。 ブログの記事などを参考に…