program

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みた…

とりあえず Boost.Function で

id:melpon:20071208 でこんな関数を書いた。 template<class TObject> boost::_bi::bind_t< void, void (*)(TObject*, boost::function<void (TObject*)>), boost::_bi::list2< boost::arg<1>, boost::_bi::value< boost::function<void (TObject*)> > > > null_check_deleter(boost::function<void (TObject*)> f) { return boo</void></void></void></class>…

インターフェース版 boost::function

boost::function は静的に型が決まっていないと渡すことが出来なくて、それが不便なことがあったりするので、インターフェースを介して boost::function を呼べる virtual_function というのを作ってみた。

boost::shared_ptr の Deleter

なんかお仕事で Boost が使えそうなふいんき(←なぜか変換(ry になってきたので今のうちに Boost と戯れて慣れておこう。

シンプルで高速なアロケータ(3)

過去ログ シンプルで高速なアロケータ シンプルで高速なアロケータ(2)

シンプルで高速なアロケータ(2)

過去ログ シンプルで高速なアロケータ 使い方としてはこんな感じになると思います。 // ブロックの数は 2^15=32768 個で、1つのブロックの大きさは 2^4=16 バイト typedef SimpleAllocator<15, 4> MyAllocator; // 必要なメモリを確保して void* pMemory = …

シンプルで高速なアロケータ

細々としたメモリを動的に確保しているせいか、今やってるアプリケーションが結構遅くなってきました。 なので、小さいメモリについてはアロケータを使って確保してやろうと思っているんだけど、そこら辺の汎用的なアロケータは、超シンプルなアロケータに比…

テンプレートメタプログラミングでいろいろ書いたメモ

// ビットからバイト、バイトからビットへ単位を変換 template<uint TValue> struct bit_to_bytes { static const uint value = TValue >> 3; }; template<uint TValue> struct byte_to_bits { static const uint value = TValue << 3; }; // 2 の TValue 乗 template<int TValue> struct power2 { </int></uint></uint>…

汎用高速アルファブレンド

id:melpon:20060920 で書いたコードの 256 段階バージョンを作る必要が出てきたんだけど、さすがに手で書くのはきついので、テンプレートを使ってちょこちょこ書いてみた。 //int GetDepth(int value) //{ // int count = 0; // while ((value & 1) == 0) //…

ポインタのコンストラクタ

typedef void* PVoid; PVoid p = PVoid(); typedef void (*Func)(); Func f = Func(); こうやって書いた場合、p や f は必ず null になるようだ。 ポインタのコンストラクタは null を返すとかそういう仕様なのかな。 ところで、これを typedef せずに書く方…

ポインタが他のクラスにキャスト可能か調べる(2)

ポインタが他のクラスにキャスト可能か調べる の続き VS2005 の dynamic_cast<> が最強すぎる件。 #include <typeinfo.h> extern "C" void* __cdecl __RTDynamicCast(void* inptr, long unknown, void* SrcType, void* TargetType, int isReference); struct A { virtual</typeinfo.h>…

ポインタが他のクラスにキャスト可能か調べる

なんか dynamic_cast<> のソースを見つけたので、それを改造して作ってみた。 #include <typeinfo.h> typedef void (*v_table_ptr)(); typedef struct _cpp_object { v_table_ptr* vtable; } cpp_object; typedef struct _rtti_base_descriptor { type_info* type_descri</typeinfo.h>…

template での参照型と値型

気になったのでテスト template<class T> struct is_reference { static const bool value = false; }; template<class T> struct is_reference<T&> { static const bool value = true; }; template<class T> void Func(T value) { ::printf("%s", is_reference<T>::value ? "参照型" : "値型")</t></class></t&></class></class>…

汎用関数オブジェクトのためのパラメータ(2)

汎用関数オブジェクトのためのパラメータ IParameter はこんな感じに定義しておけばいいだろう。 class _IParameter { public: virtual _IParameter() { } }; typedef boost::shared_ptr<_IParameter> IParameter; で、引数に取る型は全て内部的に _IParameter を継承する</_iparameter>…

汎用関数オブジェクトのためのパラメータ

こんなのあったら便利だなーって感じで作り始めてみました。 今やろうとしているのは、汎用関数オブジェクトのためのインターフェースクラスを用意して、そこから任意の数のパラメータを渡して呼び出せるようにすること。 class IFunction { public: virtual…

Vistaで特定のファイル名のついた実行ファイルの実行に管理者権限が必要でないようにする方法

id:yaneurao:20071015 もうご存じかもしれませんが、 ■ 仮想化(Virtualization)を行わずに、且つファイルやレジストリへのアクセス権限も正しく行っていて、管理者権限での実行が不要な場合。もしくは実行ファイル名に "install", "setup", "update" など…

OpenGL、glBlendFunc メモ

// 通常転送(αなし) glBlendFunc(GL_SRC_ONE, GL_ZERO); // 通常転送(αあり) // つまりαブレンドのこと glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // dst 反転 glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); // src = 1 固定 // 加算(αな…

スタックオーバーフロー

http://q.hatena.ne.jp/1186284498 int LimitStackCall(DWORD stackSize, void (*StartFunc)()) { SYSTEM_INFO sysInfo; DWORD pageSize; DWORD alinedStackSize; void* pPage = NULL; void* pGuard = NULL; void* pStack = NULL; int ret = -1; // ページサ…

BREW で Java 風のクラスを作る(3)

BREW で Java 風のクラスを作る BREW で Java 風のクラスを作る(2) Java っぽく作るためには、メモリがどこからも参照されなくなったら自動的に解放されるようにする必要があります。 方法としては、 GC を実装する。 AddRef(), Release() を使用する。 スマ…

BREW で Java 風のクラスを作る(2)

BREW で Java 風のクラスを作る 前回のプログラムの問題点は、キャストするたびに QueryInterface() を呼び出さなければならず、Java の文法とはかけ離れた処理を行わないといけなかったことです。 これを自然な書き方にするためには、内部で QueryInterface…

BREW で Java 風のクラスを作る

424 :デフォルトの名無しさん :2007/05/07(月) 22:37:54 Javaのインターフェースのような振る舞いをさせたい場合はどうしたらいいんだろう? クロスキャストで質問なんだが。。。 Javaからの移植を今やってる。で以下の継承ツリーを持つクラスがある。 Obj…

OpenGL で円を描く

OpenGL で円を描くには、多角形描画を使います。 ある程度の数で多角形を描画すると、円っぽく見えるようになります。 実験したところ、40 とか 50 ぐらいに設定すると、かなり大きくしてもそれなりに円に見えるようになるようです。 ということで Yanesdk …

レジストリスクリプトの罠

COM はコンパイル時に自動的に CLSID をレジストリに登録してくれます。 この登録する内容は .rgs ファイルにレジストリスクリプトを記述することになるので、.idl の library か coclass の GUID を変更した場合には、こちらも反映させる必要があります。 …

エディットボックスを文字数ではなく byte 数で制限する

エディットボックスの文字数を制限するのはものすごく簡単で、 ::SendMessage(hWnd, EM_LIMITTEXT, (WPARAM)length, 0); こうすれば出来るのだけれども、byte 数で制限を掛けたい場合、Unicode だと標準の機能では対応できないので、エディットボックスを拡…

コネクションポイントはあまり使うべきではない

コネクションポイントはあまり使用しない方がいいらしいです。 何でかというと、コネクションポイントを接続するために5回の往復が必要になるし、イベントを発行する際に、全てに対してイベントを送信することになるので、無駄な往復が出てしまい、効率が良…

operator,()

C++ にはいろんな operator があるけど、その中に operator,() というのがあります。 それを使えば、こんなプログラムが書けます。 CString operator,(const CString& str1, const CString& str2) { return str1 + str2; } CString str1(_T("あい")); CStrin…

LPCTSTR と const LPTSTR

LPCTSTR と const LPTSTR は意味が違うということに初めて気が付きました。 void foo(const LPTSTR str) { str[0] = '\0'; } これ、const だからコンパイルでエラーになるに決まってると思ってたら、無事通りました。 でも、 void foo(LPCTSTR str) { str[0]…

MAKEINTRESOURCE() マクロ

MAKEINTRESOURCE() マクロは、リソース ID に関連づけられた LPTSTR へのポインタを返してくれるのだと思っていたのですが、どうやら違うようです。 こんな定義になってました。 #define IS_INTRESOURCE(_r) ((((ULONG_PTR)(_r)) >> 16) == 0) #define MAKEI…

CAtlExeModuleT<> を使用したプロジェクトでの初期化

VS2005 で COM の exe サーバのプロジェクトを作ると、 class CHogeModule : public CAtlExeModuleT< CHogeModule > { public : DECLARE_LIBID(LIBID_HogeLib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_HOGE, "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}") }; C…

STA でのマーシャリング(2)

STA でのマーシャリング うへー、ものすごい間違ってましたorz いろいろ調べてみた結果、デッドロックは一切起こってなかったです。 自分はいろいろ勘違いしていたようで、COM 側(Source って言うらしい)から Sink 側を呼び出したとき、Sink 側のメッセー…