C++
これも巷に溢れてるけど、Unicodeの変換ってどうなってるのかよく知らなかったから勉強がてらに書いてみた。 //#include <cstdint> namespace std { typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; } #include <utility> #</utility></cstdint>…
いやまあ、もうこんなの巷にいくらでも溢れてるだろうけど。 こいつの特徴は、どのヘッダにも依存しないってこと。 iterator_traits のために を使いました。まあでも とかそういうバイナリに影響するものじゃないし、これぐらいならいいよね? テンプレート…
自分にとって、プログラムを書くということは、コンパイラに対して意味を与える作業だと考えるようになりました。 意味というのは型だったりconstだったり。あとプログラムの流れというか文脈とかもあります。 型は具体的であればあるほど、コンパイラが意味…
って付けるべきなのか付けないべきなのかーと少し考えてみました。 constを付けるメリットとしてよく聞くのが、 struct Hoge { int v; void reset(int n) { v = n; } }; void f() { const int n = 100; const Hoge h = { 10 }; ... // いろいろな処理 n = 50…
昔、ネストした配列が初期化できなくて array を使うのを諦めたのですが、 http://d.hatena.ne.jp/nagoya313/20100401/1270137582 を読んで、もしかしていけるんじゃないかと試してみました。 昔は // これは OK const int ar1[3][2] = { { 1, 2 }, { 3, 4 }…
例えばこういうの。 void* p = new char[sizeof(int)]; int* pn = new (p) int(0); pn = new (p) int(42); // デストラクタを呼ばずに再構築 int の場合は POD 型なので問題ないことは分かりますが、例えばこんな場合はどうなるか。 struct hoge { ~hoge() {…
以下のソースは正常にコンパイルすることができます。 BOOST_STATIC_ASSERT((is_same<add_const<int&>::type, int&>::value)); int& に const 修飾すると int& になるということです。 これは不思議で仕方がなかったので、調べてみました。 ポインタの場合はどうなるかという</add_const<int&>…
昨日のことを適当にまとめてみる。 始まりはこのつぶやきから。 【急募】このコードがうまく動く理由 http://codepad.org/IwJ4sqA9 http://twitter.com/DecimalBloat/status/9965596581 これを見て、そういえば id:y-hamigaki さんが Boost.Wave を使ってプ…
Twitter のまとめ→並カン2010 - Togetter #namikan タグ使った人を多分大体は放り込んでみた→http://twitter.com/melponn/namikan RT を 1 回しただけって人も、並列プログラミングには興味がある人だろうと思って一緒に入れてます。 mootoh さん(Twitter)の…
アップしておきました。 Boost.Coroutine View more presentations from melpon メモメモ http://blog.think-async.com/2009/08/composed-operations-coroutines-and-code.html http://www.okws.org/doku.php?id=okws:tame http://d.hatena.ne.jp/shinichiro…
12/12 の Boost.勉強会で 30 分ほど Boost.Coroutine について話す予定です。 Boost.勉強会 : ATND 入るかどうか分からないライブラリなのでインターフェース部分の話じゃなくて実装の話をメインにやりたいと思います。 まだ資料作ってる途中ですががが
C++ の除算はどうなってるんだろう…後で調べてみよう RT @rane_hs: "割り算の結果はすべて 0 方向に切り捨てる"あとでソースを探した方がいいかも知れない : プログラミング言語 C の新機能 http://seclan.dll.jp/c99d/c99d05.htm http://twitter.com/melpon…
この辺ひどいよね! id:melponがコンパイルタイムCoroutineを作ったので近々公開予定だとか! id:DigitalGhostさんがあらわれた - Faith and Brave - C++で遊ぼう melponさんは、「俺、コンパイル時Coroutine書いたあるぜ」と豪語した 本の虫: 旅日記 めるぽ…
Boost 1.40.0 で Boost.Function が更新されました。 更新内容を見てみると、 Optimize the use of small target objects. Make Boost.Function compile under BOOST_NO_EXCEPTIONS (#2499, #2494, #2469, #2466, #2900) Various minor fixes (#2642, #2847,…
かなり面白かったので書いてみます。 代入する型が一致する場合 まずは小手調べ。簡単に代入できる場合までの処理。 Boost 1.40.0 では以下の実装になっています。 void variant_assign(const variant& rhs) { if (which_ == rhs.which_) { detail::variant:…
例えば何かの種類を表すときの表現として、int だと何を意味しているのか分からないので typedef int hoge_t; とか書いたりすることはあると思うんだけど、これだと void foo(int v); hoge_t h; foo(h); // OK とかできてしまうのがなんか微妙なので、こんな…
BREW にはいくつかの時間を取得するための関数があります。 GETTIMESECONDS() は 1980年1月6日00:00:00 からの秒数を返します。 GETTIMEMS() は 00:00:00 からの時間を取得します。 この2つの関数を組み合わせれば、1980年1月6日00:00:00からの経過時間をミ…
以前作った固定小数点数クラスですが、これを使ったプログラムを VisualStudio のデバッグ実行で値を見ようとすると、以下のように表示されます。 この数字は内部の変数が保持している数字なのですが、これは 65536 倍された値なので表現している値は 65536 …
2次元アフィン変換の高速転送(1) 2次元アフィン変換の高速転送(2) 穴あきの問題は解決したので、次は速度が遅いという問題について考えてみます。 前回のプログラム 前回のコードは // 逆行列を求める matrix inv(mat); inv.invert(); for (int y = lt.y; y …
2次元アフィン変換の高速転送(1) 前回でアフィン変換を行うための行列クラスを作ったので、今回は実際に転送を行ってみようと思います。 オレオレ用語 転送元と転送先と書くと、パッと見分かりづらいので、それぞれ src, dst と書くことにします。 とりあえ…
最近、BREW でアフィン変換を掛けながら転送する処理を書きました。 2,3回ぐらいに分けてそれを書いていきたいと思います。 固定小数点数 基本的に計算は全部固定小数で行っています。固定小数点数クラス fixed は以前書きました。 固定小数点数クラス - mel…
ある程度動いてる感じがするので公開してみます。 BREW で人柱になってくれる方を募集中です。 ソースとか いつもの場所に置いときました。 http://melpon.tank.jp/pukiwiki147/index.php?cmd=read&page=Memo%2F%CA%AA%C3%D6%2Fmoost 移植にあたって Boost.C…
アライメント系があまり理解できず、Boost.PP のマクロを展開して貼り付けるだけになってしまいました。 ただまあ、optional クラスはできる限り無駄な処理が出ないように実装したつもりです。 以下のページに置いておきました。 http://melpon.tank.jp/puki…
とりあえず boost::coroutines::coroutine は一通り移植できて、こんな感じに使えるようになってきました。 int fib(coroutine<int ()>::self& self) { // 初項 int n = 0; self.yield(n); // 2項 int m = 1; self.yield(m); // 3項以降 while (true) { int v = m + </int>…
Boost.Any は any_cast<> 内で type_info を使って変換しようとしている型が一致しているかどうかを判断してるんだけど、RTTI を使いたくないので type_info を使わずに any を実装してみる。 これは要するに型単位でユニークな値が取れればいいだけなので、…
といっても BREW で使えるようにしただけなので他の環境で使えるかどうかは知りません。 あとバイナリサイズがどうなっても知りません(といっても自分で関数オブジェクト作って格納して呼び出した場合のコードサイズと大して変わらない気もしますが)。 以…
というメタ関数が boost/function/function_base.hpp に定義されています。 これが何かというと名前の通りで、このメタ関数が true を返す場合には、boost::function に渡す関数オブジェクトが十分に小さい(かつ正しい場所にオブジェクトが配置できる)ので…
template<class Derived> class intrusive_ptr_facade { friend Derived; std::size_t ref_; friend inline void intrusive_ptr_add_ref(Derived* p) { ++static_cast<intrusive_ptr_facade<Derived>*>(p)->ref_; } friend inline void intrusive_ptr_release(Derived* p) { if (--static_cast</intrusive_ptr_facade<derived></class>
とエラー吐く。 enum { hoge }; template<class T> void foo(T) { } foo(hoge); // エラー: テンプレート引数は無名の型を参照できません ARM コンパイラの標準の準拠度が高くて目から鱗が落ちまくり。</class>
実機用のバイナリを作る方法についてはstd::vector と例外と+αを使ってる状態で実機用のバイナリを作る方法を参考にして貰うとして、ここでは Visual Studio でどうやって実機用バイナリを作るかというのを説明します。 といっても単純にカスタムビルドを使…