変数がオーバーフローしないので動作に違いが発生する時がある。例えば8ビットuint8_t型の場合に
インクリメントして255を超えたら0に戻って欲しい。変数を更新するたびに0xffでマスクすればいいのだが、
もっとうまい方法がないかと調べてみた。
ctypesモジュールのc_ubyteクラスを使えばよさそうだが、当然ながら数値エミュレートまでは
実装されていない。ちょっと試しに派生して、+=操作だけを追加してみた。
profileしてみたがメソッド変数に直接アクセスするに比べて非常に遅い。
それと、GAEではctypesは使えない。

import ctypes import types class uint8_t(ctypes.c_ubyte): def __iadd__(self, other): # += if type(other) == types.IntType: self.value += other else: self.value += other.value return self def __int__(self): # int() return self.value def __str__(self): return str(self.value)
(2012/11/14)
---
0 件のコメント:
コメントを投稿