変数がオーバーフローしないので動作に違いが発生する時がある。例えば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 件のコメント:
コメントを投稿