C++

std::vector と例外と+αを使ってる状態で実機用のバイナリを作る方法

とりあえず実機でも一通り動くような感じになってきたので、RVCT3.0 で実機用のバイナリを作る方法をまとめてみようと思います。 事前知識 ずっと勘違いしていたのですが、BREW ではもはやグローバル変数は使えます。 elf2mod というツールが Qualcomm から…

RVCT3.0 のエラー形式

RVCT3.0 の ARM コンパイラは、ちゃんとコンパイラオプションを指定することで日本語エラーを出力してくれます。英語を直訳したような日本語な感じもするけど、それでも自分にはとっても便利。 以下のフラグを設定すると日本語になります。 --message_locale…

std::vector と例外を使ってる状態でコンパイルを通す方法

まだ実機で動かせないので、とりあえずコンパイルを通すだけ。 まず当然のごとく new と delete は再定義するべき。 void* operator new(std::size_t size) throw(std::bad_alloc) { return MALLOC(size); } void* operator new[](std::size_t size) throw(s…

衝撃の事実

ARM Information Center Table C.2 shows the major features of the language supported by this release of RealView Compilation Tools for BREW C++. Major feature ISO/IEC standard section Support Core language 1 to 13 Yes Templates 14 Templates…

--fpu none が倒せない

を include すると芋づる式に が include されて、そいつが fpu none だとコンパイルエラーになるという罠。 まあ最終的に浮動小数点使ってなければリンク時に解決するんだろうけど……なんかやだなぁ。

RVCT for BREW 3.0 キター!

そしてコンパイルエラー山盛りキター! 出たエラー・ワウォーニングとか。 Warning: 初期化リストが定義の順番じゃない 順番どおりに並べた std::bad_alloc が見つからない を include std::out_of_range が見つからない を include 以下のコードは式が左辺…

RVDS3.0 のドキュメント読み中

で、面白い記述発見。 暗黙のインクルード 暗黙のインクルードがイネーブルになっているとき、.h ファイルで宣言されたテンプレートエンティティのインスタンス生成のために定義が必要な場合は、コンパイラは対応する .cc ファイルを暗黙にインクルードして…

bind にメンバ関数を渡したときに this 以外のオブジェクトでメンバ関数を呼び出してもらう方法

C++

例えば shared_ptr を this の代わりに使うことができる。 struct Hoge { void foo() { } }; boost::shared_ptr<Hoge> h(new Hoge()); boost::bind(&Hoge::foo, h)(); boost::bind(&Hoge::foo, _1)(h); でもこれを自前のクラスにしてしまうと、途端に動作しなくな</hoge>…

BREW で bind と function が使いたい

とは思うものの、容量がかなり増えそうなので怖いところ。 bind はまあ、それぞれ用のストレージクラスを作るのと大して変わらない気はするんだけど、function は結構ごちゃごちゃした処理が多いから怖い。 ただ、function は Type Erasure のせいで大きくな…

デフォルトコンストラクタ以外で配列を構築する

C++

まあいくつか方法はあると思うのです。 デフォルトコンストラクタでとりあえず構築しておいて後でもう一度 init() とか呼んで初期化する2段階初期化とか、バッファだけ用意しておいて後で placement new をしてやる遅延初期化とか、もうあきらめて普通に new…

フォントクラス

昔に作ったライブラリのフォントクラスとあまり違わなかったり。id:melpon:20090324(文字列をテクスチャ化する)で使ってます。 BREW2.x は非対応でつ(多分スモールフォントあたりちょっと弄れば動くけど)。

IShell クラスのラッパー

主に ISHELL_CreateInstance をラップするための存在だったりするのですが。 で、RVCT3.0 は例外が使える(らしい)ので ISHELL_CreateInstance に失敗したら例外を投げてやることにします。 また、BREW API 用の interusive なスマートポインタ(brew_ptr)…

AECHAR の入力

今のライブラリは文字列クラスなんてのは作ってないのだけれども、今のプロジェクトは幸いにして使う文字列が固定なので、事前にテクスチャにして(文字列をテクスチャ化する)おくことで何とかなってる。 でも、やっぱりその固定の文字列を作るために AECHA…

自前のストリームクラスに unzip ストリームを実装する

BREW には IUnzipAStream というのがあるのだけれども、これは IUNZIPASTREAM_SetStream() で IAStream を継承したクラスを渡す必要がある。 しかし、もし何らかの理由(C++ の継承関係を持っている同期的なストリームクラスが欲しい!)で自前のストリーム…

色クラス

色クラスがあると何かと便利なので作ってみた。 struct color { byte b; byte g; byte r; byte a; color() : b(0), g(0), r(0), a(0) { } color(byte r_, byte g_, byte b_, byte a_) : r(r_), g(g_), b(b_), a(a_) { } color(uint32 v) { // リトルエンディ…

文字列をテクスチャ化する

OpenGL ES は文字列が扱えないので、文字列をテクスチャ化するためのクラスを作ってみた。 class string_texture { context_ptr context_; brew_ptr<IDisplay> display_; brew_ptr<IDIB> dib_; // 文字描画用のテンポラリ public: string_texture(const context_ptr& c, IDis</idib></idisplay>…

OpenGL ES のパレットテクスチャを作る

glGenTextures でテクスチャの番号をもらって、glBindTexture でアクティブにして、適当にパラメータを設定して、glCompressedTexImage2D で作るだけ。 GLint texture; GLenum format; int width; int height; void* buf; int bufsize; glGenTextures(1, &te…

2進桁数計算の便利さ

昔、わんくまブログで書いた [C++]二進桁数高速計算 [C++]二進桁数高速計算(2) この2進桁数を高速に求める関数 int binaryDigit(unsigned int val) { int digit = 0; digit += (((val >> 16) + 0xFFFF) & 0x10000) >> 12; digit += (((val >> digit) + 0xFF0…

固定小数点数クラス

OpenGL ES を使う上ですごく必要になってきたので作ってみた。 // 固定小数点数クラス(Q16) struct fixed { private: int32 v_; public: fixed() : v_(0) { } fixed(const fixed& f) : v_(f.v_) { } // implicit で大丈夫だよね?オーバーフローしないように…

BREW API と intrusive_ptr の親和性

は最悪だと思うのです。 C での擬似的な継承関係は C++ の継承関係とは関係が無いので、型の変換が一切できないのです。 intrusive_ptr<IShell> shell; intrusive_ptr<IBase> base; shell = base; // 当然エラー base = shell; // エラー base = static_pointer_cast<IBase>(shell)</ibase></ibase></ishell>…

キャストで型を書くのが面倒で仕方がないというあなたへ捧げるたった1つのクラス

C++

template<class T> struct auto_cast { T v; auto_cast(T v_) : v(v_) { } template<class U> operator U() { return (U)v; } }; template<class T> auto_cast<T> cast(T v) { return auto_cast<T>(v); } void func(short s) { } void main() { unsigned int n = cast(-1); func(cast(n)); } </t></t></class></class></class>…

間違ったコード

C++

class Item { private: int value_; public: Item(int v) : value_(v) { } void Initialize() { ... } }; class Hoge { private: std::vector<Item*> vec_; public: ~Hoge() { BOOST_FOREACH (Item* p, vec_) delete p; } void add(int n) { std::auto_ptr<Item> item(new</item></item*>…

namespace of melt's library

namespace anmelt { namespace horizontal { } }

Active Object

デザインパターン(マルチスレッド)まとめ 非同期のメッセージを受け取り、それを能動的に処理を行い、結果を返すパターン。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thread を使って書いたコード。

Thread-Specific Storage

デザインパターン(マルチスレッド)まとめ スレッド固有の領域を扱うパターン。 Boost.Thread には boost::thread_specific_ptr というクラスがあるので、これを使えば実現できる。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編…

Two-Phase Termination

デザインパターン(マルチスレッド)まとめ 強制的に外部から終了するのではなく、終了要求だけ出しておいて自分で終了してもらうようにするパターン。 終了要求を出して(1段階目)、実際に終了する(2段階目)という2つの段階を経て終了するので、この…

BREW の高速転送

昔、RGB565 から RGB565 へ高速に転送するルーチンを書きました。 ふと思い出したので貼り付けておきます。

BREW の高速パレット転送

昔、8 ビットインデックスのパレットから RGB565 へ高速に転送するルーチンを書きました。 ふと思い出したので貼り付けておきます。

BREW の高速アルファブレンド

スレに書き込めない(ずっと規制されてる)のでここで返信。 誰か↓の内容を教えてあげて下さい...。

BREW で MicroThread(3)

晒されてたので現れてみるテスト http://pc11.2ch.net/test/read.cgi/tech/1195449992/ 416 :403 [sage] :2008/04/11(金) 04:33:47 >>406,407,409,410,411,412,413 おまいらありがとう。 静的な変数はELF2MODでいけるってことね。 例外はRVCT3.0で>>9みた…